Please wait while IPFS with TiddlyWiki is loading...
v0.3.0-200606384
show
hide
hide
{
"tiddlers": {
"$:/Acknowledgements": {
"title": "$:/Acknowledgements",
"text": "TiddlyWiki incorporates code from these fine OpenSource projects:\n\n* [[The Stanford Javascript Crypto Library|http://bitwiseshiftleft.github.io/sjcl/]]\n* [[The Jasmine JavaScript Test Framework|http://pivotal.github.io/jasmine/]]\n* [[Normalize.css by Nicolas Gallagher|http://necolas.github.io/normalize.css/]]\n\nAnd media from these projects:\n\n* World flag icons from [[Wikipedia|http://commons.wikimedia.org/wiki/Category:SVG_flags_by_country]]\n"
},
"$:/core/copyright.txt": {
"title": "$:/core/copyright.txt",
"type": "text/plain",
"text": "TiddlyWiki created by Jeremy Ruston, (jeremy [at] jermolene [dot] com)\n\nCopyright (c) 2004-2007, Jeremy Ruston\nCopyright (c) 2007-2020, UnaMesa Association\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\n* Neither the name of the copyright holder nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
},
"$:/core/icon": {
"title": "$:/core/icon",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\"><path d=\"M64 0l54.56 32v64L64 128 9.44 96V32L64 0zm21.127 95.408c-3.578-.103-5.15-.094-6.974-3.152l-1.42.042c-1.653-.075-.964-.04-2.067-.097-1.844-.07-1.548-1.86-1.873-2.8-.52-3.202.687-6.43.65-9.632-.014-1.14-1.593-5.17-2.157-6.61-1.768.34-3.546.406-5.34.497-4.134-.01-8.24-.527-12.317-1.183-.8 3.35-3.16 8.036-1.21 11.44 2.37 3.52 4.03 4.495 6.61 4.707 2.572.212 3.16 3.18 2.53 4.242-.55.73-1.52.864-2.346 1.04l-1.65.08c-1.296-.046-2.455-.404-3.61-.955-1.93-1.097-3.925-3.383-5.406-5.024.345.658.55 1.938.24 2.53-.878 1.27-4.665 1.26-6.4.47-1.97-.89-6.73-7.162-7.468-11.86 1.96-3.78 4.812-7.07 6.255-11.186-3.146-2.05-4.83-5.384-4.61-9.16l.08-.44c-3.097.59-1.49.37-4.82.628-10.608-.032-19.935-7.37-14.68-18.774.34-.673.664-1.287 1.243-.994.466.237.4 1.18.166 2.227-3.005 13.627 11.67 13.732 20.69 11.21.89-.25 2.67-1.936 3.905-2.495 2.016-.91 4.205-1.282 6.376-1.55 5.4-.63 11.893 2.276 15.19 2.37 3.3.096 7.99-.805 10.87-.615 2.09.098 4.143.483 6.16 1.03 1.306-6.49 1.4-11.27 4.492-12.38 1.814.293 3.213 2.818 4.25 4.167 2.112-.086 4.12.46 6.115 1.066 3.61-.522 6.642-2.593 9.833-4.203-3.234 2.69-3.673 7.075-3.303 11.127.138 2.103-.444 4.386-1.164 6.54-1.348 3.507-3.95 7.204-6.97 7.014-1.14-.036-1.805-.695-2.653-1.4-.164 1.427-.81 2.7-1.434 3.96-1.44 2.797-5.203 4.03-8.687 7.016-3.484 2.985 1.114 13.65 2.23 15.594 1.114 1.94 4.226 2.652 3.02 4.406-.37.58-.936.785-1.54 1.01l-.82.11zm-40.097-8.85l.553.14c.694-.27 2.09.15 2.83.353-1.363-1.31-3.417-3.24-4.897-4.46-.485-1.47-.278-2.96-.174-4.46l.02-.123c-.582 1.205-1.322 2.376-1.72 3.645-.465 1.71 2.07 3.557 3.052 4.615l.336.3z\" fill-rule=\"evenodd\"/></svg>"
},
"$:/core/images/add-comment": {
"title": "$:/core/images/add-comment",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-add-comment tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M56 56H36a8 8 0 100 16h20v20a8 8 0 1016 0V72h20a8 8 0 100-16H72V36a8 8 0 10-16 0v20zm-12.595 58.362c-6.683 7.659-20.297 12.903-36.006 12.903-2.196 0-4.35-.102-6.451-.3 9.652-3.836 17.356-12.24 21.01-22.874C8.516 94.28 0 79.734 0 63.5 0 33.953 28.206 10 63 10s63 23.953 63 53.5S97.794 117 63 117c-6.841 0-13.428-.926-19.595-2.638z\"/></svg>"
},
"$:/core/images/advanced-search-button": {
"title": "$:/core/images/advanced-search-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-advanced-search-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M74.565 87.985A47.776 47.776 0 0148 96C21.49 96 0 74.51 0 48S21.49 0 48 0s48 21.49 48 48c0 9.854-2.97 19.015-8.062 26.636l34.347 34.347a9.443 9.443 0 010 13.36 9.446 9.446 0 01-13.36 0l-34.36-34.358zM48 80c17.673 0 32-14.327 32-32 0-17.673-14.327-32-32-32-17.673 0-32 14.327-32 32 0 17.673 14.327 32 32 32z\"/><circle cx=\"48\" cy=\"48\" r=\"8\"/><circle cx=\"28\" cy=\"48\" r=\"8\"/><circle cx=\"68\" cy=\"48\" r=\"8\"/></g></svg>"
},
"$:/core/images/auto-height": {
"title": "$:/core/images/auto-height",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-auto-height tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M67.987 114.356l-.029-14.477a4 4 0 00-2.067-3.494l-15.966-8.813-1.933 7.502H79.9c4.222 0 5.564-5.693 1.786-7.58L49.797 71.572 48.01 79.15h31.982c4.217 0 5.564-5.682 1.795-7.575L49.805 55.517l-1.795 7.575h31.982c4.212 0 5.563-5.67 1.805-7.57l-16.034-8.105 2.195 3.57V35.614l9.214 9.213a4 4 0 105.656-5.656l-16-16a4 4 0 00-5.656 0l-16 16a4 4 0 105.656 5.656l9.13-9.13v15.288a4 4 0 002.195 3.57l16.035 8.106 1.804-7.57H48.01c-4.217 0-5.564 5.682-1.795 7.574l31.982 16.059 1.795-7.575H48.01c-4.222 0-5.564 5.693-1.787 7.579l31.89 15.923 1.787-7.578H47.992c-4.133 0-5.552 5.504-1.933 7.501l15.966 8.813-2.067-3.494.029 14.436-9.159-9.158a4 4 0 00-5.656 5.656l16 16a4 4 0 005.656 0l16-16a4 4 0 10-5.656-5.656l-9.185 9.184zM16 20h96a4 4 0 100-8H16a4 4 0 100 8z\"/></svg>"
},
"$:/core/images/blank": {
"title": "$:/core/images/blank",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-blank tc-image-button\" viewBox=\"0 0 128 128\"/>"
},
"$:/core/images/bold": {
"title": "$:/core/images/bold",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-bold tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M41.146 51.81V21.87h26.353c2.51 0 4.93.21 7.26.628 2.33.418 4.392 1.165 6.185 2.24 1.793 1.076 3.227 2.57 4.302 4.482 1.076 1.913 1.614 4.363 1.614 7.35 0 5.379-1.613 9.263-4.84 11.653-3.227 2.39-7.35 3.586-12.37 3.586H41.146zM13 0v128h62.028a65.45 65.45 0 0016.762-2.151c5.438-1.434 10.278-3.645 14.52-6.633 4.244-2.988 7.62-6.842 10.13-11.563 2.51-4.721 3.764-10.308 3.764-16.762 0-8.008-1.942-14.85-5.826-20.527-3.884-5.677-9.77-9.65-17.658-11.921 5.737-2.75 10.069-6.275 12.997-10.577 2.928-4.303 4.392-9.681 4.392-16.135 0-5.976-.986-10.995-2.958-15.059-1.972-4.063-4.75-7.32-8.336-9.77-3.585-2.45-7.888-4.213-12.907-5.289C84.888.538 79.33 0 73.235 0H13zm28.146 106.129V70.992H71.8c6.095 0 10.995 1.404 14.7 4.212 3.705 2.81 5.558 7.5 5.558 14.073 0 3.347-.568 6.096-1.703 8.247-1.136 2.151-2.66 3.854-4.572 5.11-1.912 1.254-4.123 2.15-6.633 2.688-2.51.538-5.139.807-7.888.807H41.146z\"/></svg>"
},
"$:/core/images/cancel-button": {
"title": "$:/core/images/cancel-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-cancel-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M64 76.314l-16.97 16.97a7.999 7.999 0 01-11.314 0c-3.118-3.118-3.124-8.19 0-11.313L52.686 65l-16.97-16.97a7.999 7.999 0 010-11.314c3.118-3.118 8.19-3.124 11.313 0L64 53.686l16.97-16.97a7.999 7.999 0 0111.314 0c3.118 3.118 3.124 8.19 0 11.313L75.314 65l16.97 16.97a7.999 7.999 0 010 11.314c-3.118 3.118-8.19 3.124-11.313 0L64 76.314zM64 129c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64C28.654 1 0 29.654 0 65c0 35.346 28.654 64 64 64zm0-16c26.51 0 48-21.49 48-48S90.51 17 64 17 16 38.49 16 65s21.49 48 48 48z\"/></svg>"
},
"$:/core/images/chevron-down": {
"title": "$:/core/images/chevron-down",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-chevron-down tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M64.053 85.456a7.889 7.889 0 01-5.6-2.316L2.473 27.16a7.92 7.92 0 010-11.196c3.086-3.085 8.105-3.092 11.196 0L64.05 66.344l50.382-50.382a7.92 7.92 0 0111.195 0c3.085 3.086 3.092 8.105 0 11.196l-55.98 55.98a7.892 7.892 0 01-5.595 2.317z\"/><path d=\"M64.053 124.069a7.889 7.889 0 01-5.6-2.316l-55.98-55.98a7.92 7.92 0 010-11.196c3.086-3.085 8.105-3.092 11.196 0l50.382 50.382 50.382-50.382a7.92 7.92 0 0111.195 0c3.085 3.086 3.092 8.104 0 11.196l-55.98 55.98a7.892 7.892 0 01-5.595 2.316z\"/></g></svg>"
},
"$:/core/images/chevron-left": {
"title": "$:/core/images/chevron-left",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-chevron-left tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M47.544 64.053c0-2.027.77-4.054 2.316-5.6l55.98-55.98a7.92 7.92 0 0111.196 0c3.085 3.086 3.092 8.105 0 11.196L66.656 64.05l50.382 50.382a7.92 7.92 0 010 11.195c-3.086 3.085-8.105 3.092-11.196 0l-55.98-55.98a7.892 7.892 0 01-2.317-5.595z\"/><path d=\"M8.931 64.053c0-2.027.77-4.054 2.316-5.6l55.98-55.98a7.92 7.92 0 0111.196 0c3.085 3.086 3.092 8.105 0 11.196L28.041 64.05l50.382 50.382a7.92 7.92 0 010 11.195c-3.086 3.085-8.104 3.092-11.196 0l-55.98-55.98a7.892 7.892 0 01-2.316-5.595z\"/></g></svg>"
},
"$:/core/images/chevron-right": {
"title": "$:/core/images/chevron-right",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-chevron-right tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M83.456 63.947c0 2.027-.77 4.054-2.316 5.6l-55.98 55.98a7.92 7.92 0 01-11.196 0c-3.085-3.086-3.092-8.105 0-11.196L64.344 63.95 13.963 13.567a7.92 7.92 0 010-11.195c3.086-3.085 8.105-3.092 11.196 0l55.98 55.98a7.892 7.892 0 012.317 5.595z\"/><path d=\"M122.069 63.947c0 2.027-.77 4.054-2.316 5.6l-55.98 55.98a7.92 7.92 0 01-11.196 0c-3.085-3.086-3.092-8.105 0-11.196l50.382-50.382-50.382-50.382a7.92 7.92 0 010-11.195c3.086-3.085 8.104-3.092 11.196 0l55.98 55.98a7.892 7.892 0 012.316 5.595z\"/></g></svg>"
},
"$:/core/images/chevron-up": {
"title": "$:/core/images/chevron-up",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-chevron-up tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M63.947 44.544c2.027 0 4.054.77 5.6 2.316l55.98 55.98a7.92 7.92 0 010 11.196c-3.086 3.085-8.105 3.092-11.196 0L63.95 63.656l-50.382 50.382a7.92 7.92 0 01-11.195 0c-3.085-3.086-3.092-8.105 0-11.196l55.98-55.98a7.892 7.892 0 015.595-2.317z\"/><path d=\"M63.947 5.931c2.027 0 4.054.77 5.6 2.316l55.98 55.98a7.92 7.92 0 010 11.196c-3.086 3.085-8.105 3.092-11.196 0L63.95 25.041 13.567 75.423a7.92 7.92 0 01-11.195 0c-3.085-3.086-3.092-8.104 0-11.196l55.98-55.98a7.892 7.892 0 015.595-2.316z\"/></g></svg>"
},
"$:/core/images/clone-button": {
"title": "$:/core/images/clone-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-clone-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M32.265 96v24.002A7.996 7.996 0 0040.263 128h79.74a7.996 7.996 0 007.997-7.998v-79.74a7.996 7.996 0 00-7.998-7.997H96V48h12.859a2.99 2.99 0 012.994 2.994v57.865a2.99 2.99 0 01-2.994 2.994H50.994A2.99 2.99 0 0148 108.859V96H32.265z\"/><path d=\"M40 56h-7.993C27.588 56 24 52.418 24 48c0-4.41 3.585-8 8.007-8H40v-7.993C40 27.588 43.582 24 48 24c4.41 0 8 3.585 8 8.007V40h7.993C68.412 40 72 43.582 72 48c0 4.41-3.585 8-8.007 8H56v7.993C56 68.412 52.418 72 48 72c-4.41 0-8-3.585-8-8.007V56zM8 0C3.58 0 0 3.588 0 8v80c0 4.419 3.588 8 8 8h80c4.419 0 8-3.588 8-8V8c0-4.419-3.588-8-8-8H8zM19 16A2.997 2.997 0 0016 19.001v57.998A2.997 2.997 0 0019.001 80h57.998A2.997 2.997 0 0080 76.999V19.001A2.997 2.997 0 0076.999 16H19.001z\"/></g></svg>"
},
"$:/core/images/close-all-button": {
"title": "$:/core/images/close-all-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-close-all-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M28 111.314l-14.144 14.143a8 8 0 01-11.313-11.313L16.686 100 2.543 85.856a8 8 0 0111.313-11.313L28 88.686l14.144-14.143a8 8 0 0111.313 11.313L39.314 100l14.143 14.144a8 8 0 01-11.313 11.313L28 111.314zM28 39.314L13.856 53.457A8 8 0 012.543 42.144L16.686 28 2.543 13.856A8 8 0 0113.856 2.543L28 16.686 42.144 2.543a8 8 0 0111.313 11.313L39.314 28l14.143 14.144a8 8 0 01-11.313 11.313L28 39.314zM100 39.314L85.856 53.457a8 8 0 01-11.313-11.313L88.686 28 74.543 13.856A8 8 0 0185.856 2.543L100 16.686l14.144-14.143a8 8 0 0111.313 11.313L111.314 28l14.143 14.144a8 8 0 01-11.313 11.313L100 39.314zM100 111.314l-14.144 14.143a8 8 0 01-11.313-11.313L88.686 100 74.543 85.856a8 8 0 0111.313-11.313L100 88.686l14.144-14.143a8 8 0 0111.313 11.313L111.314 100l14.143 14.144a8 8 0 01-11.313 11.313L100 111.314z\"/></g></svg>"
},
"$:/core/images/close-button": {
"title": "$:/core/images/close-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-close-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M65.086 75.41l-50.113 50.113c-3.121 3.121-8.192 3.126-11.316.002-3.118-3.118-3.123-8.19.002-11.316l50.114-50.114L3.659 13.982C.538 10.86.533 5.79 3.657 2.666c3.118-3.118 8.19-3.123 11.316.002l50.113 50.114L115.2 2.668c3.121-3.121 8.192-3.126 11.316-.002 3.118 3.118 3.123 8.19-.002 11.316L76.4 64.095l50.114 50.114c3.121 3.121 3.126 8.192.002 11.316-3.118 3.118-8.19 3.123-11.316-.002L65.086 75.409z\"/></svg>"
},
"$:/core/images/close-others-button": {
"title": "$:/core/images/close-others-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-close-others-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M64 128c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64C28.654 0 0 28.654 0 64c0 35.346 28.654 64 64 64zm0-16c26.51 0 48-21.49 48-48S90.51 16 64 16 16 37.49 16 64s21.49 48 48 48zm0-16c17.673 0 32-14.327 32-32 0-17.673-14.327-32-32-32-17.673 0-32 14.327-32 32 0 17.673 14.327 32 32 32zm0-16c8.837 0 16-7.163 16-16s-7.163-16-16-16-16 7.163-16 16 7.163 16 16 16z\"/></svg>"
},
"$:/core/images/copy-clipboard": {
"title": "$:/core/images/copy-clipboard",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-copy-clipboard tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"33\" height=\"8\" x=\"40\" y=\"40\" rx=\"4\"/><rect width=\"17\" height=\"8\" x=\"40\" y=\"82\" rx=\"4\"/><rect width=\"17\" height=\"8\" x=\"40\" y=\"54\" rx=\"4\"/><rect width=\"33\" height=\"8\" x=\"40\" y=\"96\" rx=\"4\"/><rect width=\"12\" height=\"8\" x=\"40\" y=\"68\" rx=\"4\"/><path d=\"M40 16H24c-4.419 0-8 3.59-8 8a8.031 8.031 0 000 .01v95.98a8.03 8.03 0 000 .01c0 4.41 3.581 8 8 8h80a7.975 7.975 0 005.652-2.34 7.958 7.958 0 002.348-5.652v-16.016c0-4.414-3.582-7.992-8-7.992-4.41 0-8 3.578-8 7.992V112H32V32h64v8.008C96 44.422 99.582 48 104 48c4.41 0 8-3.578 8-7.992V23.992a7.963 7.963 0 00-2.343-5.651A7.995 7.995 0 00104.001 16H88c0-4.41-3.585-8-8.007-8H48.007C43.588 8 40 11.582 40 16zm4-1.004A4.001 4.001 0 0148 11h32c2.21 0 4 1.797 4 3.996v4.008A4.001 4.001 0 0180 23H48c-2.21 0-4-1.797-4-3.996v-4.008z\"/><rect width=\"66\" height=\"16\" x=\"62\" y=\"64\" rx=\"8\"/><path d=\"M84.657 82.343l-16-16v11.314l16-16a8 8 0 10-11.314-11.314l-16 16a8 8 0 000 11.314l16 16a8 8 0 1011.314-11.314z\"/></g></svg>"
},
"$:/core/images/delete-button": {
"title": "$:/core/images/delete-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-delete-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\" transform=\"translate(12)\"><rect width=\"105\" height=\"16\" y=\"11\" rx=\"8\"/><rect width=\"48\" height=\"16\" x=\"28\" rx=\"8\"/><rect width=\"16\" height=\"112\" x=\"8\" y=\"16\" rx=\"8\"/><rect width=\"88\" height=\"16\" x=\"8\" y=\"112\" rx=\"8\"/><rect width=\"16\" height=\"112\" x=\"80\" y=\"16\" rx=\"8\"/><rect width=\"16\" height=\"112\" x=\"56\" y=\"16\" rx=\"8\"/><rect width=\"16\" height=\"112\" x=\"32\" y=\"16\" rx=\"8\"/></g></svg>"
},
"$:/core/images/done-button": {
"title": "$:/core/images/done-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-done-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M42.26 111.032c-2.051.001-4.103-.78-5.668-2.345L2.662 74.758a8 8 0 01-.005-11.32c3.118-3.117 8.192-3.12 11.32.007l28.278 28.278 72.124-72.124a8.002 8.002 0 0111.314-.001c3.118 3.118 3.124 8.19 0 11.315l-77.78 77.78a7.978 7.978 0 01-5.658 2.343z\"/></svg>"
},
"$:/core/images/down-arrow": {
"title": "$:/core/images/down-arrow",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-down-arrow tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M64.177 100.069a7.889 7.889 0 01-5.6-2.316l-55.98-55.98a7.92 7.92 0 010-11.196c3.086-3.085 8.105-3.092 11.196 0l50.382 50.382 50.382-50.382a7.92 7.92 0 0111.195 0c3.086 3.086 3.092 8.104 0 11.196l-55.98 55.98a7.892 7.892 0 01-5.595 2.316z\"/></svg>"
},
"$:/core/images/download-button": {
"title": "$:/core/images/download-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-download-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M64 128c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64C28.654 0 0 28.654 0 64c0 35.346 28.654 64 64 64zm0-16c26.51 0 48-21.49 48-48S90.51 16 64 16 16 37.49 16 64s21.49 48 48 48z\" class=\"tc-image-download-button-ring\"/><path d=\"M34.35 66.43l26.892 27.205a4.57 4.57 0 006.516 0L94.65 66.43a4.7 4.7 0 000-6.593 4.581 4.581 0 00-3.258-1.365h-8.46c-2.545 0-4.608-2.087-4.608-4.661v-15.15c0-2.575-2.063-4.662-4.608-4.662H55.284c-2.545 0-4.608 2.087-4.608 4.662v15.15c0 2.574-2.063 4.661-4.608 4.661h-8.46c-2.545 0-4.608 2.087-4.608 4.662a4.69 4.69 0 001.35 3.296z\"/></g></svg>"
},
"$:/core/images/edit-button": {
"title": "$:/core/images/edit-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-edit-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M95.627 10.059l-5.656 5.657 11.313 11.313 5.657-5.656-11.314-11.314zm5.657-5.657l1.966-1.966c3.123-3.122 8.194-3.129 11.319-.005 3.117 3.118 3.122 8.192-.005 11.32l-1.966 1.965-11.314-11.314zm-16.97 16.97l-60.25 60.25a8.12 8.12 0 00-.322.342c-.1.087-.198.179-.295.275-5.735 5.735-10.702 22.016-10.702 22.016s16.405-5.09 22.016-10.702c.095-.096.186-.193.272-.292a8.12 8.12 0 00.345-.325l60.25-60.25-11.314-11.313zM35.171 124.19c6.788-.577 13.898-2.272 23.689-5.348 1.825-.573 3.57-1.136 6.336-2.04 16-5.226 21.877-6.807 28.745-7.146 8.358-.413 13.854 2.13 17.58 8.699a4 4 0 006.959-3.946c-5.334-9.406-13.745-13.296-24.933-12.744-7.875.39-14.057 2.052-30.835 7.533-2.739.894-4.46 1.45-6.25 2.012-19.46 6.112-30.77 7.072-39.597 1.747a4 4 0 10-4.132 6.85c6.333 3.82 13.754 5.12 22.438 4.383z\"/></g></svg>"
},
"$:/core/images/erase": {
"title": "$:/core/images/erase",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-erase tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M60.087 127.996l63.015-63.015c6.535-6.535 6.528-17.115-.003-23.646L99.466 17.702c-6.539-6.538-17.117-6.532-23.646-.003L4.898 88.62c-6.535 6.534-6.528 17.115.003 23.646l15.73 15.73h39.456zm-34.95-7.313l-14.324-14.325c-3.267-3.268-3.268-8.564-.008-11.824L46.269 59.07l35.462 35.462-26.15 26.15H25.137z\"/></svg>"
},
"$:/core/images/excise": {
"title": "$:/core/images/excise",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-excise tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M56 107.314l-2.343 2.343a8 8 0 11-11.314-11.314l16-16a8 8 0 0111.314 0l16 16a8 8 0 11-11.314 11.314L72 107.314v14.284c0 3.536-3.582 6.402-8 6.402s-8-2.866-8-6.402v-14.284zM0 40.007C0 35.585 3.59 32 8 32c4.418 0 8 3.588 8 8.007v31.986C16 76.415 12.41 80 8 80c-4.418 0-8-3.588-8-8.007V40.007zm32 0C32 35.585 35.59 32 40 32c4.418 0 8 3.588 8 8.007v31.986C48 76.415 44.41 80 40 80c-4.418 0-8-3.588-8-8.007V40.007zm48 0C80 35.585 83.59 32 88 32c4.418 0 8 3.588 8 8.007v31.986C96 76.415 92.41 80 88 80c-4.418 0-8-3.588-8-8.007V40.007zm-24-32C56 3.585 59.59 0 64 0c4.418 0 8 3.588 8 8.007v31.986C72 44.415 68.41 48 64 48c-4.418 0-8-3.588-8-8.007V8.007zm56 32c0-4.422 3.59-8.007 8-8.007 4.418 0 8 3.588 8 8.007v31.986c0 4.422-3.59 8.007-8 8.007-4.418 0-8-3.588-8-8.007V40.007z\"/></svg>"
},
"$:/core/images/export-button": {
"title": "$:/core/images/export-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-export-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M8.003 128H119.993a7.984 7.984 0 005.664-2.349v.007A7.975 7.975 0 00128 120V56c0-4.418-3.59-8-8-8-4.418 0-8 3.58-8 8v56H16V56c0-4.418-3.59-8-8-8-4.418 0-8 3.58-8 8v64c0 4.418 3.59 8 8 8h.003zm48.62-100.689l-8.965 8.966c-3.125 3.125-8.195 3.13-11.319.005-3.118-3.118-3.122-8.192.005-11.319L58.962 2.346A7.986 7.986 0 0164.625 0l-.006.002c2.05-.001 4.102.78 5.666 2.344l22.618 22.617c3.124 3.125 3.129 8.195.005 11.319-3.118 3.118-8.192 3.122-11.319-.005l-8.965-8.966v61.256c0 4.411-3.582 8-8 8-4.41 0-8-3.582-8-8V27.311z\"/></svg>"
},
"$:/core/images/file": {
"title": "$:/core/images/file",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-file tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M111.968 30.5H112V120a8 8 0 01-8 8H24a8 8 0 01-8-8V8a8 8 0 018-8h57v.02a7.978 7.978 0 015.998 2.337l22.627 22.627a7.975 7.975 0 012.343 5.516zM81 8H24v112h80V30.5H89c-4.418 0-8-3.578-8-8V8z\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"36\" rx=\"4\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"52\" rx=\"4\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"68\" rx=\"4\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"84\" rx=\"4\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"100\" rx=\"4\"/><rect width=\"40\" height=\"8\" x=\"32\" y=\"20\" rx=\"4\"/></svg>"
},
"$:/core/images/fixed-height": {
"title": "$:/core/images/fixed-height",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-fixed-height tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M60 35.657l-9.172 9.171a4 4 0 11-5.656-5.656l16-16a4 4 0 015.656 0l16 16a4 4 0 01-5.656 5.656L68 35.657v57.686l9.172-9.171a4 4 0 115.656 5.656l-16 16a4 4 0 01-5.656 0l-16-16a4 4 0 115.656-5.656L60 93.343V35.657zM16 116h96a4 4 0 100-8H16a4 4 0 100 8zm0-96h96a4 4 0 100-8H16a4 4 0 100 8z\"/></svg>"
},
"$:/core/images/fold-all-button": {
"title": "$:/core/images/fold-all-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-fold-all tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"128\" height=\"16\" rx=\"8\"/><rect width=\"128\" height=\"16\" y=\"64\" rx=\"8\"/><path d=\"M64.03 20.004c-2.05 0-4.102.78-5.667 2.344L35.746 44.966c-3.125 3.124-3.13 8.194-.005 11.318 3.118 3.118 8.192 3.122 11.319-.005l16.965-16.965 16.966 16.965c3.124 3.125 8.194 3.13 11.318.005 3.118-3.118 3.122-8.191-.005-11.318L69.687 22.348a7.986 7.986 0 00-5.663-2.346zM64.03 85.002c-2.05-.001-4.102.78-5.667 2.344l-22.617 22.617c-3.125 3.125-3.13 8.195-.005 11.319 3.118 3.118 8.192 3.122 11.319-.005l16.965-16.966 16.966 16.966c3.124 3.125 8.194 3.13 11.318.005 3.118-3.118 3.122-8.192-.005-11.319L69.687 87.346A7.986 7.986 0 0064.024 85z\"/></g></svg>"
},
"$:/core/images/fold-button": {
"title": "$:/core/images/fold-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-fold tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"128\" height=\"16\" rx=\"8\"/><path d=\"M64.03 25.004c-2.05 0-4.102.78-5.667 2.344L35.746 49.966c-3.125 3.124-3.13 8.194-.005 11.318 3.118 3.118 8.192 3.122 11.319-.005l16.965-16.965 16.966 16.965c3.124 3.125 8.194 3.13 11.318.005 3.118-3.118 3.122-8.191-.005-11.318L69.687 27.348a7.986 7.986 0 00-5.663-2.346zM64.005 67.379c-2.05 0-4.102.78-5.666 2.344L35.722 92.34c-3.125 3.125-3.13 8.195-.006 11.32 3.118 3.117 8.192 3.121 11.32-.006L64 86.69l16.965 16.965c3.125 3.125 8.195 3.13 11.319.005 3.118-3.118 3.122-8.192-.005-11.319L69.663 69.723A7.986 7.986 0 0064 67.377z\"/></g></svg>"
},
"$:/core/images/fold-others-button": {
"title": "$:/core/images/fold-others-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-fold-others tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"128\" height=\"16\" y=\"56.031\" rx=\"8\"/><path d=\"M86.632 79.976c-2.05 0-4.102.78-5.666 2.345L64 99.286 47.034 82.321a7.986 7.986 0 00-5.662-2.346l.005.001c-2.05 0-4.102.78-5.666 2.345l-22.618 22.617c-3.124 3.125-3.129 8.195-.005 11.319 3.118 3.118 8.192 3.122 11.319-.005l16.966-16.966 16.965 16.966a7.986 7.986 0 005.663 2.346l-.005-.002c2.05 0 4.102-.78 5.666-2.344l16.965-16.966 16.966 16.966c3.125 3.124 8.194 3.129 11.319.005 3.118-3.118 3.122-8.192-.005-11.319L92.289 82.321a7.986 7.986 0 00-5.663-2.346zM86.7 48.024c-2.05 0-4.102-.78-5.666-2.345L64.07 28.714 47.103 45.679a7.986 7.986 0 01-5.663 2.346l.005-.001c-2.05 0-4.101-.78-5.666-2.345L13.162 23.062c-3.125-3.125-3.13-8.195-.005-11.319 3.118-3.118 8.192-3.122 11.319.005L41.44 28.714l16.966-16.966a7.986 7.986 0 015.662-2.346l-.005.002c2.05 0 4.102.78 5.666 2.344l16.966 16.966 16.966-16.966c3.124-3.124 8.194-3.129 11.318-.005 3.118 3.118 3.122 8.192-.005 11.319L92.358 45.679a7.986 7.986 0 01-5.663 2.346z\"/></g></svg>"
},
"$:/core/images/folder": {
"title": "$:/core/images/folder",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-folder tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M55.694 128H8C3.58 128 0 124.414 0 119.996V48.004C0 43.584 3.584 40 7.999 40H16v-8c0-4.418 3.578-8 8-8h32a8 8 0 018 8v8h40.001c4.418 0 7.999 3.586 7.999 8.004V59.83l-8-.082v-7.749A4 4 0 0099.997 48H56V36c0-2.21-1.793-4-4.004-4H28.004A4 4 0 0024 36v12H12.003A4 4 0 008 52v64a4 4 0 004.003 4h46.76l-3.069 8z\"/><path d=\"M23.873 55.5h96.003c4.417 0 7.004 4.053 5.774 9.063l-13.344 54.374c-1.228 5.005-5.808 9.063-10.223 9.063H6.08c-4.417 0-7.003-4.053-5.774-9.063L13.65 64.563c1.228-5.005 5.808-9.063 10.223-9.063zm1.78 8.5h87.994c2.211 0 3.504 2.093 2.891 4.666l-11.12 46.668c-.614 2.577-2.902 4.666-5.115 4.666H12.31c-2.211 0-3.504-2.093-2.891-4.666l11.12-46.668C21.152 66.09 23.44 64 25.653 64z\"/></g></svg>"
},
"$:/core/images/full-screen-button": {
"title": "$:/core/images/full-screen-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-full-screen-button tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M0 8a8 8 0 018-8h32a8 8 0 110 16H16v24a8 8 0 11-16 0V8zM128 120a8 8 0 01-8 8H88a8 8 0 110-16h24V88a8 8 0 1116 0v32zM8 128a8 8 0 01-8-8V88a8 8 0 1116 0v24h24a8 8 0 110 16H8zM120 0a8 8 0 018 8v32a8 8 0 11-16 0V16H88a8 8 0 110-16h32z\"/></svg>"
},
"$:/core/images/github": {
"title": "$:/core/images/github",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-github tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M63.938 1.607c-35.336 0-63.994 28.69-63.994 64.084 0 28.312 18.336 52.329 43.768 60.802 3.202.59 4.37-1.388 4.37-3.088 0-1.518-.056-5.55-.087-10.897-17.802 3.871-21.558-8.591-21.558-8.591-2.911-7.404-7.108-9.375-7.108-9.375-5.81-3.973.44-3.895.44-3.895 6.424.453 9.803 6.606 9.803 6.606 5.709 9.791 14.981 6.963 18.627 5.322.582-4.138 2.236-6.963 4.063-8.564-14.211-1.617-29.153-7.117-29.153-31.672 0-6.995 2.495-12.718 6.589-17.195-.66-1.621-2.856-8.14.629-16.96 0 0 5.37-1.722 17.597 6.57 5.104-1.424 10.58-2.132 16.022-2.16 5.438.028 10.91.736 16.022 2.16 12.22-8.292 17.582-6.57 17.582-6.57 3.493 8.82 1.297 15.339.64 16.96 4.102 4.477 6.578 10.2 6.578 17.195 0 24.618-14.966 30.035-29.22 31.62 2.295 1.98 4.342 5.89 4.342 11.87 0 8.564-.079 15.476-.079 17.576 0 1.715 1.155 3.71 4.4 3.084 25.413-8.493 43.733-32.494 43.733-60.798 0-35.394-28.657-64.084-64.006-64.084\"/></svg>"
},
"$:/core/images/gitter": {
"title": "$:/core/images/gitter",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-gitter tc-image-button\" viewBox=\"0 0 18 25\"><path d=\"M15 5h2v10h-2zM10 5h2v20h-2zM5 5h2v20H5zM0 0h2v15H0z\"/></svg>"
},
"$:/core/images/globe": {
"title": "$:/core/images/globe",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-globe tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M72.811 37.128v2.554c0 2.196.978 6.881 0 8.832-1.466 2.928-4.65 3.54-6.394 5.867-1.182 1.577-4.618 10.601-3.69 12.92 3.969 9.922 11.534 3.187 17.962 9.293.864.821 2.887 2.273 3.296 3.296 3.29 8.223-7.576 15.009 3.757 26.3 1.245 1.24 3.813-3.817 4.079-4.614.852-2.563 6.725-5.45 9.088-7.053 2.02-1.37 4.873-2.667 6.328-4.745 2.27-3.244 1.48-7.514 3.098-10.745 2.139-4.274 3.828-9.635 5.998-13.966 3.898-7.781 4.721 2.093 5.067 2.439.358.357 1.011 0 1.517 0 .094 0 1.447.099 1.516 0 .65-.935-1.043-17.92-1.318-19.297-1.404-7.01-6.944-15.781-11.865-20.5-6.274-6.015-7.09-16.197-18.259-14.954-.204.022-5.084 10.148-7.777 13.512-3.728 4.657-2.47-4.153-6.526-4.153-.081 0-1.183-.103-1.253 0-.586.88-1.44 3.896-2.306 4.417-.265.16-1.722-.239-1.846 0-2.243 4.3 8.256 2.212 5.792 7.952-2.352 5.481-6.328-1.997-6.328 8.56M44.467 7.01c9.685 6.13.682 12.198 2.694 16.215 1.655 3.303 4.241 5.395 1.714 9.814-2.063 3.608-6.87 3.966-9.623 6.723-3.04 3.044-5.464 8.94-6.79 12.911-1.617 4.843 14.547 6.866 12.063 11.008-1.386 2.311-6.746 1.466-8.437.198-1.165-.873-3.593-.546-4.417-1.78-2.613-3.915-2.26-8.023-3.625-12.128-.938-2.822-6.313-2.12-7.844-.593-.523.522-.33 1.792-.33 2.505 0 5.285 7.12 3.316 7.12 6.46 0 14.636 3.927 6.534 11.14 11.336 10.036 6.683 7.844 7.303 14.946 14.404 3.673 3.673 7.741 3.686 9.425 9.294 1.602 5.331-9.327 5.339-11.716 7.448-1.123.991-2.813 4.146-4.219 4.615-1.792.598-3.234.496-4.944 1.78-2.427 1.82-3.9 4.932-4.02 4.81-2.148-2.147-3.52-15.479-3.89-18.257-.588-4.42-5.59-5.54-6.986-9.03-1.57-3.927 1.524-9.52-1.129-13.761-6.52-10.424-11.821-14.5-15.35-26.292-.942-3.148 3.342-6.529 4.877-8.833 1.877-2.816 2.662-5.854 4.746-8.635C22.147 24.19 40.855 9.461 43.857 8.635l.61-1.625z\"/><path d=\"M64 126c34.242 0 62-27.758 62-62 0-34.242-27.758-62-62-62C29.758 2 2 29.758 2 64c0 34.242 27.758 62 62 62zm0-6c30.928 0 56-25.072 56-56S94.928 8 64 8 8 33.072 8 64s25.072 56 56 56z\"/></g></svg>"
},
"$:/core/images/heading-1": {
"title": "$:/core/images/heading-1",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-heading-1 tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M14 30h13.25v30.104H61.7V30h13.25v75.684H61.7V71.552H27.25v34.132H14V30zm70.335 13.78c2.544 0 5.017-.212 7.42-.636 2.403-.424 4.576-1.13 6.52-2.12 1.942-.99 3.603-2.261 4.981-3.816 1.378-1.555 2.28-3.463 2.703-5.724h9.858v74.2h-13.25V53.32H84.335v-9.54z\"/></svg>"
},
"$:/core/images/heading-2": {
"title": "$:/core/images/heading-2",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-heading-2 tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M6 30h13.25v30.104H53.7V30h13.25v75.684H53.7V71.552H19.25v34.132H6V30zm119.52 75.684H74.85c.07-6.148 1.555-11.519 4.452-16.112 2.897-4.593 6.855-8.586 11.872-11.978a133.725 133.725 0 017.526-5.141 59.6 59.6 0 007.208-5.353c2.19-1.908 3.993-3.975 5.406-6.201 1.413-2.226 2.155-4.788 2.226-7.685 0-1.343-.159-2.774-.477-4.293a11.357 11.357 0 00-1.855-4.24c-.919-1.307-2.19-2.403-3.816-3.286-1.625-.883-3.745-1.325-6.36-1.325-2.403 0-4.399.477-5.989 1.431-1.59.954-2.862 2.261-3.816 3.922-.954 1.66-1.66 3.622-2.12 5.883-.46 2.261-.724 4.7-.795 7.314H76.23c0-4.099.548-7.897 1.643-11.395 1.095-3.498 2.738-6.519 4.93-9.063 2.19-2.544 4.857-4.54 8.002-5.989C93.95 30.724 97.606 30 101.775 30c4.523 0 8.303.742 11.342 2.226 3.039 1.484 5.494 3.357 7.367 5.618 1.873 2.261 3.198 4.717 3.975 7.367.777 2.65 1.166 5.176 1.166 7.579 0 2.968-.46 5.653-1.378 8.056a25.942 25.942 0 01-3.71 6.625 37.5 37.5 0 01-5.3 5.565 79.468 79.468 0 01-6.148 4.77 165.627 165.627 0 01-6.36 4.24 94.28 94.28 0 00-5.883 4.028c-1.802 1.343-3.374 2.738-4.717 4.187-1.343 1.449-2.261 2.986-2.756 4.611h36.146v10.812z\"/></svg>"
},
"$:/core/images/heading-3": {
"title": "$:/core/images/heading-3",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-heading-3 tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M6 30h13.25v30.104H53.7V30h13.25v75.684H53.7V71.552H19.25v34.132H6V30zm88.885 32.224c1.979.07 3.957-.07 5.936-.424 1.979-.353 3.745-.972 5.3-1.855a10.365 10.365 0 003.763-3.657c.954-1.555 1.431-3.463 1.431-5.724 0-3.18-1.078-5.724-3.233-7.632-2.155-1.908-4.929-2.862-8.32-2.862-2.12 0-3.958.424-5.513 1.272a11.318 11.318 0 00-3.869 3.445c-1.025 1.449-1.784 3.074-2.279 4.876a18.335 18.335 0 00-.636 5.565H75.381c.141-3.604.813-6.943 2.014-10.017 1.201-3.074 2.844-5.742 4.93-8.003 2.084-2.261 4.61-4.028 7.578-5.3C92.871 30.636 96.228 30 99.973 30a29.2 29.2 0 018.533 1.272c2.791.848 5.3 2.085 7.526 3.71s4.01 3.692 5.353 6.201c1.343 2.509 2.014 5.388 2.014 8.639 0 3.745-.848 7.014-2.544 9.805-1.696 2.791-4.346 4.823-7.95 6.095v.212c4.24.848 7.544 2.95 9.911 6.307s3.551 7.438 3.551 12.243c0 3.533-.707 6.696-2.12 9.487a21.538 21.538 0 01-5.724 7.102c-2.403 1.943-5.194 3.445-8.374 4.505-3.18 1.06-6.537 1.59-10.07 1.59-4.31 0-8.074-.618-11.289-1.855s-5.9-2.986-8.056-5.247c-2.155-2.261-3.798-4.982-4.929-8.162-1.13-3.18-1.731-6.713-1.802-10.6h12.084c-.141 4.523.972 8.286 3.34 11.289 2.366 3.003 5.917 4.505 10.652 4.505 4.028 0 7.402-1.148 10.123-3.445 2.72-2.297 4.081-5.565 4.081-9.805 0-2.897-.565-5.194-1.696-6.89a10.97 10.97 0 00-4.452-3.869c-1.837-.883-3.904-1.431-6.2-1.643a58.067 58.067 0 00-7.05-.212v-9.01z\"/></svg>"
},
"$:/core/images/heading-4": {
"title": "$:/core/images/heading-4",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-heading-4 tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M8 30h13.25v30.104H55.7V30h13.25v75.684H55.7V71.552H21.25v34.132H8V30zm76.59 48.548h22.471V45.9h-.212L84.59 78.548zm43.46 9.54h-9.54v17.596H107.06V88.088h-31.8V76.11l31.8-44.626h11.448v47.064h9.54v9.54z\"/></svg>"
},
"$:/core/images/heading-5": {
"title": "$:/core/images/heading-5",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-heading-5 tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M6 30h13.25v30.104H53.7V30h13.25v75.684H53.7V71.552H19.25v34.132H6V30zm77.755 1.484h38.372v10.812H92.765L88.95 61.164l.212.212c1.625-1.837 3.692-3.233 6.201-4.187 2.509-.954 5-1.431 7.473-1.431 3.675 0 6.96.618 9.858 1.855 2.897 1.237 5.335 2.968 7.314 5.194s3.48 4.858 4.505 7.897c1.025 3.039 1.537 6.325 1.537 9.858 0 2.968-.477 6.024-1.43 9.169a25.161 25.161 0 01-4.559 8.586c-2.085 2.58-4.752 4.7-8.003 6.36-3.25 1.66-7.137 2.491-11.66 2.491-3.604 0-6.943-.477-10.017-1.431-3.074-.954-5.777-2.385-8.109-4.293-2.332-1.908-4.187-4.258-5.565-7.049-1.378-2.791-2.138-6.06-2.279-9.805h12.084c.353 4.028 1.731 7.12 4.134 9.275 2.403 2.155 5.583 3.233 9.54 3.233 2.544 0 4.7-.424 6.466-1.272 1.767-.848 3.198-2.014 4.293-3.498 1.095-1.484 1.873-3.215 2.332-5.194.46-1.979.69-4.099.69-6.36 0-2.05-.284-4.01-.849-5.883-.565-1.873-1.413-3.516-2.544-4.929-1.13-1.413-2.597-2.544-4.399-3.392-1.802-.848-3.904-1.272-6.307-1.272-2.544 0-4.929.477-7.155 1.431-2.226.954-3.834 2.738-4.823 5.353H75.805l7.95-40.598z\"/></svg>"
},
"$:/core/images/heading-6": {
"title": "$:/core/images/heading-6",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-heading-6 tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M6 30h13.25v30.104H53.7V30h13.25v75.684H53.7V71.552H19.25v34.132H6V30zm106.587 20.246c-.283-3.039-1.36-5.494-3.233-7.367-1.873-1.873-4.399-2.809-7.579-2.809-2.19 0-4.08.406-5.67 1.219a12.435 12.435 0 00-4.029 3.233c-1.095 1.343-1.979 2.88-2.65 4.611a37.696 37.696 0 00-1.643 5.459 46.08 46.08 0 00-.9 5.671 722.213 722.213 0 00-.478 5.247l.212.212c1.625-2.968 3.87-5.176 6.731-6.625 2.862-1.449 5.954-2.173 9.275-2.173 3.675 0 6.96.636 9.858 1.908 2.897 1.272 5.353 3.021 7.367 5.247 2.014 2.226 3.551 4.858 4.611 7.897 1.06 3.039 1.59 6.325 1.59 9.858 0 3.604-.583 6.943-1.749 10.017-1.166 3.074-2.844 5.76-5.035 8.056-2.19 2.297-4.805 4.081-7.844 5.353-3.039 1.272-6.395 1.908-10.07 1.908-5.441 0-9.91-1.007-13.409-3.021-3.498-2.014-6.254-4.77-8.268-8.268-2.014-3.498-3.41-7.597-4.187-12.296-.777-4.7-1.166-9.77-1.166-15.211 0-4.452.477-8.94 1.431-13.462.954-4.523 2.526-8.639 4.717-12.349 2.19-3.71 5.07-6.731 8.64-9.063C92.676 31.166 97.075 30 102.304 30c2.968 0 5.76.495 8.374 1.484 2.615.99 4.93 2.367 6.943 4.134 2.014 1.767 3.657 3.887 4.93 6.36 1.271 2.473 1.978 5.23 2.12 8.268h-12.085zm-11.66 46.852c2.19 0 4.099-.442 5.724-1.325a12.869 12.869 0 004.081-3.445c1.095-1.413 1.908-3.056 2.438-4.929.53-1.873.795-3.798.795-5.777s-.265-3.887-.795-5.724c-.53-1.837-1.343-3.445-2.438-4.823-1.095-1.378-2.456-2.491-4.08-3.339-1.626-.848-3.534-1.272-5.725-1.272-2.19 0-4.116.406-5.777 1.219-1.66.813-3.056 1.908-4.187 3.286-1.13 1.378-1.979 2.986-2.544 4.823-.565 1.837-.848 3.78-.848 5.83 0 2.05.283 3.993.848 5.83.565 1.837 1.413 3.48 2.544 4.929a12.39 12.39 0 004.187 3.445c1.66.848 3.586 1.272 5.777 1.272z\"/></svg>"
},
"$:/core/images/help": {
"title": "$:/core/images/help",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-help tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M36.055 111.441c-5.24 4.396-15.168 7.362-26.555 7.362-1.635 0-3.24-.06-4.806-.179 7.919-2.64 14.062-8.6 16.367-16.014C8.747 92.845 1.05 78.936 1.05 63.5c0-29.547 28.206-53.5 63-53.5s63 23.953 63 53.5-28.206 53.5-63 53.5c-10.055 0-19.56-2-27.994-5.559zm35.35-33.843a536.471 536.471 0 00.018-4.682 199.02 199.02 0 00-.023-3.042c.008-1.357.595-2.087 3.727-4.235.112-.077 1.085-.74 1.386-.948 3.093-2.133 5.022-3.786 6.762-6.187 2.34-3.228 3.558-7.077 3.558-11.649 0-13.292-9.86-21.952-21.455-21.952-11.103 0-22.499 9.609-24.066 22.295a6.023 6.023 0 1011.956 1.477c.806-6.527 6.972-11.726 12.11-11.726 5.265 0 9.408 3.64 9.408 9.906 0 3.634-1.1 5.153-5.111 7.919l-1.362.93c-2.682 1.84-4.227 3.1-5.7 4.931-2.109 2.62-3.242 5.717-3.258 9.314.013.892.02 1.86.022 2.981a470.766 470.766 0 01-.022 4.943 6.023 6.023 0 1012.046.12l.003-.395zm-6.027 24.499a7.529 7.529 0 100-15.058 7.529 7.529 0 000 15.058z\"/></svg>"
},
"$:/core/images/home-button": {
"title": "$:/core/images/home-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-home-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M112.985 119.502c.01-.165.015-.331.015-.499V67.568c3.137 2.948 8.076 2.884 11.134-.174a7.999 7.999 0 00-.002-11.316L70.396 2.343A7.978 7.978 0 0064.734 0a7.957 7.957 0 00-5.656 2.343L33 28.42V8.007C33 3.585 29.41 0 25 0c-4.418 0-8 3.59-8 8.007V44.42L5.342 56.078c-3.125 3.125-3.12 8.198-.002 11.316a7.999 7.999 0 0011.316-.003l.344-.343v52.945a8.11 8.11 0 000 .007c0 4.418 3.588 8 8 8h80c4.419 0 8-3.59 8-8a8.11 8.11 0 00-.015-.498zM97 112V51.574L64.737 19.31 33 51.048V112h64z\"/></svg>"
},
"$:/core/images/import-button": {
"title": "$:/core/images/import-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-import-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M114.832 60.436s3.235-3.27 6.921.417c3.686 3.686.231 7.14.231 7.14l-42.153 42.92s-30.765 32.367-58.798 4.333C-7 87.213 24.59 55.623 24.59 55.623L67.363 12.85s22.725-24.6 43.587-3.738c20.862 20.862-3.96 43.09-3.96 43.09l-35.04 35.04S49.903 112.546 36.426 99.07c-13.476-13.477 11.83-35.523 11.83-35.523l35.04-35.04s3.902-3.902 7.78-.023c3.879 3.878.118 7.921.118 7.921l-35.04 35.04s-13.212 13.212-8.872 17.551c4.34 4.34 16.77-9.653 16.77-9.653l35.04-35.04s16.668-14.598 3.966-27.3c-13.893-13.892-27.565 3.702-27.565 3.702l-42.91 42.91s-23.698 23.698-3.658 43.738 43.012-4.385 43.012-4.385l42.895-42.533z\"/></svg>"
},
"$:/core/images/info-button": {
"title": "$:/core/images/info-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-info-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\" transform=\"translate(.05)\"><path d=\"M64 128c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64C28.654 0 0 28.654 0 64c0 35.346 28.654 64 64 64zm0-16c26.51 0 48-21.49 48-48S90.51 16 64 16 16 37.49 16 64s21.49 48 48 48z\"/><circle cx=\"64\" cy=\"32\" r=\"8\"/><rect width=\"16\" height=\"56\" x=\"56\" y=\"48\" rx=\"8\"/></g></svg>"
},
"$:/core/images/italic": {
"title": "$:/core/images/italic",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-italic tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M66.711 0h22.41L62.408 128H40z\"/></svg>"
},
"$:/core/images/left-arrow": {
"title": "$:/core/images/left-arrow",
"created": "20150315234410875",
"modified": "20150315235324760",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-left-arrow tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M0 64.177c0-2.026.771-4.054 2.317-5.6l55.98-55.98a7.92 7.92 0 0111.195.001c3.086 3.085 3.092 8.104.001 11.195L19.111 64.175l50.382 50.382a7.92 7.92 0 010 11.195c-3.086 3.086-8.105 3.092-11.196.001l-55.98-55.98A7.892 7.892 0 010 64.177z\"/></svg>"
},
"$:/core/images/line-width": {
"title": "$:/core/images/line-width",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-line-width tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M16 18h96a2 2 0 000-4H16a2 2 0 100 4zm0 17h96a4 4 0 100-8H16a4 4 0 100 8zm0 21h96a6 6 0 000-12H16a6 6 0 100 12zm0 29h96c5.523 0 10-4.477 10-10s-4.477-10-10-10H16c-5.523 0-10 4.477-10 10s4.477 10 10 10zm0 43h96c8.837 0 16-7.163 16-16s-7.163-16-16-16H16c-8.837 0-16 7.163-16 16s7.163 16 16 16z\"/></svg>"
},
"$:/core/images/link": {
"title": "$:/core/images/link",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-link tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M42.263 69.38a31.919 31.919 0 006.841 10.13c12.5 12.5 32.758 12.496 45.255 0l22.627-22.628c12.502-12.501 12.497-32.758 0-45.255-12.5-12.5-32.758-12.496-45.254 0L49.104 34.255a32.333 32.333 0 00-2.666 3.019 36.156 36.156 0 0121.94.334l14.663-14.663c6.25-6.25 16.382-6.254 22.632-.004 6.248 6.249 6.254 16.373-.004 22.631l-22.62 22.62c-6.25 6.25-16.381 6.254-22.631.004a15.93 15.93 0 01-4.428-8.433 11.948 11.948 0 00-7.59 3.48l-6.137 6.137z\"/><path d=\"M86.35 59.234a31.919 31.919 0 00-6.84-10.13c-12.5-12.5-32.758-12.497-45.255 0L11.627 71.732c-12.501 12.5-12.496 32.758 0 45.254 12.5 12.5 32.758 12.497 45.255 0L79.51 94.36a32.333 32.333 0 002.665-3.02 36.156 36.156 0 01-21.94-.333l-14.663 14.663c-6.25 6.25-16.381 6.253-22.63.004-6.25-6.249-6.255-16.374.003-22.632l22.62-22.62c6.25-6.25 16.381-6.253 22.631-.003a15.93 15.93 0 014.428 8.432 11.948 11.948 0 007.59-3.48l6.137-6.136z\"/></g></svg>"
},
"$:/core/images/linkify": {
"title": "$:/core/images/linkify",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-linkify-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M17.031 31.919H9.048V96.85h7.983v6.92H0V25h17.031v6.919zm24.66 0h-7.983V96.85h7.983v6.92H24.66V25h17.03v6.919zM67.77 56.422l11.975-3.903 2.306 7.096-12.063 3.903 7.628 10.379-6.12 4.435-7.63-10.467-7.45 10.2-5.943-4.523L58.1 63.518 45.95 59.35l2.306-7.096 12.064 4.17V43.825h7.45v12.596zM86.31 96.85h7.982V31.92H86.31V25h17.031v78.77H86.31v-6.92zm24.659 0h7.983V31.92h-7.983V25H128v78.77h-17.031v-6.92z\"/></svg>"
},
"$:/core/images/list-bullet": {
"title": "$:/core/images/list-bullet",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-list-bullet tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M11.636 40.273c6.427 0 11.637-5.21 11.637-11.637C23.273 22.21 18.063 17 11.636 17 5.21 17 0 22.21 0 28.636c0 6.427 5.21 11.637 11.636 11.637zm0 34.909c6.427 0 11.637-5.21 11.637-11.637 0-6.426-5.21-11.636-11.637-11.636C5.21 51.91 0 57.12 0 63.545c0 6.427 5.21 11.637 11.636 11.637zm0 34.909c6.427 0 11.637-5.21 11.637-11.636 0-6.427-5.21-11.637-11.637-11.637C5.21 86.818 0 92.028 0 98.455c0 6.426 5.21 11.636 11.636 11.636zM34.91 22.818H128v11.637H34.91V22.818zm0 34.91H128v11.636H34.91V57.727zm0 34.908H128v11.637H34.91V92.636z\"/></svg>"
},
"$:/core/images/list-number": {
"title": "$:/core/images/list-number",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-list-number tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M33.84 22.356H128v11.77H33.84v-11.77zm0 35.31H128v11.77H33.84v-11.77zm0 35.311H128v11.77H33.84v-11.77zM.38 42.631v-2.223h.998c.826 0 1.445-.14 1.858-.42.413-.28.619-.948.619-2.002V22.769c0-1.442-.193-2.336-.58-2.683-.385-.347-1.477-.52-3.275-.52v-2.143c3.502-.147 6.252-.955 8.25-2.423h2.117v22.865c0 .921.15 1.575.449 1.963.3.387.949.58 1.948.58h.998v2.223H.38zm-.3 35.356v-1.902c7.19-6.554 10.786-12.58 10.786-18.08 0-1.562-.326-2.81-.979-3.744-.652-.934-1.524-1.402-2.616-1.402-.893 0-1.655.317-2.287.952-.633.634-.95 1.364-.95 2.192 0 .974.247 1.829.74 2.563.106.16.16.28.16.36 0 .147-.16.28-.48.4-.213.08-.752.308-1.618.681-.839.374-1.358.561-1.558.561-.24 0-.512-.37-.819-1.111A6.2 6.2 0 010 57.064c0-1.949.849-3.544 2.547-4.785 1.698-1.242 3.798-1.862 6.302-1.862 2.463 0 4.53.67 6.202 2.012 1.67 1.341 2.506 3.093 2.506 5.256a8.644 8.644 0 01-.849 3.724c-.566 1.201-1.92 3.053-4.064 5.556a165.471 165.471 0 01-6.272 6.938h11.445l-1.019 5.726h-2.117c.08-.28.12-.534.12-.76 0-.388-.1-.631-.3-.731-.2-.1-.599-.15-1.198-.15H.08zm12.124 19.207c1.745.04 3.236.637 4.474 1.792 1.239 1.154 1.858 2.773 1.858 4.855 0 2.99-1.132 5.393-3.396 7.208-2.263 1.815-5 2.723-8.209 2.723-2.01 0-3.669-.384-4.974-1.151C.652 111.853 0 110.849 0 109.607c0-.774.27-1.398.809-1.872.54-.474 1.128-.71 1.768-.71.639 0 1.162.2 1.568.6.406.4.782 1.055 1.128 1.962.466 1.268 1.239 1.902 2.317 1.902 1.265 0 2.287-.477 3.066-1.431.78-.955 1.169-2.686 1.169-5.196 0-1.709-.12-3.023-.36-3.944-.24-.921-.792-1.382-1.658-1.382-.586 0-1.185.307-1.797.921-.493.494-.932.741-1.319.741-.333 0-.602-.147-.809-.44-.206-.294-.31-.574-.31-.841 0-.32.104-.594.31-.821.207-.227.69-.594 1.449-1.102 2.876-1.922 4.314-4.017 4.314-6.287 0-1.188-.306-2.092-.919-2.713a3.001 3.001 0 00-2.217-.93c-.799 0-1.525.263-2.177.79-.653.528-.979 1.158-.979 1.892 0 .641.253 1.235.76 1.782.172.2.259.367.259.5 0 .121-.57.428-1.708.922-1.139.494-1.854.74-2.147.74-.413 0-.75-.333-1.009-1-.26-.668-.39-1.282-.39-1.842 0-1.749.93-3.224 2.787-4.425 1.858-1.202 3.965-1.802 6.322-1.802 2.064 0 3.851.447 5.363 1.341 1.511.895 2.267 2.116 2.267 3.664 0 1.362-.57 2.623-1.708 3.784a13.387 13.387 0 01-3.945 2.784z\"/></svg>"
},
"$:/core/images/list": {
"title": "$:/core/images/list",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-list tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M87.748 128H23.999c-4.418 0-7.999-3.59-7.999-8.007V8.007C16 3.585 19.588 0 24 0h80c4.419 0 8 3.59 8 8.007V104H91.25c-.965 0-1.84.392-2.473 1.025a3.476 3.476 0 00-1.029 2.476V128zm8-.12l15.88-15.88h-15.88v15.88zM40 15.508A3.502 3.502 0 0143.5 12h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 20h-55a3.498 3.498 0 01-3.5-3.509v-.982zM32 22a6 6 0 100-12 6 6 0 000 12zm8 9.509A3.502 3.502 0 0143.5 28h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 36h-55a3.498 3.498 0 01-3.5-3.509v-.982zm0 16A3.502 3.502 0 0143.5 44h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 52h-55a3.498 3.498 0 01-3.5-3.509v-.982zm0 16A3.502 3.502 0 0143.5 60h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 68h-55a3.498 3.498 0 01-3.5-3.509v-.982zm0 16A3.502 3.502 0 0143.5 76h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 84h-55a3.498 3.498 0 01-3.5-3.509v-.982zm0 16A3.502 3.502 0 0143.5 92h55c1.933 0 3.5 1.561 3.5 3.509v.982A3.502 3.502 0 0198.5 100h-55a3.498 3.498 0 01-3.5-3.509v-.982zm0 16A3.505 3.505 0 0143.497 108h33.006A3.497 3.497 0 0180 111.509v.982A3.505 3.505 0 0176.503 116H43.497A3.497 3.497 0 0140 112.491v-.982zM32 38a6 6 0 100-12 6 6 0 000 12zm0 16a6 6 0 100-12 6 6 0 000 12zm0 16a6 6 0 100-12 6 6 0 000 12zm0 16a6 6 0 100-12 6 6 0 000 12zm0 16a6 6 0 100-12 6 6 0 000 12zm0 16a6 6 0 100-12 6 6 0 000 12z\"/></svg>"
},
"$:/core/images/locked-padlock": {
"title": "$:/core/images/locked-padlock",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-locked-padlock tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M96.472 64H105v32.01C105 113.674 90.674 128 73.001 128H56C38.318 128 24 113.677 24 96.01V64h8c.003-15.723.303-47.731 32.16-47.731 31.794 0 32.305 32.057 32.312 47.731zm-15.897 0H48.44c.002-16.287.142-32 15.719-32 15.684 0 16.977 16.136 16.415 32zM67.732 92.364A8.503 8.503 0 0064.5 76a8.5 8.5 0 00-3.498 16.25l-5.095 22.77H72.8l-5.07-22.656z\"/></svg>"
},
"$:/core/images/mail": {
"title": "$:/core/images/mail",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-mail tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M122.827 104.894a7.986 7.986 0 01-2.834.516H8.007c-.812 0-1.597-.12-2.335-.345l34.163-34.163 20.842 20.842a3.998 3.998 0 003.418 1.134 4.003 4.003 0 003.395-1.134L88.594 70.64c.075.09.155.176.24.26l33.993 33.994zm5.076-6.237c.064-.406.097-.823.097-1.247v-64c0-.669-.082-1.318-.237-1.94L94.23 65.006c.09.075.177.154.261.239l33.413 33.413zm-127.698.56A8.023 8.023 0 010 97.41v-64c0-.716.094-1.41.271-2.071l33.907 33.906L.205 99.218zM5.93 25.684a8.012 8.012 0 012.078-.273h111.986c.766 0 1.507.108 2.209.308L64.083 83.837 5.93 25.683z\"/></svg>"
},
"$:/core/images/menu-button": {
"title": "$:/core/images/menu-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-menu-button tc-image-button\" viewBox=\"0 0 128 128\"><rect width=\"128\" height=\"16\" y=\"16\" rx=\"8\"/><rect width=\"128\" height=\"16\" y=\"56\" rx=\"8\"/><rect width=\"128\" height=\"16\" y=\"96\" rx=\"8\"/></svg>"
},
"$:/core/images/mono-block": {
"title": "$:/core/images/mono-block",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-mono-block tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M23.965 32.967h.357c.755 0 1.328.192 1.72.577.39.384.586.947.586 1.688 0 .824-.206 1.418-.618 1.782-.413.363-1.094.545-2.045.545h-6.31c-.965 0-1.65-.178-2.056-.535-.405-.356-.608-.954-.608-1.792 0-.811.203-1.391.608-1.74.406-.35 1.09-.525 2.055-.525h.734l-.86-2.453H8.471l-.902 2.453h.734c.95 0 1.632.178 2.044.535.413.356.619.933.619 1.73 0 .824-.206 1.418-.619 1.782-.412.363-1.094.545-2.044.545h-5.41c-.964 0-1.649-.182-2.054-.545-.406-.364-.608-.958-.608-1.782 0-.741.195-1.304.587-1.688.391-.385.964-.577 1.719-.577h.356l5.62-15.641H6.835c-.95 0-1.632-.182-2.044-.546-.412-.363-.619-.95-.619-1.76 0-.825.207-1.42.619-1.783.412-.363 1.094-.545 2.044-.545h7.863c1.244 0 2.118.67 2.62 2.013v.063l6.647 18.2zM12.98 17.326l-3.04 8.848h6.08l-3.04-8.848zm22.402 9.372v6.395h3.145c2.223 0 3.788-.245 4.697-.734.908-.49 1.362-1.307 1.362-2.453 0-1.16-.433-1.985-1.3-2.474-.866-.49-2.383-.734-4.55-.734h-3.354zm10.693-2.327c1.524.559 2.642 1.324 3.355 2.295.713.972 1.07 2.212 1.07 3.722 0 1.272-.308 2.432-.923 3.48-.615 1.049-1.496 1.909-2.642 2.58a7.499 7.499 0 01-2.254.849c-.832.174-2.01.262-3.533.262H30.202c-.922 0-1.583-.182-1.981-.545-.399-.364-.598-.958-.598-1.782 0-.741.189-1.304.566-1.688.378-.385.93-.577 1.657-.577h.356V17.326h-.356c-.727 0-1.28-.196-1.657-.587-.377-.392-.566-.965-.566-1.72 0-.81.203-1.401.608-1.771.406-.37 1.062-.556 1.971-.556h9.645c2.95 0 5.19.573 6.72 1.72 1.53 1.145 2.296 2.823 2.296 5.031 0 1.09-.234 2.052-.703 2.883-.468.832-1.163 1.513-2.086 2.045zM35.381 17.2v5.284h2.83c1.72 0 2.932-.203 3.638-.609.706-.405 1.06-1.09 1.06-2.054 0-.909-.319-1.573-.955-1.992-.636-.42-1.667-.63-3.093-.63h-3.48zm35.863-3.816c.28-.503.566-.86.86-1.07.293-.21.664-.314 1.111-.314.685 0 1.17.182 1.457.545.287.364.43.986.43 1.866l.042 5.452c0 .964-.157 1.614-.472 1.95-.314.335-.884.503-1.709.503-.587 0-1.037-.14-1.352-.42-.314-.28-.584-.796-.807-1.551-.364-1.328-.944-2.282-1.74-2.862-.797-.58-1.901-.87-3.313-.87-2.153 0-3.802.727-4.948 2.18-1.147 1.454-1.72 3.558-1.72 6.311 0 2.74.58 4.844 1.74 6.311 1.16 1.468 2.817 2.202 4.97 2.202 1.467 0 3.085-.49 4.854-1.468 1.768-.978 2.883-1.467 3.344-1.467.545 0 1.003.23 1.373.692.37.46.556 1.034.556 1.719 0 1.23-1.084 2.39-3.25 3.48-2.167 1.09-4.606 1.636-7.318 1.636-3.662 0-6.625-1.21-8.89-3.627-2.264-2.419-3.396-5.578-3.396-9.478 0-3.76 1.146-6.884 3.438-9.372 2.293-2.488 5.2-3.732 8.723-3.732.992 0 1.97.112 2.935.335.964.224 1.992.574 3.082 1.049zm10.22 19.583V17.326h-.356c-.755 0-1.328-.196-1.72-.587-.39-.392-.586-.965-.586-1.72 0-.81.21-1.401.629-1.771.42-.37 1.097-.556 2.034-.556h5.178c2.922 0 5.06.126 6.416.377 1.356.252 2.51.671 3.46 1.258 1.691 1.007 2.988 2.443 3.89 4.31.9 1.865 1.352 4.021 1.352 6.467 0 2.586-.514 4.847-1.541 6.783-1.028 1.936-2.485 3.4-4.372 4.393-.853.447-1.852.772-2.998.975-1.147.203-2.852.304-5.116.304h-6.269c-.965 0-1.65-.178-2.055-.535-.406-.356-.608-.954-.608-1.792 0-.741.195-1.304.587-1.688.391-.385.964-.577 1.72-.577h.356zm5.41-15.725v15.725h1.195c2.642 0 4.592-.646 5.85-1.94 1.258-1.292 1.887-3.28 1.887-5.965 0-2.641-.64-4.612-1.918-5.912-1.28-1.3-3.205-1.95-5.777-1.95-.335 0-.59.003-.765.01a7.992 7.992 0 00-.472.032zm35.067-.126h-9.75v5.368h3.69v-.252c0-.797.175-1.39.524-1.782.35-.392.88-.587 1.594-.587.629 0 1.142.178 1.54.534.4.357.598.808.598 1.353 0 .028.007.118.021.272.014.154.021.308.021.462v4.34c0 .936-.167 1.607-.503 2.013-.335.405-.88.608-1.635.608-.713 0-1.251-.19-1.615-.567-.363-.377-.545-.936-.545-1.677v-.377h-3.69v6.269h9.75v-2.495c0-.937.178-1.608.534-2.013.357-.405.94-.608 1.75-.608.798 0 1.367.2 1.71.597.342.399.513 1.073.513 2.024v5.074c0 .755-.146 1.258-.44 1.51-.293.251-.873.377-1.74.377h-17.172c-.923 0-1.583-.182-1.982-.545-.398-.364-.597-.958-.597-1.782 0-.741.189-1.304.566-1.688.377-.385.93-.577 1.656-.577h.357V17.326h-.357c-.712 0-1.261-.2-1.646-.598-.384-.398-.576-.968-.576-1.709 0-.81.203-1.401.608-1.771.405-.37 1.062-.556 1.97-.556h17.173c.853 0 1.43.13 1.73.388.3.258.45.772.45 1.54v4.698c0 .95-.174 1.631-.524 2.044-.35.412-.915.618-1.698.618-.81 0-1.394-.21-1.75-.629-.357-.419-.535-1.097-.535-2.033v-2.202zM19.77 47.641c.267-.504.55-.86.85-1.07.3-.21.675-.314 1.122-.314.685 0 1.17.181 1.457.545.287.363.43.985.43 1.866l.042 5.451c0 .965-.157 1.615-.472 1.95-.314.336-.891.504-1.73.504-.587 0-1.045-.144-1.373-.43-.329-.287-.598-.8-.807-1.541-.378-1.342-.958-2.3-1.74-2.873-.783-.573-1.88-.86-3.292-.86-2.153 0-3.799.727-4.938 2.181-1.14 1.454-1.709 3.557-1.709 6.311s.598 4.882 1.793 6.385C10.599 67.248 12.294 68 14.488 68c.503 0 1.077-.06 1.72-.179a23.809 23.809 0 002.264-.555v-3.313h-2.37c-.95 0-1.624-.175-2.023-.524-.398-.35-.597-.93-.597-1.74 0-.84.199-1.437.597-1.793.399-.357 1.073-.535 2.024-.535h7.569c.978 0 1.667.175 2.065.524.398.35.598.937.598 1.762 0 .74-.2 1.31-.598 1.708-.398.399-.975.598-1.73.598h-.335v5.242c0 .447-.05.758-.147.933-.098.174-.293.353-.587.534-.797.476-2.062.895-3.795 1.258a25.576 25.576 0 01-5.263.546c-3.662 0-6.625-1.21-8.89-3.628-2.264-2.418-3.397-5.577-3.397-9.477 0-3.76 1.147-6.884 3.44-9.372 2.292-2.488 5.199-3.732 8.721-3.732.979 0 1.954.112 2.925.335.972.224 2.003.573 3.093 1.049zm15.84 3.941v4.823h6.857v-4.823h-.336c-.754 0-1.331-.195-1.73-.587-.398-.391-.597-.964-.597-1.719 0-.825.206-1.419.619-1.782.412-.364 1.093-.545 2.044-.545h5.41c.95 0 1.624.181 2.023.545.398.363.597.957.597 1.782 0 .755-.192 1.328-.576 1.72-.385.39-.947.586-1.688.586h-.357v15.642h.357c.755 0 1.328.192 1.719.576.391.385.587.947.587 1.688 0 .825-.203 1.419-.608 1.782-.405.364-1.09.546-2.055.546h-5.41c-.964 0-1.649-.179-2.054-.535-.405-.357-.608-.954-.608-1.793 0-.74.2-1.303.598-1.688.398-.384.975-.576 1.73-.576h.335v-6.186h-6.856v6.186h.335c.755 0 1.331.192 1.73.576.398.385.597.947.597 1.688 0 .825-.206 1.419-.618 1.782-.412.364-1.094.546-2.044.546h-5.41c-.964 0-1.65-.179-2.055-.535-.405-.357-.608-.954-.608-1.793 0-.74.196-1.303.587-1.688.392-.384.965-.576 1.72-.576h.356V51.582h-.356c-.741 0-1.304-.195-1.688-.587-.385-.391-.577-.964-.577-1.719 0-.825.2-1.419.598-1.782.398-.364 1.073-.545 2.023-.545h5.41c.936 0 1.614.181 2.033.545.42.363.63.957.63 1.782 0 .755-.2 1.328-.598 1.72-.399.39-.975.586-1.73.586h-.335zm31.754 0v15.642h3.523c.95 0 1.632.178 2.044.534.412.357.618.933.618 1.73 0 .811-.21 1.402-.629 1.772-.419.37-1.097.556-2.033.556H58.433c-.95 0-1.632-.182-2.044-.546-.412-.363-.619-.957-.619-1.782 0-.81.203-1.39.608-1.74.406-.35 1.09-.524 2.055-.524h3.523V51.582h-3.523c-.95 0-1.632-.181-2.044-.545-.412-.363-.619-.95-.619-1.761 0-.825.203-1.412.608-1.761.406-.35 1.09-.524 2.055-.524h12.455c.992 0 1.684.174 2.075.524.392.35.587.936.587 1.761 0 .81-.202 1.398-.608 1.761-.405.364-1.09.545-2.054.545h-3.523zm30.496 0v11.994c0 1.873-.122 3.228-.367 4.067a5.876 5.876 0 01-1.227 2.244c-.74.852-1.768 1.495-3.082 1.929-1.314.433-2.893.65-4.738.65-1.3 0-2.555-.126-3.764-.378a16.843 16.843 0 01-3.491-1.132c-.615-.28-1.017-.643-1.206-1.09-.188-.448-.283-1.175-.283-2.18v-4.32c0-1.202.175-2.04.525-2.516.349-.475.957-.713 1.824-.713 1.244 0 1.929.915 2.054 2.747.014.321.035.566.063.733.168 1.622.545 2.73 1.133 3.324.587.594 1.523.89 2.81.89 1.593 0 2.714-.422 3.364-1.268.65-.845.975-2.386.975-4.623V51.582H88.93c-.95 0-1.632-.181-2.044-.545-.413-.363-.619-.95-.619-1.761 0-.825.2-1.412.598-1.761.398-.35 1.086-.524 2.065-.524h10.693c.979 0 1.667.174 2.065.524.399.35.598.936.598 1.761 0 .81-.206 1.398-.619 1.761-.412.364-1.093.545-2.044.545h-1.761zm14.644 0v6.353l6.48-6.478c-.728-.084-1.238-.29-1.531-.619-.294-.328-.44-.85-.44-1.562 0-.825.198-1.419.597-1.782.398-.364 1.073-.545 2.023-.545h5.137c.95 0 1.625.181 2.023.545.399.363.598.957.598 1.782 0 .769-.2 1.345-.598 1.73-.398.384-.982.576-1.75.576h-.483l-6.101 6.06c1.132.839 2.167 1.94 3.103 3.302.937 1.363 2.034 3.456 3.292 6.28h.692c.825 0 1.44.188 1.845.566.405.377.608.943.608 1.698 0 .825-.206 1.419-.619 1.782-.412.364-1.093.546-2.044.546h-2.579c-1.132 0-2.048-.762-2.746-2.286-.126-.28-.224-.503-.294-.67-.923-1.958-1.768-3.467-2.537-4.53a16.616 16.616 0 00-2.705-2.914l-1.97 1.887v3.92h.335c.755 0 1.331.193 1.73.577.398.385.597.947.597 1.688 0 .825-.206 1.419-.618 1.782-.413.364-1.094.546-2.045.546h-5.41c-.964 0-1.649-.179-2.054-.535-.405-.357-.608-.954-.608-1.793 0-.74.196-1.303.587-1.688.391-.384.965-.576 1.72-.576h.356V51.582h-.357c-.74 0-1.303-.195-1.687-.587-.385-.391-.577-.964-.577-1.719 0-.825.2-1.419.598-1.782.398-.364 1.072-.545 2.023-.545h5.41c.936 0 1.614.181 2.033.545.42.363.63.957.63 1.782 0 .755-.2 1.328-.598 1.72-.399.39-.975.586-1.73.586h-.336zM13.44 96.326l4.005-11.889c.251-.782.6-1.352 1.048-1.709.447-.356 1.041-.534 1.782-.534h3.271c.95 0 1.632.182 2.044.545.413.363.619.957.619 1.782 0 .755-.2 1.328-.598 1.72-.398.39-.975.587-1.73.587h-.335l.587 15.641h.357c.754 0 1.32.192 1.698.577.377.384.566.947.566 1.687 0 .825-.2 1.42-.598 1.783-.398.363-1.072.545-2.023.545h-4.718c-.95 0-1.624-.178-2.023-.535-.398-.356-.597-.954-.597-1.793 0-.74.192-1.303.576-1.687.385-.385.954-.577 1.709-.577h.335l-.293-12.79-3.061 9.52c-.224.712-.542 1.226-.954 1.54-.413.315-.982.472-1.709.472-.727 0-1.303-.157-1.73-.472-.426-.314-.751-.828-.975-1.54l-3.04-9.52-.294 12.79h.336c.755 0 1.324.192 1.709.577.384.384.576.947.576 1.687 0 .825-.202 1.42-.608 1.783-.405.363-1.076.545-2.013.545H2.621c-.937 0-1.608-.182-2.013-.545-.405-.364-.608-.958-.608-1.783 0-.74.192-1.303.577-1.687.384-.385.954-.577 1.708-.577h.336l.608-15.641h-.336c-.754 0-1.331-.196-1.73-.588-.398-.39-.597-.964-.597-1.719 0-.825.206-1.419.619-1.782.412-.363 1.093-.545 2.044-.545h3.27c.728 0 1.311.175 1.752.524.44.35.8.923 1.08 1.72l4.109 11.888zm30.454 2.054V86.828H42.74c-.922 0-1.583-.182-1.981-.546-.398-.363-.598-.95-.598-1.76 0-.812.2-1.402.598-1.773.398-.37 1.059-.555 1.981-.555h5.955c.909 0 1.566.185 1.97.555.406.37.609.961.609 1.772 0 .741-.192 1.31-.577 1.709-.384.398-.933.598-1.646.598h-.356v19.038c0 .657-.07 1.069-.21 1.237-.14.167-.454.251-.943.251h-2.097c-.67 0-1.143-.07-1.415-.21-.273-.14-.507-.384-.703-.733l-8.722-15.327v11.385h1.216c.909 0 1.559.175 1.95.524.392.35.587.93.587 1.74 0 .825-.199 1.42-.597 1.783-.399.363-1.045.545-1.94.545h-6.017c-.909 0-1.566-.182-1.971-.545-.406-.364-.608-.958-.608-1.783 0-.74.188-1.303.566-1.687.377-.385.936-.577 1.677-.577h.336V86.828h-.336c-.713 0-1.265-.2-1.656-.598-.392-.398-.587-.968-.587-1.709 0-.81.206-1.401.618-1.772.413-.37 1.066-.555 1.96-.555h3.44c.824 0 1.383.108 1.677.325.293.216.622.653.985 1.31l7.989 14.551zM64.66 86.366c-1.803 0-3.218.727-4.245 2.18-1.028 1.455-1.541 3.474-1.541 6.06 0 2.586.517 4.613 1.551 6.08 1.034 1.468 2.446 2.202 4.235 2.202 1.804 0 3.222-.73 4.257-2.19 1.034-1.461 1.551-3.492 1.551-6.092 0-2.586-.513-4.605-1.54-6.06-1.028-1.453-2.45-2.18-4.268-2.18zm0-4.864c3.44 0 6.27 1.23 8.492 3.69 2.223 2.46 3.334 5.598 3.334 9.414 0 3.844-1.104 6.99-3.313 9.436-2.208 2.446-5.046 3.669-8.513 3.669-3.424 0-6.255-1.234-8.491-3.701-2.237-2.467-3.355-5.602-3.355-9.404 0-3.83 1.108-6.971 3.323-9.424 2.216-2.454 5.057-3.68 8.523-3.68zM87.461 98.17v4.298h2.16c.908 0 1.555.175 1.94.524.384.35.576.93.576 1.74 0 .825-.196 1.42-.587 1.783-.392.363-1.035.545-1.93.545h-7.254c-.922 0-1.583-.182-1.981-.545-.399-.364-.598-.958-.598-1.783 0-.74.189-1.303.566-1.687.378-.385.93-.577 1.657-.577h.356V86.828h-.356c-.713 0-1.262-.2-1.646-.598-.385-.398-.577-.968-.577-1.709 0-.81.203-1.401.608-1.772.406-.37 1.063-.555 1.971-.555h8.66c3.424 0 6.014.657 7.768 1.97 1.754 1.315 2.631 3.25 2.631 5.809 0 2.697-.873 4.738-2.62 6.122-1.748 1.384-4.34 2.076-7.78 2.076h-3.564zm0-11.343v6.625h2.977c1.65 0 2.89-.28 3.722-.839.832-.559 1.248-1.397 1.248-2.516 0-1.048-.43-1.855-1.29-2.421-.86-.566-2.086-.85-3.68-.85h-2.977zm27.267 20.568l-1.636 1.636a12.37 12.37 0 011.772-.44c.58-.098 1.15-.147 1.709-.147 1.104 0 2.268.164 3.491.492 1.223.329 1.967.493 2.233.493.447 0 1.03-.15 1.75-.45.72-.301 1.206-.452 1.458-.452.517 0 .947.2 1.29.598.342.398.513.898.513 1.5 0 .796-.472 1.474-1.415 2.033-.944.56-2.1.839-3.47.839-.937 0-2.139-.22-3.607-.66-1.467-.441-2.53-.661-3.187-.661-.992 0-2.11.272-3.354.817-1.244.546-2.013.818-2.307.818a2.14 2.14 0 01-1.53-.597c-.42-.399-.63-.878-.63-1.437 0-.391.134-.807.4-1.247.265-.44.733-1.01 1.404-1.709l2.118-2.139c-2.335-.852-4.194-2.386-5.578-4.602-1.384-2.215-2.075-4.763-2.075-7.642 0-3.802 1.104-6.909 3.312-9.32 2.209-2.411 5.053-3.617 8.534-3.617 3.467 0 6.304 1.209 8.513 3.627 2.208 2.418 3.312 5.522 3.312 9.31 0 3.774-1.097 6.884-3.291 9.33-2.195 2.446-4.977 3.67-8.345 3.67a22.5 22.5 0 01-1.384-.043zm1.195-21.03c-1.803 0-3.218.727-4.246 2.18-1.027 1.455-1.54 3.474-1.54 6.06 0 2.586.516 4.613 1.55 6.08 1.035 1.468 2.447 2.202 4.236 2.202 1.803 0 3.222-.73 4.256-2.19 1.035-1.461 1.552-3.492 1.552-6.092 0-2.586-.514-4.605-1.541-6.06-1.028-1.453-2.45-2.18-4.267-2.18z\"/></svg>"
},
"$:/core/images/mono-line": {
"title": "$:/core/images/mono-line",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-mono-line tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M60.437 84.523h.908c1.922 0 3.381.489 4.378 1.468.997.979 1.495 2.411 1.495 4.298 0 2.1-.525 3.612-1.575 4.538-1.05.925-2.785 1.388-5.206 1.388h-16.07c-2.456 0-4.2-.454-5.232-1.361-1.032-.908-1.548-2.43-1.548-4.565 0-2.065.516-3.542 1.548-4.432 1.032-.89 2.776-1.334 5.232-1.334h1.869l-2.19-6.247H20.983l-2.296 6.247h1.87c2.42 0 4.155.453 5.205 1.361 1.05.908 1.575 2.376 1.575 4.405 0 2.1-.525 3.612-1.575 4.538-1.05.925-2.785 1.388-5.206 1.388H6.781c-2.456 0-4.2-.463-5.233-1.388C.516 93.9 0 92.389 0 90.289c0-1.887.498-3.32 1.495-4.298.997-.979 2.456-1.468 4.378-1.468h.908l14.308-39.83h-4.271c-2.42 0-4.156-.462-5.206-1.387-1.05-.926-1.575-2.42-1.575-4.485 0-2.1.525-3.613 1.575-4.538 1.05-.926 2.785-1.388 5.206-1.388h20.021c3.168 0 5.392 1.708 6.674 5.125v.16l16.924 46.343zm-27.976-39.83L24.72 67.225h15.483l-7.742-22.53zM89.506 68.56v16.284h8.008c5.66 0 9.646-.623 11.96-1.869 2.313-1.245 3.47-3.328 3.47-6.246 0-2.955-1.103-5.055-3.31-6.3-2.207-1.246-6.069-1.869-11.586-1.869h-8.542zm27.229-5.926c3.88 1.423 6.727 3.372 8.542 5.846 1.815 2.474 2.723 5.633 2.723 9.477 0 3.239-.783 6.193-2.35 8.862-1.565 2.67-3.808 4.859-6.726 6.567-1.709.997-3.622 1.718-5.74 2.163-2.118.445-5.116.667-8.996.667h-27.87c-2.349 0-4.03-.463-5.045-1.388-1.014-.926-1.521-2.438-1.521-4.538 0-1.887.48-3.32 1.441-4.298.961-.979 2.367-1.468 4.218-1.468h.907v-39.83h-.907c-1.851 0-3.257-.498-4.218-1.494-.961-.997-1.441-2.456-1.441-4.378 0-2.065.516-3.568 1.548-4.512 1.032-.943 2.705-1.414 5.018-1.414h24.56c7.51 0 13.214 1.459 17.111 4.377 3.898 2.92 5.847 7.19 5.847 12.814 0 2.776-.597 5.223-1.789 7.341-1.192 2.118-2.963 3.853-5.312 5.206zm-27.23-18.26v13.455h7.208c4.378 0 7.466-.516 9.264-1.549 1.797-1.032 2.696-2.776 2.696-5.232 0-2.313-.81-4.004-2.43-5.072-1.619-1.068-4.244-1.602-7.874-1.602h-8.863z\"/></svg>"
},
"$:/core/images/new-button": {
"title": "$:/core/images/new-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-new-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M56 72H8.007C3.591 72 0 68.418 0 64c0-4.41 3.585-8 8.007-8H56V8.007C56 3.591 59.582 0 64 0c4.41 0 8 3.585 8 8.007V56h47.993c4.416 0 8.007 3.582 8.007 8 0 4.41-3.585 8-8.007 8H72v47.993c0 4.416-3.582 8.007-8 8.007-4.41 0-8-3.585-8-8.007V72z\"/></svg>"
},
"$:/core/images/new-here-button": {
"title": "$:/core/images/new-here-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-new-here-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M55.838 20.935l-3.572.938c-3.688.968-8.23 4.43-10.136 7.731L3.37 96.738c-1.905 3.3-.771 7.524 2.534 9.432l33.717 19.466c3.297 1.904 7.53.78 9.435-2.521l38.76-67.134c1.905-3.3 2.632-8.963 1.623-12.646L83.285 20.88c-1.009-3.68-4.821-5.884-8.513-4.915l-7.603 1.995.043.287c.524 3.394 2.053 7.498 4.18 11.55.418.163.829.36 1.23.59a8.864 8.864 0 014.438 8.169c.104.132.21.264.316.395l-.386.318a8.663 8.663 0 01-1.082 3.137c-2.42 4.192-7.816 5.608-12.051 3.163-4.12-2.379-5.624-7.534-3.476-11.671-2.177-4.394-3.788-8.874-4.543-12.964z\"/><path d=\"M69.554 44.76c-5.944-7.476-10.74-17.196-11.955-25.059-1.68-10.875 3.503-18.216 15.082-18.04 10.407.158 19.975 5.851 24.728 13.785 5.208 8.695 2.95 17.868-6.855 20.496l-2.037-7.601c4.232-1.134 4.999-4.248 2.24-8.853-3.37-5.626-10.465-9.848-18.146-9.965-6.392-.097-8.31 2.62-7.323 9.01.999 6.465 5.318 15.138 10.582 21.65l-.072.06c.559 1.553-4.17 6.44-5.938 4.888l-.005.004-.028-.034a1.323 1.323 0 01-.124-.135 2.618 2.618 0 01-.149-.205z\"/><rect width=\"16\" height=\"48\" x=\"96\" y=\"80\" rx=\"8\"/><rect width=\"48\" height=\"16\" x=\"80\" y=\"96\" rx=\"8\"/></g></svg>"
},
"$:/core/images/new-image-button": {
"title": "$:/core/images/new-image-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-new-image-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M81.362 73.627l15.826-27.41a2.626 2.626 0 00-.962-3.59l-50.01-28.872a2.626 2.626 0 00-3.588.961L30.058 36.49l10.04-5.261c3.042-1.595 6.771.114 7.55 3.46l3.607 17.702 9.88.85a5.25 5.25 0 014.571 3.77c.034.115.1.344.199.671.165.553.353 1.172.562 1.843.595 1.914 1.23 3.85 1.872 5.678.207.588.412 1.156.614 1.701.625 1.685 1.209 3.114 1.725 4.207.255.54.485.977.726 1.427.214.212.547.425 1.011.622 1.141.482 2.784.74 4.657.758.864.008 1.71-.034 2.492-.11.448-.043.753-.085.871-.104.315-.053.625-.077.927-.076zM37.47 2.649A5.257 5.257 0 0144.649.725l63.645 36.746a5.257 5.257 0 011.923 7.178L73.47 108.294a5.257 5.257 0 01-7.177 1.923L2.649 73.47a5.257 5.257 0 01-1.924-7.177L37.471 2.649zm42.837 50.49a5.25 5.25 0 105.25-9.092 5.25 5.25 0 00-5.25 9.093zM96 112h-7.993c-4.419 0-8.007-3.582-8.007-8 0-4.41 3.585-8 8.007-8H96v-7.993C96 83.588 99.582 80 104 80c4.41 0 8 3.585 8 8.007V96h7.993c4.419 0 8.007 3.582 8.007 8 0 4.41-3.585 8-8.007 8H112v7.993c0 4.419-3.582 8.007-8 8.007-4.41 0-8-3.585-8-8.007V112zM33.347 51.791c7.428 7.948 9.01 10.69 7.449 13.394-1.56 2.703-13.838-2.328-16.094 1.58-2.256 3.908-.907 3.258-2.437 5.908l19.73 11.39s-5.605-8.255-4.235-10.628c2.515-4.356 8.77-1.256 10.365-4.019 2.414-4.181-5.103-9.639-14.778-17.625z\"/></svg>"
},
"$:/core/images/new-journal-button": {
"title": "$:/core/images/new-journal-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-new-journal-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M102.545 112.818v11.818c0 1.306 1.086 2.364 2.425 2.364h6.06c1.34 0 2.425-1.058 2.425-2.364v-11.818h12.12c1.34 0 2.425-1.058 2.425-2.363v-5.91c0-1.305-1.085-2.363-2.424-2.363h-12.121V90.364c0-1.306-1.086-2.364-2.425-2.364h-6.06c-1.34 0-2.425 1.058-2.425 2.364v11.818h-12.12c-1.34 0-2.425 1.058-2.425 2.363v5.91c0 1.305 1.085 2.363 2.424 2.363h12.121zM60.016 4.965c-4.781-2.76-10.897-1.118-13.656 3.66L5.553 79.305A9.993 9.993 0 009.21 92.963l51.04 29.468c4.78 2.76 10.897 1.118 13.655-3.66l40.808-70.681a9.993 9.993 0 00-3.658-13.656L60.016 4.965zm-3.567 27.963a6 6 0 106-10.393 6 6 0 00-6 10.393zm31.697 17.928a6 6 0 106-10.392 6 6 0 00-6 10.392z\"/><text class=\"tc-fill-background\" font-family=\"Helvetica\" font-size=\"47.172\" font-weight=\"bold\" transform=\"rotate(30 25.742 95.82)\"><tspan x=\"42\" y=\"77.485\" text-anchor=\"middle\"><<now \"DD\">></tspan></text></g></svg>"
},
"$:/core/images/opacity": {
"title": "$:/core/images/opacity",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-opacity tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M102.362 65a51.595 51.595 0 01-1.942 6H82.584a35.867 35.867 0 002.997-6h16.78zm.472-2c.423-1.961.734-3.963.929-6H87.656a35.78 35.78 0 01-1.368 6h16.546zm-3.249 10a51.847 51.847 0 01-3.135 6H75.812a36.205 36.205 0 005.432-6h18.341zm-4.416 8c-1.424 2.116-3 4.12-4.71 6H60.46a35.843 35.843 0 0012.874-6h21.834zm-7.513-34h16.107C101.247 20.627 79.033 0 52 0 23.281 0 0 23.281 0 52c0 25.228 17.965 46.26 41.8 51h20.4a51.66 51.66 0 0015.875-6H39v-2h42.25a52.257 52.257 0 007.288-6H39v-2h4.539C27.739 83.194 16 68.968 16 52c0-19.882 16.118-36 36-36 18.186 0 33.222 13.484 35.656 31zm.22 2h16.039a52.823 52.823 0 010 6H87.877a36.483 36.483 0 000-6z\"/><path d=\"M76 128c28.719 0 52-23.281 52-52s-23.281-52-52-52-52 23.281-52 52 23.281 52 52 52zm0-16c19.882 0 36-16.118 36-36S95.882 40 76 40 40 56.118 40 76s16.118 36 36 36z\"/><path d=\"M37 58h53v4H37v-4zm3-8h53v4H40v-4zm0-8h53v4H40v-4zm-8 24h53v4H32v-4zm-2 8h53v4H30v-4zm-3 8h53v4H27v-4z\"/></g></svg>"
},
"$:/core/images/open-window": {
"title": "$:/core/images/open-window",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-open-window tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M16 112h88.994c3.87 0 7.006 3.59 7.006 8 0 4.418-3.142 8-7.006 8H7.006C3.136 128 0 124.41 0 120a9.321 9.321 0 010-.01V24.01C0 19.586 3.59 16 8 16c4.418 0 8 3.584 8 8.01V112z\"/><path d=\"M96 43.196V56a8 8 0 1016 0V24c0-4.41-3.585-8-8.007-8H72.007C67.588 16 64 19.582 64 24c0 4.41 3.585 8 8.007 8H84.57l-36.3 36.299a8 8 0 00-.001 11.316c3.117 3.117 8.19 3.123 11.316-.003L96 43.196zM32 7.999C32 3.581 35.588 0 40 0h80c4.419 0 8 3.588 8 8v80c0 4.419-3.588 8-8 8H40c-4.419 0-8-3.588-8-8V8z\"/></g></svg>"
},
"$:/core/images/options-button": {
"title": "$:/core/images/options-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-options-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M110.488 76a47.712 47.712 0 01-5.134 12.384l6.724 6.724c3.123 3.123 3.132 8.192.011 11.313l-5.668 5.668c-3.12 3.12-8.186 3.117-11.313-.01l-6.724-6.725c-3.82 2.258-7.98 4-12.384 5.134v9.505c0 4.417-3.578 8.007-7.992 8.007h-8.016C55.58 128 52 124.415 52 119.993v-9.505a47.712 47.712 0 01-12.384-5.134l-6.724 6.725c-3.123 3.122-8.192 3.131-11.313.01l-5.668-5.668c-3.12-3.12-3.116-8.186.01-11.313l6.725-6.724c-2.257-3.82-4-7.98-5.134-12.384H8.007C3.591 76 0 72.422 0 68.01v-8.017C0 55.58 3.585 52 8.007 52h9.505a47.712 47.712 0 015.134-12.383l-6.724-6.725c-3.123-3.122-3.132-8.191-.011-11.312l5.668-5.669c3.12-3.12 8.186-3.116 11.313.01l6.724 6.725c3.82-2.257 7.98-4 12.384-5.134V8.007C52 3.591 55.578 0 59.992 0h8.016C72.42 0 76 3.585 76 8.007v9.505a47.712 47.712 0 0112.384 5.134l6.724-6.724c3.123-3.123 8.192-3.132 11.313-.01l5.668 5.668c3.12 3.12 3.116 8.186-.01 11.312l-6.725 6.725c2.257 3.82 4 7.979 5.134 12.383h9.505c4.416 0 8.007 3.578 8.007 7.992v8.017c0 4.411-3.585 7.991-8.007 7.991h-9.505zM64 96c17.673 0 32-14.327 32-32 0-17.673-14.327-32-32-32-17.673 0-32 14.327-32 32 0 17.673 14.327 32 32 32z\"/></svg>"
},
"$:/core/images/paint": {
"title": "$:/core/images/paint",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-paint tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M83.527 76.19C90.43 69.287 91.892 59 87.91 50.665l37.903-37.902c2.919-2.92 2.913-7.659 0-10.572a7.474 7.474 0 00-10.572 0L77.338 40.093c-8.335-3.982-18.622-2.521-25.526 4.383l31.715 31.715zm-2.643 2.644L49.169 47.119S8.506 81.243 0 80.282c0 0 3.782 5.592 6.827 8.039 14.024-5.69 37.326-24.6 37.326-24.6l.661.66S19.45 90.222 9.18 92.047c1.222 1.44 4.354 4.053 6.247 5.776 5.417-1.488 34.733-28.57 34.733-28.57l.661.66-32.407 31.022 5.285 5.286L56.106 75.2l.662.66s-27.864 30.536-28.684 32.432c0 0 6.032 6.853 7.569 7.824.702-2.836 27.884-33.485 27.884-33.485l.661.66s-20.597 23.755-24.964 36.732c3.21 3.549 7.5 5.137 10.926 6.298-2.19-11.817 30.724-47.487 30.724-47.487z\"/></svg>"
},
"$:/core/images/palette": {
"title": "$:/core/images/palette",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-palette tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M80.247 39.182a93.52 93.52 0 00-16.228-1.4C28.662 37.781 0 57.131 0 81.002c0 9.642 4.676 18.546 12.58 25.735C23.504 91.19 26.34 72.395 36.89 63.562c15.183-12.713 26.538-7.828 26.538-7.828l16.82-16.552zm26.535 9.655c13.049 7.913 21.257 19.392 21.257 32.166 0 9.35.519 17.411-11.874 25.08-10.797 6.681-3.824-6.536-11.844-10.898s-19.946 1.308-18.213 7.906c3.2 12.181 19.422 11.455 6.314 16.658-13.107 5.202-18.202 4.476-28.403 4.476-7.821 0-15.315-.947-22.243-2.68 9.844-4.197 27.88-12.539 33.354-19.456C82.788 92.409 87.37 80 83.324 72.484c-.194-.359 11.215-11.668 23.458-23.647zM1.134 123.867l-.66.002c33.479-14.94 22.161-64.226 58.818-64.226.317 1.418.644 2.944 1.062 4.494-25.907-4.166-23.567 48.031-59.22 59.73zm.713-.007c38.872-.506 78.152-22.347 78.152-44.813-9.27 0-14.073-3.48-16.816-7.942-16.597-7.003-30.365 45.715-61.336 52.755zm65.351-64.008c-4.45 4.115 4.886 16.433 11.318 11.318l45.27-45.27c11.317-11.318 0-22.635-11.318-11.318-11.317 11.318-33.518 34.405-45.27 45.27z\"/></svg>"
},
"$:/core/images/permalink-button": {
"title": "$:/core/images/permalink-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-permalink-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M80.483 48l-7.387 32h-25.58l7.388-32h25.58zm3.694-16l5.624-24.358c.993-4.303 5.29-6.996 9.596-6.002 4.296.992 6.988 5.293 5.994 9.602L100.598 32h3.403c4.41 0 7.999 3.582 7.999 8 0 4.41-3.581 8-8 8h-7.096l-7.387 32H104c4.41 0 7.999 3.582 7.999 8 0 4.41-3.581 8-8 8H85.824l-5.624 24.358c-.993 4.303-5.29 6.996-9.596 6.002-4.296-.992-6.988-5.293-5.994-9.602L69.402 96h-25.58L38.2 120.358c-.993 4.303-5.29 6.996-9.596 6.002-4.296-.992-6.988-5.293-5.994-9.602L27.402 96h-3.403C19.59 96 16 92.418 16 88c0-4.41 3.581-8 8-8h7.096l7.387-32H24C19.59 48 16 44.418 16 40c0-4.41 3.581-8 8-8h18.177l5.624-24.358c.993-4.303 5.29-6.996 9.596-6.002 4.296.992 6.988 5.293 5.994 9.602L58.598 32h25.58z\"/></svg>"
},
"$:/core/images/permaview-button": {
"title": "$:/core/images/permaview-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-permaview-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M81.483 48l-1.846 8h-5.58l1.847-8h5.58zm3.694-16l5.624-24.358c.993-4.303 5.29-6.996 9.596-6.002 4.296.992 6.988 5.293 5.994 9.602L101.598 32h2.403c4.41 0 7.999 3.582 7.999 8 0 4.41-3.581 8-8 8h-6.096l-1.847 8h7.944c4.41 0 7.999 3.582 7.999 8 0 4.41-3.581 8-8 8H92.364l-1.846 8H104c4.41 0 7.999 3.582 7.999 8 0 4.41-3.581 8-8 8H86.824l-5.624 24.358c-.993 4.303-5.29 6.996-9.596 6.002-4.296-.992-6.988-5.293-5.994-9.602L70.402 96h-5.58L59.2 120.358c-.993 4.303-5.29 6.996-9.596 6.002-4.296-.992-6.988-5.293-5.994-9.602L48.402 96h-5.58L37.2 120.358c-.993 4.303-5.29 6.996-9.596 6.002-4.296-.992-6.988-5.293-5.994-9.602L26.402 96h-2.403C19.59 96 16 92.418 16 88c0-4.41 3.581-8 8-8h6.096l1.847-8h-7.944C19.59 72 16 68.418 16 64c0-4.41 3.581-8 8-8h11.637l1.846-8H24C19.59 48 16 44.418 16 40c0-4.41 3.581-8 8-8h17.177l5.624-24.358c.993-4.303 5.29-6.996 9.596-6.002 4.296.992 6.988 5.293 5.994 9.602L57.598 32h5.58L68.8 7.642c.993-4.303 5.29-6.996 9.596-6.002 4.296.992 6.988 5.293 5.994 9.602L79.598 32h5.58zM53.904 48l-1.847 8h5.58l1.846-8h-5.579zm22.039 24l-1.847 8h-5.58l1.847-8h5.58zm-27.58 0l-1.846 8h5.579l1.847-8h-5.58z\"/></svg>"
},
"$:/core/images/picture": {
"title": "$:/core/images/picture",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-picture tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M112 68.233v-48.23A4.001 4.001 0 00107.997 16H20.003A4.001 4.001 0 0016 20.003v38.31l9.241-14.593c2.8-4.422 9.023-5.008 12.6-1.186l18.247 20.613 13.687-6.407a8 8 0 018.903 1.492 264.97 264.97 0 002.92 2.739 249.44 249.44 0 006.798 6.066 166.5 166.5 0 002.106 1.778c2.108 1.747 3.967 3.188 5.482 4.237.748.518 1.383.92 2.044 1.33.444.117 1.046.144 1.809.05 1.873-.233 4.238-1.144 6.723-2.547a36.016 36.016 0 003.205-2.044c.558-.4.93-.686 1.07-.802.376-.31.765-.577 1.165-.806zM0 8.007A8.01 8.01 0 018.007 0h111.986A8.01 8.01 0 01128 8.007v111.986a8.01 8.01 0 01-8.007 8.007H8.007A8.01 8.01 0 010 119.993V8.007zM95 42a8 8 0 100-16 8 8 0 000 16zM32 76c15.859 4.83 20.035 7.244 20.035 12S32 95.471 32 102.347c0 6.876 1.285 4.99 1.285 9.653H68s-13.685-6.625-13.685-10.8c0-7.665 10.615-8.34 10.615-13.2 0-7.357-14.078-8.833-32.93-12z\"/></svg>"
},
"$:/core/images/plugin-generic-language": {
"title": "$:/core/images/plugin-generic-language",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M61.207 68.137c-4.324 2.795-6.999 6.656-6.999 10.921 0 7.906 9.19 14.424 21.042 15.336 2.162 3.902 8.598 6.785 16.318 7.01-5.126-1.125-9.117-3.742-10.62-7.01C92.805 93.487 102 86.967 102 79.059c0-8.53-10.699-15.445-23.896-15.445-6.599 0-12.572 1.729-16.897 4.524zm12.794-14.158c-4.324 2.795-10.298 4.524-16.897 4.524-2.619 0-5.14-.272-7.497-.775-3.312 2.25-8.383 3.69-14.067 3.69l-.255-.002c4.119-.892 7.511-2.747 9.478-5.13-6.925-2.704-11.555-7.617-11.555-13.228 0-8.53 10.699-15.445 23.896-15.445C70.301 27.613 81 34.528 81 43.058c0 4.265-2.675 8.126-6.999 10.921zM64 0l54.56 32v64L64 128 9.44 96V32L64 0z\"/></svg>"
},
"$:/core/images/plugin-generic-plugin": {
"title": "$:/core/images/plugin-generic-plugin",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M40.397 76.446V95.34h14.12l-.001-.005a6.912 6.912 0 005.364-11.593l.046-.023a6.912 6.912 0 119.979.526l.086.055a6.914 6.914 0 004.408 10.948l-.023.092h21.32V75.568l-.15.038a6.912 6.912 0 00-11.593-5.364l-.022-.046a6.912 6.912 0 11.526-9.979l.055-.086a6.914 6.914 0 0010.948-4.408c.079.018.158.038.236.059v-15.74h-21.32l.023-.094a6.914 6.914 0 01-4.408-10.947 10.23 10.23 0 00-.086-.055 6.912 6.912 0 10-9.979-.526l-.046.023a6.912 6.912 0 01-5.364 11.593l.001.005h-14.12v12.847A6.912 6.912 0 0129.5 59.843l-.054.086a6.912 6.912 0 10-.526 9.979l.023.046a6.912 6.912 0 0111.455 6.492zM64 0l54.56 32v64L64 128 9.44 96V32L64 0z\"/></svg>"
},
"$:/core/images/plugin-generic-theme": {
"title": "$:/core/images/plugin-generic-theme",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M29.408 91.472L51.469 69.41l-.004-.005a2.22 2.22 0 01.004-3.146c.87-.87 2.281-.872 3.147-.005l9.465 9.464a2.22 2.22 0 01-.005 3.147c-.87.87-2.28.871-3.147.005l-.005-.005-22.061 22.062a6.686 6.686 0 11-9.455-9.455zM60.802 66.38c-2.436-2.704-4.465-5.091-5.817-6.869-6.855-9.014-10.313-4.268-14.226 0-3.913 4.268 1.03 7.726-2.683 10.741-3.713 3.015-3.484 4.06-9.752-1.455-6.267-5.516-6.7-7.034-3.823-10.181 2.877-3.147 5.281 1.808 11.159-3.785 5.877-5.593.94-10.55.94-10.55s12.237-25.014 28.588-23.167c16.351 1.848-6.186-2.392-11.792 17.226-2.4 8.4.447 6.42 4.998 9.968 1.394 1.086 6.03 4.401 11.794 8.685l20.677-20.676 1.615-4.766 7.84-4.689 3.151 3.152-4.688 7.84-4.766 1.615-20.224 20.223c12.663 9.547 28.312 22.146 28.312 26.709 0 7.217-3.071 11.526-9.535 9.164-4.693-1.715-18.768-15.192-28.753-25.897l-2.893 2.893-3.151-3.152 3.029-3.029zM63.953 0l54.56 32v64l-54.56 32-54.56-32V32l54.56-32z\"/></svg>"
},
"$:/core/images/preview-closed": {
"title": "$:/core/images/preview-closed",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-preview-closed tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M.088 64a7.144 7.144 0 001.378 5.458C16.246 88.818 39.17 100.414 64 100.414c24.83 0 47.753-11.596 62.534-30.956A7.144 7.144 0 00127.912 64C110.582 78.416 88.304 87.086 64 87.086 39.696 87.086 17.418 78.416.088 64z\"/><rect width=\"4\" height=\"16\" x=\"62\" y=\"96\" rx=\"4\"/><rect width=\"4\" height=\"16\" x=\"78\" y=\"93\" rx=\"4\" transform=\"rotate(-5 80 101)\"/><rect width=\"4\" height=\"16\" x=\"46\" y=\"93\" rx=\"4\" transform=\"rotate(5 48 101)\"/><rect width=\"4\" height=\"16\" x=\"30\" y=\"88\" rx=\"4\" transform=\"rotate(10 32 96)\"/><rect width=\"4\" height=\"16\" x=\"94\" y=\"88\" rx=\"4\" transform=\"rotate(-10 96 96)\"/><rect width=\"4\" height=\"16\" x=\"110\" y=\"80\" rx=\"4\" transform=\"rotate(-20 112 88)\"/><rect width=\"4\" height=\"16\" x=\"14\" y=\"80\" rx=\"4\" transform=\"rotate(20 16 88)\"/></g></svg>"
},
"$:/core/images/preview-open": {
"title": "$:/core/images/preview-open",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-preview-open tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M64.11 99.588c-24.83 0-47.754-11.596-62.534-30.957a7.148 7.148 0 010-8.675C16.356 40.596 39.28 29 64.11 29c24.83 0 47.753 11.596 62.534 30.956a7.148 7.148 0 010 8.675c-14.78 19.36-37.703 30.957-62.534 30.957zm46.104-32.007c1.44-1.524 1.44-3.638 0-5.162C99.326 50.9 82.439 44 64.147 44S28.968 50.9 18.08 62.42c-1.44 1.523-1.44 3.637 0 5.16C28.968 79.1 45.855 86 64.147 86s35.179-6.9 46.067-18.42z\"/><path d=\"M63.5 88C76.479 88 87 77.479 87 64.5S76.479 41 63.5 41 40 51.521 40 64.5 50.521 88 63.5 88z\"/></g></svg>"
},
"$:/core/images/print-button": {
"title": "$:/core/images/print-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-print-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M112 71V30.5h-.032c-.035-2-.816-3.99-2.343-5.516L86.998 2.357A7.978 7.978 0 0081 .02V0H24a8 8 0 00-8 8v63h8V8h57v14.5c0 4.422 3.582 8 8 8h15V71h8z\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"36\" rx=\"4\"/><rect width=\"64\" height=\"8\" x=\"32\" y=\"52\" rx=\"4\"/><rect width=\"40\" height=\"8\" x=\"32\" y=\"20\" rx=\"4\"/><path d=\"M0 80.005C0 71.165 7.156 64 16 64h96c8.836 0 16 7.155 16 16.005v31.99c0 8.84-7.156 16.005-16 16.005H16c-8.836 0-16-7.155-16-16.005v-31.99zM104 96a8 8 0 100-16 8 8 0 000 16z\"/></g></svg>"
},
"$:/core/images/quote": {
"title": "$:/core/images/quote",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-quote tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M51.219 117.713V62.199H27.427c0-8.891 1.683-16.401 5.047-22.53 3.365-6.127 9.613-10.754 18.745-13.878V2c-7.45.961-14.36 3.184-20.728 6.669-6.368 3.484-11.835 7.87-16.401 13.157C9.524 27.113 5.98 33.241 3.456 40.21.933 47.18-.21 54.63.03 62.56v55.153H51.22zm76.781 0V62.199h-23.791c0-8.891 1.682-16.401 5.046-22.53 3.365-6.127 9.613-10.754 18.745-13.878V2c-7.45.961-14.359 3.184-20.727 6.669-6.369 3.484-11.836 7.87-16.402 13.157-4.566 5.287-8.11 11.415-10.634 18.384-2.523 6.97-3.665 14.42-3.424 22.35v55.153H128z\"/></svg>"
},
"$:/core/images/refresh-button": {
"title": "$:/core/images/refresh-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-refresh-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M106.369 39.433c10.16 20.879 6.57 46.764-10.771 64.106-21.87 21.87-57.327 21.87-79.196 0-21.87-21.87-21.87-57.326 0-79.196a8 8 0 1111.314 11.314c-15.621 15.62-15.621 40.947 0 56.568 15.62 15.621 40.947 15.621 56.568 0C97.72 78.79 99.6 58.175 89.924 42.73l-6.44 12.264a8 8 0 11-14.166-7.437L84.435 18.76a8 8 0 0110.838-3.345l28.873 15.345a8 8 0 11-7.51 14.129l-10.267-5.457zm-8.222-12.368c-.167-.19-.336-.38-.506-.57l.96-.296-.454.866z\"/></svg>"
},
"$:/core/images/right-arrow": {
"title": "$:/core/images/right-arrow",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-right-arrow tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M99.069 64.173c0 2.027-.77 4.054-2.316 5.6l-55.98 55.98a7.92 7.92 0 01-11.196 0c-3.085-3.086-3.092-8.105 0-11.196l50.382-50.382-50.382-50.382a7.92 7.92 0 010-11.195c3.086-3.085 8.104-3.092 11.196 0l55.98 55.98a7.892 7.892 0 012.316 5.595z\"/></svg>"
},
"$:/core/images/rotate-left": {
"title": "$:/core/images/rotate-left",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-rotate-left tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"32\" height=\"80\" rx=\"8\"/><rect width=\"80\" height=\"32\" x=\"48\" y=\"96\" rx=\"8\"/><path d=\"M61.32 36.65c19.743 2.45 35.023 19.287 35.023 39.693a4 4 0 01-8 0c0-15.663-11.254-28.698-26.117-31.46l3.916 3.916a4 4 0 11-5.657 5.657L49.172 43.142a4 4 0 010-5.657l11.313-11.313a4 4 0 115.657 5.656l-4.821 4.822z\"/></g></svg>"
},
"$:/core/images/save-button": {
"title": "$:/core/images/save-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-save-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M120.783 34.33c4.641 8.862 7.266 18.948 7.266 29.646 0 35.347-28.653 64-64 64-35.346 0-64-28.653-64-64 0-35.346 28.654-64 64-64 18.808 0 35.72 8.113 47.43 21.03l2.68-2.68c3.13-3.13 8.197-3.132 11.321-.008 3.118 3.118 3.121 8.193-.007 11.32l-4.69 4.691zm-12.058 12.058a47.876 47.876 0 013.324 17.588c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48c14.39 0 27.3 6.332 36.098 16.362L58.941 73.544 41.976 56.578c-3.127-3.127-8.201-3.123-11.32-.005-3.123 3.124-3.119 8.194.006 11.319l22.617 22.617a7.992 7.992 0 005.659 2.347c2.05 0 4.101-.783 5.667-2.349l44.12-44.12z\"/></svg>"
},
"$:/core/images/size": {
"title": "$:/core/images/size",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-size tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M92.343 26l-9.171 9.172a4 4 0 105.656 5.656l16-16a4 4 0 000-5.656l-16-16a4 4 0 10-5.656 5.656L92.343 18H22a4 4 0 00-4 4v70.343l-9.172-9.171a4 4 0 10-5.656 5.656l16 16a4 4 0 005.656 0l16-16a4 4 0 10-5.656-5.656L26 92.343V22l-4 4h70.343zM112 52v64l4-4H52a4 4 0 100 8h64a4 4 0 004-4V52a4 4 0 10-8 0z\"/></svg>"
},
"$:/core/images/spiral": {
"title": "$:/core/images/spiral",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-spiral tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M64.534 68.348c3.39 0 6.097-2.62 6.476-5.968l-4.755-.538 4.75.583c.377-3.07-1.194-6.054-3.89-7.78-2.757-1.773-6.34-2.01-9.566-.7-3.46 1.403-6.14 4.392-7.35 8.148l-.01.026c-1.3 4.08-.72 8.64 1.58 12.52 2.5 4.2 6.77 7.2 11.76 8.27 5.37 1.15 11.11-.05 15.83-3.31 5.04-3.51 8.46-9.02 9.45-15.3 1.05-6.7-.72-13.63-4.92-19.19l.02.02c-4.42-5.93-11.2-9.82-18.78-10.78-7.96-1.01-16.13 1.31-22.59 6.43-6.81 5.39-11.18 13.41-12.11 22.26-.98 9.27 1.87 18.65 7.93 26.02 6.32 7.69 15.6 12.56 25.74 13.48 10.54.96 21.15-2.42 29.45-9.4l.01-.01c8.58-7.25 13.94-17.78 14.86-29.21.94-11.84-2.96-23.69-10.86-32.9-8.19-9.5-19.95-15.36-32.69-16.27-13.16-.94-26.24 3.49-36.34 12.34l.01-.01c-10.41 9.08-16.78 22.1-17.68 36.15-.93 14.44 4.03 28.77 13.79 39.78 10.03 11.32 24.28 18.2 39.6 19.09 15.73.92 31.31-4.56 43.24-15.234 12.23-10.954 19.61-26.44 20.5-43.074a4.785 4.785 0 00-4.52-5.03 4.778 4.778 0 00-5.03 4.52c-.75 14.1-7 27.2-17.33 36.45-10.03 8.98-23.11 13.58-36.3 12.81-12.79-.75-24.67-6.48-33-15.89-8.07-9.11-12.17-20.94-11.41-32.827.74-11.52 5.942-22.15 14.43-29.54l.01-.01c8.18-7.17 18.74-10.75 29.35-9.998 10.21.726 19.6 5.41 26.11 12.96 6.24 7.273 9.32 16.61 8.573 25.894-.718 8.9-4.88 17.064-11.504 22.66l.01-.007c-6.36 5.342-14.44 7.92-22.425 7.19-7.604-.68-14.52-4.314-19.21-10.027-4.44-5.4-6.517-12.23-5.806-18.94.67-6.3 3.76-11.977 8.54-15.766 4.46-3.54 10.05-5.128 15.44-4.44 5.03.63 9.46 3.18 12.32 7.01l.02.024c2.65 3.5 3.75 7.814 3.1 11.92-.59 3.71-2.58 6.925-5.45 8.924-2.56 1.767-5.61 2.403-8.38 1.81-2.42-.516-4.42-1.92-5.53-3.79-.93-1.56-1.15-3.3-.69-4.75l-4.56-1.446L59.325 65c.36-1.12 1.068-1.905 1.84-2.22.25-.103.48-.14.668-.13.06.006.11.015.14.025.01 0 .01 0-.01-.01a1.047 1.047 0 01-.264-.332c-.15-.29-.23-.678-.18-1.11l-.005.04c.15-1.332 1.38-2.523 3.035-2.523-2.65 0-4.79 2.144-4.79 4.787s2.14 4.785 4.78 4.785z\"/></svg>"
},
"$:/core/images/stamp": {
"title": "$:/core/images/stamp",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-stamp tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M49.733 64H16.01C11.584 64 8 67.583 8 72.003V97h112V72.003A8 8 0 00111.99 64H78.267A22.813 22.813 0 0175.5 53.077c0-6.475 2.687-12.324 7.009-16.497A22.818 22.818 0 0087 22.952C87 10.276 76.703 0 64 0S41 10.276 41 22.952c0 5.103 1.669 9.817 4.491 13.628 4.322 4.173 7.009 10.022 7.009 16.497 0 3.954-1.002 7.675-2.767 10.923zM8 104h112v8H8v-8z\"/></svg>"
},
"$:/core/images/star-filled": {
"title": "$:/core/images/star-filled",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-star-filled tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M61.836 96.823l37.327 27.287c2.72 1.99 6.379-.69 5.343-3.912L90.29 75.988l-1.26 3.91 37.285-27.345c2.718-1.993 1.32-6.327-2.041-6.33l-46.113-.036 3.3 2.416L67.176 4.416c-1.04-3.221-5.563-3.221-6.604 0L46.29 48.603l3.3-2.416-46.113.036c-3.362.003-4.759 4.337-2.04 6.33L38.72 79.898l-1.26-3.91-14.216 44.21c-1.036 3.223 2.622 5.901 5.343 3.912l37.326-27.287h-4.078z\"/></svg>"
},
"$:/core/images/storyview-classic": {
"title": "$:/core/images/storyview-classic",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-storyview-classic tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M8.007 0A8.01 8.01 0 000 8.007v111.986A8.01 8.01 0 008.007 128h111.986a8.01 8.01 0 008.007-8.007V8.007A8.01 8.01 0 00119.993 0H8.007zm15.992 16C19.581 16 16 19.578 16 23.992v16.016C16 44.422 19.588 48 24 48h80c4.419 0 8-3.578 8-7.992V23.992c0-4.414-3.588-7.992-8-7.992H24zm0 48C19.581 64 16 67.59 16 72c0 4.418 3.588 8 8 8h80c4.419 0 8-3.59 8-8 0-4.418-3.588-8-8-8H24zm0 32C19.581 96 16 99.59 16 104c0 4.418 3.588 8 8 8h80c4.419 0 8-3.59 8-8 0-4.418-3.588-8-8-8H24z\"/></svg>"
},
"$:/core/images/storyview-pop": {
"title": "$:/core/images/storyview-pop",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-storyview-pop tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M8.007 0A8.01 8.01 0 000 8.007v111.986A8.01 8.01 0 008.007 128h111.986a8.01 8.01 0 008.007-8.007V8.007A8.01 8.01 0 00119.993 0H8.007zm15.992 16C19.581 16 16 19.578 16 23.992v16.016C16 44.422 19.588 48 24 48h80c4.419 0 8-3.578 8-7.992V23.992c0-4.414-3.588-7.992-8-7.992H24zm-7.99 40C11.587 56 8 59.578 8 63.992v16.016C8 84.422 11.584 88 16.01 88h95.98c4.424 0 8.01-3.578 8.01-7.992V63.992c0-4.414-3.584-7.992-8.01-7.992H16.01zM24 96C19.581 96 16 99.59 16 104c0 4.418 3.588 8 8 8h80c4.419 0 8-3.59 8-8 0-4.418-3.588-8-8-8H24zm0-32C19.581 64 16 67.59 16 72c0 4.418 3.588 8 8 8h80c4.419 0 8-3.59 8-8 0-4.418-3.588-8-8-8H24z\"/></svg>"
},
"$:/core/images/storyview-zoomin": {
"title": "$:/core/images/storyview-zoomin",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-storyview-zoomin tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M8.007 0A8.01 8.01 0 000 8.007v111.986A8.01 8.01 0 008.007 128h111.986a8.01 8.01 0 008.007-8.007V8.007A8.01 8.01 0 00119.993 0H8.007zm15.992 16A8 8 0 0016 24.009V71.99C16 76.414 19.588 80 24 80h80a8 8 0 008-8.009V24.01c0-4.423-3.588-8.009-8-8.009H24z\"/></svg>"
},
"$:/core/images/strikethrough": {
"title": "$:/core/images/strikethrough",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-strikethrough tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M92.794 38.726h15.422c-.229-6.74-1.514-12.538-3.856-17.393-2.342-4.855-5.54-8.881-9.596-12.08-4.055-3.199-8.767-5.54-14.136-7.025C75.258.743 69.433 0 63.15 0a62.76 62.76 0 00-16.364 2.142C41.474 3.57 36.733 5.74 32.564 8.653c-4.17 2.913-7.511 6.626-10.025 11.138-2.513 4.512-3.77 9.853-3.77 16.022 0 5.597 1.115 10.252 3.342 13.965 2.228 3.712 5.198 6.74 8.91 9.081 3.713 2.342 7.911 4.227 12.595 5.655a194.641 194.641 0 0014.308 3.77c4.855 1.085 9.624 2.142 14.308 3.17 4.683 1.028 8.881 2.37 12.594 4.027 3.713 1.656 6.683 3.798 8.91 6.425 2.228 2.628 3.342 6.055 3.342 10.281 0 4.456-.914 8.111-2.742 10.967a19.953 19.953 0 01-7.197 6.768c-2.97 1.657-6.311 2.828-10.024 3.513a60.771 60.771 0 01-11.052 1.028c-4.57 0-9.025-.571-13.366-1.713-4.34-1.143-8.139-2.913-11.394-5.312-3.256-2.4-5.884-5.455-7.883-9.168-1.999-3.712-2.998-8.139-2.998-13.28H15c0 7.426 1.342 13.852 4.027 19.278 2.684 5.426 6.34 9.881 10.966 13.365 4.627 3.484 9.996 6.083 16.107 7.797 6.112 1.713 12.595 2.57 19.449 2.57 5.597 0 11.223-.657 16.878-1.97 5.655-1.314 10.767-3.428 15.336-6.34 4.57-2.914 8.31-6.683 11.224-11.31 2.913-4.626 4.37-10.195 4.37-16.707 0-6.054-1.115-11.08-3.342-15.079-2.228-3.998-5.198-7.31-8.91-9.938-3.713-2.627-7.911-4.712-12.595-6.254a170.83 170.83 0 00-14.308-4.027 549.669 549.669 0 00-14.308-3.17c-4.683-.971-8.881-2.2-12.594-3.684-3.713-1.485-6.683-3.399-8.91-5.74-2.228-2.342-3.342-5.398-3.342-9.168 0-3.998.771-7.34 2.313-10.024 1.543-2.685 3.599-4.826 6.17-6.426 2.57-1.599 5.51-2.741 8.824-3.427a49.767 49.767 0 0110.11-1.028c8.453 0 15.393 1.97 20.819 5.912 5.426 3.94 8.596 10.31 9.51 19.106z\"/><path d=\"M5 54h118v16H5z\"/></g></svg>"
},
"$:/core/images/subscript": {
"title": "$:/core/images/subscript",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-subscript tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M2.272 16h19.91l21.649 33.675L66.414 16h18.708L53.585 61.969l33.809 49.443H67.082L43.296 74.93l-24.187 36.48H0L33.808 61.97 2.272 16zM127.91 128.412H85.328c.059-5.168 1.306-9.681 3.741-13.542 2.435-3.86 5.761-7.216 9.978-10.066a112.388 112.388 0 016.325-4.321 50.09 50.09 0 006.058-4.499c1.841-1.603 3.356-3.34 4.543-5.211 1.188-1.871 1.812-4.024 1.871-6.46 0-1.128-.133-2.33-.4-3.607a9.545 9.545 0 00-1.56-3.564c-.772-1.098-1.84-2.019-3.207-2.761-1.366-.743-3.148-1.114-5.345-1.114-2.02 0-3.697.4-5.033 1.203-1.337.801-2.406 1.9-3.208 3.296-.801 1.396-1.395 3.044-1.781 4.944-.386 1.9-.609 3.95-.668 6.147H86.486c0-3.445.46-6.637 1.38-9.577.921-2.94 2.302-5.478 4.143-7.617 1.841-2.138 4.083-3.815 6.726-5.033 2.643-1.217 5.716-1.826 9.22-1.826 3.802 0 6.979.623 9.533 1.87 2.554 1.248 4.617 2.822 6.191 4.722 1.574 1.9 2.688 3.965 3.341 6.192.653 2.227.98 4.35.98 6.37 0 2.494-.386 4.75-1.158 6.77a21.803 21.803 0 01-3.118 5.568 31.516 31.516 0 01-4.454 4.677 66.788 66.788 0 01-5.167 4.009 139.198 139.198 0 01-5.346 3.563 79.237 79.237 0 00-4.944 3.386c-1.514 1.128-2.836 2.3-3.964 3.518-1.129 1.218-1.9 2.51-2.317 3.876h30.379v9.087z\"/></svg>"
},
"$:/core/images/superscript": {
"title": "$:/core/images/superscript",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-superscript tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M2.272 16h19.91l21.649 33.675L66.414 16h18.708L53.585 61.969l33.809 49.443H67.082L43.296 74.93l-24.187 36.48H0L33.808 61.97 2.272 16zM127.91 63.412H85.328c.059-5.168 1.306-9.681 3.741-13.542 2.435-3.86 5.761-7.216 9.978-10.066a112.388 112.388 0 016.325-4.321 50.09 50.09 0 006.058-4.499c1.841-1.603 3.356-3.34 4.543-5.211 1.188-1.871 1.812-4.024 1.871-6.46 0-1.128-.133-2.33-.4-3.607a9.545 9.545 0 00-1.56-3.564c-.772-1.098-1.84-2.019-3.207-2.761-1.366-.743-3.148-1.114-5.345-1.114-2.02 0-3.697.4-5.033 1.203-1.337.801-2.406 1.9-3.208 3.296-.801 1.396-1.395 3.044-1.781 4.944-.386 1.9-.609 3.95-.668 6.147H86.486c0-3.445.46-6.637 1.38-9.577.921-2.94 2.302-5.478 4.143-7.617 1.841-2.138 4.083-3.815 6.726-5.033 2.643-1.217 5.716-1.826 9.22-1.826 3.802 0 6.979.623 9.533 1.87 2.554 1.248 4.617 2.822 6.191 4.722 1.574 1.9 2.688 3.965 3.341 6.192.653 2.227.98 4.35.98 6.37 0 2.494-.386 4.75-1.158 6.77a21.803 21.803 0 01-3.118 5.568 31.516 31.516 0 01-4.454 4.677 66.788 66.788 0 01-5.167 4.009 139.198 139.198 0 01-5.346 3.563 79.237 79.237 0 00-4.944 3.386c-1.514 1.128-2.836 2.3-3.964 3.518-1.129 1.218-1.9 2.51-2.317 3.876h30.379v9.087z\"/></svg>"
},
"$:/core/images/tag-button": {
"title": "$:/core/images/tag-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-tag-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M18.164 47.66l.004 4.105c.003 3.823 2.19 9.097 4.885 11.792l61.85 61.85c2.697 2.697 7.068 2.69 9.769-.01L125.767 94.3a6.903 6.903 0 00.01-9.77L63.928 22.683c-2.697-2.697-7.976-4.88-11.796-4.881l-27.076-.007a6.902 6.902 0 00-6.91 6.91l.008 9.96.287.033c3.73.411 8.489-.044 13.365-1.153a9.702 9.702 0 0111.14-3.662l.291-.13.128.285a9.7 9.7 0 013.3 2.17c3.796 3.796 3.801 9.945.012 13.734-3.618 3.618-9.386 3.777-13.204.482-5.365 1.122-10.674 1.596-15.309 1.237z\"/><path d=\"M47.633 39.532l.023.051c-9.689 4.356-21.584 6.799-30.396 5.828C5.273 44.089-1.028 36.43 2.443 24.078 5.562 12.976 14.3 4.361 24.047 1.548c10.68-3.083 19.749 1.968 19.749 13.225h-8.623c0-4.859-3.078-6.573-8.735-4.94-6.91 1.995-13.392 8.383-15.694 16.577-1.915 6.818.417 9.653 7.46 10.43 7.126.785 17.531-1.352 25.917-5.121l.027.06.036-.017c1.76-.758 6.266 6.549 3.524 7.74a2.8 2.8 0 01-.075.03z\"/></g></svg>"
},
"$:/core/images/theme-button": {
"title": "$:/core/images/theme-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-theme-button tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M55.854 66.945a122.626 122.626 0 01-3.9-4.819c-11.064-14.548-16.645-6.888-22.96 0-6.315 6.888 1.664 12.47-4.33 17.335-5.993 4.866-5.623 6.552-15.737-2.35-10.115-8.9-10.815-11.351-6.172-16.43 4.644-5.08 8.524 2.918 18.01-6.108 9.485-9.026 1.517-17.026 1.517-17.026S42.03-2.824 68.42.157c26.39 2.982-9.984-3.86-19.031 27.801-3.874 13.556.72 10.362 8.066 16.087 1.707 1.33 6.428 4.732 12.671 9.318-6.129 5.879-11.157 10.669-14.273 13.582zm11.641 12.947c16.013 17.036 37.742 37.726 45.117 40.42 10.432 3.813 15.388-3.141 15.388-14.79 0-7.151-23.83-26.542-43.924-41.769-7.408 7.156-13.376 12.953-16.58 16.139z\"/><path d=\"M11.069 109.828L46.31 74.587a3.56 3.56 0 115.037-5.032l15.098 15.098a3.56 3.56 0 11-5.032 5.037l-35.24 35.241c-4.171 4.17-10.933 4.17-15.104 0-4.17-4.17-4.17-10.933 0-15.103zM124.344 6.622l5.034 5.034-7.49 12.524-7.613 2.58L61.413 79.62l-5.034-5.034 52.861-52.862 2.58-7.614 12.524-7.49z\"/></g></svg>"
},
"$:/core/images/timestamp-off": {
"title": "$:/core/images/timestamp-off",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-timestamp-off tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M58.25 11C26.08 11 0 37.082 0 69.25s26.08 58.25 58.25 58.25c32.175 0 58.25-26.082 58.25-58.25S90.425 11 58.25 11zm0 100.5C34.914 111.5 16 92.586 16 69.25 16 45.92 34.914 27 58.25 27s42.25 18.92 42.25 42.25c0 23.336-18.914 42.25-42.25 42.25zM49.704 10a5 5 0 010-10H66.69a5 5 0 015 5c.006 2.757-2.238 5-5 5H49.705z\"/><path d=\"M58.25 35.88c-18.777 0-33.998 15.224-33.998 33.998 0 18.773 15.22 34.002 33.998 34.002 18.784 0 34.002-15.23 34.002-34.002 0-18.774-15.218-33.998-34.002-33.998zm-3.03 50.123H44.196v-34H55.22v34zm16.976 0H61.17v-34h11.025v34z\"/></g></svg>"
},
"$:/core/images/timestamp-on": {
"title": "$:/core/images/timestamp-on",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-timestamp-on tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><path d=\"M58.25 11C26.08 11 0 37.082 0 69.25s26.08 58.25 58.25 58.25c32.175 0 58.25-26.082 58.25-58.25S90.425 11 58.25 11zm0 100.5C34.914 111.5 16 92.586 16 69.25 16 45.92 34.914 27 58.25 27s42.25 18.92 42.25 42.25c0 23.336-18.914 42.25-42.25 42.25zM49.704 10a5 5 0 010-10H66.69a5 5 0 015 5c.006 2.757-2.238 5-5 5H49.705z\"/><path d=\"M13.41 27.178a5.005 5.005 0 01-7.045-.613 5.008 5.008 0 01.616-7.047l9.95-8.348a5 5 0 016.429 7.661l-9.95 8.348zm89.573 0a5.005 5.005 0 007.045-.613 5.008 5.008 0 00-.616-7.047l-9.95-8.348a5 5 0 00-6.428 7.661l9.95 8.348zM65.097 71.072c0 3.826-3.09 6.928-6.897 6.928-3.804.006-6.9-3.102-6.903-6.928 0 0 4.76-39.072 6.903-39.072s6.897 39.072 6.897 39.072z\"/></g></svg>"
},
"$:/core/images/tip": {
"title": "$:/core/images/tip",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-tip tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M64 128.242c35.346 0 64-28.654 64-64 0-35.346-28.654-64-64-64-35.346 0-64 28.654-64 64 0 35.346 28.654 64 64 64zm11.936-36.789c-.624 4.129-5.73 7.349-11.936 7.349-6.206 0-11.312-3.22-11.936-7.349C54.33 94.05 58.824 95.82 64 95.82c5.175 0 9.67-1.769 11.936-4.366zm0 4.492c-.624 4.13-5.73 7.349-11.936 7.349-6.206 0-11.312-3.22-11.936-7.349 2.266 2.597 6.76 4.366 11.936 4.366 5.175 0 9.67-1.769 11.936-4.366zm0 4.456c-.624 4.129-5.73 7.349-11.936 7.349-6.206 0-11.312-3.22-11.936-7.349 2.266 2.597 6.76 4.366 11.936 4.366 5.175 0 9.67-1.769 11.936-4.366zm0 4.492c-.624 4.13-5.73 7.349-11.936 7.349-6.206 0-11.312-3.22-11.936-7.349 2.266 2.597 6.76 4.366 11.936 4.366 5.175 0 9.67-1.769 11.936-4.366zM64.3 24.242c11.618 0 23.699 7.82 23.699 24.2S75.92 71.754 75.92 83.576c0 5.873-5.868 9.26-11.92 9.26s-12.027-3.006-12.027-9.26C51.973 71.147 40 65.47 40 48.442s12.683-24.2 24.301-24.2z\"/></svg>"
},
"$:/core/images/transcludify": {
"title": "$:/core/images/transcludify",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-transcludify-button tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M0 59.482c.591 0 1.36-.089 2.306-.266a10.417 10.417 0 002.75-.932 6.762 6.762 0 002.306-1.907c.651-.828.976-1.863.976-3.104V35.709c0-2.01.414-3.74 1.242-5.19.828-1.448 1.833-2.66 3.016-3.636s2.425-1.7 3.726-2.173c1.3-.473 2.424-.71 3.37-.71h8.073v7.451h-4.88c-1.241 0-2.232.207-2.97.621-.74.414-1.302.932-1.686 1.552a4.909 4.909 0 00-.71 1.996c-.089.71-.133 1.39-.133 2.04v16.677c0 1.715-.325 3.134-.976 4.258-.65 1.123-1.434 2.025-2.35 2.705-.917.68-1.863 1.168-2.839 1.464-.976.296-1.818.473-2.528.532v.178c.71.059 1.552.207 2.528.443.976.237 1.922.68 2.839 1.33.916.651 1.7 1.583 2.35 2.795.65 1.212.976 2.853.976 4.923v16.144c0 .65.044 1.33.133 2.04.089.71.325 1.375.71 1.996.384.621.946 1.139 1.685 1.553.74.414 1.73.62 2.972.62h4.879v7.452h-8.073c-.946 0-2.07-.237-3.37-.71-1.301-.473-2.543-1.197-3.726-2.173-1.183-.976-2.188-2.188-3.016-3.637-.828-1.449-1.242-3.179-1.242-5.19V74.119c0-1.42-.325-2.572-.976-3.46-.65-.886-1.419-1.581-2.306-2.084a8.868 8.868 0 00-2.75-1.02C1.36 67.377.591 67.288 0 67.288v-7.806zm24.66 0c.591 0 1.36-.089 2.306-.266a10.417 10.417 0 002.75-.932 6.762 6.762 0 002.306-1.907c.65-.828.976-1.863.976-3.104V35.709c0-2.01.414-3.74 1.242-5.19.828-1.448 1.833-2.66 3.016-3.636s2.425-1.7 3.726-2.173c1.3-.473 2.424-.71 3.37-.71h8.073v7.451h-4.88c-1.241 0-2.232.207-2.97.621-.74.414-1.302.932-1.686 1.552a4.909 4.909 0 00-.71 1.996c-.089.71-.133 1.39-.133 2.04v16.677c0 1.715-.325 3.134-.976 4.258-.65 1.123-1.434 2.025-2.35 2.705-.917.68-1.863 1.168-2.839 1.464-.976.296-1.818.473-2.528.532v.178c.71.059 1.552.207 2.528.443.976.237 1.922.68 2.839 1.33.916.651 1.7 1.583 2.35 2.795.65 1.212.976 2.853.976 4.923v16.144c0 .65.044 1.33.133 2.04.089.71.325 1.375.71 1.996.384.621.946 1.139 1.685 1.553.74.414 1.73.62 2.972.62h4.879v7.452h-8.073c-.946 0-2.07-.237-3.37-.71-1.301-.473-2.543-1.197-3.726-2.173-1.183-.976-2.188-2.188-3.016-3.637-.828-1.449-1.242-3.179-1.242-5.19V74.119c0-1.42-.325-2.572-.976-3.46-.65-.886-1.419-1.581-2.306-2.084a8.868 8.868 0 00-2.75-1.02c-.946-.177-1.715-.266-2.306-.266v-7.806zm43.965-3.538L80.6 52.041l2.306 7.097-12.063 3.903 7.628 10.378-6.12 4.435-7.63-10.467-7.45 10.201-5.943-4.524 7.628-10.023-12.152-4.17 2.306-7.096 12.064 4.17V43.347h7.451v12.596zm34.425 11.344c-.65 0-1.449.089-2.395.266-.946.177-1.863.488-2.75.931a6.356 6.356 0 00-2.262 1.908c-.62.828-.931 1.862-.931 3.104v17.564c0 2.01-.414 3.74-1.242 5.189-.828 1.449-1.833 2.661-3.016 3.637s-2.425 1.7-3.726 2.173c-1.3.473-2.424.71-3.37.71h-8.073v-7.451h4.88c1.241 0 2.232-.207 2.97-.621.74-.414 1.302-.932 1.686-1.553a4.9 4.9 0 00.71-1.995c.089-.71.133-1.39.133-2.04V72.432c0-1.715.325-3.134.976-4.258.65-1.124 1.434-2.01 2.35-2.661.917-.65 1.863-1.124 2.839-1.42.976-.295 1.818-.502 2.528-.62v-.178c-.71-.059-1.552-.207-2.528-.443-.976-.237-1.922-.68-2.839-1.33-.916-.651-1.7-1.583-2.35-2.795-.65-1.212-.976-2.853-.976-4.923V37.66c0-.651-.044-1.331-.133-2.04a4.909 4.909 0 00-.71-1.997c-.384-.62-.946-1.138-1.685-1.552-.74-.414-1.73-.62-2.972-.62h-4.879V24h8.073c.946 0 2.07.237 3.37.71 1.301.473 2.543 1.197 3.726 2.173 1.183.976 2.188 2.188 3.016 3.637.828 1.449 1.242 3.178 1.242 5.189v16.943c0 1.419.31 2.572.931 3.46a6.897 6.897 0 002.262 2.084 8.868 8.868 0 002.75 1.02c.946.177 1.745.266 2.395.266v7.806zm24.66 0c-.65 0-1.449.089-2.395.266-.946.177-1.863.488-2.75.931a6.356 6.356 0 00-2.262 1.908c-.62.828-.931 1.862-.931 3.104v17.564c0 2.01-.414 3.74-1.242 5.189-.828 1.449-1.833 2.661-3.016 3.637s-2.425 1.7-3.726 2.173c-1.3.473-2.424.71-3.37.71h-8.073v-7.451h4.88c1.241 0 2.232-.207 2.97-.621.74-.414 1.302-.932 1.686-1.553a4.9 4.9 0 00.71-1.995c.089-.71.133-1.39.133-2.04V72.432c0-1.715.325-3.134.976-4.258.65-1.124 1.434-2.01 2.35-2.661.917-.65 1.863-1.124 2.839-1.42.976-.295 1.818-.502 2.528-.62v-.178c-.71-.059-1.552-.207-2.528-.443-.976-.237-1.922-.68-2.839-1.33-.916-.651-1.7-1.583-2.35-2.795-.65-1.212-.976-2.853-.976-4.923V37.66c0-.651-.044-1.331-.133-2.04a4.909 4.909 0 00-.71-1.997c-.384-.62-.946-1.138-1.685-1.552-.74-.414-1.73-.62-2.972-.62h-4.879V24h8.073c.946 0 2.07.237 3.37.71 1.301.473 2.543 1.197 3.726 2.173 1.183.976 2.188 2.188 3.016 3.637.828 1.449 1.242 3.178 1.242 5.189v16.943c0 1.419.31 2.572.931 3.46a6.897 6.897 0 002.262 2.084 8.868 8.868 0 002.75 1.02c.946.177 1.745.266 2.395.266v7.806z\"/></svg>"
},
"$:/core/images/twitter": {
"title": "$:/core/images/twitter",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-twitter tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M41.626 115.803A73.376 73.376 0 012 104.235c2.022.238 4.08.36 6.166.36 12.111 0 23.258-4.117 32.105-11.023-11.312-.208-20.859-7.653-24.148-17.883a25.98 25.98 0 0011.674-.441C15.971 72.881 7.061 62.474 7.061 49.997c0-.108 0-.216.002-.323a25.824 25.824 0 0011.709 3.22c-6.936-4.617-11.5-12.5-11.5-21.433 0-4.719 1.274-9.142 3.5-12.945 12.75 15.579 31.797 25.83 53.281 26.904-.44-1.884-.67-3.85-.67-5.868 0-14.22 11.575-25.75 25.852-25.75a25.865 25.865 0 0118.869 8.132 51.892 51.892 0 0016.415-6.248c-1.93 6.012-6.029 11.059-11.366 14.246A51.844 51.844 0 00128 25.878a52.428 52.428 0 01-12.9 13.33c.05 1.104.075 2.214.075 3.33 0 34.028-26 73.265-73.549 73.265\"/></svg>"
},
"$:/core/images/underline": {
"title": "$:/core/images/underline",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-underline tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M7 117.421h114.248V128H7v-10.579zm97.871-18.525V0h-16.26v55.856c0 4.463-.605 8.576-1.816 12.338-1.212 3.762-3.03 7.046-5.452 9.851-2.423 2.806-5.452 4.974-9.086 6.504-3.635 1.53-7.939 2.296-12.912 2.296-6.25 0-11.159-1.786-14.73-5.356-3.57-3.571-5.356-8.417-5.356-14.538V0H23v65.038c0 5.356.542 10.234 1.626 14.633 1.084 4.4 2.965 8.194 5.643 11.382 2.678 3.188 6.185 5.643 10.52 7.365 4.337 1.721 9.756 2.582 16.26 2.582 7.27 0 13.582-1.435 18.938-4.304 5.356-2.87 9.755-7.365 13.199-13.486h.382v15.686h15.303z\"/></svg>"
},
"$:/core/images/unfold-all-button": {
"title": "$:/core/images/unfold-all-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-unfold-all tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"128\" height=\"16\" rx=\"8\"/><rect width=\"128\" height=\"16\" y=\"64\" rx=\"8\"/><path d=\"M63.945 60.624c-2.05 0-4.101-.78-5.666-2.345L35.662 35.662c-3.125-3.125-3.13-8.195-.005-11.319 3.118-3.118 8.192-3.122 11.319.005L63.94 41.314l16.966-16.966c3.124-3.124 8.194-3.129 11.318-.005 3.118 3.118 3.122 8.192-.005 11.319L69.603 58.279a7.986 7.986 0 01-5.663 2.346zM64.004 124.565c-2.05 0-4.102-.78-5.666-2.345L35.721 99.603c-3.125-3.125-3.13-8.195-.005-11.319 3.118-3.118 8.191-3.122 11.318.005L64 105.255l16.966-16.966c3.124-3.124 8.194-3.129 11.318-.005 3.118 3.118 3.122 8.192-.005 11.319L69.662 122.22a7.986 7.986 0 01-5.663 2.346z\"/></g></svg>"
},
"$:/core/images/unfold-button": {
"title": "$:/core/images/unfold-button",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-unfold tc-image-button\" viewBox=\"0 0 128 128\"><g fill-rule=\"evenodd\"><rect width=\"128\" height=\"16\" rx=\"8\"/><path d=\"M63.945 63.624c-2.05 0-4.101-.78-5.666-2.345L35.662 38.662c-3.125-3.125-3.13-8.195-.005-11.319 3.118-3.118 8.192-3.122 11.319.005L63.94 44.314l16.966-16.966c3.124-3.124 8.194-3.129 11.318-.005 3.118 3.118 3.122 8.192-.005 11.319L69.603 61.279a7.986 7.986 0 01-5.663 2.346zM64.004 105.682c-2.05.001-4.102-.78-5.666-2.344L35.721 80.721c-3.125-3.125-3.13-8.195-.005-11.319 3.118-3.118 8.191-3.122 11.318.005L64 86.373l16.966-16.966c3.124-3.125 8.194-3.13 11.318-.005 3.118 3.118 3.122 8.192-.005 11.319l-22.617 22.617a7.986 7.986 0 01-5.663 2.346z\"/></g></svg>"
},
"$:/core/images/unlocked-padlock": {
"title": "$:/core/images/unlocked-padlock",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-unlocked-padlock tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M48.627 64H105v32.01C105 113.674 90.674 128 73.001 128H56C38.318 128 24 113.677 24 96.01V64h6.136c-10.455-12.651-27.364-35.788-4.3-55.142 24.636-20.672 45.835 4.353 55.777 16.201 9.943 11.85-2.676 22.437-12.457 9.892-9.78-12.545-21.167-24.146-33.207-14.043-12.041 10.104-1.757 22.36 8.813 34.958 2.467 2.94 3.641 5.732 3.865 8.134zm19.105 28.364A8.503 8.503 0 0064.5 76a8.5 8.5 0 00-3.498 16.25l-5.095 22.77H72.8l-5.07-22.656z\"/></svg>"
},
"$:/core/images/up-arrow": {
"title": "$:/core/images/up-arrow",
"created": "20150316000544368",
"modified": "20150316000831867",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-up-arrow tc-image-button\" viewBox=\"0 0 128 128\"><path d=\"M63.892.281c2.027 0 4.054.77 5.6 2.316l55.98 55.98a7.92 7.92 0 010 11.196c-3.086 3.085-8.104 3.092-11.196 0L63.894 19.393 13.513 69.774a7.92 7.92 0 01-11.196 0c-3.085-3.086-3.092-8.105 0-11.196l55.98-55.98A7.892 7.892 0 0163.893.28z\"/></svg>"
},
"$:/core/images/video": {
"title": "$:/core/images/video",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-video tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M64 12c-34.91 0-55.273 2.917-58.182 5.833C2.91 20.75 0 41.167 0 64.5c0 23.333 2.91 43.75 5.818 46.667C8.728 114.083 29.091 117 64 117c34.91 0 55.273-2.917 58.182-5.833C125.09 108.25 128 87.833 128 64.5c0-23.333-2.91-43.75-5.818-46.667C119.272 14.917 98.909 12 64 12zm-9.084 32.618c-3.813-2.542-6.905-.879-6.905 3.698v31.368c0 4.585 3.099 6.235 6.905 3.698l22.168-14.779c3.813-2.542 3.806-6.669 0-9.206L54.916 44.618z\"/></svg>"
},
"$:/core/images/warning": {
"title": "$:/core/images/warning",
"tags": "$:/tags/Image",
"text": "<svg width=\"22pt\" height=\"22pt\" class=\"tc-image-warning tc-image-button\" viewBox=\"0 0 128 128\"><path fill-rule=\"evenodd\" d=\"M57.072 11c3.079-5.333 10.777-5.333 13.856 0l55.426 96c3.079 5.333-.77 12-6.928 12H8.574c-6.158 0-10.007-6.667-6.928-12l55.426-96zM64 37c-4.418 0-8 3.582-8 7.994v28.012C56 77.421 59.59 81 64 81c4.418 0 8-3.582 8-7.994V44.994C72 40.579 68.41 37 64 37zm0 67a8 8 0 100-16 8 8 0 000 16z\"/></svg>"
},
"$:/language/Buttons/AdvancedSearch/Caption": {
"title": "$:/language/Buttons/AdvancedSearch/Caption",
"text": "advanced search"
},
"$:/language/Buttons/AdvancedSearch/Hint": {
"title": "$:/language/Buttons/AdvancedSearch/Hint",
"text": "Advanced search"
},
"$:/language/Buttons/Cancel/Caption": {
"title": "$:/language/Buttons/Cancel/Caption",
"text": "cancel"
},
"$:/language/Buttons/Cancel/Hint": {
"title": "$:/language/Buttons/Cancel/Hint",
"text": "Discard changes to this tiddler"
},
"$:/language/Buttons/Clone/Caption": {
"title": "$:/language/Buttons/Clone/Caption",
"text": "clone"
},
"$:/language/Buttons/Clone/Hint": {
"title": "$:/language/Buttons/Clone/Hint",
"text": "Clone this tiddler"
},
"$:/language/Buttons/Close/Caption": {
"title": "$:/language/Buttons/Close/Caption",
"text": "close"
},
"$:/language/Buttons/Close/Hint": {
"title": "$:/language/Buttons/Close/Hint",
"text": "Close this tiddler"
},
"$:/language/Buttons/CloseAll/Caption": {
"title": "$:/language/Buttons/CloseAll/Caption",
"text": "close all"
},
"$:/language/Buttons/CloseAll/Hint": {
"title": "$:/language/Buttons/CloseAll/Hint",
"text": "Close all tiddlers"
},
"$:/language/Buttons/CloseOthers/Caption": {
"title": "$:/language/Buttons/CloseOthers/Caption",
"text": "close others"
},
"$:/language/Buttons/CloseOthers/Hint": {
"title": "$:/language/Buttons/CloseOthers/Hint",
"text": "Close other tiddlers"
},
"$:/language/Buttons/ControlPanel/Caption": {
"title": "$:/language/Buttons/ControlPanel/Caption",
"text": "control panel"
},
"$:/language/Buttons/ControlPanel/Hint": {
"title": "$:/language/Buttons/ControlPanel/Hint",
"text": "Open control panel"
},
"$:/language/Buttons/CopyToClipboard/Caption": {
"title": "$:/language/Buttons/CopyToClipboard/Caption",
"text": "copy to clipboard"
},
"$:/language/Buttons/CopyToClipboard/Hint": {
"title": "$:/language/Buttons/CopyToClipboard/Hint",
"text": "Copy this text to the clipboard"
},
"$:/language/Buttons/Delete/Caption": {
"title": "$:/language/Buttons/Delete/Caption",
"text": "delete"
},
"$:/language/Buttons/Delete/Hint": {
"title": "$:/language/Buttons/Delete/Hint",
"text": "Delete this tiddler"
},
"$:/language/Buttons/Edit/Caption": {
"title": "$:/language/Buttons/Edit/Caption",
"text": "edit"
},
"$:/language/Buttons/Edit/Hint": {
"title": "$:/language/Buttons/Edit/Hint",
"text": "Edit this tiddler"
},
"$:/language/Buttons/Encryption/Caption": {
"title": "$:/language/Buttons/Encryption/Caption",
"text": "encryption"
},
"$:/language/Buttons/Encryption/Hint": {
"title": "$:/language/Buttons/Encryption/Hint",
"text": "Set or clear a password for saving this wiki"
},
"$:/language/Buttons/Encryption/ClearPassword/Caption": {
"title": "$:/language/Buttons/Encryption/ClearPassword/Caption",
"text": "clear password"
},
"$:/language/Buttons/Encryption/ClearPassword/Hint": {
"title": "$:/language/Buttons/Encryption/ClearPassword/Hint",
"text": "Clear the password and save this wiki without encryption"
},
"$:/language/Buttons/Encryption/SetPassword/Caption": {
"title": "$:/language/Buttons/Encryption/SetPassword/Caption",
"text": "set password"
},
"$:/language/Buttons/Encryption/SetPassword/Hint": {
"title": "$:/language/Buttons/Encryption/SetPassword/Hint",
"text": "Set a password for saving this wiki with encryption"
},
"$:/language/Buttons/ExportPage/Caption": {
"title": "$:/language/Buttons/ExportPage/Caption",
"text": "export all"
},
"$:/language/Buttons/ExportPage/Hint": {
"title": "$:/language/Buttons/ExportPage/Hint",
"text": "Export all tiddlers"
},
"$:/language/Buttons/ExportTiddler/Caption": {
"title": "$:/language/Buttons/ExportTiddler/Caption",
"text": "export tiddler"
},
"$:/language/Buttons/ExportTiddler/Hint": {
"title": "$:/language/Buttons/ExportTiddler/Hint",
"text": "Export tiddler"
},
"$:/language/Buttons/ExportTiddlers/Caption": {
"title": "$:/language/Buttons/ExportTiddlers/Caption",
"text": "export tiddlers"
},
"$:/language/Buttons/ExportTiddlers/Hint": {
"title": "$:/language/Buttons/ExportTiddlers/Hint",
"text": "Export tiddlers"
},
"$:/language/Buttons/SidebarSearch/Hint": {
"title": "$:/language/Buttons/SidebarSearch/Hint",
"text": "Select the sidebar search field"
},
"$:/language/Buttons/Fold/Caption": {
"title": "$:/language/Buttons/Fold/Caption",
"text": "fold tiddler"
},
"$:/language/Buttons/Fold/Hint": {
"title": "$:/language/Buttons/Fold/Hint",
"text": "Fold the body of this tiddler"
},
"$:/language/Buttons/Fold/FoldBar/Caption": {
"title": "$:/language/Buttons/Fold/FoldBar/Caption",
"text": "fold-bar"
},
"$:/language/Buttons/Fold/FoldBar/Hint": {
"title": "$:/language/Buttons/Fold/FoldBar/Hint",
"text": "Optional bars to fold and unfold tiddlers"
},
"$:/language/Buttons/Unfold/Caption": {
"title": "$:/language/Buttons/Unfold/Caption",
"text": "unfold tiddler"
},
"$:/language/Buttons/Unfold/Hint": {
"title": "$:/language/Buttons/Unfold/Hint",
"text": "Unfold the body of this tiddler"
},
"$:/language/Buttons/FoldOthers/Caption": {
"title": "$:/language/Buttons/FoldOthers/Caption",
"text": "fold other tiddlers"
},
"$:/language/Buttons/FoldOthers/Hint": {
"title": "$:/language/Buttons/FoldOthers/Hint",
"text": "Fold the bodies of other opened tiddlers"
},
"$:/language/Buttons/FoldAll/Caption": {
"title": "$:/language/Buttons/FoldAll/Caption",
"text": "fold all tiddlers"
},
"$:/language/Buttons/FoldAll/Hint": {
"title": "$:/language/Buttons/FoldAll/Hint",
"text": "Fold the bodies of all opened tiddlers"
},
"$:/language/Buttons/UnfoldAll/Caption": {
"title": "$:/language/Buttons/UnfoldAll/Caption",
"text": "unfold all tiddlers"
},
"$:/language/Buttons/UnfoldAll/Hint": {
"title": "$:/language/Buttons/UnfoldAll/Hint",
"text": "Unfold the bodies of all opened tiddlers"
},
"$:/language/Buttons/FullScreen/Caption": {
"title": "$:/language/Buttons/FullScreen/Caption",
"text": "full-screen"
},
"$:/language/Buttons/FullScreen/Hint": {
"title": "$:/language/Buttons/FullScreen/Hint",
"text": "Enter or leave full-screen mode"
},
"$:/language/Buttons/Help/Caption": {
"title": "$:/language/Buttons/Help/Caption",
"text": "help"
},
"$:/language/Buttons/Help/Hint": {
"title": "$:/language/Buttons/Help/Hint",
"text": "Show help panel"
},
"$:/language/Buttons/Import/Caption": {
"title": "$:/language/Buttons/Import/Caption",
"text": "import"
},
"$:/language/Buttons/Import/Hint": {
"title": "$:/language/Buttons/Import/Hint",
"text": "Import many types of file including text, image, TiddlyWiki or JSON"
},
"$:/language/Buttons/Info/Caption": {
"title": "$:/language/Buttons/Info/Caption",
"text": "info"
},
"$:/language/Buttons/Info/Hint": {
"title": "$:/language/Buttons/Info/Hint",
"text": "Show information for this tiddler"
},
"$:/language/Buttons/Home/Caption": {
"title": "$:/language/Buttons/Home/Caption",
"text": "home"
},
"$:/language/Buttons/Home/Hint": {
"title": "$:/language/Buttons/Home/Hint",
"text": "Open the default tiddlers"
},
"$:/language/Buttons/Language/Caption": {
"title": "$:/language/Buttons/Language/Caption",
"text": "language"
},
"$:/language/Buttons/Language/Hint": {
"title": "$:/language/Buttons/Language/Hint",
"text": "Choose the user interface language"
},
"$:/language/Buttons/Manager/Caption": {
"title": "$:/language/Buttons/Manager/Caption",
"text": "tiddler manager"
},
"$:/language/Buttons/Manager/Hint": {
"title": "$:/language/Buttons/Manager/Hint",
"text": "Open tiddler manager"
},
"$:/language/Buttons/More/Caption": {
"title": "$:/language/Buttons/More/Caption",
"text": "more"
},
"$:/language/Buttons/More/Hint": {
"title": "$:/language/Buttons/More/Hint",
"text": "More actions"
},
"$:/language/Buttons/NewHere/Caption": {
"title": "$:/language/Buttons/NewHere/Caption",
"text": "new here"
},
"$:/language/Buttons/NewHere/Hint": {
"title": "$:/language/Buttons/NewHere/Hint",
"text": "Create a new tiddler tagged with this one"
},
"$:/language/Buttons/NewJournal/Caption": {
"title": "$:/language/Buttons/NewJournal/Caption",
"text": "new journal"
},
"$:/language/Buttons/NewJournal/Hint": {
"title": "$:/language/Buttons/NewJournal/Hint",
"text": "Create a new journal tiddler"
},
"$:/language/Buttons/NewJournalHere/Caption": {
"title": "$:/language/Buttons/NewJournalHere/Caption",
"text": "new journal here"
},
"$:/language/Buttons/NewJournalHere/Hint": {
"title": "$:/language/Buttons/NewJournalHere/Hint",
"text": "Create a new journal tiddler tagged with this one"
},
"$:/language/Buttons/NewImage/Caption": {
"title": "$:/language/Buttons/NewImage/Caption",
"text": "new image"
},
"$:/language/Buttons/NewImage/Hint": {
"title": "$:/language/Buttons/NewImage/Hint",
"text": "Create a new image tiddler"
},
"$:/language/Buttons/NewMarkdown/Caption": {
"title": "$:/language/Buttons/NewMarkdown/Caption",
"text": "new Markdown tiddler"
},
"$:/language/Buttons/NewMarkdown/Hint": {
"title": "$:/language/Buttons/NewMarkdown/Hint",
"text": "Create a new Markdown tiddler"
},
"$:/language/Buttons/NewTiddler/Caption": {
"title": "$:/language/Buttons/NewTiddler/Caption",
"text": "new tiddler"
},
"$:/language/Buttons/NewTiddler/Hint": {
"title": "$:/language/Buttons/NewTiddler/Hint",
"text": "Create a new tiddler"
},
"$:/language/Buttons/OpenWindow/Caption": {
"title": "$:/language/Buttons/OpenWindow/Caption",
"text": "open in new window"
},
"$:/language/Buttons/OpenWindow/Hint": {
"title": "$:/language/Buttons/OpenWindow/Hint",
"text": "Open tiddler in new window"
},
"$:/language/Buttons/Palette/Caption": {
"title": "$:/language/Buttons/Palette/Caption",
"text": "palette"
},
"$:/language/Buttons/Palette/Hint": {
"title": "$:/language/Buttons/Palette/Hint",
"text": "Choose the colour palette"
},
"$:/language/Buttons/Permalink/Caption": {
"title": "$:/language/Buttons/Permalink/Caption",
"text": "permalink"
},
"$:/language/Buttons/Permalink/Hint": {
"title": "$:/language/Buttons/Permalink/Hint",
"text": "Set browser address bar to a direct link to this tiddler"
},
"$:/language/Buttons/Permaview/Caption": {
"title": "$:/language/Buttons/Permaview/Caption",
"text": "permaview"
},
"$:/language/Buttons/Permaview/Hint": {
"title": "$:/language/Buttons/Permaview/Hint",
"text": "Set browser address bar to a direct link to all the tiddlers in this story"
},
"$:/language/Buttons/Print/Caption": {
"title": "$:/language/Buttons/Print/Caption",
"text": "print page"
},
"$:/language/Buttons/Print/Hint": {
"title": "$:/language/Buttons/Print/Hint",
"text": "Print the current page"
},
"$:/language/Buttons/Refresh/Caption": {
"title": "$:/language/Buttons/Refresh/Caption",
"text": "refresh"
},
"$:/language/Buttons/Refresh/Hint": {
"title": "$:/language/Buttons/Refresh/Hint",
"text": "Perform a full refresh of the wiki"
},
"$:/language/Buttons/Save/Caption": {
"title": "$:/language/Buttons/Save/Caption",
"text": "ok"
},
"$:/language/Buttons/Save/Hint": {
"title": "$:/language/Buttons/Save/Hint",
"text": "Confirm changes to this tiddler"
},
"$:/language/Buttons/SaveWiki/Caption": {
"title": "$:/language/Buttons/SaveWiki/Caption",
"text": "save changes"
},
"$:/language/Buttons/SaveWiki/Hint": {
"title": "$:/language/Buttons/SaveWiki/Hint",
"text": "Save changes"
},
"$:/language/Buttons/StoryView/Caption": {
"title": "$:/language/Buttons/StoryView/Caption",
"text": "storyview"
},
"$:/language/Buttons/StoryView/Hint": {
"title": "$:/language/Buttons/StoryView/Hint",
"text": "Choose the story visualisation"
},
"$:/language/Buttons/HideSideBar/Caption": {
"title": "$:/language/Buttons/HideSideBar/Caption",
"text": "hide sidebar"
},
"$:/language/Buttons/HideSideBar/Hint": {
"title": "$:/language/Buttons/HideSideBar/Hint",
"text": "Hide sidebar"
},
"$:/language/Buttons/ShowSideBar/Caption": {
"title": "$:/language/Buttons/ShowSideBar/Caption",
"text": "show sidebar"
},
"$:/language/Buttons/ShowSideBar/Hint": {
"title": "$:/language/Buttons/ShowSideBar/Hint",
"text": "Show sidebar"
},
"$:/language/Buttons/TagManager/Caption": {
"title": "$:/language/Buttons/TagManager/Caption",
"text": "tag manager"
},
"$:/language/Buttons/TagManager/Hint": {
"title": "$:/language/Buttons/TagManager/Hint",
"text": "Open tag manager"
},
"$:/language/Buttons/Timestamp/Caption": {
"title": "$:/language/Buttons/Timestamp/Caption",
"text": "timestamps"
},
"$:/language/Buttons/Timestamp/Hint": {
"title": "$:/language/Buttons/Timestamp/Hint",
"text": "Choose whether modifications update timestamps"
},
"$:/language/Buttons/Timestamp/On/Caption": {
"title": "$:/language/Buttons/Timestamp/On/Caption",
"text": "timestamps are on"
},
"$:/language/Buttons/Timestamp/On/Hint": {
"title": "$:/language/Buttons/Timestamp/On/Hint",
"text": "Update timestamps when tiddlers are modified"
},
"$:/language/Buttons/Timestamp/Off/Caption": {
"title": "$:/language/Buttons/Timestamp/Off/Caption",
"text": "timestamps are off"
},
"$:/language/Buttons/Timestamp/Off/Hint": {
"title": "$:/language/Buttons/Timestamp/Off/Hint",
"text": "Don't update timestamps when tiddlers are modified"
},
"$:/language/Buttons/Theme/Caption": {
"title": "$:/language/Buttons/Theme/Caption",
"text": "theme"
},
"$:/language/Buttons/Theme/Hint": {
"title": "$:/language/Buttons/Theme/Hint",
"text": "Choose the display theme"
},
"$:/language/Buttons/Bold/Caption": {
"title": "$:/language/Buttons/Bold/Caption",
"text": "bold"
},
"$:/language/Buttons/Bold/Hint": {
"title": "$:/language/Buttons/Bold/Hint",
"text": "Apply bold formatting to selection"
},
"$:/language/Buttons/Clear/Caption": {
"title": "$:/language/Buttons/Clear/Caption",
"text": "clear"
},
"$:/language/Buttons/Clear/Hint": {
"title": "$:/language/Buttons/Clear/Hint",
"text": "Clear image to solid colour"
},
"$:/language/Buttons/EditorHeight/Caption": {
"title": "$:/language/Buttons/EditorHeight/Caption",
"text": "editor height"
},
"$:/language/Buttons/EditorHeight/Caption/Auto": {
"title": "$:/language/Buttons/EditorHeight/Caption/Auto",
"text": "Automatically adjust height to fit content"
},
"$:/language/Buttons/EditorHeight/Caption/Fixed": {
"title": "$:/language/Buttons/EditorHeight/Caption/Fixed",
"text": "Fixed height:"
},
"$:/language/Buttons/EditorHeight/Hint": {
"title": "$:/language/Buttons/EditorHeight/Hint",
"text": "Choose the height of the text editor"
},
"$:/language/Buttons/Excise/Caption": {
"title": "$:/language/Buttons/Excise/Caption",
"text": "excise"
},
"$:/language/Buttons/Excise/Caption/Excise": {
"title": "$:/language/Buttons/Excise/Caption/Excise",
"text": "Perform excision"
},
"$:/language/Buttons/Excise/Caption/MacroName": {
"title": "$:/language/Buttons/Excise/Caption/MacroName",
"text": "Macro name:"
},
"$:/language/Buttons/Excise/Caption/NewTitle": {
"title": "$:/language/Buttons/Excise/Caption/NewTitle",
"text": "Title of new tiddler:"
},
"$:/language/Buttons/Excise/Caption/Replace": {
"title": "$:/language/Buttons/Excise/Caption/Replace",
"text": "Replace excised text with:"
},
"$:/language/Buttons/Excise/Caption/Replace/Macro": {
"title": "$:/language/Buttons/Excise/Caption/Replace/Macro",
"text": "macro"
},
"$:/language/Buttons/Excise/Caption/Replace/Link": {
"title": "$:/language/Buttons/Excise/Caption/Replace/Link",
"text": "link"
},
"$:/language/Buttons/Excise/Caption/Replace/Transclusion": {
"title": "$:/language/Buttons/Excise/Caption/Replace/Transclusion",
"text": "transclusion"
},
"$:/language/Buttons/Excise/Caption/Tag": {
"title": "$:/language/Buttons/Excise/Caption/Tag",
"text": "Tag new tiddler with the title of this tiddler"
},
"$:/language/Buttons/Excise/Caption/TiddlerExists": {
"title": "$:/language/Buttons/Excise/Caption/TiddlerExists",
"text": "Warning: tiddler already exists"
},
"$:/language/Buttons/Excise/Hint": {
"title": "$:/language/Buttons/Excise/Hint",
"text": "Excise the selected text into a new tiddler"
},
"$:/language/Buttons/Heading1/Caption": {
"title": "$:/language/Buttons/Heading1/Caption",
"text": "heading 1"
},
"$:/language/Buttons/Heading1/Hint": {
"title": "$:/language/Buttons/Heading1/Hint",
"text": "Apply heading level 1 formatting to lines containing selection"
},
"$:/language/Buttons/Heading2/Caption": {
"title": "$:/language/Buttons/Heading2/Caption",
"text": "heading 2"
},
"$:/language/Buttons/Heading2/Hint": {
"title": "$:/language/Buttons/Heading2/Hint",
"text": "Apply heading level 2 formatting to lines containing selection"
},
"$:/language/Buttons/Heading3/Caption": {
"title": "$:/language/Buttons/Heading3/Caption",
"text": "heading 3"
},
"$:/language/Buttons/Heading3/Hint": {
"title": "$:/language/Buttons/Heading3/Hint",
"text": "Apply heading level 3 formatting to lines containing selection"
},
"$:/language/Buttons/Heading4/Caption": {
"title": "$:/language/Buttons/Heading4/Caption",
"text": "heading 4"
},
"$:/language/Buttons/Heading4/Hint": {
"title": "$:/language/Buttons/Heading4/Hint",
"text": "Apply heading level 4 formatting to lines containing selection"
},
"$:/language/Buttons/Heading5/Caption": {
"title": "$:/language/Buttons/Heading5/Caption",
"text": "heading 5"
},
"$:/language/Buttons/Heading5/Hint": {
"title": "$:/language/Buttons/Heading5/Hint",
"text": "Apply heading level 5 formatting to lines containing selection"
},
"$:/language/Buttons/Heading6/Caption": {
"title": "$:/language/Buttons/Heading6/Caption",
"text": "heading 6"
},
"$:/language/Buttons/Heading6/Hint": {
"title": "$:/language/Buttons/Heading6/Hint",
"text": "Apply heading level 6 formatting to lines containing selection"
},
"$:/language/Buttons/Italic/Caption": {
"title": "$:/language/Buttons/Italic/Caption",
"text": "italic"
},
"$:/language/Buttons/Italic/Hint": {
"title": "$:/language/Buttons/Italic/Hint",
"text": "Apply italic formatting to selection"
},
"$:/language/Buttons/LineWidth/Caption": {
"title": "$:/language/Buttons/LineWidth/Caption",
"text": "line width"
},
"$:/language/Buttons/LineWidth/Hint": {
"title": "$:/language/Buttons/LineWidth/Hint",
"text": "Set line width for painting"
},
"$:/language/Buttons/Link/Caption": {
"title": "$:/language/Buttons/Link/Caption",
"text": "link"
},
"$:/language/Buttons/Link/Hint": {
"title": "$:/language/Buttons/Link/Hint",
"text": "Create wikitext link"
},
"$:/language/Buttons/Linkify/Caption": {
"title": "$:/language/Buttons/Linkify/Caption",
"text": "wikilink"
},
"$:/language/Buttons/Linkify/Hint": {
"title": "$:/language/Buttons/Linkify/Hint",
"text": "Wrap selection in square brackets"
},
"$:/language/Buttons/ListBullet/Caption": {
"title": "$:/language/Buttons/ListBullet/Caption",
"text": "bulleted list"
},
"$:/language/Buttons/ListBullet/Hint": {
"title": "$:/language/Buttons/ListBullet/Hint",
"text": "Apply bulleted list formatting to lines containing selection"
},
"$:/language/Buttons/ListNumber/Caption": {
"title": "$:/language/Buttons/ListNumber/Caption",
"text": "numbered list"
},
"$:/language/Buttons/ListNumber/Hint": {
"title": "$:/language/Buttons/ListNumber/Hint",
"text": "Apply numbered list formatting to lines containing selection"
},
"$:/language/Buttons/MonoBlock/Caption": {
"title": "$:/language/Buttons/MonoBlock/Caption",
"text": "monospaced block"
},
"$:/language/Buttons/MonoBlock/Hint": {
"title": "$:/language/Buttons/MonoBlock/Hint",
"text": "Apply monospaced block formatting to lines containing selection"
},
"$:/language/Buttons/MonoLine/Caption": {
"title": "$:/language/Buttons/MonoLine/Caption",
"text": "monospaced"
},
"$:/language/Buttons/MonoLine/Hint": {
"title": "$:/language/Buttons/MonoLine/Hint",
"text": "Apply monospaced character formatting to selection"
},
"$:/language/Buttons/Opacity/Caption": {
"title": "$:/language/Buttons/Opacity/Caption",
"text": "opacity"
},
"$:/language/Buttons/Opacity/Hint": {
"title": "$:/language/Buttons/Opacity/Hint",
"text": "Set painting opacity"
},
"$:/language/Buttons/Paint/Caption": {
"title": "$:/language/Buttons/Paint/Caption",
"text": "paint colour"
},
"$:/language/Buttons/Paint/Hint": {
"title": "$:/language/Buttons/Paint/Hint",
"text": "Set painting colour"
},
"$:/language/Buttons/Picture/Caption": {
"title": "$:/language/Buttons/Picture/Caption",
"text": "picture"
},
"$:/language/Buttons/Picture/Hint": {
"title": "$:/language/Buttons/Picture/Hint",
"text": "Insert picture"
},
"$:/language/Buttons/Preview/Caption": {
"title": "$:/language/Buttons/Preview/Caption",
"text": "preview"
},
"$:/language/Buttons/Preview/Hint": {
"title": "$:/language/Buttons/Preview/Hint",
"text": "Show preview pane"
},
"$:/language/Buttons/PreviewType/Caption": {
"title": "$:/language/Buttons/PreviewType/Caption",
"text": "preview type"
},
"$:/language/Buttons/PreviewType/Hint": {
"title": "$:/language/Buttons/PreviewType/Hint",
"text": "Choose preview type"
},
"$:/language/Buttons/Quote/Caption": {
"title": "$:/language/Buttons/Quote/Caption",
"text": "quote"
},
"$:/language/Buttons/Quote/Hint": {
"title": "$:/language/Buttons/Quote/Hint",
"text": "Apply quoted text formatting to lines containing selection"
},
"$:/language/Buttons/RotateLeft/Caption": {
"title": "$:/language/Buttons/RotateLeft/Caption",
"text": "rotate left"
},
"$:/language/Buttons/RotateLeft/Hint": {
"title": "$:/language/Buttons/RotateLeft/Hint",
"text": "Rotate image left by 90 degrees"
},
"$:/language/Buttons/Size/Caption": {
"title": "$:/language/Buttons/Size/Caption",
"text": "image size"
},
"$:/language/Buttons/Size/Caption/Height": {
"title": "$:/language/Buttons/Size/Caption/Height",
"text": "Height:"
},
"$:/language/Buttons/Size/Caption/Resize": {
"title": "$:/language/Buttons/Size/Caption/Resize",
"text": "Resize image"
},
"$:/language/Buttons/Size/Caption/Width": {
"title": "$:/language/Buttons/Size/Caption/Width",
"text": "Width:"
},
"$:/language/Buttons/Size/Hint": {
"title": "$:/language/Buttons/Size/Hint",
"text": "Set image size"
},
"$:/language/Buttons/Stamp/Caption": {
"title": "$:/language/Buttons/Stamp/Caption",
"text": "stamp"
},
"$:/language/Buttons/Stamp/Caption/New": {
"title": "$:/language/Buttons/Stamp/Caption/New",
"text": "Add your own"
},
"$:/language/Buttons/Stamp/Hint": {
"title": "$:/language/Buttons/Stamp/Hint",
"text": "Insert a preconfigured snippet of text"
},
"$:/language/Buttons/Stamp/New/Title": {
"title": "$:/language/Buttons/Stamp/New/Title",
"text": "Name as shown in menu"
},
"$:/language/Buttons/Stamp/New/Text": {
"title": "$:/language/Buttons/Stamp/New/Text",
"text": "Text of snippet. (Remember to add a descriptive title in the caption field)."
},
"$:/language/Buttons/Strikethrough/Caption": {
"title": "$:/language/Buttons/Strikethrough/Caption",
"text": "strikethrough"
},
"$:/language/Buttons/Strikethrough/Hint": {
"title": "$:/language/Buttons/Strikethrough/Hint",
"text": "Apply strikethrough formatting to selection"
},
"$:/language/Buttons/Subscript/Caption": {
"title": "$:/language/Buttons/Subscript/Caption",
"text": "subscript"
},
"$:/language/Buttons/Subscript/Hint": {
"title": "$:/language/Buttons/Subscript/Hint",
"text": "Apply subscript formatting to selection"
},
"$:/language/Buttons/Superscript/Caption": {
"title": "$:/language/Buttons/Superscript/Caption",
"text": "superscript"
},
"$:/language/Buttons/Superscript/Hint": {
"title": "$:/language/Buttons/Superscript/Hint",
"text": "Apply superscript formatting to selection"
},
"$:/language/Buttons/ToggleSidebar/Hint": {
"title": "$:/language/Buttons/ToggleSidebar/Hint",
"text": "Toggle the sidebar visibility"
},
"$:/language/Buttons/Transcludify/Caption": {
"title": "$:/language/Buttons/Transcludify/Caption",
"text": "transclusion"
},
"$:/language/Buttons/Transcludify/Hint": {
"title": "$:/language/Buttons/Transcludify/Hint",
"text": "Wrap selection in curly brackets"
},
"$:/language/Buttons/Underline/Caption": {
"title": "$:/language/Buttons/Underline/Caption",
"text": "underline"
},
"$:/language/Buttons/Underline/Hint": {
"title": "$:/language/Buttons/Underline/Hint",
"text": "Apply underline formatting to selection"
},
"$:/language/ControlPanel/Advanced/Caption": {
"title": "$:/language/ControlPanel/Advanced/Caption",
"text": "Advanced"
},
"$:/language/ControlPanel/Advanced/Hint": {
"title": "$:/language/ControlPanel/Advanced/Hint",
"text": "Internal information about this TiddlyWiki"
},
"$:/language/ControlPanel/Appearance/Caption": {
"title": "$:/language/ControlPanel/Appearance/Caption",
"text": "Appearance"
},
"$:/language/ControlPanel/Appearance/Hint": {
"title": "$:/language/ControlPanel/Appearance/Hint",
"text": "Ways to customise the appearance of your TiddlyWiki."
},
"$:/language/ControlPanel/Basics/AnimDuration/Prompt": {
"title": "$:/language/ControlPanel/Basics/AnimDuration/Prompt",
"text": "Animation duration"
},
"$:/language/ControlPanel/Basics/AutoFocus/Prompt": {
"title": "$:/language/ControlPanel/Basics/AutoFocus/Prompt",
"text": "Default focus field for new tiddlers"
},
"$:/language/ControlPanel/Basics/Caption": {
"title": "$:/language/ControlPanel/Basics/Caption",
"text": "Basics"
},
"$:/language/ControlPanel/Basics/DefaultTiddlers/BottomHint": {
"title": "$:/language/ControlPanel/Basics/DefaultTiddlers/BottomHint",
"text": "Use [[double square brackets]] for titles with spaces. Or you can choose to <$button set=\"$:/DefaultTiddlers\" setTo=\"[list[$:/StoryList]]\">retain story ordering</$button>"
},
"$:/language/ControlPanel/Basics/DefaultTiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/DefaultTiddlers/Prompt",
"text": "Default tiddlers"
},
"$:/language/ControlPanel/Basics/DefaultTiddlers/TopHint": {
"title": "$:/language/ControlPanel/Basics/DefaultTiddlers/TopHint",
"text": "Choose which tiddlers are displayed at startup"
},
"$:/language/ControlPanel/Basics/Language/Prompt": {
"title": "$:/language/ControlPanel/Basics/Language/Prompt",
"text": "Hello! Current language:"
},
"$:/language/ControlPanel/Basics/NewJournal/Title/Prompt": {
"title": "$:/language/ControlPanel/Basics/NewJournal/Title/Prompt",
"text": "Title of new journal tiddlers"
},
"$:/language/ControlPanel/Basics/NewJournal/Text/Prompt": {
"title": "$:/language/ControlPanel/Basics/NewJournal/Text/Prompt",
"text": "Text for new journal tiddlers"
},
"$:/language/ControlPanel/Basics/NewJournal/Tags/Prompt": {
"title": "$:/language/ControlPanel/Basics/NewJournal/Tags/Prompt",
"text": "Tags for new journal tiddlers"
},
"$:/language/ControlPanel/Basics/NewTiddler/Title/Prompt": {
"title": "$:/language/ControlPanel/Basics/NewTiddler/Title/Prompt",
"text": "Title of new tiddlers"
},
"$:/language/ControlPanel/Basics/NewTiddler/Tags/Prompt": {
"title": "$:/language/ControlPanel/Basics/NewTiddler/Tags/Prompt",
"text": "Tags for new tiddlers"
},
"$:/language/ControlPanel/Basics/OverriddenShadowTiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/OverriddenShadowTiddlers/Prompt",
"text": "Number of overridden shadow tiddlers"
},
"$:/language/ControlPanel/Basics/ShadowTiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/ShadowTiddlers/Prompt",
"text": "Number of shadow tiddlers"
},
"$:/language/ControlPanel/Basics/Subtitle/Prompt": {
"title": "$:/language/ControlPanel/Basics/Subtitle/Prompt",
"text": "Subtitle"
},
"$:/language/ControlPanel/Basics/SystemTiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/SystemTiddlers/Prompt",
"text": "Number of system tiddlers"
},
"$:/language/ControlPanel/Basics/Tags/Prompt": {
"title": "$:/language/ControlPanel/Basics/Tags/Prompt",
"text": "Number of tags"
},
"$:/language/ControlPanel/Basics/Tiddlers/Prompt": {
"title": "$:/language/ControlPanel/Basics/Tiddlers/Prompt",
"text": "Number of tiddlers"
},
"$:/language/ControlPanel/Basics/Title/Prompt": {
"title": "$:/language/ControlPanel/Basics/Title/Prompt",
"text": "Title of this ~TiddlyWiki"
},
"$:/language/ControlPanel/Basics/Username/Prompt": {
"title": "$:/language/ControlPanel/Basics/Username/Prompt",
"text": "Username for signing edits"
},
"$:/language/ControlPanel/Basics/Version/Prompt": {
"title": "$:/language/ControlPanel/Basics/Version/Prompt",
"text": "~TiddlyWiki version"
},
"$:/language/ControlPanel/EditorTypes/Caption": {
"title": "$:/language/ControlPanel/EditorTypes/Caption",
"text": "Editor Types"
},
"$:/language/ControlPanel/EditorTypes/Editor/Caption": {
"title": "$:/language/ControlPanel/EditorTypes/Editor/Caption",
"text": "Editor"
},
"$:/language/ControlPanel/EditorTypes/Hint": {
"title": "$:/language/ControlPanel/EditorTypes/Hint",
"text": "These tiddlers determine which editor is used to edit specific tiddler types."
},
"$:/language/ControlPanel/EditorTypes/Type/Caption": {
"title": "$:/language/ControlPanel/EditorTypes/Type/Caption",
"text": "Type"
},
"$:/language/ControlPanel/Info/Caption": {
"title": "$:/language/ControlPanel/Info/Caption",
"text": "Info"
},
"$:/language/ControlPanel/Info/Hint": {
"title": "$:/language/ControlPanel/Info/Hint",
"text": "Information about this TiddlyWiki"
},
"$:/language/ControlPanel/KeyboardShortcuts/Add/Prompt": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Add/Prompt",
"text": "Type shortcut here"
},
"$:/language/ControlPanel/KeyboardShortcuts/Add/Caption": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Add/Caption",
"text": "add shortcut"
},
"$:/language/ControlPanel/KeyboardShortcuts/Caption": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Caption",
"text": "Keyboard Shortcuts"
},
"$:/language/ControlPanel/KeyboardShortcuts/Hint": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Hint",
"text": "Manage keyboard shortcut assignments"
},
"$:/language/ControlPanel/KeyboardShortcuts/NoShortcuts/Caption": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/NoShortcuts/Caption",
"text": "No keyboard shortcuts assigned"
},
"$:/language/ControlPanel/KeyboardShortcuts/Remove/Hint": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Remove/Hint",
"text": "remove keyboard shortcut"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/All": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/All",
"text": "All platforms"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/Mac": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/Mac",
"text": "Macintosh platform only"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/NonMac": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonMac",
"text": "Non-Macintosh platforms only"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/Linux": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/Linux",
"text": "Linux platform only"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/NonLinux": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonLinux",
"text": "Non-Linux platforms only"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/Windows": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/Windows",
"text": "Windows platform only"
},
"$:/language/ControlPanel/KeyboardShortcuts/Platform/NonWindows": {
"title": "$:/language/ControlPanel/KeyboardShortcuts/Platform/NonWindows",
"text": "Non-Windows platforms only"
},
"$:/language/ControlPanel/LoadedModules/Caption": {
"title": "$:/language/ControlPanel/LoadedModules/Caption",
"text": "Loaded Modules"
},
"$:/language/ControlPanel/LoadedModules/Hint": {
"title": "$:/language/ControlPanel/LoadedModules/Hint",
"text": "These are the currently loaded tiddler modules linked to their source tiddlers. Any italicised modules lack a source tiddler, typically because they were setup during the boot process."
},
"$:/language/ControlPanel/Palette/Caption": {
"title": "$:/language/ControlPanel/Palette/Caption",
"text": "Palette"
},
"$:/language/ControlPanel/Palette/Editor/Clone/Caption": {
"title": "$:/language/ControlPanel/Palette/Editor/Clone/Caption",
"text": "clone"
},
"$:/language/ControlPanel/Palette/Editor/Clone/Prompt": {
"title": "$:/language/ControlPanel/Palette/Editor/Clone/Prompt",
"text": "It is recommended that you clone this shadow palette before editing it"
},
"$:/language/ControlPanel/Palette/Editor/Delete/Hint": {
"title": "$:/language/ControlPanel/Palette/Editor/Delete/Hint",
"text": "delete this entry from the current palette"
},
"$:/language/ControlPanel/Palette/Editor/Names/External/Show": {
"title": "$:/language/ControlPanel/Palette/Editor/Names/External/Show",
"text": "Show color names that are not part of the current palette"
},
"$:/language/ControlPanel/Palette/Editor/Prompt/Modified": {
"title": "$:/language/ControlPanel/Palette/Editor/Prompt/Modified",
"text": "This shadow palette has been modified"
},
"$:/language/ControlPanel/Palette/Editor/Prompt": {
"title": "$:/language/ControlPanel/Palette/Editor/Prompt",
"text": "Editing"
},
"$:/language/ControlPanel/Palette/Editor/Reset/Caption": {
"title": "$:/language/ControlPanel/Palette/Editor/Reset/Caption",
"text": "reset"
},
"$:/language/ControlPanel/Palette/HideEditor/Caption": {
"title": "$:/language/ControlPanel/Palette/HideEditor/Caption",
"text": "hide editor"
},
"$:/language/ControlPanel/Palette/Prompt": {
"title": "$:/language/ControlPanel/Palette/Prompt",
"text": "Current palette:"
},
"$:/language/ControlPanel/Palette/ShowEditor/Caption": {
"title": "$:/language/ControlPanel/Palette/ShowEditor/Caption",
"text": "show editor"
},
"$:/language/ControlPanel/Parsing/Caption": {
"title": "$:/language/ControlPanel/Parsing/Caption",
"text": "Parsing"
},
"$:/language/ControlPanel/Parsing/Hint": {
"title": "$:/language/ControlPanel/Parsing/Hint",
"text": "Here you can globally disable/enable wiki parser rules. For changes to take effect, save and reload your wiki. Disabling certain parser rules can prevent <$text text=\"TiddlyWiki\"/> from functioning correctly. Use [[safe mode|https://tiddlywiki.com/#SafeMode]] to restore normal operation."
},
"$:/language/ControlPanel/Parsing/Block/Caption": {
"title": "$:/language/ControlPanel/Parsing/Block/Caption",
"text": "Block Parse Rules"
},
"$:/language/ControlPanel/Parsing/Inline/Caption": {
"title": "$:/language/ControlPanel/Parsing/Inline/Caption",
"text": "Inline Parse Rules"
},
"$:/language/ControlPanel/Parsing/Pragma/Caption": {
"title": "$:/language/ControlPanel/Parsing/Pragma/Caption",
"text": "Pragma Parse Rules"
},
"$:/language/ControlPanel/Plugins/Add/Caption": {
"title": "$:/language/ControlPanel/Plugins/Add/Caption",
"text": "Get more plugins"
},
"$:/language/ControlPanel/Plugins/Add/Hint": {
"title": "$:/language/ControlPanel/Plugins/Add/Hint",
"text": "Install plugins from the official library"
},
"$:/language/ControlPanel/Plugins/AlreadyInstalled/Hint": {
"title": "$:/language/ControlPanel/Plugins/AlreadyInstalled/Hint",
"text": "This plugin is already installed at version <$text text=<<installedVersion>>/>"
},
"$:/language/ControlPanel/Plugins/AlsoRequires": {
"title": "$:/language/ControlPanel/Plugins/AlsoRequires",
"text": "Also requires:"
},
"$:/language/ControlPanel/Plugins/Caption": {
"title": "$:/language/ControlPanel/Plugins/Caption",
"text": "Plugins"
},
"$:/language/ControlPanel/Plugins/Disable/Caption": {
"title": "$:/language/ControlPanel/Plugins/Disable/Caption",
"text": "disable"
},
"$:/language/ControlPanel/Plugins/Disable/Hint": {
"title": "$:/language/ControlPanel/Plugins/Disable/Hint",
"text": "Disable this plugin when reloading page"
},
"$:/language/ControlPanel/Plugins/Disabled/Status": {
"title": "$:/language/ControlPanel/Plugins/Disabled/Status",
"text": "(disabled)"
},
"$:/language/ControlPanel/Plugins/Downgrade/Caption": {
"title": "$:/language/ControlPanel/Plugins/Downgrade/Caption",
"text": "downgrade"
},
"$:/language/ControlPanel/Plugins/Empty/Hint": {
"title": "$:/language/ControlPanel/Plugins/Empty/Hint",
"text": "None"
},
"$:/language/ControlPanel/Plugins/Enable/Caption": {
"title": "$:/language/ControlPanel/Plugins/Enable/Caption",
"text": "enable"
},
"$:/language/ControlPanel/Plugins/Enable/Hint": {
"title": "$:/language/ControlPanel/Plugins/Enable/Hint",
"text": "Enable this plugin when reloading page"
},
"$:/language/ControlPanel/Plugins/Install/Caption": {
"title": "$:/language/ControlPanel/Plugins/Install/Caption",
"text": "install"
},
"$:/language/ControlPanel/Plugins/Installed/Hint": {
"title": "$:/language/ControlPanel/Plugins/Installed/Hint",
"text": "Currently installed plugins:"
},
"$:/language/ControlPanel/Plugins/Languages/Caption": {
"title": "$:/language/ControlPanel/Plugins/Languages/Caption",
"text": "Languages"
},
"$:/language/ControlPanel/Plugins/Languages/Hint": {
"title": "$:/language/ControlPanel/Plugins/Languages/Hint",
"text": "Language pack plugins"
},
"$:/language/ControlPanel/Plugins/NoInfoFound/Hint": {
"title": "$:/language/ControlPanel/Plugins/NoInfoFound/Hint",
"text": "No ''\"<$text text=<<currentTab>>/>\"'' found"
},
"$:/language/ControlPanel/Plugins/NotInstalled/Hint": {
"title": "$:/language/ControlPanel/Plugins/NotInstalled/Hint",
"text": "This plugin is not currently installed"
},
"$:/language/ControlPanel/Plugins/OpenPluginLibrary": {
"title": "$:/language/ControlPanel/Plugins/OpenPluginLibrary",
"text": "open plugin library"
},
"$:/language/ControlPanel/Plugins/ClosePluginLibrary": {
"title": "$:/language/ControlPanel/Plugins/ClosePluginLibrary",
"text": "close plugin library"
},
"$:/language/ControlPanel/Plugins/PluginWillRequireReload": {
"title": "$:/language/ControlPanel/Plugins/PluginWillRequireReload",
"text": "(requires reload)"
},
"$:/language/ControlPanel/Plugins/Plugins/Caption": {
"title": "$:/language/ControlPanel/Plugins/Plugins/Caption",
"text": "Plugins"
},
"$:/language/ControlPanel/Plugins/Plugins/Hint": {
"title": "$:/language/ControlPanel/Plugins/Plugins/Hint",
"text": "Plugins"
},
"$:/language/ControlPanel/Plugins/Reinstall/Caption": {
"title": "$:/language/ControlPanel/Plugins/Reinstall/Caption",
"text": "reinstall"
},
"$:/language/ControlPanel/Plugins/Themes/Caption": {
"title": "$:/language/ControlPanel/Plugins/Themes/Caption",
"text": "Themes"
},
"$:/language/ControlPanel/Plugins/Themes/Hint": {
"title": "$:/language/ControlPanel/Plugins/Themes/Hint",
"text": "Theme plugins"
},
"$:/language/ControlPanel/Plugins/Update/Caption": {
"title": "$:/language/ControlPanel/Plugins/Update/Caption",
"text": "update"
},
"$:/language/ControlPanel/Plugins/Updates/Caption": {
"title": "$:/language/ControlPanel/Plugins/Updates/Caption",
"text": "Updates"
},
"$:/language/ControlPanel/Plugins/Updates/Hint": {
"title": "$:/language/ControlPanel/Plugins/Updates/Hint",
"text": "Available updates to installed plugins"
},
"$:/language/ControlPanel/Plugins/Updates/UpdateAll/Caption": {
"title": "$:/language/ControlPanel/Plugins/Updates/UpdateAll/Caption",
"text": "Update <<update-count>> plugins"
},
"$:/language/ControlPanel/Plugins/SubPluginPrompt": {
"title": "$:/language/ControlPanel/Plugins/SubPluginPrompt",
"text": "With <<count>> sub-plugins available"
},
"$:/language/ControlPanel/Saving/Caption": {
"title": "$:/language/ControlPanel/Saving/Caption",
"text": "Saving"
},
"$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Description": {
"title": "$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Description",
"text": "Permit automatic saving for the download saver"
},
"$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Hint": {
"title": "$:/language/ControlPanel/Saving/DownloadSaver/AutoSave/Hint",
"text": "Enable Autosave for Download Saver"
},
"$:/language/ControlPanel/Saving/DownloadSaver/Caption": {
"title": "$:/language/ControlPanel/Saving/DownloadSaver/Caption",
"text": "Download Saver"
},
"$:/language/ControlPanel/Saving/DownloadSaver/Hint": {
"title": "$:/language/ControlPanel/Saving/DownloadSaver/Hint",
"text": "These settings apply to the HTML5-compatible download saver"
},
"$:/language/ControlPanel/Saving/General/Caption": {
"title": "$:/language/ControlPanel/Saving/General/Caption",
"text": "General"
},
"$:/language/ControlPanel/Saving/General/Hint": {
"title": "$:/language/ControlPanel/Saving/General/Hint",
"text": "These settings apply to all the loaded savers"
},
"$:/language/ControlPanel/Saving/Hint": {
"title": "$:/language/ControlPanel/Saving/Hint",
"text": "Settings used for saving the entire TiddlyWiki as a single file via a saver module"
},
"$:/language/ControlPanel/Saving/GitService/Branch": {
"title": "$:/language/ControlPanel/Saving/GitService/Branch",
"text": "Target branch for saving"
},
"$:/language/ControlPanel/Saving/GitService/CommitMessage": {
"title": "$:/language/ControlPanel/Saving/GitService/CommitMessage",
"text": "Saved by TiddlyWiki"
},
"$:/language/ControlPanel/Saving/GitService/Description": {
"title": "$:/language/ControlPanel/Saving/GitService/Description",
"text": "These settings are only used when saving to <<service-name>>"
},
"$:/language/ControlPanel/Saving/GitService/Filename": {
"title": "$:/language/ControlPanel/Saving/GitService/Filename",
"text": "Filename of target file (e.g. `index.html`)"
},
"$:/language/ControlPanel/Saving/GitService/Path": {
"title": "$:/language/ControlPanel/Saving/GitService/Path",
"text": "Path to target file (e.g. `/wiki/`)"
},
"$:/language/ControlPanel/Saving/GitService/Repo": {
"title": "$:/language/ControlPanel/Saving/GitService/Repo",
"text": "Target repository (e.g. `Jermolene/TiddlyWiki5`)"
},
"$:/language/ControlPanel/Saving/GitService/ServerURL": {
"title": "$:/language/ControlPanel/Saving/GitService/ServerURL",
"text": "Server API URL"
},
"$:/language/ControlPanel/Saving/GitService/UserName": {
"title": "$:/language/ControlPanel/Saving/GitService/UserName",
"text": "Username"
},
"$:/language/ControlPanel/Saving/GitService/GitHub/Caption": {
"title": "$:/language/ControlPanel/Saving/GitService/GitHub/Caption",
"text": "~GitHub Saver"
},
"$:/language/ControlPanel/Saving/GitService/GitHub/Password": {
"title": "$:/language/ControlPanel/Saving/GitService/GitHub/Password",
"text": "Password, OAUTH token, or personal access token (see [[GitHub help page|https://help.github.com/en/articles/creating-a-personal-access-token-for-the-command-line]] for details)"
},
"$:/language/ControlPanel/Saving/GitService/GitLab/Caption": {
"title": "$:/language/ControlPanel/Saving/GitService/GitLab/Caption",
"text": "~GitLab Saver"
},
"$:/language/ControlPanel/Saving/GitService/GitLab/Password": {
"title": "$:/language/ControlPanel/Saving/GitService/GitLab/Password",
"text": "Personal access token for API (see [[GitLab help page|https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html]] for details)"
},
"$:/language/ControlPanel/Saving/GitService/Gitea/Caption": {
"title": "$:/language/ControlPanel/Saving/GitService/Gitea/Caption",
"text": "Gitea Saver"
},
"$:/language/ControlPanel/Saving/GitService/Gitea/Password": {
"title": "$:/language/ControlPanel/Saving/GitService/Gitea/Password",
"text": "Personal access token for API (via Gitea’s web interface: `Settings | Applications | Generate New Token`)"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Advanced/Heading": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Advanced/Heading",
"text": "Advanced Settings"
},
"$:/language/ControlPanel/Saving/TiddlySpot/BackupDir": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/BackupDir",
"text": "Backup Directory"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Backups": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Backups",
"text": "Backups"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Caption": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Caption",
"text": "~TiddlySpot Saver"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Description": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Description",
"text": "These settings are only used when saving to http://tiddlyspot.com or a compatible remote server"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Filename": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Filename",
"text": "Upload Filename"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Heading": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Heading",
"text": "~TiddlySpot"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Hint": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Hint",
"text": "//The server URL defaults to `http://<wikiname>.tiddlyspot.com/store.cgi` and can be changed to use a custom server address, e.g. `http://example.com/store.php`.//"
},
"$:/language/ControlPanel/Saving/TiddlySpot/Password": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/Password",
"text": "Password"
},
"$:/language/ControlPanel/Saving/TiddlySpot/ServerURL": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/ServerURL",
"text": "Server URL"
},
"$:/language/ControlPanel/Saving/TiddlySpot/UploadDir": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/UploadDir",
"text": "Upload Directory"
},
"$:/language/ControlPanel/Saving/TiddlySpot/UserName": {
"title": "$:/language/ControlPanel/Saving/TiddlySpot/UserName",
"text": "Wiki Name"
},
"$:/language/ControlPanel/Settings/AutoSave/Caption": {
"title": "$:/language/ControlPanel/Settings/AutoSave/Caption",
"text": "Autosave"
},
"$:/language/ControlPanel/Settings/AutoSave/Disabled/Description": {
"title": "$:/language/ControlPanel/Settings/AutoSave/Disabled/Description",
"text": "Do not save changes automatically"
},
"$:/language/ControlPanel/Settings/AutoSave/Enabled/Description": {
"title": "$:/language/ControlPanel/Settings/AutoSave/Enabled/Description",
"text": "Save changes automatically"
},
"$:/language/ControlPanel/Settings/AutoSave/Hint": {
"title": "$:/language/ControlPanel/Settings/AutoSave/Hint",
"text": "Attempt to automatically save changes during editing when using a supporting saver"
},
"$:/language/ControlPanel/Settings/CamelCase/Caption": {
"title": "$:/language/ControlPanel/Settings/CamelCase/Caption",
"text": "Camel Case Wiki Links"
},
"$:/language/ControlPanel/Settings/CamelCase/Hint": {
"title": "$:/language/ControlPanel/Settings/CamelCase/Hint",
"text": "You can globally disable automatic linking of ~CamelCase phrases. Requires reload to take effect"
},
"$:/language/ControlPanel/Settings/CamelCase/Description": {
"title": "$:/language/ControlPanel/Settings/CamelCase/Description",
"text": "Enable automatic ~CamelCase linking"
},
"$:/language/ControlPanel/Settings/Caption": {
"title": "$:/language/ControlPanel/Settings/Caption",
"text": "Settings"
},
"$:/language/ControlPanel/Settings/EditorToolbar/Caption": {
"title": "$:/language/ControlPanel/Settings/EditorToolbar/Caption",
"text": "Editor Toolbar"
},
"$:/language/ControlPanel/Settings/EditorToolbar/Hint": {
"title": "$:/language/ControlPanel/Settings/EditorToolbar/Hint",
"text": "Enable or disable the editor toolbar:"
},
"$:/language/ControlPanel/Settings/EditorToolbar/Description": {
"title": "$:/language/ControlPanel/Settings/EditorToolbar/Description",
"text": "Show editor toolbar"
},
"$:/language/ControlPanel/Settings/InfoPanelMode/Caption": {
"title": "$:/language/ControlPanel/Settings/InfoPanelMode/Caption",
"text": "Tiddler Info Panel Mode"
},
"$:/language/ControlPanel/Settings/InfoPanelMode/Hint": {
"title": "$:/language/ControlPanel/Settings/InfoPanelMode/Hint",
"text": "Control when the tiddler info panel closes:"
},
"$:/language/ControlPanel/Settings/InfoPanelMode/Popup/Description": {
"title": "$:/language/ControlPanel/Settings/InfoPanelMode/Popup/Description",
"text": "Tiddler info panel closes automatically"
},
"$:/language/ControlPanel/Settings/InfoPanelMode/Sticky/Description": {
"title": "$:/language/ControlPanel/Settings/InfoPanelMode/Sticky/Description",
"text": "Tiddler info panel stays open until explicitly closed"
},
"$:/language/ControlPanel/Settings/Hint": {
"title": "$:/language/ControlPanel/Settings/Hint",
"text": "These settings let you customise the behaviour of TiddlyWiki."
},
"$:/language/ControlPanel/Settings/NavigationAddressBar/Caption": {
"title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Caption",
"text": "Navigation Address Bar"
},
"$:/language/ControlPanel/Settings/NavigationAddressBar/Hint": {
"title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Hint",
"text": "Behaviour of the browser address bar when navigating to a tiddler:"
},
"$:/language/ControlPanel/Settings/NavigationAddressBar/No/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationAddressBar/No/Description",
"text": "Do not update the address bar"
},
"$:/language/ControlPanel/Settings/NavigationAddressBar/Permalink/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Permalink/Description",
"text": "Include the target tiddler"
},
"$:/language/ControlPanel/Settings/NavigationAddressBar/Permaview/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationAddressBar/Permaview/Description",
"text": "Include the target tiddler and the current story sequence"
},
"$:/language/ControlPanel/Settings/NavigationHistory/Caption": {
"title": "$:/language/ControlPanel/Settings/NavigationHistory/Caption",
"text": "Navigation History"
},
"$:/language/ControlPanel/Settings/NavigationHistory/Hint": {
"title": "$:/language/ControlPanel/Settings/NavigationHistory/Hint",
"text": "Update browser history when navigating to a tiddler:"
},
"$:/language/ControlPanel/Settings/NavigationHistory/No/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationHistory/No/Description",
"text": "Do not update history"
},
"$:/language/ControlPanel/Settings/NavigationHistory/Yes/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationHistory/Yes/Description",
"text": "Update history"
},
"$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Caption": {
"title": "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Caption",
"text": "Permalink/permaview Mode"
},
"$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Hint": {
"title": "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Hint",
"text": "Choose how permalink/permaview is handled:"
},
"$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/CopyToClipboard/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/CopyToClipboard/Description",
"text": "Copy permalink/permaview URL to clipboard"
},
"$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/UpdateAddressBar/Description": {
"title": "$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/UpdateAddressBar/Description",
"text": "Update address bar with permalink/permaview URL"
},
"$:/language/ControlPanel/Settings/PerformanceInstrumentation/Caption": {
"title": "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Caption",
"text": "Performance Instrumentation"
},
"$:/language/ControlPanel/Settings/PerformanceInstrumentation/Hint": {
"title": "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Hint",
"text": "Displays performance statistics in the browser developer console. Requires reload to take effect"
},
"$:/language/ControlPanel/Settings/PerformanceInstrumentation/Description": {
"title": "$:/language/ControlPanel/Settings/PerformanceInstrumentation/Description",
"text": "Enable performance instrumentation"
},
"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption",
"text": "Toolbar Button Style"
},
"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Hint": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Hint",
"text": "Choose the style for toolbar buttons:"
},
"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless",
"text": "Borderless"
},
"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed",
"text": "Boxed"
},
"$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded",
"text": "Rounded"
},
"$:/language/ControlPanel/Settings/ToolbarButtons/Caption": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtons/Caption",
"text": "Toolbar Buttons"
},
"$:/language/ControlPanel/Settings/ToolbarButtons/Hint": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtons/Hint",
"text": "Default toolbar button appearance:"
},
"$:/language/ControlPanel/Settings/ToolbarButtons/Icons/Description": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtons/Icons/Description",
"text": "Include icon"
},
"$:/language/ControlPanel/Settings/ToolbarButtons/Text/Description": {
"title": "$:/language/ControlPanel/Settings/ToolbarButtons/Text/Description",
"text": "Include text"
},
"$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption": {
"title": "$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption",
"text": "Default Sidebar Tab"
},
"$:/language/ControlPanel/Settings/DefaultSidebarTab/Hint": {
"title": "$:/language/ControlPanel/Settings/DefaultSidebarTab/Hint",
"text": "Specify which sidebar tab is displayed by default"
},
"$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Caption": {
"title": "$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Caption",
"text": "Default More Sidebar Tab"
},
"$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Hint": {
"title": "$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Hint",
"text": "Specify which More sidebar tab is displayed by default"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/Caption": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/Caption",
"text": "Tiddler Opening Behaviour"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/InsideRiver/Hint": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/InsideRiver/Hint",
"text": "Navigation from //within// the story river"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/OutsideRiver/Hint": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OutsideRiver/Hint",
"text": "Navigation from //outside// the story river"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAbove": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAbove",
"text": "Open above the current tiddler"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/OpenBelow": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenBelow",
"text": "Open below the current tiddler"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtTop": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtTop",
"text": "Open at the top of the story river"
},
"$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtBottom": {
"title": "$:/language/ControlPanel/Settings/LinkToBehaviour/OpenAtBottom",
"text": "Open at the bottom of the story river"
},
"$:/language/ControlPanel/Settings/TitleLinks/Caption": {
"title": "$:/language/ControlPanel/Settings/TitleLinks/Caption",
"text": "Tiddler Titles"
},
"$:/language/ControlPanel/Settings/TitleLinks/Hint": {
"title": "$:/language/ControlPanel/Settings/TitleLinks/Hint",
"text": "Optionally display tiddler titles as links"
},
"$:/language/ControlPanel/Settings/TitleLinks/No/Description": {
"title": "$:/language/ControlPanel/Settings/TitleLinks/No/Description",
"text": "Do not display tiddler titles as links"
},
"$:/language/ControlPanel/Settings/TitleLinks/Yes/Description": {
"title": "$:/language/ControlPanel/Settings/TitleLinks/Yes/Description",
"text": "Display tiddler titles as links"
},
"$:/language/ControlPanel/Settings/MissingLinks/Caption": {
"title": "$:/language/ControlPanel/Settings/MissingLinks/Caption",
"text": "Wiki Links"
},
"$:/language/ControlPanel/Settings/MissingLinks/Hint": {
"title": "$:/language/ControlPanel/Settings/MissingLinks/Hint",
"text": "Choose whether to link to tiddlers that do not exist yet"
},
"$:/language/ControlPanel/Settings/MissingLinks/Description": {
"title": "$:/language/ControlPanel/Settings/MissingLinks/Description",
"text": "Enable links to missing tiddlers"
},
"$:/language/ControlPanel/StoryView/Caption": {
"title": "$:/language/ControlPanel/StoryView/Caption",
"text": "Story View"
},
"$:/language/ControlPanel/StoryView/Prompt": {
"title": "$:/language/ControlPanel/StoryView/Prompt",
"text": "Current view:"
},
"$:/language/ControlPanel/Stylesheets/Caption": {
"title": "$:/language/ControlPanel/Stylesheets/Caption",
"text": "Stylesheets"
},
"$:/language/ControlPanel/Stylesheets/Expand/Caption": {
"title": "$:/language/ControlPanel/Stylesheets/Expand/Caption",
"text": "Expand All"
},
"$:/language/ControlPanel/Stylesheets/Hint": {
"title": "$:/language/ControlPanel/Stylesheets/Hint",
"text": "This is the rendered CSS of the current stylesheet tiddlers tagged with <<tag \"$:/tags/Stylesheet\">>"
},
"$:/language/ControlPanel/Stylesheets/Restore/Caption": {
"title": "$:/language/ControlPanel/Stylesheets/Restore/Caption",
"text": "Restore"
},
"$:/language/ControlPanel/Theme/Caption": {
"title": "$:/language/ControlPanel/Theme/Caption",
"text": "Theme"
},
"$:/language/ControlPanel/Theme/Prompt": {
"title": "$:/language/ControlPanel/Theme/Prompt",
"text": "Current theme:"
},
"$:/language/ControlPanel/TiddlerFields/Caption": {
"title": "$:/language/ControlPanel/TiddlerFields/Caption",
"text": "Tiddler Fields"
},
"$:/language/ControlPanel/TiddlerFields/Hint": {
"title": "$:/language/ControlPanel/TiddlerFields/Hint",
"text": "This is the full set of TiddlerFields in use in this wiki (including system tiddlers but excluding shadow tiddlers)."
},
"$:/language/ControlPanel/Toolbars/Caption": {
"title": "$:/language/ControlPanel/Toolbars/Caption",
"text": "Toolbars"
},
"$:/language/ControlPanel/Toolbars/EditToolbar/Caption": {
"title": "$:/language/ControlPanel/Toolbars/EditToolbar/Caption",
"text": "Edit Toolbar"
},
"$:/language/ControlPanel/Toolbars/EditToolbar/Hint": {
"title": "$:/language/ControlPanel/Toolbars/EditToolbar/Hint",
"text": "Choose which buttons are displayed for tiddlers in edit mode. Drag and drop to change the ordering"
},
"$:/language/ControlPanel/Toolbars/Hint": {
"title": "$:/language/ControlPanel/Toolbars/Hint",
"text": "Select which toolbar buttons are displayed"
},
"$:/language/ControlPanel/Toolbars/PageControls/Caption": {
"title": "$:/language/ControlPanel/Toolbars/PageControls/Caption",
"text": "Page Toolbar"
},
"$:/language/ControlPanel/Toolbars/PageControls/Hint": {
"title": "$:/language/ControlPanel/Toolbars/PageControls/Hint",
"text": "Choose which buttons are displayed on the main page toolbar. Drag and drop to change the ordering"
},
"$:/language/ControlPanel/Toolbars/EditorToolbar/Caption": {
"title": "$:/language/ControlPanel/Toolbars/EditorToolbar/Caption",
"text": "Editor Toolbar"
},
"$:/language/ControlPanel/Toolbars/EditorToolbar/Hint": {
"title": "$:/language/ControlPanel/Toolbars/EditorToolbar/Hint",
"text": "Choose which buttons are displayed in the editor toolbar. Note that some buttons will only appear when editing tiddlers of a certain type. Drag and drop to change the ordering"
},
"$:/language/ControlPanel/Toolbars/ViewToolbar/Caption": {
"title": "$:/language/ControlPanel/Toolbars/ViewToolbar/Caption",
"text": "View Toolbar"
},
"$:/language/ControlPanel/Toolbars/ViewToolbar/Hint": {
"title": "$:/language/ControlPanel/Toolbars/ViewToolbar/Hint",
"text": "Choose which buttons are displayed for tiddlers in view mode. Drag and drop to change the ordering"
},
"$:/language/ControlPanel/Tools/Download/Full/Caption": {
"title": "$:/language/ControlPanel/Tools/Download/Full/Caption",
"text": "Download full wiki"
},
"$:/language/Date/DaySuffix/1": {
"title": "$:/language/Date/DaySuffix/1",
"text": "st"
},
"$:/language/Date/DaySuffix/2": {
"title": "$:/language/Date/DaySuffix/2",
"text": "nd"
},
"$:/language/Date/DaySuffix/3": {
"title": "$:/language/Date/DaySuffix/3",
"text": "rd"
},
"$:/language/Date/DaySuffix/4": {
"title": "$:/language/Date/DaySuffix/4",
"text": "th"
},
"$:/language/Date/DaySuffix/5": {
"title": "$:/language/Date/DaySuffix/5",
"text": "th"
},
"$:/language/Date/DaySuffix/6": {
"title": "$:/language/Date/DaySuffix/6",
"text": "th"
},
"$:/language/Date/DaySuffix/7": {
"title": "$:/language/Date/DaySuffix/7",
"text": "th"
},
"$:/language/Date/DaySuffix/8": {
"title": "$:/language/Date/DaySuffix/8",
"text": "th"
},
"$:/language/Date/DaySuffix/9": {
"title": "$:/language/Date/DaySuffix/9",
"text": "th"
},
"$:/language/Date/DaySuffix/10": {
"title": "$:/language/Date/DaySuffix/10",
"text": "th"
},
"$:/language/Date/DaySuffix/11": {
"title": "$:/language/Date/DaySuffix/11",
"text": "th"
},
"$:/language/Date/DaySuffix/12": {
"title": "$:/language/Date/DaySuffix/12",
"text": "th"
},
"$:/language/Date/DaySuffix/13": {
"title": "$:/language/Date/DaySuffix/13",
"text": "th"
},
"$:/language/Date/DaySuffix/14": {
"title": "$:/language/Date/DaySuffix/14",
"text": "th"
},
"$:/language/Date/DaySuffix/15": {
"title": "$:/language/Date/DaySuffix/15",
"text": "th"
},
"$:/language/Date/DaySuffix/16": {
"title": "$:/language/Date/DaySuffix/16",
"text": "th"
},
"$:/language/Date/DaySuffix/17": {
"title": "$:/language/Date/DaySuffix/17",
"text": "th"
},
"$:/language/Date/DaySuffix/18": {
"title": "$:/language/Date/DaySuffix/18",
"text": "th"
},
"$:/language/Date/DaySuffix/19": {
"title": "$:/language/Date/DaySuffix/19",
"text": "th"
},
"$:/language/Date/DaySuffix/20": {
"title": "$:/language/Date/DaySuffix/20",
"text": "th"
},
"$:/language/Date/DaySuffix/21": {
"title": "$:/language/Date/DaySuffix/21",
"text": "st"
},
"$:/language/Date/DaySuffix/22": {
"title": "$:/language/Date/DaySuffix/22",
"text": "nd"
},
"$:/language/Date/DaySuffix/23": {
"title": "$:/language/Date/DaySuffix/23",
"text": "rd"
},
"$:/language/Date/DaySuffix/24": {
"title": "$:/language/Date/DaySuffix/24",
"text": "th"
},
"$:/language/Date/DaySuffix/25": {
"title": "$:/language/Date/DaySuffix/25",
"text": "th"
},
"$:/language/Date/DaySuffix/26": {
"title": "$:/language/Date/DaySuffix/26",
"text": "th"
},
"$:/language/Date/DaySuffix/27": {
"title": "$:/language/Date/DaySuffix/27",
"text": "th"
},
"$:/language/Date/DaySuffix/28": {
"title": "$:/language/Date/DaySuffix/28",
"text": "th"
},
"$:/language/Date/DaySuffix/29": {
"title": "$:/language/Date/DaySuffix/29",
"text": "th"
},
"$:/language/Date/DaySuffix/30": {
"title": "$:/language/Date/DaySuffix/30",
"text": "th"
},
"$:/language/Date/DaySuffix/31": {
"title": "$:/language/Date/DaySuffix/31",
"text": "st"
},
"$:/language/Date/Long/Day/0": {
"title": "$:/language/Date/Long/Day/0",
"text": "Sunday"
},
"$:/language/Date/Long/Day/1": {
"title": "$:/language/Date/Long/Day/1",
"text": "Monday"
},
"$:/language/Date/Long/Day/2": {
"title": "$:/language/Date/Long/Day/2",
"text": "Tuesday"
},
"$:/language/Date/Long/Day/3": {
"title": "$:/language/Date/Long/Day/3",
"text": "Wednesday"
},
"$:/language/Date/Long/Day/4": {
"title": "$:/language/Date/Long/Day/4",
"text": "Thursday"
},
"$:/language/Date/Long/Day/5": {
"title": "$:/language/Date/Long/Day/5",
"text": "Friday"
},
"$:/language/Date/Long/Day/6": {
"title": "$:/language/Date/Long/Day/6",
"text": "Saturday"
},
"$:/language/Date/Long/Month/1": {
"title": "$:/language/Date/Long/Month/1",
"text": "January"
},
"$:/language/Date/Long/Month/2": {
"title": "$:/language/Date/Long/Month/2",
"text": "February"
},
"$:/language/Date/Long/Month/3": {
"title": "$:/language/Date/Long/Month/3",
"text": "March"
},
"$:/language/Date/Long/Month/4": {
"title": "$:/language/Date/Long/Month/4",
"text": "April"
},
"$:/language/Date/Long/Month/5": {
"title": "$:/language/Date/Long/Month/5",
"text": "May"
},
"$:/language/Date/Long/Month/6": {
"title": "$:/language/Date/Long/Month/6",
"text": "June"
},
"$:/language/Date/Long/Month/7": {
"title": "$:/language/Date/Long/Month/7",
"text": "July"
},
"$:/language/Date/Long/Month/8": {
"title": "$:/language/Date/Long/Month/8",
"text": "August"
},
"$:/language/Date/Long/Month/9": {
"title": "$:/language/Date/Long/Month/9",
"text": "September"
},
"$:/language/Date/Long/Month/10": {
"title": "$:/language/Date/Long/Month/10",
"text": "October"
},
"$:/language/Date/Long/Month/11": {
"title": "$:/language/Date/Long/Month/11",
"text": "November"
},
"$:/language/Date/Long/Month/12": {
"title": "$:/language/Date/Long/Month/12",
"text": "December"
},
"$:/language/Date/Period/am": {
"title": "$:/language/Date/Period/am",
"text": "am"
},
"$:/language/Date/Period/pm": {
"title": "$:/language/Date/Period/pm",
"text": "pm"
},
"$:/language/Date/Short/Day/0": {
"title": "$:/language/Date/Short/Day/0",
"text": "Sun"
},
"$:/language/Date/Short/Day/1": {
"title": "$:/language/Date/Short/Day/1",
"text": "Mon"
},
"$:/language/Date/Short/Day/2": {
"title": "$:/language/Date/Short/Day/2",
"text": "Tue"
},
"$:/language/Date/Short/Day/3": {
"title": "$:/language/Date/Short/Day/3",
"text": "Wed"
},
"$:/language/Date/Short/Day/4": {
"title": "$:/language/Date/Short/Day/4",
"text": "Thu"
},
"$:/language/Date/Short/Day/5": {
"title": "$:/language/Date/Short/Day/5",
"text": "Fri"
},
"$:/language/Date/Short/Day/6": {
"title": "$:/language/Date/Short/Day/6",
"text": "Sat"
},
"$:/language/Date/Short/Month/1": {
"title": "$:/language/Date/Short/Month/1",
"text": "Jan"
},
"$:/language/Date/Short/Month/2": {
"title": "$:/language/Date/Short/Month/2",
"text": "Feb"
},
"$:/language/Date/Short/Month/3": {
"title": "$:/language/Date/Short/Month/3",
"text": "Mar"
},
"$:/language/Date/Short/Month/4": {
"title": "$:/language/Date/Short/Month/4",
"text": "Apr"
},
"$:/language/Date/Short/Month/5": {
"title": "$:/language/Date/Short/Month/5",
"text": "May"
},
"$:/language/Date/Short/Month/6": {
"title": "$:/language/Date/Short/Month/6",
"text": "Jun"
},
"$:/language/Date/Short/Month/7": {
"title": "$:/language/Date/Short/Month/7",
"text": "Jul"
},
"$:/language/Date/Short/Month/8": {
"title": "$:/language/Date/Short/Month/8",
"text": "Aug"
},
"$:/language/Date/Short/Month/9": {
"title": "$:/language/Date/Short/Month/9",
"text": "Sep"
},
"$:/language/Date/Short/Month/10": {
"title": "$:/language/Date/Short/Month/10",
"text": "Oct"
},
"$:/language/Date/Short/Month/11": {
"title": "$:/language/Date/Short/Month/11",
"text": "Nov"
},
"$:/language/Date/Short/Month/12": {
"title": "$:/language/Date/Short/Month/12",
"text": "Dec"
},
"$:/language/RelativeDate/Future/Days": {
"title": "$:/language/RelativeDate/Future/Days",
"text": "<<period>> days from now"
},
"$:/language/RelativeDate/Future/Hours": {
"title": "$:/language/RelativeDate/Future/Hours",
"text": "<<period>> hours from now"
},
"$:/language/RelativeDate/Future/Minutes": {
"title": "$:/language/RelativeDate/Future/Minutes",
"text": "<<period>> minutes from now"
},
"$:/language/RelativeDate/Future/Months": {
"title": "$:/language/RelativeDate/Future/Months",
"text": "<<period>> months from now"
},
"$:/language/RelativeDate/Future/Second": {
"title": "$:/language/RelativeDate/Future/Second",
"text": "1 second from now"
},
"$:/language/RelativeDate/Future/Seconds": {
"title": "$:/language/RelativeDate/Future/Seconds",
"text": "<<period>> seconds from now"
},
"$:/language/RelativeDate/Future/Years": {
"title": "$:/language/RelativeDate/Future/Years",
"text": "<<period>> years from now"
},
"$:/language/RelativeDate/Past/Days": {
"title": "$:/language/RelativeDate/Past/Days",
"text": "<<period>> days ago"
},
"$:/language/RelativeDate/Past/Hours": {
"title": "$:/language/RelativeDate/Past/Hours",
"text": "<<period>> hours ago"
},
"$:/language/RelativeDate/Past/Minutes": {
"title": "$:/language/RelativeDate/Past/Minutes",
"text": "<<period>> minutes ago"
},
"$:/language/RelativeDate/Past/Months": {
"title": "$:/language/RelativeDate/Past/Months",
"text": "<<period>> months ago"
},
"$:/language/RelativeDate/Past/Second": {
"title": "$:/language/RelativeDate/Past/Second",
"text": "1 second ago"
},
"$:/language/RelativeDate/Past/Seconds": {
"title": "$:/language/RelativeDate/Past/Seconds",
"text": "<<period>> seconds ago"
},
"$:/language/RelativeDate/Past/Years": {
"title": "$:/language/RelativeDate/Past/Years",
"text": "<<period>> years ago"
},
"$:/language/Docs/ModuleTypes/allfilteroperator": {
"title": "$:/language/Docs/ModuleTypes/allfilteroperator",
"text": "A sub-operator for the ''all'' filter operator."
},
"$:/language/Docs/ModuleTypes/animation": {
"title": "$:/language/Docs/ModuleTypes/animation",
"text": "Animations that may be used with the RevealWidget."
},
"$:/language/Docs/ModuleTypes/authenticator": {
"title": "$:/language/Docs/ModuleTypes/authenticator",
"text": "Defines how requests are authenticated by the built-in HTTP server."
},
"$:/language/Docs/ModuleTypes/bitmapeditoroperation": {
"title": "$:/language/Docs/ModuleTypes/bitmapeditoroperation",
"text": "A bitmap editor toolbar operation."
},
"$:/language/Docs/ModuleTypes/command": {
"title": "$:/language/Docs/ModuleTypes/command",
"text": "Commands that can be executed under Node.js."
},
"$:/language/Docs/ModuleTypes/config": {
"title": "$:/language/Docs/ModuleTypes/config",
"text": "Data to be inserted into `$tw.config`."
},
"$:/language/Docs/ModuleTypes/filteroperator": {
"title": "$:/language/Docs/ModuleTypes/filteroperator",
"text": "Individual filter operator methods."
},
"$:/language/Docs/ModuleTypes/global": {
"title": "$:/language/Docs/ModuleTypes/global",
"text": "Global data to be inserted into `$tw`."
},
"$:/language/Docs/ModuleTypes/info": {
"title": "$:/language/Docs/ModuleTypes/info",
"text": "Publishes system information via the [[$:/temp/info-plugin]] pseudo-plugin."
},
"$:/language/Docs/ModuleTypes/isfilteroperator": {
"title": "$:/language/Docs/ModuleTypes/isfilteroperator",
"text": "Operands for the ''is'' filter operator."
},
"$:/language/Docs/ModuleTypes/library": {
"title": "$:/language/Docs/ModuleTypes/library",
"text": "Generic module type for general purpose JavaScript modules."
},
"$:/language/Docs/ModuleTypes/macro": {
"title": "$:/language/Docs/ModuleTypes/macro",
"text": "JavaScript macro definitions."
},
"$:/language/Docs/ModuleTypes/parser": {
"title": "$:/language/Docs/ModuleTypes/parser",
"text": "Parsers for different content types."
},
"$:/language/Docs/ModuleTypes/route": {
"title": "$:/language/Docs/ModuleTypes/route",
"text": "Defines how individual URL patterns are handled by the built-in HTTP server."
},
"$:/language/Docs/ModuleTypes/saver": {
"title": "$:/language/Docs/ModuleTypes/saver",
"text": "Savers handle different methods for saving files from the browser."
},
"$:/language/Docs/ModuleTypes/startup": {
"title": "$:/language/Docs/ModuleTypes/startup",
"text": "Startup functions."
},
"$:/language/Docs/ModuleTypes/storyview": {
"title": "$:/language/Docs/ModuleTypes/storyview",
"text": "Story views customise the animation and behaviour of list widgets."
},
"$:/language/Docs/ModuleTypes/texteditoroperation": {
"title": "$:/language/Docs/ModuleTypes/texteditoroperation",
"text": "A text editor toolbar operation."
},
"$:/language/Docs/ModuleTypes/tiddlerdeserializer": {
"title": "$:/language/Docs/ModuleTypes/tiddlerdeserializer",
"text": "Converts different content types into tiddlers."
},
"$:/language/Docs/ModuleTypes/tiddlerfield": {
"title": "$:/language/Docs/ModuleTypes/tiddlerfield",
"text": "Defines the behaviour of an individual tiddler field."
},
"$:/language/Docs/ModuleTypes/tiddlermethod": {
"title": "$:/language/Docs/ModuleTypes/tiddlermethod",
"text": "Adds methods to the `$tw.Tiddler` prototype."
},
"$:/language/Docs/ModuleTypes/upgrader": {
"title": "$:/language/Docs/ModuleTypes/upgrader",
"text": "Applies upgrade processing to tiddlers during an upgrade/import."
},
"$:/language/Docs/ModuleTypes/utils": {
"title": "$:/language/Docs/ModuleTypes/utils",
"text": "Adds methods to `$tw.utils`."
},
"$:/language/Docs/ModuleTypes/utils-node": {
"title": "$:/language/Docs/ModuleTypes/utils-node",
"text": "Adds Node.js-specific methods to `$tw.utils`."
},
"$:/language/Docs/ModuleTypes/widget": {
"title": "$:/language/Docs/ModuleTypes/widget",
"text": "Widgets encapsulate DOM rendering and refreshing."
},
"$:/language/Docs/ModuleTypes/wikimethod": {
"title": "$:/language/Docs/ModuleTypes/wikimethod",
"text": "Adds methods to `$tw.Wiki`."
},
"$:/language/Docs/ModuleTypes/wikirule": {
"title": "$:/language/Docs/ModuleTypes/wikirule",
"text": "Individual parser rules for the main WikiText parser."
},
"$:/language/Docs/PaletteColours/alert-background": {
"title": "$:/language/Docs/PaletteColours/alert-background",
"text": "Alert background"
},
"$:/language/Docs/PaletteColours/alert-border": {
"title": "$:/language/Docs/PaletteColours/alert-border",
"text": "Alert border"
},
"$:/language/Docs/PaletteColours/alert-highlight": {
"title": "$:/language/Docs/PaletteColours/alert-highlight",
"text": "Alert highlight"
},
"$:/language/Docs/PaletteColours/alert-muted-foreground": {
"title": "$:/language/Docs/PaletteColours/alert-muted-foreground",
"text": "Alert muted foreground"
},
"$:/language/Docs/PaletteColours/background": {
"title": "$:/language/Docs/PaletteColours/background",
"text": "General background"
},
"$:/language/Docs/PaletteColours/blockquote-bar": {
"title": "$:/language/Docs/PaletteColours/blockquote-bar",
"text": "Blockquote bar"
},
"$:/language/Docs/PaletteColours/button-background": {
"title": "$:/language/Docs/PaletteColours/button-background",
"text": "Default button background"
},
"$:/language/Docs/PaletteColours/button-border": {
"title": "$:/language/Docs/PaletteColours/button-border",
"text": "Default button border"
},
"$:/language/Docs/PaletteColours/button-foreground": {
"title": "$:/language/Docs/PaletteColours/button-foreground",
"text": "Default button foreground"
},
"$:/language/Docs/PaletteColours/dirty-indicator": {
"title": "$:/language/Docs/PaletteColours/dirty-indicator",
"text": "Unsaved changes indicator"
},
"$:/language/Docs/PaletteColours/code-background": {
"title": "$:/language/Docs/PaletteColours/code-background",
"text": "Code background"
},
"$:/language/Docs/PaletteColours/code-border": {
"title": "$:/language/Docs/PaletteColours/code-border",
"text": "Code border"
},
"$:/language/Docs/PaletteColours/code-foreground": {
"title": "$:/language/Docs/PaletteColours/code-foreground",
"text": "Code foreground"
},
"$:/language/Docs/PaletteColours/download-background": {
"title": "$:/language/Docs/PaletteColours/download-background",
"text": "Download button background"
},
"$:/language/Docs/PaletteColours/download-foreground": {
"title": "$:/language/Docs/PaletteColours/download-foreground",
"text": "Download button foreground"
},
"$:/language/Docs/PaletteColours/dragger-background": {
"title": "$:/language/Docs/PaletteColours/dragger-background",
"text": "Dragger background"
},
"$:/language/Docs/PaletteColours/dragger-foreground": {
"title": "$:/language/Docs/PaletteColours/dragger-foreground",
"text": "Dragger foreground"
},
"$:/language/Docs/PaletteColours/dropdown-background": {
"title": "$:/language/Docs/PaletteColours/dropdown-background",
"text": "Dropdown background"
},
"$:/language/Docs/PaletteColours/dropdown-border": {
"title": "$:/language/Docs/PaletteColours/dropdown-border",
"text": "Dropdown border"
},
"$:/language/Docs/PaletteColours/dropdown-tab-background-selected": {
"title": "$:/language/Docs/PaletteColours/dropdown-tab-background-selected",
"text": "Dropdown tab background for selected tabs"
},
"$:/language/Docs/PaletteColours/dropdown-tab-background": {
"title": "$:/language/Docs/PaletteColours/dropdown-tab-background",
"text": "Dropdown tab background"
},
"$:/language/Docs/PaletteColours/dropzone-background": {
"title": "$:/language/Docs/PaletteColours/dropzone-background",
"text": "Dropzone background"
},
"$:/language/Docs/PaletteColours/external-link-background-hover": {
"title": "$:/language/Docs/PaletteColours/external-link-background-hover",
"text": "External link background hover"
},
"$:/language/Docs/PaletteColours/external-link-background-visited": {
"title": "$:/language/Docs/PaletteColours/external-link-background-visited",
"text": "External link background visited"
},
"$:/language/Docs/PaletteColours/external-link-background": {
"title": "$:/language/Docs/PaletteColours/external-link-background",
"text": "External link background"
},
"$:/language/Docs/PaletteColours/external-link-foreground-hover": {
"title": "$:/language/Docs/PaletteColours/external-link-foreground-hover",
"text": "External link foreground hover"
},
"$:/language/Docs/PaletteColours/external-link-foreground-visited": {
"title": "$:/language/Docs/PaletteColours/external-link-foreground-visited",
"text": "External link foreground visited"
},
"$:/language/Docs/PaletteColours/external-link-foreground": {
"title": "$:/language/Docs/PaletteColours/external-link-foreground",
"text": "External link foreground"
},
"$:/language/Docs/PaletteColours/foreground": {
"title": "$:/language/Docs/PaletteColours/foreground",
"text": "General foreground"
},
"$:/language/Docs/PaletteColours/menubar-background": {
"title": "$:/language/Docs/PaletteColours/menubar-background",
"text": "Menu bar background"
},
"$:/language/Docs/PaletteColours/menubar-foreground": {
"title": "$:/language/Docs/PaletteColours/menubar-foreground",
"text": "Menu bar foreground"
},
"$:/language/Docs/PaletteColours/message-background": {
"title": "$:/language/Docs/PaletteColours/message-background",
"text": "Message box background"
},
"$:/language/Docs/PaletteColours/message-border": {
"title": "$:/language/Docs/PaletteColours/message-border",
"text": "Message box border"
},
"$:/language/Docs/PaletteColours/message-foreground": {
"title": "$:/language/Docs/PaletteColours/message-foreground",
"text": "Message box foreground"
},
"$:/language/Docs/PaletteColours/modal-backdrop": {
"title": "$:/language/Docs/PaletteColours/modal-backdrop",
"text": "Modal backdrop"
},
"$:/language/Docs/PaletteColours/modal-background": {
"title": "$:/language/Docs/PaletteColours/modal-background",
"text": "Modal background"
},
"$:/language/Docs/PaletteColours/modal-border": {
"title": "$:/language/Docs/PaletteColours/modal-border",
"text": "Modal border"
},
"$:/language/Docs/PaletteColours/modal-footer-background": {
"title": "$:/language/Docs/PaletteColours/modal-footer-background",
"text": "Modal footer background"
},
"$:/language/Docs/PaletteColours/modal-footer-border": {
"title": "$:/language/Docs/PaletteColours/modal-footer-border",
"text": "Modal footer border"
},
"$:/language/Docs/PaletteColours/modal-header-border": {
"title": "$:/language/Docs/PaletteColours/modal-header-border",
"text": "Modal header border"
},
"$:/language/Docs/PaletteColours/muted-foreground": {
"title": "$:/language/Docs/PaletteColours/muted-foreground",
"text": "General muted foreground"
},
"$:/language/Docs/PaletteColours/notification-background": {
"title": "$:/language/Docs/PaletteColours/notification-background",
"text": "Notification background"
},
"$:/language/Docs/PaletteColours/notification-border": {
"title": "$:/language/Docs/PaletteColours/notification-border",
"text": "Notification border"
},
"$:/language/Docs/PaletteColours/page-background": {
"title": "$:/language/Docs/PaletteColours/page-background",
"text": "Page background"
},
"$:/language/Docs/PaletteColours/pre-background": {
"title": "$:/language/Docs/PaletteColours/pre-background",
"text": "Preformatted code background"
},
"$:/language/Docs/PaletteColours/pre-border": {
"title": "$:/language/Docs/PaletteColours/pre-border",
"text": "Preformatted code border"
},
"$:/language/Docs/PaletteColours/primary": {
"title": "$:/language/Docs/PaletteColours/primary",
"text": "General primary"
},
"$:/language/Docs/PaletteColours/select-tag-background": {
"title": "$:/language/Docs/PaletteColours/select-tag-background",
"text": "`<select>` element background"
},
"$:/language/Docs/PaletteColours/select-tag-foreground": {
"title": "$:/language/Docs/PaletteColours/select-tag-foreground",
"text": "`<select>` element text"
},
"$:/language/Docs/PaletteColours/sidebar-button-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-button-foreground",
"text": "Sidebar button foreground"
},
"$:/language/Docs/PaletteColours/sidebar-controls-foreground-hover": {
"title": "$:/language/Docs/PaletteColours/sidebar-controls-foreground-hover",
"text": "Sidebar controls foreground hover"
},
"$:/language/Docs/PaletteColours/sidebar-controls-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-controls-foreground",
"text": "Sidebar controls foreground"
},
"$:/language/Docs/PaletteColours/sidebar-foreground-shadow": {
"title": "$:/language/Docs/PaletteColours/sidebar-foreground-shadow",
"text": "Sidebar foreground shadow"
},
"$:/language/Docs/PaletteColours/sidebar-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-foreground",
"text": "Sidebar foreground"
},
"$:/language/Docs/PaletteColours/sidebar-muted-foreground-hover": {
"title": "$:/language/Docs/PaletteColours/sidebar-muted-foreground-hover",
"text": "Sidebar muted foreground hover"
},
"$:/language/Docs/PaletteColours/sidebar-muted-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-muted-foreground",
"text": "Sidebar muted foreground"
},
"$:/language/Docs/PaletteColours/sidebar-tab-background-selected": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-background-selected",
"text": "Sidebar tab background for selected tabs"
},
"$:/language/Docs/PaletteColours/sidebar-tab-background": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-background",
"text": "Sidebar tab background"
},
"$:/language/Docs/PaletteColours/sidebar-tab-border-selected": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-border-selected",
"text": "Sidebar tab border for selected tabs"
},
"$:/language/Docs/PaletteColours/sidebar-tab-border": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-border",
"text": "Sidebar tab border"
},
"$:/language/Docs/PaletteColours/sidebar-tab-divider": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-divider",
"text": "Sidebar tab divider"
},
"$:/language/Docs/PaletteColours/sidebar-tab-foreground-selected": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-foreground-selected",
"text": "Sidebar tab foreground for selected tabs"
},
"$:/language/Docs/PaletteColours/sidebar-tab-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-tab-foreground",
"text": "Sidebar tab foreground"
},
"$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground-hover": {
"title": "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground-hover",
"text": "Sidebar tiddler link foreground hover"
},
"$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground": {
"title": "$:/language/Docs/PaletteColours/sidebar-tiddler-link-foreground",
"text": "Sidebar tiddler link foreground"
},
"$:/language/Docs/PaletteColours/site-title-foreground": {
"title": "$:/language/Docs/PaletteColours/site-title-foreground",
"text": "Site title foreground"
},
"$:/language/Docs/PaletteColours/static-alert-foreground": {
"title": "$:/language/Docs/PaletteColours/static-alert-foreground",
"text": "Static alert foreground"
},
"$:/language/Docs/PaletteColours/tab-background-selected": {
"title": "$:/language/Docs/PaletteColours/tab-background-selected",
"text": "Tab background for selected tabs"
},
"$:/language/Docs/PaletteColours/tab-background": {
"title": "$:/language/Docs/PaletteColours/tab-background",
"text": "Tab background"
},
"$:/language/Docs/PaletteColours/tab-border-selected": {
"title": "$:/language/Docs/PaletteColours/tab-border-selected",
"text": "Tab border for selected tabs"
},
"$:/language/Docs/PaletteColours/tab-border": {
"title": "$:/language/Docs/PaletteColours/tab-border",
"text": "Tab border"
},
"$:/language/Docs/PaletteColours/tab-divider": {
"title": "$:/language/Docs/PaletteColours/tab-divider",
"text": "Tab divider"
},
"$:/language/Docs/PaletteColours/tab-foreground-selected": {
"title": "$:/language/Docs/PaletteColours/tab-foreground-selected",
"text": "Tab foreground for selected tabs"
},
"$:/language/Docs/PaletteColours/tab-foreground": {
"title": "$:/language/Docs/PaletteColours/tab-foreground",
"text": "Tab foreground"
},
"$:/language/Docs/PaletteColours/table-border": {
"title": "$:/language/Docs/PaletteColours/table-border",
"text": "Table border"
},
"$:/language/Docs/PaletteColours/table-footer-background": {
"title": "$:/language/Docs/PaletteColours/table-footer-background",
"text": "Table footer background"
},
"$:/language/Docs/PaletteColours/table-header-background": {
"title": "$:/language/Docs/PaletteColours/table-header-background",
"text": "Table header background"
},
"$:/language/Docs/PaletteColours/tag-background": {
"title": "$:/language/Docs/PaletteColours/tag-background",
"text": "Tag background"
},
"$:/language/Docs/PaletteColours/tag-foreground": {
"title": "$:/language/Docs/PaletteColours/tag-foreground",
"text": "Tag foreground"
},
"$:/language/Docs/PaletteColours/tiddler-background": {
"title": "$:/language/Docs/PaletteColours/tiddler-background",
"text": "Tiddler background"
},
"$:/language/Docs/PaletteColours/tiddler-border": {
"title": "$:/language/Docs/PaletteColours/tiddler-border",
"text": "Tiddler border"
},
"$:/language/Docs/PaletteColours/tiddler-controls-foreground-hover": {
"title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground-hover",
"text": "Tiddler controls foreground hover"
},
"$:/language/Docs/PaletteColours/tiddler-controls-foreground-selected": {
"title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground-selected",
"text": "Tiddler controls foreground for selected controls"
},
"$:/language/Docs/PaletteColours/tiddler-controls-foreground": {
"title": "$:/language/Docs/PaletteColours/tiddler-controls-foreground",
"text": "Tiddler controls foreground"
},
"$:/language/Docs/PaletteColours/tiddler-editor-background": {
"title": "$:/language/Docs/PaletteColours/tiddler-editor-background",
"text": "Tiddler editor background"
},
"$:/language/Docs/PaletteColours/tiddler-editor-border-image": {
"title": "$:/language/Docs/PaletteColours/tiddler-editor-border-image",
"text": "Tiddler editor border image"
},
"$:/language/Docs/PaletteColours/tiddler-editor-border": {
"title": "$:/language/Docs/PaletteColours/tiddler-editor-border",
"text": "Tiddler editor border"
},
"$:/language/Docs/PaletteColours/tiddler-editor-fields-even": {
"title": "$:/language/Docs/PaletteColours/tiddler-editor-fields-even",
"text": "Tiddler editor background for even fields"
},
"$:/language/Docs/PaletteColours/tiddler-editor-fields-odd": {
"title": "$:/language/Docs/PaletteColours/tiddler-editor-fields-odd",
"text": "Tiddler editor background for odd fields"
},
"$:/language/Docs/PaletteColours/tiddler-info-background": {
"title": "$:/language/Docs/PaletteColours/tiddler-info-background",
"text": "Tiddler info panel background"
},
"$:/language/Docs/PaletteColours/tiddler-info-border": {
"title": "$:/language/Docs/PaletteColours/tiddler-info-border",
"text": "Tiddler info panel border"
},
"$:/language/Docs/PaletteColours/tiddler-info-tab-background": {
"title": "$:/language/Docs/PaletteColours/tiddler-info-tab-background",
"text": "Tiddler info panel tab background"
},
"$:/language/Docs/PaletteColours/tiddler-link-background": {
"title": "$:/language/Docs/PaletteColours/tiddler-link-background",
"text": "Tiddler link background"
},
"$:/language/Docs/PaletteColours/tiddler-link-foreground": {
"title": "$:/language/Docs/PaletteColours/tiddler-link-foreground",
"text": "Tiddler link foreground"
},
"$:/language/Docs/PaletteColours/tiddler-subtitle-foreground": {
"title": "$:/language/Docs/PaletteColours/tiddler-subtitle-foreground",
"text": "Tiddler subtitle foreground"
},
"$:/language/Docs/PaletteColours/tiddler-title-foreground": {
"title": "$:/language/Docs/PaletteColours/tiddler-title-foreground",
"text": "Tiddler title foreground"
},
"$:/language/Docs/PaletteColours/toolbar-new-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-new-button",
"text": "Toolbar 'new tiddler' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-options-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-options-button",
"text": "Toolbar 'options' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-save-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-save-button",
"text": "Toolbar 'save' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-info-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-info-button",
"text": "Toolbar 'info' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-edit-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-edit-button",
"text": "Toolbar 'edit' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-close-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-close-button",
"text": "Toolbar 'close' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-delete-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-delete-button",
"text": "Toolbar 'delete' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-cancel-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-cancel-button",
"text": "Toolbar 'cancel' button foreground"
},
"$:/language/Docs/PaletteColours/toolbar-done-button": {
"title": "$:/language/Docs/PaletteColours/toolbar-done-button",
"text": "Toolbar 'done' button foreground"
},
"$:/language/Docs/PaletteColours/untagged-background": {
"title": "$:/language/Docs/PaletteColours/untagged-background",
"text": "Untagged pill background"
},
"$:/language/Docs/PaletteColours/very-muted-foreground": {
"title": "$:/language/Docs/PaletteColours/very-muted-foreground",
"text": "Very muted foreground"
},
"$:/language/EditTemplate/Body/External/Hint": {
"title": "$:/language/EditTemplate/Body/External/Hint",
"text": "This tiddler shows content stored outside of the main TiddlyWiki file. You can edit the tags and fields but cannot directly edit the content itself"
},
"$:/language/EditTemplate/Body/Placeholder": {
"title": "$:/language/EditTemplate/Body/Placeholder",
"text": "Type the text for this tiddler"
},
"$:/language/EditTemplate/Body/Preview/Type/Output": {
"title": "$:/language/EditTemplate/Body/Preview/Type/Output",
"text": "output"
},
"$:/language/EditTemplate/Field/Remove/Caption": {
"title": "$:/language/EditTemplate/Field/Remove/Caption",
"text": "remove field"
},
"$:/language/EditTemplate/Field/Remove/Hint": {
"title": "$:/language/EditTemplate/Field/Remove/Hint",
"text": "Remove field"
},
"$:/language/EditTemplate/Field/Dropdown/Caption": {
"title": "$:/language/EditTemplate/Field/Dropdown/Caption",
"text": "field list"
},
"$:/language/EditTemplate/Field/Dropdown/Hint": {
"title": "$:/language/EditTemplate/Field/Dropdown/Hint",
"text": "Show field list"
},
"$:/language/EditTemplate/Fields/Add/Button": {
"title": "$:/language/EditTemplate/Fields/Add/Button",
"text": "add"
},
"$:/language/EditTemplate/Fields/Add/Button/Hint": {
"title": "$:/language/EditTemplate/Fields/Add/Button/Hint",
"text": "Add the new field to the tiddler"
},
"$:/language/EditTemplate/Fields/Add/Name/Placeholder": {
"title": "$:/language/EditTemplate/Fields/Add/Name/Placeholder",
"text": "field name"
},
"$:/language/EditTemplate/Fields/Add/Prompt": {
"title": "$:/language/EditTemplate/Fields/Add/Prompt",
"text": "Add a new field:"
},
"$:/language/EditTemplate/Fields/Add/Value/Placeholder": {
"title": "$:/language/EditTemplate/Fields/Add/Value/Placeholder",
"text": "field value"
},
"$:/language/EditTemplate/Fields/Add/Dropdown/System": {
"title": "$:/language/EditTemplate/Fields/Add/Dropdown/System",
"text": "System fields"
},
"$:/language/EditTemplate/Fields/Add/Dropdown/User": {
"title": "$:/language/EditTemplate/Fields/Add/Dropdown/User",
"text": "User fields"
},
"$:/language/EditTemplate/Shadow/Warning": {
"title": "$:/language/EditTemplate/Shadow/Warning",
"text": "This is a shadow tiddler. Any changes you make will override the default version from the plugin <<pluginLink>>"
},
"$:/language/EditTemplate/Shadow/OverriddenWarning": {
"title": "$:/language/EditTemplate/Shadow/OverriddenWarning",
"text": "This is a modified shadow tiddler. You can revert to the default version in the plugin <<pluginLink>> by deleting this tiddler"
},
"$:/language/EditTemplate/Tags/Add/Button": {
"title": "$:/language/EditTemplate/Tags/Add/Button",
"text": "add"
},
"$:/language/EditTemplate/Tags/Add/Button/Hint": {
"title": "$:/language/EditTemplate/Tags/Add/Button/Hint",
"text": "add tag"
},
"$:/language/EditTemplate/Tags/Add/Placeholder": {
"title": "$:/language/EditTemplate/Tags/Add/Placeholder",
"text": "tag name"
},
"$:/language/EditTemplate/Tags/Dropdown/Caption": {
"title": "$:/language/EditTemplate/Tags/Dropdown/Caption",
"text": "tag list"
},
"$:/language/EditTemplate/Tags/Dropdown/Hint": {
"title": "$:/language/EditTemplate/Tags/Dropdown/Hint",
"text": "Show tag list"
},
"$:/language/EditTemplate/Title/BadCharacterWarning": {
"title": "$:/language/EditTemplate/Title/BadCharacterWarning",
"text": "Warning: avoid using any of the characters <<bad-chars>> in tiddler titles"
},
"$:/language/EditTemplate/Title/Exists/Prompt": {
"title": "$:/language/EditTemplate/Title/Exists/Prompt",
"text": "Target tiddler already exists"
},
"$:/language/EditTemplate/Title/Relink/Prompt": {
"title": "$:/language/EditTemplate/Title/Relink/Prompt",
"text": "Update ''<$text text=<<fromTitle>>/>'' to ''<$text text=<<toTitle>>/>'' in the //tags// and //list// fields of other tiddlers"
},
"$:/language/EditTemplate/Title/References/Prompt": {
"title": "$:/language/EditTemplate/Title/References/Prompt",
"text": "The following references to this tiddler will not be automatically updated:"
},
"$:/language/EditTemplate/Type/Dropdown/Caption": {
"title": "$:/language/EditTemplate/Type/Dropdown/Caption",
"text": "content type list"
},
"$:/language/EditTemplate/Type/Dropdown/Hint": {
"title": "$:/language/EditTemplate/Type/Dropdown/Hint",
"text": "Show content type list"
},
"$:/language/EditTemplate/Type/Delete/Caption": {
"title": "$:/language/EditTemplate/Type/Delete/Caption",
"text": "delete content type"
},
"$:/language/EditTemplate/Type/Delete/Hint": {
"title": "$:/language/EditTemplate/Type/Delete/Hint",
"text": "Delete content type"
},
"$:/language/EditTemplate/Type/Placeholder": {
"title": "$:/language/EditTemplate/Type/Placeholder",
"text": "content type"
},
"$:/language/EditTemplate/Type/Prompt": {
"title": "$:/language/EditTemplate/Type/Prompt",
"text": "Type:"
},
"$:/language/Exporters/StaticRiver": {
"title": "$:/language/Exporters/StaticRiver",
"text": "Static HTML"
},
"$:/language/Exporters/JsonFile": {
"title": "$:/language/Exporters/JsonFile",
"text": "JSON file"
},
"$:/language/Exporters/CsvFile": {
"title": "$:/language/Exporters/CsvFile",
"text": "CSV file"
},
"$:/language/Exporters/TidFile": {
"title": "$:/language/Exporters/TidFile",
"text": "\".tid\" file"
},
"$:/language/Docs/Fields/_canonical_uri": {
"title": "$:/language/Docs/Fields/_canonical_uri",
"text": "The full URI of an external image tiddler"
},
"$:/language/Docs/Fields/bag": {
"title": "$:/language/Docs/Fields/bag",
"text": "The name of the bag from which a tiddler came"
},
"$:/language/Docs/Fields/caption": {
"title": "$:/language/Docs/Fields/caption",
"text": "The text to be displayed on a tab or button"
},
"$:/language/Docs/Fields/color": {
"title": "$:/language/Docs/Fields/color",
"text": "The CSS color value associated with a tiddler"
},
"$:/language/Docs/Fields/component": {
"title": "$:/language/Docs/Fields/component",
"text": "The name of the component responsible for an [[alert tiddler|AlertMechanism]]"
},
"$:/language/Docs/Fields/current-tiddler": {
"title": "$:/language/Docs/Fields/current-tiddler",
"text": "Used to cache the top tiddler in a [[history list|HistoryMechanism]]"
},
"$:/language/Docs/Fields/created": {
"title": "$:/language/Docs/Fields/created",
"text": "The date a tiddler was created"
},
"$:/language/Docs/Fields/creator": {
"title": "$:/language/Docs/Fields/creator",
"text": "The name of the person who created a tiddler"
},
"$:/language/Docs/Fields/dependents": {
"title": "$:/language/Docs/Fields/dependents",
"text": "For a plugin, lists the dependent plugin titles"
},
"$:/language/Docs/Fields/description": {
"title": "$:/language/Docs/Fields/description",
"text": "The descriptive text for a plugin, or a modal dialogue"
},
"$:/language/Docs/Fields/draft.of": {
"title": "$:/language/Docs/Fields/draft.of",
"text": "For draft tiddlers, contains the title of the tiddler of which this is a draft"
},
"$:/language/Docs/Fields/draft.title": {
"title": "$:/language/Docs/Fields/draft.title",
"text": "For draft tiddlers, contains the proposed new title of the tiddler"
},
"$:/language/Docs/Fields/footer": {
"title": "$:/language/Docs/Fields/footer",
"text": "The footer text for a wizard"
},
"$:/language/Docs/Fields/hide-body": {
"title": "$:/language/Docs/Fields/hide-body",
"text": "The view template will hide bodies of tiddlers if set to: ''yes''"
},
"$:/language/Docs/Fields/icon": {
"title": "$:/language/Docs/Fields/icon",
"text": "The title of the tiddler containing the icon associated with a tiddler"
},
"$:/language/Docs/Fields/library": {
"title": "$:/language/Docs/Fields/library",
"text": "Indicates that a tiddler should be saved as a JavaScript library if set to: ''yes''"
},
"$:/language/Docs/Fields/list": {
"title": "$:/language/Docs/Fields/list",
"text": "An ordered list of tiddler titles associated with a tiddler"
},
"$:/language/Docs/Fields/list-before": {
"title": "$:/language/Docs/Fields/list-before",
"text": "If set, the title of a tiddler before which this tiddler should be added to the ordered list of tiddler titles, or at the start of the list if this field is present but empty"
},
"$:/language/Docs/Fields/list-after": {
"title": "$:/language/Docs/Fields/list-after",
"text": "If set, the title of the tiddler after which this tiddler should be added to the ordered list of tiddler titles, or at the end of the list if this field is present but empty"
},
"$:/language/Docs/Fields/modified": {
"title": "$:/language/Docs/Fields/modified",
"text": "The date and time at which a tiddler was last modified"
},
"$:/language/Docs/Fields/modifier": {
"title": "$:/language/Docs/Fields/modifier",
"text": "The tiddler title associated with the person who last modified a tiddler"
},
"$:/language/Docs/Fields/name": {
"title": "$:/language/Docs/Fields/name",
"text": "The human readable name associated with a plugin tiddler"
},
"$:/language/Docs/Fields/plugin-priority": {
"title": "$:/language/Docs/Fields/plugin-priority",
"text": "A numerical value indicating the priority of a plugin tiddler"
},
"$:/language/Docs/Fields/plugin-type": {
"title": "$:/language/Docs/Fields/plugin-type",
"text": "The type of plugin in a plugin tiddler"
},
"$:/language/Docs/Fields/revision": {
"title": "$:/language/Docs/Fields/revision",
"text": "The revision of the tiddler held at the server"
},
"$:/language/Docs/Fields/released": {
"title": "$:/language/Docs/Fields/released",
"text": "Date of a TiddlyWiki release"
},
"$:/language/Docs/Fields/source": {
"title": "$:/language/Docs/Fields/source",
"text": "The source URL associated with a tiddler"
},
"$:/language/Docs/Fields/subtitle": {
"title": "$:/language/Docs/Fields/subtitle",
"text": "The subtitle text for a wizard"
},
"$:/language/Docs/Fields/tags": {
"title": "$:/language/Docs/Fields/tags",
"text": "A list of tags associated with a tiddler"
},
"$:/language/Docs/Fields/text": {
"title": "$:/language/Docs/Fields/text",
"text": "The body text of a tiddler"
},
"$:/language/Docs/Fields/throttle.refresh": {
"title": "$:/language/Docs/Fields/throttle.refresh",
"text": "If present, throttles refreshes of this tiddler"
},
"$:/language/Docs/Fields/title": {
"title": "$:/language/Docs/Fields/title",
"text": "The unique name of a tiddler"
},
"$:/language/Docs/Fields/toc-link": {
"title": "$:/language/Docs/Fields/toc-link",
"text": "Suppresses the tiddler's link in a Table of Contents tree if set to: ''no''"
},
"$:/language/Docs/Fields/type": {
"title": "$:/language/Docs/Fields/type",
"text": "The content type of a tiddler"
},
"$:/language/Docs/Fields/version": {
"title": "$:/language/Docs/Fields/version",
"text": "Version information for a plugin"
},
"$:/language/Docs/Fields/_is_skinny": {
"title": "$:/language/Docs/Fields/_is_skinny",
"text": "If present, indicates that the tiddler text field must be loaded from the server"
},
"$:/language/Filters/AllTiddlers": {
"title": "$:/language/Filters/AllTiddlers",
"text": "All tiddlers except system tiddlers"
},
"$:/language/Filters/RecentSystemTiddlers": {
"title": "$:/language/Filters/RecentSystemTiddlers",
"text": "Recently modified tiddlers, including system tiddlers"
},
"$:/language/Filters/RecentTiddlers": {
"title": "$:/language/Filters/RecentTiddlers",
"text": "Recently modified tiddlers"
},
"$:/language/Filters/AllTags": {
"title": "$:/language/Filters/AllTags",
"text": "All tags except system tags"
},
"$:/language/Filters/Missing": {
"title": "$:/language/Filters/Missing",
"text": "Missing tiddlers"
},
"$:/language/Filters/Drafts": {
"title": "$:/language/Filters/Drafts",
"text": "Draft tiddlers"
},
"$:/language/Filters/Orphans": {
"title": "$:/language/Filters/Orphans",
"text": "Orphan tiddlers"
},
"$:/language/Filters/SystemTiddlers": {
"title": "$:/language/Filters/SystemTiddlers",
"text": "System tiddlers"
},
"$:/language/Filters/ShadowTiddlers": {
"title": "$:/language/Filters/ShadowTiddlers",
"text": "Shadow tiddlers"
},
"$:/language/Filters/OverriddenShadowTiddlers": {
"title": "$:/language/Filters/OverriddenShadowTiddlers",
"text": "Overridden shadow tiddlers"
},
"$:/language/Filters/SessionTiddlers": {
"title": "$:/language/Filters/SessionTiddlers",
"text": "Tiddlers modified since the wiki was loaded"
},
"$:/language/Filters/SystemTags": {
"title": "$:/language/Filters/SystemTags",
"text": "System tags"
},
"$:/language/Filters/StoryList": {
"title": "$:/language/Filters/StoryList",
"text": "Tiddlers in the story river, excluding <$text text=\"$:/AdvancedSearch\"/>"
},
"$:/language/Filters/TypedTiddlers": {
"title": "$:/language/Filters/TypedTiddlers",
"text": "Non wiki-text tiddlers"
},
"GettingStarted": {
"title": "GettingStarted",
"text": "\\define lingo-base() $:/language/ControlPanel/Basics/\nWelcome to ~TiddlyWiki and the ~TiddlyWiki community\n\nBefore you start storing important information in ~TiddlyWiki it is vital to make sure that you can reliably save changes. See https://tiddlywiki.com/#GettingStarted for details\n\n!! Set up this ~TiddlyWiki\n\n<div class=\"tc-control-panel\">\n\n|<$link to=\"$:/SiteTitle\"><<lingo Title/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteTitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/SiteSubtitle\"><<lingo Subtitle/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteSubtitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/DefaultTiddlers\"><<lingo DefaultTiddlers/Prompt>></$link> |<<lingo DefaultTiddlers/TopHint>><br> <$edit tag=\"textarea\" tiddler=\"$:/DefaultTiddlers\"/><br>//<<lingo DefaultTiddlers/BottomHint>>// |\n</div>\n\nSee the [[control panel|$:/ControlPanel]] for more options.\n"
},
"$:/language/Help/build": {
"title": "$:/language/Help/build",
"description": "Automatically run configured commands",
"text": "Build the specified build targets for the current wiki. If no build targets are specified then all available targets will be built.\n\n```\n--build <target> [<target> ...]\n```\n\nBuild targets are defined in the `tiddlywiki.info` file of a wiki folder.\n\n"
},
"$:/language/Help/clearpassword": {
"title": "$:/language/Help/clearpassword",
"description": "Clear a password for subsequent crypto operations",
"text": "Clear the password for subsequent crypto operations\n\n```\n--clearpassword\n```\n"
},
"$:/language/Help/default": {
"title": "$:/language/Help/default",
"text": "\\define commandTitle()\n$:/language/Help/$(command)$\n\\end\n```\nusage: tiddlywiki [<wikifolder>] [--<command> [<args>...]...]\n```\n\nAvailable commands:\n\n<ul>\n<$list filter=\"[commands[]sort[title]]\" variable=\"command\">\n<li><$link to=<<commandTitle>>><$macrocall $name=\"command\" $type=\"text/plain\" $output=\"text/plain\"/></$link>: <$transclude tiddler=<<commandTitle>> field=\"description\"/></li>\n</$list>\n</ul>\n\nTo get detailed help on a command:\n\n```\ntiddlywiki --help <command>\n```\n"
},
"$:/language/Help/deletetiddlers": {
"title": "$:/language/Help/deletetiddlers",
"description": "Deletes a group of tiddlers",
"text": "<<.from-version \"5.1.20\">> Deletes a group of tiddlers identified by a filter.\n\n```\n--deletetiddlers <filter>\n```\n"
},
"$:/language/Help/editions": {
"title": "$:/language/Help/editions",
"description": "Lists the available editions of TiddlyWiki",
"text": "Lists the names and descriptions of the available editions. You can create a new wiki of a specified edition with the `--init` command.\n\n```\n--editions\n```\n"
},
"$:/language/Help/fetch": {
"title": "$:/language/Help/fetch",
"description": "Fetch tiddlers from wiki by URL",
"text": "Fetch one or more files over HTTP/HTTPS, and import the tiddlers matching a filter, optionally transforming the incoming titles.\n\n```\n--fetch file <url> <import-filter> <transform-filter>\n--fetch files <url-filter> <import-filter> <transform-filter>\n--fetch raw-file <url> <transform-filter>\n--fetch raw-files <url-filter> <transform-filter>\n```\n\nThe \"file\" and \"files\" variants fetch the specified files and attempt to import the tiddlers within them (the same processing as if the files were dragged into the browser window). The \"raw-file\" and \"raw-files\" variants fetch the specified files and then store the raw file data in tiddlers, without applying the import logic.\n\nWith the \"file\" and \"raw-file\" variants only a single file is fetched and the first parameter is the URL of the file to read.\n\nWith the \"files\" and \"raw-files\" variants, multiple files are fetched and the first parameter is a filter yielding a list of URLs of the files to read. For example, given a set of tiddlers tagged \"remote-server\" that have a field \"url\" the filter `[tag[remote-server]get[url]]` will retrieve all the available URLs.\n\nFor the \"file\" and \"files\" variants, the `<import-filter>` parameter specifies a filter determining which tiddlers are imported. It defaults to `[all[tiddlers]]` if not provided.\n\nFor all variants, the `<transform-filter>` parameter specifies an optional filter that transforms the titles of the imported tiddlers. For example, `[addprefix[$:/myimports/]]` would add the prefix `$:/myimports/` to each title.\n\nPreceding the `--fetch` command with `--verbose` will output progress information during the import.\n\nNote that TiddlyWiki will not fetch an older version of an already loaded plugin.\n\nThe following example retrieves all the non-system tiddlers from https://tiddlywiki.com and saves them to a JSON file:\n\n```\ntiddlywiki --verbose --fetch file \"https://tiddlywiki.com/\" \"[!is[system]]\" \"\" --rendertiddler \"$:/core/templates/exporters/JsonFile\" output.json text/plain \"\" exportFilter \"[!is[system]]\"\n```\n\nThe following example retrieves the \"favicon\" file from tiddlywiki.com and saves it in a file called \"output.ico\". Note that the intermediate tiddler \"Icon Tiddler\" is quoted in the \"--fetch\" command because it is being used as a transformation filter to replace the default title, while there are no quotes for the \"--savetiddler\" command because it is being used directly as a title.\n\n```\ntiddlywiki --verbose --fetch raw-file \"https://tiddlywiki.com/favicon.ico\" \"[[Icon Tiddler]]\" --savetiddler \"Icon Tiddler\" output.ico\n```\n\n"
},
"$:/language/Help/help": {
"title": "$:/language/Help/help",
"description": "Display help for TiddlyWiki commands",
"text": "Displays help text for a command:\n\n```\n--help [<command>]\n```\n\nIf the command name is omitted then a list of available commands is displayed.\n"
},
"$:/language/Help/import": {
"title": "$:/language/Help/import",
"description": "Import tiddlers from a file",
"text": "Import tiddlers from TiddlyWiki (`.html`), `.tiddler`, `.tid`, `.json` or other local files. The deserializer must be explicitly specified, unlike the `load` command which infers the deserializer from the file extension.\n\n```\n--import <filepath> <deserializer> [<title>] [<encoding>]\n```\n\nThe deserializers in the core include:\n\n* application/javascript\n* application/json\n* application/x-tiddler\n* application/x-tiddler-html-div\n* application/x-tiddlers\n* text/html\n* text/plain\n\nThe title of the imported tiddler defaults to the filename.\n\nThe encoding defaults to \"utf8\", but can be \"base64\" for importing binary files.\n\nNote that TiddlyWiki will not import an older version of an already loaded plugin.\n"
},
"$:/language/Help/init": {
"title": "$:/language/Help/init",
"description": "Initialise a new wiki folder",
"text": "Initialise an empty [[WikiFolder|WikiFolders]] with a copy of the specified edition.\n\n```\n--init <edition> [<edition> ...]\n```\n\nFor example:\n\n```\ntiddlywiki ./MyWikiFolder --init empty\n```\n\nNote:\n\n* The wiki folder directory will be created if necessary\n* The \"edition\" defaults to ''empty''\n* The init command will fail if the wiki folder is not empty\n* The init command removes any `includeWikis` definitions in the edition's `tiddlywiki.info` file\n* When multiple editions are specified, editions initialised later will overwrite any files shared with earlier editions (so, the final `tiddlywiki.info` file will be copied from the last edition)\n* `--editions` returns a list of available editions\n"
},
"$:/language/Help/listen": {
"title": "$:/language/Help/listen",
"description": "Provides an HTTP server interface to TiddlyWiki",
"text": "Serves a wiki over HTTP.\n\nThe listen command uses NamedCommandParameters:\n\n```\n--listen [<name>=<value>]...\n```\n\nAll parameters are optional with safe defaults, and can be specified in any order. The recognised parameters are:\n\n* ''host'' - optional hostname to serve from (defaults to \"127.0.0.1\" aka \"localhost\")\n* ''path-prefix'' - optional prefix for paths\n* ''port'' - port number on which to listen; non-numeric values are interpreted as a system environment variable from which the port number is extracted (defaults to \"8080\")\n* ''credentials'' - pathname of credentials CSV file (relative to wiki folder)\n* ''anon-username'' - the username for signing edits for anonymous users\n* ''username'' - optional username for basic authentication\n* ''password'' - optional password for basic authentication\n* ''authenticated-user-header'' - optional name of header to be used for trusted authentication\n* ''readers'' - comma separated list of principals allowed to read from this wiki\n* ''writers'' - comma separated list of principals allowed to write to this wiki\n* ''csrf-disable'' - set to \"yes\" to disable CSRF checks (defaults to \"no\")\n* ''root-tiddler'' - the tiddler to serve at the root (defaults to \"$:/core/save/all\")\n* ''root-render-type'' - the content type to which the root tiddler should be rendered (defaults to \"text/plain\")\n* ''root-serve-type'' - the content type with which the root tiddler should be served (defaults to \"text/html\")\n* ''tls-cert'' - pathname of TLS certificate file (relative to wiki folder)\n* ''tls-key'' - pathname of TLS key file (relative to wiki folder)\n* ''debug-level'' - optional debug level; set to \"debug\" to view request details (defaults to \"none\")\n* ''gzip'' - set to \"yes\" to enable gzip compression for some http endpoints (defaults to \"no\")\n\nFor information on opening up your instance to the entire local network, and possible security concerns, see the WebServer tiddler at TiddlyWiki.com.\n\n"
},
"$:/language/Help/load": {
"title": "$:/language/Help/load",
"description": "Load tiddlers from a file",
"text": "Load tiddlers from TiddlyWiki (`.html`), `.tiddler`, `.tid`, `.json` or other local files. The processing applied to incoming files is determined by the file extension. Use the alternative `import` command if you need to specify the deserializer and encoding explicitly.\n\n```\n--load <filepath> [noerror]\n--load <dirpath> [noerror]\n```\n\nBy default, the load command raises an error if no tiddlers are found. The error can be suppressed by providing the optional \"noerror\" parameter.\n\nTo load tiddlers from an encrypted TiddlyWiki file you should first specify the password with the PasswordCommand. For example:\n\n```\ntiddlywiki ./MyWiki --password pa55w0rd --load my_encrypted_wiki.html\n```\n\nNote that TiddlyWiki will not load an older version of an already loaded plugin.\n"
},
"$:/language/Help/makelibrary": {
"title": "$:/language/Help/makelibrary",
"description": "Construct library plugin required by upgrade process",
"text": "Constructs the `$:/UpgradeLibrary` tiddler for the upgrade process.\n\nThe upgrade library is formatted as an ordinary plugin tiddler with the plugin type `library`. It contains a copy of each of the plugins, themes and language packs available within the TiddlyWiki5 repository.\n\nThis command is intended for internal use; it is only relevant to users constructing a custom upgrade procedure.\n\n```\n--makelibrary <title>\n```\n\nThe title argument defaults to `$:/UpgradeLibrary`.\n"
},
"$:/language/Help/notfound": {
"title": "$:/language/Help/notfound",
"text": "No such help item"
},
"$:/language/Help/output": {
"title": "$:/language/Help/output",
"description": "Set the base output directory for subsequent commands",
"text": "Sets the base output directory for subsequent commands. The default output directory is the `output` subdirectory of the edition directory.\n\n```\n--output <pathname>\n```\n\nIf the specified pathname is relative then it is resolved relative to the current working directory. For example `--output .` sets the output directory to the current working directory.\n\n"
},
"$:/language/Help/password": {
"title": "$:/language/Help/password",
"description": "Set a password for subsequent crypto operations",
"text": "Set a password for subsequent crypto operations\n\n```\n--password <password>\n```\n\n''Note'': This should not be used for serving TiddlyWiki with password protection. Instead, see the password option under the [[ServerCommand]].\n"
},
"$:/language/Help/render": {
"title": "$:/language/Help/render",
"description": "Renders individual tiddlers to files",
"text": "Render individual tiddlers identified by a filter and save the results to the specified files.\n\nOptionally, the title of a template tiddler can be specified. In this case, instead of directly rendering each tiddler, the template tiddler is rendered with the \"currentTiddler\" variable set to the title of the tiddler that is being rendered.\n\nA name and value for an additional variable may optionally also be specified.\n\n```\n--render <tiddler-filter> [<filename-filter>] [<render-type>] [<template>] [<name>] [<value>]\n```\n\n* ''tiddler-filter'': A filter identifying the tiddler(s) to be rendered\n* ''filename-filter'': Optional filter transforming tiddler titles into pathnames. If omitted, defaults to `[is[tiddler]addsuffix[.html]]`, which uses the unchanged tiddler title as the filename\n* ''render-type'': Optional render type: `text/html` (the default) returns the full HTML text and `text/plain` just returns the text content (ie it ignores HTML tags and other unprintable material)\n* ''template'': Optional template through which each tiddler is rendered\n* ''name'': Name of optional variable\n* ''value'': Value of optional variable\n\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nNotes:\n\n* The output directory is not cleared of any existing files\n* Any missing directories in the path to the filename are automatically created.\n* When referring to a tiddler with spaces in its title, take care to use both the quotes required by your shell and also TiddlyWiki's double square brackets : `--render \"[[Motovun Jack.jpg]]\"`\n* The filename filter is evaluated with the selected items being set to the title of the tiddler currently being rendered, allowing the title to be used as the basis for computing the filename. For example `[encodeuricomponent[]addprefix[static/]]` applies URI encoding to each title, and then adds the prefix `static/`\n* The `--render` command is a more flexible replacement for both the `--rendertiddler` and `--rendertiddlers` commands, which are deprecated\n\nExamples:\n\n* `--render \"[!is[system]]\" \"[encodeuricomponent[]addprefix[tiddlers/]addsuffix[.html]]\"` -- renders all non-system tiddlers as files in the subdirectory \"tiddlers\" with URL-encoded titles and the extension HTML\n\n"
},
"$:/language/Help/rendertiddler": {
"title": "$:/language/Help/rendertiddler",
"description": "Render an individual tiddler as a specified ContentType",
"text": "(Note: The `--rendertiddler` command is deprecated in favour of the new, more flexible `--render` command)\n\nRender an individual tiddler as a specified ContentType, defaulting to `text/html` and save it to the specified filename.\n\nOptionally the title of a template tiddler can be specified, in which case the template tiddler is rendered with the \"currentTiddler\" variable set to the tiddler that is being rendered (the first parameter value).\n\nA name and value for an additional variable may optionally also be specified.\n\n```\n--rendertiddler <title> <filename> [<type>] [<template>] [<name>] [<value>]\n```\n\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nAny missing directories in the path to the filename are automatically created.\n\nFor example, the following command saves all tiddlers matching the filter `[tag[done]]` to a JSON file titled `output.json` by employing the core template `$:/core/templates/exporters/JsonFile`.\n\n```\n--rendertiddler \"$:/core/templates/exporters/JsonFile\" output.json text/plain \"\" exportFilter \"[tag[done]]\"\n```\n"
},
"$:/language/Help/rendertiddlers": {
"title": "$:/language/Help/rendertiddlers",
"description": "Render tiddlers matching a filter to a specified ContentType",
"text": "(Note: The `--rendertiddlers` command is deprecated in favour of the new, more flexible `--render` command)\n\nRender a set of tiddlers matching a filter to separate files of a specified ContentType (defaults to `text/html`) and extension (defaults to `.html`).\n\n```\n--rendertiddlers <filter> <template> <pathname> [<type>] [<extension>] [\"noclean\"]\n```\n\nFor example:\n\n```\n--rendertiddlers [!is[system]] $:/core/templates/static.tiddler.html ./static text/plain\n```\n\nBy default, the pathname is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nAny files in the target directory are deleted unless the ''noclean'' flag is specified. The target directory is recursively created if it is missing.\n"
},
"$:/language/Help/save": {
"title": "$:/language/Help/save",
"description": "Saves individual raw tiddlers to files",
"text": "Saves individual tiddlers identified by a filter in their raw text or binary format to the specified files.\n\n```\n--save <tiddler-filter> <filename-filter>\n```\n\n* ''tiddler-filter'': A filter identifying the tiddler(s) to be saved\n* ''filename-filter'': Optional filter transforming tiddler titles into pathnames. If omitted, defaults to `[is[tiddler]]`, which uses the unchanged tiddler title as the filename\n\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nNotes:\n\n* The output directory is not cleared of any existing files\n* Any missing directories in the path to the filename are automatically created.\n* When saving a tiddler with spaces in its title, take care to use both the quotes required by your shell and also TiddlyWiki's double square brackets : `--save \"[[Motovun Jack.jpg]]\"`\n* The filename filter is evaluated with the selected items being set to the title of the tiddler currently being saved, allowing the title to be used as the basis for computing the filename. For example `[encodeuricomponent[]addprefix[static/]]` applies URI encoding to each title, and then adds the prefix `static/`\n* The `--save` command is a more flexible replacement for both the `--savetiddler` and `--savetiddlers` commands, which are deprecated\n\nExamples:\n\n* `--save \"[!is[system]is[image]]\" \"[encodeuricomponent[]addprefix[tiddlers/]]\"` -- saves all non-system image tiddlers as files in the subdirectory \"tiddlers\" with URL-encoded titles\n"
},
"$:/language/Help/savetiddler": {
"title": "$:/language/Help/savetiddler",
"description": "Saves a raw tiddler to a file",
"text": "(Note: The `--savetiddler` command is deprecated in favour of the new, more flexible `--save` command)\n\nSaves an individual tiddler in its raw text or binary format to the specified filename.\n\n```\n--savetiddler <title> <filename>\n```\n\nBy default, the filename is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nAny missing directories in the path to the filename are automatically created.\n"
},
"$:/language/Help/savetiddlers": {
"title": "$:/language/Help/savetiddlers",
"description": "Saves a group of raw tiddlers to a directory",
"text": "(Note: The `--savetiddlers` command is deprecated in favour of the new, more flexible `--save` command)\n\nSaves a group of tiddlers in their raw text or binary format to the specified directory.\n\n```\n--savetiddlers <filter> <pathname> [\"noclean\"]\n```\n\nBy default, the pathname is resolved relative to the `output` subdirectory of the edition directory. The `--output` command can be used to direct output to a different directory.\n\nThe output directory is cleared of existing files before saving the specified files. The deletion can be disabled by specifying the ''noclean'' flag.\n\nAny missing directories in the pathname are automatically created.\n"
},
"$:/language/Help/savewikifolder": {
"title": "$:/language/Help/savewikifolder",
"description": "Saves a wiki to a new wiki folder",
"text": "<<.from-version \"5.1.20\">> Saves the current wiki as a wiki folder, including tiddlers, plugins and configuration:\n\n```\n--savewikifolder <wikifolderpath> [<filter>]\n```\n\n* The target wiki folder must be empty or non-existent\n* The filter specifies which tiddlers should be included. It is optional, defaulting to `[all[tiddlers]]`\n* Plugins from the official plugin library are replaced with references to those plugins in the `tiddlywiki.info` file\n* Custom plugins are unpacked into their own folder\n\nA common usage is to convert a TiddlyWiki HTML file into a wiki folder:\n\n```\ntiddlywiki --load ./mywiki.html --savewikifolder ./mywikifolder\n```\n"
},
"$:/language/Help/server": {
"title": "$:/language/Help/server",
"description": "Provides an HTTP server interface to TiddlyWiki (deprecated in favour of the new listen command)",
"text": "Legacy command to serve a wiki over HTTP.\n\n```\n--server <port> <root-tiddler> <root-render-type> <root-serve-type> <username> <password> <host> <path-prefix> <debug-level>\n```\n\nThe parameters are:\n\n* ''port'' - port number on which to listen; non-numeric values are interpreted as a system environment variable from which the port number is extracted (defaults to \"8080\")\n* ''root-tiddler'' - the tiddler to serve at the root (defaults to \"$:/core/save/all\")\n* ''root-render-type'' - the content type to which the root tiddler should be rendered (defaults to \"text/plain\")\n* ''root-serve-type'' - the content type with which the root tiddler should be served (defaults to \"text/html\")\n* ''username'' - the default username for signing edits\n* ''password'' - optional password for basic authentication\n* ''host'' - optional hostname to serve from (defaults to \"127.0.0.1\" aka \"localhost\")\n* ''path-prefix'' - optional prefix for paths\n* ''debug-level'' - optional debug level; set to \"debug\" to view request details (defaults to \"none\")\n\nIf the password parameter is specified then the browser will prompt the user for the username and password. Note that the password is transmitted in plain text so this implementation should only be used on a trusted network or over HTTPS.\n\nFor example:\n\n```\n--server 8080 $:/core/save/all text/plain text/html MyUserName passw0rd\n```\n\nThe username and password can be specified as empty strings if you need to set the hostname or pathprefix and don't want to require a password.\n\n\n```\n--server 8080 $:/core/save/all text/plain text/html \"\" \"\" 192.168.0.245\n```\n\nUsing an address like this exposes your system to the local network. For information on opening up your instance to the entire local network, and possible security concerns, see the WebServer tiddler at TiddlyWiki.com.\n\nTo run multiple TiddlyWiki servers at the same time you'll need to put each one on a different port. It can be useful to use an environment variable to pass the port number to the Node.js process. This example references an environment variable called \"MY_PORT_NUMBER\":\n\n```\n--server MY_PORT_NUMBER $:/core/save/all text/plain text/html MyUserName passw0rd\n```\n"
},
"$:/language/Help/setfield": {
"title": "$:/language/Help/setfield",
"description": "Prepares external tiddlers for use",
"text": "//Note that this command is experimental and may change or be replaced before being finalised//\n\nSets the specified field of a group of tiddlers to the result of wikifying a template tiddler with the `currentTiddler` variable set to the tiddler.\n\n```\n--setfield <filter> <fieldname> <templatetitle> <rendertype>\n```\n\nThe parameters are:\n\n* ''filter'' - filter identifying the tiddlers to be affected\n* ''fieldname'' - the field to modify (defaults to \"text\")\n* ''templatetitle'' - the tiddler to wikify into the specified field. If blank or missing then the specified field is deleted\n* ''rendertype'' - the text type to render (defaults to \"text/plain\"; \"text/html\" can be used to include HTML tags)\n"
},
"$:/language/Help/unpackplugin": {
"title": "$:/language/Help/unpackplugin",
"description": "Unpack the payload tiddlers from a plugin",
"text": "Extract the payload tiddlers from a plugin, creating them as ordinary tiddlers:\n\n```\n--unpackplugin <title>\n```\n"
},
"$:/language/Help/verbose": {
"title": "$:/language/Help/verbose",
"description": "Triggers verbose output mode",
"text": "Triggers verbose output, useful for debugging\n\n```\n--verbose\n```\n"
},
"$:/language/Help/version": {
"title": "$:/language/Help/version",
"description": "Displays the version number of TiddlyWiki",
"text": "Displays the version number of TiddlyWiki.\n\n```\n--version\n```\n"
},
"$:/language/Import/Imported/Hint": {
"title": "$:/language/Import/Imported/Hint",
"text": "The following tiddlers were imported:"
},
"$:/language/Import/Listing/Cancel/Caption": {
"title": "$:/language/Import/Listing/Cancel/Caption",
"text": "Cancel"
},
"$:/language/Import/Listing/Hint": {
"title": "$:/language/Import/Listing/Hint",
"text": "These tiddlers are ready to import:"
},
"$:/language/Import/Listing/Import/Caption": {
"title": "$:/language/Import/Listing/Import/Caption",
"text": "Import"
},
"$:/language/Import/Listing/Select/Caption": {
"title": "$:/language/Import/Listing/Select/Caption",
"text": "Select"
},
"$:/language/Import/Listing/Status/Caption": {
"title": "$:/language/Import/Listing/Status/Caption",
"text": "Status"
},
"$:/language/Import/Listing/Title/Caption": {
"title": "$:/language/Import/Listing/Title/Caption",
"text": "Title"
},
"$:/language/Import/Listing/Preview": {
"title": "$:/language/Import/Listing/Preview",
"text": "Preview:"
},
"$:/language/Import/Listing/Preview/Text": {
"title": "$:/language/Import/Listing/Preview/Text",
"text": "Text"
},
"$:/language/Import/Listing/Preview/TextRaw": {
"title": "$:/language/Import/Listing/Preview/TextRaw",
"text": "Text (Raw)"
},
"$:/language/Import/Listing/Preview/Fields": {
"title": "$:/language/Import/Listing/Preview/Fields",
"text": "Fields"
},
"$:/language/Import/Listing/Preview/Diff": {
"title": "$:/language/Import/Listing/Preview/Diff",
"text": "Diff"
},
"$:/language/Import/Listing/Preview/DiffFields": {
"title": "$:/language/Import/Listing/Preview/DiffFields",
"text": "Diff (Fields)"
},
"$:/language/Import/Upgrader/Plugins/Suppressed/Incompatible": {
"title": "$:/language/Import/Upgrader/Plugins/Suppressed/Incompatible",
"text": "Blocked incompatible or obsolete plugin"
},
"$:/language/Import/Upgrader/Plugins/Suppressed/Version": {
"title": "$:/language/Import/Upgrader/Plugins/Suppressed/Version",
"text": "Blocked plugin (due to incoming <<incoming>> being older than existing <<existing>>)"
},
"$:/language/Import/Upgrader/Plugins/Upgraded": {
"title": "$:/language/Import/Upgrader/Plugins/Upgraded",
"text": "Upgraded plugin from <<incoming>> to <<upgraded>>"
},
"$:/language/Import/Upgrader/State/Suppressed": {
"title": "$:/language/Import/Upgrader/State/Suppressed",
"text": "Blocked temporary state tiddler"
},
"$:/language/Import/Upgrader/System/Suppressed": {
"title": "$:/language/Import/Upgrader/System/Suppressed",
"text": "Blocked system tiddler"
},
"$:/language/Import/Upgrader/System/Warning": {
"title": "$:/language/Import/Upgrader/System/Warning",
"text": "Core module tiddler"
},
"$:/language/Import/Upgrader/System/Alert": {
"title": "$:/language/Import/Upgrader/System/Alert",
"text": "You are about to import a tiddler that will overwrite a core module tiddler. This is not recommended as it may make the system unstable"
},
"$:/language/Import/Upgrader/ThemeTweaks/Created": {
"title": "$:/language/Import/Upgrader/ThemeTweaks/Created",
"text": "Migrated theme tweak from <$text text=<<from>>/>"
},
"$:/language/AboveStory/ClassicPlugin/Warning": {
"title": "$:/language/AboveStory/ClassicPlugin/Warning",
"text": "It looks like you are trying to load a plugin designed for ~TiddlyWiki Classic. Please note that [[these plugins do not work with TiddlyWiki version 5.x.x|https://tiddlywiki.com/#TiddlyWikiClassic]]. ~TiddlyWiki Classic plugins detected:"
},
"$:/language/BinaryWarning/Prompt": {
"title": "$:/language/BinaryWarning/Prompt",
"text": "This tiddler contains binary data"
},
"$:/language/ClassicWarning/Hint": {
"title": "$:/language/ClassicWarning/Hint",
"text": "This tiddler is written in TiddlyWiki Classic wiki text format, which is not fully compatible with TiddlyWiki version 5. See https://tiddlywiki.com/static/Upgrading.html for more details."
},
"$:/language/ClassicWarning/Upgrade/Caption": {
"title": "$:/language/ClassicWarning/Upgrade/Caption",
"text": "upgrade"
},
"$:/language/CloseAll/Button": {
"title": "$:/language/CloseAll/Button",
"text": "close all"
},
"$:/language/ColourPicker/Recent": {
"title": "$:/language/ColourPicker/Recent",
"text": "Recent:"
},
"$:/language/ConfirmCancelTiddler": {
"title": "$:/language/ConfirmCancelTiddler",
"text": "Do you wish to discard changes to the tiddler \"<$text text=<<title>>/>\"?"
},
"$:/language/ConfirmDeleteTiddler": {
"title": "$:/language/ConfirmDeleteTiddler",
"text": "Do you wish to delete the tiddler \"<$text text=<<title>>/>\"?"
},
"$:/language/ConfirmOverwriteTiddler": {
"title": "$:/language/ConfirmOverwriteTiddler",
"text": "Do you wish to overwrite the tiddler \"<$text text=<<title>>/>\"?"
},
"$:/language/ConfirmEditShadowTiddler": {
"title": "$:/language/ConfirmEditShadowTiddler",
"text": "You are about to edit a ShadowTiddler. Any changes will override the default system making future upgrades non-trivial. Are you sure you want to edit \"<$text text=<<title>>/>\"?"
},
"$:/language/Count": {
"title": "$:/language/Count",
"text": "count"
},
"$:/language/DefaultNewTiddlerTitle": {
"title": "$:/language/DefaultNewTiddlerTitle",
"text": "New Tiddler"
},
"$:/language/Diffs/CountMessage": {
"title": "$:/language/Diffs/CountMessage",
"text": "<<diff-count>> differences"
},
"$:/language/DropMessage": {
"title": "$:/language/DropMessage",
"text": "Drop here (or use the 'Escape' key to cancel)"
},
"$:/language/Encryption/Cancel": {
"title": "$:/language/Encryption/Cancel",
"text": "Cancel"
},
"$:/language/Encryption/ConfirmClearPassword": {
"title": "$:/language/Encryption/ConfirmClearPassword",
"text": "Do you wish to clear the password? This will remove the encryption applied when saving this wiki"
},
"$:/language/Encryption/PromptSetPassword": {
"title": "$:/language/Encryption/PromptSetPassword",
"text": "Set a new password for this TiddlyWiki"
},
"$:/language/Encryption/Username": {
"title": "$:/language/Encryption/Username",
"text": "Username"
},
"$:/language/Encryption/Password": {
"title": "$:/language/Encryption/Password",
"text": "Password"
},
"$:/language/Encryption/RepeatPassword": {
"title": "$:/language/Encryption/RepeatPassword",
"text": "Repeat password"
},
"$:/language/Encryption/PasswordNoMatch": {
"title": "$:/language/Encryption/PasswordNoMatch",
"text": "Passwords do not match"
},
"$:/language/Encryption/SetPassword": {
"title": "$:/language/Encryption/SetPassword",
"text": "Set password"
},
"$:/language/Error/Caption": {
"title": "$:/language/Error/Caption",
"text": "Error"
},
"$:/language/Error/EditConflict": {
"title": "$:/language/Error/EditConflict",
"text": "File changed on server"
},
"$:/language/Error/Filter": {
"title": "$:/language/Error/Filter",
"text": "Filter error"
},
"$:/language/Error/FilterSyntax": {
"title": "$:/language/Error/FilterSyntax",
"text": "Syntax error in filter expression"
},
"$:/language/Error/IsFilterOperator": {
"title": "$:/language/Error/IsFilterOperator",
"text": "Filter Error: Unknown operand for the 'is' filter operator"
},
"$:/language/Error/LoadingPluginLibrary": {
"title": "$:/language/Error/LoadingPluginLibrary",
"text": "Error loading plugin library"
},
"$:/language/Error/NetworkErrorAlert": {
"title": "$:/language/Error/NetworkErrorAlert",
"text": "`<h2>''Network Error''</h2>It looks like the connection to the server has been lost. This may indicate a problem with your network connection. Please attempt to restore network connectivity before continuing.<br><br>''Any unsaved changes will be automatically synchronised when connectivity is restored''.`"
},
"$:/language/Error/RecursiveTransclusion": {
"title": "$:/language/Error/RecursiveTransclusion",
"text": "Recursive transclusion error in transclude widget"
},
"$:/language/Error/RetrievingSkinny": {
"title": "$:/language/Error/RetrievingSkinny",
"text": "Error retrieving skinny tiddler list"
},
"$:/language/Error/SavingToTWEdit": {
"title": "$:/language/Error/SavingToTWEdit",
"text": "Error saving to TWEdit"
},
"$:/language/Error/WhileSaving": {
"title": "$:/language/Error/WhileSaving",
"text": "Error while saving"
},
"$:/language/Error/XMLHttpRequest": {
"title": "$:/language/Error/XMLHttpRequest",
"text": "XMLHttpRequest error code"
},
"$:/language/InternalJavaScriptError/Title": {
"title": "$:/language/InternalJavaScriptError/Title",
"text": "Internal JavaScript Error"
},
"$:/language/InternalJavaScriptError/Hint": {
"title": "$:/language/InternalJavaScriptError/Hint",
"text": "Well, this is embarrassing. It is recommended that you restart TiddlyWiki by refreshing your browser"
},
"$:/language/InvalidFieldName": {
"title": "$:/language/InvalidFieldName",
"text": "Illegal characters in field name \"<$text text=<<fieldName>>/>\". Fields can only contain lowercase letters, digits and the characters underscore (`_`), hyphen (`-`) and period (`.`)"
},
"$:/language/LazyLoadingWarning": {
"title": "$:/language/LazyLoadingWarning",
"text": "<p>Trying to load external content from ''<$text text={{!!_canonical_uri}}/>''</p><p>If this message doesn't disappear, either the tiddler content type doesn't match the type of the external content, or you may be using a browser that doesn't support external content for wikis loaded as standalone files. See https://tiddlywiki.com/#ExternalText</p>"
},
"$:/language/LoginToTiddlySpace": {
"title": "$:/language/LoginToTiddlySpace",
"text": "Login to TiddlySpace"
},
"$:/language/Manager/Controls/FilterByTag/None": {
"title": "$:/language/Manager/Controls/FilterByTag/None",
"text": "(none)"
},
"$:/language/Manager/Controls/FilterByTag/Prompt": {
"title": "$:/language/Manager/Controls/FilterByTag/Prompt",
"text": "Filter by tag:"
},
"$:/language/Manager/Controls/Order/Prompt": {
"title": "$:/language/Manager/Controls/Order/Prompt",
"text": "Reverse order"
},
"$:/language/Manager/Controls/Search/Placeholder": {
"title": "$:/language/Manager/Controls/Search/Placeholder",
"text": "Search"
},
"$:/language/Manager/Controls/Search/Prompt": {
"title": "$:/language/Manager/Controls/Search/Prompt",
"text": "Search:"
},
"$:/language/Manager/Controls/Show/Option/Tags": {
"title": "$:/language/Manager/Controls/Show/Option/Tags",
"text": "tags"
},
"$:/language/Manager/Controls/Show/Option/Tiddlers": {
"title": "$:/language/Manager/Controls/Show/Option/Tiddlers",
"text": "tiddlers"
},
"$:/language/Manager/Controls/Show/Prompt": {
"title": "$:/language/Manager/Controls/Show/Prompt",
"text": "Show:"
},
"$:/language/Manager/Controls/Sort/Prompt": {
"title": "$:/language/Manager/Controls/Sort/Prompt",
"text": "Sort by:"
},
"$:/language/Manager/Item/Colour": {
"title": "$:/language/Manager/Item/Colour",
"text": "Colour"
},
"$:/language/Manager/Item/Fields": {
"title": "$:/language/Manager/Item/Fields",
"text": "Fields"
},
"$:/language/Manager/Item/Icon/None": {
"title": "$:/language/Manager/Item/Icon/None",
"text": "(none)"
},
"$:/language/Manager/Item/Icon": {
"title": "$:/language/Manager/Item/Icon",
"text": "Icon"
},
"$:/language/Manager/Item/RawText": {
"title": "$:/language/Manager/Item/RawText",
"text": "Raw text"
},
"$:/language/Manager/Item/Tags": {
"title": "$:/language/Manager/Item/Tags",
"text": "Tags"
},
"$:/language/Manager/Item/Tools": {
"title": "$:/language/Manager/Item/Tools",
"text": "Tools"
},
"$:/language/Manager/Item/WikifiedText": {
"title": "$:/language/Manager/Item/WikifiedText",
"text": "Wikified text"
},
"$:/language/MissingTiddler/Hint": {
"title": "$:/language/MissingTiddler/Hint",
"text": "Missing tiddler \"<$text text=<<currentTiddler>>/>\" -- click {{||$:/core/ui/Buttons/edit}} to create"
},
"$:/language/No": {
"title": "$:/language/No",
"text": "No"
},
"$:/language/OfficialPluginLibrary": {
"title": "$:/language/OfficialPluginLibrary",
"text": "Official ~TiddlyWiki Plugin Library"
},
"$:/language/OfficialPluginLibrary/Hint": {
"title": "$:/language/OfficialPluginLibrary/Hint",
"text": "The official ~TiddlyWiki plugin library at tiddlywiki.com. Plugins, themes and language packs are maintained by the core team."
},
"$:/language/PluginReloadWarning": {
"title": "$:/language/PluginReloadWarning",
"text": "Please save {{$:/core/ui/Buttons/save-wiki}} and reload {{$:/core/ui/Buttons/refresh}} to allow changes to ~JavaScript plugins to take effect"
},
"$:/language/RecentChanges/DateFormat": {
"title": "$:/language/RecentChanges/DateFormat",
"text": "DDth MMM YYYY"
},
"$:/language/SystemTiddler/Tooltip": {
"title": "$:/language/SystemTiddler/Tooltip",
"text": "This is a system tiddler"
},
"$:/language/SystemTiddlers/Include/Prompt": {
"title": "$:/language/SystemTiddlers/Include/Prompt",
"text": "Include system tiddlers"
},
"$:/language/TagManager/Colour/Heading": {
"title": "$:/language/TagManager/Colour/Heading",
"text": "Colour"
},
"$:/language/TagManager/Count/Heading": {
"title": "$:/language/TagManager/Count/Heading",
"text": "Count"
},
"$:/language/TagManager/Icon/Heading": {
"title": "$:/language/TagManager/Icon/Heading",
"text": "Icon"
},
"$:/language/TagManager/Icons/None": {
"title": "$:/language/TagManager/Icons/None",
"text": "None"
},
"$:/language/TagManager/Info/Heading": {
"title": "$:/language/TagManager/Info/Heading",
"text": "Info"
},
"$:/language/TagManager/Tag/Heading": {
"title": "$:/language/TagManager/Tag/Heading",
"text": "Tag"
},
"$:/language/Tiddler/DateFormat": {
"title": "$:/language/Tiddler/DateFormat",
"text": "DDth MMM YYYY at hh12:0mmam"
},
"$:/language/UnsavedChangesWarning": {
"title": "$:/language/UnsavedChangesWarning",
"text": "You have unsaved changes in TiddlyWiki"
},
"$:/language/Yes": {
"title": "$:/language/Yes",
"text": "Yes"
},
"$:/language/Modals/Download": {
"title": "$:/language/Modals/Download",
"subtitle": "Download changes",
"footer": "<$button message=\"tm-close-tiddler\">Close</$button>",
"help": "https://tiddlywiki.com/static/DownloadingChanges.html",
"text": "Your browser only supports manual saving.\n\nTo save your modified wiki, right click on the download link below and select \"Download file\" or \"Save file\", and then choose the folder and filename.\n\n//You can marginally speed things up by clicking the link with the control key (Windows) or the options/alt key (Mac OS X). You will not be prompted for the folder or filename, but your browser is likely to give it an unrecognisable name -- you may need to rename the file to include an `.html` extension before you can do anything useful with it.//\n\nOn smartphones that do not allow files to be downloaded you can instead bookmark the link, and then sync your bookmarks to a desktop computer from where the wiki can be saved normally.\n"
},
"$:/language/Modals/SaveInstructions": {
"title": "$:/language/Modals/SaveInstructions",
"subtitle": "Save your work",
"footer": "<$button message=\"tm-close-tiddler\">Close</$button>",
"help": "https://tiddlywiki.com/static/SavingChanges.html",
"text": "Your changes to this wiki need to be saved as a ~TiddlyWiki HTML file.\n\n!!! Desktop browsers\n\n# Select ''Save As'' from the ''File'' menu\n# Choose a filename and location\n#* Some browsers also require you to explicitly specify the file saving format as ''Webpage, HTML only'' or similar\n# Close this tab\n\n!!! Smartphone browsers\n\n# Create a bookmark to this page\n#* If you've got iCloud or Google Sync set up then the bookmark will automatically sync to your desktop where you can open it and save it as above\n# Close this tab\n\n//If you open the bookmark again in Mobile Safari you will see this message again. If you want to go ahead and use the file, just click the ''close'' button below//\n"
},
"$:/config/NewJournal/Title": {
"title": "$:/config/NewJournal/Title",
"text": "DDth MMM YYYY"
},
"$:/config/NewJournal/Text": {
"title": "$:/config/NewJournal/Text",
"text": ""
},
"$:/config/NewJournal/Tags": {
"title": "$:/config/NewJournal/Tags",
"tags": "Journal"
},
"$:/language/Notifications/Save/Done": {
"title": "$:/language/Notifications/Save/Done",
"text": "Saved wiki"
},
"$:/language/Notifications/Save/Starting": {
"title": "$:/language/Notifications/Save/Starting",
"text": "Starting to save wiki"
},
"$:/language/Notifications/CopiedToClipboard/Succeeded": {
"title": "$:/language/Notifications/CopiedToClipboard/Succeeded",
"text": "Copied to clipboard!"
},
"$:/language/Notifications/CopiedToClipboard/Failed": {
"title": "$:/language/Notifications/CopiedToClipboard/Failed",
"text": "Failed to copy to clipboard!"
},
"$:/language/Search/DefaultResults/Caption": {
"title": "$:/language/Search/DefaultResults/Caption",
"text": "List"
},
"$:/language/Search/Filter/Caption": {
"title": "$:/language/Search/Filter/Caption",
"text": "Filter"
},
"$:/language/Search/Filter/Hint": {
"title": "$:/language/Search/Filter/Hint",
"text": "Search via a [[filter expression|https://tiddlywiki.com/static/Filters.html]]"
},
"$:/language/Search/Filter/Matches": {
"title": "$:/language/Search/Filter/Matches",
"text": "//<small><<resultCount>> matches</small>//"
},
"$:/language/Search/Matches": {
"title": "$:/language/Search/Matches",
"text": "//<small><<resultCount>> matches</small>//"
},
"$:/language/Search/Matches/All": {
"title": "$:/language/Search/Matches/All",
"text": "All matches:"
},
"$:/language/Search/Matches/Title": {
"title": "$:/language/Search/Matches/Title",
"text": "Title matches:"
},
"$:/language/Search/Search": {
"title": "$:/language/Search/Search",
"text": "Search"
},
"$:/language/Search/Search/TooShort": {
"title": "$:/language/Search/Search/TooShort",
"text": "Search text too short"
},
"$:/language/Search/Shadows/Caption": {
"title": "$:/language/Search/Shadows/Caption",
"text": "Shadows"
},
"$:/language/Search/Shadows/Hint": {
"title": "$:/language/Search/Shadows/Hint",
"text": "Search for shadow tiddlers"
},
"$:/language/Search/Shadows/Matches": {
"title": "$:/language/Search/Shadows/Matches",
"text": "//<small><<resultCount>> matches</small>//"
},
"$:/language/Search/Standard/Caption": {
"title": "$:/language/Search/Standard/Caption",
"text": "Standard"
},
"$:/language/Search/Standard/Hint": {
"title": "$:/language/Search/Standard/Hint",
"text": "Search for standard tiddlers"
},
"$:/language/Search/Standard/Matches": {
"title": "$:/language/Search/Standard/Matches",
"text": "//<small><<resultCount>> matches</small>//"
},
"$:/language/Search/System/Caption": {
"title": "$:/language/Search/System/Caption",
"text": "System"
},
"$:/language/Search/System/Hint": {
"title": "$:/language/Search/System/Hint",
"text": "Search for system tiddlers"
},
"$:/language/Search/System/Matches": {
"title": "$:/language/Search/System/Matches",
"text": "//<small><<resultCount>> matches</small>//"
},
"$:/language/SideBar/All/Caption": {
"title": "$:/language/SideBar/All/Caption",
"text": "All"
},
"$:/language/SideBar/Contents/Caption": {
"title": "$:/language/SideBar/Contents/Caption",
"text": "Contents"
},
"$:/language/SideBar/Drafts/Caption": {
"title": "$:/language/SideBar/Drafts/Caption",
"text": "Drafts"
},
"$:/language/SideBar/Explorer/Caption": {
"title": "$:/language/SideBar/Explorer/Caption",
"text": "Explorer"
},
"$:/language/SideBar/Missing/Caption": {
"title": "$:/language/SideBar/Missing/Caption",
"text": "Missing"
},
"$:/language/SideBar/More/Caption": {
"title": "$:/language/SideBar/More/Caption",
"text": "More"
},
"$:/language/SideBar/Open/Caption": {
"title": "$:/language/SideBar/Open/Caption",
"text": "Open"
},
"$:/language/SideBar/Orphans/Caption": {
"title": "$:/language/SideBar/Orphans/Caption",
"text": "Orphans"
},
"$:/language/SideBar/Recent/Caption": {
"title": "$:/language/SideBar/Recent/Caption",
"text": "Recent"
},
"$:/language/SideBar/Shadows/Caption": {
"title": "$:/language/SideBar/Shadows/Caption",
"text": "Shadows"
},
"$:/language/SideBar/System/Caption": {
"title": "$:/language/SideBar/System/Caption",
"text": "System"
},
"$:/language/SideBar/Tags/Caption": {
"title": "$:/language/SideBar/Tags/Caption",
"text": "Tags"
},
"$:/language/SideBar/Tags/Untagged/Caption": {
"title": "$:/language/SideBar/Tags/Untagged/Caption",
"text": "untagged"
},
"$:/language/SideBar/Tools/Caption": {
"title": "$:/language/SideBar/Tools/Caption",
"text": "Tools"
},
"$:/language/SideBar/Types/Caption": {
"title": "$:/language/SideBar/Types/Caption",
"text": "Types"
},
"$:/SiteSubtitle": {
"title": "$:/SiteSubtitle",
"text": "a non-linear personal web notebook"
},
"$:/SiteTitle": {
"title": "$:/SiteTitle",
"text": "My ~TiddlyWiki"
},
"$:/language/Snippets/ListByTag": {
"title": "$:/language/Snippets/ListByTag",
"tags": "$:/tags/TextEditor/Snippet",
"caption": "List of tiddlers by tag",
"text": "<<list-links \"[tag[task]sort[title]]\">>\n"
},
"$:/language/Snippets/MacroDefinition": {
"title": "$:/language/Snippets/MacroDefinition",
"tags": "$:/tags/TextEditor/Snippet",
"caption": "Macro definition",
"text": "\\define macroName(param1:\"default value\",param2)\nText of the macro\n\\end\n"
},
"$:/language/Snippets/Table4x3": {
"title": "$:/language/Snippets/Table4x3",
"tags": "$:/tags/TextEditor/Snippet",
"caption": "Table with 4 columns by 3 rows",
"text": "|! |!Alpha |!Beta |!Gamma |!Delta |\n|!One | | | | |\n|!Two | | | | |\n|!Three | | | | |\n"
},
"$:/language/Snippets/TableOfContents": {
"title": "$:/language/Snippets/TableOfContents",
"tags": "$:/tags/TextEditor/Snippet",
"caption": "Table of Contents",
"text": "<div class=\"tc-table-of-contents\">\n\n<<toc-selective-expandable 'TableOfContents'>>\n\n</div>"
},
"$:/language/ThemeTweaks/ThemeTweaks": {
"title": "$:/language/ThemeTweaks/ThemeTweaks",
"text": "Theme Tweaks"
},
"$:/language/ThemeTweaks/ThemeTweaks/Hint": {
"title": "$:/language/ThemeTweaks/ThemeTweaks/Hint",
"text": "You can tweak certain aspects of the ''Vanilla'' theme."
},
"$:/language/ThemeTweaks/Options": {
"title": "$:/language/ThemeTweaks/Options",
"text": "Options"
},
"$:/language/ThemeTweaks/Options/SidebarLayout": {
"title": "$:/language/ThemeTweaks/Options/SidebarLayout",
"text": "Sidebar layout"
},
"$:/language/ThemeTweaks/Options/SidebarLayout/Fixed-Fluid": {
"title": "$:/language/ThemeTweaks/Options/SidebarLayout/Fixed-Fluid",
"text": "Fixed story, fluid sidebar"
},
"$:/language/ThemeTweaks/Options/SidebarLayout/Fluid-Fixed": {
"title": "$:/language/ThemeTweaks/Options/SidebarLayout/Fluid-Fixed",
"text": "Fluid story, fixed sidebar"
},
"$:/language/ThemeTweaks/Options/StickyTitles": {
"title": "$:/language/ThemeTweaks/Options/StickyTitles",
"text": "Sticky titles"
},
"$:/language/ThemeTweaks/Options/StickyTitles/Hint": {
"title": "$:/language/ThemeTweaks/Options/StickyTitles/Hint",
"text": "Causes tiddler titles to \"stick\" to the top of the browser window"
},
"$:/language/ThemeTweaks/Options/CodeWrapping": {
"title": "$:/language/ThemeTweaks/Options/CodeWrapping",
"text": "Wrap long lines in code blocks"
},
"$:/language/ThemeTweaks/Settings": {
"title": "$:/language/ThemeTweaks/Settings",
"text": "Settings"
},
"$:/language/ThemeTweaks/Settings/FontFamily": {
"title": "$:/language/ThemeTweaks/Settings/FontFamily",
"text": "Font family"
},
"$:/language/ThemeTweaks/Settings/CodeFontFamily": {
"title": "$:/language/ThemeTweaks/Settings/CodeFontFamily",
"text": "Code font family"
},
"$:/language/ThemeTweaks/Settings/EditorFontFamily": {
"title": "$:/language/ThemeTweaks/Settings/EditorFontFamily",
"text": "Editor font family"
},
"$:/language/ThemeTweaks/Settings/BackgroundImage": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImage",
"text": "Page background image"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageAttachment": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment",
"text": "Page background image attachment"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Scroll": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Scroll",
"text": "Scroll with tiddlers"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Fixed": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageAttachment/Fixed",
"text": "Fixed to window"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageSize": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize",
"text": "Page background image size"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageSize/Auto": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Auto",
"text": "Auto"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageSize/Cover": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Cover",
"text": "Cover"
},
"$:/language/ThemeTweaks/Settings/BackgroundImageSize/Contain": {
"title": "$:/language/ThemeTweaks/Settings/BackgroundImageSize/Contain",
"text": "Contain"
},
"$:/language/ThemeTweaks/Metrics": {
"title": "$:/language/ThemeTweaks/Metrics",
"text": "Sizes"
},
"$:/language/ThemeTweaks/Metrics/FontSize": {
"title": "$:/language/ThemeTweaks/Metrics/FontSize",
"text": "Font size"
},
"$:/language/ThemeTweaks/Metrics/LineHeight": {
"title": "$:/language/ThemeTweaks/Metrics/LineHeight",
"text": "Line height"
},
"$:/language/ThemeTweaks/Metrics/BodyFontSize": {
"title": "$:/language/ThemeTweaks/Metrics/BodyFontSize",
"text": "Font size for tiddler body"
},
"$:/language/ThemeTweaks/Metrics/BodyLineHeight": {
"title": "$:/language/ThemeTweaks/Metrics/BodyLineHeight",
"text": "Line height for tiddler body"
},
"$:/language/ThemeTweaks/Metrics/StoryLeft": {
"title": "$:/language/ThemeTweaks/Metrics/StoryLeft",
"text": "Story left position"
},
"$:/language/ThemeTweaks/Metrics/StoryLeft/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/StoryLeft/Hint",
"text": "how far the left margin of the story river<br>(tiddler area) is from the left of the page"
},
"$:/language/ThemeTweaks/Metrics/StoryTop": {
"title": "$:/language/ThemeTweaks/Metrics/StoryTop",
"text": "Story top position"
},
"$:/language/ThemeTweaks/Metrics/StoryTop/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/StoryTop/Hint",
"text": "how far the top margin of the story river<br>is from the top of the page"
},
"$:/language/ThemeTweaks/Metrics/StoryRight": {
"title": "$:/language/ThemeTweaks/Metrics/StoryRight",
"text": "Story right"
},
"$:/language/ThemeTweaks/Metrics/StoryRight/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/StoryRight/Hint",
"text": "how far the left margin of the sidebar <br>is from the left of the page"
},
"$:/language/ThemeTweaks/Metrics/StoryWidth": {
"title": "$:/language/ThemeTweaks/Metrics/StoryWidth",
"text": "Story width"
},
"$:/language/ThemeTweaks/Metrics/StoryWidth/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/StoryWidth/Hint",
"text": "the overall width of the story river"
},
"$:/language/ThemeTweaks/Metrics/TiddlerWidth": {
"title": "$:/language/ThemeTweaks/Metrics/TiddlerWidth",
"text": "Tiddler width"
},
"$:/language/ThemeTweaks/Metrics/TiddlerWidth/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/TiddlerWidth/Hint",
"text": "within the story river"
},
"$:/language/ThemeTweaks/Metrics/SidebarBreakpoint": {
"title": "$:/language/ThemeTweaks/Metrics/SidebarBreakpoint",
"text": "Sidebar breakpoint"
},
"$:/language/ThemeTweaks/Metrics/SidebarBreakpoint/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/SidebarBreakpoint/Hint",
"text": "the minimum page width at which the story<br>river and sidebar will appear side by side"
},
"$:/language/ThemeTweaks/Metrics/SidebarWidth": {
"title": "$:/language/ThemeTweaks/Metrics/SidebarWidth",
"text": "Sidebar width"
},
"$:/language/ThemeTweaks/Metrics/SidebarWidth/Hint": {
"title": "$:/language/ThemeTweaks/Metrics/SidebarWidth/Hint",
"text": "the width of the sidebar in fluid-fixed layout"
},
"$:/language/TiddlerInfo/Advanced/Caption": {
"title": "$:/language/TiddlerInfo/Advanced/Caption",
"text": "Advanced"
},
"$:/language/TiddlerInfo/Advanced/PluginInfo/Empty/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Empty/Hint",
"text": "none"
},
"$:/language/TiddlerInfo/Advanced/PluginInfo/Heading": {
"title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Heading",
"text": "Plugin Details"
},
"$:/language/TiddlerInfo/Advanced/PluginInfo/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/PluginInfo/Hint",
"text": "This plugin contains the following shadow tiddlers:"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/Heading": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Heading",
"text": "Shadow Status"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/NotShadow/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/NotShadow/Hint",
"text": "The tiddler <$link to=<<infoTiddler>>><$text text=<<infoTiddler>>/></$link> is not a shadow tiddler"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Hint",
"text": "The tiddler <$link to=<<infoTiddler>>><$text text=<<infoTiddler>>/></$link> is a shadow tiddler"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Source": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/Shadow/Source",
"text": "It is defined in the plugin <$link to=<<pluginTiddler>>><$text text=<<pluginTiddler>>/></$link>"
},
"$:/language/TiddlerInfo/Advanced/ShadowInfo/OverriddenShadow/Hint": {
"title": "$:/language/TiddlerInfo/Advanced/ShadowInfo/OverriddenShadow/Hint",
"text": "It is overridden by an ordinary tiddler"
},
"$:/language/TiddlerInfo/Fields/Caption": {
"title": "$:/language/TiddlerInfo/Fields/Caption",
"text": "Fields"
},
"$:/language/TiddlerInfo/List/Caption": {
"title": "$:/language/TiddlerInfo/List/Caption",
"text": "List"
},
"$:/language/TiddlerInfo/List/Empty": {
"title": "$:/language/TiddlerInfo/List/Empty",
"text": "This tiddler does not have a list"
},
"$:/language/TiddlerInfo/Listed/Caption": {
"title": "$:/language/TiddlerInfo/Listed/Caption",
"text": "Listed"
},
"$:/language/TiddlerInfo/Listed/Empty": {
"title": "$:/language/TiddlerInfo/Listed/Empty",
"text": "This tiddler is not listed by any others"
},
"$:/language/TiddlerInfo/References/Caption": {
"title": "$:/language/TiddlerInfo/References/Caption",
"text": "References"
},
"$:/language/TiddlerInfo/References/Empty": {
"title": "$:/language/TiddlerInfo/References/Empty",
"text": "No tiddlers link to this one"
},
"$:/language/TiddlerInfo/Tagging/Caption": {
"title": "$:/language/TiddlerInfo/Tagging/Caption",
"text": "Tagging"
},
"$:/language/TiddlerInfo/Tagging/Empty": {
"title": "$:/language/TiddlerInfo/Tagging/Empty",
"text": "No tiddlers are tagged with this one"
},
"$:/language/TiddlerInfo/Tools/Caption": {
"title": "$:/language/TiddlerInfo/Tools/Caption",
"text": "Tools"
},
"$:/language/Docs/Types/application/javascript": {
"title": "$:/language/Docs/Types/application/javascript",
"description": "JavaScript code",
"name": "application/javascript",
"group": "Developer",
"group-sort": "2"
},
"$:/language/Docs/Types/application/json": {
"title": "$:/language/Docs/Types/application/json",
"description": "JSON data",
"name": "application/json",
"group": "Developer",
"group-sort": "2"
},
"$:/language/Docs/Types/application/x-tiddler-dictionary": {
"title": "$:/language/Docs/Types/application/x-tiddler-dictionary",
"description": "Data dictionary",
"name": "application/x-tiddler-dictionary",
"group": "Developer",
"group-sort": "2"
},
"$:/language/Docs/Types/image/gif": {
"title": "$:/language/Docs/Types/image/gif",
"description": "GIF image",
"name": "image/gif",
"group": "Image",
"group-sort": "1"
},
"$:/language/Docs/Types/image/jpeg": {
"title": "$:/language/Docs/Types/image/jpeg",
"description": "JPEG image",
"name": "image/jpeg",
"group": "Image",
"group-sort": "1"
},
"$:/language/Docs/Types/image/png": {
"title": "$:/language/Docs/Types/image/png",
"description": "PNG image",
"name": "image/png",
"group": "Image",
"group-sort": "1"
},
"$:/language/Docs/Types/image/svg+xml": {
"title": "$:/language/Docs/Types/image/svg+xml",
"description": "Structured Vector Graphics image",
"name": "image/svg+xml",
"group": "Image",
"group-sort": "1"
},
"$:/language/Docs/Types/image/x-icon": {
"title": "$:/language/Docs/Types/image/x-icon",
"description": "ICO format icon file",
"name": "image/x-icon",
"group": "Image",
"group-sort": "1"
},
"$:/language/Docs/Types/text/css": {
"title": "$:/language/Docs/Types/text/css",
"description": "Static stylesheet",
"name": "text/css",
"group": "Developer",
"group-sort": "2"
},
"$:/language/Docs/Types/text/html": {
"title": "$:/language/Docs/Types/text/html",
"description": "HTML markup",
"name": "text/html",
"group": "Text",
"group-sort": "0"
},
"$:/language/Docs/Types/text/plain": {
"title": "$:/language/Docs/Types/text/plain",
"description": "Plain text",
"name": "text/plain",
"group": "Text",
"group-sort": "0"
},
"$:/language/Docs/Types/text/vnd.tiddlywiki": {
"title": "$:/language/Docs/Types/text/vnd.tiddlywiki",
"description": "TiddlyWiki 5",
"name": "text/vnd.tiddlywiki",
"group": "Text",
"group-sort": "0"
},
"$:/language/Docs/Types/text/x-tiddlywiki": {
"title": "$:/language/Docs/Types/text/x-tiddlywiki",
"description": "TiddlyWiki Classic",
"name": "text/x-tiddlywiki",
"group": "Text",
"group-sort": "0"
},
"$:/languages/en-GB/icon": {
"title": "$:/languages/en-GB/icon",
"type": "image/svg+xml",
"text": "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 60 30\" width=\"1200\" height=\"600\">\n<clipPath id=\"t\">\n\t<path d=\"M30,15 h30 v15 z v15 h-30 z h-30 v-15 z v-15 h30 z\"/>\n</clipPath>\n<path d=\"M0,0 v30 h60 v-30 z\" fill=\"#00247d\"/>\n<path d=\"M0,0 L60,30 M60,0 L0,30\" stroke=\"#fff\" stroke-width=\"6\"/>\n<path d=\"M0,0 L60,30 M60,0 L0,30\" clip-path=\"url(#t)\" stroke=\"#cf142b\" stroke-width=\"4\"/>\n<path d=\"M30,0 v30 M0,15 h60\" stroke=\"#fff\" stroke-width=\"10\"/>\n<path d=\"M30,0 v30 M0,15 h60\" stroke=\"#cf142b\" stroke-width=\"6\"/>\n</svg>\n"
},
"$:/languages/en-GB": {
"title": "$:/languages/en-GB",
"name": "en-GB",
"description": "English (British)",
"author": "JeremyRuston",
"core-version": ">=5.0.0\"",
"text": "Stub pseudo-plugin for the default language"
},
"$:/core/modules/commander.js": {
"title": "$:/core/modules/commander.js",
"text": "/*\\\ntitle: $:/core/modules/commander.js\ntype: application/javascript\nmodule-type: global\n\nThe $tw.Commander class is a command interpreter\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nParse a sequence of commands\n\tcommandTokens: an array of command string tokens\n\twiki: reference to the wiki store object\n\tstreams: {output:, error:}, each of which has a write(string) method\n\tcallback: a callback invoked as callback(err) where err is null if there was no error\n*/\nvar Commander = function(commandTokens,callback,wiki,streams) {\n\tvar path = require(\"path\");\n\tthis.commandTokens = commandTokens;\n\tthis.nextToken = 0;\n\tthis.callback = callback;\n\tthis.wiki = wiki;\n\tthis.streams = streams;\n\tthis.outputPath = path.resolve($tw.boot.wikiPath,$tw.config.wikiOutputSubDir);\n};\n\n/*\nLog a string if verbose flag is set\n*/\nCommander.prototype.log = function(str) {\n\tif(this.verbose) {\n\t\tthis.streams.output.write(str + \"\\n\");\n\t}\n};\n\n/*\nWrite a string if verbose flag is set\n*/\nCommander.prototype.write = function(str) {\n\tif(this.verbose) {\n\t\tthis.streams.output.write(str);\n\t}\n};\n\n/*\nAdd a string of tokens to the command queue\n*/\nCommander.prototype.addCommandTokens = function(commandTokens) {\n\tvar params = commandTokens.slice(0);\n\tparams.unshift(0);\n\tparams.unshift(this.nextToken);\n\tArray.prototype.splice.apply(this.commandTokens,params);\n};\n\n/*\nExecute the sequence of commands and invoke a callback on completion\n*/\nCommander.prototype.execute = function() {\n\tthis.executeNextCommand();\n};\n\n/*\nExecute the next command in the sequence\n*/\nCommander.prototype.executeNextCommand = function() {\n\tvar self = this;\n\t// Invoke the callback if there are no more commands\n\tif(this.nextToken >= this.commandTokens.length) {\n\t\tthis.callback(null);\n\t} else {\n\t\t// Get and check the command token\n\t\tvar commandName = this.commandTokens[this.nextToken++];\n\t\tif(commandName.substr(0,2) !== \"--\") {\n\t\t\tthis.callback(\"Missing command: \" + commandName);\n\t\t} else {\n\t\t\tcommandName = commandName.substr(2); // Trim off the --\n\t\t\t// Accumulate the parameters to the command\n\t\t\tvar params = [];\n\t\t\twhile(this.nextToken < this.commandTokens.length && \n\t\t\t\tthis.commandTokens[this.nextToken].substr(0,2) !== \"--\") {\n\t\t\t\tparams.push(this.commandTokens[this.nextToken++]);\n\t\t\t}\n\t\t\t// Get the command info\n\t\t\tvar command = $tw.commands[commandName],\n\t\t\t\tc,err;\n\t\t\tif(!command) {\n\t\t\t\tthis.callback(\"Unknown command: \" + commandName);\n\t\t\t} else {\n\t\t\t\tif(this.verbose) {\n\t\t\t\t\tthis.streams.output.write(\"Executing command: \" + commandName + \" \" + params.join(\" \") + \"\\n\");\n\t\t\t\t}\n\t\t\t\t// Parse named parameters if required\n\t\t\t\tif(command.info.namedParameterMode) {\n\t\t\t\t\tparams = this.extractNamedParameters(params,command.info.mandatoryParameters);\n\t\t\t\t\tif(typeof params === \"string\") {\n\t\t\t\t\t\treturn this.callback(params);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(command.info.synchronous) {\n\t\t\t\t\t// Synchronous command\n\t\t\t\t\tc = new command.Command(params,this);\n\t\t\t\t\terr = c.execute();\n\t\t\t\t\tif(err) {\n\t\t\t\t\t\tthis.callback(err);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.executeNextCommand();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Asynchronous command\n\t\t\t\t\tc = new command.Command(params,this,function(err) {\n\t\t\t\t\t\tif(err) {\n\t\t\t\t\t\t\tself.callback(err);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tself.executeNextCommand();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\terr = c.execute();\n\t\t\t\t\tif(err) {\n\t\t\t\t\t\tthis.callback(err);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n/*\nGiven an array of parameter strings `params` in name:value format, and an array of mandatory parameter names in `mandatoryParameters`, returns a hashmap of values or a string if error\n*/\nCommander.prototype.extractNamedParameters = function(params,mandatoryParameters) {\n\tmandatoryParameters = mandatoryParameters || [];\n\tvar errors = [],\n\t\tparamsByName = Object.create(null);\n\t// Extract the parameters\n\t$tw.utils.each(params,function(param) {\n\t\tvar index = param.indexOf(\"=\");\n\t\tif(index < 1) {\n\t\t\terrors.push(\"malformed named parameter: '\" + param + \"'\");\n\t\t}\n\t\tparamsByName[param.slice(0,index)] = $tw.utils.trim(param.slice(index+1));\n\t});\n\t// Check the mandatory parameters are present\n\t$tw.utils.each(mandatoryParameters,function(mandatoryParameter) {\n\t\tif(!$tw.utils.hop(paramsByName,mandatoryParameter)) {\n\t\t\terrors.push(\"missing mandatory parameter: '\" + mandatoryParameter + \"'\");\n\t\t}\n\t});\n\t// Return any errors\n\tif(errors.length > 0) {\n\t\treturn errors.join(\" and\\n\");\n\t} else {\n\t\treturn paramsByName;\t\t\n\t}\n};\n\nCommander.initCommands = function(moduleType) {\n\tmoduleType = moduleType || \"command\";\n\t$tw.commands = {};\n\t$tw.modules.forEachModuleOfType(moduleType,function(title,module) {\n\t\tvar c = $tw.commands[module.info.name] = {};\n\t\t// Add the methods defined by the module\n\t\tfor(var f in module) {\n\t\t\tif($tw.utils.hop(module,f)) {\n\t\t\t\tc[f] = module[f];\n\t\t\t}\n\t\t}\n\t});\n};\n\nexports.Commander = Commander;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/commands/build.js": {
"title": "$:/core/modules/commands/build.js",
"text": "/*\\\ntitle: $:/core/modules/commands/build.js\ntype: application/javascript\nmodule-type: command\n\nCommand to build a build target\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"build\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\t// Get the build targets defined in the wiki\n\tvar buildTargets = $tw.boot.wikiInfo.build;\n\tif(!buildTargets) {\n\t\treturn \"No build targets defined\";\n\t}\n\t// Loop through each of the specified targets\n\tvar targets;\n\tif(this.params.length > 0) {\n\t\ttargets = this.params;\n\t} else {\n\t\ttargets = Object.keys(buildTargets);\n\t}\n\tfor(var targetIndex=0; targetIndex<targets.length; targetIndex++) {\n\t\tvar target = targets[targetIndex],\n\t\t\tcommands = buildTargets[target];\n\t\tif(!commands) {\n\t\t\treturn \"Build target '\" + target + \"' not found\";\n\t\t}\n\t\t// Add the commands to the queue\n\t\tthis.commander.addCommandTokens(commands);\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/clearpassword.js": {
"title": "$:/core/modules/commands/clearpassword.js",
"text": "/*\\\ntitle: $:/core/modules/commands/clearpassword.js\ntype: application/javascript\nmodule-type: command\n\nClear password for crypto operations\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"clearpassword\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\t$tw.crypto.setPassword(null);\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/deletetiddlers.js": {
"title": "$:/core/modules/commands/deletetiddlers.js",
"text": "/*\\\ntitle: $:/core/modules/commands/deletetiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to delete tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"deletetiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing filter\";\n\t}\n\tvar self = this,\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\twiki.deleteTiddler(title);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/editions.js": {
"title": "$:/core/modules/commands/editions.js",
"text": "/*\\\ntitle: $:/core/modules/commands/editions.js\ntype: application/javascript\nmodule-type: command\n\nCommand to list the available editions\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"editions\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tvar self = this;\n\t// Output the list\n\tthis.commander.streams.output.write(\"Available editions:\\n\\n\");\n\tvar editionInfo = $tw.utils.getEditionInfo();\n\t$tw.utils.each(editionInfo,function(info,name) {\n\t\tself.commander.streams.output.write(\" \" + name + \": \" + info.description + \"\\n\");\n\t});\n\tthis.commander.streams.output.write(\"\\n\");\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/fetch.js": {
"title": "$:/core/modules/commands/fetch.js",
"text": "/*\\\ntitle: $:/core/modules/commands/fetch.js\ntype: application/javascript\nmodule-type: command\n\nCommands to fetch external tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"fetch\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing subcommand and url\";\n\t}\n\tswitch(this.params[0]) {\n\t\tcase \"raw-file\":\n\t\t\treturn this.fetchFiles({\n\t\t\t\traw: true,\n\t\t\t\turl: this.params[1],\n\t\t\t\ttransformFilter: this.params[2] || \"\",\n\t\t\t\tcallback: this.callback\n\t\t\t});\n\t\t\tbreak;\n\t\tcase \"file\":\n\t\t\treturn this.fetchFiles({\n\t\t\t\turl: this.params[1],\n\t\t\t\timportFilter: this.params[2],\n\t\t\t\ttransformFilter: this.params[3] || \"\",\n\t\t\t\tcallback: this.callback\n\t\t\t});\n\t\t\tbreak;\n\t\tcase \"raw-files\":\n\t\t\treturn this.fetchFiles({\n\t\t\t\traw: true,\n\t\t\t\turlFilter: this.params[1],\n\t\t\t\ttransformFilter: this.params[2] || \"\",\n\t\t\t\tcallback: this.callback\n\t\t\t});\n\t\t\tbreak;\n\t\tcase \"files\":\n\t\t\treturn this.fetchFiles({\n\t\t\t\turlFilter: this.params[1],\n\t\t\t\timportFilter: this.params[2],\n\t\t\t\ttransformFilter: this.params[3] || \"\",\n\t\t\t\tcallback: this.callback\n\t\t\t});\n\t\t\tbreak;\n\t}\n\treturn null;\n};\n\nCommand.prototype.fetchFiles = function(options) {\n\tvar self = this;\n\t// Get the list of URLs\n\tvar urls;\n\tif(options.url) {\n\t\turls = [options.url]\n\t} else if(options.urlFilter) {\n\t\turls = $tw.wiki.filterTiddlers(options.urlFilter);\n\t} else {\n\t\treturn \"Missing URL\";\n\t}\n\t// Process each URL in turn\n\tvar next = 0;\n\tvar getNextFile = function(err) {\n\t\tif(err) {\n\t\t\treturn options.callback(err);\n\t\t}\n\t\tif(next < urls.length) {\n\t\t\tself.fetchFile(urls[next++],options,getNextFile);\n\t\t} else {\n\t\t\toptions.callback(null);\n\t\t}\n\t};\n\tgetNextFile(null);\n\t// Success\n\treturn null;\n};\n\nCommand.prototype.fetchFile = function(url,options,callback,redirectCount) {\n\tif(redirectCount > 10) {\n\t\treturn callback(\"Error too many redirects retrieving \" + url);\n\t}\n\tvar self = this,\n\t\tlib = url.substr(0,8) === \"https://\" ? require(\"https\") : require(\"http\");\n\tlib.get(url).on(\"response\",function(response) {\n\t var type = (response.headers[\"content-type\"] || \"\").split(\";\")[0],\n\t \tdata = [];\n\t self.commander.write(\"Reading \" + url + \": \");\n\t response.on(\"data\",function(chunk) {\n\t data.push(chunk);\n\t self.commander.write(\".\");\n\t });\n\t response.on(\"end\",function() {\n\t self.commander.write(\"\\n\");\n\t if(response.statusCode === 200) {\n\t\t self.processBody(Buffer.concat(data),type,options,url);\n\t\t callback(null);\n\t } else {\n\t \tif(response.statusCode === 302 || response.statusCode === 303 || response.statusCode === 307) {\n\t \t\treturn self.fetchFile(response.headers.location,options,callback,redirectCount + 1);\n\t \t} else {\n\t\t \treturn callback(\"Error \" + response.statusCode + \" retrieving \" + url)\t \t\t\n\t \t}\n\t }\n\t \t});\n\t \tresponse.on(\"error\",function(e) {\n\t\t\tconsole.log(\"Error on GET request: \" + e);\n\t\t\tcallback(e);\n\t \t});\n\t});\n\treturn null;\n};\n\nCommand.prototype.processBody = function(body,type,options,url) {\n\tvar self = this;\n\t// Collect the tiddlers in a wiki\n\tvar incomingWiki = new $tw.Wiki();\n\tif(options.raw) {\n\t\tvar typeInfo = type ? $tw.config.contentTypeInfo[type] : null,\n\t\t\tencoding = typeInfo ? typeInfo.encoding : \"utf8\";\n\t\tincomingWiki.addTiddler(new $tw.Tiddler({\n\t\t\ttitle: url,\n\t\t\ttype: type,\n\t\t\ttext: body.toString(encoding)\n\t\t}));\n\t} else {\n\t\t// Deserialise the file to extract the tiddlers\n\t\tvar tiddlers = this.commander.wiki.deserializeTiddlers(type || \"text/html\",body.toString(\"utf8\"),{});\n\t\t$tw.utils.each(tiddlers,function(tiddler) {\n\t\t\tincomingWiki.addTiddler(new $tw.Tiddler(tiddler));\n\t\t});\n\t}\n\t// Filter the tiddlers to select the ones we want\n\tvar filteredTitles = incomingWiki.filterTiddlers(options.importFilter || \"[all[tiddlers]]\");\n\t// Import the selected tiddlers\n\tvar count = 0;\n\tincomingWiki.each(function(tiddler,title) {\n\t\tif(filteredTitles.indexOf(title) !== -1) {\n\t\t\tvar newTiddler;\n\t\t\tif(options.transformFilter) {\n\t\t\t\tvar transformedTitle = (incomingWiki.filterTiddlers(options.transformFilter,null,self.commander.wiki.makeTiddlerIterator([title])) || [\"\"])[0];\n\t\t\t\tif(transformedTitle) {\n\t\t\t\t\tself.commander.log(\"Importing \" + title + \" as \" + transformedTitle)\n\t\t\t\t\tnewTiddler = new $tw.Tiddler(tiddler,{title: transformedTitle});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tself.commander.log(\"Importing \" + title)\n\t\t\t\tnewTiddler = tiddler;\n\t\t\t}\n\t\t\tself.commander.wiki.importTiddler(newTiddler);\n\t\t\tcount++;\n\t\t}\n\t});\n\tself.commander.log(\"Imported \" + count + \" tiddlers\")\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/help.js": {
"title": "$:/core/modules/commands/help.js",
"text": "/*\\\ntitle: $:/core/modules/commands/help.js\ntype: application/javascript\nmodule-type: command\n\nHelp command\n\n\\*/\n(function(){\n\n/*jshint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"help\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tvar subhelp = this.params[0] || \"default\",\n\t\thelpBase = \"$:/language/Help/\",\n\t\ttext;\n\tif(!this.commander.wiki.getTiddler(helpBase + subhelp)) {\n\t\tsubhelp = \"notfound\";\n\t}\n\t// Wikify the help as formatted text (ie block elements generate newlines)\n\ttext = this.commander.wiki.renderTiddler(\"text/plain-formatted\",helpBase + subhelp);\n\t// Remove any leading linebreaks\n\ttext = text.replace(/^(\\r?\\n)*/g,\"\");\n\tthis.commander.streams.output.write(text);\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/import.js": {
"title": "$:/core/modules/commands/import.js",
"text": "/*\\\ntitle: $:/core/modules/commands/import.js\ntype: application/javascript\nmodule-type: command\n\nCommand to import tiddlers from a file\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"import\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\tif(this.params.length < 2) {\n\t\treturn \"Missing parameters\";\n\t}\n\tvar filename = self.params[0],\n\t\tdeserializer = self.params[1],\n\t\ttitle = self.params[2] || filename,\n\t\tencoding = self.params[3] || \"utf8\",\n\t\ttext = fs.readFileSync(filename,encoding),\n\t\ttiddlers = this.commander.wiki.deserializeTiddlers(null,text,{title: title},{deserializer: deserializer});\n\t$tw.utils.each(tiddlers,function(tiddler) {\n\t\tself.commander.wiki.importTiddler(new $tw.Tiddler(tiddler));\n\t});\n\tthis.commander.log(tiddlers.length + \" tiddler(s) imported\");\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/init.js": {
"title": "$:/core/modules/commands/init.js",
"text": "/*\\\ntitle: $:/core/modules/commands/init.js\ntype: application/javascript\nmodule-type: command\n\nCommand to initialise an empty wiki folder\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"init\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tvar fs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\t// Check that we don't already have a valid wiki folder\n\tif($tw.boot.wikiTiddlersPath || ($tw.utils.isDirectory($tw.boot.wikiPath) && !$tw.utils.isDirectoryEmpty($tw.boot.wikiPath))) {\n\t\treturn \"Wiki folder is not empty\";\n\t}\n\t// Loop through each of the specified editions\n\tvar editions = this.params.length > 0 ? this.params : [\"empty\"];\n\tfor(var editionIndex=0; editionIndex<editions.length; editionIndex++) {\n\t\tvar editionName = editions[editionIndex];\n\t\t// Check the edition exists\n\t\tvar editionPath = $tw.findLibraryItem(editionName,$tw.getLibraryItemSearchPaths($tw.config.editionsPath,$tw.config.editionsEnvVar));\n\t\tif(!$tw.utils.isDirectory(editionPath)) {\n\t\t\treturn \"Edition '\" + editionName + \"' not found\";\n\t\t}\n\t\t// Copy the edition content\n\t\tvar err = $tw.utils.copyDirectory(editionPath,$tw.boot.wikiPath);\n\t\tif(!err) {\n\t\t\tthis.commander.streams.output.write(\"Copied edition '\" + editionName + \"' to \" + $tw.boot.wikiPath + \"\\n\");\n\t\t} else {\n\t\t\treturn err;\n\t\t}\n\t}\n\t// Tweak the tiddlywiki.info to remove any included wikis\n\tvar packagePath = $tw.boot.wikiPath + \"/tiddlywiki.info\",\n\t\tpackageJson = JSON.parse(fs.readFileSync(packagePath));\n\tdelete packageJson.includeWikis;\n\tfs.writeFileSync(packagePath,JSON.stringify(packageJson,null,$tw.config.preferences.jsonSpaces));\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/listen.js": {
"title": "$:/core/modules/commands/listen.js",
"text": "/*\\\ntitle: $:/core/modules/commands/listen.js\ntype: application/javascript\nmodule-type: command\n\nListen for HTTP requests and serve tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Server = require(\"$:/core/modules/server/server.js\").Server;\n\nexports.info = {\n\tname: \"listen\",\n\tsynchronous: true,\n\tnamedParameterMode: true,\n\tmandatoryParameters: [],\n};\n\nvar Command = function(params,commander,callback) {\n\tvar self = this;\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar self = this;\n\tif(!$tw.boot.wikiTiddlersPath) {\n\t\t$tw.utils.warning(\"Warning: Wiki folder '\" + $tw.boot.wikiPath + \"' does not exist or is missing a tiddlywiki.info file\");\n\t}\n\t// Set up server\n\tthis.server = new Server({\n\t\twiki: this.commander.wiki,\n\t\tvariables: self.params\n\t});\n\tvar nodeServer = this.server.listen();\n\t$tw.hooks.invokeHook(\"th-server-command-post-start\",this.server,nodeServer,\"tiddlywiki\");\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/load.js": {
"title": "$:/core/modules/commands/load.js",
"text": "/*\\\ntitle: $:/core/modules/commands/load.js\ntype: application/javascript\nmodule-type: command\n\nCommand to load tiddlers from a file or directory\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"load\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\tif(this.params.length < 1) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar tiddlers = $tw.loadTiddlersFromPath(self.params[0]),\n\t\tcount = 0;\n\t$tw.utils.each(tiddlers,function(tiddlerInfo) {\n\t\t$tw.utils.each(tiddlerInfo.tiddlers,function(tiddler) {\n\t\t\tself.commander.wiki.importTiddler(new $tw.Tiddler(tiddler));\n\t\t\tcount++;\n\t\t});\n\t});\n\tif(!count && self.params[1] !== \"noerror\") {\n\t\tself.callback(\"No tiddlers found in file \\\"\" + self.params[0] + \"\\\"\");\n\t} else {\n\t\tself.callback(null);\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/makelibrary.js": {
"title": "$:/core/modules/commands/makelibrary.js",
"text": "/*\\\ntitle: $:/core/modules/commands/makelibrary.js\ntype: application/javascript\nmodule-type: command\n\nCommand to pack all of the plugins in the library into a plugin tiddler of type \"library\"\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"makelibrary\",\n\tsynchronous: true\n};\n\nvar UPGRADE_LIBRARY_TITLE = \"$:/UpgradeLibrary\";\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar wiki = this.commander.wiki,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\tupgradeLibraryTitle = this.params[0] || UPGRADE_LIBRARY_TITLE,\n\t\ttiddlers = {};\n\t// Collect up the library plugins\n\tvar collectPlugins = function(folder) {\n\t\t\tvar pluginFolders = fs.readdirSync(folder);\n\t\t\tfor(var p=0; p<pluginFolders.length; p++) {\n\t\t\t\tif(!$tw.boot.excludeRegExp.test(pluginFolders[p])) {\n\t\t\t\t\tpluginFields = $tw.loadPluginFolder(path.resolve(folder,\"./\" + pluginFolders[p]));\n\t\t\t\t\tif(pluginFields && pluginFields.title) {\n\t\t\t\t\t\ttiddlers[pluginFields.title] = pluginFields;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tcollectPublisherPlugins = function(folder) {\n\t\t\tvar publisherFolders = fs.readdirSync(folder);\n\t\t\tfor(var t=0; t<publisherFolders.length; t++) {\n\t\t\t\tif(!$tw.boot.excludeRegExp.test(publisherFolders[t])) {\n\t\t\t\t\tcollectPlugins(path.resolve(folder,\"./\" + publisherFolders[t]));\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t$tw.utils.each($tw.getLibraryItemSearchPaths($tw.config.pluginsPath,$tw.config.pluginsEnvVar),collectPublisherPlugins);\n\t$tw.utils.each($tw.getLibraryItemSearchPaths($tw.config.themesPath,$tw.config.themesEnvVar),collectPublisherPlugins);\n\t$tw.utils.each($tw.getLibraryItemSearchPaths($tw.config.languagesPath,$tw.config.languagesEnvVar),collectPlugins);\n\t// Save the upgrade library tiddler\n\tvar pluginFields = {\n\t\ttitle: upgradeLibraryTitle,\n\t\ttype: \"application/json\",\n\t\t\"plugin-type\": \"library\",\n\t\t\"text\": JSON.stringify({tiddlers: tiddlers})\n\t};\n\twiki.addTiddler(new $tw.Tiddler(pluginFields));\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/output.js": {
"title": "$:/core/modules/commands/output.js",
"text": "/*\\\ntitle: $:/core/modules/commands/output.js\ntype: application/javascript\nmodule-type: command\n\nCommand to set the default output location (defaults to current working directory)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"output\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tvar fs = require(\"fs\"),\n\t\tpath = require(\"path\");\n\tif(this.params.length < 1) {\n\t\treturn \"Missing output path\";\n\t}\n\tthis.commander.outputPath = path.resolve(process.cwd(),this.params[0]);\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/password.js": {
"title": "$:/core/modules/commands/password.js",
"text": "/*\\\ntitle: $:/core/modules/commands/password.js\ntype: application/javascript\nmodule-type: command\n\nSave password for crypto operations\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"password\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing password\";\n\t}\n\t$tw.crypto.setPassword(this.params[0]);\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/render.js": {
"title": "$:/core/modules/commands/render.js",
"text": "/*\\\ntitle: $:/core/modules/commands/render.js\ntype: application/javascript\nmodule-type: command\n\nRender individual tiddlers and save the results to the specified files\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"render\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing tiddler filter\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\twiki = this.commander.wiki,\n\t\ttiddlerFilter = this.params[0],\n\t\tfilenameFilter = this.params[1] || \"[is[tiddler]addsuffix[.html]]\",\n\t\ttype = this.params[2] || \"text/html\",\n\t\ttemplate = this.params[3],\n\t\tvarName = this.params[4],\n\t\tvarValue = this.params[5],\n\t\ttiddlers = wiki.filterTiddlers(tiddlerFilter);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar parser = wiki.parseTiddler(template || title),\n\t\t\tvariables = {currentTiddler: title};\n\t\tif(varName) {\n\t\t\tvariables[varName] = varValue || \"\";\n\t\t}\n\t\tvar widgetNode = wiki.makeWidget(parser,{variables: variables}),\n\t\t\tcontainer = $tw.fakeDocument.createElement(\"div\");\n\t\twidgetNode.render(container,null);\n\t\tvar text = type === \"text/html\" ? container.innerHTML : container.textContent,\n\t\t\tfilepath = path.resolve(self.commander.outputPath,wiki.filterTiddlers(filenameFilter,$tw.rootWidget,wiki.makeTiddlerIterator([title]))[0]);\n\t\tif(self.commander.verbose) {\n\t\t\tconsole.log(\"Rendering \\\"\" + title + \"\\\" to \\\"\" + filepath + \"\\\"\");\n\t\t}\n\t\t$tw.utils.createFileDirectories(filepath);\n\t\tfs.writeFileSync(filepath,text,\"utf8\");\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/rendertiddler.js": {
"title": "$:/core/modules/commands/rendertiddler.js",
"text": "/*\\\ntitle: $:/core/modules/commands/rendertiddler.js\ntype: application/javascript\nmodule-type: command\n\nCommand to render a tiddler and save it to a file\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"rendertiddler\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\ttitle = this.params[0],\n\t\tfilename = path.resolve(this.commander.outputPath,this.params[1]),\n\t\ttype = this.params[2] || \"text/html\",\n\t\ttemplate = this.params[3],\n\t\tname = this.params[4],\n\t\tvalue = this.params[5],\n\t\tvariables = {};\n\t$tw.utils.createFileDirectories(filename);\n\tif(template) {\n\t\tvariables.currentTiddler = title;\n\t\ttitle = template;\n\t}\n\tif(name && value) {\n\t\tvariables[name] = value;\n\t}\n\tfs.writeFile(filename,this.commander.wiki.renderTiddler(type,title,{variables: variables}),\"utf8\",function(err) {\n\t\tself.callback(err);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/rendertiddlers.js": {
"title": "$:/core/modules/commands/rendertiddlers.js",
"text": "/*\\\ntitle: $:/core/modules/commands/rendertiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to render several tiddlers to a folder of files\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"rendertiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\ttemplate = this.params[1],\n\t\toutputPath = this.commander.outputPath,\n\t\tpathname = path.resolve(outputPath,this.params[2]),\t\t\n\t\ttype = this.params[3] || \"text/html\",\n\t\textension = this.params[4] || \".html\",\n\t\tdeleteDirectory = (this.params[5] || \"\").toLowerCase() !== \"noclean\",\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\tif(deleteDirectory) {\n\t\t$tw.utils.deleteDirectory(pathname);\n\t}\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar parser = wiki.parseTiddler(template),\n\t\t\twidgetNode = wiki.makeWidget(parser,{variables: {currentTiddler: title}}),\n\t\t\tcontainer = $tw.fakeDocument.createElement(\"div\");\n\t\twidgetNode.render(container,null);\n\t\tvar text = type === \"text/html\" ? container.innerHTML : container.textContent,\n\t\t\texportPath = null;\n\t\tif($tw.utils.hop($tw.macros,\"tv-get-export-path\")) {\n\t\t\tvar macroPath = $tw.macros[\"tv-get-export-path\"].run.apply(self,[title]);\n\t\t\tif(macroPath) {\n\t\t\t\texportPath = path.resolve(outputPath,macroPath + extension);\n\t\t\t}\n\t\t}\n\t\tvar finalPath = exportPath || path.resolve(pathname,encodeURIComponent(title) + extension);\n\t\t$tw.utils.createFileDirectories(finalPath);\n\t\tfs.writeFileSync(finalPath,text,\"utf8\");\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/save.js": {
"title": "$:/core/modules/commands/save.js",
"text": "/*\\\ntitle: $:/core/modules/commands/save.js\ntype: application/javascript\nmodule-type: command\n\nSaves individual tiddlers in their raw text or binary format to the specified files\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"save\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing filename filter\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\twiki = this.commander.wiki,\n\t\ttiddlerFilter = this.params[0],\n\t\tfilenameFilter = this.params[1] || \"[is[tiddler]]\",\n\t\ttiddlers = wiki.filterTiddlers(tiddlerFilter);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.commander.wiki.getTiddler(title),\n\t\t\ttype = tiddler.fields.type || \"text/vnd.tiddlywiki\",\n\t\t\tcontentTypeInfo = $tw.config.contentTypeInfo[type] || {encoding: \"utf8\"},\n\t\t\tfilepath = path.resolve(self.commander.outputPath,wiki.filterTiddlers(filenameFilter,$tw.rootWidget,wiki.makeTiddlerIterator([title]))[0]);\n\t\tif(self.commander.verbose) {\n\t\t\tconsole.log(\"Saving \\\"\" + title + \"\\\" to \\\"\" + filepath + \"\\\"\");\n\t\t}\n\t\t$tw.utils.createFileDirectories(filepath);\n\t\tfs.writeFileSync(filepath,tiddler.fields.text,contentTypeInfo.encoding);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/savelibrarytiddlers.js": {
"title": "$:/core/modules/commands/savelibrarytiddlers.js",
"text": "/*\\\ntitle: $:/core/modules/commands/savelibrarytiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to save the subtiddlers of a bundle tiddler as a series of JSON files\n\n--savelibrarytiddlers <tiddler> <pathname> <skinnylisting>\n\nThe tiddler identifies the bundle tiddler that contains the subtiddlers.\n\nThe pathname specifies the pathname to the folder in which the JSON files should be saved. The filename is the URL encoded title of the subtiddler.\n\nThe skinnylisting specifies the title of the tiddler to which a JSON catalogue of the subtiddlers will be saved. The JSON file contains the same data as the bundle tiddler but with the `text` field removed.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"savelibrarytiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\tcontainerTitle = this.params[0],\n\t\tfilter = this.params[1],\n\t\tbasepath = this.params[2],\n\t\tskinnyListTitle = this.params[3];\n\t// Get the container tiddler as data\n\tvar containerData = self.commander.wiki.getTiddlerDataCached(containerTitle,undefined);\n\tif(!containerData) {\n\t\treturn \"'\" + containerTitle + \"' is not a tiddler bundle\";\n\t}\n\t// Filter the list of plugins\n\tvar pluginList = [];\n\t$tw.utils.each(containerData.tiddlers,function(tiddler,title) {\n\t\tpluginList.push(title);\n\t});\n\tvar filteredPluginList;\n\tif(filter) {\n\t\tfilteredPluginList = self.commander.wiki.filterTiddlers(filter,null,self.commander.wiki.makeTiddlerIterator(pluginList));\n\t} else {\n\t\tfilteredPluginList = pluginList;\n\t}\n\t// Iterate through the plugins\n\tvar skinnyList = [];\n\t$tw.utils.each(filteredPluginList,function(title) {\n\t\tvar tiddler = containerData.tiddlers[title];\n\t\t// Save each JSON file and collect the skinny data\n\t\tvar pathname = path.resolve(self.commander.outputPath,basepath + encodeURIComponent(title) + \".json\");\n\t\t$tw.utils.createFileDirectories(pathname);\n\t\tfs.writeFileSync(pathname,JSON.stringify(tiddler),\"utf8\");\n\t\t// Collect the skinny list data\n\t\tvar pluginTiddlers = JSON.parse(tiddler.text),\n\t\t\treadmeContent = (pluginTiddlers.tiddlers[title + \"/readme\"] || {}).text,\n\t\t\tdoesRequireReload = !!$tw.wiki.doesPluginInfoRequireReload(pluginTiddlers),\n\t\t\ticonTiddler = pluginTiddlers.tiddlers[title + \"/icon\"] || {},\n\t\t\ticonType = iconTiddler.type,\n\t\t\ticonText = iconTiddler.text,\n\t\t\ticonContent;\n\t\tif(iconType && iconText) {\n\t\t\ticonContent = $tw.utils.makeDataUri(iconText,iconType);\n\t\t}\n\t\tskinnyList.push($tw.utils.extend({},tiddler,{\n\t\t\ttext: undefined,\n\t\t\treadme: readmeContent,\n\t\t\t\"requires-reload\": doesRequireReload ? \"yes\" : \"no\",\n\t\t\ticon: iconContent\n\t\t}));\n\t});\n\t// Save the catalogue tiddler\n\tif(skinnyListTitle) {\n\t\tself.commander.wiki.setTiddlerData(skinnyListTitle,skinnyList);\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/savetiddler.js": {
"title": "$:/core/modules/commands/savetiddler.js",
"text": "/*\\\ntitle: $:/core/modules/commands/savetiddler.js\ntype: application/javascript\nmodule-type: command\n\nCommand to save the content of a tiddler to a file\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"savetiddler\",\n\tsynchronous: false\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 2) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\ttitle = this.params[0],\n\t\tfilename = path.resolve(this.commander.outputPath,this.params[1]),\n\t\ttiddler = this.commander.wiki.getTiddler(title);\n\tif(tiddler) {\n\t\tvar type = tiddler.fields.type || \"text/vnd.tiddlywiki\",\n\t\t\tcontentTypeInfo = $tw.config.contentTypeInfo[type] || {encoding: \"utf8\"};\n\t\t$tw.utils.createFileDirectories(filename);\n\t\tfs.writeFile(filename,tiddler.fields.text,contentTypeInfo.encoding,function(err) {\n\t\t\tself.callback(err);\n\t\t});\n\t} else {\n\t\treturn \"Missing tiddler: \" + title;\n\t}\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/savetiddlers.js": {
"title": "$:/core/modules/commands/savetiddlers.js",
"text": "/*\\\ntitle: $:/core/modules/commands/savetiddlers.js\ntype: application/javascript\nmodule-type: command\n\nCommand to save several tiddlers to a folder of files\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"savetiddlers\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing filename\";\n\t}\n\tvar self = this,\n\t\tfs = require(\"fs\"),\n\t\tpath = require(\"path\"),\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\tpathname = path.resolve(this.commander.outputPath,this.params[1]),\n\t\tdeleteDirectory = (this.params[2] || \"\").toLowerCase() !== \"noclean\",\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\tif(deleteDirectory) {\n\t\t$tw.utils.deleteDirectory(pathname);\n\t}\n\t$tw.utils.createDirectory(pathname);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.commander.wiki.getTiddler(title),\n\t\t\ttype = tiddler.fields.type || \"text/vnd.tiddlywiki\",\n\t\t\tcontentTypeInfo = $tw.config.contentTypeInfo[type] || {encoding: \"utf8\"},\n\t\t\tfilename = path.resolve(pathname,encodeURIComponent(title));\n\t\tfs.writeFileSync(filename,tiddler.fields.text,contentTypeInfo.encoding);\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/savewikifolder.js": {
"title": "$:/core/modules/commands/savewikifolder.js",
"text": "/*\\\ntitle: $:/core/modules/commands/savewikifolder.js\ntype: application/javascript\nmodule-type: command\n\nCommand to save the current wiki as a wiki folder\n\n--savewikifolder <wikifolderpath> [<filter>]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"savewikifolder\",\n\tsynchronous: true\n};\n\nvar fs,path;\nif($tw.node) {\n\tfs = require(\"fs\");\n\tpath = require(\"path\");\n}\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing wiki folder path\";\n\t}\n\tvar wikifoldermaker = new WikiFolderMaker(this.params[0],this.params[1],this.commander);\n\treturn wikifoldermaker.save();\n};\n\nfunction WikiFolderMaker(wikiFolderPath,wikiFilter,commander) {\n\tthis.wikiFolderPath = wikiFolderPath;\n\tthis.wikiFilter = wikiFilter || \"[all[tiddlers]]\";\n\tthis.commander = commander;\n\tthis.wiki = commander.wiki;\n\tthis.savedPaths = []; // So that we can detect filename clashes\n}\n\nWikiFolderMaker.prototype.log = function(str) {\n\tif(this.commander.verbose) {\n\t\tconsole.log(str);\n\t}\n};\n\nWikiFolderMaker.prototype.tiddlersToIgnore = [\n\t\"$:/boot/boot.css\",\n\t\"$:/boot/boot.js\",\n\t\"$:/boot/bootprefix.js\",\n\t\"$:/core\",\n\t\"$:/library/sjcl.js\",\n\t\"$:/temp/info-plugin\"\n];\n\n/*\nReturns null if successful, or an error string if there was an error\n*/\nWikiFolderMaker.prototype.save = function() {\n\tvar self = this;\n\t// Check that the output directory doesn't exist\n\tif(fs.existsSync(this.wikiFolderPath) && !$tw.utils.isDirectoryEmpty(this.wikiFolderPath)) {\n\t\treturn \"The unpackwiki command requires that the output wiki folder be empty\";\n\t}\n\t// Get the tiddlers from the source wiki\n\tvar tiddlerTitles = this.wiki.filterTiddlers(this.wikiFilter);\n\t// Initialise a new tiddlwiki.info file\n\tvar newWikiInfo = {};\n\t// Process each incoming tiddler in turn\n\t$tw.utils.each(tiddlerTitles,function(title) {\n\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\tif(tiddler) {\n\t\t\tif(self.tiddlersToIgnore.indexOf(title) !== -1) {\n\t\t\t\t// Ignore the core plugin and the ephemeral info plugin\n\t\t\t\tself.log(\"Ignoring tiddler: \" + title);\n\t\t\t} else {\n\t\t\t\tvar type = tiddler.fields.type,\n\t\t\t\t\tpluginType = tiddler.fields[\"plugin-type\"];\n\t\t\t\tif(type === \"application/json\" && pluginType) {\n\t\t\t\t\t// Plugin tiddler\n\t\t\t\t\tvar libraryDetails = self.findPluginInLibrary(title);\n\t\t\t\t\tif(libraryDetails) {\n\t\t\t\t\t\t// A plugin from the core library\n\t\t\t\t\t\tself.log(\"Adding built-in plugin: \" + libraryDetails.name);\n\t\t\t\t\t\tnewWikiInfo[libraryDetails.type] = newWikiInfo[libraryDetails.type] || [];\n\t\t\t\t\t\t$tw.utils.pushTop(newWikiInfo[libraryDetails.type],libraryDetails.name);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// A custom plugin\n\t\t\t\t\t\tself.log(\"Processing custom plugin: \" + title);\n\t\t\t\t\t\tself.saveCustomPlugin(tiddler);\n\t\t\t\t\t}\t\t\t\t\n\t\t\t\t} else {\n\t\t\t\t\t// Ordinary tiddler\n\t\t\t\t\tself.saveTiddler(\"tiddlers\",tiddler);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\t// Save the tiddlywiki.info file\n\tthis.saveJSONFile(\"tiddlywiki.info\",newWikiInfo);\n\tself.log(\"Writing tiddlywiki.info: \" + JSON.stringify(newWikiInfo,null,$tw.config.preferences.jsonSpaces));\n\treturn null;\n};\n\n/*\nTest whether the specified tiddler is a plugin in the plugin library\n*/\nWikiFolderMaker.prototype.findPluginInLibrary = function(title) {\n\tvar parts = title.split(\"/\"),\n\t\tpluginPath, type, name;\n\tif(parts[0] === \"$:\") {\n\t\tif(parts[1] === \"languages\" && parts.length === 3) {\n\t\t\tpluginPath = \"languages\" + path.sep + parts[2];\n\t\t\ttype = parts[1];\n\t\t\tname = parts[2];\n\t\t} else if(parts[1] === \"plugins\" || parts[1] === \"themes\" && parts.length === 4) {\n\t\t\tpluginPath = parts[1] + path.sep + parts[2] + path.sep + parts[3];\n\t\t\ttype = parts[1];\n\t\t\tname = parts[2] + \"/\" + parts[3];\n\t\t}\n\t}\n\tif(pluginPath && type && name) {\n\t\tpluginPath = path.resolve($tw.boot.bootPath,\"..\",pluginPath);\n\t\tif(fs.existsSync(pluginPath)) {\n\t\t\treturn {\n\t\t\t\tpluginPath: pluginPath,\n\t\t\t\ttype: type,\n\t\t\t\tname: name\n\t\t\t};\n\t\t}\n\t}\n\treturn false;\n};\n\nWikiFolderMaker.prototype.saveCustomPlugin = function(pluginTiddler) {\n\tvar self = this,\n\t\tpluginTitle = pluginTiddler.fields.title,\n\t\ttitleParts = pluginTitle.split(\"/\"),\n\t\tdirectory = $tw.utils.generateTiddlerFilepath(titleParts[titleParts.length - 1],{\n\t\t\tdirectory: path.resolve(this.wikiFolderPath,pluginTiddler.fields[\"plugin-type\"] + \"s\")\n\t\t}),\n\t\tpluginInfo = pluginTiddler.getFieldStrings({exclude: [\"text\",\"type\"]});\n\tthis.saveJSONFile(directory + path.sep + \"plugin.info\",pluginInfo);\n\tself.log(\"Writing \" + directory + path.sep + \"plugin.info: \" + JSON.stringify(pluginInfo,null,$tw.config.preferences.jsonSpaces));\n\tvar pluginTiddlers = JSON.parse(pluginTiddler.fields.text).tiddlers; // A hashmap of tiddlers in the plugin\n\t$tw.utils.each(pluginTiddlers,function(tiddler) {\n\t\tself.saveTiddler(directory,new $tw.Tiddler(tiddler));\n\t});\n};\n\nWikiFolderMaker.prototype.saveTiddler = function(directory,tiddler) {\n\tvar fileInfo = $tw.utils.generateTiddlerFileInfo(tiddler,{\n\t\tdirectory: path.resolve(this.wikiFolderPath,directory),\n\t\twiki: this.wiki\n\t});\n\t$tw.utils.saveTiddlerToFileSync(tiddler,fileInfo);\n};\n\nWikiFolderMaker.prototype.saveJSONFile = function(filename,json) {\n\tthis.saveTextFile(filename,JSON.stringify(json,null,$tw.config.preferences.jsonSpaces));\n};\n\nWikiFolderMaker.prototype.saveTextFile = function(filename,data) {\n\tthis.saveFile(filename,\"utf8\",data);\n};\n\nWikiFolderMaker.prototype.saveFile = function(filename,encoding,data) {\n\tvar filepath = path.resolve(this.wikiFolderPath,filename);\n\t$tw.utils.createFileDirectories(filepath);\n\tfs.writeFileSync(filepath,data,encoding);\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/server.js": {
"title": "$:/core/modules/commands/server.js",
"text": "/*\\\ntitle: $:/core/modules/commands/server.js\ntype: application/javascript\nmodule-type: command\n\nDeprecated legacy command for serving tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Server = require(\"$:/core/modules/server/server.js\").Server;\n\nexports.info = {\n\tname: \"server\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tvar self = this;\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(!$tw.boot.wikiTiddlersPath) {\n\t\t$tw.utils.warning(\"Warning: Wiki folder '\" + $tw.boot.wikiPath + \"' does not exist or is missing a tiddlywiki.info file\");\n\t}\n\t// Set up server\n\tthis.server = new Server({\n\t\twiki: this.commander.wiki,\n\t\tvariables: {\n\t\t\tport: this.params[0],\n\t\t\thost: this.params[6],\n\t\t\t\"root-tiddler\": this.params[1],\n\t\t\t\"root-render-type\": this.params[2],\n\t\t\t\"root-serve-type\": this.params[3],\n\t\t\tusername: this.params[4],\n\t\t\tpassword: this.params[5],\n\t\t\t\"path-prefix\": this.params[7],\n\t\t\t\"debug-level\": this.params[8]\n\t\t}\n\t});\n\tvar nodeServer = this.server.listen();\n\t$tw.hooks.invokeHook(\"th-server-command-post-start\",this.server,nodeServer,\"tiddlywiki\");\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/setfield.js": {
"title": "$:/core/modules/commands/setfield.js",
"text": "/*\\\ntitle: $:/core/modules/commands/setfield.js\ntype: application/javascript\nmodule-type: command\n\nCommand to modify selected tiddlers to set a field to the text of a template tiddler that has been wikified with the selected tiddler as the current tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.info = {\n\tname: \"setfield\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 4) {\n\t\treturn \"Missing parameters\";\n\t}\n\tvar self = this,\n\t\twiki = this.commander.wiki,\n\t\tfilter = this.params[0],\n\t\tfieldname = this.params[1] || \"text\",\n\t\ttemplatetitle = this.params[2],\n\t\trendertype = this.params[3] || \"text/plain\",\n\t\ttiddlers = wiki.filterTiddlers(filter);\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar parser = wiki.parseTiddler(templatetitle),\n\t\t\tnewFields = {},\n\t\t\ttiddler = wiki.getTiddler(title);\n\t\tif(parser) {\n\t\t\tvar widgetNode = wiki.makeWidget(parser,{variables: {currentTiddler: title}});\n\t\t\tvar container = $tw.fakeDocument.createElement(\"div\");\n\t\t\twidgetNode.render(container,null);\n\t\t\tnewFields[fieldname] = rendertype === \"text/html\" ? container.innerHTML : container.textContent;\n\t\t} else {\n\t\t\tnewFields[fieldname] = undefined;\n\t\t}\n\t\twiki.addTiddler(new $tw.Tiddler(tiddler,newFields));\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/unpackplugin.js": {
"title": "$:/core/modules/commands/unpackplugin.js",
"text": "/*\\\ntitle: $:/core/modules/commands/unpackplugin.js\ntype: application/javascript\nmodule-type: command\n\nCommand to extract the shadow tiddlers from within a plugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"unpackplugin\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander,callback) {\n\tthis.params = params;\n\tthis.commander = commander;\n\tthis.callback = callback;\n};\n\nCommand.prototype.execute = function() {\n\tif(this.params.length < 1) {\n\t\treturn \"Missing plugin name\";\n\t}\n\tvar self = this,\n\t\ttitle = this.params[0],\n\t\tpluginData = this.commander.wiki.getTiddlerDataCached(title);\n\tif(!pluginData) {\n\t\treturn \"Plugin '\" + title + \"' not found\";\n\t}\n\t$tw.utils.each(pluginData.tiddlers,function(tiddler) {\n\t\tself.commander.wiki.addTiddler(new $tw.Tiddler(tiddler));\n\t});\n\treturn null;\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/verbose.js": {
"title": "$:/core/modules/commands/verbose.js",
"text": "/*\\\ntitle: $:/core/modules/commands/verbose.js\ntype: application/javascript\nmodule-type: command\n\nVerbose command\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"verbose\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tthis.commander.verbose = true;\n\t// Output the boot message log\n\tthis.commander.streams.output.write(\"Boot log:\\n \" + $tw.boot.logMessages.join(\"\\n \") + \"\\n\");\n\treturn null; // No error\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/commands/version.js": {
"title": "$:/core/modules/commands/version.js",
"text": "/*\\\ntitle: $:/core/modules/commands/version.js\ntype: application/javascript\nmodule-type: command\n\nVersion command\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.info = {\n\tname: \"version\",\n\tsynchronous: true\n};\n\nvar Command = function(params,commander) {\n\tthis.params = params;\n\tthis.commander = commander;\n};\n\nCommand.prototype.execute = function() {\n\tthis.commander.streams.output.write($tw.version + \"\\n\");\n\treturn null; // No error\n};\n\nexports.Command = Command;\n\n})();\n",
"type": "application/javascript",
"module-type": "command"
},
"$:/core/modules/config.js": {
"title": "$:/core/modules/config.js",
"text": "/*\\\ntitle: $:/core/modules/config.js\ntype: application/javascript\nmodule-type: config\n\nCore configuration constants\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.preferences = {};\n\nexports.preferences.notificationDuration = 3 * 1000;\nexports.preferences.jsonSpaces = 4;\n\nexports.textPrimitives = {\n\tupperLetter: \"[A-Z\\u00c0-\\u00d6\\u00d8-\\u00de\\u0150\\u0170]\",\n\tlowerLetter: \"[a-z\\u00df-\\u00f6\\u00f8-\\u00ff\\u0151\\u0171]\",\n\tanyLetter: \"[A-Za-z0-9\\u00c0-\\u00d6\\u00d8-\\u00de\\u00df-\\u00f6\\u00f8-\\u00ff\\u0150\\u0170\\u0151\\u0171]\",\n\tblockPrefixLetters:\t\"[A-Za-z0-9-_\\u00c0-\\u00d6\\u00d8-\\u00de\\u00df-\\u00f6\\u00f8-\\u00ff\\u0150\\u0170\\u0151\\u0171]\"\n};\n\nexports.textPrimitives.unWikiLink = \"~\";\nexports.textPrimitives.wikiLink = exports.textPrimitives.upperLetter + \"+\" +\n\texports.textPrimitives.lowerLetter + \"+\" +\n\texports.textPrimitives.upperLetter +\n\texports.textPrimitives.anyLetter + \"*\";\n\nexports.htmlEntities = {quot:34, amp:38, apos:39, lt:60, gt:62, nbsp:160, iexcl:161, cent:162, pound:163, curren:164, yen:165, brvbar:166, sect:167, uml:168, copy:169, ordf:170, laquo:171, not:172, shy:173, reg:174, macr:175, deg:176, plusmn:177, sup2:178, sup3:179, acute:180, micro:181, para:182, middot:183, cedil:184, sup1:185, ordm:186, raquo:187, frac14:188, frac12:189, frac34:190, iquest:191, Agrave:192, Aacute:193, Acirc:194, Atilde:195, Auml:196, Aring:197, AElig:198, Ccedil:199, Egrave:200, Eacute:201, Ecirc:202, Euml:203, Igrave:204, Iacute:205, Icirc:206, Iuml:207, ETH:208, Ntilde:209, Ograve:210, Oacute:211, Ocirc:212, Otilde:213, Ouml:214, times:215, Oslash:216, Ugrave:217, Uacute:218, Ucirc:219, Uuml:220, Yacute:221, THORN:222, szlig:223, agrave:224, aacute:225, acirc:226, atilde:227, auml:228, aring:229, aelig:230, ccedil:231, egrave:232, eacute:233, ecirc:234, euml:235, igrave:236, iacute:237, icirc:238, iuml:239, eth:240, ntilde:241, ograve:242, oacute:243, ocirc:244, otilde:245, ouml:246, divide:247, oslash:248, ugrave:249, uacute:250, ucirc:251, uuml:252, yacute:253, thorn:254, yuml:255, OElig:338, oelig:339, Scaron:352, scaron:353, Yuml:376, fnof:402, circ:710, tilde:732, Alpha:913, Beta:914, Gamma:915, Delta:916, Epsilon:917, Zeta:918, Eta:919, Theta:920, Iota:921, Kappa:922, Lambda:923, Mu:924, Nu:925, Xi:926, Omicron:927, Pi:928, Rho:929, Sigma:931, Tau:932, Upsilon:933, Phi:934, Chi:935, Psi:936, Omega:937, alpha:945, beta:946, gamma:947, delta:948, epsilon:949, zeta:950, eta:951, theta:952, iota:953, kappa:954, lambda:955, mu:956, nu:957, xi:958, omicron:959, pi:960, rho:961, sigmaf:962, sigma:963, tau:964, upsilon:965, phi:966, chi:967, psi:968, omega:969, thetasym:977, upsih:978, piv:982, ensp:8194, emsp:8195, thinsp:8201, zwnj:8204, zwj:8205, lrm:8206, rlm:8207, ndash:8211, mdash:8212, lsquo:8216, rsquo:8217, sbquo:8218, ldquo:8220, rdquo:8221, bdquo:8222, dagger:8224, Dagger:8225, bull:8226, hellip:8230, permil:8240, prime:8242, Prime:8243, lsaquo:8249, rsaquo:8250, oline:8254, frasl:8260, euro:8364, image:8465, weierp:8472, real:8476, trade:8482, alefsym:8501, larr:8592, uarr:8593, rarr:8594, darr:8595, harr:8596, crarr:8629, lArr:8656, uArr:8657, rArr:8658, dArr:8659, hArr:8660, forall:8704, part:8706, exist:8707, empty:8709, nabla:8711, isin:8712, notin:8713, ni:8715, prod:8719, sum:8721, minus:8722, lowast:8727, radic:8730, prop:8733, infin:8734, ang:8736, and:8743, or:8744, cap:8745, cup:8746, int:8747, there4:8756, sim:8764, cong:8773, asymp:8776, ne:8800, equiv:8801, le:8804, ge:8805, sub:8834, sup:8835, nsub:8836, sube:8838, supe:8839, oplus:8853, otimes:8855, perp:8869, sdot:8901, lceil:8968, rceil:8969, lfloor:8970, rfloor:8971, lang:9001, rang:9002, loz:9674, spades:9824, clubs:9827, hearts:9829, diams:9830 };\n\nexports.htmlVoidElements = \"area,base,br,col,command,embed,hr,img,input,keygen,link,meta,param,source,track,wbr\".split(\",\");\n\nexports.htmlBlockElements = \"address,article,aside,audio,blockquote,canvas,dd,div,dl,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,hr,li,noscript,ol,output,p,pre,section,table,tfoot,ul,video\".split(\",\");\n\nexports.htmlUnsafeElements = \"script\".split(\",\");\n\n})();\n",
"type": "application/javascript",
"module-type": "config"
},
"$:/core/modules/deserializers.js": {
"title": "$:/core/modules/deserializers.js",
"text": "/*\\\ntitle: $:/core/modules/deserializers.js\ntype: application/javascript\nmodule-type: tiddlerdeserializer\n\nFunctions to deserialise tiddlers from a block of text\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nUtility function to parse an old-style tiddler DIV in a *.tid file. It looks like this:\n\n<div title=\"Title\" creator=\"JoeBloggs\" modifier=\"JoeBloggs\" created=\"201102111106\" modified=\"201102111310\" tags=\"myTag [[my long tag]]\">\n<pre>The text of the tiddler (without the expected HTML encoding).\n</pre>\n</div>\n\nNote that the field attributes are HTML encoded, but that the body of the <PRE> tag is not encoded.\n\nWhen these tiddler DIVs are encountered within a TiddlyWiki HTML file then the body is encoded in the usual way.\n*/\nvar parseTiddlerDiv = function(text /* [,fields] */) {\n\t// Slot together the default results\n\tvar result = {};\n\tif(arguments.length > 1) {\n\t\tfor(var f=1; f<arguments.length; f++) {\n\t\t\tvar fields = arguments[f];\n\t\t\tfor(var t in fields) {\n\t\t\t\tresult[t] = fields[t];\t\t\n\t\t\t}\n\t\t}\n\t}\n\t// Parse the DIV body\n\tvar startRegExp = /^\\s*<div\\s+([^>]*)>(\\s*<pre>)?/gi,\n\t\tendRegExp,\n\t\tmatch = startRegExp.exec(text);\n\tif(match) {\n\t\t// Old-style DIVs don't have the <pre> tag\n\t\tif(match[2]) {\n\t\t\tendRegExp = /<\\/pre>\\s*<\\/div>\\s*$/gi;\n\t\t} else {\n\t\t\tendRegExp = /<\\/div>\\s*$/gi;\n\t\t}\n\t\tvar endMatch = endRegExp.exec(text);\n\t\tif(endMatch) {\n\t\t\t// Extract the text\n\t\t\tresult.text = text.substring(match.index + match[0].length,endMatch.index);\n\t\t\t// Process the attributes\n\t\t\tvar attrRegExp = /\\s*([^=\\s]+)\\s*=\\s*(?:\"([^\"]*)\"|'([^']*)')/gi,\n\t\t\t\tattrMatch;\n\t\t\tdo {\n\t\t\t\tattrMatch = attrRegExp.exec(match[1]);\n\t\t\t\tif(attrMatch) {\n\t\t\t\t\tvar name = attrMatch[1];\n\t\t\t\t\tvar value = attrMatch[2] !== undefined ? attrMatch[2] : attrMatch[3];\n\t\t\t\t\tresult[name] = value;\n\t\t\t\t}\n\t\t\t} while(attrMatch);\n\t\t\treturn result;\n\t\t}\n\t}\n\treturn undefined;\n};\n\nexports[\"application/x-tiddler-html-div\"] = function(text,fields) {\n\treturn [parseTiddlerDiv(text,fields)];\n};\n\nexports[\"application/json\"] = function(text,fields) {\n\tvar incoming,\n\t\tresults = [];\n\ttry {\n\t\tincoming = JSON.parse(text);\n\t} catch(e) {\n\t\tincoming = [{\n\t\t\ttitle: \"JSON error: \" + e,\n\t\t\ttext: \"\"\n\t\t}]\n\t}\n\tif(!$tw.utils.isArray(incoming)) {\n\t\tincoming = [incoming];\n\t}\n\tfor(var t=0; t<incoming.length; t++) {\n\t\tvar incomingFields = incoming[t],\n\t\t\tfields = {};\n\t\tfor(var f in incomingFields) {\n\t\t\tif(typeof incomingFields[f] === \"string\") {\n\t\t\t\tfields[f] = incomingFields[f];\n\t\t\t}\n\t\t}\n\t\tresults.push(fields);\n\t}\n\treturn results;\n};\n\n/*\nParse an HTML file into tiddlers. There are three possibilities:\n# A TiddlyWiki classic HTML file containing `text/x-tiddlywiki` tiddlers\n# A TiddlyWiki5 HTML file containing `text/vnd.tiddlywiki` tiddlers\n# An ordinary HTML file\n*/\nexports[\"text/html\"] = function(text,fields) {\n\t// Check if we've got a store area\n\tvar storeAreaMarkerRegExp = /<div id=[\"']?storeArea['\"]?( style=[\"']?display:none;[\"']?)?>/gi,\n\t\tmatch = storeAreaMarkerRegExp.exec(text);\n\tif(match) {\n\t\t// If so, it's either a classic TiddlyWiki file or an unencrypted TW5 file\n\t\t// First read the normal tiddlers\n\t\tvar results = deserializeTiddlyWikiFile(text,storeAreaMarkerRegExp.lastIndex,!!match[1],fields);\n\t\t// Then any system tiddlers\n\t\tvar systemAreaMarkerRegExp = /<div id=[\"']?systemArea['\"]?( style=[\"']?display:none;[\"']?)?>/gi,\n\t\t\tsysMatch = systemAreaMarkerRegExp.exec(text);\n\t\tif(sysMatch) {\n\t\t\tresults.push.apply(results,deserializeTiddlyWikiFile(text,systemAreaMarkerRegExp.lastIndex,!!sysMatch[1],fields));\n\t\t}\n\t\treturn results;\n\t} else {\n\t\t// Check whether we've got an encrypted file\n\t\tvar encryptedStoreArea = $tw.utils.extractEncryptedStoreArea(text);\n\t\tif(encryptedStoreArea) {\n\t\t\t// If so, attempt to decrypt it using the current password\n\t\t\treturn $tw.utils.decryptStoreArea(encryptedStoreArea);\n\t\t} else {\n\t\t\t// It's not a TiddlyWiki so we'll return the entire HTML file as a tiddler\n\t\t\treturn deserializeHtmlFile(text,fields);\n\t\t}\n\t}\n};\n\nfunction deserializeHtmlFile(text,fields) {\n\tvar result = {};\n\t$tw.utils.each(fields,function(value,name) {\n\t\tresult[name] = value;\n\t});\n\tresult.text = text;\n\tresult.type = \"text/html\";\n\treturn [result];\n}\n\nfunction deserializeTiddlyWikiFile(text,storeAreaEnd,isTiddlyWiki5,fields) {\n\tvar results = [],\n\t\tendOfDivRegExp = /(<\\/div>\\s*)/gi,\n\t\tstartPos = storeAreaEnd,\n\t\tdefaultType = isTiddlyWiki5 ? undefined : \"text/x-tiddlywiki\";\n\tendOfDivRegExp.lastIndex = startPos;\n\tvar match = endOfDivRegExp.exec(text);\n\twhile(match) {\n\t\tvar endPos = endOfDivRegExp.lastIndex,\n\t\t\ttiddlerFields = parseTiddlerDiv(text.substring(startPos,endPos),fields,{type: defaultType});\n\t\tif(!tiddlerFields) {\n\t\t\tbreak;\n\t\t}\n\t\t$tw.utils.each(tiddlerFields,function(value,name) {\n\t\t\tif(typeof value === \"string\") {\n\t\t\t\ttiddlerFields[name] = $tw.utils.htmlDecode(value);\n\t\t\t}\n\t\t});\n\t\tif(tiddlerFields.text !== null) {\n\t\t\tresults.push(tiddlerFields);\n\t\t}\n\t\tstartPos = endPos;\n\t\tmatch = endOfDivRegExp.exec(text);\n\t}\n\treturn results;\n}\n\n})();\n",
"type": "application/javascript",
"module-type": "tiddlerdeserializer"
},
"$:/core/modules/editor/engines/framed.js": {
"title": "$:/core/modules/editor/engines/framed.js",
"text": "/*\\\ntitle: $:/core/modules/editor/engines/framed.js\ntype: application/javascript\nmodule-type: library\n\nText editor engine based on a simple input or textarea within an iframe. This is done so that the selection is preserved even when clicking away from the textarea\n\n\\*/\n(function(){\n\n/*jslint node: true,browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar HEIGHT_VALUE_TITLE = \"$:/config/TextEditor/EditorHeight/Height\";\n\nfunction FramedEngine(options) {\n\t// Save our options\n\toptions = options || {};\n\tthis.widget = options.widget;\n\tthis.value = options.value;\n\tthis.parentNode = options.parentNode;\n\tthis.nextSibling = options.nextSibling;\n\t// Create our hidden dummy text area for reading styles\n\tthis.dummyTextArea = this.widget.document.createElement(\"textarea\");\n\tif(this.widget.editClass) {\n\t\tthis.dummyTextArea.className = this.widget.editClass;\n\t}\n\tthis.dummyTextArea.setAttribute(\"hidden\",\"true\");\n\tthis.parentNode.insertBefore(this.dummyTextArea,this.nextSibling);\n\tthis.widget.domNodes.push(this.dummyTextArea);\n\t// Create the iframe\n\tthis.iframeNode = this.widget.document.createElement(\"iframe\");\n\tthis.parentNode.insertBefore(this.iframeNode,this.nextSibling);\n\tthis.iframeDoc = this.iframeNode.contentWindow.document;\n\t// (Firefox requires us to put some empty content in the iframe)\n\tthis.iframeDoc.open();\n\tthis.iframeDoc.write(\"\");\n\tthis.iframeDoc.close();\n\t// Style the iframe\n\tthis.iframeNode.className = this.dummyTextArea.className;\n\tthis.iframeNode.style.border = \"none\";\n\tthis.iframeNode.style.padding = \"0\";\n\tthis.iframeNode.style.resize = \"none\";\n\tthis.iframeNode.style[\"background-color\"] = this.widget.wiki.extractTiddlerDataItem(this.widget.wiki.getTiddlerText(\"$:/palette\"),\"tiddler-editor-background\");\n\tthis.iframeDoc.body.style.margin = \"0\";\n\tthis.iframeDoc.body.style.padding = \"0\";\n\tthis.widget.domNodes.push(this.iframeNode);\n\t// Construct the textarea or input node\n\tvar tag = this.widget.editTag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"input\";\n\t}\n\tthis.domNode = this.iframeDoc.createElement(tag);\n\t// Set the text\n\tif(this.widget.editTag === \"textarea\") {\n\t\tthis.domNode.appendChild(this.iframeDoc.createTextNode(this.value));\n\t} else {\n\t\tthis.domNode.value = this.value;\n\t}\n\t// Set the attributes\n\tif(this.widget.editType) {\n\t\tthis.domNode.setAttribute(\"type\",this.widget.editType);\n\t}\n\tif(this.widget.editPlaceholder) {\n\t\tthis.domNode.setAttribute(\"placeholder\",this.widget.editPlaceholder);\n\t}\n\tif(this.widget.editSize) {\n\t\tthis.domNode.setAttribute(\"size\",this.widget.editSize);\n\t}\n\tif(this.widget.editRows) {\n\t\tthis.domNode.setAttribute(\"rows\",this.widget.editRows);\n\t}\n\tif(this.widget.editTabIndex) {\n\t\tthis.iframeNode.setAttribute(\"tabindex\",this.widget.editTabIndex);\n\t}\n\t// Copy the styles from the dummy textarea\n\tthis.copyStyles();\n\t// Add event listeners\n\t$tw.utils.addEventListeners(this.domNode,[\n\t\t{name: \"click\",handlerObject: this,handlerMethod: \"handleClickEvent\"},\n\t\t{name: \"input\",handlerObject: this,handlerMethod: \"handleInputEvent\"},\n\t\t{name: \"keydown\",handlerObject: this.widget,handlerMethod: \"handleKeydownEvent\"}\n\t]);\n\t// Insert the element into the DOM\n\tthis.iframeDoc.body.appendChild(this.domNode);\n}\n\n/*\nCopy styles from the dummy text area to the textarea in the iframe\n*/\nFramedEngine.prototype.copyStyles = function() {\n\t// Copy all styles\n\t$tw.utils.copyStyles(this.dummyTextArea,this.domNode);\n\t// Override the ones that should not be set the same as the dummy textarea\n\tthis.domNode.style.display = \"block\";\n\tthis.domNode.style.width = \"100%\";\n\tthis.domNode.style.margin = \"0\";\n\tthis.domNode.style[\"background-color\"] = this.widget.wiki.extractTiddlerDataItem(this.widget.wiki.getTiddlerText(\"$:/palette\"),\"tiddler-editor-background\");\n\t// In Chrome setting -webkit-text-fill-color overrides the placeholder text colour\n\tthis.domNode.style[\"-webkit-text-fill-color\"] = \"currentcolor\";\n};\n\n/*\nSet the text of the engine if it doesn't currently have focus\n*/\nFramedEngine.prototype.setText = function(text,type) {\n\tif(!this.domNode.isTiddlyWikiFakeDom) {\n\t\tif(this.domNode.ownerDocument.activeElement !== this.domNode) {\n\t\t\tthis.domNode.value = text;\n\t\t}\n\t\t// Fix the height if needed\n\t\tthis.fixHeight();\n\t}\n};\n\n/*\nGet the text of the engine\n*/\nFramedEngine.prototype.getText = function() {\n\treturn this.domNode.value;\n};\n\n/*\nFix the height of textarea to fit content\n*/\nFramedEngine.prototype.fixHeight = function() {\n\t// Make sure styles are updated\n\tthis.copyStyles();\n\t// Adjust height\n\tif(this.widget.editTag === \"textarea\") {\n\t\tif(this.widget.editAutoHeight) {\n\t\t\tif(this.domNode && !this.domNode.isTiddlyWikiFakeDom) {\n\t\t\t\tvar newHeight = $tw.utils.resizeTextAreaToFit(this.domNode,this.widget.editMinHeight);\n\t\t\t\tthis.iframeNode.style.height = (newHeight + 14) + \"px\"; // +14 for the border on the textarea\n\t\t\t}\n\t\t} else {\n\t\t\tvar fixedHeight = parseInt(this.widget.wiki.getTiddlerText(HEIGHT_VALUE_TITLE,\"400px\"),10);\n\t\t\tfixedHeight = Math.max(fixedHeight,20);\n\t\t\tthis.domNode.style.height = fixedHeight + \"px\";\n\t\t\tthis.iframeNode.style.height = (fixedHeight + 14) + \"px\";\n\t\t}\n\t}\n};\n\n/*\nFocus the engine node\n*/\nFramedEngine.prototype.focus = function() {\n\tif(this.domNode.focus && this.domNode.select) {\n\t\tthis.domNode.focus();\n\t\tthis.domNode.select();\n\t}\n};\n\n/*\nHandle a click\n*/\nFramedEngine.prototype.handleClickEvent = function(event) {\n\tthis.fixHeight();\n\treturn true;\n};\n\n/*\nHandle a dom \"input\" event which occurs when the text has changed\n*/\nFramedEngine.prototype.handleInputEvent = function(event) {\n\tthis.widget.saveChanges(this.getText());\n\tthis.fixHeight();\n\treturn true;\n};\n\n/*\nCreate a blank structure representing a text operation\n*/\nFramedEngine.prototype.createTextOperation = function() {\n\tvar operation = {\n\t\ttext: this.domNode.value,\n\t\tselStart: this.domNode.selectionStart,\n\t\tselEnd: this.domNode.selectionEnd,\n\t\tcutStart: null,\n\t\tcutEnd: null,\n\t\treplacement: null,\n\t\tnewSelStart: null,\n\t\tnewSelEnd: null\n\t};\n\toperation.selection = operation.text.substring(operation.selStart,operation.selEnd);\n\treturn operation;\n};\n\n/*\nExecute a text operation\n*/\nFramedEngine.prototype.executeTextOperation = function(operation) {\n\t// Perform the required changes to the text area and the underlying tiddler\n\tvar newText = operation.text;\n\tif(operation.replacement !== null) {\n\t\tnewText = operation.text.substring(0,operation.cutStart) + operation.replacement + operation.text.substring(operation.cutEnd);\n\t\t// Attempt to use a execCommand to modify the value of the control\n\t\tif(this.iframeDoc.queryCommandSupported(\"insertText\") && this.iframeDoc.queryCommandSupported(\"delete\") && !$tw.browser.isFirefox) {\n\t\t\tthis.domNode.focus();\n\t\t\tthis.domNode.setSelectionRange(operation.cutStart,operation.cutEnd);\n\t\t\tif(operation.replacement === \"\") {\n\t\t\t\tthis.iframeDoc.execCommand(\"delete\",false,\"\");\n\t\t\t} else {\n\t\t\t\tthis.iframeDoc.execCommand(\"insertText\",false,operation.replacement);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.domNode.value = newText;\n\t\t}\n\t\tthis.domNode.focus();\n\t\tthis.domNode.setSelectionRange(operation.newSelStart,operation.newSelEnd);\n\t}\n\tthis.domNode.focus();\n\treturn newText;\n};\n\nexports.FramedEngine = FramedEngine;\n\n})();\n",
"type": "application/javascript",
"module-type": "library"
},
"$:/core/modules/editor/engines/simple.js": {
"title": "$:/core/modules/editor/engines/simple.js",
"text": "/*\\\ntitle: $:/core/modules/editor/engines/simple.js\ntype: application/javascript\nmodule-type: library\n\nText editor engine based on a simple input or textarea tag\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar HEIGHT_VALUE_TITLE = \"$:/config/TextEditor/EditorHeight/Height\";\n\nfunction SimpleEngine(options) {\n\t// Save our options\n\toptions = options || {};\n\tthis.widget = options.widget;\n\tthis.value = options.value;\n\tthis.parentNode = options.parentNode;\n\tthis.nextSibling = options.nextSibling;\n\t// Construct the textarea or input node\n\tvar tag = this.widget.editTag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"input\";\n\t}\n\tthis.domNode = this.widget.document.createElement(tag);\n\t// Set the text\n\tif(this.widget.editTag === \"textarea\") {\n\t\tthis.domNode.appendChild(this.widget.document.createTextNode(this.value));\n\t} else {\n\t\tthis.domNode.value = this.value;\n\t}\n\t// Set the attributes\n\tif(this.widget.editType) {\n\t\tthis.domNode.setAttribute(\"type\",this.widget.editType);\n\t}\n\tif(this.widget.editPlaceholder) {\n\t\tthis.domNode.setAttribute(\"placeholder\",this.widget.editPlaceholder);\n\t}\n\tif(this.widget.editSize) {\n\t\tthis.domNode.setAttribute(\"size\",this.widget.editSize);\n\t}\n\tif(this.widget.editRows) {\n\t\tthis.domNode.setAttribute(\"rows\",this.widget.editRows);\n\t}\n\tif(this.widget.editClass) {\n\t\tthis.domNode.className = this.widget.editClass;\n\t}\n\tif(this.widget.editTabIndex) {\n\t\tthis.domNode.setAttribute(\"tabindex\",this.widget.editTabIndex);\n\t}\n\t// Add an input event handler\n\t$tw.utils.addEventListeners(this.domNode,[\n\t\t{name: \"focus\", handlerObject: this, handlerMethod: \"handleFocusEvent\"},\n\t\t{name: \"input\", handlerObject: this, handlerMethod: \"handleInputEvent\"}\n\t]);\n\t// Insert the element into the DOM\n\tthis.parentNode.insertBefore(this.domNode,this.nextSibling);\n\tthis.widget.domNodes.push(this.domNode);\n}\n\n/*\nSet the text of the engine if it doesn't currently have focus\n*/\nSimpleEngine.prototype.setText = function(text,type) {\n\tif(!this.domNode.isTiddlyWikiFakeDom) {\n\t\tif(this.domNode.ownerDocument.activeElement !== this.domNode || text === \"\") {\n\t\t\tthis.domNode.value = text;\n\t\t}\n\t\t// Fix the height if needed\n\t\tthis.fixHeight();\n\t}\n};\n\n/*\nGet the text of the engine\n*/\nSimpleEngine.prototype.getText = function() {\n\treturn this.domNode.value;\n};\n\n/*\nFix the height of textarea to fit content\n*/\nSimpleEngine.prototype.fixHeight = function() {\n\tif(this.widget.editTag === \"textarea\") {\n\t\tif(this.widget.editAutoHeight) {\n\t\t\tif(this.domNode && !this.domNode.isTiddlyWikiFakeDom) {\n\t\t\t\t$tw.utils.resizeTextAreaToFit(this.domNode,this.widget.editMinHeight);\n\t\t\t}\n\t\t} else {\n\t\t\tvar fixedHeight = parseInt(this.widget.wiki.getTiddlerText(HEIGHT_VALUE_TITLE,\"400px\"),10);\n\t\t\tfixedHeight = Math.max(fixedHeight,20);\n\t\t\tthis.domNode.style.height = fixedHeight + \"px\";\n\t\t}\n\t}\n};\n\n/*\nFocus the engine node\n*/\nSimpleEngine.prototype.focus = function() {\n\tif(this.domNode.focus && this.domNode.select) {\n\t\tthis.domNode.focus();\n\t\tthis.domNode.select();\n\t}\n};\n\n/*\nHandle a dom \"input\" event which occurs when the text has changed\n*/\nSimpleEngine.prototype.handleInputEvent = function(event) {\n\tthis.widget.saveChanges(this.getText());\n\tthis.fixHeight();\n\treturn true;\n};\n\n/*\nHandle a dom \"focus\" event\n*/\nSimpleEngine.prototype.handleFocusEvent = function(event) {\n\tif(this.widget.editFocusPopup) {\n\t\t$tw.popup.triggerPopup({\n\t\t\tdomNode: this.domNode,\n\t\t\ttitle: this.widget.editFocusPopup,\n\t\t\twiki: this.widget.wiki,\n\t\t\tforce: true\n\t\t});\n\t}\n\treturn true;\n};\n\n/*\nCreate a blank structure representing a text operation\n*/\nSimpleEngine.prototype.createTextOperation = function() {\n\treturn null;\n};\n\n/*\nExecute a text operation\n*/\nSimpleEngine.prototype.executeTextOperation = function(operation) {\n};\n\nexports.SimpleEngine = SimpleEngine;\n\n})();\n",
"type": "application/javascript",
"module-type": "library"
},
"$:/core/modules/editor/factory.js": {
"title": "$:/core/modules/editor/factory.js",
"text": "/*\\\ntitle: $:/core/modules/editor/factory.js\ntype: application/javascript\nmodule-type: library\n\nFactory for constructing text editor widgets with specified engines for the toolbar and non-toolbar cases\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar DEFAULT_MIN_TEXT_AREA_HEIGHT = \"100px\"; // Minimum height of textareas in pixels\n\n// Configuration tiddlers\nvar HEIGHT_MODE_TITLE = \"$:/config/TextEditor/EditorHeight/Mode\";\nvar ENABLE_TOOLBAR_TITLE = \"$:/config/TextEditor/EnableToolbar\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nfunction editTextWidgetFactory(toolbarEngine,nonToolbarEngine) {\n\n\tvar EditTextWidget = function(parseTreeNode,options) {\n\t\t// Initialise the editor operations if they've not been done already\n\t\tif(!this.editorOperations) {\n\t\t\tEditTextWidget.prototype.editorOperations = {};\n\t\t\t$tw.modules.applyMethods(\"texteditoroperation\",this.editorOperations);\n\t\t}\n\t\tthis.initialise(parseTreeNode,options);\n\t};\n\n\t/*\n\tInherit from the base widget class\n\t*/\n\tEditTextWidget.prototype = new Widget();\n\n\t/*\n\tRender this widget into the DOM\n\t*/\n\tEditTextWidget.prototype.render = function(parent,nextSibling) {\n\t\t// Save the parent dom node\n\t\tthis.parentDomNode = parent;\n\t\t// Compute our attributes\n\t\tthis.computeAttributes();\n\t\t// Execute our logic\n\t\tthis.execute();\n\t\t// Create the wrapper for the toolbar and render its content\n\t\tif(this.editShowToolbar) {\n\t\t\tthis.toolbarNode = this.document.createElement(\"div\");\n\t\t\tthis.toolbarNode.className = \"tc-editor-toolbar\";\n\t\t\tparent.insertBefore(this.toolbarNode,nextSibling);\n\t\t\tthis.renderChildren(this.toolbarNode,null);\n\t\t\tthis.domNodes.push(this.toolbarNode);\n\t\t}\n\t\t// Create our element\n\t\tvar editInfo = this.getEditInfo(),\n\t\t\tEngine = this.editShowToolbar ? toolbarEngine : nonToolbarEngine;\n\t\tthis.engine = new Engine({\n\t\t\t\twidget: this,\n\t\t\t\tvalue: editInfo.value,\n\t\t\t\ttype: editInfo.type,\n\t\t\t\tparentNode: parent,\n\t\t\t\tnextSibling: nextSibling\n\t\t\t});\n\t\t// Call the postRender hook\n\t\tif(this.postRender) {\n\t\t\tthis.postRender();\n\t\t}\n\t\t// Fix height\n\t\tthis.engine.fixHeight();\n\t\t// Focus if required\n\t\tif(this.editFocus === \"true\" || this.editFocus === \"yes\") {\n\t\t\tthis.engine.focus();\n\t\t}\n\t\t// Add widget message listeners\n\t\tthis.addEventListeners([\n\t\t\t{type: \"tm-edit-text-operation\", handler: \"handleEditTextOperationMessage\"}\n\t\t]);\n\t};\n\n\t/*\n\tGet the tiddler being edited and current value\n\t*/\n\tEditTextWidget.prototype.getEditInfo = function() {\n\t\t// Get the edit value\n\t\tvar self = this,\n\t\t\tvalue,\n\t\t\ttype = \"text/plain\",\n\t\t\tupdate;\n\t\tif(this.editIndex) {\n\t\t\tvalue = this.wiki.extractTiddlerDataItem(this.editTitle,this.editIndex,this.editDefault);\n\t\t\tupdate = function(value) {\n\t\t\t\tvar data = self.wiki.getTiddlerData(self.editTitle,{});\n\t\t\t\tif(data[self.editIndex] !== value) {\n\t\t\t\t\tdata[self.editIndex] = value;\n\t\t\t\t\tself.wiki.setTiddlerData(self.editTitle,data);\n\t\t\t\t}\n\t\t\t};\n\t\t} else {\n\t\t\t// Get the current tiddler and the field name\n\t\t\tvar tiddler = this.wiki.getTiddler(this.editTitle);\n\t\t\tif(tiddler) {\n\t\t\t\t// If we've got a tiddler, the value to display is the field string value\n\t\t\t\tvalue = tiddler.getFieldString(this.editField);\n\t\t\t\tif(this.editField === \"text\") {\n\t\t\t\t\ttype = tiddler.fields.type || \"text/vnd.tiddlywiki\";\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Otherwise, we need to construct a default value for the editor\n\t\t\t\tswitch(this.editField) {\n\t\t\t\t\tcase \"text\":\n\t\t\t\t\t\tvalue = \"Type the text for the tiddler '\" + this.editTitle + \"'\";\n\t\t\t\t\t\ttype = \"text/vnd.tiddlywiki\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"title\":\n\t\t\t\t\t\tvalue = this.editTitle;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tvalue = \"\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif(this.editDefault !== undefined) {\n\t\t\t\t\tvalue = this.editDefault;\n\t\t\t\t}\n\t\t\t}\n\t\t\tupdate = function(value) {\n\t\t\t\tvar tiddler = self.wiki.getTiddler(self.editTitle),\n\t\t\t\t\tupdateFields = {\n\t\t\t\t\t\ttitle: self.editTitle\n\t\t\t\t\t};\n\t\t\t\tupdateFields[self.editField] = value;\n\t\t\t\tself.wiki.addTiddler(new $tw.Tiddler(self.wiki.getCreationFields(),tiddler,updateFields,self.wiki.getModificationFields()));\n\t\t\t};\n\t\t}\n\t\tif(this.editType) {\n\t\t\ttype = this.editType;\n\t\t}\n\t\treturn {value: value || \"\", type: type, update: update};\n\t};\n\n\t/*\n\tHandle an edit text operation message from the toolbar\n\t*/\n\tEditTextWidget.prototype.handleEditTextOperationMessage = function(event) {\n\t\t// Prepare information about the operation\n\t\tvar operation = this.engine.createTextOperation();\n\t\t// Invoke the handler for the selected operation\n\t\tvar handler = this.editorOperations[event.param];\n\t\tif(handler) {\n\t\t\thandler.call(this,event,operation);\n\t\t}\n\t\t// Execute the operation via the engine\n\t\tvar newText = this.engine.executeTextOperation(operation);\n\t\t// Fix the tiddler height and save changes\n\t\tthis.engine.fixHeight();\n\t\tthis.saveChanges(newText);\n\t};\n\n\t/*\n\tCompute the internal state of the widget\n\t*/\n\tEditTextWidget.prototype.execute = function() {\n\t\t// Get our parameters\n\t\tthis.editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t\tthis.editField = this.getAttribute(\"field\",\"text\");\n\t\tthis.editIndex = this.getAttribute(\"index\");\n\t\tthis.editDefault = this.getAttribute(\"default\");\n\t\tthis.editClass = this.getAttribute(\"class\");\n\t\tthis.editPlaceholder = this.getAttribute(\"placeholder\");\n\t\tthis.editSize = this.getAttribute(\"size\");\n\t\tthis.editRows = this.getAttribute(\"rows\");\n\t\tthis.editAutoHeight = this.wiki.getTiddlerText(HEIGHT_MODE_TITLE,\"auto\");\n\t\tthis.editAutoHeight = this.getAttribute(\"autoHeight\",this.editAutoHeight === \"auto\" ? \"yes\" : \"no\") === \"yes\";\n\t\tthis.editMinHeight = this.getAttribute(\"minHeight\",DEFAULT_MIN_TEXT_AREA_HEIGHT);\n\t\tthis.editFocusPopup = this.getAttribute(\"focusPopup\");\n\t\tthis.editFocus = this.getAttribute(\"focus\");\n\t\tthis.editTabIndex = this.getAttribute(\"tabindex\");\n\t\t// Get the default editor element tag and type\n\t\tvar tag,type;\n\t\tif(this.editField === \"text\") {\n\t\t\ttag = \"textarea\";\n\t\t} else {\n\t\t\ttag = \"input\";\n\t\t\tvar fieldModule = $tw.Tiddler.fieldModules[this.editField];\n\t\t\tif(fieldModule && fieldModule.editTag) {\n\t\t\t\ttag = fieldModule.editTag;\n\t\t\t}\n\t\t\tif(fieldModule && fieldModule.editType) {\n\t\t\t\ttype = fieldModule.editType;\n\t\t\t}\n\t\t\ttype = type || \"text\";\n\t\t}\n\t\t// Get the rest of our parameters\n\t\tthis.editTag = this.getAttribute(\"tag\",tag) || \"input\";\n\t\tthis.editType = this.getAttribute(\"type\",type);\n\t\t// Make the child widgets\n\t\tthis.makeChildWidgets();\n\t\t// Determine whether to show the toolbar\n\t\tthis.editShowToolbar = this.wiki.getTiddlerText(ENABLE_TOOLBAR_TITLE,\"yes\");\n\t\tthis.editShowToolbar = (this.editShowToolbar === \"yes\") && !!(this.children && this.children.length > 0) && (!this.document.isTiddlyWikiFakeDom);\n\t};\n\n\t/*\n\tSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n\t*/\n\tEditTextWidget.prototype.refresh = function(changedTiddlers) {\n\t\tvar changedAttributes = this.computeAttributes();\n\t\t// Completely rerender if any of our attributes have changed\n\t\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes[\"default\"] || changedAttributes[\"class\"] || changedAttributes.placeholder || changedAttributes.size || changedAttributes.autoHeight || changedAttributes.minHeight || changedAttributes.focusPopup || changedAttributes.rows || changedAttributes.tabindex || changedTiddlers[HEIGHT_MODE_TITLE] || changedTiddlers[ENABLE_TOOLBAR_TITLE]) {\n\t\t\tthis.refreshSelf();\n\t\t\treturn true;\n\t\t} else if(changedTiddlers[this.editTitle]) {\n\t\t\tvar editInfo = this.getEditInfo();\n\t\t\tthis.updateEditor(editInfo.value,editInfo.type);\n\t\t}\n\t\tthis.engine.fixHeight();\n\t\tif(this.editShowToolbar) {\n\t\t\treturn this.refreshChildren(changedTiddlers);\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\t/*\n\tUpdate the editor with new text. This method is separate from updateEditorDomNode()\n\tso that subclasses can override updateEditor() and still use updateEditorDomNode()\n\t*/\n\tEditTextWidget.prototype.updateEditor = function(text,type) {\n\t\tthis.updateEditorDomNode(text,type);\n\t};\n\n\t/*\n\tUpdate the editor dom node with new text\n\t*/\n\tEditTextWidget.prototype.updateEditorDomNode = function(text,type) {\n\t\tthis.engine.setText(text,type);\n\t};\n\n\t/*\n\tSave changes back to the tiddler store\n\t*/\n\tEditTextWidget.prototype.saveChanges = function(text) {\n\t\tvar editInfo = this.getEditInfo();\n\t\tif(text !== editInfo.value) {\n\t\t\teditInfo.update(text);\n\t\t}\n\t};\n\n\t/*\n\tHandle a dom \"keydown\" event, which we'll bubble up to our container for the keyboard widgets benefit\n\t*/\n\tEditTextWidget.prototype.handleKeydownEvent = function(event) {\n\t\t// Check for a keyboard shortcut\n\t\tif(this.toolbarNode) {\n\t\t\tvar shortcutElements = this.toolbarNode.querySelectorAll(\"[data-tw-keyboard-shortcut]\");\n\t\t\tfor(var index=0; index<shortcutElements.length; index++) {\n\t\t\t\tvar el = shortcutElements[index],\n\t\t\t\t\tshortcutData = el.getAttribute(\"data-tw-keyboard-shortcut\"),\n\t\t\t\t\tkeyInfoArray = $tw.keyboardManager.parseKeyDescriptors(shortcutData,{\n\t\t\t\t\t\twiki: this.wiki\n\t\t\t\t\t});\n\t\t\t\tif($tw.keyboardManager.checkKeyDescriptors(event,keyInfoArray)) {\n\t\t\t\t\tvar clickEvent = this.document.createEvent(\"Events\");\n\t\t\t\t clickEvent.initEvent(\"click\",true,false);\n\t\t\t\t el.dispatchEvent(clickEvent);\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// Propogate the event to the container\n\t\tif(this.propogateKeydownEvent(event)) {\n\t\t\t// Ignore the keydown if it was already handled\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\treturn true;\n\t\t}\n\t\t// Otherwise, process the keydown normally\n\t\treturn false;\n\t};\n\n\t/*\n\tPropogate keydown events to our container for the keyboard widgets benefit\n\t*/\n\tEditTextWidget.prototype.propogateKeydownEvent = function(event) {\n\t\tvar newEvent = this.document.createEventObject ? this.document.createEventObject() : this.document.createEvent(\"Events\");\n\t\tif(newEvent.initEvent) {\n\t\t\tnewEvent.initEvent(\"keydown\", true, true);\n\t\t}\n\t\tnewEvent.keyCode = event.keyCode;\n\t\tnewEvent.which = event.which;\n\t\tnewEvent.metaKey = event.metaKey;\n\t\tnewEvent.ctrlKey = event.ctrlKey;\n\t\tnewEvent.altKey = event.altKey;\n\t\tnewEvent.shiftKey = event.shiftKey;\n\t\treturn !this.parentDomNode.dispatchEvent(newEvent);\n\t};\n\n\treturn EditTextWidget;\n\n}\n\nexports.editTextWidgetFactory = editTextWidgetFactory;\n\n})();\n",
"type": "application/javascript",
"module-type": "library"
},
"$:/core/modules/editor/operations/bitmap/clear.js": {
"title": "$:/core/modules/editor/operations/bitmap/clear.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/bitmap/clear.js\ntype: application/javascript\nmodule-type: bitmapeditoroperation\n\nBitmap editor operation to clear the image\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"clear\"] = function(event) {\n\tvar ctx = this.canvasDomNode.getContext(\"2d\");\n\tctx.globalAlpha = 1;\n\tctx.fillStyle = event.paramObject.colour || \"white\";\n\tctx.fillRect(0,0,this.canvasDomNode.width,this.canvasDomNode.height);\n\t// Save changes\n\tthis.strokeEnd();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "bitmapeditoroperation"
},
"$:/core/modules/editor/operations/bitmap/resize.js": {
"title": "$:/core/modules/editor/operations/bitmap/resize.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/bitmap/resize.js\ntype: application/javascript\nmodule-type: bitmapeditoroperation\n\nBitmap editor operation to resize the image\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"resize\"] = function(event) {\n\t// Get the new width\n\tvar newWidth = parseInt(event.paramObject.width || this.canvasDomNode.width,10),\n\t\tnewHeight = parseInt(event.paramObject.height || this.canvasDomNode.height,10);\n\t// Update if necessary\n\tif(newWidth > 0 && newHeight > 0 && !(newWidth === this.currCanvas.width && newHeight === this.currCanvas.height)) {\n\t\tthis.changeCanvasSize(newWidth,newHeight);\n\t}\n\t// Update the input controls\n\tthis.refreshToolbar();\n\t// Save the image into the tiddler\n\tthis.saveChanges();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "bitmapeditoroperation"
},
"$:/core/modules/editor/operations/bitmap/rotate-left.js": {
"title": "$:/core/modules/editor/operations/bitmap/rotate-left.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/bitmap/rotate-left.js\ntype: application/javascript\nmodule-type: bitmapeditoroperation\n\nBitmap editor operation to rotate the image left by 90 degrees\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"rotate-left\"] = function(event) {\n\t// Rotate the canvas left by 90 degrees\n\tthis.rotateCanvasLeft();\n\t// Update the input controls\n\tthis.refreshToolbar();\n\t// Save the image into the tiddler\n\tthis.saveChanges();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "bitmapeditoroperation"
},
"$:/core/modules/editor/operations/text/excise.js": {
"title": "$:/core/modules/editor/operations/text/excise.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/excise.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to excise the selection to a new tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"excise\"] = function(event,operation) {\n\tvar editTiddler = this.wiki.getTiddler(this.editTitle),\n\t\teditTiddlerTitle = this.editTitle;\n\tif(editTiddler && editTiddler.fields[\"draft.of\"]) {\n\t\teditTiddlerTitle = editTiddler.fields[\"draft.of\"];\n\t}\n\tvar excisionTitle = event.paramObject.title || this.wiki.generateNewTitle(\"New Excision\");\n\tthis.wiki.addTiddler(new $tw.Tiddler(\n\t\tthis.wiki.getCreationFields(),\n\t\tthis.wiki.getModificationFields(),\n\t\t{\n\t\t\ttitle: excisionTitle,\n\t\t\ttext: operation.selection,\n\t\t\ttags: event.paramObject.tagnew === \"yes\" ? [editTiddlerTitle] : []\n\t\t}\n\t));\n\toperation.replacement = excisionTitle;\n\tswitch(event.paramObject.type || \"transclude\") {\n\t\tcase \"transclude\":\n\t\t\toperation.replacement = \"{{\" + operation.replacement+ \"}}\";\n\t\t\tbreak;\n\t\tcase \"link\":\n\t\t\toperation.replacement = \"[[\" + operation.replacement+ \"]]\";\n\t\t\tbreak;\n\t\tcase \"macro\":\n\t\t\toperation.replacement = \"<<\" + (event.paramObject.macro || \"translink\") + \" \\\"\\\"\\\"\" + operation.replacement + \"\\\"\\\"\\\">>\";\n\t\t\tbreak;\n\t}\n\toperation.cutStart = operation.selStart;\n\toperation.cutEnd = operation.selEnd;\n\toperation.newSelStart = operation.selStart;\n\toperation.newSelEnd = operation.selStart + operation.replacement.length;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/editor/operations/text/make-link.js": {
"title": "$:/core/modules/editor/operations/text/make-link.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/make-link.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to make a link\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"make-link\"] = function(event,operation) {\n\tif(operation.selection) {\n\t\toperation.replacement = \"[[\" + operation.selection + \"|\" + event.paramObject.text + \"]]\";\n\t\toperation.cutStart = operation.selStart;\n\t\toperation.cutEnd = operation.selEnd;\n\t} else {\n\t\toperation.replacement = \"[[\" + event.paramObject.text + \"]]\";\n\t\toperation.cutStart = operation.selStart;\n\t\toperation.cutEnd = operation.selEnd;\n\t}\n\toperation.newSelStart = operation.selStart + operation.replacement.length;\n\toperation.newSelEnd = operation.newSelStart;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/editor/operations/text/prefix-lines.js": {
"title": "$:/core/modules/editor/operations/text/prefix-lines.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/prefix-lines.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to add a prefix to the selected lines\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"prefix-lines\"] = function(event,operation) {\n\tvar targetCount = parseInt(event.paramObject.count + \"\",10);\n\t// Cut just past the preceding line break, or the start of the text\n\toperation.cutStart = $tw.utils.findPrecedingLineBreak(operation.text,operation.selStart);\n\t// Cut to just past the following line break, or to the end of the text\n\toperation.cutEnd = $tw.utils.findFollowingLineBreak(operation.text,operation.selEnd);\n\t// Compose the required prefix\n\tvar prefix = $tw.utils.repeat(event.paramObject.character,targetCount);\n\t// Process each line\n\tvar lines = operation.text.substring(operation.cutStart,operation.cutEnd).split(/\\r?\\n/mg);\n\t$tw.utils.each(lines,function(line,index) {\n\t\t// Remove and count any existing prefix characters\n\t\tvar count = 0;\n\t\twhile(line.charAt(0) === event.paramObject.character) {\n\t\t\tline = line.substring(1);\n\t\t\tcount++;\n\t\t}\n\t\t// Remove any whitespace\n\t\twhile(line.charAt(0) === \" \") {\n\t\t\tline = line.substring(1);\n\t\t}\n\t\t// We're done if we removed the exact required prefix, otherwise add it\n\t\tif(count !== targetCount) {\n\t\t\t// Apply the prefix\n\t\t\tline = prefix + \" \" + line;\n\t\t}\n\t\t// Save the modified line\n\t\tlines[index] = line;\n\t});\n\t// Stitch the replacement text together and set the selection\n\toperation.replacement = lines.join(\"\\n\");\n\tif(lines.length === 1) {\n\t\toperation.newSelStart = operation.cutStart + operation.replacement.length;\n\t\toperation.newSelEnd = operation.newSelStart;\n\t} else {\n\t\toperation.newSelStart = operation.cutStart;\n\t\toperation.newSelEnd = operation.newSelStart + operation.replacement.length;\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/editor/operations/text/replace-all.js": {
"title": "$:/core/modules/editor/operations/text/replace-all.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/replace-all.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to replace the entire text\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"replace-all\"] = function(event,operation) {\n\toperation.cutStart = 0;\n\toperation.cutEnd = operation.text.length;\n\toperation.replacement = event.paramObject.text;\n\toperation.newSelStart = 0;\n\toperation.newSelEnd = operation.replacement.length;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/editor/operations/text/replace-selection.js": {
"title": "$:/core/modules/editor/operations/text/replace-selection.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/replace-selection.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to replace the selection\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"replace-selection\"] = function(event,operation) {\n\toperation.replacement = event.paramObject.text;\n\toperation.cutStart = operation.selStart;\n\toperation.cutEnd = operation.selEnd;\n\toperation.newSelStart = operation.selStart;\n\toperation.newSelEnd = operation.selStart + operation.replacement.length;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/editor/operations/text/save-selection.js": {
"title": "$:/core/modules/editor/operations/text/save-selection.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/save-selection.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to save the current selection in a specified tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"save-selection\"] = function(event,operation) {\n\tvar tiddler = event.paramObject.tiddler,\n\t\tfield = event.paramObject.field || \"text\";\n\tif(tiddler && field) {\n\t\tthis.wiki.setText(tiddler,field,null,operation.text.substring(operation.selStart,operation.selEnd));\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/editor/operations/text/wrap-lines.js": {
"title": "$:/core/modules/editor/operations/text/wrap-lines.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/wrap-lines.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to wrap the selected lines with a prefix and suffix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"wrap-lines\"] = function(event,operation) {\n\t// Cut just past the preceding line break, or the start of the text\n\toperation.cutStart = $tw.utils.findPrecedingLineBreak(operation.text,operation.selStart);\n\t// Cut to just past the following line break, or to the end of the text\n\toperation.cutEnd = $tw.utils.findFollowingLineBreak(operation.text,operation.selEnd);\n\t// Add the prefix and suffix\n\toperation.replacement = event.paramObject.prefix + \"\\n\" +\n\t\t\t\toperation.text.substring(operation.cutStart,operation.cutEnd) + \"\\n\" +\n\t\t\t\tevent.paramObject.suffix + \"\\n\";\n\toperation.newSelStart = operation.cutStart + event.paramObject.prefix.length + 1;\n\toperation.newSelEnd = operation.newSelStart + (operation.cutEnd - operation.cutStart);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/editor/operations/text/wrap-selection.js": {
"title": "$:/core/modules/editor/operations/text/wrap-selection.js",
"text": "/*\\\ntitle: $:/core/modules/editor/operations/text/wrap-selection.js\ntype: application/javascript\nmodule-type: texteditoroperation\n\nText editor operation to wrap the selection with the specified prefix and suffix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports[\"wrap-selection\"] = function(event,operation) {\n\tif(operation.selStart === operation.selEnd) {\n\t\t// No selection; check if we're within the prefix/suffix\n\t\tif(operation.text.substring(operation.selStart - event.paramObject.prefix.length,operation.selStart + event.paramObject.suffix.length) === event.paramObject.prefix + event.paramObject.suffix) {\n\t\t\t// Remove the prefix and suffix\n\t\t\toperation.cutStart = operation.selStart - event.paramObject.prefix.length;\n\t\t\toperation.cutEnd = operation.selEnd + event.paramObject.suffix.length;\n\t\t\toperation.replacement = \"\";\n\t\t\toperation.newSelStart = operation.cutStart;\n\t\t\toperation.newSelEnd = operation.newSelStart;\n\t\t} else {\n\t\t\t// Wrap the cursor instead\n\t\t\toperation.cutStart = operation.selStart;\n\t\t\toperation.cutEnd = operation.selEnd;\n\t\t\toperation.replacement = event.paramObject.prefix + event.paramObject.suffix;\n\t\t\toperation.newSelStart = operation.selStart + event.paramObject.prefix.length;\n\t\t\toperation.newSelEnd = operation.newSelStart;\n\t\t}\n\t} else if(operation.text.substring(operation.selStart,operation.selStart + event.paramObject.prefix.length) === event.paramObject.prefix && operation.text.substring(operation.selEnd - event.paramObject.suffix.length,operation.selEnd) === event.paramObject.suffix) {\n\t\t// Prefix and suffix are already present, so remove them\n\t\toperation.cutStart = operation.selStart;\n\t\toperation.cutEnd = operation.selEnd;\n\t\toperation.replacement = operation.selection.substring(event.paramObject.prefix.length,operation.selection.length - event.paramObject.suffix.length);\n\t\toperation.newSelStart = operation.selStart;\n\t\toperation.newSelEnd = operation.selStart + operation.replacement.length;\n\t} else {\n\t\t// Add the prefix and suffix\n\t\toperation.cutStart = operation.selStart;\n\t\toperation.cutEnd = operation.selEnd;\n\t\toperation.replacement = event.paramObject.prefix + operation.selection + event.paramObject.suffix;\n\t\toperation.newSelStart = operation.selStart;\n\t\toperation.newSelEnd = operation.selStart + operation.replacement.length;\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "texteditoroperation"
},
"$:/core/modules/filters/addprefix.js": {
"title": "$:/core/modules/filters/addprefix.js",
"text": "/*\\\ntitle: $:/core/modules/filters/addprefix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for adding a prefix to each title in the list. This is\nespecially useful in contexts where only a filter expression is allowed\nand macro substitution isn't available.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.addprefix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(operator.operand + title);\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/addsuffix.js": {
"title": "$:/core/modules/filters/addsuffix.js",
"text": "/*\\\ntitle: $:/core/modules/filters/addsuffix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for adding a suffix to each title in the list. This is\nespecially useful in contexts where only a filter expression is allowed\nand macro substitution isn't available.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.addsuffix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title + operator.operand);\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/after.js": {
"title": "$:/core/modules/filters/after.js",
"text": "/*\\\ntitle: $:/core/modules/filters/after.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler from the current list that is after the tiddler named in the operand.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.after = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\tvar index = results.indexOf(operator.operand);\n\tif(index === -1 || index > (results.length - 2)) {\n\t\treturn [];\n\t} else {\n\t\treturn [results[index + 1]];\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/all/current.js": {
"title": "$:/core/modules/filters/all/current.js",
"text": "/*\\\ntitle: $:/core/modules/filters/all/current.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[current]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.current = function(source,prefix,options) {\n\tvar currTiddlerTitle = options.widget && options.widget.getVariable(\"currentTiddler\");\n\tif(currTiddlerTitle) {\n\t\treturn [currTiddlerTitle];\n\t} else {\n\t\treturn [];\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "allfilteroperator"
},
"$:/core/modules/filters/all/missing.js": {
"title": "$:/core/modules/filters/all/missing.js",
"text": "/*\\\ntitle: $:/core/modules/filters/all/missing.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[missing]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.missing = function(source,prefix,options) {\n\treturn options.wiki.getMissingTitles();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "allfilteroperator"
},
"$:/core/modules/filters/all/orphans.js": {
"title": "$:/core/modules/filters/all/orphans.js",
"text": "/*\\\ntitle: $:/core/modules/filters/all/orphans.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[orphans]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.orphans = function(source,prefix,options) {\n\treturn options.wiki.getOrphanTitles();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "allfilteroperator"
},
"$:/core/modules/filters/all/shadows.js": {
"title": "$:/core/modules/filters/all/shadows.js",
"text": "/*\\\ntitle: $:/core/modules/filters/all/shadows.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[shadows]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.shadows = function(source,prefix,options) {\n\treturn options.wiki.allShadowTitles();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "allfilteroperator"
},
"$:/core/modules/filters/all/tags.js": {
"title": "$:/core/modules/filters/all/tags.js",
"text": "/*\\\ntitle: $:/core/modules/filters/all/tags.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[tags]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tags = function(source,prefix,options) {\n\treturn Object.keys(options.wiki.getTagMap());\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "allfilteroperator"
},
"$:/core/modules/filters/all/tiddlers.js": {
"title": "$:/core/modules/filters/all/tiddlers.js",
"text": "/*\\\ntitle: $:/core/modules/filters/all/tiddlers.js\ntype: application/javascript\nmodule-type: allfilteroperator\n\nFilter function for [all[tiddlers]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tiddlers = function(source,prefix,options) {\n\treturn options.wiki.allTitles();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "allfilteroperator"
},
"$:/core/modules/filters/all.js": {
"title": "$:/core/modules/filters/all.js",
"text": "/*\\\ntitle: $:/core/modules/filters/all.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for selecting tiddlers\n\n[all[shadows+tiddlers]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar allFilterOperators;\n\nfunction getAllFilterOperators() {\n\tif(!allFilterOperators) {\n\t\tallFilterOperators = {};\n\t\t$tw.modules.applyMethods(\"allfilteroperator\",allFilterOperators);\n\t}\n\treturn allFilterOperators;\n}\n\n/*\nExport our filter function\n*/\nexports.all = function(source,operator,options) {\n\t// Get our suboperators\n\tvar allFilterOperators = getAllFilterOperators();\n\t// Cycle through the suboperators accumulating their results\n\tvar results = [],\n\t\tsubops = operator.operand.split(\"+\");\n\t// Check for common optimisations\n\tif(subops.length === 1 && subops[0] === \"\") {\n\t\treturn source;\n\t} else if(subops.length === 1 && subops[0] === \"tiddlers\") {\n\t\treturn options.wiki.each;\n\t} else if(subops.length === 1 && subops[0] === \"shadows\") {\n\t\treturn options.wiki.eachShadow;\n\t} else if(subops.length === 2 && subops[0] === \"tiddlers\" && subops[1] === \"shadows\") {\n\t\treturn options.wiki.eachTiddlerPlusShadows;\n\t} else if(subops.length === 2 && subops[0] === \"shadows\" && subops[1] === \"tiddlers\") {\n\t\treturn options.wiki.eachShadowPlusTiddlers;\n\t}\n\t// Do it the hard way\n\tfor(var t=0; t<subops.length; t++) {\n\t\tvar subop = allFilterOperators[subops[t]];\n\t\tif(subop) {\n\t\t\t$tw.utils.pushTop(results,subop(source,operator.prefix,options));\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/backlinks.js": {
"title": "$:/core/modules/filters/backlinks.js",
"text": "/*\\\ntitle: $:/core/modules/filters/backlinks.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning all the backlinks from a tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.backlinks = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.pushTop(results,options.wiki.getTiddlerBacklinks(title));\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/before.js": {
"title": "$:/core/modules/filters/before.js",
"text": "/*\\\ntitle: $:/core/modules/filters/before.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler from the current list that is before the tiddler named in the operand.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.before = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\tvar index = results.indexOf(operator.operand);\n\tif(index <= 0) {\n\t\treturn [];\n\t} else {\n\t\treturn [results[index - 1]];\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/commands.js": {
"title": "$:/core/modules/filters/commands.js",
"text": "/*\\\ntitle: $:/core/modules/filters/commands.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the commands available in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.commands = function(source,operator,options) {\n\tvar results = [];\n\t$tw.utils.each($tw.commands,function(commandInfo,name) {\n\t\tresults.push(name);\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/compare.js": {
"title": "$:/core/modules/filters/compare.js",
"text": "/*\\\ntitle: $:/core/modules/filters/compare.js\ntype: application/javascript\nmodule-type: filteroperator\n\nGeneral purpose comparison operator\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.compare = function(source,operator,options) {\n\tvar suffixes = operator.suffixes || [],\n\t\ttype = (suffixes[0] || [])[0],\n\t\tmode = (suffixes[1] || [])[0],\n\t\ttypeFn = types[type] || types.number,\n\t\tmodeFn = modes[mode] || modes.eq,\n\t\tinvert = operator.prefix === \"!\",\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tif(modeFn(typeFn(title,operator.operand)) !== invert) {\n\t\t\tresults.push(title);\n\t\t}\n\t});\n\treturn results;\n};\n\nvar types = {\n\t\"number\": function(a,b) {\n\t\treturn compare($tw.utils.parseNumber(a),$tw.utils.parseNumber(b));\n\t},\n\t\"integer\": function(a,b) {\n\t\treturn compare($tw.utils.parseInt(a),$tw.utils.parseInt(b));\n\t},\n\t\"string\": function(a,b) {\n\t\treturn compare(\"\" + a,\"\" +b);\n\t},\n\t\"date\": function(a,b) {\n\t\tvar dateA = $tw.utils.parseDate(a),\n\t\t\tdateB = $tw.utils.parseDate(b);\n\t\tif(!isFinite(dateA)) {\n\t\t\tdateA = new Date(0);\n\t\t}\n\t\tif(!isFinite(dateB)) {\n\t\t\tdateB = new Date(0);\n\t\t}\n\t\treturn compare(dateA,dateB);\n\t},\n\t\"version\": function(a,b) {\n\t\treturn $tw.utils.compareVersions(a,b);\n\t}\n};\n\nfunction compare(a,b) {\n\tif(a > b) {\n\t\treturn +1;\n\t} else if(a < b) {\n\t\treturn -1;\n\t} else {\n\t\treturn 0;\n\t}\n};\n\nvar modes = {\n\t\"eq\": function(value) {return value === 0;},\n\t\"ne\": function(value) {return value !== 0;},\n\t\"gteq\": function(value) {return value >= 0;},\n\t\"gt\": function(value) {return value > 0;},\n\t\"lteq\": function(value) {return value <= 0;},\n\t\"lt\": function(value) {return value < 0;}\n}\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/contains.js": {
"title": "$:/core/modules/filters/contains.js",
"text": "/*\\\ntitle: $:/core/modules/filters/contains.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for finding values in array fields\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.contains = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldname = (operator.suffix || \"list\").toLowerCase();\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler) {\n\t\t\t\tvar list = tiddler.getFieldList(fieldname);\n\t\t\t\tif(list.indexOf(operator.operand) === -1) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler) {\n\t\t\t\tvar list = tiddler.getFieldList(fieldname);\n\t\t\t\tif(list.indexOf(operator.operand) !== -1) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/count.js": {
"title": "$:/core/modules/filters/count.js",
"text": "/*\\\ntitle: $:/core/modules/filters/count.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the number of entries in the current list.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.count = function(source,operator,options) {\n\tvar count = 0;\n\tsource(function(tiddler,title) {\n\t\tcount++;\n\t});\n\treturn [count + \"\"];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/days.js": {
"title": "$:/core/modules/filters/days.js",
"text": "/*\\\ntitle: $:/core/modules/filters/days.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects tiddlers with a specified date field within a specified date interval.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.days = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldName = operator.suffix || \"modified\",\n\t\tdayInterval = (parseInt(operator.operand,10)||0),\n\t\tdayIntervalSign = $tw.utils.sign(dayInterval),\n\t\ttargetTimeStamp = (new Date()).setHours(0,0,0,0) + 1000*60*60*24*dayInterval,\n\t\tisWithinDays = function(dateField) {\n\t\t\tvar sign = $tw.utils.sign(targetTimeStamp - (new Date(dateField)).setHours(0,0,0,0));\n\t\t\treturn sign === 0 || sign === dayIntervalSign;\n\t\t};\n\n\tif(operator.prefix === \"!\") {\n\t\ttargetTimeStamp = targetTimeStamp - 1000*60*60*24*dayIntervalSign;\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && tiddler.fields[fieldName]) {\n\t\t\t\tif(!isWithinDays($tw.utils.parseDate(tiddler.fields[fieldName]))) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && tiddler.fields[fieldName]) {\n\t\t\t\tif(isWithinDays($tw.utils.parseDate(tiddler.fields[fieldName]))) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/each.js": {
"title": "$:/core/modules/filters/each.js",
"text": "/*\\\ntitle: $:/core/modules/filters/each.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects one tiddler for each unique value of the specified field.\nWith suffix \"list\", selects all tiddlers that are values in a specified list field.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.each = function(source,operator,options) {\n\tvar results =[] ,\n\tvalue,values = {},\n\tfield = operator.operand || \"title\";\n\tif(operator.suffix === \"value\" && field === \"title\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!$tw.utils.hop(values,title)) {\n\t\t\t\tvalues[title] = true;\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else if(operator.suffix !== \"list-item\") {\n\t\tif(field === \"title\") {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler && !$tw.utils.hop(values,title)) {\n\t\t\t\t\tvalues[title] = true;\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvalue = tiddler.getFieldString(field);\n\t\t\t\t\tif(!$tw.utils.hop(values,value)) {\n\t\t\t\t\t\tvalues[value] = true;\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler) {\n\t\t\t\t$tw.utils.each(\n\t\t\t\t\toptions.wiki.getTiddlerList(title,field),\n\t\t\t\t\tfunction(value) {\n\t\t\t\t\t\tif(!$tw.utils.hop(values,value)) {\n\t\t\t\t\t\t\tvalues[value] = true;\n\t\t\t\t\t\t\tresults.push(value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/eachday.js": {
"title": "$:/core/modules/filters/eachday.js",
"text": "/*\\\ntitle: $:/core/modules/filters/eachday.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects one tiddler for each unique day covered by the specified date field\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.eachday = function(source,operator,options) {\n\tvar results = [],\n\t\tvalues = [],\n\t\tfieldName = operator.operand || \"modified\";\n\t// Function to convert a date/time to a date integer\n\tvar toDate = function(value) {\n\t\tvalue = (new Date(value)).setHours(0,0,0,0);\n\t\treturn value+0;\n\t};\n\tsource(function(tiddler,title) {\n\t\tif(tiddler && tiddler.fields[fieldName]) {\n\t\t\tvar value = toDate($tw.utils.parseDate(tiddler.fields[fieldName]));\n\t\t\tif(values.indexOf(value) === -1) {\n\t\t\t\tvalues.push(value);\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/editiondescription.js": {
"title": "$:/core/modules/filters/editiondescription.js",
"text": "/*\\\ntitle: $:/core/modules/filters/editiondescription.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the descriptions of the specified edition names\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.editiondescription = function(source,operator,options) {\n\tvar results = [],\n\t\teditionInfo = $tw.utils.getEditionInfo();\n\tif(editionInfo) {\n\t\tsource(function(tiddler,title) {\n\t\t\tif($tw.utils.hop(editionInfo,title)) {\n\t\t\t\tresults.push(editionInfo[title].description || \"\");\t\t\t\t\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/editions.js": {
"title": "$:/core/modules/filters/editions.js",
"text": "/*\\\ntitle: $:/core/modules/filters/editions.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the available editions in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.editions = function(source,operator,options) {\n\tvar results = [],\n\t\teditionInfo = $tw.utils.getEditionInfo();\n\tif(editionInfo) {\n\t\t$tw.utils.each(editionInfo,function(info,name) {\n\t\t\tresults.push(name);\n\t\t});\n\t}\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/else.js": {
"title": "$:/core/modules/filters/else.js",
"text": "/*\\\ntitle: $:/core/modules/filters/else.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for replacing an empty input list with a constant, passing a non-empty input list straight through\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.else = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\tif(results.length === 0) {\n\t\treturn [operator.operand];\n\t} else {\n\t\treturn results;\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/decodeuricomponent.js": {
"title": "$:/core/modules/filters/decodeuricomponent.js",
"text": "/*\\\ntitle: $:/core/modules/filters/decodeuricomponent.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for applying decodeURIComponent() to each item.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter functions\n*/\n\nexports.decodeuricomponent = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar value = title;\n\t\ttry {\n\t\t\tvalue = decodeURIComponent(title);\n\t\t} catch(e) {\n\t\t}\n\t\tresults.push(value);\n\t});\n\treturn results;\n};\n\nexports.encodeuricomponent = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(encodeURIComponent(title));\n\t});\n\treturn results;\n};\n\nexports.decodeuri = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar value = title;\n\t\ttry {\n\t\t\tvalue = decodeURI(title);\n\t\t} catch(e) {\n\t\t}\n\t\tresults.push(value);\n\t});\n\treturn results;\n};\n\nexports.encodeuri = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(encodeURI(title));\n\t});\n\treturn results;\n};\n\nexports.decodehtml = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push($tw.utils.htmlDecode(title));\n\t});\n\treturn results;\n};\n\nexports.encodehtml = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push($tw.utils.htmlEncode(title));\n\t});\n\treturn results;\n};\n\nexports.stringify = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push($tw.utils.stringify(title));\n\t});\n\treturn results;\n};\n\nexports.jsonstringify = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push($tw.utils.jsonStringify(title));\n\t});\n\treturn results;\n};\n\nexports.escaperegexp = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push($tw.utils.escapeRegExp(title));\n\t});\n\treturn results;\n};\n\nexports.escapecss = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t// escape any character with a special meaning in CSS using CSS.escape()\n\t\tresults.push(CSS.escape(title));\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/enlist.js": {
"title": "$:/core/modules/filters/enlist.js",
"text": "/*\\\ntitle: $:/core/modules/filters/enlist.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning its operand parsed as a list\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.enlist = function(source,operator,options) {\n\tvar allowDuplicates = false;\n\tswitch(operator.suffix) {\n\t\tcase \"raw\":\n\t\t\tallowDuplicates = true;\n\t\t\tbreak;\n\t\tcase \"dedupe\":\n\t\t\tallowDuplicates = false;\n\t\t\tbreak;\n\t}\n\tvar list = $tw.utils.parseStringArray(operator.operand,allowDuplicates);\n\tif(operator.prefix === \"!\") {\n\t\tvar results = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tif(list.indexOf(title) === -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t\treturn results;\n\t} else {\n\t\treturn list;\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/field.js": {
"title": "$:/core/modules/filters/field.js",
"text": "/*\\\ntitle: $:/core/modules/filters/field.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for comparing fields for equality\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.field = function(source,operator,options) {\n\tvar results = [],indexedResults,\n\t\tfieldname = (operator.suffix || operator.operator || \"title\").toLowerCase();\n\tif(operator.prefix === \"!\") {\n\t\tif(operator.regexp) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && !operator.regexp.exec(text)) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && text !== operator.operand) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t} else {\n\t\tif(operator.regexp) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && !!operator.regexp.exec(text)) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tif(source.byField && operator.operand) {\n\t\t\t\tindexedResults = source.byField(fieldname,operator.operand);\n\t\t\t\tif(indexedResults) {\n\t\t\t\t\treturn indexedResults\n\t\t\t\t}\n\t\t\t}\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler) {\n\t\t\t\t\tvar text = tiddler.getFieldString(fieldname);\n\t\t\t\t\tif(text !== null && text === operator.operand) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/fields.js": {
"title": "$:/core/modules/filters/fields.js",
"text": "/*\\\ntitle: $:/core/modules/filters/fields.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the fields on the selected tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.fields = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldName,\n\t\tsuffixes = (operator.suffixes || [])[0] || [],\n\t\toperand = $tw.utils.parseStringArray(operator.operand);\n\t\n\tsource(function(tiddler,title) {\n\t\tif(tiddler) {\n\t\t\tif(suffixes.indexOf(\"include\") !== -1) {\n\t\t\t\tfor(fieldName in tiddler.fields) {\n\t\t\t\t\t(operand.indexOf(fieldName) !== -1) ? $tw.utils.pushTop(results,fieldName) : \"\";\n\t\t\t\t}\n\t\t\t} else if (suffixes.indexOf(\"exclude\") !== -1) {\n\t\t\t\tfor(fieldName in tiddler.fields) {\n\t\t\t\t\t(operand.indexOf(fieldName) !== -1) ? \"\" : $tw.utils.pushTop(results,fieldName);\n\t\t\t\t}\n\t\t\t} // else if\n\t\t\telse {\n\t\t\t\tfor(fieldName in tiddler.fields) {\n\t\t\t\t\t$tw.utils.pushTop(results,fieldName);\n\t\t\t\t}\n\t\t\t} // else\n\t\t} // if (tiddler)\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/get.js": {
"title": "$:/core/modules/filters/get.js",
"text": "/*\\\ntitle: $:/core/modules/filters/get.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for replacing tiddler titles by the value of the field specified in the operand.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.get = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tif(tiddler) {\n\t\t\tvar value = tiddler.getFieldString(operator.operand);\n\t\t\tif(value) {\n\t\t\t\tresults.push(value);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/getindex.js": {
"title": "$:/core/modules/filters/getindex.js",
"text": "/*\\\ntitle: $:/core/modules/filters/getindex.js\ntype: application/javascript\nmodule-type: filteroperator\n\nreturns the value at a given index of datatiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.getindex = function(source,operator,options) {\n\tvar data,title,results = [];\n\tif(operator.operand){\n\t\tsource(function(tiddler,title) {\n\t\t\ttitle = tiddler ? tiddler.fields.title : title;\n\t\t\tdata = options.wiki.extractTiddlerDataItem(tiddler,operator.operand);\n\t\t\tif(data) {\n\t\t\t\tresults.push(data);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/getvariable.js": {
"title": "$:/core/modules/filters/getvariable.js",
"text": "/*\\\ntitle: $:/core/modules/filters/getvariable.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for replacing input values by the value of the variable with the same name, or blank if the variable is missing\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.getvariable = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(options.widget.getVariable(title) || \"\");\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/has.js": {
"title": "$:/core/modules/filters/has.js",
"text": "/*\\\ntitle: $:/core/modules/filters/has.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking if a tiddler has the specified field or index\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.has = function(source,operator,options) {\n\tvar results = [],\n\t\tinvert = operator.prefix === \"!\";\n\n\tif(operator.suffix === \"field\") {\n\t\tif(invert) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(!tiddler || (tiddler && (!$tw.utils.hop(tiddler.fields,operator.operand)))) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler && $tw.utils.hop(tiddler.fields,operator.operand)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\telse if(operator.suffix === \"index\") {\n\t\tif(invert) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(!tiddler || (tiddler && (!$tw.utils.hop($tw.wiki.getTiddlerDataCached(tiddler,Object.create(null)),operator.operand)))) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler && $tw.utils.hop($tw.wiki.getTiddlerDataCached(tiddler,Object.create(null)),operator.operand)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\telse {\n\t\tif(invert) {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(!tiddler || !$tw.utils.hop(tiddler.fields,operator.operand) || (tiddler.fields[operator.operand] === \"\")) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddler && $tw.utils.hop(tiddler.fields,operator.operand) && !(tiddler.fields[operator.operand] === \"\" || tiddler.fields[operator.operand].length === 0)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\t\t\t\t\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/haschanged.js": {
"title": "$:/core/modules/filters/haschanged.js",
"text": "/*\\\ntitle: $:/core/modules/filters/haschanged.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returns tiddlers from the list that have a non-zero changecount.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.haschanged = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.getChangeCount(title) === 0) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.getChangeCount(title) > 0) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/indexes.js": {
"title": "$:/core/modules/filters/indexes.js",
"text": "/*\\\ntitle: $:/core/modules/filters/indexes.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the indexes of a data tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.indexes = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar data = options.wiki.getTiddlerDataCached(title);\n\t\tif(data) {\n\t\t\t$tw.utils.pushTop(results,Object.keys(data));\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/insertbefore.js": {
"title": "$:/core/modules/filters/insertbefore.js",
"text": "/*\\\ntitle: $:/core/modules/filters/insertbefore.js\ntype: application/javascript\nmodule-type: filteroperator\n\nInsert an item before another item in a list\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nOrder a list\n*/\nexports.insertbefore = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\tvar target = options.widget && options.widget.getVariable(operator.suffix || \"currentTiddler\");\n\tif(target !== operator.operand) {\n\t\t// Remove the entry from the list if it is present\n\t\tvar pos = results.indexOf(operator.operand);\n\t\tif(pos !== -1) {\n\t\t\tresults.splice(pos,1);\n\t\t}\n\t\t// Insert the entry before the target marker\n\t\tpos = results.indexOf(target);\n\t\tif(pos !== -1) {\n\t\t\tresults.splice(pos,0,operator.operand);\n\t\t} else {\n\t\t\tresults.push(operator.operand);\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/is/binary.js": {
"title": "$:/core/modules/filters/is/binary.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/binary.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[binary]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.binary = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.isBinaryTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.isBinaryTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/blank.js": {
"title": "$:/core/modules/filters/is/blank.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/blank.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[blank]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.blank = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!title) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/current.js": {
"title": "$:/core/modules/filters/is/current.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/current.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[current]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.current = function(source,prefix,options) {\n\tvar results = [],\n\t\tcurrTiddlerTitle = options.widget && options.widget.getVariable(\"currentTiddler\");\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title !== currTiddlerTitle) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title === currTiddlerTitle) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/image.js": {
"title": "$:/core/modules/filters/is/image.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/image.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[image]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.image = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.isImageTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.isImageTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/missing.js": {
"title": "$:/core/modules/filters/is/missing.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/missing.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[missing]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.missing = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/orphan.js": {
"title": "$:/core/modules/filters/is/orphan.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/orphan.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[orphan]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.orphan = function(source,prefix,options) {\n\tvar results = [],\n\t\torphanTitles = options.wiki.getOrphanTitles();\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(orphanTitles.indexOf(title) === -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(orphanTitles.indexOf(title) !== -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/shadow.js": {
"title": "$:/core/modules/filters/is/shadow.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/shadow.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[shadow]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.shadow = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.isShadowTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.isShadowTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/system.js": {
"title": "$:/core/modules/filters/is/system.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/system.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[system]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.system = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.isSystemTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.isSystemTiddler(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/tag.js": {
"title": "$:/core/modules/filters/is/tag.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/tag.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[tag]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tag = function(source,prefix,options) {\n\tvar results = [],\n\t\ttagMap = options.wiki.getTagMap();\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!$tw.utils.hop(tagMap,title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif($tw.utils.hop(tagMap,title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/tiddler.js": {
"title": "$:/core/modules/filters/is/tiddler.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/tiddler.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[tiddler]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tiddler = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(options.wiki.tiddlerExists(title)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is/variable.js": {
"title": "$:/core/modules/filters/is/variable.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is/variable.js\ntype: application/javascript\nmodule-type: isfilteroperator\n\nFilter function for [is[variable]]\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.variable = function(source,prefix,options) {\n\tvar results = [];\n\tif(prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!(title in options.widget.variables)) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title in options.widget.variables) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "isfilteroperator"
},
"$:/core/modules/filters/is.js": {
"title": "$:/core/modules/filters/is.js",
"text": "/*\\\ntitle: $:/core/modules/filters/is.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking tiddler properties\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar isFilterOperators;\n\nfunction getIsFilterOperators() {\n\tif(!isFilterOperators) {\n\t\tisFilterOperators = {};\n\t\t$tw.modules.applyMethods(\"isfilteroperator\",isFilterOperators);\n\t}\n\treturn isFilterOperators;\n}\n\n/*\nExport our filter function\n*/\nexports.is = function(source,operator,options) {\n\t// Dispatch to the correct isfilteroperator\n\tvar isFilterOperators = getIsFilterOperators();\n\tif(operator.operand) {\n\t\tvar isFilterOperator = isFilterOperators[operator.operand];\n\t\tif(isFilterOperator) {\n\t\t\treturn isFilterOperator(source,operator.prefix,options);\n\t\t} else {\n\t\t\treturn [$tw.language.getString(\"Error/IsFilterOperator\")];\n\t\t}\n\t} else {\n\t\t// Return all tiddlers if the operand is missing\n\t\tvar results = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tresults.push(title);\n\t\t});\n\t\treturn results;\n\t}\n};\n\n})();",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/limit.js": {
"title": "$:/core/modules/filters/limit.js",
"text": "/*\\\ntitle: $:/core/modules/filters/limit.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for chopping the results to a specified maximum number of entries\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.limit = function(source,operator,options) {\n\tvar results = [];\n\t// Convert to an array\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\t// Slice the array if necessary\n\tvar limit = Math.min(results.length,parseInt(operator.operand,10));\n\tif(operator.prefix === \"!\") {\n\t\tresults = results.slice(-limit);\n\t} else {\n\t\tresults = results.slice(0,limit);\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/links.js": {
"title": "$:/core/modules/filters/links.js",
"text": "/*\\\ntitle: $:/core/modules/filters/links.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning all the links from a tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.links = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.pushTop(results,options.wiki.getTiddlerLinks(title));\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/list.js": {
"title": "$:/core/modules/filters/list.js",
"text": "/*\\\ntitle: $:/core/modules/filters/list.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddlers whose title is listed in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.list = function(source,operator,options) {\n\tvar results = [],\n\t\ttr = $tw.utils.parseTextReference(operator.operand),\n\t\tcurrTiddlerTitle = options.widget && options.widget.getVariable(\"currentTiddler\"),\n\t\tlist = options.wiki.getTiddlerList(tr.title || currTiddlerTitle,tr.field,tr.index);\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(list.indexOf(title) === -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tresults = list;\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/listed.js": {
"title": "$:/core/modules/filters/listed.js",
"text": "/*\\\ntitle: $:/core/modules/filters/listed.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all tiddlers that have the selected tiddlers in a list\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.listed = function(source,operator,options) {\n\tvar field = operator.operand || \"list\",\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.pushTop(results,options.wiki.findListingsOfTiddler(title,field));\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/listops.js": {
"title": "$:/core/modules/filters/listops.js",
"text": "/*\\\ntitle: $:/core/modules/filters/listops.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operators for manipulating the current selection list\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nOrder a list\n*/\nexports.order = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.operand.toLowerCase() === \"reverse\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tresults.unshift(title);\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tresults.push(title);\n\t\t});\n\t}\n\treturn results;\n};\n\n/*\nReverse list\n*/\nexports.reverse = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.unshift(title);\n\t});\n\treturn results;\n};\n\n/*\nFirst entry/entries in list\n*/\nexports.first = function(source,operator,options) {\n\tvar count = $tw.utils.getInt(operator.operand,1),\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(0,count);\n};\n\n/*\nLast entry/entries in list\n*/\nexports.last = function(source,operator,options) {\n\tvar count = $tw.utils.getInt(operator.operand,1),\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(-count);\n};\n\n/*\nAll but the first entry/entries of the list\n*/\nexports.rest = function(source,operator,options) {\n\tvar count = $tw.utils.getInt(operator.operand,1),\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(count);\n};\nexports.butfirst = exports.rest;\nexports.bf = exports.rest;\n\n/*\nAll but the last entry/entries of the list\n*/\nexports.butlast = function(source,operator,options) {\n\tvar count = $tw.utils.getInt(operator.operand,1),\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(0,-count);\n};\nexports.bl = exports.butlast;\n\n/*\nThe nth member of the list\n*/\nexports.nth = function(source,operator,options) {\n\tvar count = $tw.utils.getInt(operator.operand,1),\n\t\tresults = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results.slice(count - 1,count);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/lookup.js": {
"title": "$:/core/modules/filters/lookup.js",
"text": "/*\\\ntitle: $:/core/modules/filters/lookup.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that looks up values via a title prefix\n\n[lookup:<field>[<prefix>]]\n\nPrepends the prefix to the selected items and returns the specified field value\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.lookup = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(options.wiki.getTiddlerText(operator.operand + title) || options.wiki.getTiddlerText(operator.operand + operator.suffix));\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/match.js": {
"title": "$:/core/modules/filters/match.js",
"text": "/*\\\ntitle: $:/core/modules/filters/match.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking if a title matches a string\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.match = function(source,operator,options) {\n\tvar results = [],\n\t\tsuffixes = (operator.suffixes || [])[0] || [];\n\tif(suffixes.indexOf(\"caseinsensitive\") !== -1) {\n\t\tif(operator.prefix === \"!\") {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(title.toLowerCase() !== (operator.operand || \"\").toLowerCase()) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(title.toLowerCase() === (operator.operand || \"\").toLowerCase()) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t} else {\n\t\tif(operator.prefix === \"!\") {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(title !== operator.operand) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(title === operator.operand) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/math.js": {
"title": "$:/core/modules/filters/math.js",
"text": "/*\\\ntitle: $:/core/modules/filters/math.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operators for math. Unary/binary operators work on each item in turn, and return a new item list.\n\nSum/product/maxall/minall operate on the entire list, returning a single item.\n\nNote that strings are converted to numbers automatically. Trailing non-digits are ignored.\n\n* \"\" converts to 0\n* \"12kk\" converts to 12\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.negate = makeNumericBinaryOperator(\n\tfunction(a) {return -a}\n);\n\nexports.abs = makeNumericBinaryOperator(\n\tfunction(a) {return Math.abs(a)}\n);\n\nexports.ceil = makeNumericBinaryOperator(\n\tfunction(a) {return Math.ceil(a)}\n);\n\nexports.floor = makeNumericBinaryOperator(\n\tfunction(a) {return Math.floor(a)}\n);\n\nexports.round = makeNumericBinaryOperator(\n\tfunction(a) {return Math.round(a)}\n);\n\nexports.trunc = makeNumericBinaryOperator(\n\tfunction(a) {return Math.trunc(a)}\n);\n\nexports.untrunc = makeNumericBinaryOperator(\n\tfunction(a) {return Math.ceil(Math.abs(a)) * Math.sign(a)}\n);\n\nexports.sign = makeNumericBinaryOperator(\n\tfunction(a) {return Math.sign(a)}\n);\n\nexports.add = makeNumericBinaryOperator(\n\tfunction(a,b) {return a + b;}\n);\n\nexports.subtract = makeNumericBinaryOperator(\n\tfunction(a,b) {return a - b;}\n);\n\nexports.multiply = makeNumericBinaryOperator(\n\tfunction(a,b) {return a * b;}\n);\n\nexports.divide = makeNumericBinaryOperator(\n\tfunction(a,b) {return a / b;}\n);\n\nexports.remainder = makeNumericBinaryOperator(\n\tfunction(a,b) {return a % b;}\n);\n\nexports.max = makeNumericBinaryOperator(\n\tfunction(a,b) {return Math.max(a,b);}\n);\n\nexports.min = makeNumericBinaryOperator(\n\tfunction(a,b) {return Math.min(a,b);}\n);\n\nexports.fixed = makeNumericBinaryOperator(\n\tfunction(a,b) {return Number.prototype.toFixed.call(a,Math.min(Math.max(b,0),100));}\n);\n\nexports.precision = makeNumericBinaryOperator(\n\tfunction(a,b) {return Number.prototype.toPrecision.call(a,Math.min(Math.max(b,1),100));}\n);\n\nexports.exponential = makeNumericBinaryOperator(\n\tfunction(a,b) {return Number.prototype.toExponential.call(a,Math.min(Math.max(b,0),100));}\n);\n\nexports.sum = makeNumericReducingOperator(\n\tfunction(accumulator,value) {return accumulator + value},\n\t0 // Initial value\n);\n\nexports.product = makeNumericReducingOperator(\n\tfunction(accumulator,value) {return accumulator * value},\n\t1 // Initial value\n);\n\nexports.maxall = makeNumericReducingOperator(\n\tfunction(accumulator,value) {return Math.max(accumulator,value)},\n\t-Infinity // Initial value\n);\n\nexports.minall = makeNumericReducingOperator(\n\tfunction(accumulator,value) {return Math.min(accumulator,value)},\n\tInfinity // Initial value\n);\n\nfunction makeNumericBinaryOperator(fnCalc) {\n\treturn function(source,operator,options) {\n\t\tvar result = [],\n\t\t\tnumOperand = $tw.utils.parseNumber(operator.operand);\n\t\tsource(function(tiddler,title) {\n\t\t\tresult.push($tw.utils.stringifyNumber(fnCalc($tw.utils.parseNumber(title),numOperand)));\n\t\t});\n\t\treturn result;\n\t};\n}\n\nfunction makeNumericReducingOperator(fnCalc,initialValue) {\n\tinitialValue = initialValue || 0;\n\treturn function(source,operator,options) {\n\t\tvar result = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tresult.push(title);\n\t\t});\n\t\treturn [$tw.utils.stringifyNumber(result.reduce(function(accumulator,currentValue) {\n\t\t\treturn fnCalc(accumulator,$tw.utils.parseNumber(currentValue));\n\t\t},initialValue))];\n\t};\n}\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/minlength.js": {
"title": "$:/core/modules/filters/minlength.js",
"text": "/*\\\ntitle: $:/core/modules/filters/minlength.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for filtering out titles that don't meet the minimum length in the operand\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.minlength = function(source,operator,options) {\n\tvar results = [],\n\t\tminLength = parseInt(operator.operand || \"\",10) || 0;\n\tsource(function(tiddler,title) {\n\t\tif(title.length >= minLength) {\n\t\t\tresults.push(title);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/modules.js": {
"title": "$:/core/modules/filters/modules.js",
"text": "/*\\\ntitle: $:/core/modules/filters/modules.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the titles of the modules of a given type in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.modules = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.each($tw.modules.types[title],function(moduleInfo,moduleName) {\n\t\t\tresults.push(moduleName);\n\t\t});\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/moduletypes.js": {
"title": "$:/core/modules/filters/moduletypes.js",
"text": "/*\\\ntitle: $:/core/modules/filters/moduletypes.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the module types in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.moduletypes = function(source,operator,options) {\n\tvar results = [];\n\t$tw.utils.each($tw.modules.types,function(moduleInfo,type) {\n\t\tresults.push(type);\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/next.js": {
"title": "$:/core/modules/filters/next.js",
"text": "/*\\\ntitle: $:/core/modules/filters/next.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler whose title occurs next in the list supplied in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.next = function(source,operator,options) {\n\tvar results = [],\n\t\tlist = options.wiki.getTiddlerList(operator.operand);\n\tsource(function(tiddler,title) {\n\t\tvar match = list.indexOf(title);\n\t\t// increment match and then test if result is in range\n\t\tmatch++;\n\t\tif(match > 0 && match < list.length) {\n\t\t\tresults.push(list[match]);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/plugintiddlers.js": {
"title": "$:/core/modules/filters/plugintiddlers.js",
"text": "/*\\\ntitle: $:/core/modules/filters/plugintiddlers.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the titles of the shadow tiddlers within a plugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.plugintiddlers = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar pluginInfo = options.wiki.getPluginInfo(title) || options.wiki.getTiddlerDataCached(title,{tiddlers:[]});\n\t\tif(pluginInfo && pluginInfo.tiddlers) {\n\t\t\t$tw.utils.each(pluginInfo.tiddlers,function(fields,title) {\n\t\t\t\tresults.push(title);\n\t\t\t});\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/prefix.js": {
"title": "$:/core/modules/filters/prefix.js",
"text": "/*\\\ntitle: $:/core/modules/filters/prefix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking if a title starts with a prefix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.prefix = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(0,operator.operand.length) !== operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(0,operator.operand.length) === operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/previous.js": {
"title": "$:/core/modules/filters/previous.js",
"text": "/*\\\ntitle: $:/core/modules/filters/previous.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning the tiddler whose title occurs immediately prior in the list supplied in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.previous = function(source,operator,options) {\n\tvar results = [],\n\t\tlist = options.wiki.getTiddlerList(operator.operand);\n\tsource(function(tiddler,title) {\n\t\tvar match = list.indexOf(title);\n\t\t// increment match and then test if result is in range\n\t\tmatch--;\n\t\tif(match >= 0) {\n\t\t\tresults.push(list[match]);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/range.js": {
"title": "$:/core/modules/filters/range.js",
"text": "/*\\\ntitle: $:/core/modules/filters/range.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for generating a numeric range.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.range = function(source,operator,options) {\n\tvar results = [];\n\t// Split the operand into numbers delimited by these symbols\n\tvar parts = operator.operand.split(/[,:;]/g),\n\t\tbeg, end, inc, i, fixed = 0;\n\tfor (i=0; i<parts.length; i++) {\n\t\t// Validate real number\n\t\tif(!/^\\s*[+-]?((\\d+(\\.\\d*)?)|(\\.\\d+))\\s*$/.test(parts[i])) {\n\t\t\treturn [\"range: bad number \\\"\" + parts[i] + \"\\\"\"];\n\t\t}\n\t\t// Count digits; the most precise number determines decimal places in output.\n\t\tvar frac = /\\.\\d+/.exec(parts[i]);\n\t\tif(frac) {\n\t\t\tfixed = Math.max(fixed,frac[0].length-1);\n\t\t}\n\t\tparts[i] = parseFloat(parts[i]);\n\t}\n\tswitch(parts.length) {\n\t\tcase 1:\n\t\t\tend = parts[0];\n\t\t\tif (end >= 1) {\n\t\t\t\tbeg = 1;\n\t\t\t}\n\t\t\telse if (end <= -1) {\n\t\t\t\tbeg = -1;\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tinc = 1;\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\tbeg = parts[0];\n\t\t\tend = parts[1];\n\t\t\tinc = 1;\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\tbeg = parts[0];\n\t\t\tend = parts[1];\n\t\t\tinc = Math.abs(parts[2]);\n\t\t\tbreak;\n\t}\n\tif(inc === 0) {\n\t\treturn [\"range: increment 0 causes infinite loop\"];\n\t}\n\t// May need to count backwards\n\tvar direction = ((end < beg) ? -1 : 1);\n\tinc *= direction;\n\t// Estimate number of resulting elements\n\tif((end - beg) / inc > 10000) {\n\t\treturn [\"range: too many steps (over 10K)\"];\n\t}\n\t// Avoid rounding error on last step\n\tend += direction * 0.5 * Math.pow(0.1,fixed);\n\tvar safety = 10010;\n\t// Enumerate the range\n\tif (end<beg) {\n\t\tfor(i=beg; i>end; i+=inc) {\n\t\t\tresults.push(i.toFixed(fixed));\n\t\t\tif(--safety<0) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t} else {\n\t\tfor(i=beg; i<end; i+=inc) {\n\t\t\tresults.push(i.toFixed(fixed));\n\t\t\tif(--safety<0) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tif(safety<0) {\n\t\treturn [\"range: unexpectedly large output\"];\n\t}\n\t// Reverse?\n\tif(operator.prefix === \"!\") {\n\t\tresults.reverse();\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/regexp.js": {
"title": "$:/core/modules/filters/regexp.js",
"text": "/*\\\ntitle: $:/core/modules/filters/regexp.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for regexp matching\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.regexp = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldname = (operator.suffix || \"title\").toLowerCase(),\n\t\tregexpString, regexp, flags = \"\", match,\n\t\tgetFieldString = function(tiddler,title) {\n\t\t\tif(tiddler) {\n\t\t\t\treturn tiddler.getFieldString(fieldname);\n\t\t\t} else if(fieldname === \"title\") {\n\t\t\t\treturn title;\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t};\n\t// Process flags and construct regexp\n\tregexpString = operator.operand;\n\tmatch = /^\\(\\?([gim]+)\\)/.exec(regexpString);\n\tif(match) {\n\t\tflags = match[1];\n\t\tregexpString = regexpString.substr(match[0].length);\n\t} else {\n\t\tmatch = /\\(\\?([gim]+)\\)$/.exec(regexpString);\n\t\tif(match) {\n\t\t\tflags = match[1];\n\t\t\tregexpString = regexpString.substr(0,regexpString.length - match[0].length);\n\t\t}\n\t}\n\ttry {\n\t\tregexp = new RegExp(regexpString,flags);\n\t} catch(e) {\n\t\treturn [\"\" + e];\n\t}\n\t// Process the incoming tiddlers\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tvar text = getFieldString(tiddler,title);\n\t\t\tif(text !== null) {\n\t\t\t\tif(!regexp.exec(text)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tvar text = getFieldString(tiddler,title);\n\t\t\tif(text !== null) {\n\t\t\t\tif(!!regexp.exec(text)) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/removeprefix.js": {
"title": "$:/core/modules/filters/removeprefix.js",
"text": "/*\\\ntitle: $:/core/modules/filters/removeprefix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for removing a prefix from each title in the list. Titles that do not start with the prefix are removed.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.removeprefix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tif(title.substr(0,operator.operand.length) === operator.operand) {\n\t\t\tresults.push(title.substr(operator.operand.length));\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/removesuffix.js": {
"title": "$:/core/modules/filters/removesuffix.js",
"text": "/*\\\ntitle: $:/core/modules/filters/removesuffix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for removing a suffix from each title in the list. Titles that do not end with the suffix are removed.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.removesuffix = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tif(title && title.substr(-operator.operand.length) === operator.operand) {\n\t\t\tresults.push(title.substr(0,title.length - operator.operand.length));\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/sameday.js": {
"title": "$:/core/modules/filters/sameday.js",
"text": "/*\\\ntitle: $:/core/modules/filters/sameday.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that selects tiddlers with a modified date field on the same day as the provided value.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.sameday = function(source,operator,options) {\n\tvar results = [],\n\t\tfieldName = operator.suffix || \"modified\",\n\t\ttargetDate = (new Date($tw.utils.parseDate(operator.operand))).setHours(0,0,0,0);\n\t// Function to convert a date/time to a date integer\n\tsource(function(tiddler,title) {\n\t\tif(tiddler) {\n\t\t\tif(tiddler.getFieldDay(fieldName) === targetDate) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/search.js": {
"title": "$:/core/modules/filters/search.js",
"text": "/*\\\ntitle: $:/core/modules/filters/search.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for searching for the text in the operand tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.search = function(source,operator,options) {\n\tvar invert = operator.prefix === \"!\";\n\tif(operator.suffixes) {\n\t\tvar hasFlag = function(flag) {\n\t\t\t\treturn (operator.suffixes[1] || []).indexOf(flag) !== -1;\n\t\t\t},\n\t\t\texcludeFields = false,\n\t\t\tfieldList = operator.suffixes[0] || [],\n\t\t\tfirstField = fieldList[0] || \"\", \n\t\t\tfirstChar = firstField.charAt(0),\n\t\t\tfields;\n\t\tif(firstChar === \"-\") {\n\t\t\tfields = [firstField.slice(1)].concat(fieldList.slice(1));\n\t\t\texcludeFields = true;\n\t\t} else if(fieldList[0] === \"*\"){\n\t\t\tfields = [];\n\t\t\texcludeFields = true;\n\t\t} else {\n\t\t\tfields = fieldList.slice(0);\n\t\t}\n\t\treturn options.wiki.search(operator.operand,{\n\t\t\tsource: source,\n\t\t\tinvert: invert,\n\t\t\tfield: fields,\n\t\t\texcludeField: excludeFields,\n\t\t\tcaseSensitive: hasFlag(\"casesensitive\"),\n\t\t\tliteral: hasFlag(\"literal\"),\n\t\t\twhitespace: hasFlag(\"whitespace\"),\n\t\t\tanchored: hasFlag(\"anchored\"),\n\t\t\tregexp: hasFlag(\"regexp\"),\n\t\t\twords: hasFlag(\"words\")\n\t\t});\n\t} else {\n\t\treturn options.wiki.search(operator.operand,{\n\t\t\tsource: source,\n\t\t\tinvert: invert\n\t\t});\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/shadowsource.js": {
"title": "$:/core/modules/filters/shadowsource.js",
"text": "/*\\\ntitle: $:/core/modules/filters/shadowsource.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the source plugins for shadow tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.shadowsource = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar source = options.wiki.getShadowSource(title);\n\t\tif(source) {\n\t\t\t$tw.utils.pushTop(results,source);\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/sort.js": {
"title": "$:/core/modules/filters/sort.js",
"text": "/*\\\ntitle: $:/core/modules/filters/sort.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for sorting\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.sort = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",false,false);\n\treturn results;\n};\n\nexports.nsort = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",false,true);\n\treturn results;\n};\n\nexports.sortan = function(source, operator, options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results, operator.operand || \"title\", operator.prefix === \"!\",false,false,true);\n\treturn results;\n};\n\nexports.sortcs = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",true,false);\n\treturn results;\n};\n\nexports.nsortcs = function(source,operator,options) {\n\tvar results = prepare_results(source);\n\toptions.wiki.sortTiddlers(results,operator.operand || \"title\",operator.prefix === \"!\",true,true);\n\treturn results;\n};\n\nvar prepare_results = function (source) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(title);\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/splitbefore.js": {
"title": "$:/core/modules/filters/splitbefore.js",
"text": "/*\\\ntitle: $:/core/modules/filters/splitbefore.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator that splits each result on the first occurance of the specified separator and returns the unique values.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.splitbefore = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar parts = title.split(operator.operand);\n\t\tif(parts.length === 1) {\n\t\t\t$tw.utils.pushTop(results,parts[0]);\n\t\t} else {\n\t\t\t$tw.utils.pushTop(results,parts[0] + operator.operand);\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/storyviews.js": {
"title": "$:/core/modules/filters/storyviews.js",
"text": "/*\\\ntitle: $:/core/modules/filters/storyviews.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the story views in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.storyviews = function(source,operator,options) {\n\tvar results = [],\n\t\tstoryviews = {};\n\t$tw.modules.applyMethods(\"storyview\",storyviews);\n\t$tw.utils.each(storyviews,function(info,name) {\n\t\tresults.push(name);\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/strings.js": {
"title": "$:/core/modules/filters/strings.js",
"text": "/*\\\ntitle: $:/core/modules/filters/strings.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operators for strings. Unary/binary operators work on each item in turn, and return a new item list.\n\nSum/product/maxall/minall operate on the entire list, returning a single item.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.length = makeStringBinaryOperator(\n\tfunction(a) {return [\"\" + (\"\" + a).length];}\n);\n\nexports.uppercase = makeStringBinaryOperator(\n\tfunction(a) {return [(\"\" + a).toUpperCase()];}\n);\n\nexports.lowercase = makeStringBinaryOperator(\n\tfunction(a) {return [(\"\" + a).toLowerCase()];}\n);\n\nexports.sentencecase = makeStringBinaryOperator(\n\tfunction(a) {return [$tw.utils.toSentenceCase(a)];}\n);\n\nexports.titlecase = makeStringBinaryOperator(\n\tfunction(a) {return [$tw.utils.toTitleCase(a)];}\n);\n\nexports.trim = makeStringBinaryOperator(\n\tfunction(a) {return [$tw.utils.trim(a)];}\n);\n\nexports.split = makeStringBinaryOperator(\n\tfunction(a,b) {return (\"\" + a).split(b);}\n);\n\nexports.join = makeStringReducingOperator(\n\tfunction(accumulator,value,operand) {\n\t\tif(accumulator === null) {\n\t\t\treturn value;\n\t\t} else {\n\t\t\treturn accumulator + operand + value;\n\t\t}\n\t},null\n);\n\nfunction makeStringBinaryOperator(fnCalc) {\n\treturn function(source,operator,options) {\n\t\tvar result = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tArray.prototype.push.apply(result,fnCalc(title,operator.operand || \"\"));\n\t\t});\n\t\treturn result;\n\t};\n}\n\nfunction makeStringReducingOperator(fnCalc,initialValue) {\n\treturn function(source,operator,options) {\n\t\tvar result = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tresult.push(title);\n\t\t});\n\t\treturn [result.reduce(function(accumulator,currentValue) {\n\t\t\treturn fnCalc(accumulator,currentValue,operator.operand || \"\");\n\t\t},initialValue) || \"\"];\n\t};\n}\n\nexports.splitregexp = function(source,operator,options) {\n\tvar result = [],\n\t\tsuffix = operator.suffix || \"\",\n\t\tflags = (suffix.indexOf(\"m\") !== -1 ? \"m\" : \"\") + (suffix.indexOf(\"i\") !== -1 ? \"i\" : \"\"),\n\t\tregExp;\n\ttry {\n\t\tregExp = new RegExp(operator.operand || \"\",flags);\t\t\n\t} catch(ex) {\n\t\treturn [\"RegExp error: \" + ex];\n\t}\n\tsource(function(tiddler,title) {\n\t\tArray.prototype.push.apply(result,title.split(regExp));\n\t});\t\t\n\treturn result;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/subfilter.js": {
"title": "$:/core/modules/filters/subfilter.js",
"text": "/*\\\ntitle: $:/core/modules/filters/subfilter.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning its operand evaluated as a filter\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.subfilter = function(source,operator,options) {\n\tvar list = options.wiki.filterTiddlers(operator.operand,options.widget,source);\n\tif(operator.prefix === \"!\") {\n\t\tvar results = [];\n\t\tsource(function(tiddler,title) {\n\t\t\tif(list.indexOf(title) === -1) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t\treturn results;\n\t} else {\n\t\treturn list;\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/subtiddlerfields.js": {
"title": "$:/core/modules/filters/subtiddlerfields.js",
"text": "/*\\\ntitle: $:/core/modules/filters/subtiddlerfields.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the fields on the selected subtiddlers of the plugin named in the operand\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.subtiddlerfields = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar subtiddler = options.wiki.getSubTiddler(operator.operand,title);\n\t\tif(subtiddler) {\n\t\t\tfor(var fieldName in subtiddler.fields) {\n\t\t\t\t$tw.utils.pushTop(results,fieldName);\n\t\t\t}\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/suffix.js": {
"title": "$:/core/modules/filters/suffix.js",
"text": "/*\\\ntitle: $:/core/modules/filters/suffix.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking if a title ends with a suffix\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.suffix = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(-operator.operand.length) !== operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(title.substr(-operator.operand.length) === operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/tag.js": {
"title": "$:/core/modules/filters/tag.js",
"text": "/*\\\ntitle: $:/core/modules/filters/tag.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for checking for the presence of a tag\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tag = function(source,operator,options) {\n\tvar results = [],indexedResults;\n\tif((operator.suffix || \"\").toLowerCase() === \"strict\" && !operator.operand) {\n\t\t// New semantics:\n\t\t// Always return copy of input if operator.operand is missing\n\t\tsource(function(tiddler,title) {\n\t\t\tresults.push(title);\n\t\t});\n\t} else {\n\t\t// Old semantics:\n\t\tvar tiddlers;\n\t\tif(operator.prefix === \"!\") {\n\t\t\t// Returns a copy of the input if operator.operand is missing\n\t\t\ttiddlers = options.wiki.getTiddlersWithTag(operator.operand);\n\t\t\tsource(function(tiddler,title) {\n\t\t\t\tif(tiddlers.indexOf(title) === -1) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\t// Returns empty results if operator.operand is missing\n\t\t\tif(source.byTag) {\n\t\t\t\tindexedResults = source.byTag(operator.operand);\n\t\t\t\tif(indexedResults) {\n\t\t\t\t\treturn indexedResults;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttiddlers = options.wiki.getTiddlersWithTag(operator.operand);\n\t\t\t\tsource(function(tiddler,title) {\n\t\t\t\t\tif(tiddlers.indexOf(title) !== -1) {\n\t\t\t\t\t\tresults.push(title);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tresults = options.wiki.sortByList(results,operator.operand);\n\t\t\t}\n\t\t}\t\t\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/tagging.js": {
"title": "$:/core/modules/filters/tagging.js",
"text": "/*\\\ntitle: $:/core/modules/filters/tagging.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all tiddlers that are tagged with the selected tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tagging = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\t$tw.utils.pushTop(results,options.wiki.getTiddlersWithTag(title));\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/tags.js": {
"title": "$:/core/modules/filters/tags.js",
"text": "/*\\\ntitle: $:/core/modules/filters/tags.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all the tags of the selected tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.tags = function(source,operator,options) {\n\tvar tags = {};\n\tsource(function(tiddler,title) {\n\t\tvar t, length;\n\t\tif(tiddler && tiddler.fields.tags) {\n\t\t\tfor(t=0, length=tiddler.fields.tags.length; t<length; t++) {\n\t\t\t\ttags[tiddler.fields.tags[t]] = true;\n\t\t\t}\n\t\t}\n\t});\n\treturn Object.keys(tags);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/then.js": {
"title": "$:/core/modules/filters/then.js",
"text": "/*\\\ntitle: $:/core/modules/filters/then.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for replacing any titles with a constant\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.then = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tresults.push(operator.operand);\n\t});\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/title.js": {
"title": "$:/core/modules/filters/title.js",
"text": "/*\\\ntitle: $:/core/modules/filters/title.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for comparing title fields for equality\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.title = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && tiddler.fields.title !== operator.operand) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tresults.push(operator.operand);\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/untagged.js": {
"title": "$:/core/modules/filters/untagged.js",
"text": "/*\\\ntitle: $:/core/modules/filters/untagged.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator returning all the selected tiddlers that are untagged\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.untagged = function(source,operator,options) {\n\tvar results = [];\n\tif(operator.prefix === \"!\") {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(tiddler && $tw.utils.isArray(tiddler.fields.tags) && tiddler.fields.tags.length > 0) {\n\t\t\t\t$tw.utils.pushTop(results,title);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!tiddler || !tiddler.hasField(\"tags\") || ($tw.utils.isArray(tiddler.fields.tags) && tiddler.fields.tags.length === 0)) {\n\t\t\t\t$tw.utils.pushTop(results,title);\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/variables.js": {
"title": "$:/core/modules/filters/variables.js",
"text": "/*\\\ntitle: $:/core/modules/filters/variables.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the active variables\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.variables = function(source,operator,options) {\n\tvar names = [];\n\tfor(var variable in options.widget.variables) {\n\t\tnames.push(variable);\n\t}\n\treturn names.sort();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/wikiparserrules.js": {
"title": "$:/core/modules/filters/wikiparserrules.js",
"text": "/*\\\ntitle: $:/core/modules/filters/wikiparserrules.js\ntype: application/javascript\nmodule-type: filteroperator\n\nFilter operator for returning the names of the wiki parser rules in this wiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.wikiparserrules = function(source,operator,options) {\n\tvar results = [],\n\t\toperand = operator.operand;\n\t$tw.utils.each($tw.modules.types.wikirule,function(mod) {\n\t\tvar exp = mod.exports;\n\t\tif(!operand || exp.types[operand]) {\n\t\t\tresults.push(exp.name);\n\t\t}\n\t});\n\tresults.sort();\n\treturn results;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters/x-listops.js": {
"title": "$:/core/modules/filters/x-listops.js",
"text": "/*\\\ntitle: $:/core/modules/filters/x-listops.js\ntype: application/javascript\nmodule-type: filteroperator\n\nExtended filter operators to manipulate the current list.\n\n\\*/\n(function () {\n\n /*jslint node: true, browser: true */\n /*global $tw: false */\n \"use strict\";\n\n /*\n Fetch titles from the current list\n */\n var prepare_results = function (source) {\n var results = [];\n source(function (tiddler, title) {\n results.push(title);\n });\n return results;\n };\n\n /*\n Moves a number of items from the tail of the current list before the item named in the operand\n */\n exports.putbefore = function (source, operator) {\n var results = prepare_results(source),\n index = results.indexOf(operator.operand),\n count = $tw.utils.getInt(operator.suffix,1);\n return (index === -1) ?\n results.slice(0, -1) :\n results.slice(0, index).concat(results.slice(-count)).concat(results.slice(index, -count));\n };\n\n /*\n Moves a number of items from the tail of the current list after the item named in the operand\n */\n exports.putafter = function (source, operator) {\n var results = prepare_results(source),\n index = results.indexOf(operator.operand),\n count = $tw.utils.getInt(operator.suffix,1);\n return (index === -1) ?\n results.slice(0, -1) :\n results.slice(0, index + 1).concat(results.slice(-count)).concat(results.slice(index + 1, -count));\n };\n\n /*\n Replaces the item named in the operand with a number of items from the tail of the current list\n */\n exports.replace = function (source, operator) {\n var results = prepare_results(source),\n index = results.indexOf(operator.operand),\n count = $tw.utils.getInt(operator.suffix,1);\n return (index === -1) ?\n results.slice(0, -count) :\n results.slice(0, index).concat(results.slice(-count)).concat(results.slice(index + 1, -count));\n };\n\n /*\n Moves a number of items from the tail of the current list to the head of the list\n */\n exports.putfirst = function (source, operator) {\n var results = prepare_results(source),\n count = $tw.utils.getInt(operator.suffix,1);\n return results.slice(-count).concat(results.slice(0, -count));\n };\n\n /*\n Moves a number of items from the head of the current list to the tail of the list\n */\n exports.putlast = function (source, operator) {\n var results = prepare_results(source),\n count = $tw.utils.getInt(operator.suffix,1);\n return results.slice(count).concat(results.slice(0, count));\n };\n\n /*\n Moves the item named in the operand a number of places forward or backward in the list\n */\n exports.move = function (source, operator) {\n var results = prepare_results(source),\n index = results.indexOf(operator.operand),\n count = $tw.utils.getInt(operator.suffix,1),\n marker = results.splice(index, 1),\n offset = (index + count) > 0 ? index + count : 0;\n return results.slice(0, offset).concat(marker).concat(results.slice(offset));\n };\n\n /*\n Returns the items from the current list that are after the item named in the operand\n */\n exports.allafter = function (source, operator) {\n var results = prepare_results(source),\n index = results.indexOf(operator.operand);\n return (index === -1) ? [] :\n (operator.suffix) ? results.slice(index) :\n results.slice(index + 1);\n };\n\n /*\n Returns the items from the current list that are before the item named in the operand\n */\n exports.allbefore = function (source, operator) {\n var results = prepare_results(source),\n index = results.indexOf(operator.operand);\n return (index === -1) ? [] :\n (operator.suffix) ? results.slice(0, index + 1) :\n results.slice(0, index);\n };\n\n /*\n Appends the items listed in the operand array to the tail of the current list\n */\n exports.append = function (source, operator) {\n var append = $tw.utils.parseStringArray(operator.operand, \"true\"),\n results = prepare_results(source),\n count = parseInt(operator.suffix) || append.length;\n return (append.length === 0) ? results :\n (operator.prefix) ? results.concat(append.slice(-count)) :\n results.concat(append.slice(0, count));\n };\n\n /*\n Prepends the items listed in the operand array to the head of the current list\n */\n exports.prepend = function (source, operator) {\n var prepend = $tw.utils.parseStringArray(operator.operand, \"true\"),\n results = prepare_results(source),\n count = $tw.utils.getInt(operator.suffix,prepend.length);\n return (prepend.length === 0) ? results :\n (operator.prefix) ? prepend.slice(-count).concat(results) :\n prepend.slice(0, count).concat(results);\n };\n\n /*\n Returns all items from the current list except the items listed in the operand array\n */\n exports.remove = function (source, operator) {\n var array = $tw.utils.parseStringArray(operator.operand, \"true\"),\n results = prepare_results(source),\n count = parseInt(operator.suffix) || array.length,\n p,\n len,\n index;\n len = array.length - 1;\n for (p = 0; p < count; ++p) {\n if (operator.prefix) {\n index = results.indexOf(array[len - p]);\n } else {\n index = results.indexOf(array[p]);\n }\n if (index !== -1) {\n results.splice(index, 1);\n }\n }\n return results;\n };\n\n /*\n Returns all items from the current list sorted in the order of the items in the operand array\n */\n exports.sortby = function (source, operator) {\n var results = prepare_results(source);\n if (!results || results.length < 2) {\n return results;\n }\n var lookup = $tw.utils.parseStringArray(operator.operand, \"true\");\n results.sort(function (a, b) {\n return lookup.indexOf(a) - lookup.indexOf(b);\n });\n return results;\n };\n\n /*\n Removes all duplicate items from the current list\n */\n exports.unique = function (source, operator) {\n var results = prepare_results(source);\n var set = results.reduce(function (a, b) {\n if (a.indexOf(b) < 0) {\n a.push(b);\n }\n return a;\n }, []);\n return set;\n };\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/core/modules/filters.js": {
"title": "$:/core/modules/filters.js",
"text": "/*\\\ntitle: $:/core/modules/filters.js\ntype: application/javascript\nmodule-type: wikimethod\n\nAdds tiddler filtering methods to the $tw.Wiki object.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nParses an operation (i.e. a run) within a filter string\n\toperators: Array of array of operator nodes into which results should be inserted\n\tfilterString: filter string\n\tp: start position within the string\nReturns the new start position, after the parsed operation\n*/\nfunction parseFilterOperation(operators,filterString,p) {\n\tvar nextBracketPos, operator;\n\t// Skip the starting square bracket\n\tif(filterString.charAt(p++) !== \"[\") {\n\t\tthrow \"Missing [ in filter expression\";\n\t}\n\t// Process each operator in turn\n\tdo {\n\t\toperator = {};\n\t\t// Check for an operator prefix\n\t\tif(filterString.charAt(p) === \"!\") {\n\t\t\toperator.prefix = filterString.charAt(p++);\n\t\t}\n\t\t// Get the operator name\n\t\tnextBracketPos = filterString.substring(p).search(/[\\[\\{<\\/]/);\n\t\tif(nextBracketPos === -1) {\n\t\t\tthrow \"Missing [ in filter expression\";\n\t\t}\n\t\tnextBracketPos += p;\n\t\tvar bracket = filterString.charAt(nextBracketPos);\n\t\toperator.operator = filterString.substring(p,nextBracketPos);\n\t\t// Any suffix?\n\t\tvar colon = operator.operator.indexOf(':');\n\t\tif(colon > -1) {\n\t\t\t// The raw suffix for older filters\n\t\t\toperator.suffix = operator.operator.substring(colon + 1);\n\t\t\toperator.operator = operator.operator.substring(0,colon) || \"field\";\n\t\t\t// The processed suffix for newer filters\n\t\t\toperator.suffixes = [];\n\t\t\t$tw.utils.each(operator.suffix.split(\":\"),function(subsuffix) {\n\t\t\t\toperator.suffixes.push([]);\n\t\t\t\t$tw.utils.each(subsuffix.split(\",\"),function(entry) {\n\t\t\t\t\tentry = $tw.utils.trim(entry);\n\t\t\t\t\tif(entry) {\n\t\t\t\t\t\toperator.suffixes[operator.suffixes.length - 1].push(entry); \n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t\t// Empty operator means: title\n\t\telse if(operator.operator === \"\") {\n\t\t\toperator.operator = \"title\";\n\t\t}\n\n\t\tp = nextBracketPos + 1;\n\t\tswitch (bracket) {\n\t\t\tcase \"{\": // Curly brackets\n\t\t\t\toperator.indirect = true;\n\t\t\t\tnextBracketPos = filterString.indexOf(\"}\",p);\n\t\t\t\tbreak;\n\t\t\tcase \"[\": // Square brackets\n\t\t\t\tnextBracketPos = filterString.indexOf(\"]\",p);\n\t\t\t\tbreak;\n\t\t\tcase \"<\": // Angle brackets\n\t\t\t\toperator.variable = true;\n\t\t\t\tnextBracketPos = filterString.indexOf(\">\",p);\n\t\t\t\tbreak;\n\t\t\tcase \"/\": // regexp brackets\n\t\t\t\tvar rex = /^((?:[^\\\\\\/]*|\\\\.)*)\\/(?:\\(([mygi]+)\\))?/g,\n\t\t\t\t\trexMatch = rex.exec(filterString.substring(p));\n\t\t\t\tif(rexMatch) {\n\t\t\t\t\toperator.regexp = new RegExp(rexMatch[1], rexMatch[2]);\n// DEPRECATION WARNING\nconsole.log(\"WARNING: Filter\",operator.operator,\"has a deprecated regexp operand\",operator.regexp);\n\t\t\t\t\tnextBracketPos = p + rex.lastIndex - 1;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tthrow \"Unterminated regular expression in filter expression\";\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif(nextBracketPos === -1) {\n\t\t\tthrow \"Missing closing bracket in filter expression\";\n\t\t}\n\t\tif(!operator.regexp) {\n\t\t\toperator.operand = filterString.substring(p,nextBracketPos);\n\t\t}\n\t\tp = nextBracketPos + 1;\n\n\t\t// Push this operator\n\t\toperators.push(operator);\n\t} while(filterString.charAt(p) !== \"]\");\n\t// Skip the ending square bracket\n\tif(filterString.charAt(p++) !== \"]\") {\n\t\tthrow \"Missing ] in filter expression\";\n\t}\n\t// Return the parsing position\n\treturn p;\n}\n\n/*\nParse a filter string\n*/\nexports.parseFilter = function(filterString) {\n\tfilterString = filterString || \"\";\n\tvar results = [], // Array of arrays of operator nodes {operator:,operand:}\n\t\tp = 0, // Current position in the filter string\n\t\tmatch;\n\tvar whitespaceRegExp = /(\\s+)/mg,\n\t\toperandRegExp = /((?:\\+|\\-|~|=)?)(?:(\\[)|(?:\"([^\"]*)\")|(?:'([^']*)')|([^\\s\\[\\]]+))/mg;\n\twhile(p < filterString.length) {\n\t\t// Skip any whitespace\n\t\twhitespaceRegExp.lastIndex = p;\n\t\tmatch = whitespaceRegExp.exec(filterString);\n\t\tif(match && match.index === p) {\n\t\t\tp = p + match[0].length;\n\t\t}\n\t\t// Match the start of the operation\n\t\tif(p < filterString.length) {\n\t\t\toperandRegExp.lastIndex = p;\n\t\t\tmatch = operandRegExp.exec(filterString);\n\t\t\tif(!match || match.index !== p) {\n\t\t\t\tthrow $tw.language.getString(\"Error/FilterSyntax\");\n\t\t\t}\n\t\t\tvar operation = {\n\t\t\t\tprefix: \"\",\n\t\t\t\toperators: []\n\t\t\t};\n\t\t\tif(match[1]) {\n\t\t\t\toperation.prefix = match[1];\n\t\t\t\tp++;\n\t\t\t}\n\t\t\tif(match[2]) { // Opening square bracket\n\t\t\t\tp = parseFilterOperation(operation.operators,filterString,p);\n\t\t\t} else {\n\t\t\t\tp = match.index + match[0].length;\n\t\t\t}\n\t\t\tif(match[3] || match[4] || match[5]) { // Double quoted string, single quoted string or unquoted title\n\t\t\t\toperation.operators.push(\n\t\t\t\t\t{operator: \"title\", operand: match[3] || match[4] || match[5]}\n\t\t\t\t);\n\t\t\t}\n\t\t\tresults.push(operation);\n\t\t}\n\t}\n\treturn results;\n};\n\nexports.getFilterOperators = function() {\n\tif(!this.filterOperators) {\n\t\t$tw.Wiki.prototype.filterOperators = {};\n\t\t$tw.modules.applyMethods(\"filteroperator\",this.filterOperators);\n\t}\n\treturn this.filterOperators;\n};\n\nexports.filterTiddlers = function(filterString,widget,source) {\n\tvar fn = this.compileFilter(filterString);\n\treturn fn.call(this,source,widget);\n};\n\n/*\nCompile a filter into a function with the signature fn(source,widget) where:\nsource: an iterator function for the source tiddlers, called source(iterator), where iterator is called as iterator(tiddler,title)\nwidget: an optional widget node for retrieving the current tiddler etc.\n*/\nexports.compileFilter = function(filterString) {\n\tvar filterParseTree;\n\ttry {\n\t\tfilterParseTree = this.parseFilter(filterString);\n\t} catch(e) {\n\t\treturn function(source,widget) {\n\t\t\treturn [$tw.language.getString(\"Error/Filter\") + \": \" + e];\n\t\t};\n\t}\n\t// Get the hashmap of filter operator functions\n\tvar filterOperators = this.getFilterOperators();\n\t// Assemble array of functions, one for each operation\n\tvar operationFunctions = [];\n\t// Step through the operations\n\tvar self = this;\n\t$tw.utils.each(filterParseTree,function(operation) {\n\t\t// Create a function for the chain of operators in the operation\n\t\tvar operationSubFunction = function(source,widget) {\n\t\t\tvar accumulator = source,\n\t\t\t\tresults = [],\n\t\t\t\tcurrTiddlerTitle = widget && widget.getVariable(\"currentTiddler\");\n\t\t\t$tw.utils.each(operation.operators,function(operator) {\n\t\t\t\tvar operand = operator.operand,\n\t\t\t\t\toperatorFunction;\n\t\t\t\tif(!operator.operator) {\n\t\t\t\t\toperatorFunction = filterOperators.title;\n\t\t\t\t} else if(!filterOperators[operator.operator]) {\n\t\t\t\t\toperatorFunction = filterOperators.field;\n\t\t\t\t} else {\n\t\t\t\t\toperatorFunction = filterOperators[operator.operator];\n\t\t\t\t}\n\t\t\t\tif(operator.indirect) {\n\t\t\t\t\toperand = self.getTextReference(operator.operand,\"\",currTiddlerTitle);\n\t\t\t\t}\n\t\t\t\tif(operator.variable) {\n\t\t\t\t\toperand = widget.getVariable(operator.operand,{defaultValue: \"\"});\n\t\t\t\t}\n\t\t\t\t// Invoke the appropriate filteroperator module\n\t\t\t\tresults = operatorFunction(accumulator,{\n\t\t\t\t\t\t\toperator: operator.operator,\n\t\t\t\t\t\t\toperand: operand,\n\t\t\t\t\t\t\tprefix: operator.prefix,\n\t\t\t\t\t\t\tsuffix: operator.suffix,\n\t\t\t\t\t\t\tsuffixes: operator.suffixes,\n\t\t\t\t\t\t\tregexp: operator.regexp\n\t\t\t\t\t\t},{\n\t\t\t\t\t\t\twiki: self,\n\t\t\t\t\t\t\twidget: widget\n\t\t\t\t\t\t});\n\t\t\t\tif($tw.utils.isArray(results)) {\n\t\t\t\t\taccumulator = self.makeTiddlerIterator(results);\n\t\t\t\t} else {\n\t\t\t\t\taccumulator = results;\n\t\t\t\t}\n\t\t\t});\n\t\t\tif($tw.utils.isArray(results)) {\n\t\t\t\treturn results;\n\t\t\t} else {\n\t\t\t\tvar resultArray = [];\n\t\t\t\tresults(function(tiddler,title) {\n\t\t\t\t\tresultArray.push(title);\n\t\t\t\t});\n\t\t\t\treturn resultArray;\n\t\t\t}\n\t\t};\n\t\t// Wrap the operator functions in a wrapper function that depends on the prefix\n\t\toperationFunctions.push((function() {\n\t\t\tswitch(operation.prefix || \"\") {\n\t\t\t\tcase \"\": // No prefix means that the operation is unioned into the result\n\t\t\t\t\treturn function(results,source,widget) {\n\t\t\t\t\t\t$tw.utils.pushTop(results,operationSubFunction(source,widget));\n\t\t\t\t\t};\n\t\t\t\tcase \"=\": // The results of the operation are pushed into the result without deduplication\n\t\t\t\t\treturn function(results,source,widget) {\n\t\t\t\t\t\tArray.prototype.push.apply(results,operationSubFunction(source,widget));\n\t\t\t\t\t};\n\t\t\t\tcase \"-\": // The results of this operation are removed from the main result\n\t\t\t\t\treturn function(results,source,widget) {\n\t\t\t\t\t\t$tw.utils.removeArrayEntries(results,operationSubFunction(source,widget));\n\t\t\t\t\t};\n\t\t\t\tcase \"+\": // This operation is applied to the main results so far\n\t\t\t\t\treturn function(results,source,widget) {\n\t\t\t\t\t\t// This replaces all the elements of the array, but keeps the actual array so that references to it are preserved\n\t\t\t\t\t\tsource = self.makeTiddlerIterator(results);\n\t\t\t\t\t\tresults.splice(0,results.length);\n\t\t\t\t\t\t$tw.utils.pushTop(results,operationSubFunction(source,widget));\n\t\t\t\t\t};\n\t\t\t\tcase \"~\": // This operation is unioned into the result only if the main result so far is empty\n\t\t\t\t\treturn function(results,source,widget) {\n\t\t\t\t\t\tif(results.length === 0) {\n\t\t\t\t\t\t\t// Main result so far is empty\n\t\t\t\t\t\t\t$tw.utils.pushTop(results,operationSubFunction(source,widget));\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t}\n\t\t})());\n\t});\n\t// Return a function that applies the operations to a source iterator of tiddler titles\n\treturn $tw.perf.measure(\"filter: \" + filterString,function filterFunction(source,widget) {\n\t\tif(!source) {\n\t\t\tsource = self.each;\n\t\t} else if(typeof source === \"object\") { // Array or hashmap\n\t\t\tsource = self.makeTiddlerIterator(source);\n\t\t}\n\t\tvar results = [];\n\t\t$tw.utils.each(operationFunctions,function(operationFunction) {\n\t\t\toperationFunction(results,source,widget);\n\t\t});\n\t\treturn results;\n\t});\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikimethod"
},
"$:/core/modules/indexers/backlinks-indexer.js": {
"title": "$:/core/modules/indexers/backlinks-indexer.js",
"text": "/*\\\ntitle: $:/core/modules/indexers/backlinks-indexer.js\ntype: application/javascript\nmodule-type: indexer\n\nIndexes the tiddlers' backlinks\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global modules: false */\n\"use strict\";\n\n\nfunction BacklinksIndexer(wiki) {\n\tthis.wiki = wiki;\n}\n\nBacklinksIndexer.prototype.init = function() {\n\tthis.index = null;\n}\n\nBacklinksIndexer.prototype.rebuild = function() {\n\tthis.index = null;\n}\n\nBacklinksIndexer.prototype._getLinks = function(tiddler) {\n\tvar parser = this.wiki.parseText(tiddler.fields.type, tiddler.fields.text, {});\n\tif(parser) {\n\t\treturn this.wiki.extractLinks(parser.tree);\n\t}\n\treturn [];\n}\n\nBacklinksIndexer.prototype.update = function(updateDescriptor) {\n\tif(!this.index) {\n\t\treturn;\n\t}\n\tvar newLinks = [],\n\t oldLinks = [],\n\t self = this;\n\tif(updateDescriptor.old.exists) {\n\t\toldLinks = this._getLinks(updateDescriptor.old.tiddler);\n\t}\n\tif(updateDescriptor.new.exists) {\n\t\tnewLinks = this._getLinks(updateDescriptor.new.tiddler);\n\t}\n\n\t$tw.utils.each(oldLinks,function(link) {\n\t\tif(self.index[link]) {\n\t\t\tdelete self.index[link][updateDescriptor.old.tiddler.fields.title];\n\t\t}\n\t});\n\t$tw.utils.each(newLinks,function(link) {\n\t\tif(!self.index[link]) {\n\t\t\tself.index[link] = Object.create(null);\n\t\t}\n\t\tself.index[link][updateDescriptor.new.tiddler.fields.title] = true;\n\t});\n}\n\nBacklinksIndexer.prototype.lookup = function(title) {\n\tif(!this.index) {\n\t\tthis.index = Object.create(null);\n\t\tvar self = this;\n\t\tthis.wiki.forEachTiddler(function(title,tiddler) {\n\t\t\tvar links = self._getLinks(tiddler);\n\t\t\t$tw.utils.each(links, function(link) {\n\t\t\t\tif(!self.index[link]) {\n\t\t\t\t\tself.index[link] = Object.create(null);\n\t\t\t\t}\n\t\t\t\tself.index[link][title] = true;\n\t\t\t});\n\t\t});\n\t}\n\tif(this.index[title]) {\n\t\treturn Object.keys(this.index[title]);\n\t} else {\n\t\treturn [];\n\t}\n}\n\nexports.BacklinksIndexer = BacklinksIndexer;\n\n})();\n",
"type": "application/javascript",
"module-type": "indexer"
},
"$:/core/modules/indexers/field-indexer.js": {
"title": "$:/core/modules/indexers/field-indexer.js",
"text": "/*\\\ntitle: $:/core/modules/indexers/field-indexer.js\ntype: application/javascript\nmodule-type: indexer\n\nIndexes the tiddlers with each field value\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global modules: false */\n\"use strict\";\n\nvar DEFAULT_MAXIMUM_INDEXED_VALUE_LENGTH = 128;\n\nfunction FieldIndexer(wiki) {\n\tthis.wiki = wiki;\n}\n\nFieldIndexer.prototype.init = function() {\n\tthis.index = null;\n\tthis.maxIndexedValueLength = DEFAULT_MAXIMUM_INDEXED_VALUE_LENGTH;\n\tthis.addIndexMethods();\n}\n\n// Provided for testing\nFieldIndexer.prototype.setMaxIndexedValueLength = function(length) {\n\tthis.index = null;\n\tthis.maxIndexedValueLength = length;\n};\n\nFieldIndexer.prototype.addIndexMethods = function() {\n\tvar self = this;\n\tthis.wiki.each.byField = function(name,value) {\n\t\tvar titles = self.wiki.allTitles(),\n\t\t\tlookup = self.lookup(name,value);\n\t\treturn lookup && lookup.filter(function(title) {\n\t\t\treturn titles.indexOf(title) !== -1;\n\t\t});\n\t};\n\tthis.wiki.eachShadow.byField = function(name,value) {\n\t\tvar titles = self.wiki.allShadowTitles(),\n\t\t\tlookup = self.lookup(name,value);\n\t\treturn lookup && lookup.filter(function(title) {\n\t\t\treturn titles.indexOf(title) !== -1;\n\t\t});\n\t};\n\tthis.wiki.eachTiddlerPlusShadows.byField = function(name,value) {\n\t\tvar lookup = self.lookup(name,value);\n\t\treturn lookup ? lookup.slice(0) : null;\n\t};\n\tthis.wiki.eachShadowPlusTiddlers.byField = function(name,value) {\n\t\tvar lookup = self.lookup(name,value);\n\t\treturn lookup ? lookup.slice(0) : null;\n\t};\n};\n\n/*\nTear down and then rebuild the index as if all tiddlers have changed\n*/\nFieldIndexer.prototype.rebuild = function() {\n\t// Invalidate the index so that it will be rebuilt when it is next used\n\tthis.index = null;\n};\n\n/*\nBuild the index for a particular field\n*/\nFieldIndexer.prototype.buildIndexForField = function(name) {\n\tvar self = this;\n\t// Hashmap by field name of hashmap by field value of array of tiddler titles\n\tthis.index = this.index || Object.create(null);\n\tthis.index[name] = Object.create(null);\n\tvar baseIndex = this.index[name];\n\t// Update the index for each tiddler\n\tthis.wiki.eachTiddlerPlusShadows(function(tiddler,title) {\n\t\tif(name in tiddler.fields) {\n\t\t\tvar value = tiddler.getFieldString(name);\n\t\t\t// Skip any values above the maximum length\n\t\t\tif(value.length < self.maxIndexedValueLength) {\n\t\t\t\tbaseIndex[value] = baseIndex[value] || [];\n\t\t\t\tbaseIndex[value].push(title);\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\nUpdate the index in the light of a tiddler value changing; note that the title must be identical. (Renames are handled as a separate delete and create)\nupdateDescriptor: {old: {tiddler: <tiddler>, shadow: <boolean>, exists: <boolean>},new: {tiddler: <tiddler>, shadow: <boolean>, exists: <boolean>}}\n*/\nFieldIndexer.prototype.update = function(updateDescriptor) {\n\tvar self = this;\n\t// Don't do anything if the index hasn't been built yet\n\tif(this.index === null) {\n\t\treturn;\n\t}\n\t// Remove the old tiddler from the index\n\tif(updateDescriptor.old.tiddler) {\n\t\t$tw.utils.each(this.index,function(indexEntry,name) {\n\t\t\tif(name in updateDescriptor.old.tiddler.fields) {\n\t\t\t\tvar value = updateDescriptor.old.tiddler.getFieldString(name),\n\t\t\t\t\ttiddlerList = indexEntry[value];\n\t\t\t\tif(tiddlerList) {\n\t\t\t\t\tvar index = tiddlerList.indexOf(updateDescriptor.old.tiddler.fields.title);\n\t\t\t\t\tif(index !== -1) {\n\t\t\t\t\t\ttiddlerList.splice(index,1);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\t// Add the new tiddler to the index\n\tif(updateDescriptor[\"new\"].tiddler) {\n\t\t$tw.utils.each(this.index,function(indexEntry,name) {\n\t\t\tif(name in updateDescriptor[\"new\"].tiddler.fields) {\n\t\t\t\tvar value = updateDescriptor[\"new\"].tiddler.getFieldString(name);\n\t\t\t\tif(value.length < self.maxIndexedValueLength) {\n\t\t\t\t\tindexEntry[value] = indexEntry[value] || [];\n\t\t\t\t\tindexEntry[value].push(updateDescriptor[\"new\"].tiddler.fields.title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\t\t\n\t}\n};\n\n// Lookup the given field returning a list of tiddler titles\nFieldIndexer.prototype.lookup = function(name,value) {\n\t// Fail the lookup if the value is too long\n\tif(value.length >= this.maxIndexedValueLength) {\n\t\treturn null;\n\t}\n\t// Update the index if it has yet to be built\n\tif(this.index === null || !this.index[name]) {\n\t\tthis.buildIndexForField(name);\n\t}\n\treturn this.index[name][value] || [];\n};\n\nexports.FieldIndexer = FieldIndexer;\n\n})();\n",
"type": "application/javascript",
"module-type": "indexer"
},
"$:/core/modules/indexers/tag-indexer.js": {
"title": "$:/core/modules/indexers/tag-indexer.js",
"text": "/*\\\ntitle: $:/core/modules/indexers/tag-indexer.js\ntype: application/javascript\nmodule-type: indexer\n\nIndexes the tiddlers with each tag\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global modules: false */\n\"use strict\";\n\nfunction TagIndexer(wiki) {\n\tthis.wiki = wiki;\n}\n\nTagIndexer.prototype.init = function() {\n\tthis.subIndexers = [\n\t\tnew TagSubIndexer(this,\"each\"),\n\t\tnew TagSubIndexer(this,\"eachShadow\"),\n\t\tnew TagSubIndexer(this,\"eachTiddlerPlusShadows\"),\n\t\tnew TagSubIndexer(this,\"eachShadowPlusTiddlers\")\n\t];\n\t$tw.utils.each(this.subIndexers,function(subIndexer) {\n\t\tsubIndexer.addIndexMethod();\n\t});\n};\n\nTagIndexer.prototype.rebuild = function() {\n\t$tw.utils.each(this.subIndexers,function(subIndexer) {\n\t\tsubIndexer.rebuild();\n\t});\n};\n\nTagIndexer.prototype.update = function(updateDescriptor) {\n\t$tw.utils.each(this.subIndexers,function(subIndexer) {\n\t\tsubIndexer.update(updateDescriptor);\n\t});\n};\n\nfunction TagSubIndexer(indexer,iteratorMethod) {\n\tthis.indexer = indexer;\n\tthis.iteratorMethod = iteratorMethod;\n\tthis.index = null; // Hashmap of tag title to {isSorted: bool, titles: [array]} or null if not yet initialised\n}\n\nTagSubIndexer.prototype.addIndexMethod = function() {\n\tvar self = this;\n\tthis.indexer.wiki[this.iteratorMethod].byTag = function(tag) {\n\t\treturn self.lookup(tag).slice(0);\n\t};\n};\n\nTagSubIndexer.prototype.rebuild = function() {\n\tvar self = this;\n\t// Hashmap by tag of array of {isSorted:, titles:[]}\n\tthis.index = Object.create(null);\n\t// Add all the tags\n\tthis.indexer.wiki[this.iteratorMethod](function(tiddler,title) {\n\t\t$tw.utils.each(tiddler.fields.tags,function(tag) {\n\t\t\tif(!self.index[tag]) {\n\t\t\t\tself.index[tag] = {isSorted: false, titles: [title]};\n\t\t\t} else {\n\t\t\t\tself.index[tag].titles.push(title);\n\t\t\t}\n\t\t});\t\t\n\t});\n};\n\nTagSubIndexer.prototype.update = function(updateDescriptor) {\n\tthis.index = null;\n};\n\nTagSubIndexer.prototype.lookup = function(tag) {\n\t// Update the index if it has yet to be built\n\tif(this.index === null) {\n\t\tthis.rebuild();\n\t}\n\tvar indexRecord = this.index[tag];\n\tif(indexRecord) {\n\t\tif(!indexRecord.isSorted) {\n\t\t\tif(this.indexer.wiki.sortByList) {\n\t\t\t\tindexRecord.titles = this.indexer.wiki.sortByList(indexRecord.titles,tag);\n\t\t\t}\t\t\t\n\t\t\tindexRecord.isSorted = true;\n\t\t}\n\t\treturn indexRecord.titles;\n\t} else {\n\t\treturn [];\n\t}\n};\n\n\nexports.TagIndexer = TagIndexer;\n\n})();\n",
"type": "application/javascript",
"module-type": "indexer"
},
"$:/core/modules/info/platform.js": {
"title": "$:/core/modules/info/platform.js",
"text": "/*\\\ntitle: $:/core/modules/info/platform.js\ntype: application/javascript\nmodule-type: info\n\nInitialise basic platform $:/info/ tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.getInfoTiddlerFields = function() {\n\tvar mapBoolean = function(value) {return value ? \"yes\" : \"no\";},\n\t\tinfoTiddlerFields = [];\n\t// Basics\n\tinfoTiddlerFields.push({title: \"$:/info/browser\", text: mapBoolean(!!$tw.browser)});\n\tinfoTiddlerFields.push({title: \"$:/info/node\", text: mapBoolean(!!$tw.node)});\n\tif($tw.browser) {\n\t\t// Document location\n\t\tvar setLocationProperty = function(name,value) {\n\t\t\t\tinfoTiddlerFields.push({title: \"$:/info/url/\" + name, text: value});\t\t\t\n\t\t\t},\n\t\t\tlocation = document.location;\n\t\tsetLocationProperty(\"full\", (location.toString()).split(\"#\")[0]);\n\t\tsetLocationProperty(\"host\", location.host);\n\t\tsetLocationProperty(\"hostname\", location.hostname);\n\t\tsetLocationProperty(\"protocol\", location.protocol);\n\t\tsetLocationProperty(\"port\", location.port);\n\t\tsetLocationProperty(\"pathname\", location.pathname);\n\t\tsetLocationProperty(\"search\", location.search);\n\t\tsetLocationProperty(\"origin\", location.origin);\n\t\t// Screen size\n\t\tinfoTiddlerFields.push({title: \"$:/info/browser/screen/width\", text: window.screen.width.toString()});\n\t\tinfoTiddlerFields.push({title: \"$:/info/browser/screen/height\", text: window.screen.height.toString()});\n\t\t// Language\n\t\tinfoTiddlerFields.push({title: \"$:/info/browser/language\", text: navigator.language || \"\"});\n\t}\n\treturn infoTiddlerFields;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "info"
},
"$:/core/modules/keyboard.js": {
"title": "$:/core/modules/keyboard.js",
"text": "/*\\\ntitle: $:/core/modules/keyboard.js\ntype: application/javascript\nmodule-type: global\n\nKeyboard handling utilities\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar namedKeys = {\n\t\"cancel\": 3,\n\t\"help\": 6,\n\t\"backspace\": 8,\n\t\"tab\": 9,\n\t\"clear\": 12,\n\t\"return\": 13,\n\t\"enter\": 13,\n\t\"pause\": 19,\n\t\"escape\": 27,\n\t\"space\": 32,\n\t\"page_up\": 33,\n\t\"page_down\": 34,\n\t\"end\": 35,\n\t\"home\": 36,\n\t\"left\": 37,\n\t\"up\": 38,\n\t\"right\": 39,\n\t\"down\": 40,\n\t\"printscreen\": 44,\n\t\"insert\": 45,\n\t\"delete\": 46,\n\t\"0\": 48,\n\t\"1\": 49,\n\t\"2\": 50,\n\t\"3\": 51,\n\t\"4\": 52,\n\t\"5\": 53,\n\t\"6\": 54,\n\t\"7\": 55,\n\t\"8\": 56,\n\t\"9\": 57,\n\t\"firefoxsemicolon\": 59,\n\t\"firefoxequals\": 61,\n\t\"a\": 65,\n\t\"b\": 66,\n\t\"c\": 67,\n\t\"d\": 68,\n\t\"e\": 69,\n\t\"f\": 70,\n\t\"g\": 71,\n\t\"h\": 72,\n\t\"i\": 73,\n\t\"j\": 74,\n\t\"k\": 75,\n\t\"l\": 76,\n\t\"m\": 77,\n\t\"n\": 78,\n\t\"o\": 79,\n\t\"p\": 80,\n\t\"q\": 81,\n\t\"r\": 82,\n\t\"s\": 83,\n\t\"t\": 84,\n\t\"u\": 85,\n\t\"v\": 86,\n\t\"w\": 87,\n\t\"x\": 88,\n\t\"y\": 89,\n\t\"z\": 90,\n\t\"numpad0\": 96,\n\t\"numpad1\": 97,\n\t\"numpad2\": 98,\n\t\"numpad3\": 99,\n\t\"numpad4\": 100,\n\t\"numpad5\": 101,\n\t\"numpad6\": 102,\n\t\"numpad7\": 103,\n\t\"numpad8\": 104,\n\t\"numpad9\": 105,\n\t\"multiply\": 106,\n\t\"add\": 107,\n\t\"separator\": 108,\n\t\"subtract\": 109,\n\t\"decimal\": 110,\n\t\"divide\": 111,\n\t\"f1\": 112,\n\t\"f2\": 113,\n\t\"f3\": 114,\n\t\"f4\": 115,\n\t\"f5\": 116,\n\t\"f6\": 117,\n\t\"f7\": 118,\n\t\"f8\": 119,\n\t\"f9\": 120,\n\t\"f10\": 121,\n\t\"f11\": 122,\n\t\"f12\": 123,\n\t\"f13\": 124,\n\t\"f14\": 125,\n\t\"f15\": 126,\n\t\"f16\": 127,\n\t\"f17\": 128,\n\t\"f18\": 129,\n\t\"f19\": 130,\n\t\"f20\": 131,\n\t\"f21\": 132,\n\t\"f22\": 133,\n\t\"f23\": 134,\n\t\"f24\": 135,\n\t\"firefoxminus\": 173,\n\t\"semicolon\": 186,\n\t\"equals\": 187,\n\t\"comma\": 188,\n\t\"dash\": 189,\n\t\"period\": 190,\n\t\"slash\": 191,\n\t\"backquote\": 192,\n\t\"openbracket\": 219,\n\t\"backslash\": 220,\n\t\"closebracket\": 221,\n\t\"quote\": 222\n};\n\nfunction KeyboardManager(options) {\n\tvar self = this;\n\toptions = options || \"\";\n\t// Save the named key hashmap\n\tthis.namedKeys = namedKeys;\n\t// Create a reverse mapping of code to keyname\n\tthis.keyNames = [];\n\t$tw.utils.each(namedKeys,function(keyCode,name) {\n\t\tself.keyNames[keyCode] = name.substr(0,1).toUpperCase() + name.substr(1);\n\t});\n\t// Save the platform-specific name of the \"meta\" key\n\tthis.metaKeyName = $tw.platform.isMac ? \"cmd-\" : \"win-\";\n\tthis.shortcutKeysList = [], // Stores the shortcut-key descriptors\n\tthis.shortcutActionList = [], // Stores the corresponding action strings\n\tthis.shortcutParsedList = []; // Stores the parsed key descriptors\n\tthis.lookupNames = [\"shortcuts\"];\n\tthis.lookupNames.push($tw.platform.isMac ? \"shortcuts-mac\" : \"shortcuts-not-mac\")\n\tthis.lookupNames.push($tw.platform.isWindows ? \"shortcuts-windows\" : \"shortcuts-not-windows\");\n\tthis.lookupNames.push($tw.platform.isLinux ? \"shortcuts-linux\" : \"shortcuts-not-linux\");\n\tthis.updateShortcutLists(this.getShortcutTiddlerList());\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\tself.handleShortcutChanges(changes);\n\t});\n}\n\n/*\nReturn an array of keycodes for the modifier keys ctrl, shift, alt, meta\n*/\nKeyboardManager.prototype.getModifierKeys = function() {\n\treturn [\n\t\t16, // Shift\n\t\t17, // Ctrl\n\t\t18, // Alt\n\t\t20, // CAPS LOCK\n\t\t91, // Meta (left)\n\t\t93, // Meta (right)\n\t\t224 // Meta (Firefox)\n\t]\n};\n\n/*\nParses a key descriptor into the structure:\n{\n\tkeyCode: numeric keycode\n\tshiftKey: boolean\n\taltKey: boolean\n\tctrlKey: boolean\n\tmetaKey: boolean\n}\nKey descriptors have the following format:\n\tctrl+enter\n\tctrl+shift+alt+A\n*/\nKeyboardManager.prototype.parseKeyDescriptor = function(keyDescriptor) {\n\tvar components = keyDescriptor.split(/\\+|\\-/),\n\t\tinfo = {\n\t\t\tkeyCode: 0,\n\t\t\tshiftKey: false,\n\t\t\taltKey: false,\n\t\t\tctrlKey: false,\n\t\t\tmetaKey: false\n\t\t};\n\tfor(var t=0; t<components.length; t++) {\n\t\tvar s = components[t].toLowerCase(),\n\t\t\tc = s.charCodeAt(0);\n\t\t// Look for modifier keys\n\t\tif(s === \"ctrl\") {\n\t\t\tinfo.ctrlKey = true;\n\t\t} else if(s === \"shift\") {\n\t\t\tinfo.shiftKey = true;\n\t\t} else if(s === \"alt\") {\n\t\t\tinfo.altKey = true;\n\t\t} else if(s === \"meta\" || s === \"cmd\" || s === \"win\") {\n\t\t\tinfo.metaKey = true;\n\t\t}\n\t\t// Replace named keys with their code\n\t\tif(this.namedKeys[s]) {\n\t\t\tinfo.keyCode = this.namedKeys[s];\n\t\t}\n\t}\n\tif(info.keyCode) {\n\t\treturn info;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nParse a list of key descriptors into an array of keyInfo objects. The key descriptors can be passed as an array of strings or a space separated string\n*/\nKeyboardManager.prototype.parseKeyDescriptors = function(keyDescriptors,options) {\n\tvar self = this;\n\toptions = options || {};\n\toptions.stack = options.stack || [];\n\tvar wiki = options.wiki || $tw.wiki;\n\tif(typeof keyDescriptors === \"string\" && keyDescriptors === \"\") {\n\t\treturn [];\n\t}\n\tif(!$tw.utils.isArray(keyDescriptors)) {\n\t\tkeyDescriptors = keyDescriptors.split(\" \");\n\t}\n\tvar result = [];\n\t$tw.utils.each(keyDescriptors,function(keyDescriptor) {\n\t\t// Look for a named shortcut\n\t\tif(keyDescriptor.substr(0,2) === \"((\" && keyDescriptor.substr(-2,2) === \"))\") {\n\t\t\tif(options.stack.indexOf(keyDescriptor) === -1) {\n\t\t\t\toptions.stack.push(keyDescriptor);\n\t\t\t\tvar name = keyDescriptor.substring(2,keyDescriptor.length - 2),\n\t\t\t\t\tlookupName = function(configName) {\n\t\t\t\t\t\tvar keyDescriptors = wiki.getTiddlerText(\"$:/config/\" + configName + \"/\" + name);\n\t\t\t\t\t\tif(keyDescriptors) {\n\t\t\t\t\t\t\tresult.push.apply(result,self.parseKeyDescriptors(keyDescriptors,options));\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t$tw.utils.each(self.lookupNames,function(platformDescriptor) {\n\t\t\t\t\tlookupName(platformDescriptor);\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\tresult.push(self.parseKeyDescriptor(keyDescriptor));\n\t\t}\n\t});\n\treturn result;\n};\n\nKeyboardManager.prototype.getPrintableShortcuts = function(keyInfoArray) {\n\tvar self = this,\n\t\tresult = [];\n\t$tw.utils.each(keyInfoArray,function(keyInfo) {\n\t\tif(keyInfo) {\n\t\t\tresult.push((keyInfo.ctrlKey ? \"ctrl-\" : \"\") + \n\t\t\t\t (keyInfo.shiftKey ? \"shift-\" : \"\") + \n\t\t\t\t (keyInfo.altKey ? \"alt-\" : \"\") + \n\t\t\t\t (keyInfo.metaKey ? self.metaKeyName : \"\") + \n\t\t\t\t (self.keyNames[keyInfo.keyCode]));\n\t\t}\n\t});\n\treturn result;\n}\n\nKeyboardManager.prototype.checkKeyDescriptor = function(event,keyInfo) {\n\treturn keyInfo &&\n\t\t\tevent.keyCode === keyInfo.keyCode && \n\t\t\tevent.shiftKey === keyInfo.shiftKey && \n\t\t\tevent.altKey === keyInfo.altKey && \n\t\t\tevent.ctrlKey === keyInfo.ctrlKey && \n\t\t\tevent.metaKey === keyInfo.metaKey;\n};\n\nKeyboardManager.prototype.checkKeyDescriptors = function(event,keyInfoArray) {\n\tfor(var t=0; t<keyInfoArray.length; t++) {\n\t\tif(this.checkKeyDescriptor(event,keyInfoArray[t])) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\nKeyboardManager.prototype.getShortcutTiddlerList = function() {\n\treturn $tw.wiki.getTiddlersWithTag(\"$:/tags/KeyboardShortcut\");\n};\n\nKeyboardManager.prototype.updateShortcutLists = function(tiddlerList) {\n\tthis.shortcutTiddlers = tiddlerList;\n\tfor(var i=0; i<tiddlerList.length; i++) {\n\t\tvar title = tiddlerList[i],\n\t\t\ttiddlerFields = $tw.wiki.getTiddler(title).fields;\n\t\tthis.shortcutKeysList[i] = tiddlerFields.key !== undefined ? tiddlerFields.key : undefined;\n\t\tthis.shortcutActionList[i] = tiddlerFields.text;\n\t\tthis.shortcutParsedList[i] = this.shortcutKeysList[i] !== undefined ? this.parseKeyDescriptors(this.shortcutKeysList[i]) : undefined;\n\t}\n};\n\nKeyboardManager.prototype.handleKeydownEvent = function(event) {\n\tvar key, action;\n\tfor(var i=0; i<this.shortcutTiddlers.length; i++) {\n\t\tif(this.shortcutParsedList[i] !== undefined && this.checkKeyDescriptors(event,this.shortcutParsedList[i])) {\n\t\t\tkey = this.shortcutParsedList[i];\n\t\t\taction = this.shortcutActionList[i];\n\t\t}\n\t}\n\tif(key !== undefined) {\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\t$tw.rootWidget.invokeActionString(action,$tw.rootWidget);\n\t\treturn true;\n\t}\n\treturn false;\n};\n\nKeyboardManager.prototype.detectNewShortcuts = function(changedTiddlers) {\n\tvar shortcutConfigTiddlers = [],\n\t\thandled = false;\n\t$tw.utils.each(this.lookupNames,function(platformDescriptor) {\n\t\tvar descriptorString = \"$:/config/\" + platformDescriptor + \"/\";\n\t\tObject.keys(changedTiddlers).forEach(function(configTiddler) {\n\t\t\tvar configString = configTiddler.substr(0, configTiddler.lastIndexOf(\"/\") + 1);\n\t\t\tif(configString === descriptorString) {\n\t\t\t\tshortcutConfigTiddlers.push(configTiddler);\n\t\t\t\thandled = true;\n\t\t\t}\n\t\t});\n\t});\n\tif(handled) {\n\t\treturn $tw.utils.hopArray(changedTiddlers,shortcutConfigTiddlers);\n\t} else {\n\t\treturn false;\n\t}\n};\n\nKeyboardManager.prototype.handleShortcutChanges = function(changedTiddlers) {\n\tvar newList = this.getShortcutTiddlerList();\n\tvar hasChanged = $tw.utils.hopArray(changedTiddlers,this.shortcutTiddlers) ? true :\n\t\t($tw.utils.hopArray(changedTiddlers,newList) ? true :\n\t\t(this.detectNewShortcuts(changedTiddlers))\n\t);\n\t// Re-cache shortcuts if something changed\n\tif(hasChanged) {\n\t\tthis.updateShortcutLists(newList);\n\t}\n};\n\nexports.KeyboardManager = KeyboardManager;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/language.js": {
"title": "$:/core/modules/language.js",
"text": "/*\\\ntitle: $:/core/modules/language.js\ntype: application/javascript\nmodule-type: global\n\nThe $tw.Language() manages translateable strings\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nCreate an instance of the language manager. Options include:\nwiki: wiki from which to retrieve translation tiddlers\n*/\nfunction Language(options) {\n\toptions = options || \"\";\n\tthis.wiki = options.wiki || $tw.wiki;\n}\n\n/*\nReturn a wikified translateable string. The title is automatically prefixed with \"$:/language/\"\nOptions include:\nvariables: optional hashmap of variables to supply to the language wikification\n*/\nLanguage.prototype.getString = function(title,options) {\n\toptions = options || {};\n\ttitle = \"$:/language/\" + title;\n\treturn this.wiki.renderTiddler(\"text/plain\",title,{variables: options.variables});\n};\n\n/*\nReturn a raw, unwikified translateable string. The title is automatically prefixed with \"$:/language/\"\n*/\nLanguage.prototype.getRawString = function(title) {\n\ttitle = \"$:/language/\" + title;\n\treturn this.wiki.getTiddlerText(title);\n};\n\nexports.Language = Language;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/macros/changecount.js": {
"title": "$:/core/modules/macros/changecount.js",
"text": "/*\\\ntitle: $:/core/modules/macros/changecount.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to return the changecount for the current tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"changecount\";\n\nexports.params = [];\n\n/*\nRun the macro\n*/\nexports.run = function() {\n\treturn this.wiki.getChangeCount(this.getVariable(\"currentTiddler\")) + \"\";\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/contrastcolour.js": {
"title": "$:/core/modules/macros/contrastcolour.js",
"text": "/*\\\ntitle: $:/core/modules/macros/contrastcolour.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to choose which of two colours has the highest contrast with a base colour\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"contrastcolour\";\n\nexports.params = [\n\t{name: \"target\"},\n\t{name: \"fallbackTarget\"},\n\t{name: \"colourA\"},\n\t{name: \"colourB\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(target,fallbackTarget,colourA,colourB) {\n\tvar rgbTarget = $tw.utils.parseCSSColor(target) || $tw.utils.parseCSSColor(fallbackTarget);\n\tif(!rgbTarget) {\n\t\treturn colourA;\n\t}\n\tvar rgbColourA = $tw.utils.parseCSSColor(colourA),\n\t\trgbColourB = $tw.utils.parseCSSColor(colourB);\n\tif(rgbColourA && !rgbColourB) {\n\t\treturn rgbColourA;\n\t}\n\tif(rgbColourB && !rgbColourA) {\n\t\treturn rgbColourB;\n\t}\n\tif(!rgbColourA && !rgbColourB) {\n\t\t// If neither colour is readable, return a crude inverse of the target\n\t\treturn [255 - rgbTarget[0],255 - rgbTarget[1],255 - rgbTarget[2],rgbTarget[3]];\n\t}\n\t// Colour brightness formula derived from http://www.w3.org/WAI/ER/WD-AERT/#color-contrast\n\tvar brightnessTarget = rgbTarget[0] * 0.299 + rgbTarget[1] * 0.587 + rgbTarget[2] * 0.114,\n\t\tbrightnessA = rgbColourA[0] * 0.299 + rgbColourA[1] * 0.587 + rgbColourA[2] * 0.114,\n\t\tbrightnessB = rgbColourB[0] * 0.299 + rgbColourB[1] * 0.587 + rgbColourB[2] * 0.114;\n\treturn Math.abs(brightnessTarget - brightnessA) > Math.abs(brightnessTarget - brightnessB) ? colourA : colourB;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/csvtiddlers.js": {
"title": "$:/core/modules/macros/csvtiddlers.js",
"text": "/*\\\ntitle: $:/core/modules/macros/csvtiddlers.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to output tiddlers matching a filter to CSV\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"csvtiddlers\";\n\nexports.params = [\n\t{name: \"filter\"},\n\t{name: \"format\"},\n];\n\n/*\nRun the macro\n*/\nexports.run = function(filter,format) {\n\tvar self = this,\n\t\ttiddlers = this.wiki.filterTiddlers(filter),\n\t\ttiddler,\n\t\tfields = [],\n\t\tt,f;\n\t// Collect all the fields\n\tfor(t=0;t<tiddlers.length; t++) {\n\t\ttiddler = this.wiki.getTiddler(tiddlers[t]);\n\t\tfor(f in tiddler.fields) {\n\t\t\tif(fields.indexOf(f) === -1) {\n\t\t\t\tfields.push(f);\n\t\t\t}\n\t\t}\n\t}\n\t// Sort the fields and bring the standard ones to the front\n\tfields.sort();\n\t\"title text modified modifier created creator\".split(\" \").reverse().forEach(function(value,index) {\n\t\tvar p = fields.indexOf(value);\n\t\tif(p !== -1) {\n\t\t\tfields.splice(p,1);\n\t\t\tfields.unshift(value)\n\t\t}\n\t});\n\t// Output the column headings\n\tvar output = [], row = [];\n\tfields.forEach(function(value) {\n\t\trow.push(quoteAndEscape(value))\n\t});\n\toutput.push(row.join(\",\"));\n\t// Output each tiddler\n\tfor(var t=0;t<tiddlers.length; t++) {\n\t\trow = [];\n\t\ttiddler = this.wiki.getTiddler(tiddlers[t]);\n\t\t\tfor(f=0; f<fields.length; f++) {\n\t\t\t\trow.push(quoteAndEscape(tiddler ? tiddler.getFieldString(fields[f]) || \"\" : \"\"));\n\t\t\t}\n\t\toutput.push(row.join(\",\"));\n\t}\n\treturn output.join(\"\\n\");\n};\n\nfunction quoteAndEscape(value) {\n\treturn \"\\\"\" + value.replace(/\"/mg,\"\\\"\\\"\") + \"\\\"\";\n}\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/displayshortcuts.js": {
"title": "$:/core/modules/macros/displayshortcuts.js",
"text": "/*\\\ntitle: $:/core/modules/macros/displayshortcuts.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to display a list of keyboard shortcuts in human readable form. Notably, it resolves named shortcuts like `((bold))` to the underlying keystrokes.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"displayshortcuts\";\n\nexports.params = [\n\t{name: \"shortcuts\"},\n\t{name: \"prefix\"},\n\t{name: \"separator\"},\n\t{name: \"suffix\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(shortcuts,prefix,separator,suffix) {\n\tvar shortcutArray = $tw.keyboardManager.getPrintableShortcuts($tw.keyboardManager.parseKeyDescriptors(shortcuts,{\n\t\twiki: this.wiki\n\t}));\n\tif(shortcutArray.length > 0) {\n\t\tshortcutArray.sort(function(a,b) {\n\t\t return a.toLowerCase().localeCompare(b.toLowerCase());\n\t\t})\n\t\treturn prefix + shortcutArray.join(separator) + suffix;\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/jsontiddler.js": {
"title": "$:/core/modules/macros/jsontiddler.js",
"text": "/*\\\ntitle: $:/core/modules/macros/jsontiddler.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to output a single tiddler to JSON\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"jsontiddler\";\n\nexports.params = [\n\t{name: \"title\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(title) {\n\ttitle = title || this.getVariable(\"currentTiddler\");\n\tvar tiddler = !!title && this.wiki.getTiddler(title),\n\t\tfields = new Object();\n\tif(tiddler) {\n\t\tfor(var field in tiddler.fields) {\n\t\t\tfields[field] = tiddler.getFieldString(field);\n\t\t}\n\t}\n\treturn JSON.stringify(fields,null,$tw.config.preferences.jsonSpaces);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/jsontiddlers.js": {
"title": "$:/core/modules/macros/jsontiddlers.js",
"text": "/*\\\ntitle: $:/core/modules/macros/jsontiddlers.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to output tiddlers matching a filter to JSON\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"jsontiddlers\";\n\nexports.params = [\n\t{name: \"filter\"},\n\t{name: \"spaces\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(filter,spaces) {\n\treturn this.wiki.getTiddlersAsJson(filter,$tw.utils.parseInt(spaces));\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/makedatauri.js": {
"title": "$:/core/modules/macros/makedatauri.js",
"text": "/*\\\ntitle: $:/core/modules/macros/makedatauri.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to convert a string of text to a data URI\n\n<<makedatauri text:\"Text to be converted\" type:\"text/vnd.tiddlywiki\">>\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"makedatauri\";\n\nexports.params = [\n\t{name: \"text\"},\n\t{name: \"type\"},\n\t{name: \"_canonical_uri\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(text,type,_canonical_uri) {\n\treturn $tw.utils.makeDataUri(text,type,_canonical_uri);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/now.js": {
"title": "$:/core/modules/macros/now.js",
"text": "/*\\\ntitle: $:/core/modules/macros/now.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to return a formatted version of the current time\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"now\";\n\nexports.params = [\n\t{name: \"format\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(format) {\n\treturn $tw.utils.formatDateString(new Date(),format || \"0hh:0mm, DDth MMM YYYY\");\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/qualify.js": {
"title": "$:/core/modules/macros/qualify.js",
"text": "/*\\\ntitle: $:/core/modules/macros/qualify.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to qualify a state tiddler title according\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"qualify\";\n\nexports.params = [\n\t{name: \"title\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(title) {\n\treturn title + \"-\" + this.getStateQualifier();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/resolvepath.js": {
"title": "$:/core/modules/macros/resolvepath.js",
"text": "/*\\\ntitle: $:/core/modules/macros/resolvepath.js\ntype: application/javascript\nmodule-type: macro\n\nResolves a relative path for an absolute rootpath.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"resolvepath\";\n\nexports.params = [\n\t{name: \"source\"},\n\t{name: \"root\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(source, root) {\n\treturn $tw.utils.resolvePath(source, root);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/unusedtitle.js": {
"title": "$:/core/modules/macros/unusedtitle.js",
"text": "/*\\\ntitle: $:/core/modules/macros/unusedtitle.js\ntype: application/javascript\nmodule-type: macro\nMacro to return a new title that is unused in the wiki. It can be given a name as a base.\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"unusedtitle\";\n\nexports.params = [\n\t{name: \"baseName\"},\n\t{name: \"options\"}\n];\n\n/*\nRun the macro\n*/\nexports.run = function(baseName, options) {\n\tif(!baseName) {\n\t\tbaseName = $tw.language.getString(\"DefaultNewTiddlerTitle\");\n\t}\n\treturn this.wiki.generateNewTitle(baseName, options);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/macros/version.js": {
"title": "$:/core/modules/macros/version.js",
"text": "/*\\\ntitle: $:/core/modules/macros/version.js\ntype: application/javascript\nmodule-type: macro\n\nMacro to return the TiddlyWiki core version number\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInformation about this macro\n*/\n\nexports.name = \"version\";\n\nexports.params = [];\n\n/*\nRun the macro\n*/\nexports.run = function() {\n\treturn $tw.version;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "macro"
},
"$:/core/modules/parsers/audioparser.js": {
"title": "$:/core/modules/parsers/audioparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/audioparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe audio parser parses an audio tiddler into an embeddable HTML element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar AudioParser = function(type,text,options) {\n\tvar element = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"audio\",\n\t\t\tattributes: {\n\t\t\t\tcontrols: {type: \"string\", value: \"controls\"},\n\t\t\t\tstyle: {type: \"string\", value: \"width: 100%; object-fit: contain\"}\n\t\t\t}\n\t\t},\n\t\tsrc;\n\tif(options._canonical_uri) {\n\t\telement.attributes.src = {type: \"string\", value: options._canonical_uri};\n\t} else if(text) {\n\t\telement.attributes.src = {type: \"string\", value: \"data:\" + type + \";base64,\" + text};\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"audio/ogg\"] = AudioParser;\nexports[\"audio/mpeg\"] = AudioParser;\nexports[\"audio/mp3\"] = AudioParser;\nexports[\"audio/mp4\"] = AudioParser;\n\n})();\n\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/binaryparser.js": {
"title": "$:/core/modules/parsers/binaryparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/binaryparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe binary parser parses a binary tiddler into a warning message and download link\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar BINARY_WARNING_MESSAGE = \"$:/core/ui/BinaryWarning\";\nvar EXPORT_BUTTON_IMAGE = \"$:/core/images/export-button\";\n\nvar BinaryParser = function(type,text,options) {\n\t// Transclude the binary data tiddler warning message\n\tvar warn = {\n\t\ttype: \"element\",\n\t\ttag: \"p\",\n\t\tchildren: [{\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: BINARY_WARNING_MESSAGE}\n\t\t\t}\n\t\t}]\n\t};\n\t// Create download link based on binary tiddler title\n\tvar link = {\n\t\ttype: \"element\",\n\t\ttag: \"a\",\n\t\tattributes: {\n\t\t\ttitle: {type: \"indirect\", textReference: \"!!title\"},\n\t\t\tdownload: {type: \"indirect\", textReference: \"!!title\"}\n\t\t},\n\t\tchildren: [{\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: EXPORT_BUTTON_IMAGE}\n\t\t\t}\n\t\t}]\n\t};\n\t// Set the link href to external or internal data URI\n\tif(options._canonical_uri) {\n\t\tlink.attributes.href = {\n\t\t\ttype: \"string\", \n\t\t\tvalue: options._canonical_uri\n\t\t};\n\t} else if(text) {\n\t\tlink.attributes.href = {\n\t\t\ttype: \"string\", \n\t\t\tvalue: \"data:\" + type + \";base64,\" + text\n\t\t};\n\t}\n\t// Combine warning message and download link in a div\n\tvar element = {\n\t\ttype: \"element\",\n\t\ttag: \"div\",\n\t\tattributes: {\n\t\t\tclass: {type: \"string\", value: \"tc-binary-warning\"}\n\t\t},\n\t\tchildren: [warn, link]\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"application/octet-stream\"] = BinaryParser;\n\n})();\n\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/csvparser.js": {
"title": "$:/core/modules/parsers/csvparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/csvparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe CSV text parser processes CSV files into a table wrapped in a scrollable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar CsvParser = function(type,text,options) {\n\t// Table framework\n\tthis.tree = [{\n\t\t\"type\": \"scrollable\", \"children\": [{\n\t\t\t\"type\": \"element\", \"tag\": \"table\", \"children\": [{\n\t\t\t\t\"type\": \"element\", \"tag\": \"tbody\", \"children\": []\n\t\t\t}], \"attributes\": {\n\t\t\t\t\"class\": {\"type\": \"string\", \"value\": \"tc-csv-table\"}\n\t\t\t}\n\t\t}]\n\t}];\n\t// Split the text into lines\n\tvar lines = text.split(/\\r?\\n/mg),\n\t\ttag = \"th\";\n\tfor(var line=0; line<lines.length; line++) {\n\t\tvar lineText = lines[line];\n\t\tif(lineText) {\n\t\t\tvar row = {\n\t\t\t\t\t\"type\": \"element\", \"tag\": \"tr\", \"children\": []\n\t\t\t\t};\n\t\t\tvar columns = lineText.split(\",\");\n\t\t\tfor(var column=0; column<columns.length; column++) {\n\t\t\t\trow.children.push({\n\t\t\t\t\t\t\"type\": \"element\", \"tag\": tag, \"children\": [{\n\t\t\t\t\t\t\t\"type\": \"text\",\n\t\t\t\t\t\t\t\"text\": columns[column]\n\t\t\t\t\t\t}]\n\t\t\t\t\t});\n\t\t\t}\n\t\t\ttag = \"td\";\n\t\t\tthis.tree[0].children[0].children[0].children.push(row);\n\t\t}\n\t}\n};\n\nexports[\"text/csv\"] = CsvParser;\n\n})();\n\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/htmlparser.js": {
"title": "$:/core/modules/parsers/htmlparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/htmlparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe HTML parser displays text as raw HTML\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar HtmlParser = function(type,text,options) {\n\tvar src;\n\tif(options._canonical_uri) {\n\t\tsrc = options._canonical_uri;\n\t} else if(text) {\n\t\tsrc = \"data:text/html;charset=utf-8,\" + encodeURIComponent(text);\n\t}\n\tthis.tree = [{\n\t\ttype: \"element\",\n\t\ttag: \"iframe\",\n\t\tattributes: {\n\t\t\tsrc: {type: \"string\", value: src},\n\t\t\tsandbox: {type: \"string\", value: \"\"}\n\t\t}\n\t}];\n};\n\nexports[\"text/html\"] = HtmlParser;\n\n})();\n\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/imageparser.js": {
"title": "$:/core/modules/parsers/imageparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/imageparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe image parser parses an image into an embeddable HTML element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar ImageParser = function(type,text,options) {\n\tvar element = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"img\",\n\t\t\tattributes: {}\n\t\t};\n\tif(options._canonical_uri) {\n\t\telement.attributes.src = {type: \"string\", value: options._canonical_uri};\n\t} else if(text) {\n\t\tif(type === \"image/svg+xml\" || type === \".svg\") {\n\t\t\telement.attributes.src = {type: \"string\", value: \"data:image/svg+xml,\" + encodeURIComponent(text)};\n\t\t} else {\n\t\t\telement.attributes.src = {type: \"string\", value: \"data:\" + type + \";base64,\" + text};\n\t\t}\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"image/svg+xml\"] = ImageParser;\nexports[\"image/jpg\"] = ImageParser;\nexports[\"image/jpeg\"] = ImageParser;\nexports[\"image/png\"] = ImageParser;\nexports[\"image/gif\"] = ImageParser;\nexports[\"image/webp\"] = ImageParser;\nexports[\"image/heic\"] = ImageParser;\nexports[\"image/heif\"] = ImageParser;\nexports[\"image/x-icon\"] = ImageParser;\n\n})();\n\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/utils/parseutils.js": {
"title": "$:/core/modules/utils/parseutils.js",
"text": "/*\\\ntitle: $:/core/modules/utils/parseutils.js\ntype: application/javascript\nmodule-type: utils\n\nUtility functions concerned with parsing text into tokens.\n\nMost functions have the following pattern:\n\n* The parameters are:\n** `source`: the source string being parsed\n** `pos`: the current parse position within the string\n** Any further parameters are used to identify the token that is being parsed\n* The return value is:\n** null if the token was not found at the specified position\n** an object representing the token with the following standard fields:\n*** `type`: string indicating the type of the token\n*** `start`: start position of the token in the source string\n*** `end`: end position of the token in the source string\n*** Any further fields required to describe the token\n\nThe exception is `skipWhiteSpace`, which just returns the position after the whitespace.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nLook for a whitespace token. Returns null if not found, otherwise returns {type: \"whitespace\", start:, end:,}\n*/\nexports.parseWhiteSpace = function(source,pos) {\n\tvar p = pos,c;\n\twhile(true) {\n\t\tc = source.charAt(p);\n\t\tif((c === \" \") || (c === \"\\f\") || (c === \"\\n\") || (c === \"\\r\") || (c === \"\\t\") || (c === \"\\v\") || (c === \"\\u00a0\")) { // Ignores some obscure unicode spaces\n\t\t\tp++;\n\t\t} else {\n\t\t\tbreak;\n\t\t}\n\t}\n\tif(p === pos) {\n\t\treturn null;\n\t} else {\n\t\treturn {\n\t\t\ttype: \"whitespace\",\n\t\t\tstart: pos,\n\t\t\tend: p\n\t\t}\n\t}\n};\n\n/*\nConvenience wrapper for parseWhiteSpace. Returns the position after the whitespace\n*/\nexports.skipWhiteSpace = function(source,pos) {\n\tvar c;\n\twhile(true) {\n\t\tc = source.charAt(pos);\n\t\tif((c === \" \") || (c === \"\\f\") || (c === \"\\n\") || (c === \"\\r\") || (c === \"\\t\") || (c === \"\\v\") || (c === \"\\u00a0\")) { // Ignores some obscure unicode spaces\n\t\t\tpos++;\n\t\t} else {\n\t\t\treturn pos;\n\t\t}\n\t}\n};\n\n/*\nLook for a given string token. Returns null if not found, otherwise returns {type: \"token\", value:, start:, end:,}\n*/\nexports.parseTokenString = function(source,pos,token) {\n\tvar match = source.indexOf(token,pos) === pos;\n\tif(match) {\n\t\treturn {\n\t\t\ttype: \"token\",\n\t\t\tvalue: token,\n\t\t\tstart: pos,\n\t\t\tend: pos + token.length\n\t\t};\n\t}\n\treturn null;\n};\n\n/*\nLook for a token matching a regex. Returns null if not found, otherwise returns {type: \"regexp\", match:, start:, end:,}\n*/\nexports.parseTokenRegExp = function(source,pos,reToken) {\n\tvar node = {\n\t\ttype: \"regexp\",\n\t\tstart: pos\n\t};\n\treToken.lastIndex = pos;\n\tnode.match = reToken.exec(source);\n\tif(node.match && node.match.index === pos) {\n\t\tnode.end = pos + node.match[0].length;\n\t\treturn node;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nLook for a string literal. Returns null if not found, otherwise returns {type: \"string\", value:, start:, end:,}\n*/\nexports.parseStringLiteral = function(source,pos) {\n\tvar node = {\n\t\ttype: \"string\",\n\t\tstart: pos\n\t};\n\tvar reString = /(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\")|(?:'([^']*)')/g;\n\treString.lastIndex = pos;\n\tvar match = reString.exec(source);\n\tif(match && match.index === pos) {\n\t\tnode.value = match[1] !== undefined ? match[1] :(\n\t\t\tmatch[2] !== undefined ? match[2] : match[3] \n\t\t\t\t\t);\n\t\tnode.end = pos + match[0].length;\n\t\treturn node;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nLook for a macro invocation parameter. Returns null if not found, or {type: \"macro-parameter\", name:, value:, start:, end:}\n*/\nexports.parseMacroParameter = function(source,pos) {\n\tvar node = {\n\t\ttype: \"macro-parameter\",\n\t\tstart: pos\n\t};\n\t// Define our regexp\n\tvar reMacroParameter = /(?:([A-Za-z0-9\\-_]+)\\s*:)?(?:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\\s>\"'=]+)))/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the parameter\n\tvar token = $tw.utils.parseTokenRegExp(source,pos,reMacroParameter);\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Get the parameter details\n\tnode.value = token.match[2] !== undefined ? token.match[2] : (\n\t\t\t\t\ttoken.match[3] !== undefined ? token.match[3] : (\n\t\t\t\t\t\ttoken.match[4] !== undefined ? token.match[4] : (\n\t\t\t\t\t\t\ttoken.match[5] !== undefined ? token.match[5] : (\n\t\t\t\t\t\t\t\ttoken.match[6] !== undefined ? token.match[6] : (\n\t\t\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t);\n\tif(token.match[1]) {\n\t\tnode.name = token.match[1];\n\t}\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n/*\nLook for a macro invocation. Returns null if not found, or {type: \"macrocall\", name:, parameters:, start:, end:}\n*/\nexports.parseMacroInvocation = function(source,pos) {\n\tvar node = {\n\t\ttype: \"macrocall\",\n\t\tstart: pos,\n\t\tparams: []\n\t};\n\t// Define our regexps\n\tvar reMacroName = /([^\\s>\"'=]+)/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a double less than sign\n\tvar token = $tw.utils.parseTokenString(source,pos,\"<<\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Get the macro name\n\tvar name = $tw.utils.parseTokenRegExp(source,pos,reMacroName);\n\tif(!name) {\n\t\treturn null;\n\t}\n\tnode.name = name.match[1];\n\tpos = name.end;\n\t// Process parameters\n\tvar parameter = $tw.utils.parseMacroParameter(source,pos);\n\twhile(parameter) {\n\t\tnode.params.push(parameter);\n\t\tpos = parameter.end;\n\t\t// Get the next parameter\n\t\tparameter = $tw.utils.parseMacroParameter(source,pos);\n\t}\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a double greater than sign\n\ttoken = $tw.utils.parseTokenString(source,pos,\">>\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n/*\nLook for an HTML attribute definition. Returns null if not found, otherwise returns {type: \"attribute\", name:, valueType: \"string|indirect|macro\", value:, start:, end:,}\n*/\nexports.parseAttribute = function(source,pos) {\n\tvar node = {\n\t\tstart: pos\n\t};\n\t// Define our regexps\n\tvar reAttributeName = /([^\\/\\s>\"'=]+)/g,\n\t\treUnquotedAttribute = /([^\\/\\s<>\"'=]+)/g,\n\t\treFilteredValue = /\\{\\{\\{(.+?)\\}\\}\\}/g,\n\t\treIndirectValue = /\\{\\{([^\\}]+)\\}\\}/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Get the attribute name\n\tvar name = $tw.utils.parseTokenRegExp(source,pos,reAttributeName);\n\tif(!name) {\n\t\treturn null;\n\t}\n\tnode.name = name.match[1];\n\tpos = name.end;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for an equals sign\n\tvar token = $tw.utils.parseTokenString(source,pos,\"=\");\n\tif(token) {\n\t\tpos = token.end;\n\t\t// Skip whitespace\n\t\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t\t// Look for a string literal\n\t\tvar stringLiteral = $tw.utils.parseStringLiteral(source,pos);\n\t\tif(stringLiteral) {\n\t\t\tpos = stringLiteral.end;\n\t\t\tnode.type = \"string\";\n\t\t\tnode.value = stringLiteral.value;\n\t\t} else {\n\t\t\t// Look for a filtered value\n\t\t\tvar filteredValue = $tw.utils.parseTokenRegExp(source,pos,reFilteredValue);\n\t\t\tif(filteredValue) {\n\t\t\t\tpos = filteredValue.end;\n\t\t\t\tnode.type = \"filtered\";\n\t\t\t\tnode.filter = filteredValue.match[1];\n\t\t\t} else {\n\t\t\t\t// Look for an indirect value\n\t\t\t\tvar indirectValue = $tw.utils.parseTokenRegExp(source,pos,reIndirectValue);\n\t\t\t\tif(indirectValue) {\n\t\t\t\t\tpos = indirectValue.end;\n\t\t\t\t\tnode.type = \"indirect\";\n\t\t\t\t\tnode.textReference = indirectValue.match[1];\n\t\t\t\t} else {\n\t\t\t\t\t// Look for a unquoted value\n\t\t\t\t\tvar unquotedValue = $tw.utils.parseTokenRegExp(source,pos,reUnquotedAttribute);\n\t\t\t\t\tif(unquotedValue) {\n\t\t\t\t\t\tpos = unquotedValue.end;\n\t\t\t\t\t\tnode.type = \"string\";\n\t\t\t\t\t\tnode.value = unquotedValue.match[1];\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Look for a macro invocation value\n\t\t\t\t\t\tvar macroInvocation = $tw.utils.parseMacroInvocation(source,pos);\n\t\t\t\t\t\tif(macroInvocation) {\n\t\t\t\t\t\t\tpos = macroInvocation.end;\n\t\t\t\t\t\t\tnode.type = \"macro\";\n\t\t\t\t\t\t\tnode.value = macroInvocation;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnode.type = \"string\";\n\t\t\t\t\t\t\tnode.value = \"true\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\tnode.type = \"string\";\n\t\tnode.value = \"true\";\n\t}\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/parsers/pdfparser.js": {
"title": "$:/core/modules/parsers/pdfparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/pdfparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe PDF parser embeds a PDF viewer\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar ImageParser = function(type,text,options) {\n\tvar element = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"embed\",\n\t\t\tattributes: {}\n\t\t},\n\t\tsrc;\n\tif(options._canonical_uri) {\n\t\telement.attributes.src = {type: \"string\", value: options._canonical_uri};\n\t} else if(text) {\n\t\telement.attributes.src = {type: \"string\", value: \"data:application/pdf;base64,\" + text};\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"application/pdf\"] = ImageParser;\n\n})();\n\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/textparser.js": {
"title": "$:/core/modules/parsers/textparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/textparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe plain text parser processes blocks of source text into a degenerate parse tree consisting of a single text node\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar TextParser = function(type,text,options) {\n\tthis.tree = [{\n\t\ttype: \"codeblock\",\n\t\tattributes: {\n\t\t\tcode: {type: \"string\", value: text},\n\t\t\tlanguage: {type: \"string\", value: type}\n\t\t}\n\t}];\n};\n\nexports[\"text/plain\"] = TextParser;\nexports[\"text/x-tiddlywiki\"] = TextParser;\nexports[\"application/javascript\"] = TextParser;\nexports[\"application/json\"] = TextParser;\nexports[\"text/css\"] = TextParser;\nexports[\"application/x-tiddler-dictionary\"] = TextParser;\n\n})();\n\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/videoparser.js": {
"title": "$:/core/modules/parsers/videoparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/videoparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe video parser parses a video tiddler into an embeddable HTML element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar VideoParser = function(type,text,options) {\n\tvar element = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"video\",\n\t\t\tattributes: {\n\t\t\t\tcontrols: {type: \"string\", value: \"controls\"},\n\t\t\t\tstyle: {type: \"string\", value: \"width: 100%; object-fit: contain\"}\n\t\t\t}\n\t\t},\n\t\tsrc;\n\tif(options._canonical_uri) {\n\t\telement.attributes.src = {type: \"string\", value: options._canonical_uri};\n\t} else if(text) {\n\t\telement.attributes.src = {type: \"string\", value: \"data:\" + type + \";base64,\" + text};\n\t}\n\tthis.tree = [element];\n};\n\nexports[\"video/ogg\"] = VideoParser;\nexports[\"video/webm\"] = VideoParser;\nexports[\"video/mp4\"] = VideoParser;\nexports[\"video/quicktime\"] = VideoParser;\n\n})();\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/wikiparser/rules/codeblock.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/codeblock.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/codeblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for code blocks. For example:\n\n```\n\t```\n\tThis text will not be //wikified//\n\t```\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"codeblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match and get language if defined\n\tthis.matchRegExp = /```([\\w-]*)\\r?\\n/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /(\\r?\\n```$)/mg;\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Look for the end of the block\n\treEnd.lastIndex = this.parser.pos;\n\tvar match = reEnd.exec(this.parser.source),\n\t\ttext;\n\t// Process the block\n\tif(match) {\n\t\ttext = this.parser.source.substring(this.parser.pos,match.index);\n\t\tthis.parser.pos = match.index + match[0].length;\n\t} else {\n\t\ttext = this.parser.source.substr(this.parser.pos);\n\t\tthis.parser.pos = this.parser.sourceLength;\n\t}\n\t// Return the $codeblock widget\n\treturn [{\n\t\t\ttype: \"codeblock\",\n\t\t\tattributes: {\n\t\t\t\t\tcode: {type: \"string\", value: text},\n\t\t\t\t\tlanguage: {type: \"string\", value: this.match[1]}\n\t\t\t}\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/codeinline.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/codeinline.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/codeinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for code runs. For example:\n\n```\n\tThis is a `code run`.\n\tThis is another ``code run``\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"codeinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(``?)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar reEnd = new RegExp(this.match[1], \"mg\");\n\t// Look for the end marker\n\treEnd.lastIndex = this.parser.pos;\n\tvar match = reEnd.exec(this.parser.source),\n\t\ttext;\n\t// Process the text\n\tif(match) {\n\t\ttext = this.parser.source.substring(this.parser.pos,match.index);\n\t\tthis.parser.pos = match.index + match[0].length;\n\t} else {\n\t\ttext = this.parser.source.substr(this.parser.pos);\n\t\tthis.parser.pos = this.parser.sourceLength;\n\t}\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"code\",\n\t\tchildren: [{\n\t\t\ttype: \"text\",\n\t\t\ttext: text\n\t\t}]\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/commentblock.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/commentblock.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/commentblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for HTML comments. For example:\n\n```\n<!-- This is a comment -->\n```\n\nNote that the syntax for comments is simplified to an opening \"<!--\" sequence and a closing \"-->\" sequence -- HTML itself implements a more complex format (see http://ostermiller.org/findhtmlcomment.html)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"commentblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\tthis.matchRegExp = /<!--/mg;\n\tthis.endMatchRegExp = /-->/mg;\n};\n\nexports.findNextMatch = function(startPos) {\n\tthis.matchRegExp.lastIndex = startPos;\n\tthis.match = this.matchRegExp.exec(this.parser.source);\n\tif(this.match) {\n\t\tthis.endMatchRegExp.lastIndex = startPos + this.match[0].length;\n\t\tthis.endMatch = this.endMatchRegExp.exec(this.parser.source);\n\t\tif(this.endMatch) {\n\t\t\treturn this.match.index;\n\t\t}\n\t}\n\treturn undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.endMatchRegExp.lastIndex;\n\t// Don't return any elements\n\treturn [];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/commentinline.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/commentinline.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/commentinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for HTML comments. For example:\n\n```\n<!-- This is a comment -->\n```\n\nNote that the syntax for comments is simplified to an opening \"<!--\" sequence and a closing \"-->\" sequence -- HTML itself implements a more complex format (see http://ostermiller.org/findhtmlcomment.html)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"commentinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\tthis.matchRegExp = /<!--/mg;\n\tthis.endMatchRegExp = /-->/mg;\n};\n\nexports.findNextMatch = function(startPos) {\n\tthis.matchRegExp.lastIndex = startPos;\n\tthis.match = this.matchRegExp.exec(this.parser.source);\n\tif(this.match) {\n\t\tthis.endMatchRegExp.lastIndex = startPos + this.match[0].length;\n\t\tthis.endMatch = this.endMatchRegExp.exec(this.parser.source);\n\t\tif(this.endMatch) {\n\t\t\treturn this.match.index;\n\t\t}\n\t}\n\treturn undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.endMatchRegExp.lastIndex;\n\t// Don't return any elements\n\treturn [];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/dash.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/dash.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/dash.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for dashes. For example:\n\n```\nThis is an en-dash: --\n\nThis is an em-dash: ---\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"dash\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /-{2,3}(?!-)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar dash = this.match[0].length === 2 ? \"–\" : \"—\";\n\treturn [{\n\t\ttype: \"entity\",\n\t\tentity: dash\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/emphasis/bold.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/emphasis/bold.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/bold.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - bold. For example:\n\n```\n\tThis is ''bold'' text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except bold \n\\rules only bold \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"bold\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /''/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/''/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"strong\",\n\t\tchildren: tree\n\t}];\n};\n\n})();",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/emphasis/italic.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/emphasis/italic.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/italic.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - italic. For example:\n\n```\n\tThis is //italic// text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except italic\n\\rules only italic\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"italic\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\/\\//mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/\\/\\//mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"em\",\n\t\tchildren: tree\n\t}];\n};\n\n})();",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/emphasis/strikethrough.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/emphasis/strikethrough.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/strikethrough.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - strikethrough. For example:\n\n```\n\tThis is ~~strikethrough~~ text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except strikethrough \n\\rules only strikethrough \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"strikethrough\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /~~/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/~~/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"strike\",\n\t\tchildren: tree\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/emphasis/subscript.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/emphasis/subscript.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/subscript.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - subscript. For example:\n\n```\n\tThis is ,,subscript,, text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except subscript \n\\rules only subscript \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"subscript\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /,,/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/,,/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"sub\",\n\t\tchildren: tree\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/emphasis/superscript.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/emphasis/superscript.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/superscript.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - superscript. For example:\n\n```\n\tThis is ^^superscript^^ text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except superscript \n\\rules only superscript \n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"superscript\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\^\\^/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/\\^\\^/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"sup\",\n\t\tchildren: tree\n\t}];\n};\n\n})();",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/emphasis/underscore.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/emphasis/underscore.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/emphasis/underscore.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for emphasis - underscore. For example:\n\n```\n\tThis is __underscore__ text\n```\n\nThis wikiparser can be modified using the rules eg:\n\n```\n\\rules except underscore \n\\rules only underscore\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"underscore\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /__/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\n\t// Parse the run including the terminator\n\tvar tree = this.parser.parseInlineRun(/__/mg,{eatTerminator: true});\n\n\t// Return the classed span\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"u\",\n\t\tchildren: tree\n\t}];\n};\n\n})();",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/entity.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/entity.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/entity.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for HTML entities. For example:\n\n```\n\tThis is a copyright symbol: ©\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"entity\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(&#?[a-zA-Z0-9]{2,8};)/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar entityString = this.match[1];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Return the entity\n\treturn [{type: \"entity\", entity: this.match[0]}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/extlink.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/extlink.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/extlink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for external links. For example:\n\n```\nAn external link: https://www.tiddlywiki.com/\n\nA suppressed external link: ~http://www.tiddlyspace.com/\n```\n\nExternal links can be suppressed by preceding them with `~`.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"extlink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /~?(?:file|http|https|mailto|ftp|irc|news|data|skype):[^\\s<>{}\\[\\]`|\"\\\\^]+(?:\\/|\\b)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Create the link unless it is suppressed\n\tif(this.match[0].substr(0,1) === \"~\") {\n\t\treturn [{type: \"text\", text: this.match[0].substr(1)}];\n\t} else {\n\t\treturn [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"a\",\n\t\t\tattributes: {\n\t\t\t\thref: {type: \"string\", value: this.match[0]},\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-tiddlylink-external\"},\n\t\t\t\ttarget: {type: \"string\", value: \"_blank\"},\n\t\t\t\trel: {type: \"string\", value: \"noopener noreferrer\"}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\", text: this.match[0]\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/filteredtranscludeblock.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/filteredtranscludeblock.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/filteredtranscludeblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for block-level filtered transclusion. For example:\n\n```\n{{{ [tag[docs]] }}}\n{{{ [tag[docs]] |tooltip}}}\n{{{ [tag[docs]] ||TemplateTitle}}}\n{{{ [tag[docs]] |tooltip||TemplateTitle}}}\n{{{ [tag[docs]] }}width:40;height:50;}.class.class\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"filteredtranscludeblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{\\{([^\\|]+?)(?:\\|([^\\|\\{\\}]+))?(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}([^\\}]*)\\}(?:\\.(\\S+))?(?:\\r?\\n|$)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar filter = this.match[1],\n\t\ttooltip = this.match[2],\n\t\ttemplate = $tw.utils.trim(this.match[3]),\n\t\tstyle = this.match[4],\n\t\tclasses = this.match[5];\n\t// Return the list widget\n\tvar node = {\n\t\ttype: \"list\",\n\t\tattributes: {\n\t\t\tfilter: {type: \"string\", value: filter}\n\t\t},\n\t\tisBlock: true\n\t};\n\tif(tooltip) {\n\t\tnode.attributes.tooltip = {type: \"string\", value: tooltip};\n\t}\n\tif(template) {\n\t\tnode.attributes.template = {type: \"string\", value: template};\n\t}\n\tif(style) {\n\t\tnode.attributes.style = {type: \"string\", value: style};\n\t}\n\tif(classes) {\n\t\tnode.attributes.itemClass = {type: \"string\", value: classes.split(\".\").join(\" \")};\n\t}\n\treturn [node];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/filteredtranscludeinline.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/filteredtranscludeinline.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/filteredtranscludeinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for inline filtered transclusion. For example:\n\n```\n{{{ [tag[docs]] }}}\n{{{ [tag[docs]] |tooltip}}}\n{{{ [tag[docs]] ||TemplateTitle}}}\n{{{ [tag[docs]] |tooltip||TemplateTitle}}}\n{{{ [tag[docs]] }}width:40;height:50;}.class.class\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"filteredtranscludeinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{\\{([^\\|]+?)(?:\\|([^\\|\\{\\}]+))?(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}([^\\}]*)\\}(?:\\.(\\S+))?/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar filter = this.match[1],\n\t\ttooltip = this.match[2],\n\t\ttemplate = $tw.utils.trim(this.match[3]),\n\t\tstyle = this.match[4],\n\t\tclasses = this.match[5];\n\t// Return the list widget\n\tvar node = {\n\t\ttype: \"list\",\n\t\tattributes: {\n\t\t\tfilter: {type: \"string\", value: filter}\n\t\t}\n\t};\n\tif(tooltip) {\n\t\tnode.attributes.tooltip = {type: \"string\", value: tooltip};\n\t}\n\tif(template) {\n\t\tnode.attributes.template = {type: \"string\", value: template};\n\t}\n\tif(style) {\n\t\tnode.attributes.style = {type: \"string\", value: style};\n\t}\n\tif(classes) {\n\t\tnode.attributes.itemClass = {type: \"string\", value: classes.split(\".\").join(\" \")};\n\t}\n\treturn [node];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/hardlinebreaks.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/hardlinebreaks.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/hardlinebreaks.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for marking areas with hard line breaks. For example:\n\n```\n\"\"\"\nThis is some text\nThat is set like\nIt is a Poem\nWhen it is\nClearly\nNot\n\"\"\"\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"hardlinebreaks\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\"\"\"(?:\\r?\\n)?/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /(\"\"\")|(\\r?\\n)/mg,\n\t\ttree = [],\n\t\tmatch;\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tdo {\n\t\t// Parse the run up to the terminator\n\t\ttree.push.apply(tree,this.parser.parseInlineRun(reEnd,{eatTerminator: false}));\n\t\t// Redo the terminator match\n\t\treEnd.lastIndex = this.parser.pos;\n\t\tmatch = reEnd.exec(this.parser.source);\n\t\tif(match) {\n\t\t\tthis.parser.pos = reEnd.lastIndex;\n\t\t\t// Add a line break if the terminator was a line break\n\t\t\tif(match[2]) {\n\t\t\t\ttree.push({type: \"element\", tag: \"br\"});\n\t\t\t}\n\t\t}\n\t} while(match && !match[1]);\n\t// Return the nodes\n\treturn tree;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/heading.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/heading.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/heading.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for headings\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"heading\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(!{1,6})/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar headingLevel = this.match[1].length;\n\t// Move past the !s\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse any classes, whitespace and then the heading itself\n\tvar classes = this.parser.parseClasses();\n\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\tvar tree = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t// Return the heading\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"h\" + headingLevel, \n\t\tattributes: {\n\t\t\t\"class\": {type: \"string\", value: classes.join(\" \")}\n\t\t},\n\t\tchildren: tree\n\t}];\n};\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/horizrule.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/horizrule.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/horizrule.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for rules. For example:\n\n```\n---\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"horizrule\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /-{3,}\\r?(?:\\n|$)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\treturn [{type: \"element\", tag: \"hr\"}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/html.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/html.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/html.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki rule for HTML elements and widgets. For example:\n\n{{{\n<aside>\nThis is an HTML5 aside element\n</aside>\n\n<$slider target=\"MyTiddler\">\nThis is a widget invocation\n</$slider>\n\n}}}\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"html\";\nexports.types = {inline: true, block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n};\n\nexports.findNextMatch = function(startPos) {\n\t// Find the next tag\n\tthis.nextTag = this.findNextTag(this.parser.source,startPos,{\n\t\trequireLineBreak: this.is.block\n\t});\n\treturn this.nextTag ? this.nextTag.start : undefined;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Retrieve the most recent match so that recursive calls don't overwrite it\n\tvar tag = this.nextTag;\n\tthis.nextTag = null;\n\t// Advance the parser position to past the tag\n\tthis.parser.pos = tag.end;\n\t// Check for an immediately following double linebreak\n\tvar hasLineBreak = !tag.isSelfClosing && !!$tw.utils.parseTokenRegExp(this.parser.source,this.parser.pos,/([^\\S\\n\\r]*\\r?\\n(?:[^\\S\\n\\r]*\\r?\\n|$))/g);\n\t// Set whether we're in block mode\n\ttag.isBlock = this.is.block || hasLineBreak;\n\t// Parse the body if we need to\n\tif(!tag.isSelfClosing && $tw.config.htmlVoidElements.indexOf(tag.tag) === -1) {\n\t\t\tvar reEndString = \"</\" + $tw.utils.escapeRegExp(tag.tag) + \">\",\n\t\t\t\treEnd = new RegExp(\"(\" + reEndString + \")\",\"mg\");\n\t\tif(hasLineBreak) {\n\t\t\ttag.children = this.parser.parseBlocks(reEndString);\n\t\t} else {\n\t\t\ttag.children = this.parser.parseInlineRun(reEnd);\n\t\t}\n\t\treEnd.lastIndex = this.parser.pos;\n\t\tvar endMatch = reEnd.exec(this.parser.source);\n\t\tif(endMatch && endMatch.index === this.parser.pos) {\n\t\t\tthis.parser.pos = endMatch.index + endMatch[0].length;\n\t\t}\n\t}\n\t// Return the tag\n\treturn [tag];\n};\n\n/*\nLook for an HTML tag. Returns null if not found, otherwise returns {type: \"element\", name:, attributes: [], isSelfClosing:, start:, end:,}\n*/\nexports.parseTag = function(source,pos,options) {\n\toptions = options || {};\n\tvar token,\n\t\tnode = {\n\t\t\ttype: \"element\",\n\t\t\tstart: pos,\n\t\t\tattributes: {}\n\t\t};\n\t// Define our regexps\n\tvar reTagName = /([a-zA-Z0-9\\-\\$]+)/g;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a less than sign\n\ttoken = $tw.utils.parseTokenString(source,pos,\"<\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Get the tag name\n\ttoken = $tw.utils.parseTokenRegExp(source,pos,reTagName);\n\tif(!token) {\n\t\treturn null;\n\t}\n\tnode.tag = token.match[1];\n\tif(node.tag.slice(1).indexOf(\"$\") !== -1) {\n\t\treturn null;\n\t}\n\tif(node.tag.charAt(0) === \"$\") {\n\t\tnode.type = node.tag.substr(1);\n\t}\n\tpos = token.end;\n\t// Check that the tag is terminated by a space, / or >\n\tif(!$tw.utils.parseWhiteSpace(source,pos) && !(source.charAt(pos) === \"/\") && !(source.charAt(pos) === \">\") ) {\n\t\treturn null;\n\t}\n\t// Process attributes\n\tvar attribute = $tw.utils.parseAttribute(source,pos);\n\twhile(attribute) {\n\t\tnode.attributes[attribute.name] = attribute;\n\t\tpos = attribute.end;\n\t\t// Get the next attribute\n\t\tattribute = $tw.utils.parseAttribute(source,pos);\n\t}\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for a closing slash\n\ttoken = $tw.utils.parseTokenString(source,pos,\"/\");\n\tif(token) {\n\t\tpos = token.end;\n\t\tnode.isSelfClosing = true;\n\t}\n\t// Look for a greater than sign\n\ttoken = $tw.utils.parseTokenString(source,pos,\">\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Check for a required line break\n\tif(options.requireLineBreak) {\n\t\ttoken = $tw.utils.parseTokenRegExp(source,pos,/([^\\S\\n\\r]*\\r?\\n(?:[^\\S\\n\\r]*\\r?\\n|$))/g);\n\t\tif(!token) {\n\t\t\treturn null;\n\t\t}\n\t}\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\nexports.findNextTag = function(source,pos,options) {\n\t// A regexp for finding candidate HTML tags\n\tvar reLookahead = /<([a-zA-Z\\-\\$]+)/g;\n\t// Find the next candidate\n\treLookahead.lastIndex = pos;\n\tvar match = reLookahead.exec(source);\n\twhile(match) {\n\t\t// Try to parse the candidate as a tag\n\t\tvar tag = this.parseTag(source,match.index,options);\n\t\t// Return success\n\t\tif(tag && this.isLegalTag(tag)) {\n\t\t\treturn tag;\n\t\t}\n\t\t// Look for the next match\n\t\treLookahead.lastIndex = match.index + 1;\n\t\tmatch = reLookahead.exec(source);\n\t}\n\t// Failed\n\treturn null;\n};\n\nexports.isLegalTag = function(tag) {\n\t// Widgets are always OK\n\tif(tag.type !== \"element\") {\n\t\treturn true;\n\t// If it's an HTML tag that starts with a dash then it's not legal\n\t} else if(tag.tag.charAt(0) === \"-\") {\n\t\treturn false;\n\t} else {\n\t\t// Otherwise it's OK\n\t\treturn true;\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/image.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/image.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/image.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for embedding images. For example:\n\n```\n[img[https://tiddlywiki.com/fractalveg.jpg]]\n[img width=23 height=24 [https://tiddlywiki.com/fractalveg.jpg]]\n[img width={{!!width}} height={{!!height}} [https://tiddlywiki.com/fractalveg.jpg]]\n[img[Description of image|https://tiddlywiki.com/fractalveg.jpg]]\n[img[TiddlerTitle]]\n[img[Description of image|TiddlerTitle]]\n```\n\nGenerates the `<$image>` widget.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"image\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n};\n\nexports.findNextMatch = function(startPos) {\n\t// Find the next tag\n\tthis.nextImage = this.findNextImage(this.parser.source,startPos);\n\treturn this.nextImage ? this.nextImage.start : undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.nextImage.end;\n\tvar node = {\n\t\ttype: \"image\",\n\t\tattributes: this.nextImage.attributes\n\t};\n\treturn [node];\n};\n\n/*\nFind the next image from the current position\n*/\nexports.findNextImage = function(source,pos) {\n\t// A regexp for finding candidate HTML tags\n\tvar reLookahead = /(\\[img)/g;\n\t// Find the next candidate\n\treLookahead.lastIndex = pos;\n\tvar match = reLookahead.exec(source);\n\twhile(match) {\n\t\t// Try to parse the candidate as a tag\n\t\tvar tag = this.parseImage(source,match.index);\n\t\t// Return success\n\t\tif(tag) {\n\t\t\treturn tag;\n\t\t}\n\t\t// Look for the next match\n\t\treLookahead.lastIndex = match.index + 1;\n\t\tmatch = reLookahead.exec(source);\n\t}\n\t// Failed\n\treturn null;\n};\n\n/*\nLook for an image at the specified position. Returns null if not found, otherwise returns {type: \"image\", attributes: [], isSelfClosing:, start:, end:,}\n*/\nexports.parseImage = function(source,pos) {\n\tvar token,\n\t\tnode = {\n\t\t\ttype: \"image\",\n\t\t\tstart: pos,\n\t\t\tattributes: {}\n\t\t};\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the `[img`\n\ttoken = $tw.utils.parseTokenString(source,pos,\"[img\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Process attributes\n\tif(source.charAt(pos) !== \"[\") {\n\t\tvar attribute = $tw.utils.parseAttribute(source,pos);\n\t\twhile(attribute) {\n\t\t\tnode.attributes[attribute.name] = attribute;\n\t\t\tpos = attribute.end;\n\t\t\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t\t\tif(source.charAt(pos) !== \"[\") {\n\t\t\t\t// Get the next attribute\n\t\t\t\tattribute = $tw.utils.parseAttribute(source,pos);\n\t\t\t} else {\n\t\t\t\tattribute = null;\n\t\t\t}\n\t\t}\n\t}\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the `[` after the attributes\n\ttoken = $tw.utils.parseTokenString(source,pos,\"[\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Get the source up to the terminating `]]`\n\ttoken = $tw.utils.parseTokenRegExp(source,pos,/(?:([^|\\]]*?)\\|)?([^\\]]+?)\\]\\]/g);\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\tif(token.match[1]) {\n\t\tnode.attributes.tooltip = {type: \"string\", value: token.match[1].trim()};\n\t}\n\tnode.attributes.source = {type: \"string\", value: (token.match[2] || \"\").trim()};\n\t// Update the end position\n\tnode.end = pos;\n\treturn node;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/import.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/import.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/import.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki pragma rule for importing variable definitions\n\n```\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"import\";\nexports.types = {pragma: true};\n\n/*\nInstantiate parse rule\n*/\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\\\import[^\\S\\n]/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\tvar self = this;\n\t// Move past the pragma invocation\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse the filter terminated by a line break\n\tvar reMatch = /(.*)(\\r?\\n)|$/mg;\n\treMatch.lastIndex = this.parser.pos;\n\tvar match = reMatch.exec(this.parser.source);\n\tthis.parser.pos = reMatch.lastIndex;\n\t// Parse tree nodes to return\n\treturn [{\n\t\ttype: \"importvariables\",\n\t\tattributes: {\n\t\t\tfilter: {type: \"string\", value: match[1]}\n\t\t},\n\t\tchildren: []\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/list.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/list.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/list.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for lists. For example:\n\n```\n* This is an unordered list\n* It has two items\n\n# This is a numbered list\n## With a subitem\n# And a third item\n\n; This is a term that is being defined\n: This is the definition of that term\n```\n\nNote that lists can be nested arbitrarily:\n\n```\n#** One\n#* Two\n#** Three\n#**** Four\n#**# Five\n#**## Six\n## Seven\n### Eight\n## Nine\n```\n\nA CSS class can be applied to a list item as follows:\n\n```\n* List item one\n*.active List item two has the class `active`\n* List item three\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"list\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /([\\*#;:>]+)/mg;\n};\n\nvar listTypes = {\n\t\"*\": {listTag: \"ul\", itemTag: \"li\"},\n\t\"#\": {listTag: \"ol\", itemTag: \"li\"},\n\t\";\": {listTag: \"dl\", itemTag: \"dt\"},\n\t\":\": {listTag: \"dl\", itemTag: \"dd\"},\n\t\">\": {listTag: \"blockquote\", itemTag: \"div\"}\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Array of parse tree nodes for the previous row of the list\n\tvar listStack = [];\n\t// Cycle through the items in the list\n\twhile(true) {\n\t\t// Match the list marker\n\t\tvar reMatch = /([\\*#;:>]+)/mg;\n\t\treMatch.lastIndex = this.parser.pos;\n\t\tvar match = reMatch.exec(this.parser.source);\n\t\tif(!match || match.index !== this.parser.pos) {\n\t\t\tbreak;\n\t\t}\n\t\t// Check whether the list type of the top level matches\n\t\tvar listInfo = listTypes[match[0].charAt(0)];\n\t\tif(listStack.length > 0 && listStack[0].tag !== listInfo.listTag) {\n\t\t\tbreak;\n\t\t}\n\t\t// Move past the list marker\n\t\tthis.parser.pos = match.index + match[0].length;\n\t\t// Walk through the list markers for the current row\n\t\tfor(var t=0; t<match[0].length; t++) {\n\t\t\tlistInfo = listTypes[match[0].charAt(t)];\n\t\t\t// Remove any stacked up element if we can't re-use it because the list type doesn't match\n\t\t\tif(listStack.length > t && listStack[t].tag !== listInfo.listTag) {\n\t\t\t\tlistStack.splice(t,listStack.length - t);\n\t\t\t}\n\t\t\t// Construct the list element or reuse the previous one at this level\n\t\t\tif(listStack.length <= t) {\n\t\t\t\tvar listElement = {type: \"element\", tag: listInfo.listTag, children: [\n\t\t\t\t\t{type: \"element\", tag: listInfo.itemTag, children: []}\n\t\t\t\t]};\n\t\t\t\t// Link this list element into the last child item of the parent list item\n\t\t\t\tif(t) {\n\t\t\t\t\tvar prevListItem = listStack[t-1].children[listStack[t-1].children.length-1];\n\t\t\t\t\tprevListItem.children.push(listElement);\n\t\t\t\t}\n\t\t\t\t// Save this element in the stack\n\t\t\t\tlistStack[t] = listElement;\n\t\t\t} else if(t === (match[0].length - 1)) {\n\t\t\t\tlistStack[t].children.push({type: \"element\", tag: listInfo.itemTag, children: []});\n\t\t\t}\n\t\t}\n\t\tif(listStack.length > match[0].length) {\n\t\t\tlistStack.splice(match[0].length,listStack.length - match[0].length);\n\t\t}\n\t\t// Process the body of the list item into the last list item\n\t\tvar lastListChildren = listStack[listStack.length-1].children,\n\t\t\tlastListItem = lastListChildren[lastListChildren.length-1],\n\t\t\tclasses = this.parser.parseClasses();\n\t\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\t\tvar tree = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t\tlastListItem.children.push.apply(lastListItem.children,tree);\n\t\tif(classes.length > 0) {\n\t\t\t$tw.utils.addClassToParseTreeNode(lastListItem,classes.join(\" \"));\n\t\t}\n\t\t// Consume any whitespace following the list item\n\t\tthis.parser.skipWhitespace();\n\t}\n\t// Return the root element of the list\n\treturn [listStack[0]];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/macrocallblock.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/macrocallblock.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/macrocallblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki rule for block macro calls\n\n```\n<<name value value2>>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"macrocallblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /<<([^>\\s]+)(?:\\s*)((?:[^>]|(?:>(?!>)))*?)>>(?:\\r?\\n|$)/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar macroName = this.match[1],\n\t\tparamString = this.match[2];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar params = [],\n\t\treParam = /\\s*(?:([A-Za-z0-9\\-_]+)\\s*:)?(?:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\"'\\s]+)))/mg,\n\t\tparamMatch = reParam.exec(paramString);\n\twhile(paramMatch) {\n\t\t// Process this parameter\n\t\tvar paramInfo = {\n\t\t\tvalue: paramMatch[2] || paramMatch[3] || paramMatch[4] || paramMatch[5] || paramMatch[6]\n\t\t};\n\t\tif(paramMatch[1]) {\n\t\t\tparamInfo.name = paramMatch[1];\n\t\t}\n\t\tparams.push(paramInfo);\n\t\t// Find the next match\n\t\tparamMatch = reParam.exec(paramString);\n\t}\n\treturn [{\n\t\ttype: \"macrocall\",\n\t\tname: macroName,\n\t\tparams: params,\n\t\tisBlock: true\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/macrocallinline.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/macrocallinline.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/macrocallinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki rule for macro calls\n\n```\n<<name value value2>>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"macrocallinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /<<([^\\s>]+)\\s*([\\s\\S]*?)>>/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get all the details of the match\n\tvar macroName = this.match[1],\n\t\tparamString = this.match[2];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar params = [],\n\t\treParam = /\\s*(?:([A-Za-z0-9\\-_]+)\\s*:)?(?:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\"'\\s]+)))/mg,\n\t\tparamMatch = reParam.exec(paramString);\n\twhile(paramMatch) {\n\t\t// Process this parameter\n\t\tvar paramInfo = {\n\t\t\tvalue: paramMatch[2] || paramMatch[3] || paramMatch[4] || paramMatch[5]|| paramMatch[6]\n\t\t};\n\t\tif(paramMatch[1]) {\n\t\t\tparamInfo.name = paramMatch[1];\n\t\t}\n\t\tparams.push(paramInfo);\n\t\t// Find the next match\n\t\tparamMatch = reParam.exec(paramString);\n\t}\n\treturn [{\n\t\ttype: \"macrocall\",\n\t\tname: macroName,\n\t\tparams: params\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/macrodef.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/macrodef.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/macrodef.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki pragma rule for macro definitions\n\n```\n\\define name(param:defaultvalue,param2:defaultvalue)\ndefinition text, including $param$ markers\n\\end\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"macrodef\";\nexports.types = {pragma: true};\n\n/*\nInstantiate parse rule\n*/\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\\\define\\s+([^(\\s]+)\\(\\s*([^)]*)\\)(\\s*\\r?\\n)?/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Move past the macro name and parameters\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse the parameters\n\tvar paramString = this.match[2],\n\t\tparams = [];\n\tif(paramString !== \"\") {\n\t\tvar reParam = /\\s*([A-Za-z0-9\\-_]+)(?:\\s*:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\"'\\s]+)))?/mg,\n\t\t\tparamMatch = reParam.exec(paramString);\n\t\twhile(paramMatch) {\n\t\t\t// Save the parameter details\n\t\t\tvar paramInfo = {name: paramMatch[1]},\n\t\t\t\tdefaultValue = paramMatch[2] || paramMatch[3] || paramMatch[4] || paramMatch[5] || paramMatch[6];\n\t\t\tif(defaultValue) {\n\t\t\t\tparamInfo[\"default\"] = defaultValue;\n\t\t\t}\n\t\t\tparams.push(paramInfo);\n\t\t\t// Look for the next parameter\n\t\t\tparamMatch = reParam.exec(paramString);\n\t\t}\n\t}\n\t// Is this a multiline definition?\n\tvar reEnd;\n\tif(this.match[3]) {\n\t\t// If so, the end of the body is marked with \\end\n\t\treEnd = /(\\r?\\n\\\\end[^\\S\\n\\r]*(?:$|\\r?\\n))/mg;\n\t} else {\n\t\t// Otherwise, the end of the definition is marked by the end of the line\n\t\treEnd = /($|\\r?\\n)/mg;\n\t\t// Move past any whitespace\n\t\tthis.parser.pos = $tw.utils.skipWhiteSpace(this.parser.source,this.parser.pos);\n\t}\n\t// Find the end of the definition\n\treEnd.lastIndex = this.parser.pos;\n\tvar text,\n\t\tendMatch = reEnd.exec(this.parser.source);\n\tif(endMatch) {\n\t\ttext = this.parser.source.substring(this.parser.pos,endMatch.index);\n\t\tthis.parser.pos = endMatch.index + endMatch[0].length;\n\t} else {\n\t\t// We didn't find the end of the definition, so we'll make it blank\n\t\ttext = \"\";\n\t}\n\t// Save the macro definition\n\treturn [{\n\t\ttype: \"set\",\n\t\tattributes: {\n\t\t\tname: {type: \"string\", value: this.match[1]},\n\t\t\tvalue: {type: \"string\", value: text}\n\t\t},\n\t\tchildren: [],\n\t\tparams: params,\n\t\tisMacroDefinition: true\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/prettyextlink.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/prettyextlink.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/prettyextlink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for external links. For example:\n\n```\n[ext[https://tiddlywiki.com/fractalveg.jpg]]\n[ext[Tooltip|https://tiddlywiki.com/fractalveg.jpg]]\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"prettyextlink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n};\n\nexports.findNextMatch = function(startPos) {\n\t// Find the next tag\n\tthis.nextLink = this.findNextLink(this.parser.source,startPos);\n\treturn this.nextLink ? this.nextLink.start : undefined;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.nextLink.end;\n\treturn [this.nextLink];\n};\n\n/*\nFind the next link from the current position\n*/\nexports.findNextLink = function(source,pos) {\n\t// A regexp for finding candidate links\n\tvar reLookahead = /(\\[ext\\[)/g;\n\t// Find the next candidate\n\treLookahead.lastIndex = pos;\n\tvar match = reLookahead.exec(source);\n\twhile(match) {\n\t\t// Try to parse the candidate as a link\n\t\tvar link = this.parseLink(source,match.index);\n\t\t// Return success\n\t\tif(link) {\n\t\t\treturn link;\n\t\t}\n\t\t// Look for the next match\n\t\treLookahead.lastIndex = match.index + 1;\n\t\tmatch = reLookahead.exec(source);\n\t}\n\t// Failed\n\treturn null;\n};\n\n/*\nLook for an link at the specified position. Returns null if not found, otherwise returns {type: \"element\", tag: \"a\", attributes: [], isSelfClosing:, start:, end:,}\n*/\nexports.parseLink = function(source,pos) {\n\tvar token,\n\t\ttextNode = {\n\t\t\ttype: \"text\"\n\t\t},\n\t\tnode = {\n\t\t\ttype: \"element\",\n\t\t\ttag: \"a\",\n\t\t\tstart: pos,\n\t\t\tattributes: {\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-tiddlylink-external\"},\n\t\t\t},\n\t\t\tchildren: [textNode]\n\t\t};\n\t// Skip whitespace\n\tpos = $tw.utils.skipWhiteSpace(source,pos);\n\t// Look for the `[ext[`\n\ttoken = $tw.utils.parseTokenString(source,pos,\"[ext[\");\n\tif(!token) {\n\t\treturn null;\n\t}\n\tpos = token.end;\n\t// Look ahead for the terminating `]]`\n\tvar closePos = source.indexOf(\"]]\",pos);\n\tif(closePos === -1) {\n\t\treturn null;\n\t}\n\t// Look for a `|` separating the tooltip\n\tvar splitPos = source.indexOf(\"|\",pos);\n\tif(splitPos === -1 || splitPos > closePos) {\n\t\tsplitPos = null;\n\t}\n\t// Pull out the tooltip and URL\n\tvar tooltip, URL;\n\tif(splitPos) {\n\t\tURL = source.substring(splitPos + 1,closePos).trim();\n\t\ttextNode.text = source.substring(pos,splitPos).trim();\n\t} else {\n\t\tURL = source.substring(pos,closePos).trim();\n\t\ttextNode.text = URL;\n\t}\n\tnode.attributes.href = {type: \"string\", value: URL};\n\tnode.attributes.target = {type: \"string\", value: \"_blank\"};\n\tnode.attributes.rel = {type: \"string\", value: \"noopener noreferrer\"};\n\t// Update the end position\n\tnode.end = closePos + 2;\n\treturn node;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/prettylink.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/prettylink.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/prettylink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for pretty links. For example:\n\n```\n[[Introduction]]\n\n[[Link description|TiddlerTitle]]\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"prettylink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\[\\[(.*?)(?:\\|(.*?))?\\]\\]/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Process the link\n\tvar text = this.match[1],\n\t\tlink = this.match[2] || text;\n\tif($tw.utils.isLinkExternal(link)) {\n\t\treturn [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"a\",\n\t\t\tattributes: {\n\t\t\t\thref: {type: \"string\", value: link},\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-tiddlylink-external\"},\n\t\t\t\ttarget: {type: \"string\", value: \"_blank\"},\n\t\t\t\trel: {type: \"string\", value: \"noopener noreferrer\"}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\", text: text\n\t\t\t}]\n\t\t}];\n\t} else {\n\t\treturn [{\n\t\t\ttype: \"link\",\n\t\t\tattributes: {\n\t\t\t\tto: {type: \"string\", value: link}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\", text: text\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/quoteblock.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/quoteblock.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/quoteblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for quote blocks. For example:\n\n```\n\t<<<.optionalClass(es) optional cited from\n\ta quote\n\t<<<\n\t\n\t<<<.optionalClass(es)\n\ta quote\n\t<<< optional cited from\n```\n\nQuotes can be quoted by putting more <s\n\n```\n\t<<<\n\tQuote Level 1\n\t\n\t<<<<\n\tQuoteLevel 2\n\t<<<<\n\t\n\t<<<\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"quoteblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /(<<<+)/mg;\n};\n\nexports.parse = function() {\n\tvar classes = [\"tc-quote\"];\n\t// Get all the details of the match\n\tvar reEndString = \"^\" + this.match[1] + \"(?!<)\";\n\t// Move past the <s\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t\n\t// Parse any classes, whitespace and then the optional cite itself\n\tclasses.push.apply(classes, this.parser.parseClasses());\n\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\tvar cite = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t// before handling the cite, parse the body of the quote\n\tvar tree= this.parser.parseBlocks(reEndString);\n\t// If we got a cite, put it before the text\n\tif(cite.length > 0) {\n\t\ttree.unshift({\n\t\t\ttype: \"element\",\n\t\t\ttag: \"cite\",\n\t\t\tchildren: cite\n\t\t});\n\t}\n\t// Parse any optional cite\n\tthis.parser.skipWhitespace({treatNewlinesAsNonWhitespace: true});\n\tcite = this.parser.parseInlineRun(/(\\r?\\n)/mg);\n\t// If we got a cite, push it\n\tif(cite.length > 0) {\n\t\ttree.push({\n\t\t\ttype: \"element\",\n\t\t\ttag: \"cite\",\n\t\t\tchildren: cite\n\t\t});\n\t}\n\t// Return the blockquote element\n\treturn [{\n\t\ttype: \"element\",\n\t\ttag: \"blockquote\",\n\t\tattributes: {\n\t\t\tclass: { type: \"string\", value: classes.join(\" \") },\n\t\t},\n\t\tchildren: tree\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/rules.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/rules.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/rules.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki pragma rule for rules specifications\n\n```\n\\rules except ruleone ruletwo rulethree\n\\rules only ruleone ruletwo rulethree\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"rules\";\nexports.types = {pragma: true};\n\n/*\nInstantiate parse rule\n*/\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\\\rules[^\\S\\n]/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Move past the pragma invocation\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse whitespace delimited tokens terminated by a line break\n\tvar reMatch = /[^\\S\\n]*(\\S+)|(\\r?\\n)/mg,\n\t\ttokens = [];\n\treMatch.lastIndex = this.parser.pos;\n\tvar match = reMatch.exec(this.parser.source);\n\twhile(match && match.index === this.parser.pos) {\n\t\tthis.parser.pos = reMatch.lastIndex;\n\t\t// Exit if we've got the line break\n\t\tif(match[2]) {\n\t\t\tbreak;\n\t\t}\n\t\t// Process the token\n\t\tif(match[1]) {\n\t\t\ttokens.push(match[1]);\n\t\t}\n\t\t// Match the next token\n\t\tmatch = reMatch.exec(this.parser.source);\n\t}\n\t// Process the tokens\n\tif(tokens.length > 0) {\n\t\tthis.parser.amendRules(tokens[0],tokens.slice(1));\n\t}\n\t// No parse tree nodes to return\n\treturn [];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/styleblock.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/styleblock.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/styleblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for assigning styles and classes to paragraphs and other blocks. For example:\n\n```\n@@.myClass\n@@background-color:red;\nThis paragraph will have the CSS class `myClass`.\n\n* The `<ul>` around this list will also have the class `myClass`\n* List item 2\n\n@@\n```\n\nNote that classes and styles can be mixed subject to the rule that styles must precede classes. For example\n\n```\n@@.myFirstClass.mySecondClass\n@@width:100px;.myThirdClass\nThis is a paragraph\n@@\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"styleblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /@@((?:[^\\.\\r\\n\\s:]+:[^\\r\\n;]+;)+)?(?:\\.([^\\r\\n\\s]+))?\\r?\\n/mg;\n};\n\nexports.parse = function() {\n\tvar reEndString = \"^@@(?:\\\\r?\\\\n)?\";\n\tvar classes = [], styles = [];\n\tdo {\n\t\t// Get the class and style\n\t\tif(this.match[1]) {\n\t\t\tstyles.push(this.match[1]);\n\t\t}\n\t\tif(this.match[2]) {\n\t\t\tclasses.push(this.match[2].split(\".\").join(\" \"));\n\t\t}\n\t\t// Move past the match\n\t\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t\t// Look for another line of classes and styles\n\t\tthis.match = this.matchRegExp.exec(this.parser.source);\n\t} while(this.match && this.match.index === this.parser.pos);\n\t// Parse the body\n\tvar tree = this.parser.parseBlocks(reEndString);\n\tfor(var t=0; t<tree.length; t++) {\n\t\tif(classes.length > 0) {\n\t\t\t$tw.utils.addClassToParseTreeNode(tree[t],classes.join(\" \"));\n\t\t}\n\t\tif(styles.length > 0) {\n\t\t\t$tw.utils.addAttributeToParseTreeNode(tree[t],\"style\",styles.join(\"\"));\n\t\t}\n\t}\n\treturn tree;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/styleinline.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/styleinline.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/styleinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for assigning styles and classes to inline runs. For example:\n\n```\n@@.myClass This is some text with a class@@\n@@background-color:red;This is some text with a background colour@@\n@@width:100px;.myClass This is some text with a class and a width@@\n```\n\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"styleinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /@@((?:[^\\.\\r\\n\\s:]+:[^\\r\\n;]+;)+)?(\\.(?:[^\\r\\n\\s]+)\\s+)?/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /@@/g;\n\t// Get the styles and class\n\tvar stylesString = this.match[1],\n\t\tclassString = this.match[2] ? this.match[2].split(\".\").join(\" \") : undefined;\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse the run up to the terminator\n\tvar tree = this.parser.parseInlineRun(reEnd,{eatTerminator: true});\n\t// Return the classed span\n\tvar node = {\n\t\ttype: \"element\",\n\t\ttag: \"span\",\n\t\tattributes: {\n\t\t\t\"class\": {type: \"string\", value: \"tc-inline-style\"}\n\t\t},\n\t\tchildren: tree\n\t};\n\tif(classString) {\n\t\t$tw.utils.addClassToParseTreeNode(node,classString);\n\t}\n\tif(stylesString) {\n\t\t$tw.utils.addAttributeToParseTreeNode(node,\"style\",stylesString);\n\t}\n\treturn [node];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/syslink.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/syslink.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/syslink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for system tiddler links.\nCan be suppressed preceding them with `~`.\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"syslink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = new RegExp(\n\t\t\"~?\\\\$:\\\\/[\" +\n\t\t$tw.config.textPrimitives.anyLetter.substr(1,$tw.config.textPrimitives.anyLetter.length - 2) +\n\t\t\"\\/._-]+\",\n\t\t\"mg\"\n\t);\n};\n\nexports.parse = function() {\n\tvar match = this.match[0];\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Create the link unless it is suppressed\n\tif(match.substr(0,1) === \"~\") {\n\t\treturn [{type: \"text\", text: match.substr(1)}];\n\t} else {\n\t\treturn [{\n\t\t\ttype: \"link\",\n\t\t\tattributes: {\n\t\t\t\tto: {type: \"string\", value: match}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: match\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/table.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/table.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/table.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text block rule for tables.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"table\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\|(?:[^\\n]*)\\|(?:[fhck]?)\\r?(?:\\n|$)/mg;\n};\n\nvar processRow = function(prevColumns) {\n\tvar cellRegExp = /(?:\\|([^\\n\\|]*)\\|)|(\\|[fhck]?\\r?(?:\\n|$))/mg,\n\t\tcellTermRegExp = /((?:\\x20*)\\|)/mg,\n\t\ttree = [],\n\t\tcol = 0,\n\t\tcolSpanCount = 1,\n\t\tprevCell,\n\t\tvAlign;\n\t// Match a single cell\n\tcellRegExp.lastIndex = this.parser.pos;\n\tvar cellMatch = cellRegExp.exec(this.parser.source);\n\twhile(cellMatch && cellMatch.index === this.parser.pos) {\n\t\tif(cellMatch[1] === \"~\") {\n\t\t\t// Rowspan\n\t\t\tvar last = prevColumns[col];\n\t\t\tif(last) {\n\t\t\t\tlast.rowSpanCount++;\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(last.element,\"rowspan\",last.rowSpanCount);\n\t\t\t\tvAlign = $tw.utils.getAttributeValueFromParseTreeNode(last.element,\"valign\",\"center\");\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(last.element,\"valign\",vAlign);\n\t\t\t\tif(colSpanCount > 1) {\n\t\t\t\t\t$tw.utils.addAttributeToParseTreeNode(last.element,\"colspan\",colSpanCount);\n\t\t\t\t\tcolSpanCount = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Move to just before the `|` terminating the cell\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t} else if(cellMatch[1] === \">\") {\n\t\t\t// Colspan\n\t\t\tcolSpanCount++;\n\t\t\t// Move to just before the `|` terminating the cell\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t} else if(cellMatch[1] === \"<\" && prevCell) {\n\t\t\tcolSpanCount = 1 + $tw.utils.getAttributeValueFromParseTreeNode(prevCell,\"colspan\",1);\n\t\t\t$tw.utils.addAttributeToParseTreeNode(prevCell,\"colspan\",colSpanCount);\n\t\t\tcolSpanCount = 1;\n\t\t\t// Move to just before the `|` terminating the cell\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t} else if(cellMatch[2]) {\n\t\t\t// End of row\n\t\t\tif(prevCell && colSpanCount > 1) {\n\t\t\t\tif(prevCell.attributes && prevCell.attributes && prevCell.attributes.colspan) {\n\t\t\t\t\t\tcolSpanCount += prevCell.attributes.colspan.value;\n\t\t\t\t} else {\n\t\t\t\t\tcolSpanCount -= 1;\n\t\t\t\t}\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(prevCell,\"colspan\",colSpanCount);\n\t\t\t}\n\t\t\tthis.parser.pos = cellRegExp.lastIndex - 1;\n\t\t\tbreak;\n\t\t} else {\n\t\t\t// For ordinary cells, step beyond the opening `|`\n\t\t\tthis.parser.pos++;\n\t\t\t// Look for a space at the start of the cell\n\t\t\tvar spaceLeft = false;\n\t\t\tvAlign = null;\n\t\t\tif(this.parser.source.substr(this.parser.pos).search(/^\\^([^\\^]|\\^\\^)/) === 0) {\n\t\t\t\tvAlign = \"top\";\n\t\t\t} else if(this.parser.source.substr(this.parser.pos).search(/^,([^,]|,,)/) === 0) {\n\t\t\t\tvAlign = \"bottom\";\n\t\t\t}\n\t\t\tif(vAlign) {\n\t\t\t\tthis.parser.pos++;\n\t\t\t}\n\t\t\tvar chr = this.parser.source.substr(this.parser.pos,1);\n\t\t\twhile(chr === \" \") {\n\t\t\t\tspaceLeft = true;\n\t\t\t\tthis.parser.pos++;\n\t\t\t\tchr = this.parser.source.substr(this.parser.pos,1);\n\t\t\t}\n\t\t\t// Check whether this is a heading cell\n\t\t\tvar cell;\n\t\t\tif(chr === \"!\") {\n\t\t\t\tthis.parser.pos++;\n\t\t\t\tcell = {type: \"element\", tag: \"th\", children: []};\n\t\t\t} else {\n\t\t\t\tcell = {type: \"element\", tag: \"td\", children: []};\n\t\t\t}\n\t\t\ttree.push(cell);\n\t\t\t// Record information about this cell\n\t\t\tprevCell = cell;\n\t\t\tprevColumns[col] = {rowSpanCount:1,element:cell};\n\t\t\t// Check for a colspan\n\t\t\tif(colSpanCount > 1) {\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"colspan\",colSpanCount);\n\t\t\t\tcolSpanCount = 1;\n\t\t\t}\n\t\t\t// Parse the cell\n\t\t\tcell.children = this.parser.parseInlineRun(cellTermRegExp,{eatTerminator: true});\n\t\t\t// Set the alignment for the cell\n\t\t\tif(vAlign) {\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"valign\",vAlign);\n\t\t\t}\n\t\t\tif(this.parser.source.substr(this.parser.pos - 2,1) === \" \") { // spaceRight\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"align\",spaceLeft ? \"center\" : \"left\");\n\t\t\t} else if(spaceLeft) {\n\t\t\t\t$tw.utils.addAttributeToParseTreeNode(cell,\"align\",\"right\");\n\t\t\t}\n\t\t\t// Move back to the closing `|`\n\t\t\tthis.parser.pos--;\n\t\t}\n\t\tcol++;\n\t\tcellRegExp.lastIndex = this.parser.pos;\n\t\tcellMatch = cellRegExp.exec(this.parser.source);\n\t}\n\treturn tree;\n};\n\nexports.parse = function() {\n\tvar rowContainerTypes = {\"c\":\"caption\", \"h\":\"thead\", \"\":\"tbody\", \"f\":\"tfoot\"},\n\t\ttable = {type: \"element\", tag: \"table\", children: []},\n\t\trowRegExp = /^\\|([^\\n]*)\\|([fhck]?)\\r?(?:\\n|$)/mg,\n\t\trowTermRegExp = /(\\|(?:[fhck]?)\\r?(?:\\n|$))/mg,\n\t\tprevColumns = [],\n\t\tcurrRowType,\n\t\trowContainer,\n\t\trowCount = 0;\n\t// Match the row\n\trowRegExp.lastIndex = this.parser.pos;\n\tvar rowMatch = rowRegExp.exec(this.parser.source);\n\twhile(rowMatch && rowMatch.index === this.parser.pos) {\n\t\tvar rowType = rowMatch[2];\n\t\t// Check if it is a class assignment\n\t\tif(rowType === \"k\") {\n\t\t\t$tw.utils.addClassToParseTreeNode(table,rowMatch[1]);\n\t\t\tthis.parser.pos = rowMatch.index + rowMatch[0].length;\n\t\t} else {\n\t\t\t// Otherwise, create a new row if this one is of a different type\n\t\t\tif(rowType !== currRowType) {\n\t\t\t\trowContainer = {type: \"element\", tag: rowContainerTypes[rowType], children: []};\n\t\t\t\ttable.children.push(rowContainer);\n\t\t\t\tcurrRowType = rowType;\n\t\t\t}\n\t\t\t// Is this a caption row?\n\t\t\tif(currRowType === \"c\") {\n\t\t\t\t// If so, move past the opening `|` of the row\n\t\t\t\tthis.parser.pos++;\n\t\t\t\t// Move the caption to the first row if it isn't already\n\t\t\t\tif(table.children.length !== 1) {\n\t\t\t\t\ttable.children.pop(); // Take rowContainer out of the children array\n\t\t\t\t\ttable.children.splice(0,0,rowContainer); // Insert it at the bottom\t\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\t// Set the alignment - TODO: figure out why TW did this\n//\t\t\t\trowContainer.attributes.align = rowCount === 0 ? \"top\" : \"bottom\";\n\t\t\t\t// Parse the caption\n\t\t\t\trowContainer.children = this.parser.parseInlineRun(rowTermRegExp,{eatTerminator: true});\n\t\t\t} else {\n\t\t\t\t// Create the row\n\t\t\t\tvar theRow = {type: \"element\", tag: \"tr\", children: []};\n\t\t\t\t$tw.utils.addClassToParseTreeNode(theRow,rowCount%2 ? \"oddRow\" : \"evenRow\");\n\t\t\t\trowContainer.children.push(theRow);\n\t\t\t\t// Process the row\n\t\t\t\ttheRow.children = processRow.call(this,prevColumns);\n\t\t\t\tthis.parser.pos = rowMatch.index + rowMatch[0].length;\n\t\t\t\t// Increment the row count\n\t\t\t\trowCount++;\n\t\t\t}\n\t\t}\n\t\trowMatch = rowRegExp.exec(this.parser.source);\n\t}\n\treturn [table];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/transcludeblock.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/transcludeblock.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/transcludeblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for block-level transclusion. For example:\n\n```\n{{MyTiddler}}\n{{MyTiddler||TemplateTitle}}\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"transcludeblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{([^\\{\\}\\|]*)(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}(?:\\r?\\n|$)/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar template = $tw.utils.trim(this.match[2]),\n\t\ttextRef = $tw.utils.trim(this.match[1]);\n\t// Prepare the transclude widget\n\tvar transcludeNode = {\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {},\n\t\t\tisBlock: true\n\t\t};\n\t// Prepare the tiddler widget\n\tvar tr, targetTitle, targetField, targetIndex, tiddlerNode;\n\tif(textRef) {\n\t\ttr = $tw.utils.parseTextReference(textRef);\n\t\ttargetTitle = tr.title;\n\t\ttargetField = tr.field;\n\t\ttargetIndex = tr.index;\n\t\ttiddlerNode = {\n\t\t\ttype: \"tiddler\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: targetTitle}\n\t\t\t},\n\t\t\tisBlock: true,\n\t\t\tchildren: [transcludeNode]\n\t\t};\n\t}\n\tif(template) {\n\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: template};\n\t\tif(textRef) {\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t} else {\n\t\tif(textRef) {\n\t\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: targetTitle};\n\t\t\tif(targetField) {\n\t\t\t\ttranscludeNode.attributes.field = {type: \"string\", value: targetField};\n\t\t\t}\n\t\t\tif(targetIndex) {\n\t\t\t\ttranscludeNode.attributes.index = {type: \"string\", value: targetIndex};\n\t\t\t}\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/transcludeinline.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/transcludeinline.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/transcludeinline.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for inline-level transclusion. For example:\n\n```\n{{MyTiddler}}\n{{MyTiddler||TemplateTitle}}\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"transcludeinline\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\{\\{([^\\{\\}\\|]*)(?:\\|\\|([^\\|\\{\\}]+))?\\}\\}/mg;\n};\n\nexports.parse = function() {\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Get the match details\n\tvar template = $tw.utils.trim(this.match[2]),\n\t\ttextRef = $tw.utils.trim(this.match[1]);\n\t// Prepare the transclude widget\n\tvar transcludeNode = {\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {}\n\t\t};\n\t// Prepare the tiddler widget\n\tvar tr, targetTitle, targetField, targetIndex, tiddlerNode;\n\tif(textRef) {\n\t\ttr = $tw.utils.parseTextReference(textRef);\n\t\ttargetTitle = tr.title;\n\t\ttargetField = tr.field;\n\t\ttargetIndex = tr.index;\n\t\ttiddlerNode = {\n\t\t\ttype: \"tiddler\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: targetTitle}\n\t\t\t},\n\t\t\tchildren: [transcludeNode]\n\t\t};\n\t}\n\tif(template) {\n\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: template};\n\t\tif(textRef) {\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t} else {\n\t\tif(textRef) {\n\t\t\ttranscludeNode.attributes.tiddler = {type: \"string\", value: targetTitle};\n\t\t\tif(targetField) {\n\t\t\t\ttranscludeNode.attributes.field = {type: \"string\", value: targetField};\n\t\t\t}\n\t\t\tif(targetIndex) {\n\t\t\t\ttranscludeNode.attributes.index = {type: \"string\", value: targetIndex};\n\t\t\t}\n\t\t\treturn [tiddlerNode];\n\t\t} else {\n\t\t\treturn [transcludeNode];\n\t\t}\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/typedblock.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/typedblock.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/typedblock.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text rule for typed blocks. For example:\n\n```\n$$$.js\nThis will be rendered as JavaScript\n$$$\n\n$$$.svg\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"150\" height=\"100\">\n <circle cx=\"100\" cy=\"50\" r=\"40\" stroke=\"black\" stroke-width=\"2\" fill=\"red\" />\n</svg>\n$$$\n\n$$$text/vnd.tiddlywiki>text/html\nThis will be rendered as an //HTML representation// of WikiText\n$$$\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.name = \"typedblock\";\nexports.types = {block: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /\\$\\$\\$([^ >\\r\\n]*)(?: *> *([^ \\r\\n]+))?\\r?\\n/mg;\n};\n\nexports.parse = function() {\n\tvar reEnd = /\\r?\\n\\$\\$\\$\\r?(?:\\n|$)/mg;\n\t// Save the type\n\tvar parseType = this.match[1],\n\t\trenderType = this.match[2];\n\t// Move past the match\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Look for the end of the block\n\treEnd.lastIndex = this.parser.pos;\n\tvar match = reEnd.exec(this.parser.source),\n\t\ttext;\n\t// Process the block\n\tif(match) {\n\t\ttext = this.parser.source.substring(this.parser.pos,match.index);\n\t\tthis.parser.pos = match.index + match[0].length;\n\t} else {\n\t\ttext = this.parser.source.substr(this.parser.pos);\n\t\tthis.parser.pos = this.parser.sourceLength;\n\t}\n\t// Parse the block according to the specified type\n\tvar parser = this.parser.wiki.parseText(parseType,text,{defaultType: \"text/plain\"});\n\t// If there's no render type, just return the parse tree\n\tif(!renderType) {\n\t\treturn parser.tree;\n\t} else {\n\t\t// Otherwise, render to the rendertype and return in a <PRE> tag\n\t\tvar widgetNode = this.parser.wiki.makeWidget(parser),\n\t\t\tcontainer = $tw.fakeDocument.createElement(\"div\");\n\t\twidgetNode.render(container,null);\n\t\ttext = renderType === \"text/html\" ? container.innerHTML : container.textContent;\n\t\treturn [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"pre\",\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: text\n\t\t\t}]\n\t\t}];\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/whitespace.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/whitespace.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/whitespace.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki pragma rule for whitespace specifications\n\n```\n\\whitespace trim\n\\whitespace notrim\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"whitespace\";\nexports.types = {pragma: true};\n\n/*\nInstantiate parse rule\n*/\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = /^\\\\whitespace[^\\S\\n]/mg;\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\tvar self = this;\n\t// Move past the pragma invocation\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// Parse whitespace delimited tokens terminated by a line break\n\tvar reMatch = /[^\\S\\n]*(\\S+)|(\\r?\\n)/mg,\n\t\ttokens = [];\n\treMatch.lastIndex = this.parser.pos;\n\tvar match = reMatch.exec(this.parser.source);\n\twhile(match && match.index === this.parser.pos) {\n\t\tthis.parser.pos = reMatch.lastIndex;\n\t\t// Exit if we've got the line break\n\t\tif(match[2]) {\n\t\t\tbreak;\n\t\t}\n\t\t// Process the token\n\t\tif(match[1]) {\n\t\t\ttokens.push(match[1]);\n\t\t}\n\t\t// Match the next token\n\t\tmatch = reMatch.exec(this.parser.source);\n\t}\n\t// Process the tokens\n\t$tw.utils.each(tokens,function(token) {\n\t\tswitch(token) {\n\t\t\tcase \"trim\":\n\t\t\t\tself.parser.configTrimWhiteSpace = true;\n\t\t\t\tbreak;\n\t\t\tcase \"notrim\":\n\t\t\t\tself.parser.configTrimWhiteSpace = false;\n\t\t\t\tbreak;\n\t\t}\n\t});\n\t// No parse tree nodes to return\n\treturn [];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/rules/wikilink.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/wikilink.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/wikilink.js\ntype: application/javascript\nmodule-type: wikirule\n\nWiki text inline rule for wiki links. For example:\n\n```\nAWikiLink\nAnotherLink\n~SuppressedLink\n```\n\nPrecede a camel case word with `~` to prevent it from being recognised as a link.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.name = \"wikilink\";\nexports.types = {inline: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\t// Regexp to match\n\tthis.matchRegExp = new RegExp($tw.config.textPrimitives.unWikiLink + \"?\" + $tw.config.textPrimitives.wikiLink,\"mg\");\n};\n\n/*\nParse the most recent match\n*/\nexports.parse = function() {\n\t// Get the details of the match\n\tvar linkText = this.match[0];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// If the link starts with the unwikilink character then just output it as plain text\n\tif(linkText.substr(0,1) === $tw.config.textPrimitives.unWikiLink) {\n\t\treturn [{type: \"text\", text: linkText.substr(1)}];\n\t}\n\t// If the link has been preceded with a blocked letter then don't treat it as a link\n\tif(this.match.index > 0) {\n\t\tvar preRegExp = new RegExp($tw.config.textPrimitives.blockPrefixLetters,\"mg\");\n\t\tpreRegExp.lastIndex = this.match.index-1;\n\t\tvar preMatch = preRegExp.exec(this.parser.source);\n\t\tif(preMatch && preMatch.index === this.match.index-1) {\n\t\t\treturn [{type: \"text\", text: linkText}];\n\t\t}\n\t}\n\treturn [{\n\t\ttype: \"link\",\n\t\tattributes: {\n\t\t\tto: {type: \"string\", value: linkText}\n\t\t},\n\t\tchildren: [{\n\t\t\ttype: \"text\",\n\t\t\ttext: linkText\n\t\t}]\n\t}];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "wikirule"
},
"$:/core/modules/parsers/wikiparser/wikiparser.js": {
"title": "$:/core/modules/parsers/wikiparser/wikiparser.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/wikiparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe wiki text parser processes blocks of source text into a parse tree.\n\nThe parse tree is made up of nested arrays of these JavaScript objects:\n\n\t{type: \"element\", tag: <string>, attributes: {}, children: []} - an HTML element\n\t{type: \"text\", text: <string>} - a text node\n\t{type: \"entity\", value: <string>} - an entity\n\t{type: \"raw\", html: <string>} - raw HTML\n\nAttributes are stored as hashmaps of the following objects:\n\n\t{type: \"string\", value: <string>} - literal string\n\t{type: \"indirect\", textReference: <textReference>} - indirect through a text reference\n\t{type: \"macro\", macro: <TBD>} - indirect through a macro invocation\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar WikiParser = function(type,text,options) {\n\tthis.wiki = options.wiki;\n\tvar self = this;\n\t// Check for an externally linked tiddler\n\tif($tw.browser && (text || \"\") === \"\" && options._canonical_uri) {\n\t\tthis.loadRemoteTiddler(options._canonical_uri);\n\t\ttext = $tw.language.getRawString(\"LazyLoadingWarning\");\n\t}\n\t// Initialise the classes if we don't have them already\n\tif(!this.pragmaRuleClasses) {\n\t\tWikiParser.prototype.pragmaRuleClasses = $tw.modules.createClassesFromModules(\"wikirule\",\"pragma\",$tw.WikiRuleBase);\n\t\tthis.setupRules(WikiParser.prototype.pragmaRuleClasses,\"$:/config/WikiParserRules/Pragmas/\");\n\t}\n\tif(!this.blockRuleClasses) {\n\t\tWikiParser.prototype.blockRuleClasses = $tw.modules.createClassesFromModules(\"wikirule\",\"block\",$tw.WikiRuleBase);\n\t\tthis.setupRules(WikiParser.prototype.blockRuleClasses,\"$:/config/WikiParserRules/Block/\");\n\t}\n\tif(!this.inlineRuleClasses) {\n\t\tWikiParser.prototype.inlineRuleClasses = $tw.modules.createClassesFromModules(\"wikirule\",\"inline\",$tw.WikiRuleBase);\n\t\tthis.setupRules(WikiParser.prototype.inlineRuleClasses,\"$:/config/WikiParserRules/Inline/\");\n\t}\n\t// Save the parse text\n\tthis.type = type || \"text/vnd.tiddlywiki\";\n\tthis.source = text || \"\";\n\tthis.sourceLength = this.source.length;\n\t// Flag for ignoring whitespace\n\tthis.configTrimWhiteSpace = false;\n\t// Set current parse position\n\tthis.pos = 0;\n\t// Instantiate the pragma parse rules\n\tthis.pragmaRules = this.instantiateRules(this.pragmaRuleClasses,\"pragma\",0);\n\t// Instantiate the parser block and inline rules\n\tthis.blockRules = this.instantiateRules(this.blockRuleClasses,\"block\",0);\n\tthis.inlineRules = this.instantiateRules(this.inlineRuleClasses,\"inline\",0);\n\t// Parse any pragmas\n\tthis.tree = [];\n\tvar topBranch = this.parsePragmas();\n\t// Parse the text into inline runs or blocks\n\tif(options.parseAsInline) {\n\t\ttopBranch.push.apply(topBranch,this.parseInlineRun());\n\t} else {\n\t\ttopBranch.push.apply(topBranch,this.parseBlocks());\n\t}\n\t// Return the parse tree\n};\n\n/*\n*/\nWikiParser.prototype.loadRemoteTiddler = function(url) {\n\tvar self = this;\n\t$tw.utils.httpRequest({\n\t\turl: url,\n\t\ttype: \"GET\",\n\t\tcallback: function(err,data) {\n\t\t\tif(!err) {\n\t\t\t\tvar tiddlers = self.wiki.deserializeTiddlers(\".tid\",data,self.wiki.getCreationFields());\n\t\t\t\t$tw.utils.each(tiddlers,function(tiddler) {\n\t\t\t\t\ttiddler[\"_canonical_uri\"] = url;\n\t\t\t\t});\n\t\t\t\tif(tiddlers) {\n\t\t\t\t\tself.wiki.addTiddlers(tiddlers);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\n*/\nWikiParser.prototype.setupRules = function(proto,configPrefix) {\n\tvar self = this;\n\tif(!$tw.safemode) {\n\t\t$tw.utils.each(proto,function(object,name) {\n\t\t\tif(self.wiki.getTiddlerText(configPrefix + name,\"enable\") !== \"enable\") {\n\t\t\t\tdelete proto[name];\n\t\t\t}\n\t\t});\n\t}\n};\n\n/*\nInstantiate an array of parse rules\n*/\nWikiParser.prototype.instantiateRules = function(classes,type,startPos) {\n\tvar rulesInfo = [],\n\t\tself = this;\n\t$tw.utils.each(classes,function(RuleClass) {\n\t\t// Instantiate the rule\n\t\tvar rule = new RuleClass(self);\n\t\trule.is = {};\n\t\trule.is[type] = true;\n\t\trule.init(self);\n\t\tvar matchIndex = rule.findNextMatch(startPos);\n\t\tif(matchIndex !== undefined) {\n\t\t\trulesInfo.push({\n\t\t\t\trule: rule,\n\t\t\t\tmatchIndex: matchIndex\n\t\t\t});\n\t\t}\n\t});\n\treturn rulesInfo;\n};\n\n/*\nSkip any whitespace at the current position. Options are:\n\ttreatNewlinesAsNonWhitespace: true if newlines are NOT to be treated as whitespace\n*/\nWikiParser.prototype.skipWhitespace = function(options) {\n\toptions = options || {};\n\tvar whitespaceRegExp = options.treatNewlinesAsNonWhitespace ? /([^\\S\\n]+)/mg : /(\\s+)/mg;\n\twhitespaceRegExp.lastIndex = this.pos;\n\tvar whitespaceMatch = whitespaceRegExp.exec(this.source);\n\tif(whitespaceMatch && whitespaceMatch.index === this.pos) {\n\t\tthis.pos = whitespaceRegExp.lastIndex;\n\t}\n};\n\n/*\nGet the next match out of an array of parse rule instances\n*/\nWikiParser.prototype.findNextMatch = function(rules,startPos) {\n\t// Find the best matching rule by finding the closest match position\n\tvar matchingRule,\n\t\tmatchingRulePos = this.sourceLength;\n\t// Step through each rule\n\tfor(var t=0; t<rules.length; t++) {\n\t\tvar ruleInfo = rules[t];\n\t\t// Ask the rule to get the next match if we've moved past the current one\n\t\tif(ruleInfo.matchIndex !== undefined && ruleInfo.matchIndex < startPos) {\n\t\t\truleInfo.matchIndex = ruleInfo.rule.findNextMatch(startPos);\n\t\t}\n\t\t// Adopt this match if it's closer than the current best match\n\t\tif(ruleInfo.matchIndex !== undefined && ruleInfo.matchIndex <= matchingRulePos) {\n\t\t\tmatchingRule = ruleInfo;\n\t\t\tmatchingRulePos = ruleInfo.matchIndex;\n\t\t}\n\t}\n\treturn matchingRule;\n};\n\n/*\nParse any pragmas at the beginning of a block of parse text\n*/\nWikiParser.prototype.parsePragmas = function() {\n\tvar currentTreeBranch = this.tree;\n\twhile(true) {\n\t\t// Skip whitespace\n\t\tthis.skipWhitespace();\n\t\t// Check for the end of the text\n\t\tif(this.pos >= this.sourceLength) {\n\t\t\tbreak;\n\t\t}\n\t\t// Check if we've arrived at a pragma rule match\n\t\tvar nextMatch = this.findNextMatch(this.pragmaRules,this.pos);\n\t\t// If not, just exit\n\t\tif(!nextMatch || nextMatch.matchIndex !== this.pos) {\n\t\t\tbreak;\n\t\t}\n\t\t// Process the pragma rule\n\t\tvar subTree = nextMatch.rule.parse();\n\t\tif(subTree.length > 0) {\n\t\t\t// Quick hack; we only cope with a single parse tree node being returned, which is true at the moment\n\t\t\tcurrentTreeBranch.push.apply(currentTreeBranch,subTree);\n\t\t\tsubTree[0].children = [];\n\t\t\tcurrentTreeBranch = subTree[0].children;\n\t\t}\n\t}\n\treturn currentTreeBranch;\n};\n\n/*\nParse a block from the current position\n\tterminatorRegExpString: optional regular expression string that identifies the end of plain paragraphs. Must not include capturing parenthesis\n*/\nWikiParser.prototype.parseBlock = function(terminatorRegExpString) {\n\tvar terminatorRegExp = terminatorRegExpString ? new RegExp(\"(\" + terminatorRegExpString + \"|\\\\r?\\\\n\\\\r?\\\\n)\",\"mg\") : /(\\r?\\n\\r?\\n)/mg;\n\tthis.skipWhitespace();\n\tif(this.pos >= this.sourceLength) {\n\t\treturn [];\n\t}\n\t// Look for a block rule that applies at the current position\n\tvar nextMatch = this.findNextMatch(this.blockRules,this.pos);\n\tif(nextMatch && nextMatch.matchIndex === this.pos) {\n\t\treturn nextMatch.rule.parse();\n\t}\n\t// Treat it as a paragraph if we didn't find a block rule\n\treturn [{type: \"element\", tag: \"p\", children: this.parseInlineRun(terminatorRegExp)}];\n};\n\n/*\nParse a series of blocks of text until a terminating regexp is encountered or the end of the text\n\tterminatorRegExpString: terminating regular expression\n*/\nWikiParser.prototype.parseBlocks = function(terminatorRegExpString) {\n\tif(terminatorRegExpString) {\n\t\treturn this.parseBlocksTerminated(terminatorRegExpString);\n\t} else {\n\t\treturn this.parseBlocksUnterminated();\n\t}\n};\n\n/*\nParse a block from the current position to the end of the text\n*/\nWikiParser.prototype.parseBlocksUnterminated = function() {\n\tvar tree = [];\n\twhile(this.pos < this.sourceLength) {\n\t\ttree.push.apply(tree,this.parseBlock());\n\t}\n\treturn tree;\n};\n\n/*\nParse blocks of text until a terminating regexp is encountered\n*/\nWikiParser.prototype.parseBlocksTerminated = function(terminatorRegExpString) {\n\tvar terminatorRegExp = new RegExp(\"(\" + terminatorRegExpString + \")\",\"mg\"),\n\t\ttree = [];\n\t// Skip any whitespace\n\tthis.skipWhitespace();\n\t// Check if we've got the end marker\n\tterminatorRegExp.lastIndex = this.pos;\n\tvar match = terminatorRegExp.exec(this.source);\n\t// Parse the text into blocks\n\twhile(this.pos < this.sourceLength && !(match && match.index === this.pos)) {\n\t\tvar blocks = this.parseBlock(terminatorRegExpString);\n\t\ttree.push.apply(tree,blocks);\n\t\t// Skip any whitespace\n\t\tthis.skipWhitespace();\n\t\t// Check if we've got the end marker\n\t\tterminatorRegExp.lastIndex = this.pos;\n\t\tmatch = terminatorRegExp.exec(this.source);\n\t}\n\tif(match && match.index === this.pos) {\n\t\tthis.pos = match.index + match[0].length;\n\t}\n\treturn tree;\n};\n\n/*\nParse a run of text at the current position\n\tterminatorRegExp: a regexp at which to stop the run\n\toptions: see below\nOptions available:\n\teatTerminator: move the parse position past any encountered terminator (default false)\n*/\nWikiParser.prototype.parseInlineRun = function(terminatorRegExp,options) {\n\tif(terminatorRegExp) {\n\t\treturn this.parseInlineRunTerminated(terminatorRegExp,options);\n\t} else {\n\t\treturn this.parseInlineRunUnterminated(options);\n\t}\n};\n\nWikiParser.prototype.parseInlineRunUnterminated = function(options) {\n\tvar tree = [];\n\t// Find the next occurrence of an inline rule\n\tvar nextMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t// Loop around the matches until we've reached the end of the text\n\twhile(this.pos < this.sourceLength && nextMatch) {\n\t\t// Process the text preceding the run rule\n\t\tif(nextMatch.matchIndex > this.pos) {\n\t\t\tthis.pushTextWidget(tree,this.source.substring(this.pos,nextMatch.matchIndex));\n\t\t\tthis.pos = nextMatch.matchIndex;\n\t\t}\n\t\t// Process the run rule\n\t\ttree.push.apply(tree,nextMatch.rule.parse());\n\t\t// Look for the next run rule\n\t\tnextMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t}\n\t// Process the remaining text\n\tif(this.pos < this.sourceLength) {\n\t\tthis.pushTextWidget(tree,this.source.substr(this.pos));\n\t}\n\tthis.pos = this.sourceLength;\n\treturn tree;\n};\n\nWikiParser.prototype.parseInlineRunTerminated = function(terminatorRegExp,options) {\n\toptions = options || {};\n\tvar tree = [];\n\t// Find the next occurrence of the terminator\n\tterminatorRegExp.lastIndex = this.pos;\n\tvar terminatorMatch = terminatorRegExp.exec(this.source);\n\t// Find the next occurrence of a inlinerule\n\tvar inlineRuleMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t// Loop around until we've reached the end of the text\n\twhile(this.pos < this.sourceLength && (terminatorMatch || inlineRuleMatch)) {\n\t\t// Return if we've found the terminator, and it precedes any inline rule match\n\t\tif(terminatorMatch) {\n\t\t\tif(!inlineRuleMatch || inlineRuleMatch.matchIndex >= terminatorMatch.index) {\n\t\t\t\tif(terminatorMatch.index > this.pos) {\n\t\t\t\t\tthis.pushTextWidget(tree,this.source.substring(this.pos,terminatorMatch.index));\n\t\t\t\t}\n\t\t\t\tthis.pos = terminatorMatch.index;\n\t\t\t\tif(options.eatTerminator) {\n\t\t\t\t\tthis.pos += terminatorMatch[0].length;\n\t\t\t\t}\n\t\t\t\treturn tree;\n\t\t\t}\n\t\t}\n\t\t// Process any inline rule, along with the text preceding it\n\t\tif(inlineRuleMatch) {\n\t\t\t// Preceding text\n\t\t\tif(inlineRuleMatch.matchIndex > this.pos) {\n\t\t\t\tthis.pushTextWidget(tree,this.source.substring(this.pos,inlineRuleMatch.matchIndex));\n\t\t\t\tthis.pos = inlineRuleMatch.matchIndex;\n\t\t\t}\n\t\t\t// Process the inline rule\n\t\t\ttree.push.apply(tree,inlineRuleMatch.rule.parse());\n\t\t\t// Look for the next inline rule\n\t\t\tinlineRuleMatch = this.findNextMatch(this.inlineRules,this.pos);\n\t\t\t// Look for the next terminator match\n\t\t\tterminatorRegExp.lastIndex = this.pos;\n\t\t\tterminatorMatch = terminatorRegExp.exec(this.source);\n\t\t}\n\t}\n\t// Process the remaining text\n\tif(this.pos < this.sourceLength) {\n\t\tthis.pushTextWidget(tree,this.source.substr(this.pos));\n\t}\n\tthis.pos = this.sourceLength;\n\treturn tree;\n};\n\n/*\nPush a text widget onto an array, respecting the configTrimWhiteSpace setting\n*/\nWikiParser.prototype.pushTextWidget = function(array,text) {\n\tif(this.configTrimWhiteSpace) {\n\t\ttext = $tw.utils.trim(text);\n\t}\n\tif(text) {\n\t\tarray.push({type: \"text\", text: text});\t\t\n\t}\n};\n\n/*\nParse zero or more class specifiers `.classname`\n*/\nWikiParser.prototype.parseClasses = function() {\n\tvar classRegExp = /\\.([^\\s\\.]+)/mg,\n\t\tclassNames = [];\n\tclassRegExp.lastIndex = this.pos;\n\tvar match = classRegExp.exec(this.source);\n\twhile(match && match.index === this.pos) {\n\t\tthis.pos = match.index + match[0].length;\n\t\tclassNames.push(match[1]);\n\t\tmatch = classRegExp.exec(this.source);\n\t}\n\treturn classNames;\n};\n\n/*\nAmend the rules used by this instance of the parser\n\ttype: `only` keeps just the named rules, `except` keeps all but the named rules\n\tnames: array of rule names\n*/\nWikiParser.prototype.amendRules = function(type,names) {\n\tnames = names || [];\n\t// Define the filter function\n\tvar keepFilter;\n\tif(type === \"only\") {\n\t\tkeepFilter = function(name) {\n\t\t\treturn names.indexOf(name) !== -1;\n\t\t};\n\t} else if(type === \"except\") {\n\t\tkeepFilter = function(name) {\n\t\t\treturn names.indexOf(name) === -1;\n\t\t};\n\t} else {\n\t\treturn;\n\t}\n\t// Define a function to process each of our rule arrays\n\tvar processRuleArray = function(ruleArray) {\n\t\tfor(var t=ruleArray.length-1; t>=0; t--) {\n\t\t\tif(!keepFilter(ruleArray[t].rule.name)) {\n\t\t\t\truleArray.splice(t,1);\n\t\t\t}\n\t\t}\n\t};\n\t// Process each rule array\n\tprocessRuleArray(this.pragmaRules);\n\tprocessRuleArray(this.blockRules);\n\tprocessRuleArray(this.inlineRules);\n};\n\nexports[\"text/vnd.tiddlywiki\"] = WikiParser;\n\n})();\n\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/core/modules/parsers/wikiparser/rules/wikirulebase.js": {
"title": "$:/core/modules/parsers/wikiparser/rules/wikirulebase.js",
"text": "/*\\\ntitle: $:/core/modules/parsers/wikiparser/rules/wikirulebase.js\ntype: application/javascript\nmodule-type: global\n\nBase class for wiki parser rules\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nThis constructor is always overridden with a blank constructor, and so shouldn't be used\n*/\nvar WikiRuleBase = function() {\n};\n\n/*\nTo be overridden by individual rules\n*/\nWikiRuleBase.prototype.init = function(parser) {\n\tthis.parser = parser;\n};\n\n/*\nDefault implementation of findNextMatch uses RegExp matching\n*/\nWikiRuleBase.prototype.findNextMatch = function(startPos) {\n\tthis.matchRegExp.lastIndex = startPos;\n\tthis.match = this.matchRegExp.exec(this.parser.source);\n\treturn this.match ? this.match.index : undefined;\n};\n\nexports.WikiRuleBase = WikiRuleBase;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/pluginswitcher.js": {
"title": "$:/core/modules/pluginswitcher.js",
"text": "/*\\\ntitle: $:/core/modules/pluginswitcher.js\ntype: application/javascript\nmodule-type: global\n\nManages switching plugins for themes and languages.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\noptions:\nwiki: wiki store to be used\npluginType: type of plugin to be switched\ncontrollerTitle: title of tiddler used to control switching of this resource\ndefaultPlugins: array of default plugins to be used if nominated plugin isn't found\nonSwitch: callback when plugin is switched (single parameter is array of plugin titles)\n*/\nfunction PluginSwitcher(options) {\n\tthis.wiki = options.wiki;\n\tthis.pluginType = options.pluginType;\n\tthis.controllerTitle = options.controllerTitle;\n\tthis.defaultPlugins = options.defaultPlugins || [];\n\tthis.onSwitch = options.onSwitch;\n\t// Switch to the current plugin\n\tthis.switchPlugins();\n\t// Listen for changes to the selected plugin\n\tvar self = this;\n\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.utils.hop(changes,self.controllerTitle)) {\n\t\t\tself.switchPlugins();\n\t\t}\n\t});\n}\n\nPluginSwitcher.prototype.switchPlugins = function() {\n\t// Get the name of the current theme\n\tvar selectedPluginTitle = this.wiki.getTiddlerText(this.controllerTitle);\n\t// If it doesn't exist, then fallback to one of the default themes\n\tvar index = 0;\n\twhile(!this.wiki.getTiddler(selectedPluginTitle) && index < this.defaultPlugins.length) {\n\t\tselectedPluginTitle = this.defaultPlugins[index++];\n\t}\n\t// Accumulate the titles of the plugins that we need to load\n\tvar plugins = [],\n\t\tself = this,\n\t\taccumulatePlugin = function(title) {\n\t\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\t\tif(tiddler && tiddler.isPlugin() && plugins.indexOf(title) === -1) {\n\t\t\t\tplugins.push(title);\n\t\t\t\tvar pluginInfo = JSON.parse(self.wiki.getTiddlerText(title)),\n\t\t\t\t\tdependents = $tw.utils.parseStringArray(tiddler.fields.dependents || \"\");\n\t\t\t\t$tw.utils.each(dependents,function(title) {\n\t\t\t\t\taccumulatePlugin(title);\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\taccumulatePlugin(selectedPluginTitle);\n\t// Read the plugin info for the incoming plugins\n\tvar changes = $tw.wiki.readPluginInfo(plugins);\n\t// Unregister any existing theme tiddlers\n\tvar unregisteredTiddlers = $tw.wiki.unregisterPluginTiddlers(this.pluginType);\n\t// Register any new theme tiddlers\n\tvar registeredTiddlers = $tw.wiki.registerPluginTiddlers(this.pluginType,plugins);\n\t// Unpack the current theme tiddlers\n\t$tw.wiki.unpackPluginTiddlers();\n\t// Call the switch handler\n\tif(this.onSwitch) {\n\t\tthis.onSwitch(plugins);\n\t}\n};\n\nexports.PluginSwitcher = PluginSwitcher;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/saver-handler.js": {
"title": "$:/core/modules/saver-handler.js",
"text": "/*\\\ntitle: $:/core/modules/saver-handler.js\ntype: application/javascript\nmodule-type: global\n\nThe saver handler tracks changes to the store and handles saving the entire wiki via saver modules.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nInstantiate the saver handler with the following options:\nwiki: wiki to be synced\ndirtyTracking: true if dirty tracking should be performed\n*/\nfunction SaverHandler(options) {\n\tvar self = this;\n\tthis.wiki = options.wiki;\n\tthis.dirtyTracking = options.dirtyTracking;\n\tthis.preloadDirty = options.preloadDirty || [];\n\tthis.pendingAutoSave = false;\n\t// Make a logger\n\tthis.logger = new $tw.utils.Logger(\"saver-handler\");\n\t// Initialise our savers\n\tif($tw.browser) {\n\t\tthis.initSavers();\n\t}\n\t// Only do dirty tracking if required\n\tif($tw.browser && this.dirtyTracking) {\n\t\t// Compile the dirty tiddler filter\n\t\tthis.filterFn = this.wiki.compileFilter(this.wiki.getTiddlerText(this.titleSyncFilter));\n\t\t// Count of changes that have not yet been saved\n\t\tvar filteredChanges = self.filterFn.call(self.wiki,function(iterator) {\n\t\t\t\t$tw.utils.each(self.preloadDirty,function(title) {\n\t\t\t\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\t\t\t\titerator(tiddler,title);\n\t\t\t\t});\n\t\t});\n\t\tthis.numChanges = filteredChanges.length;\n\t\t// Listen out for changes to tiddlers\n\t\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\t\t// Filter the changes so that we only count changes to tiddlers that we care about\n\t\t\tvar filteredChanges = self.filterFn.call(self.wiki,function(iterator) {\n\t\t\t\t$tw.utils.each(changes,function(change,title) {\n\t\t\t\t\tvar tiddler = self.wiki.getTiddler(title);\n\t\t\t\t\titerator(tiddler,title);\n\t\t\t\t});\n\t\t\t});\n\t\t\t// Adjust the number of changes\n\t\t\tself.numChanges += filteredChanges.length;\n\t\t\tself.updateDirtyStatus();\n\t\t\t// Do any autosave if one is pending and there's no more change events\n\t\t\tif(self.pendingAutoSave && self.wiki.getSizeOfTiddlerEventQueue() === 0) {\n\t\t\t\t// Check if we're dirty\n\t\t\t\tif(self.numChanges > 0) {\n\t\t\t\t\tself.saveWiki({\n\t\t\t\t\t\tmethod: \"autosave\",\n\t\t\t\t\t\tdownloadType: \"text/plain\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tself.pendingAutoSave = false;\n\t\t\t}\n\t\t});\n\t\t// Listen for the autosave event\n\t\t$tw.rootWidget.addEventListener(\"tm-auto-save-wiki\",function(event) {\n\t\t\t// Do the autosave unless there are outstanding tiddler change events\n\t\t\tif(self.wiki.getSizeOfTiddlerEventQueue() === 0) {\n\t\t\t\t// Check if we're dirty\n\t\t\t\tif(self.numChanges > 0) {\n\t\t\t\t\tself.saveWiki({\n\t\t\t\t\t\tmethod: \"autosave\",\n\t\t\t\t\t\tdownloadType: \"text/plain\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Otherwise put ourselves in the \"pending autosave\" state and wait for the change event before we do the autosave\n\t\t\t\tself.pendingAutoSave = true;\n\t\t\t}\n\t\t});\n\t\t// Set up our beforeunload handler\n\t\t$tw.addUnloadTask(function(event) {\n\t\t\tvar confirmationMessage;\n\t\t\tif(self.isDirty()) {\n\t\t\t\tconfirmationMessage = $tw.language.getString(\"UnsavedChangesWarning\");\n\t\t\t\tevent.returnValue = confirmationMessage; // Gecko\n\t\t\t}\n\t\t\treturn confirmationMessage;\n\t\t});\n\t}\n\t// Install the save action handlers\n\tif($tw.browser) {\n\t\t$tw.rootWidget.addEventListener(\"tm-save-wiki\",function(event) {\n\t\t\tself.saveWiki({\n\t\t\t\ttemplate: event.param,\n\t\t\t\tdownloadType: \"text/plain\",\n\t\t\t\tvariables: event.paramObject\n\t\t\t});\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tm-download-file\",function(event) {\n\t\t\tself.saveWiki({\n\t\t\t\tmethod: \"download\",\n\t\t\t\ttemplate: event.param,\n\t\t\t\tdownloadType: \"text/plain\",\n\t\t\t\tvariables: event.paramObject\n\t\t\t});\n\t\t});\n\t}\n}\n\nSaverHandler.prototype.titleSyncFilter = \"$:/config/SaverFilter\";\nSaverHandler.prototype.titleAutoSave = \"$:/config/AutoSave\";\nSaverHandler.prototype.titleSavedNotification = \"$:/language/Notifications/Save/Done\";\n\n/*\nSelect the appropriate saver modules and set them up\n*/\nSaverHandler.prototype.initSavers = function(moduleType) {\n\tmoduleType = moduleType || \"saver\";\n\t// Instantiate the available savers\n\tthis.savers = [];\n\tvar self = this;\n\t$tw.modules.forEachModuleOfType(moduleType,function(title,module) {\n\t\tif(module.canSave(self)) {\n\t\t\tself.savers.push(module.create(self.wiki));\n\t\t}\n\t});\n\t// Sort the savers into priority order\n\tthis.savers.sort(function(a,b) {\n\t\tif(a.info.priority < b.info.priority) {\n\t\t\treturn -1;\n\t\t} else {\n\t\t\tif(a.info.priority > b.info.priority) {\n\t\t\t\treturn +1;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\nSave the wiki contents. Options are:\n\tmethod: \"save\", \"autosave\" or \"download\"\n\ttemplate: the tiddler containing the template to save\n\tdownloadType: the content type for the saved file\n*/\nSaverHandler.prototype.saveWiki = function(options) {\n\toptions = options || {};\n\tvar self = this,\n\t\tmethod = options.method || \"save\";\n\t// Ignore autosave if disabled\n\tif(method === \"autosave\" && this.wiki.getTiddlerText(this.titleAutoSave,\"yes\") !== \"yes\") {\n\t\treturn false;\n\t}\n\tvar\tvariables = options.variables || {},\n\t\ttemplate = options.template || \"$:/core/save/all\",\n\t\tdownloadType = options.downloadType || \"text/plain\",\n\t\ttext = this.wiki.renderTiddler(downloadType,template,options),\n\t\tcallback = function(err) {\n\t\t\tif(err) {\n\t\t\t\talert($tw.language.getString(\"Error/WhileSaving\") + \":\\n\\n\" + err);\n\t\t\t} else {\n\t\t\t\t// Clear the task queue if we're saving (rather than downloading)\n\t\t\t\tif(method !== \"download\") {\n\t\t\t\t\tself.numChanges = 0;\n\t\t\t\t\tself.updateDirtyStatus();\n\t\t\t\t}\n\t\t\t\t$tw.notifier.display(self.titleSavedNotification);\n\t\t\t\tif(options.callback) {\n\t\t\t\t\toptions.callback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t// Call the highest priority saver that supports this method\n\tfor(var t=this.savers.length-1; t>=0; t--) {\n\t\tvar saver = this.savers[t];\n\t\tif(saver.info.capabilities.indexOf(method) !== -1 && saver.save(text,method,callback,{variables: {filename: variables.filename}})) {\n\t\t\tthis.logger.log(\"Saving wiki with method\",method,\"through saver\",saver.info.name);\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\n/*\nChecks whether the wiki is dirty (ie the window shouldn't be closed)\n*/\nSaverHandler.prototype.isDirty = function() {\n\treturn this.numChanges > 0;\n};\n\n/*\nUpdate the document body with the class \"tc-dirty\" if the wiki has unsaved/unsynced changes\n*/\nSaverHandler.prototype.updateDirtyStatus = function() {\n\tif($tw.browser) {\n\t\t$tw.utils.toggleClass(document.body,\"tc-dirty\",this.isDirty());\n\t}\n};\n\nexports.SaverHandler = SaverHandler;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/savers/andtidwiki.js": {
"title": "$:/core/modules/savers/andtidwiki.js",
"text": "/*\\\ntitle: $:/core/modules/savers/andtidwiki.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via the AndTidWiki Android app\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false, netscape: false, Components: false */\n\"use strict\";\n\nvar AndTidWiki = function(wiki) {\n};\n\nAndTidWiki.prototype.save = function(text,method,callback,options) {\n\tvar filename = options && options.variables ? options.variables.filename : null;\n\tif (method === \"download\") {\n\t\t// Support download\n\t\tif (window.twi.saveDownload) {\n\t\t\ttry {\n\t\t\t\twindow.twi.saveDownload(text,filename);\n\t\t\t} catch(err) {\n\t\t\t\tif (err.message === \"Method not found\") {\n\t\t\t\t\twindow.twi.saveDownload(text);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tvar link = document.createElement(\"a\");\n\t\t\tlink.setAttribute(\"href\",\"data:text/plain,\" + encodeURIComponent(text));\n\t\t\tif (filename) {\n\t\t\t link.setAttribute(\"download\",filename);\n\t\t\t}\n\t\t\tdocument.body.appendChild(link);\n\t\t\tlink.click();\n\t\t\tdocument.body.removeChild(link);\n\t\t}\n\t} else if (window.twi.saveWiki) {\n\t\t// Direct save in Tiddloid\n\t\twindow.twi.saveWiki(text);\n\t} else {\n\t\t// Get the pathname of this document\n\t\tvar pathname = decodeURIComponent(document.location.toString().split(\"#\")[0]);\n\t\t// Strip the file://\n\t\tif(pathname.indexOf(\"file://\") === 0) {\n\t\t\tpathname = pathname.substr(7);\n\t\t}\n\t\t// Strip any query or location part\n\t\tvar p = pathname.indexOf(\"?\");\n\t\tif(p !== -1) {\n\t\t\tpathname = pathname.substr(0,p);\n\t\t}\n\t\tp = pathname.indexOf(\"#\");\n\t\tif(p !== -1) {\n\t\t\tpathname = pathname.substr(0,p);\n\t\t}\n\t\t// Save the file\n\t\twindow.twi.saveFile(pathname,text);\n\t}\n\t// Call the callback\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nAndTidWiki.prototype.info = {\n\tname: \"andtidwiki\",\n\tpriority: 1600,\n\tcapabilities: [\"save\", \"autosave\", \"download\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn !!window.twi && !!window.twi.saveFile;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new AndTidWiki(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/beaker.js": {
"title": "$:/core/modules/savers/beaker.js",
"text": "/*\\\ntitle: $:/core/modules/savers/beaker.js\ntype: application/javascript\nmodule-type: saver\n\nSaves files using the Beaker browser's (https://beakerbrowser.com) Dat protocol (https://datproject.org/)\nCompatible with beaker >= V0.7.2\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSet up the saver\n*/\nvar BeakerSaver = function(wiki) {\n\tthis.wiki = wiki;\n};\n\nBeakerSaver.prototype.save = function(text,method,callback) {\n\tvar dat = new DatArchive(\"\" + window.location),\n\t\tpathname = (\"\" + window.location.pathname).split(\"#\")[0];\n\tdat.stat(pathname).then(function(value) {\n\t\tif(value.isDirectory()) {\n\t\t\tpathname = pathname + \"/index.html\";\n\t\t}\n\t\tdat.writeFile(pathname,text,\"utf8\").then(function(value) {\n\t\t\tcallback(null);\n\t\t},function(reason) {\n\t\t\tcallback(\"Beaker Saver Write Error: \" + reason);\n\t\t});\n\t},function(reason) {\n\t\tcallback(\"Beaker Saver Stat Error: \" + reason);\n\t});\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nBeakerSaver.prototype.info = {\n\tname: \"beaker\",\n\tpriority: 3000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn !!window.DatArchive && location.protocol===\"dat:\";\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new BeakerSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/download.js": {
"title": "$:/core/modules/savers/download.js",
"text": "/*\\\ntitle: $:/core/modules/savers/download.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via HTML5's download APIs\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar DownloadSaver = function(wiki) {\n};\n\nDownloadSaver.prototype.save = function(text,method,callback,options) {\n\toptions = options || {};\n\t// Get the current filename\n\tvar filename = options.variables.filename;\n\tif(!filename) {\n\t\tvar p = document.location.pathname.lastIndexOf(\"/\");\n\t\tif(p !== -1) {\n\t\t\t// We decode the pathname because document.location is URL encoded by the browser\n\t\t\tfilename = decodeURIComponent(document.location.pathname.substr(p+1));\n\t\t}\n\t}\n\tif(!filename) {\n\t\tfilename = \"tiddlywiki.html\";\n\t}\n\t// Set up the link\n\tvar link = document.createElement(\"a\");\n\tif(Blob !== undefined) {\n\t\tvar blob = new Blob([text], {type: \"text/html\"});\n\t\tlink.setAttribute(\"href\", URL.createObjectURL(blob));\n\t} else {\n\t\tlink.setAttribute(\"href\",\"data:text/html,\" + encodeURIComponent(text));\n\t}\n\tlink.setAttribute(\"download\",filename);\n\tdocument.body.appendChild(link);\n\tlink.click();\n\tdocument.body.removeChild(link);\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nDownloadSaver.prototype.info = {\n\tname: \"download\",\n\tpriority: 100\n};\n\nObject.defineProperty(DownloadSaver.prototype.info, \"capabilities\", {\n\tget: function() {\n\t\tvar capabilities = [\"save\", \"download\"];\n\t\tif(($tw.wiki.getTextReference(\"$:/config/DownloadSaver/AutoSave\") || \"\").toLowerCase() === \"yes\") {\n\t\t\tcapabilities.push(\"autosave\");\n\t\t}\n\t\treturn capabilities;\n\t}\n});\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn document.createElement(\"a\").download !== undefined;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new DownloadSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/fsosaver.js": {
"title": "$:/core/modules/savers/fsosaver.js",
"text": "/*\\\ntitle: $:/core/modules/savers/fsosaver.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via MS FileSystemObject ActiveXObject\n\nNote: Since TiddlyWiki's markup contains the MOTW, the FileSystemObject normally won't be available. \nHowever, if the wiki is loaded as an .HTA file (Windows HTML Applications) then the FSO can be used.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar FSOSaver = function(wiki) {\n};\n\nFSOSaver.prototype.save = function(text,method,callback) {\n\t// Get the pathname of this document\n\tvar pathname = unescape(document.location.pathname);\n\t// Test for a Windows path of the form /x:\\blah...\n\tif(/^\\/[A-Z]\\:\\\\[^\\\\]+/i.test(pathname)) {\t// ie: ^/[a-z]:/[^/]+\n\t\t// Remove the leading slash\n\t\tpathname = pathname.substr(1);\n\t} else if(document.location.hostname !== \"\" && /^\\/\\\\[^\\\\]+\\\\[^\\\\]+/i.test(pathname)) {\t// test for \\\\server\\share\\blah... - ^/[^/]+/[^/]+\n\t\t// Remove the leading slash\n\t\tpathname = pathname.substr(1);\n\t\t// reconstruct UNC path\n\t\tpathname = \"\\\\\\\\\" + document.location.hostname + pathname;\n\t} else {\n\t\treturn false;\n\t}\n\t// Save the file (as UTF-16)\n\tvar fso = new ActiveXObject(\"Scripting.FileSystemObject\");\n\tvar file = fso.OpenTextFile(pathname,2,-1,-1);\n\tfile.Write(text);\n\tfile.Close();\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nFSOSaver.prototype.info = {\n\tname: \"FSOSaver\",\n\tpriority: 120,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\ttry {\n\t\treturn (window.location.protocol === \"file:\") && !!(new ActiveXObject(\"Scripting.FileSystemObject\"));\n\t} catch(e) { return false; }\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new FSOSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/gitea.js": {
"title": "$:/core/modules/savers/gitea.js",
"text": "/*\\\ntitle: $:/core/modules/savers/gitea.js\ntype: application/javascript\nmodule-type: saver\n\nSaves wiki by pushing a commit to the gitea\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar GiteaSaver = function(wiki) {\n\tthis.wiki = wiki;\n};\n\nGiteaSaver.prototype.save = function(text,method,callback) {\n\tvar self = this,\n\t\tusername = this.wiki.getTiddlerText(\"$:/Gitea/Username\"),\n\t\tpassword = $tw.utils.getPassword(\"Gitea\"),\n\t\trepo = this.wiki.getTiddlerText(\"$:/Gitea/Repo\"),\n\t\tpath = this.wiki.getTiddlerText(\"$:/Gitea/Path\",\"\"),\n\t\tfilename = this.wiki.getTiddlerText(\"$:/Gitea/Filename\"),\n\t\tbranch = this.wiki.getTiddlerText(\"$:/Gitea/Branch\") || \"master\",\n\t\tendpoint = this.wiki.getTiddlerText(\"$:/Gitea/ServerURL\") || \"https://gitea\",\n\t\theaders = {\n\t\t\t\"Accept\": \"application/json\",\n\t\t\t\"Content-Type\": \"application/json;charset=UTF-8\",\n\t\t\t\"Authorization\": \"Basic \" + window.btoa(username + \":\" + password)\n\t\t};\n\t// Bail if we don't have everything we need\n\tif(!username || !password || !repo || !path || !filename) {\n\t\treturn false;\n\t}\n\t// Make sure the path start and ends with a slash\n\tif(path.substring(0,1) !== \"/\") {\n\t\tpath = \"/\" + path;\n\t}\n\tif(path.substring(path.length - 1) !== \"/\") {\n\t\tpath = path + \"/\";\n\t}\n\t// Compose the base URI\n\tvar uri = endpoint + \"/repos/\" + repo + \"/contents\" + path;\n\t// Perform a get request to get the details (inc shas) of files in the same path as our file\n\t$tw.utils.httpRequest({\n\t\turl: uri,\n\t\ttype: \"GET\",\n\t\theaders: headers,\n\t\tdata: {\n\t\t\tref: branch\n\t\t},\n\t\tcallback: function(err,getResponseDataJson,xhr) {\n\t\t\tvar getResponseData,sha = \"\";\n\t\t\tif(err && xhr.status !== 404) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tvar use_put = true;\n\t\t\tif(xhr.status !== 404) {\n\t\t\t\tgetResponseData = JSON.parse(getResponseDataJson);\n\t\t\t\t$tw.utils.each(getResponseData,function(details) {\n\t\t\t\t\tif(details.name === filename) {\n\t\t\t\t\t\tsha = details.sha;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif(sha === \"\"){\n\t\t\t\t\tuse_put = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar data = {\n\t\t\t\tmessage: $tw.language.getRawString(\"ControlPanel/Saving/GitService/CommitMessage\"),\n\t\t\t\tcontent: $tw.utils.base64Encode(text),\n\t\t\t\tsha: sha\n\t\t\t};\n\t\t\t$tw.utils.httpRequest({\n\t\t\t\turl: endpoint + \"/repos/\" + repo + \"/branches/\" + branch,\n\t\t\t\ttype: \"GET\",\n\t\t\t\theaders: headers,\n\t\t\t\tcallback: function(err,getResponseDataJson,xhr) {\n\t\t\t\t\tif(xhr.status === 404) {\n\t\t\t\t\t\tcallback(\"Please ensure the branch in the Gitea repo exists\");\n\t\t\t\t\t}else{\n\t\t\t\t\t\tdata[\"branch\"] = branch;\n\t\t\t\t\t\tself.upload(uri + filename, use_put?\"PUT\":\"POST\", headers, data, callback);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\treturn true;\n};\n\nGiteaSaver.prototype.upload = function(uri,method,headers,data,callback) {\n\t$tw.utils.httpRequest({\n\t\turl: uri,\n\t\ttype: method,\n\t\theaders: headers,\n\t\tdata: JSON.stringify(data),\n\t\tcallback: function(err,putResponseDataJson,xhr) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tvar putResponseData = JSON.parse(putResponseDataJson);\n\t\t\tcallback(null);\n\t\t}\n\t});\n};\n\n/*\nInformation about this saver\n*/\nGiteaSaver.prototype.info = {\n\tname: \"Gitea\",\n\tpriority: 2000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new GiteaSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/github.js": {
"title": "$:/core/modules/savers/github.js",
"text": "/*\\\ntitle: $:/core/modules/savers/github.js\ntype: application/javascript\nmodule-type: saver\n\nSaves wiki by pushing a commit to the GitHub v3 REST API\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar GitHubSaver = function(wiki) {\n\tthis.wiki = wiki;\n};\n\nGitHubSaver.prototype.save = function(text,method,callback) {\n\tvar self = this,\n\t\tusername = this.wiki.getTiddlerText(\"$:/GitHub/Username\"),\n\t\tpassword = $tw.utils.getPassword(\"github\"),\n\t\trepo = this.wiki.getTiddlerText(\"$:/GitHub/Repo\"),\n\t\tpath = this.wiki.getTiddlerText(\"$:/GitHub/Path\",\"\"),\n\t\tfilename = this.wiki.getTiddlerText(\"$:/GitHub/Filename\"),\n\t\tbranch = this.wiki.getTiddlerText(\"$:/GitHub/Branch\") || \"master\",\n\t\tendpoint = this.wiki.getTiddlerText(\"$:/GitHub/ServerURL\") || \"https://api.github.com\",\n\t\theaders = {\n\t\t\t\"Accept\": \"application/vnd.github.v3+json\",\n\t\t\t\"Content-Type\": \"application/json;charset=UTF-8\",\n\t\t\t\"Authorization\": \"Basic \" + window.btoa(username + \":\" + password)\n\t\t};\n\t// Bail if we don't have everything we need\n\tif(!username || !password || !repo || !path || !filename) {\n\t\treturn false;\n\t}\n\t// Make sure the path start and ends with a slash\n\tif(path.substring(0,1) !== \"/\") {\n\t\tpath = \"/\" + path;\n\t}\n\tif(path.substring(path.length - 1) !== \"/\") {\n\t\tpath = path + \"/\";\n\t}\n\t// Compose the base URI\n\tvar uri = endpoint + \"/repos/\" + repo + \"/contents\" + path;\n\t// Perform a get request to get the details (inc shas) of files in the same path as our file\n\t$tw.utils.httpRequest({\n\t\turl: uri,\n\t\ttype: \"GET\",\n\t\theaders: headers,\n\t\tdata: {\n\t\t\tref: branch\n\t\t},\n\t\tcallback: function(err,getResponseDataJson,xhr) {\n\t\t\tvar getResponseData,sha = \"\";\n\t\t\tif(err && xhr.status !== 404) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tif(xhr.status !== 404) {\n\t\t\t\tgetResponseData = JSON.parse(getResponseDataJson);\n\t\t\t\t$tw.utils.each(getResponseData,function(details) {\n\t\t\t\t\tif(details.name === filename) {\n\t\t\t\t\t\tsha = details.sha;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\tvar data = {\n\t\t\t\tmessage: $tw.language.getRawString(\"ControlPanel/Saving/GitService/CommitMessage\"),\n\t\t\t\tcontent: $tw.utils.base64Encode(text),\n\t\t\t\tbranch: branch,\n\t\t\t\tsha: sha\n\t\t\t};\n\t\t\t// Perform a PUT request to save the file\n\t\t\t$tw.utils.httpRequest({\n\t\t\t\turl: uri + filename,\n\t\t\t\ttype: \"PUT\",\n\t\t\t\theaders: headers,\n\t\t\t\tdata: JSON.stringify(data),\n\t\t\t\tcallback: function(err,putResponseDataJson,xhr) {\n\t\t\t\t\tif(err) {\n\t\t\t\t\t\treturn callback(err);\n\t\t\t\t\t}\n\t\t\t\t\tvar putResponseData = JSON.parse(putResponseDataJson);\n\t\t\t\t\tcallback(null);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nGitHubSaver.prototype.info = {\n\tname: \"github\",\n\tpriority: 2000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new GitHubSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/gitlab.js": {
"title": "$:/core/modules/savers/gitlab.js",
"text": "/*\\\ntitle: $:/core/modules/savers/gitlab.js\ntype: application/javascript\nmodule-type: saver\n\nSaves wiki by pushing a commit to the GitLab REST API\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: true */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar GitLabSaver = function(wiki) {\n\tthis.wiki = wiki;\n};\n\nGitLabSaver.prototype.save = function(text,method,callback) {\n\t/* See https://docs.gitlab.com/ee/api/repository_files.html */\n\tvar self = this,\n\t\tusername = this.wiki.getTiddlerText(\"$:/GitLab/Username\"),\n\t\tpassword = $tw.utils.getPassword(\"gitlab\"),\n\t\trepo = this.wiki.getTiddlerText(\"$:/GitLab/Repo\"),\n\t\tpath = this.wiki.getTiddlerText(\"$:/GitLab/Path\",\"\"),\n\t\tfilename = this.wiki.getTiddlerText(\"$:/GitLab/Filename\"),\n\t\tbranch = this.wiki.getTiddlerText(\"$:/GitLab/Branch\") || \"master\",\n\t\tendpoint = this.wiki.getTiddlerText(\"$:/GitLab/ServerURL\") || \"https://gitlab.com/api/v4\",\n\t\theaders = {\n\t\t\t\"Content-Type\": \"application/json;charset=UTF-8\",\n\t\t\t\"Private-Token\": password\n\t\t};\n\t// Bail if we don't have everything we need\n\tif(!username || !password || !repo || !path || !filename) {\n\t\treturn false;\n\t}\n\t// Make sure the path start and ends with a slash\n\tif(path.substring(0,1) !== \"/\") {\n\t\tpath = \"/\" + path;\n\t}\n\tif(path.substring(path.length - 1) !== \"/\") {\n\t\tpath = path + \"/\";\n\t}\n\t// Compose the base URI\n\tvar uri = endpoint + \"/projects/\" + encodeURIComponent(repo) + \"/repository/\";\n\t// Perform a get request to get the details (inc shas) of files in the same path as our file\n\t$tw.utils.httpRequest({\n\t\turl: uri + \"tree/?path=\" + encodeURIComponent(path.replace(/^\\/+|\\/$/g, '')) + \"&branch=\" + encodeURIComponent(branch.replace(/^\\/+|\\/$/g, '')),\n\t\ttype: \"GET\",\n\t\theaders: headers,\n\t\tcallback: function(err,getResponseDataJson,xhr) {\n\t\t\tvar getResponseData,sha = \"\";\n\t\t\tif(err && xhr.status !== 404) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tvar requestType = \"POST\";\n\t\t\tif(xhr.status !== 404) {\n\t\t\t\tgetResponseData = JSON.parse(getResponseDataJson);\n\t\t\t\t$tw.utils.each(getResponseData,function(details) {\n\t\t\t\t\tif(details.name === filename) {\n\t\t\t\t\t\trequestType = \"PUT\";\n\t\t\t\t\t\tsha = details.sha;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\tvar data = {\n\t\t\t\tcommit_message: $tw.language.getRawString(\"ControlPanel/Saving/GitService/CommitMessage\"),\n\t\t\t\tcontent: text,\n\t\t\t\tbranch: branch,\n\t\t\t\tsha: sha\n\t\t\t};\n\t\t\t// Perform a request to save the file\n\t\t\t$tw.utils.httpRequest({\n\t\t\t\turl: uri + \"files/\" + encodeURIComponent(path.replace(/^\\/+/, '') + filename),\n\t\t\t\ttype: requestType,\n\t\t\t\theaders: headers,\n\t\t\t\tdata: JSON.stringify(data),\n\t\t\t\tcallback: function(err,putResponseDataJson,xhr) {\n\t\t\t\t\tif(err) {\n\t\t\t\t\t\treturn callback(err);\n\t\t\t\t\t}\n\t\t\t\t\tvar putResponseData = JSON.parse(putResponseDataJson);\n\t\t\t\t\tcallback(null);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nGitLabSaver.prototype.info = {\n\tname: \"gitlab\",\n\tpriority: 2000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new GitLabSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/manualdownload.js": {
"title": "$:/core/modules/savers/manualdownload.js",
"text": "/*\\\ntitle: $:/core/modules/savers/manualdownload.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via HTML5's download APIs\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Title of the tiddler containing the download message\nvar downloadInstructionsTitle = \"$:/language/Modals/Download\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar ManualDownloadSaver = function(wiki) {\n};\n\nManualDownloadSaver.prototype.save = function(text,method,callback) {\n\t$tw.modal.display(downloadInstructionsTitle,{\n\t\tdownloadLink: \"data:text/html,\" + encodeURIComponent(text)\n\t});\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nManualDownloadSaver.prototype.info = {\n\tname: \"manualdownload\",\n\tpriority: 0,\n\tcapabilities: [\"save\", \"download\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new ManualDownloadSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/msdownload.js": {
"title": "$:/core/modules/savers/msdownload.js",
"text": "/*\\\ntitle: $:/core/modules/savers/msdownload.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via window.navigator.msSaveBlob()\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar MsDownloadSaver = function(wiki) {\n};\n\nMsDownloadSaver.prototype.save = function(text,method,callback) {\n\t// Get the current filename\n\tvar filename = \"tiddlywiki.html\",\n\t\tp = document.location.pathname.lastIndexOf(\"/\");\n\tif(p !== -1) {\n\t\tfilename = document.location.pathname.substr(p+1);\n\t}\n\t// Set up the link\n\tvar blob = new Blob([text], {type: \"text/html\"});\n\twindow.navigator.msSaveBlob(blob,filename);\n\t// Callback that we succeeded\n\tcallback(null);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nMsDownloadSaver.prototype.info = {\n\tname: \"msdownload\",\n\tpriority: 110,\n\tcapabilities: [\"save\", \"download\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn !!window.navigator.msSaveBlob;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new MsDownloadSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/put.js": {
"title": "$:/core/modules/savers/put.js",
"text": "/*\\\ntitle: $:/core/modules/savers/put.js\ntype: application/javascript\nmodule-type: saver\n\nSaves wiki by performing a PUT request to the server\n\nWorks with any server which accepts a PUT request\nto the current URL, such as a WebDAV server.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nRetrieve ETag if available\n*/\nvar retrieveETag = function(self) {\n\tvar headers = {\n\t\tAccept: \"*/*;charset=UTF-8\"\n\t};\n\t$tw.utils.httpRequest({\n\t\turl: self.uri(),\n\t\ttype: \"HEAD\",\n\t\theaders: headers,\n\t\tcallback: function(err,data,xhr) {\n\t\t\tif(err) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar etag = xhr.getResponseHeader(\"ETag\");\n\t\t\tif(!etag) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tself.etag = etag.replace(/^W\\//,\"\");\n\t\t}\n\t});\n};\n\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar PutSaver = function(wiki) {\n\tthis.wiki = wiki;\n\tvar self = this;\n\tvar uri = this.uri();\n\t// Async server probe. Until probe finishes, save will fail fast\n\t// See also https://github.com/Jermolene/TiddlyWiki5/issues/2276\n\t$tw.utils.httpRequest({\n\t\turl: uri,\n\t\ttype: \"OPTIONS\",\n\t\tcallback: function(err,data,xhr) {\n\t\t\t// Check DAV header http://www.webdav.org/specs/rfc2518.html#rfc.section.9.1\n\t\t\tif(!err) {\n\t\t\t\tself.serverAcceptsPuts = xhr.status === 200 && !!xhr.getResponseHeader(\"dav\");\n\t\t\t}\n\t\t}\n\t});\n\tretrieveETag(this);\n};\n\nPutSaver.prototype.uri = function() {\n\treturn document.location.toString().split(\"#\")[0];\n};\n\n// TODO: in case of edit conflict\n// Prompt: Do you want to save over this? Y/N\n// Merging would be ideal, and may be possible using future generic merge flow\nPutSaver.prototype.save = function(text,method,callback) {\n\tif(!this.serverAcceptsPuts) {\n\t\treturn false;\n\t}\n\tvar self = this;\n\tvar headers = {\n\t\t\"Content-Type\": \"text/html;charset=UTF-8\"\n\t};\n\tif(this.etag) {\n\t\theaders[\"If-Match\"] = this.etag;\n\t}\n\t$tw.utils.httpRequest({\n\t\turl: this.uri(),\n\t\ttype: \"PUT\",\n\t\theaders: headers,\n\t\tdata: text,\n\t\tcallback: function(err,data,xhr) {\n\t\t\tif(err) {\n\t\t\t\t// response is textual: \"XMLHttpRequest error code: 412\"\n\t\t\t\tvar status = Number(err.substring(err.indexOf(':') + 2, err.length))\n\t\t\t\tif(status === 412) { // edit conflict\n\t\t\t\t\tvar message = $tw.language.getString(\"Error/EditConflict\");\n\t\t\t\t\tcallback(message);\n\t\t\t\t} else {\n\t\t\t\t\tcallback(err); // fail\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tself.etag = xhr.getResponseHeader(\"ETag\");\n\t\t\t\tif(self.etag == null) {\n\t\t\t\t\tretrieveETag(self);\n\t\t\t\t}\n\t\t\t\tcallback(null); // success\n\t\t\t}\n\t\t}\n\t});\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nPutSaver.prototype.info = {\n\tname: \"put\",\n\tpriority: 2000,\n\tcapabilities: [\"save\",\"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn /^https?:/.test(location.protocol);\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new PutSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/tiddlyfox.js": {
"title": "$:/core/modules/savers/tiddlyfox.js",
"text": "/*\\\ntitle: $:/core/modules/savers/tiddlyfox.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via the TiddlyFox file extension\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false, netscape: false, Components: false */\n\"use strict\";\n\nvar TiddlyFoxSaver = function(wiki) {\n};\n\nTiddlyFoxSaver.prototype.save = function(text,method,callback) {\n\tvar messageBox = document.getElementById(\"tiddlyfox-message-box\");\n\tif(messageBox) {\n\t\t// Get the pathname of this document\n\t\tvar pathname = document.location.toString().split(\"#\")[0];\n\t\t// Replace file://localhost/ with file:///\n\t\tif(pathname.indexOf(\"file://localhost/\") === 0) {\n\t\t\tpathname = \"file://\" + pathname.substr(16);\n\t\t}\n\t\t// Windows path file:///x:/blah/blah --> x:\\blah\\blah\n\t\tif(/^file\\:\\/\\/\\/[A-Z]\\:\\//i.test(pathname)) {\n\t\t\t// Remove the leading slash and convert slashes to backslashes\n\t\t\tpathname = pathname.substr(8).replace(/\\//g,\"\\\\\");\n\t\t// Firefox Windows network path file://///server/share/blah/blah --> //server/share/blah/blah\n\t\t} else if(pathname.indexOf(\"file://///\") === 0) {\n\t\t\tpathname = \"\\\\\\\\\" + unescape(pathname.substr(10)).replace(/\\//g,\"\\\\\");\n\t\t// Mac/Unix local path file:///path/path --> /path/path\n\t\t} else if(pathname.indexOf(\"file:///\") === 0) {\n\t\t\tpathname = unescape(pathname.substr(7));\n\t\t// Mac/Unix local path file:/path/path --> /path/path\n\t\t} else if(pathname.indexOf(\"file:/\") === 0) {\n\t\t\tpathname = unescape(pathname.substr(5));\n\t\t// Otherwise Windows networth path file://server/share/path/path --> \\\\server\\share\\path\\path\n\t\t} else {\n\t\t\tpathname = \"\\\\\\\\\" + unescape(pathname.substr(7)).replace(new RegExp(\"/\",\"g\"),\"\\\\\");\n\t\t}\n\t\t// Create the message element and put it in the message box\n\t\tvar message = document.createElement(\"div\");\n\t\tmessage.setAttribute(\"data-tiddlyfox-path\",decodeURIComponent(pathname));\n\t\tmessage.setAttribute(\"data-tiddlyfox-content\",text);\n\t\tmessageBox.appendChild(message);\n\t\t// Add an event handler for when the file has been saved\n\t\tmessage.addEventListener(\"tiddlyfox-have-saved-file\",function(event) {\n\t\t\tcallback(null);\n\t\t}, false);\n\t\t// Create and dispatch the custom event to the extension\n\t\tvar event = document.createEvent(\"Events\");\n\t\tevent.initEvent(\"tiddlyfox-save-file\",true,false);\n\t\tmessage.dispatchEvent(event);\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n};\n\n/*\nInformation about this saver\n*/\nTiddlyFoxSaver.prototype.info = {\n\tname: \"tiddlyfox\",\n\tpriority: 1500,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new TiddlyFoxSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/tiddlyie.js": {
"title": "$:/core/modules/savers/tiddlyie.js",
"text": "/*\\\ntitle: $:/core/modules/savers/tiddlyie.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via Internet Explorer BHO extenion (TiddlyIE)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar TiddlyIESaver = function(wiki) {\n};\n\nTiddlyIESaver.prototype.save = function(text,method,callback) {\n\t// Check existence of TiddlyIE BHO extension (note: only works after document is complete)\n\tif(typeof(window.TiddlyIE) != \"undefined\") {\n\t\t// Get the pathname of this document\n\t\tvar pathname = unescape(document.location.pathname);\n\t\t// Test for a Windows path of the form /x:/blah...\n\t\tif(/^\\/[A-Z]\\:\\/[^\\/]+/i.test(pathname)) {\t// ie: ^/[a-z]:/[^/]+ (is this better?: ^/[a-z]:/[^/]+(/[^/]+)*\\.[^/]+ )\n\t\t\t// Remove the leading slash\n\t\t\tpathname = pathname.substr(1);\n\t\t\t// Convert slashes to backslashes\n\t\t\tpathname = pathname.replace(/\\//g,\"\\\\\");\n\t\t} else if(document.hostname !== \"\" && /^\\/[^\\/]+\\/[^\\/]+/i.test(pathname)) {\t// test for \\\\server\\share\\blah... - ^/[^/]+/[^/]+\n\t\t\t// Convert slashes to backslashes\n\t\t\tpathname = pathname.replace(/\\//g,\"\\\\\");\n\t\t\t// reconstruct UNC path\n\t\t\tpathname = \"\\\\\\\\\" + document.location.hostname + pathname;\n\t\t} else return false;\n\t\t// Prompt the user to save the file\n\t\twindow.TiddlyIE.save(pathname, text);\n\t\t// Callback that we succeeded\n\t\tcallback(null);\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n};\n\n/*\nInformation about this saver\n*/\nTiddlyIESaver.prototype.info = {\n\tname: \"tiddlyiesaver\",\n\tpriority: 1500,\n\tcapabilities: [\"save\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn (window.location.protocol === \"file:\");\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new TiddlyIESaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/twedit.js": {
"title": "$:/core/modules/savers/twedit.js",
"text": "/*\\\ntitle: $:/core/modules/savers/twedit.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via the TWEdit iOS app\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false, netscape: false, Components: false */\n\"use strict\";\n\nvar TWEditSaver = function(wiki) {\n};\n\nTWEditSaver.prototype.save = function(text,method,callback) {\n\t// Bail if we're not running under TWEdit\n\tif(typeof DeviceInfo !== \"object\") {\n\t\treturn false;\n\t}\n\t// Get the pathname of this document\n\tvar pathname = decodeURIComponent(document.location.pathname);\n\t// Strip any query or location part\n\tvar p = pathname.indexOf(\"?\");\n\tif(p !== -1) {\n\t\tpathname = pathname.substr(0,p);\n\t}\n\tp = pathname.indexOf(\"#\");\n\tif(p !== -1) {\n\t\tpathname = pathname.substr(0,p);\n\t}\n\t// Remove the leading \"/Documents\" from path\n\tvar prefix = \"/Documents\";\n\tif(pathname.indexOf(prefix) === 0) {\n\t\tpathname = pathname.substr(prefix.length);\n\t}\n\t// Error handler\n\tvar errorHandler = function(event) {\n\t\t// Error\n\t\tcallback($tw.language.getString(\"Error/SavingToTWEdit\") + \": \" + event.target.error.code);\n\t};\n\t// Get the file system\n\twindow.requestFileSystem(LocalFileSystem.PERSISTENT,0,function(fileSystem) {\n\t\t// Now we've got the filesystem, get the fileEntry\n\t\tfileSystem.root.getFile(pathname, {create: true}, function(fileEntry) {\n\t\t\t// Now we've got the fileEntry, create the writer\n\t\t\tfileEntry.createWriter(function(writer) {\n\t\t\t\twriter.onerror = errorHandler;\n\t\t\t\twriter.onwrite = function() {\n\t\t\t\t\tcallback(null);\n\t\t\t\t};\n\t\t\t\twriter.position = 0;\n\t\t\t\twriter.write(text);\n\t\t\t},errorHandler);\n\t\t}, errorHandler);\n\t}, errorHandler);\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nTWEditSaver.prototype.info = {\n\tname: \"twedit\",\n\tpriority: 1600,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new TWEditSaver(wiki);\n};\n\n/////////////////////////// Hack\n// HACK: This ensures that TWEdit recognises us as a TiddlyWiki document\nif($tw.browser) {\n\twindow.version = {title: \"TiddlyWiki\"};\n}\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/savers/upload.js": {
"title": "$:/core/modules/savers/upload.js",
"text": "/*\\\ntitle: $:/core/modules/savers/upload.js\ntype: application/javascript\nmodule-type: saver\n\nHandles saving changes via upload to a server.\n\nDesigned to be compatible with BidiX's UploadPlugin at http://tiddlywiki.bidix.info/#UploadPlugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSelect the appropriate saver module and set it up\n*/\nvar UploadSaver = function(wiki) {\n\tthis.wiki = wiki;\n};\n\nUploadSaver.prototype.save = function(text,method,callback) {\n\t// Get the various parameters we need\n\tvar backupDir = this.wiki.getTextReference(\"$:/UploadBackupDir\") || \".\",\n\t\tusername = this.wiki.getTextReference(\"$:/UploadName\"),\n\t\tpassword = $tw.utils.getPassword(\"upload\"),\n\t\tuploadDir = this.wiki.getTextReference(\"$:/UploadDir\") || \".\",\n\t\tuploadFilename = this.wiki.getTextReference(\"$:/UploadFilename\") || \"index.html\",\n\t\turl = this.wiki.getTextReference(\"$:/UploadURL\");\n\t// Bail out if we don't have the bits we need\n\tif(!username || username.toString().trim() === \"\" || !password || password.toString().trim() === \"\") {\n\t\treturn false;\n\t}\n\t// Construct the url if not provided\n\tif(!url) {\n\t\turl = \"http://\" + username + \".tiddlyspot.com/store.cgi\";\n\t}\n\t// Assemble the header\n\tvar boundary = \"---------------------------\" + \"AaB03x\";\t\n\tvar uploadFormName = \"UploadPlugin\";\n\tvar head = [];\n\thead.push(\"--\" + boundary + \"\\r\\nContent-disposition: form-data; name=\\\"UploadPlugin\\\"\\r\\n\");\n\thead.push(\"backupDir=\" + backupDir + \";user=\" + username + \";password=\" + password + \";uploaddir=\" + uploadDir + \";;\"); \n\thead.push(\"\\r\\n\" + \"--\" + boundary);\n\thead.push(\"Content-disposition: form-data; name=\\\"userfile\\\"; filename=\\\"\" + uploadFilename + \"\\\"\");\n\thead.push(\"Content-Type: text/html;charset=UTF-8\");\n\thead.push(\"Content-Length: \" + text.length + \"\\r\\n\");\n\thead.push(\"\");\n\t// Assemble the tail and the data itself\n\tvar tail = \"\\r\\n--\" + boundary + \"--\\r\\n\",\n\t\tdata = head.join(\"\\r\\n\") + text + tail;\n\t// Do the HTTP post\n\tvar http = new XMLHttpRequest();\n\thttp.open(\"POST\",url,true,username,password);\n\thttp.setRequestHeader(\"Content-Type\",\"multipart/form-data; charset=UTF-8; boundary=\" + boundary);\n\thttp.onreadystatechange = function() {\n\t\tif(http.readyState == 4 && http.status == 200) {\n\t\t\tif(http.responseText.substr(0,4) === \"0 - \") {\n\t\t\t\tcallback(null);\n\t\t\t} else {\n\t\t\t\tcallback(http.responseText);\n\t\t\t}\n\t\t}\n\t};\n\ttry {\n\t\thttp.send(data);\n\t} catch(ex) {\n\t\treturn callback($tw.language.getString(\"Error/Caption\") + \":\" + ex);\n\t}\n\t$tw.notifier.display(\"$:/language/Notifications/Save/Starting\");\n\treturn true;\n};\n\n/*\nInformation about this saver\n*/\nUploadSaver.prototype.info = {\n\tname: \"upload\",\n\tpriority: 2000,\n\tcapabilities: [\"save\", \"autosave\"]\n};\n\n/*\nStatic method that returns true if this saver is capable of working\n*/\nexports.canSave = function(wiki) {\n\treturn true;\n};\n\n/*\nCreate an instance of this saver\n*/\nexports.create = function(wiki) {\n\treturn new UploadSaver(wiki);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "saver"
},
"$:/core/modules/server/authenticators/basic.js": {
"title": "$:/core/modules/server/authenticators/basic.js",
"text": "/*\\\ntitle: $:/core/modules/server/authenticators/basic.js\ntype: application/javascript\nmodule-type: authenticator\n\nAuthenticator for WWW basic authentication\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nif($tw.node) {\n\tvar util = require(\"util\"),\n\t\tfs = require(\"fs\"),\n\t\turl = require(\"url\"),\n\t\tpath = require(\"path\");\n}\n\nfunction BasicAuthenticator(server) {\n\tthis.server = server;\n\tthis.credentialsData = [];\n}\n\n/*\nReturns true if the authenticator is active, false if it is inactive, or a string if there is an error\n*/\nBasicAuthenticator.prototype.init = function() {\n\t// Read the credentials data\n\tthis.credentialsFilepath = this.server.get(\"credentials\");\n\tif(this.credentialsFilepath) {\n\t\tvar resolveCredentialsFilepath = path.resolve($tw.boot.wikiPath,this.credentialsFilepath);\n\t\tif(fs.existsSync(resolveCredentialsFilepath) && !fs.statSync(resolveCredentialsFilepath).isDirectory()) {\n\t\t\tvar credentialsText = fs.readFileSync(resolveCredentialsFilepath,\"utf8\"),\n\t\t\t\tcredentialsData = $tw.utils.parseCsvStringWithHeader(credentialsText);\n\t\t\tif(typeof credentialsData === \"string\") {\n\t\t\t\treturn \"Error: \" + credentialsData + \" reading credentials from '\" + resolveCredentialsFilepath + \"'\";\n\t\t\t} else {\n\t\t\t\tthis.credentialsData = credentialsData;\n\t\t\t}\n\t\t} else {\n\t\t\treturn \"Error: Unable to load user credentials from '\" + resolveCredentialsFilepath + \"'\";\n\t\t}\n\t}\n\t// Add the hardcoded username and password if specified\n\tif(this.server.get(\"username\") && this.server.get(\"password\")) {\n\t\tthis.credentialsData = this.credentialsData || [];\n\t\tthis.credentialsData.push({\n\t\t\tusername: this.server.get(\"username\"),\n\t\t\tpassword: this.server.get(\"password\")\n\t\t});\n\t}\n\treturn this.credentialsData.length > 0;\n};\n\n/*\nReturns true if the request is authenticated and assigns the \"authenticatedUsername\" state variable.\nReturns false if the request couldn't be authenticated having sent an appropriate response to the browser\n*/\nBasicAuthenticator.prototype.authenticateRequest = function(request,response,state) {\n\t// Extract the incoming username and password from the request\n\tvar header = request.headers.authorization || \"\";\n\tif(!header && state.allowAnon) {\n\t\t// If there's no header and anonymous access is allowed then we don't set authenticatedUsername\n\t\treturn true;\n\t}\n\tvar token = header.split(/\\s+/).pop() || \"\",\n\t\tauth = $tw.utils.base64Decode(token),\n\t\tparts = auth.split(/:/),\n\t\tincomingUsername = parts[0],\n\t\tincomingPassword = parts[1];\n\t// Check that at least one of the credentials matches\n\tvar matchingCredentials = this.credentialsData.find(function(credential) {\n\t\treturn credential.username === incomingUsername && credential.password === incomingPassword;\n\t});\n\tif(matchingCredentials) {\n\t\t// If so, add the authenticated username to the request state\n\t\tstate.authenticatedUsername = incomingUsername;\n\t\treturn true;\n\t} else {\n\t\t// If not, return an authentication challenge\n\t\tresponse.writeHead(401,\"Authentication required\",{\n\t\t\t\"WWW-Authenticate\": 'Basic realm=\"Please provide your username and password to login to ' + state.server.servername + '\"'\n\t\t});\n\t\tresponse.end();\n\t\treturn false;\n\t}\n};\n\nexports.AuthenticatorClass = BasicAuthenticator;\n\n})();\n",
"type": "application/javascript",
"module-type": "authenticator"
},
"$:/core/modules/server/authenticators/header.js": {
"title": "$:/core/modules/server/authenticators/header.js",
"text": "/*\\\ntitle: $:/core/modules/server/authenticators/header.js\ntype: application/javascript\nmodule-type: authenticator\n\nAuthenticator for trusted header authentication\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction HeaderAuthenticator(server) {\n\tthis.server = server;\n\tthis.header = server.get(\"authenticated-user-header\");\n}\n\n/*\nReturns true if the authenticator is active, false if it is inactive, or a string if there is an error\n*/\nHeaderAuthenticator.prototype.init = function() {\n\treturn !!this.header;\n};\n\n/*\nReturns true if the request is authenticated and assigns the \"authenticatedUsername\" state variable.\nReturns false if the request couldn't be authenticated having sent an appropriate response to the browser\n*/\nHeaderAuthenticator.prototype.authenticateRequest = function(request,response,state) {\n\t// Otherwise, authenticate as the username in the specified header\n\tvar username = request.headers[this.header];\n\tif(!username && !state.allowAnon) {\n\t\tresponse.writeHead(401,\"Authorization header required to login to '\" + state.server.servername + \"'\");\n\t\tresponse.end();\n\t\treturn false;\n\t} else {\n\t\t// authenticatedUsername will be undefined for anonymous users\n\t\tstate.authenticatedUsername = username;\n\t\treturn true;\n\t}\n};\n\nexports.AuthenticatorClass = HeaderAuthenticator;\n\n})();\n",
"type": "application/javascript",
"module-type": "authenticator"
},
"$:/core/modules/server/routes/delete-tiddler.js": {
"title": "$:/core/modules/server/routes/delete-tiddler.js",
"text": "/*\\\ntitle: $:/core/modules/server/routes/delete-tiddler.js\ntype: application/javascript\nmodule-type: route\n\nDELETE /recipes/default/tiddlers/:title\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"DELETE\";\n\nexports.path = /^\\/bags\\/default\\/tiddlers\\/(.+)$/;\n\nexports.handler = function(request,response,state) {\n\tvar title = decodeURIComponent(state.params[0]);\n\tstate.wiki.deleteTiddler(title);\n\tresponse.writeHead(204, \"OK\", {\n\t\t\"Content-Type\": \"text/plain\"\n\t});\n\tresponse.end();\n};\n\n}());\n",
"type": "application/javascript",
"module-type": "route"
},
"$:/core/modules/server/routes/get-favicon.js": {
"title": "$:/core/modules/server/routes/get-favicon.js",
"text": "/*\\\ntitle: $:/core/modules/server/routes/get-favicon.js\ntype: application/javascript\nmodule-type: route\n\nGET /favicon.ico\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/favicon.ico$/;\n\nexports.handler = function(request,response,state) {\n\tresponse.writeHead(200, {\"Content-Type\": \"image/x-icon\"});\n\tvar buffer = state.wiki.getTiddlerText(\"$:/favicon.ico\",\"\");\n\tresponse.end(buffer,\"base64\");\n};\n\n}());\n",
"type": "application/javascript",
"module-type": "route"
},
"$:/core/modules/server/routes/get-file.js": {
"title": "$:/core/modules/server/routes/get-file.js",
"text": "/*\\\ntitle: $:/core/modules/server/routes/get-file.js\ntype: application/javascript\nmodule-type: route\n\nGET /files/:filepath\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/files\\/(.+)$/;\n\nexports.handler = function(request,response,state) {\n\tvar path = require(\"path\"),\n\t\tfs = require(\"fs\"),\n\t\tutil = require(\"util\"),\n\t\tsuppliedFilename = decodeURIComponent(state.params[0]),\n\t\tfilename = path.resolve($tw.boot.wikiPath,\"files\",suppliedFilename),\n\t\textension = path.extname(filename);\n\tfs.readFile(filename,function(err,content) {\n\t\tvar status,content,type = \"text/plain\";\n\t\tif(err) {\n\t\t\tconsole.log(\"Error accessing file \" + filename + \": \" + err.toString());\n\t\t\tstatus = 404;\n\t\t\tcontent = \"File '\" + suppliedFilename + \"' not found\";\n\t\t} else {\n\t\t\tstatus = 200;\n\t\t\tcontent = content;\n\t\t\ttype = ($tw.config.fileExtensionInfo[extension] ? $tw.config.fileExtensionInfo[extension].type : \"application/octet-stream\");\n\t\t}\n\t\tresponse.writeHead(status,{\n\t\t\t\"Content-Type\": type\n\t\t});\n\t\tresponse.end(content);\n\t});\n};\n\n}());\n",
"type": "application/javascript",
"module-type": "route"
},
"$:/core/modules/server/routes/get-index.js": {
"title": "$:/core/modules/server/routes/get-index.js",
"text": "/*\\\ntitle: $:/core/modules/server/routes/get-index.js\ntype: application/javascript\nmodule-type: route\n\nGET /\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar zlib = require(\"zlib\");\n\nexports.method = \"GET\";\n\nexports.path = /^\\/$/;\n\nexports.handler = function(request,response,state) {\n\tvar acceptEncoding = request.headers[\"accept-encoding\"];\n\tif(!acceptEncoding) {\n\t\tacceptEncoding = \"\";\n\t}\n\tvar text = state.wiki.renderTiddler(state.server.get(\"root-render-type\"),state.server.get(\"root-tiddler\")),\n\t\tresponseHeaders = {\n\t\t\"Content-Type\": state.server.get(\"root-serve-type\")\n\t};\n\t/*\n\tIf the gzip=yes flag for `listen` is set, check if the user agent permits\n\tcompression. If so, compress our response. Note that we use the synchronous\n\tfunctions from zlib to stay in the imperative style. The current `Server`\n\tdoesn't depend on this, and we may just as well use the async versions.\n\t*/\n\tif(state.server.enableGzip) {\n\t\tif (/\\bdeflate\\b/.test(acceptEncoding)) {\n\t\t\tresponseHeaders[\"Content-Encoding\"] = \"deflate\";\n\t\t\ttext = zlib.deflateSync(text);\n\t\t} else if (/\\bgzip\\b/.test(acceptEncoding)) {\n\t\t\tresponseHeaders[\"Content-Encoding\"] = \"gzip\";\n\t\t\ttext = zlib.gzipSync(text);\n\t\t}\n\t}\n\tresponse.writeHead(200,responseHeaders);\n\tresponse.end(text);\n};\n\n}());\n",
"type": "application/javascript",
"module-type": "route"
},
"$:/core/modules/server/routes/get-login-basic.js": {
"title": "$:/core/modules/server/routes/get-login-basic.js",
"text": "/*\\\ntitle: $:/core/modules/server/routes/get-login-basic.js\ntype: application/javascript\nmodule-type: route\n\nGET /login-basic -- force a Basic Authentication challenge\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/login-basic$/;\n\nexports.handler = function(request,response,state) {\n\tif(!state.authenticatedUsername) {\n\t\t// Challenge if there's no username\n\t\tresponse.writeHead(401,{\n\t\t\t\"WWW-Authenticate\": 'Basic realm=\"Please provide your username and password to login to ' + state.server.servername + '\"'\n\t\t});\n\t\tresponse.end();\t\t\n\t} else {\n\t\t// Redirect to the root wiki if login worked\n\t\tresponse.writeHead(302,{\n\t\t\tLocation: \"/\"\n\t\t});\n\t\tresponse.end();\n\t}\n};\n\n}());\n",
"type": "application/javascript",
"module-type": "route"
},
"$:/core/modules/server/routes/get-status.js": {
"title": "$:/core/modules/server/routes/get-status.js",
"text": "/*\\\ntitle: $:/core/modules/server/routes/get-status.js\ntype: application/javascript\nmodule-type: route\n\nGET /status\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/status$/;\n\nexports.handler = function(request,response,state) {\n\tresponse.writeHead(200, {\"Content-Type\": \"application/json\"});\n\tvar text = JSON.stringify({\n\t\tusername: state.authenticatedUsername || state.server.get(\"anon-username\") || \"\",\n\t\tanonymous: !state.authenticatedUsername,\n\t\tread_only: !state.server.isAuthorized(\"writers\",state.authenticatedUsername),\n\t\tspace: {\n\t\t\trecipe: \"default\"\n\t\t},\n\t\ttiddlywiki_version: $tw.version\n\t});\n\tresponse.end(text,\"utf8\");\n};\n\n}());\n",
"type": "application/javascript",
"module-type": "route"
},
"$:/core/modules/server/routes/get-tiddler-html.js": {
"title": "$:/core/modules/server/routes/get-tiddler-html.js",
"text": "/*\\\ntitle: $:/core/modules/server/routes/get-tiddler-html.js\ntype: application/javascript\nmodule-type: route\n\nGET /:title\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/([^\\/]+)$/;\n\nexports.handler = function(request,response,state) {\n\tvar title = decodeURIComponent(state.params[0]),\n\t\ttiddler = state.wiki.getTiddler(title);\n\tif(tiddler) {\n\t\tvar renderType = tiddler.getFieldString(\"_render_type\"),\n\t\t\trenderTemplate = tiddler.getFieldString(\"_render_template\");\n\t\t// Tiddler fields '_render_type' and '_render_template' overwrite\n\t\t// system wide settings for render type and template\n\t\tif(state.wiki.isSystemTiddler(title)) {\n\t\t\trenderType = renderType || state.server.get(\"system-tiddler-render-type\");\n\t\t\trenderTemplate = renderTemplate || state.server.get(\"system-tiddler-render-template\");\n\t\t} else {\n\t\t\trenderType = renderType || state.server.get(\"tiddler-render-type\");\n\t\t\trenderTemplate = renderTemplate || state.server.get(\"tiddler-render-template\");\n\t\t}\n\t\tvar text = state.wiki.renderTiddler(renderType,renderTemplate,{parseAsInline: true, variables: {currentTiddler: title}});\n\t\t// Naughty not to set a content-type, but it's the easiest way to ensure the browser will see HTML pages as HTML, and accept plain text tiddlers as CSS or JS\n\t\tresponse.writeHead(200);\n\t\tresponse.end(text,\"utf8\");\n\t} else {\n\t\tresponse.writeHead(404);\n\t\tresponse.end();\n\t}\n};\n\n}());\n",
"type": "application/javascript",
"module-type": "route"
},
"$:/core/modules/server/routes/get-tiddler.js": {
"title": "$:/core/modules/server/routes/get-tiddler.js",
"text": "/*\\\ntitle: $:/core/modules/server/routes/get-tiddler.js\ntype: application/javascript\nmodule-type: route\n\nGET /recipes/default/tiddlers/:title\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/recipes\\/default\\/tiddlers\\/(.+)$/;\n\nexports.handler = function(request,response,state) {\n\tvar title = decodeURIComponent(state.params[0]),\n\t\ttiddler = state.wiki.getTiddler(title),\n\t\ttiddlerFields = {},\n\t\tknownFields = [\n\t\t\t\"bag\", \"created\", \"creator\", \"modified\", \"modifier\", \"permissions\", \"recipe\", \"revision\", \"tags\", \"text\", \"title\", \"type\", \"uri\"\n\t\t];\n\tif(tiddler) {\n\t\t$tw.utils.each(tiddler.fields,function(field,name) {\n\t\t\tvar value = tiddler.getFieldString(name);\n\t\t\tif(knownFields.indexOf(name) !== -1) {\n\t\t\t\ttiddlerFields[name] = value;\n\t\t\t} else {\n\t\t\t\ttiddlerFields.fields = tiddlerFields.fields || {};\n\t\t\t\ttiddlerFields.fields[name] = value;\n\t\t\t}\n\t\t});\n\t\ttiddlerFields.revision = state.wiki.getChangeCount(title);\n\t\ttiddlerFields.bag = \"default\";\n\t\ttiddlerFields.type = tiddlerFields.type || \"text/vnd.tiddlywiki\";\n\t\tresponse.writeHead(200, {\"Content-Type\": \"application/json\"});\n\t\tresponse.end(JSON.stringify(tiddlerFields),\"utf8\");\n\t} else {\n\t\tresponse.writeHead(404);\n\t\tresponse.end();\n\t}\n};\n\n}());\n",
"type": "application/javascript",
"module-type": "route"
},
"$:/core/modules/server/routes/get-tiddlers-json.js": {
"title": "$:/core/modules/server/routes/get-tiddlers-json.js",
"text": "/*\\\ntitle: $:/core/modules/server/routes/get-tiddlers-json.js\ntype: application/javascript\nmodule-type: route\n\nGET /recipes/default/tiddlers/tiddlers.json?filter=<filter>\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar DEFAULT_FILTER = \"[all[tiddlers]!is[system]sort[title]]\";\n\nexports.method = \"GET\";\n\nexports.path = /^\\/recipes\\/default\\/tiddlers.json$/;\n\nexports.handler = function(request,response,state) {\n\tvar filter = state.queryParameters.filter || DEFAULT_FILTER;\n\tif($tw.wiki.getTiddlerText(\"$:/config/Server/AllowAllExternalFilters\") !== \"yes\") {\n\t\tif($tw.wiki.getTiddlerText(\"$:/config/Server/ExternalFilters/\" + filter) !== \"yes\") {\n\t\t\tconsole.log(\"Blocked attempt to GET /recipes/default/tiddlers/tiddlers.json with filter: \" + filter);\n\t\t\tresponse.writeHead(403);\n\t\t\tresponse.end();\n\t\t\treturn;\n\t\t}\n\t}\n\tvar excludeFields = (state.queryParameters.exclude || \"text\").split(\",\"),\n\t\ttitles = state.wiki.filterTiddlers(filter);\n\tresponse.writeHead(200, {\"Content-Type\": \"application/json\"});\n\tvar tiddlers = [];\n\t$tw.utils.each(titles,function(title) {\n\t\tvar tiddler = state.wiki.getTiddler(title);\n\t\tif(tiddler) {\n\t\t\tvar tiddlerFields = tiddler.getFieldStrings({exclude: excludeFields});\n\t\t\ttiddlerFields.revision = state.wiki.getChangeCount(title);\n\t\t\ttiddlerFields.type = tiddlerFields.type || \"text/vnd.tiddlywiki\";\n\t\t\ttiddlers.push(tiddlerFields);\n\t\t}\n\t});\n\tvar text = JSON.stringify(tiddlers);\n\tresponse.end(text,\"utf8\");\n};\n\n}());\n",
"type": "application/javascript",
"module-type": "route"
},
"$:/core/modules/server/routes/put-tiddler.js": {
"title": "$:/core/modules/server/routes/put-tiddler.js",
"text": "/*\\\ntitle: $:/core/modules/server/routes/put-tiddler.js\ntype: application/javascript\nmodule-type: route\n\nPUT /recipes/default/tiddlers/:title\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.method = \"PUT\";\n\nexports.path = /^\\/recipes\\/default\\/tiddlers\\/(.+)$/;\n\nexports.handler = function(request,response,state) {\n\tvar title = decodeURIComponent(state.params[0]),\n\tfields = JSON.parse(state.data);\n\t// Pull up any subfields in the `fields` object\n\tif(fields.fields) {\n\t\t$tw.utils.each(fields.fields,function(field,name) {\n\t\t\tfields[name] = field;\n\t\t});\n\t\tdelete fields.fields;\n\t}\n\t// Remove any revision field\n\tif(fields.revision) {\n\t\tdelete fields.revision;\n\t}\n\tstate.wiki.addTiddler(new $tw.Tiddler(state.wiki.getCreationFields(),fields,{title: title},state.wiki.getModificationFields()));\n\tvar changeCount = state.wiki.getChangeCount(title).toString();\n\tresponse.writeHead(204, \"OK\",{\n\t\tEtag: \"\\\"default/\" + encodeURIComponent(title) + \"/\" + changeCount + \":\\\"\",\n\t\t\"Content-Type\": \"text/plain\"\n\t});\n\tresponse.end();\n};\n\n}());\n",
"type": "application/javascript",
"module-type": "route"
},
"$:/core/modules/server/server.js": {
"title": "$:/core/modules/server/server.js",
"text": "/*\\\ntitle: $:/core/modules/server/server.js\ntype: application/javascript\nmodule-type: library\n\nServe tiddlers over http\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nif($tw.node) {\n\tvar util = require(\"util\"),\n\t\tfs = require(\"fs\"),\n\t\turl = require(\"url\"),\n\t\tpath = require(\"path\"),\n\t\tquerystring = require(\"querystring\");\n}\n\n/*\nA simple HTTP server with regexp-based routes\noptions: variables - optional hashmap of variables to set (a misnomer - they are really constant parameters)\n\t\t routes - optional array of routes to use\n\t\t wiki - reference to wiki object\n*/\nfunction Server(options) {\n\tvar self = this;\n\tthis.routes = options.routes || [];\n\tthis.authenticators = options.authenticators || [];\n\tthis.wiki = options.wiki;\n\tthis.servername = $tw.utils.transliterateToSafeASCII(this.wiki.getTiddlerText(\"$:/SiteTitle\") || \"TiddlyWiki5\");\n\t// Initialise the variables\n\tthis.variables = $tw.utils.extend({},this.defaultVariables);\n\tif(options.variables) {\n\t\tfor(var variable in options.variables) {\n\t\t\tif(options.variables[variable]) {\n\t\t\t\tthis.variables[variable] = options.variables[variable];\n\t\t\t}\n\t\t}\t\t\n\t}\n\t$tw.utils.extend({},this.defaultVariables,options.variables);\n\t// Initialise CSRF\n\tthis.csrfDisable = this.get(\"csrf-disable\") === \"yes\";\n\t// Initialize Gzip compression\n\tthis.enableGzip = this.get(\"gzip\") === \"yes\";\n\t// Initialise authorization\n\tvar authorizedUserName = (this.get(\"username\") && this.get(\"password\")) ? this.get(\"username\") : \"(anon)\";\n\tthis.authorizationPrincipals = {\n\t\treaders: (this.get(\"readers\") || authorizedUserName).split(\",\").map($tw.utils.trim),\n\t\twriters: (this.get(\"writers\") || authorizedUserName).split(\",\").map($tw.utils.trim)\n\t}\n\t// Load and initialise authenticators\n\t$tw.modules.forEachModuleOfType(\"authenticator\", function(title,authenticatorDefinition) {\n\t\t// console.log(\"Loading server route \" + title);\n\t\tself.addAuthenticator(authenticatorDefinition.AuthenticatorClass);\n\t});\n\t// Load route handlers\n\t$tw.modules.forEachModuleOfType(\"route\", function(title,routeDefinition) {\n\t\t// console.log(\"Loading server route \" + title);\n\t\tself.addRoute(routeDefinition);\n\t});\n\t// Initialise the http vs https\n\tthis.listenOptions = null;\n\tthis.protocol = \"http\";\n\tvar tlsKeyFilepath = this.get(\"tls-key\"),\n\t\ttlsCertFilepath = this.get(\"tls-cert\");\n\tif(tlsCertFilepath && tlsKeyFilepath) {\n\t\tthis.listenOptions = {\n\t\t\tkey: fs.readFileSync(path.resolve($tw.boot.wikiPath,tlsKeyFilepath),\"utf8\"),\n\t\t\tcert: fs.readFileSync(path.resolve($tw.boot.wikiPath,tlsCertFilepath),\"utf8\")\n\t\t};\n\t\tthis.protocol = \"https\";\n\t}\n\tthis.transport = require(this.protocol);\n}\n\nServer.prototype.defaultVariables = {\n\tport: \"8080\",\n\thost: \"127.0.0.1\",\n\t\"root-tiddler\": \"$:/core/save/all\",\n\t\"root-render-type\": \"text/plain\",\n\t\"root-serve-type\": \"text/html\",\n\t\"tiddler-render-type\": \"text/html\",\n\t\"tiddler-render-template\": \"$:/core/templates/server/static.tiddler.html\",\n\t\"system-tiddler-render-type\": \"text/plain\",\n\t\"system-tiddler-render-template\": \"$:/core/templates/wikified-tiddler\",\n\t\"debug-level\": \"none\",\n\t\"gzip\": \"no\"\n};\n\nServer.prototype.get = function(name) {\n\treturn this.variables[name];\n};\n\nServer.prototype.addRoute = function(route) {\n\tthis.routes.push(route);\n};\n\nServer.prototype.addAuthenticator = function(AuthenticatorClass) {\n\t// Instantiate and initialise the authenticator\n\tvar authenticator = new AuthenticatorClass(this),\n\t\tresult = authenticator.init();\n\tif(typeof result === \"string\") {\n\t\t$tw.utils.error(\"Error: \" + result);\n\t} else if(result) {\n\t\t// Only use the authenticator if it initialised successfully\n\t\tthis.authenticators.push(authenticator);\n\t}\n};\n\nServer.prototype.findMatchingRoute = function(request,state) {\n\tvar pathprefix = this.get(\"path-prefix\") || \"\";\n\tfor(var t=0; t<this.routes.length; t++) {\n\t\tvar potentialRoute = this.routes[t],\n\t\t\tpathRegExp = potentialRoute.path,\n\t\t\tpathname = state.urlInfo.pathname,\n\t\t\tmatch;\n\t\tif(pathprefix) {\n\t\t\tif(pathname.substr(0,pathprefix.length) === pathprefix) {\n\t\t\t\tpathname = pathname.substr(pathprefix.length) || \"/\";\n\t\t\t\tmatch = potentialRoute.path.exec(pathname);\n\t\t\t} else {\n\t\t\t\tmatch = false;\n\t\t\t}\n\t\t} else {\n\t\t\tmatch = potentialRoute.path.exec(pathname);\n\t\t}\n\t\tif(match && request.method === potentialRoute.method) {\n\t\t\tstate.params = [];\n\t\t\tfor(var p=1; p<match.length; p++) {\n\t\t\t\tstate.params.push(match[p]);\n\t\t\t}\n\t\t\treturn potentialRoute;\n\t\t}\n\t}\n\treturn null;\n};\n\nServer.prototype.methodMappings = {\n\t\"GET\": \"readers\",\n\t\"OPTIONS\": \"readers\",\n\t\"HEAD\": \"readers\",\n\t\"PUT\": \"writers\",\n\t\"POST\": \"writers\",\n\t\"DELETE\": \"writers\"\n};\n\n/*\nCheck whether a given user is authorized for the specified authorizationType (\"readers\" or \"writers\"). Pass null or undefined as the username to check for anonymous access\n*/\nServer.prototype.isAuthorized = function(authorizationType,username) {\n\tvar principals = this.authorizationPrincipals[authorizationType] || [];\n\treturn principals.indexOf(\"(anon)\") !== -1 || (username && (principals.indexOf(\"(authenticated)\") !== -1 || principals.indexOf(username) !== -1));\n}\n\nServer.prototype.requestHandler = function(request,response) {\n\t// Compose the state object\n\tvar self = this;\n\tvar state = {};\n\tstate.wiki = self.wiki;\n\tstate.server = self;\n\tstate.urlInfo = url.parse(request.url);\n\tstate.queryParameters = querystring.parse(state.urlInfo.query);\n\t// Get the principals authorized to access this resource\n\tvar authorizationType = this.methodMappings[request.method] || \"readers\";\n\t// Check for the CSRF header if this is a write\n\tif(!this.csrfDisable && authorizationType === \"writers\" && request.headers[\"x-requested-with\"] !== \"TiddlyWiki\") {\n\t\tresponse.writeHead(403,\"'X-Requested-With' header required to login to '\" + this.servername + \"'\");\n\t\tresponse.end();\n\t\treturn;\t\t\n\t}\n\t// Check whether anonymous access is granted\n\tstate.allowAnon = this.isAuthorized(authorizationType,null);\n\t// Authenticate with the first active authenticator\n\tif(this.authenticators.length > 0) {\n\t\tif(!this.authenticators[0].authenticateRequest(request,response,state)) {\n\t\t\t// Bail if we failed (the authenticator will have sent the response)\n\t\t\treturn;\n\t\t}\t\t\n\t}\n\t// Authorize with the authenticated username\n\tif(!this.isAuthorized(authorizationType,state.authenticatedUsername)) {\n\t\tresponse.writeHead(401,\"'\" + state.authenticatedUsername + \"' is not authorized to access '\" + this.servername + \"'\");\n\t\tresponse.end();\n\t\treturn;\n\t}\n\t// Find the route that matches this path\n\tvar route = self.findMatchingRoute(request,state);\n\t// Optionally output debug info\n\tif(self.get(\"debug-level\") !== \"none\") {\n\t\tconsole.log(\"Request path:\",JSON.stringify(state.urlInfo));\n\t\tconsole.log(\"Request headers:\",JSON.stringify(request.headers));\n\t\tconsole.log(\"authenticatedUsername:\",state.authenticatedUsername);\n\t}\n\t// Return a 404 if we didn't find a route\n\tif(!route) {\n\t\tresponse.writeHead(404);\n\t\tresponse.end();\n\t\treturn;\n\t}\n\t// Receive the request body if necessary and hand off to the route handler\n\tif(route.bodyFormat === \"stream\" || request.method === \"GET\" || request.method === \"HEAD\") {\n\t\t// Let the route handle the request stream itself\n\t\troute.handler(request,response,state);\n\t} else if(route.bodyFormat === \"string\" || !route.bodyFormat) {\n\t\t// Set the encoding for the incoming request\n\t\trequest.setEncoding(\"utf8\");\n\t\tvar data = \"\";\n\t\trequest.on(\"data\",function(chunk) {\n\t\t\tdata += chunk.toString();\n\t\t});\n\t\trequest.on(\"end\",function() {\n\t\t\tstate.data = data;\n\t\t\troute.handler(request,response,state);\n\t\t});\n\t} else if(route.bodyFormat === \"buffer\") {\n\t\tvar data = [];\n\t\trequest.on(\"data\",function(chunk) {\n\t\t\tdata.push(chunk);\n\t\t});\n\t\trequest.on(\"end\",function() {\n\t\t\tstate.data = Buffer.concat(data);\n\t\t\troute.handler(request,response,state);\n\t\t})\n\t} else {\n\t\tresponse.writeHead(400,\"Invalid bodyFormat \" + route.bodyFormat + \" in route \" + route.method + \" \" + route.path.source);\n\t\tresponse.end();\n\t}\n};\n\n/*\nListen for requests\nport: optional port number (falls back to value of \"port\" variable)\nhost: optional host address (falls back to value of \"host\" variable)\nprefix: optional prefix (falls back to value of \"path-prefix\" variable)\n*/\nServer.prototype.listen = function(port,host,prefix) {\n\tvar self = this;\n\t// Handle defaults for port and host\n\tport = port || this.get(\"port\");\n\thost = host || this.get(\"host\");\n\tprefix = prefix || this.get(\"path-prefix\") || \"\";\n\t// Check for the port being a string and look it up as an environment variable\n\tif(parseInt(port,10).toString() !== port) {\n\t\tport = process.env[port] || 8080;\n\t}\n\t// Warn if required plugins are missing\n\tif(!$tw.wiki.getTiddler(\"$:/plugins/tiddlywiki/tiddlyweb\") || !$tw.wiki.getTiddler(\"$:/plugins/tiddlywiki/filesystem\")) {\n\t\t$tw.utils.warning(\"Warning: Plugins required for client-server operation (\\\"tiddlywiki/filesystem\\\" and \\\"tiddlywiki/tiddlyweb\\\") are missing from tiddlywiki.info file\");\n\t}\n\t// Create the server\n\tvar server;\n\tif(this.listenOptions) {\n\t\tserver = this.transport.createServer(this.listenOptions,this.requestHandler.bind(this));\n\t} else {\n\t\tserver = this.transport.createServer(this.requestHandler.bind(this));\n\t}\n\t// Display the port number after we've started listening (the port number might have been specified as zero, in which case we will get an assigned port)\n\tserver.on(\"listening\",function() {\n\t\tvar address = server.address();\n\t\t$tw.utils.log(\"Serving on \" + self.protocol + \"://\" + address.address + \":\" + address.port + prefix,\"brown/orange\");\n\t\t$tw.utils.log(\"(press ctrl-C to exit)\",\"red\");\n\t});\n\t// Listen\n\treturn server.listen(port,host);\n};\n\nexports.Server = Server;\n\n})();\n",
"type": "application/javascript",
"module-type": "library"
},
"$:/core/modules/browser-messaging.js": {
"title": "$:/core/modules/browser-messaging.js",
"text": "/*\\\ntitle: $:/core/modules/browser-messaging.js\ntype: application/javascript\nmodule-type: startup\n\nBrowser message handling\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"browser-messaging\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\n/*\nLoad a specified url as an iframe and call the callback when it is loaded. If the url is already loaded then the existing iframe instance is used\n*/\nfunction loadIFrame(url,callback) {\n\t// Check if iframe already exists\n\tvar iframeInfo = $tw.browserMessaging.iframeInfoMap[url];\n\tif(iframeInfo) {\n\t\t// We've already got the iframe\n\t\tcallback(null,iframeInfo);\n\t} else {\n\t\t// Create the iframe and save it in the list\n\t\tvar iframe = document.createElement(\"iframe\");\n\t\tiframeInfo = {\n\t\t\turl: url,\n\t\t\tstatus: \"loading\",\n\t\t\tdomNode: iframe\n\t\t};\n\t\t$tw.browserMessaging.iframeInfoMap[url] = iframeInfo;\n\t\tsaveIFrameInfoTiddler(iframeInfo);\n\t\t// Add the iframe to the DOM and hide it\n\t\tiframe.style.display = \"none\";\n\t\tiframe.setAttribute(\"library\",\"true\");\n\t\tdocument.body.appendChild(iframe);\n\t\t// Set up onload\n\t\tiframe.onload = function() {\n\t\t\tiframeInfo.status = \"loaded\";\n\t\t\tsaveIFrameInfoTiddler(iframeInfo);\n\t\t\tcallback(null,iframeInfo);\n\t\t};\n\t\tiframe.onerror = function() {\n\t\t\tcallback(\"Cannot load iframe\");\n\t\t};\n\t\ttry {\n\t\t\tiframe.src = url;\n\t\t} catch(ex) {\n\t\t\tcallback(ex);\n\t\t}\n\t}\n}\n\n/*\nUnload library iframe for given url\n*/\nfunction unloadIFrame(url){\n\t$tw.utils.each(document.getElementsByTagName('iframe'), function(iframe) {\n\t\tif(iframe.getAttribute(\"library\") === \"true\" &&\n\t\t iframe.getAttribute(\"src\") === url) {\n\t\t\tiframe.parentNode.removeChild(iframe);\n\t\t}\n\t});\n}\n\nfunction saveIFrameInfoTiddler(iframeInfo) {\n\t$tw.wiki.addTiddler(new $tw.Tiddler($tw.wiki.getCreationFields(),{\n\t\ttitle: \"$:/temp/ServerConnection/\" + iframeInfo.url,\n\t\ttext: iframeInfo.status,\n\t\ttags: [\"$:/tags/ServerConnection\"],\n\t\turl: iframeInfo.url\n\t},$tw.wiki.getModificationFields()));\n}\n\nexports.startup = function() {\n\t// Initialise the store of iframes we've created\n\t$tw.browserMessaging = {\n\t\tiframeInfoMap: {} // Hashmap by URL of {url:,status:\"loading/loaded\",domNode:}\n\t};\n\t// Listen for widget messages to control loading the plugin library\n\t$tw.rootWidget.addEventListener(\"tm-load-plugin-library\",function(event) {\n\t\tvar paramObject = event.paramObject || {},\n\t\t\turl = paramObject.url;\n\t\tif(url) {\n\t\t\tloadIFrame(url,function(err,iframeInfo) {\n\t\t\t\tif(err) {\n\t\t\t\t\talert($tw.language.getString(\"Error/LoadingPluginLibrary\") + \": \" + url);\n\t\t\t\t} else {\n\t\t\t\t\tiframeInfo.domNode.contentWindow.postMessage({\n\t\t\t\t\t\tverb: \"GET\",\n\t\t\t\t\t\turl: \"recipes/library/tiddlers.json\",\n\t\t\t\t\t\tcookies: {\n\t\t\t\t\t\t\ttype: \"save-info\",\n\t\t\t\t\t\t\tinfoTitlePrefix: paramObject.infoTitlePrefix || \"$:/temp/RemoteAssetInfo/\",\n\t\t\t\t\t\t\turl: url\n\t\t\t\t\t\t}\n\t\t\t\t\t},\"*\");\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\t// Listen for widget messages to control unloading the plugin library\n\t$tw.rootWidget.addEventListener(\"tm-unload-plugin-library\",function(event) {\n\t\tvar paramObject = event.paramObject || {},\n\t\t\turl = paramObject.url;\n\t\t$tw.browserMessaging.iframeInfoMap[url] = undefined;\n\t\tif(url) {\n\t\t\tunloadIFrame(url);\n\t\t\t$tw.utils.each(\n\t\t\t\t$tw.wiki.filterTiddlers(\"[[$:/temp/ServerConnection/\" + url + \"]] [prefix[$:/temp/RemoteAssetInfo/\" + url + \"/]]\"),\n\t\t\t\tfunction(title) {\n\t\t\t\t\t$tw.wiki.deleteTiddler(title);\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t});\n\t$tw.rootWidget.addEventListener(\"tm-load-plugin-from-library\",function(event) {\n\t\tvar paramObject = event.paramObject || {},\n\t\t\turl = paramObject.url,\n\t\t\ttitle = paramObject.title;\n\t\tif(url && title) {\n\t\t\tloadIFrame(url,function(err,iframeInfo) {\n\t\t\t\tif(err) {\n\t\t\t\t\talert($tw.language.getString(\"Error/LoadingPluginLibrary\") + \": \" + url);\n\t\t\t\t} else {\n\t\t\t\t\tiframeInfo.domNode.contentWindow.postMessage({\n\t\t\t\t\t\tverb: \"GET\",\n\t\t\t\t\t\turl: \"recipes/library/tiddlers/\" + encodeURIComponent(title) + \".json\",\n\t\t\t\t\t\tcookies: {\n\t\t\t\t\t\t\ttype: \"save-tiddler\",\n\t\t\t\t\t\t\turl: url\n\t\t\t\t\t\t}\n\t\t\t\t\t},\"*\");\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\t// Listen for window messages from other windows\n\twindow.addEventListener(\"message\",function listener(event){\n\t\t// console.log(\"browser-messaging: \",document.location.toString())\n\t\t// console.log(\"browser-messaging: Received message from\",event.origin);\n\t\t// console.log(\"browser-messaging: Message content\",event.data);\n\t\tswitch(event.data.verb) {\n\t\t\tcase \"GET-RESPONSE\":\n\t\t\t\tif(event.data.status.charAt(0) === \"2\") {\n\t\t\t\t\tif(event.data.cookies) {\n\t\t\t\t\t\tif(event.data.cookies.type === \"save-info\") {\n\t\t\t\t\t\t\tvar tiddlers = JSON.parse(event.data.body);\n\t\t\t\t\t\t\t$tw.utils.each(tiddlers,function(tiddler) {\n\t\t\t\t\t\t\t\t$tw.wiki.addTiddler(new $tw.Tiddler($tw.wiki.getCreationFields(),tiddler,{\n\t\t\t\t\t\t\t\t\ttitle: event.data.cookies.infoTitlePrefix + event.data.cookies.url + \"/\" + tiddler.title,\n\t\t\t\t\t\t\t\t\t\"original-title\": tiddler.title,\n\t\t\t\t\t\t\t\t\ttext: \"\",\n\t\t\t\t\t\t\t\t\ttype: \"text/vnd.tiddlywiki\",\n\t\t\t\t\t\t\t\t\t\"original-type\": tiddler.type,\n\t\t\t\t\t\t\t\t\t\"plugin-type\": undefined,\n\t\t\t\t\t\t\t\t\t\"original-plugin-type\": tiddler[\"plugin-type\"],\n\t\t\t\t\t\t\t\t\t\"module-type\": undefined,\n\t\t\t\t\t\t\t\t\t\"original-module-type\": tiddler[\"module-type\"],\n\t\t\t\t\t\t\t\t\ttags: [\"$:/tags/RemoteAssetInfo\"],\n\t\t\t\t\t\t\t\t\t\"original-tags\": $tw.utils.stringifyList(tiddler.tags || []),\n\t\t\t\t\t\t\t\t\t\"server-url\": event.data.cookies.url\n\t\t\t\t\t\t\t\t},$tw.wiki.getModificationFields()));\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else if(event.data.cookies.type === \"save-tiddler\") {\n\t\t\t\t\t\t\tvar tiddler = JSON.parse(event.data.body);\n\t\t\t\t\t\t\t$tw.wiki.addTiddler(new $tw.Tiddler(tiddler));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t},false);\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/commands.js": {
"title": "$:/core/modules/startup/commands.js",
"text": "/*\\\ntitle: $:/core/modules/startup/commands.js\ntype: application/javascript\nmodule-type: startup\n\nCommand processing\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"commands\";\nexports.platforms = [\"node\"];\nexports.after = [\"story\"];\nexports.synchronous = false;\n\nexports.startup = function(callback) {\n\t// On the server, start a commander with the command line arguments\n\tvar commander = new $tw.Commander(\n\t\t$tw.boot.argv,\n\t\tfunction(err) {\n\t\t\tif(err) {\n\t\t\t\treturn $tw.utils.error(\"Error: \" + err);\n\t\t\t}\n\t\t\tcallback();\n\t\t},\n\t\t$tw.wiki,\n\t\t{output: process.stdout, error: process.stderr}\n\t);\n\tcommander.execute();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/CSSescape.js": {
"title": "$:/core/modules/startup/CSSescape.js",
"text": "/*\\\ntitle: $:/core/modules/startup/CSSescape.js\ntype: application/javascript\nmodule-type: startup\n\nPolyfill for CSS.escape()\n\n\\*/\n(function(root,factory){\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"css-escape\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\n/*! https://mths.be/cssescape v1.5.1 by @mathias | MIT license */\n// https://github.com/umdjs/umd/blob/master/returnExports.js\nexports.startup = factory(root);\n}(typeof global != 'undefined' ? global : this, function(root) {\n\n\tif (root.CSS && root.CSS.escape) {\n\t\treturn;\n\t}\n\n\t// https://drafts.csswg.org/cssom/#serialize-an-identifier\n\tvar cssEscape = function(value) {\n\t\tif (arguments.length == 0) {\n\t\t\tthrow new TypeError('`CSS.escape` requires an argument.');\n\t\t}\n\t\tvar string = String(value);\n\t\tvar length = string.length;\n\t\tvar index = -1;\n\t\tvar codeUnit;\n\t\tvar result = '';\n\t\tvar firstCodeUnit = string.charCodeAt(0);\n\t\twhile (++index < length) {\n\t\t\tcodeUnit = string.charCodeAt(index);\n\t\t\t// Note: there’s no need to special-case astral symbols, surrogate\n\t\t\t// pairs, or lone surrogates.\n\n\t\t\t// If the character is NULL (U+0000), then the REPLACEMENT CHARACTER\n\t\t\t// (U+FFFD).\n\t\t\tif (codeUnit == 0x0000) {\n\t\t\t\tresult += '\\uFFFD';\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t// If the character is in the range [\\1-\\1F] (U+0001 to U+001F) or is\n\t\t\t\t// U+007F, […]\n\t\t\t\t(codeUnit >= 0x0001 && codeUnit <= 0x001F) || codeUnit == 0x007F ||\n\t\t\t\t// If the character is the first character and is in the range [0-9]\n\t\t\t\t// (U+0030 to U+0039), […]\n\t\t\t\t(index == 0 && codeUnit >= 0x0030 && codeUnit <= 0x0039) ||\n\t\t\t\t// If the character is the second character and is in the range [0-9]\n\t\t\t\t// (U+0030 to U+0039) and the first character is a `-` (U+002D), […]\n\t\t\t\t(\n\t\t\t\t\tindex == 1 &&\n\t\t\t\t\tcodeUnit >= 0x0030 && codeUnit <= 0x0039 &&\n\t\t\t\t\tfirstCodeUnit == 0x002D\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\t// https://drafts.csswg.org/cssom/#escape-a-character-as-code-point\n\t\t\t\tresult += '\\\\' + codeUnit.toString(16) + ' ';\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t// If the character is the first character and is a `-` (U+002D), and\n\t\t\t\t// there is no second character, […]\n\t\t\t\tindex == 0 &&\n\t\t\t\tlength == 1 &&\n\t\t\t\tcodeUnit == 0x002D\n\t\t\t) {\n\t\t\t\tresult += '\\\\' + string.charAt(index);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If the character is not handled by one of the above rules and is\n\t\t\t// greater than or equal to U+0080, is `-` (U+002D) or `_` (U+005F), or\n\t\t\t// is in one of the ranges [0-9] (U+0030 to U+0039), [A-Z] (U+0041 to\n\t\t\t// U+005A), or [a-z] (U+0061 to U+007A), […]\n\t\t\tif (\n\t\t\t\tcodeUnit >= 0x0080 ||\n\t\t\t\tcodeUnit == 0x002D ||\n\t\t\t\tcodeUnit == 0x005F ||\n\t\t\t\tcodeUnit >= 0x0030 && codeUnit <= 0x0039 ||\n\t\t\t\tcodeUnit >= 0x0041 && codeUnit <= 0x005A ||\n\t\t\t\tcodeUnit >= 0x0061 && codeUnit <= 0x007A\n\t\t\t) {\n\t\t\t\t// the character itself\n\t\t\t\tresult += string.charAt(index);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Otherwise, the escaped character.\n\t\t\t// https://drafts.csswg.org/cssom/#escape-a-character\n\t\t\tresult += '\\\\' + string.charAt(index);\n\n\t\t}\n\t\treturn result;\n\t};\n\n\tif (!root.CSS) {\n\t\troot.CSS = {};\n\t}\n\n\troot.CSS.escape = cssEscape;\n\n}));\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/favicon.js": {
"title": "$:/core/modules/startup/favicon.js",
"text": "/*\\\ntitle: $:/core/modules/startup/favicon.js\ntype: application/javascript\nmodule-type: startup\n\nFavicon handling\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"favicon\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\t\t\n// Favicon tiddler\nvar FAVICON_TITLE = \"$:/favicon.ico\";\n\nexports.startup = function() {\n\t// Set up the favicon\n\tsetFavicon();\n\t// Reset the favicon when the tiddler changes\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.utils.hop(changes,FAVICON_TITLE)) {\n\t\t\tsetFavicon();\n\t\t}\n\t});\n};\n\nfunction setFavicon() {\n\tvar tiddler = $tw.wiki.getTiddler(FAVICON_TITLE);\n\tif(tiddler) {\n\t\tvar faviconLink = document.getElementById(\"faviconLink\");\n\t\tfaviconLink.setAttribute(\"href\",\"data:\" + tiddler.fields.type + \";base64,\" + tiddler.fields.text);\n\t}\n}\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/info.js": {
"title": "$:/core/modules/startup/info.js",
"text": "/*\\\ntitle: $:/core/modules/startup/info.js\ntype: application/javascript\nmodule-type: startup\n\nInitialise $:/info tiddlers via $:/temp/info-plugin pseudo-plugin\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"info\";\nexports.before = [\"startup\"];\nexports.after = [\"load-modules\"];\nexports.synchronous = true;\n\nvar TITLE_INFO_PLUGIN = \"$:/temp/info-plugin\";\n\nexports.startup = function() {\n\t// Collect up the info tiddlers\n\tvar infoTiddlerFields = {};\n\t// Give each info module a chance to fill in as many info tiddlers as they want\n\t$tw.modules.forEachModuleOfType(\"info\",function(title,moduleExports) {\n\t\tif(moduleExports && moduleExports.getInfoTiddlerFields) {\n\t\t\tvar tiddlerFieldsArray = moduleExports.getInfoTiddlerFields(infoTiddlerFields);\n\t\t\t$tw.utils.each(tiddlerFieldsArray,function(fields) {\n\t\t\t\tif(fields) {\n\t\t\t\t\tinfoTiddlerFields[fields.title] = fields;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n\t// Bake the info tiddlers into a plugin. We use the non-standard plugin-type \"info\" because ordinary plugins are only registered asynchronously after being loaded dynamically\n\tvar fields = {\n\t\ttitle: TITLE_INFO_PLUGIN,\n\t\ttype: \"application/json\",\n\t\t\"plugin-type\": \"info\",\n\t\ttext: JSON.stringify({tiddlers: infoTiddlerFields},null,$tw.config.preferences.jsonSpaces)\n\t};\n\t$tw.wiki.addTiddler(new $tw.Tiddler(fields));\n\t$tw.wiki.readPluginInfo([TITLE_INFO_PLUGIN]);\n\t$tw.wiki.registerPluginTiddlers(\"info\");\n\t$tw.wiki.unpackPluginTiddlers();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/load-modules.js": {
"title": "$:/core/modules/startup/load-modules.js",
"text": "/*\\\ntitle: $:/core/modules/startup/load-modules.js\ntype: application/javascript\nmodule-type: startup\n\nLoad core modules\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"load-modules\";\nexports.synchronous = true;\n\nexports.startup = function() {\n\t// Load modules\n\t$tw.modules.applyMethods(\"utils\",$tw.utils);\n\tif($tw.node) {\n\t\t$tw.modules.applyMethods(\"utils-node\",$tw.utils);\n\t}\n\t$tw.modules.applyMethods(\"global\",$tw);\n\t$tw.modules.applyMethods(\"config\",$tw.config);\n\t$tw.Tiddler.fieldModules = $tw.modules.getModulesByTypeAsHashmap(\"tiddlerfield\");\n\t$tw.modules.applyMethods(\"tiddlermethod\",$tw.Tiddler.prototype);\n\t$tw.modules.applyMethods(\"wikimethod\",$tw.Wiki.prototype);\n\t$tw.wiki.addIndexersToWiki();\n\t$tw.modules.applyMethods(\"tiddlerdeserializer\",$tw.Wiki.tiddlerDeserializerModules);\n\t$tw.macros = $tw.modules.getModulesByTypeAsHashmap(\"macro\");\n\t$tw.wiki.initParsers();\n\t$tw.Commander.initCommands();\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/password.js": {
"title": "$:/core/modules/startup/password.js",
"text": "/*\\\ntitle: $:/core/modules/startup/password.js\ntype: application/javascript\nmodule-type: startup\n\nPassword handling\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"password\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\nexports.startup = function() {\n\t$tw.rootWidget.addEventListener(\"tm-set-password\",function(event) {\n\t\t$tw.passwordPrompt.createPrompt({\n\t\t\tserviceName: $tw.language.getString(\"Encryption/PromptSetPassword\"),\n\t\t\tnoUserName: true,\n\t\t\tsubmitText: $tw.language.getString(\"Encryption/SetPassword\"),\n\t\t\tcanCancel: true,\n\t\t\trepeatPassword: true,\n\t\t\tcallback: function(data) {\n\t\t\t\tif(data) {\n\t\t\t\t\t$tw.crypto.setPassword(data.password);\n\t\t\t\t}\n\t\t\t\treturn true; // Get rid of the password prompt\n\t\t\t}\n\t\t});\n\t});\n\t$tw.rootWidget.addEventListener(\"tm-clear-password\",function(event) {\n\t\tif($tw.browser) {\n\t\t\tif(!confirm($tw.language.getString(\"Encryption/ConfirmClearPassword\"))) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t$tw.crypto.setPassword(null);\n\t});\n\t// Ensure that $:/isEncrypted is maintained properly\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.utils.hop(changes,\"$:/isEncrypted\")) {\n\t\t\t$tw.crypto.updateCryptoStateTiddler();\n\t\t}\n\t});\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/plugins.js": {
"title": "$:/core/modules/startup/plugins.js",
"text": "/*\\\ntitle: $:/core/modules/startup/plugins.js\ntype: application/javascript\nmodule-type: startup\n\nStartup logic concerned with managing plugins\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"plugins\";\nexports.after = [\"load-modules\"];\nexports.synchronous = true;\n\nvar TITLE_REQUIRE_RELOAD_DUE_TO_PLUGIN_CHANGE = \"$:/status/RequireReloadDueToPluginChange\";\n\nvar PREFIX_CONFIG_REGISTER_PLUGIN_TYPE = \"$:/config/RegisterPluginType/\";\n\nexports.startup = function() {\n\t$tw.wiki.addTiddler({title: TITLE_REQUIRE_RELOAD_DUE_TO_PLUGIN_CHANGE,text: \"no\"});\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\tvar changesToProcess = [],\n\t\t\trequireReloadDueToPluginChange = false;\n\t\t$tw.utils.each(Object.keys(changes),function(title) {\n\t\t\tvar tiddler = $tw.wiki.getTiddler(title),\n\t\t\t\trequiresReload = $tw.wiki.doesPluginRequireReload(title);\n\t\t\tif(requiresReload) {\n\t\t\t\trequireReloadDueToPluginChange = true;\n\t\t\t} else if(tiddler) {\n\t\t\t\tvar pluginType = tiddler.fields[\"plugin-type\"];\n\t\t\t\tif($tw.wiki.getTiddlerText(PREFIX_CONFIG_REGISTER_PLUGIN_TYPE + (tiddler.fields[\"plugin-type\"] || \"\"),\"no\") === \"yes\") {\n\t\t\t\t\tchangesToProcess.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tif(requireReloadDueToPluginChange) {\n\t\t\t$tw.wiki.addTiddler({title: TITLE_REQUIRE_RELOAD_DUE_TO_PLUGIN_CHANGE,text: \"yes\"});\n\t\t}\n\t\t// Read or delete the plugin info of the changed tiddlers\n\t\tif(changesToProcess.length > 0) {\n\t\t\tvar changes = $tw.wiki.readPluginInfo(changesToProcess);\n\t\t\tif(changes.modifiedPlugins.length > 0 || changes.deletedPlugins.length > 0) {\n\t\t\t\t// (Re-)register any modified plugins\n\t\t\t\t$tw.wiki.registerPluginTiddlers(null,changes.modifiedPlugins);\n\t\t\t\t// Unregister any deleted plugins\n\t\t\t\t$tw.wiki.unregisterPluginTiddlers(null,changes.deletedPlugins);\n\t\t\t\t// Unpack the shadow tiddlers\n\t\t\t\t$tw.wiki.unpackPluginTiddlers();\n\t\t\t}\n\t\t}\n\t});\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/render.js": {
"title": "$:/core/modules/startup/render.js",
"text": "/*\\\ntitle: $:/core/modules/startup/render.js\ntype: application/javascript\nmodule-type: startup\n\nTitle, stylesheet and page rendering\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"render\";\nexports.platforms = [\"browser\"];\nexports.after = [\"story\"];\nexports.synchronous = true;\n\n// Default story and history lists\nvar PAGE_TITLE_TITLE = \"$:/core/wiki/title\";\nvar PAGE_STYLESHEET_TITLE = \"$:/core/ui/PageStylesheet\";\nvar PAGE_TEMPLATE_TITLE = \"$:/core/ui/PageTemplate\";\n\n// Time (in ms) that we defer refreshing changes to draft tiddlers\nvar DRAFT_TIDDLER_TIMEOUT_TITLE = \"$:/config/Drafts/TypingTimeout\";\nvar THROTTLE_REFRESH_TIMEOUT = 400;\n\nexports.startup = function() {\n\t// Set up the title\n\t$tw.titleWidgetNode = $tw.wiki.makeTranscludeWidget(PAGE_TITLE_TITLE,{document: $tw.fakeDocument, parseAsInline: true});\n\t$tw.titleContainer = $tw.fakeDocument.createElement(\"div\");\n\t$tw.titleWidgetNode.render($tw.titleContainer,null);\n\tdocument.title = $tw.titleContainer.textContent;\n\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\tif($tw.titleWidgetNode.refresh(changes,$tw.titleContainer,null)) {\n\t\t\tdocument.title = $tw.titleContainer.textContent;\n\t\t}\n\t});\n\t// Set up the styles\n\t$tw.styleWidgetNode = $tw.wiki.makeTranscludeWidget(PAGE_STYLESHEET_TITLE,{document: $tw.fakeDocument});\n\t$tw.styleContainer = $tw.fakeDocument.createElement(\"style\");\n\t$tw.styleWidgetNode.render($tw.styleContainer,null);\n\t$tw.styleElement = document.createElement(\"style\");\n\t$tw.styleElement.innerHTML = $tw.styleContainer.textContent;\n\tdocument.head.insertBefore($tw.styleElement,document.head.firstChild);\n\t$tw.wiki.addEventListener(\"change\",$tw.perf.report(\"styleRefresh\",function(changes) {\n\t\tif($tw.styleWidgetNode.refresh(changes,$tw.styleContainer,null)) {\n\t\t\t$tw.styleElement.innerHTML = $tw.styleContainer.textContent;\n\t\t}\n\t}));\n\t// Display the $:/core/ui/PageTemplate tiddler to kick off the display\n\t$tw.perf.report(\"mainRender\",function() {\n\t\t$tw.pageWidgetNode = $tw.wiki.makeTranscludeWidget(PAGE_TEMPLATE_TITLE,{document: document, parentWidget: $tw.rootWidget});\n\t\t$tw.pageContainer = document.createElement(\"div\");\n\t\t$tw.utils.addClass($tw.pageContainer,\"tc-page-container-wrapper\");\n\t\tdocument.body.insertBefore($tw.pageContainer,document.body.firstChild);\n\t\t$tw.pageWidgetNode.render($tw.pageContainer,null);\n \t\t$tw.hooks.invokeHook(\"th-page-refreshed\");\n\t})();\n\t// Remove any splash screen elements\n\tvar removeList = document.querySelectorAll(\".tc-remove-when-wiki-loaded\");\n\t$tw.utils.each(removeList,function(removeItem) {\n\t\tif(removeItem.parentNode) {\n\t\t\tremoveItem.parentNode.removeChild(removeItem);\n\t\t}\n\t});\n\t// Prepare refresh mechanism\n\tvar deferredChanges = Object.create(null),\n\t\ttimerId;\n\tfunction refresh() {\n\t\t// Process the refresh\n\t\t$tw.hooks.invokeHook(\"th-page-refreshing\");\n\t\t$tw.pageWidgetNode.refresh(deferredChanges);\n\t\tdeferredChanges = Object.create(null);\n\t\t$tw.hooks.invokeHook(\"th-page-refreshed\");\n\t}\n\t// Add the change event handler\n\t$tw.wiki.addEventListener(\"change\",$tw.perf.report(\"mainRefresh\",function(changes) {\n\t\t// Check if only tiddlers that are throttled have changed\n\t\tvar onlyThrottledTiddlersHaveChanged = true;\n\t\tfor(var title in changes) {\n\t\t\tvar tiddler = $tw.wiki.getTiddler(title);\n\t\t\tif(!tiddler || !(tiddler.hasField(\"draft.of\") || tiddler.hasField(\"throttle.refresh\"))) {\n\t\t\t\tonlyThrottledTiddlersHaveChanged = false;\n\t\t\t}\n\t\t}\n\t\t// Defer the change if only drafts have changed\n\t\tif(timerId) {\n\t\t\tclearTimeout(timerId);\n\t\t}\n\t\ttimerId = null;\n\t\tif(onlyThrottledTiddlersHaveChanged) {\n\t\t\tvar timeout = parseInt($tw.wiki.getTiddlerText(DRAFT_TIDDLER_TIMEOUT_TITLE,\"\"),10);\n\t\t\tif(isNaN(timeout)) {\n\t\t\t\ttimeout = THROTTLE_REFRESH_TIMEOUT;\n\t\t\t}\n\t\t\ttimerId = setTimeout(refresh,timeout);\n\t\t\t$tw.utils.extend(deferredChanges,changes);\n\t\t} else {\n\t\t\t$tw.utils.extend(deferredChanges,changes);\n\t\t\trefresh();\n\t\t}\n\t}));\n\t// Fix up the link between the root widget and the page container\n\t$tw.rootWidget.domNodes = [$tw.pageContainer];\n\t$tw.rootWidget.children = [$tw.pageWidgetNode];\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/rootwidget.js": {
"title": "$:/core/modules/startup/rootwidget.js",
"text": "/*\\\ntitle: $:/core/modules/startup/rootwidget.js\ntype: application/javascript\nmodule-type: startup\n\nSetup the root widget and the core root widget handlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"rootwidget\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.before = [\"story\"];\nexports.synchronous = true;\n\nexports.startup = function() {\n\t// Install the modal message mechanism\n\t$tw.modal = new $tw.utils.Modal($tw.wiki);\n\t$tw.rootWidget.addEventListener(\"tm-modal\",function(event) {\n\t\t$tw.modal.display(event.param,{variables: event.paramObject, event: event});\n\t});\n\t// Install the notification mechanism\n\t$tw.notifier = new $tw.utils.Notifier($tw.wiki);\n\t$tw.rootWidget.addEventListener(\"tm-notify\",function(event) {\n\t\t$tw.notifier.display(event.param,{variables: event.paramObject});\n\t});\n\t// Install the copy-to-clipboard mechanism\n\t$tw.rootWidget.addEventListener(\"tm-copy-to-clipboard\",function(event) {\n\t\t$tw.utils.copyToClipboard(event.param);\n\t});\n\t// Install the tm-focus-selector message\n\t$tw.rootWidget.addEventListener(\"tm-focus-selector\",function(event) {\n\t\tvar selector = event.param || \"\",\n\t\t\telement;\n\t\ttry {\n\t\t\telement = document.querySelector(selector);\n\t\t} catch(e) {\n\t\t\tconsole.log(\"Error in selector: \",selector)\n\t\t}\n\t\tif(element && element.focus) {\n\t\t\telement.focus(event.paramObject);\n\t\t}\n\t});\n\t// Install the scroller\n\t$tw.pageScroller = new $tw.utils.PageScroller();\n\t$tw.rootWidget.addEventListener(\"tm-scroll\",function(event) {\n\t\t$tw.pageScroller.handleEvent(event);\n\t});\n\tvar fullscreen = $tw.utils.getFullScreenApis();\n\tif(fullscreen) {\n\t\t$tw.rootWidget.addEventListener(\"tm-full-screen\",function(event) {\n\t\t\tvar fullScreenDocument = event.event ? event.event.target.ownerDocument : document;\n\t\t\tif(event.param === \"enter\") {\n\t\t\t\tfullScreenDocument.documentElement[fullscreen._requestFullscreen](Element.ALLOW_KEYBOARD_INPUT);\n\t\t\t} else if(event.param === \"exit\") {\n\t\t\t\tfullScreenDocument[fullscreen._exitFullscreen]();\n\t\t\t} else {\n\t\t\t\tif(fullScreenDocument[fullscreen._fullscreenElement]) {\n\t\t\t\t\tfullScreenDocument[fullscreen._exitFullscreen]();\n\t\t\t\t} else {\n\t\t\t\t\tfullScreenDocument.documentElement[fullscreen._requestFullscreen](Element.ALLOW_KEYBOARD_INPUT);\n\t\t\t\t}\t\t\t\t\n\t\t\t}\n\t\t});\n\t}\n\t// If we're being viewed on a data: URI then give instructions for how to save\n\tif(document.location.protocol === \"data:\") {\n\t\t$tw.rootWidget.dispatchEvent({\n\t\t\ttype: \"tm-modal\",\n\t\t\tparam: \"$:/language/Modals/SaveInstructions\"\n\t\t});\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup.js": {
"title": "$:/core/modules/startup.js",
"text": "/*\\\ntitle: $:/core/modules/startup.js\ntype: application/javascript\nmodule-type: startup\n\nMiscellaneous startup logic for both the client and server.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"startup\";\nexports.after = [\"load-modules\"];\nexports.synchronous = true;\n\n// Set to `true` to enable performance instrumentation\nvar PERFORMANCE_INSTRUMENTATION_CONFIG_TITLE = \"$:/config/Performance/Instrumentation\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nexports.startup = function() {\n\tvar modules,n,m,f;\n\t// Minimal browser detection\n\tif($tw.browser) {\n\t\t$tw.browser.isIE = (/msie|trident/i.test(navigator.userAgent));\n\t\t$tw.browser.isFirefox = !!document.mozFullScreenEnabled;\n\t}\n\t// Platform detection\n\t$tw.platform = {};\n\tif($tw.browser) {\n\t\t$tw.platform.isMac = /Mac/.test(navigator.platform);\n\t\t$tw.platform.isWindows = /win/i.test(navigator.platform);\n\t\t$tw.platform.isLinux = /Linux/i.test(navigator.platform);\n\t} else {\n\t\tswitch(require(\"os\").platform()) {\n\t\t\tcase \"darwin\":\n\t\t\t\t$tw.platform.isMac = true;\n\t\t\t\tbreak;\n\t\t\tcase \"win32\":\n\t\t\t\t$tw.platform.isWindows = true;\n\t\t\t\tbreak;\n\t\t\tcase \"freebsd\":\n\t\t\t\t$tw.platform.isLinux = true;\n\t\t\t\tbreak;\n\t\t\tcase \"linux\":\n\t\t\t\t$tw.platform.isLinux = true;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\t// Initialise version\n\t$tw.version = $tw.utils.extractVersionInfo();\n\t// Set up the performance framework\n\t$tw.perf = new $tw.Performance($tw.wiki.getTiddlerText(PERFORMANCE_INSTRUMENTATION_CONFIG_TITLE,\"no\") === \"yes\");\n\t// Create a root widget for attaching event handlers. By using it as the parentWidget for another widget tree, one can reuse the event handlers\n\t$tw.rootWidget = new widget.widget({\n\t\ttype: \"widget\",\n\t\tchildren: []\n\t},{\n\t\twiki: $tw.wiki,\n\t\tdocument: $tw.browser ? document : $tw.fakeDocument\n\t});\n\t// Execute any startup actions\n\tvar executeStartupTiddlers = function(tag) {\n\t\t$tw.utils.each($tw.wiki.filterTiddlers(\"[all[shadows+tiddlers]tag[\" + tag + \"]!has[draft.of]]\"),function(title) {\n\t\t\t$tw.rootWidget.invokeActionString($tw.wiki.getTiddlerText(title),$tw.rootWidget);\n\t\t});\n\t};\n\texecuteStartupTiddlers(\"$:/tags/StartupAction\");\n\tif($tw.browser) {\n\t\texecuteStartupTiddlers(\"$:/tags/StartupAction/Browser\");\t\t\n\t}\n\tif($tw.node) {\n\t\texecuteStartupTiddlers(\"$:/tags/StartupAction/Node\");\t\t\n\t}\n\t// Kick off the language manager and switcher\n\t$tw.language = new $tw.Language();\n\t$tw.languageSwitcher = new $tw.PluginSwitcher({\n\t\twiki: $tw.wiki,\n\t\tpluginType: \"language\",\n\t\tcontrollerTitle: \"$:/language\",\n\t\tdefaultPlugins: [\n\t\t\t\"$:/languages/en-GB\"\n\t\t],\n\t\tonSwitch: function(plugins) {\n\t\t\tif($tw.browser) {\n\t\t\t\tvar pluginTiddler = $tw.wiki.getTiddler(plugins[0]);\n\t\t\t\tif(pluginTiddler) {\n\t\t\t\t\tdocument.documentElement.setAttribute(\"dir\",pluginTiddler.getFieldString(\"text-direction\") || \"auto\");\n\t\t\t\t} else {\n\t\t\t\t\tdocument.documentElement.removeAttribute(\"dir\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\t// Kick off the theme manager\n\t$tw.themeManager = new $tw.PluginSwitcher({\n\t\twiki: $tw.wiki,\n\t\tpluginType: \"theme\",\n\t\tcontrollerTitle: \"$:/theme\",\n\t\tdefaultPlugins: [\n\t\t\t\"$:/themes/tiddlywiki/snowwhite\",\n\t\t\t\"$:/themes/tiddlywiki/vanilla\"\n\t\t]\n\t});\n\t// Kick off the keyboard manager\n\t$tw.keyboardManager = new $tw.KeyboardManager();\n\t// Listen for shortcuts\n\tif($tw.browser) {\n\t\t$tw.utils.addEventListeners(document,[{\n\t\t\tname: \"keydown\",\n\t\t\thandlerObject: $tw.keyboardManager,\n\t\t\thandlerMethod: \"handleKeydownEvent\"\n\t\t}]);\n\t}\n\t// Clear outstanding tiddler store change events to avoid an unnecessary refresh cycle at startup\n\t$tw.wiki.clearTiddlerEventQueue();\n\t// Find a working syncadaptor\n\t$tw.syncadaptor = undefined;\n\t$tw.modules.forEachModuleOfType(\"syncadaptor\",function(title,module) {\n\t\tif(!$tw.syncadaptor && module.adaptorClass) {\n\t\t\t$tw.syncadaptor = new module.adaptorClass({wiki: $tw.wiki});\n\t\t}\n\t});\n\t// Set up the syncer object if we've got a syncadaptor\n\tif($tw.syncadaptor) {\n\t\t$tw.syncer = new $tw.Syncer({wiki: $tw.wiki, syncadaptor: $tw.syncadaptor});\n\t}\n\t// Setup the saver handler\n\t$tw.saverHandler = new $tw.SaverHandler({\n\t\twiki: $tw.wiki,\n\t\tdirtyTracking: !$tw.syncadaptor,\n\t\tpreloadDirty: $tw.boot.preloadDirty || []\n\t});\n\t// Host-specific startup\n\tif($tw.browser) {\n\t\t// Install the popup manager\n\t\t$tw.popup = new $tw.utils.Popup();\n\t\t// Install the animator\n\t\t$tw.anim = new $tw.utils.Animator();\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/story.js": {
"title": "$:/core/modules/startup/story.js",
"text": "/*\\\ntitle: $:/core/modules/startup/story.js\ntype: application/javascript\nmodule-type: startup\n\nLoad core modules\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"story\";\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\n// Default story and history lists\nvar DEFAULT_STORY_TITLE = \"$:/StoryList\";\nvar DEFAULT_HISTORY_TITLE = \"$:/HistoryList\";\n\n// Default tiddlers\nvar DEFAULT_TIDDLERS_TITLE = \"$:/DefaultTiddlers\";\n\n// Config\nvar CONFIG_UPDATE_ADDRESS_BAR = \"$:/config/Navigation/UpdateAddressBar\"; // Can be \"no\", \"permalink\", \"permaview\"\nvar CONFIG_UPDATE_HISTORY = \"$:/config/Navigation/UpdateHistory\"; // Can be \"yes\" or \"no\"\nvar CONFIG_PERMALINKVIEW_COPY_TO_CLIPBOARD = \"$:/config/Navigation/Permalinkview/CopyToClipboard\"; // Can be \"yes\" (default) or \"no\"\nvar CONFIG_PERMALINKVIEW_UPDATE_ADDRESS_BAR = \"$:/config/Navigation/Permalinkview/UpdateAddressBar\"; // Can be \"yes\" (default) or \"no\"\n\n\n// Links to help, if there is no param\nvar HELP_OPEN_EXTERNAL_WINDOW = \"http://tiddlywiki.com/#WidgetMessage%3A%20tm-open-external-window\";\n\nexports.startup = function() {\n\t// Open startup tiddlers\n\topenStartupTiddlers({\n\t\tdisableHistory: $tw.boot.disableStartupNavigation\n\t});\n\tif($tw.browser) {\n\t\t// Set up location hash update\n\t\t$tw.wiki.addEventListener(\"change\",function(changes) {\n\t\t\tif($tw.utils.hop(changes,DEFAULT_STORY_TITLE) || $tw.utils.hop(changes,DEFAULT_HISTORY_TITLE)) {\n\t\t\t\tupdateLocationHash({\n\t\t\t\t\tupdateAddressBar: $tw.wiki.getTiddlerText(CONFIG_UPDATE_ADDRESS_BAR,\"permaview\").trim(),\n\t\t\t\t\tupdateHistory: $tw.wiki.getTiddlerText(CONFIG_UPDATE_HISTORY,\"no\").trim()\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\t// Listen for changes to the browser location hash\n\t\twindow.addEventListener(\"hashchange\",function() {\n\t\t\tvar hash = $tw.utils.getLocationHash();\n\t\t\tif(hash !== $tw.locationHash) {\n\t\t\t\t$tw.locationHash = hash;\n\t\t\t\topenStartupTiddlers({defaultToCurrentStory: true});\n\t\t\t}\n\t\t},false);\n\t\t// Listen for the tm-browser-refresh message\n\t\t$tw.rootWidget.addEventListener(\"tm-browser-refresh\",function(event) {\n\t\t\twindow.location.reload(true);\n\t\t});\n\t\t// Listen for tm-open-external-window message\n\t\t$tw.rootWidget.addEventListener(\"tm-open-external-window\",function(event) {\n\t\t\tvar paramObject = event.paramObject || {},\n\t\t\t\tstrUrl = event.param || HELP_OPEN_EXTERNAL_WINDOW,\n\t\t\t\tstrWindowName = paramObject.windowName,\n\t\t\t\tstrWindowFeatures = paramObject.windowFeatures;\n\t\t\twindow.open(strUrl, strWindowName, strWindowFeatures);\n\t\t});\n\t\t// Listen for the tm-print message\n\t\t$tw.rootWidget.addEventListener(\"tm-print\",function(event) {\n\t\t\t(event.event.view || window).print();\n\t\t});\n\t\t// Listen for the tm-home message\n\t\t$tw.rootWidget.addEventListener(\"tm-home\",function(event) {\n\t\t\twindow.location.hash = \"\";\n\t\t\tvar storyFilter = $tw.wiki.getTiddlerText(DEFAULT_TIDDLERS_TITLE),\n\t\t\t\tstoryList = $tw.wiki.filterTiddlers(storyFilter);\n\t\t\t//invoke any hooks that might change the default story list\n\t\t\tstoryList = $tw.hooks.invokeHook(\"th-opening-default-tiddlers-list\",storyList);\n\t\t\t$tw.wiki.addTiddler({title: DEFAULT_STORY_TITLE, text: \"\", list: storyList},$tw.wiki.getModificationFields());\n\t\t\tif(storyList[0]) {\n\t\t\t\t$tw.wiki.addToHistory(storyList[0]);\n\t\t\t}\n\t\t});\n\t\t// Listen for the tm-permalink message\n\t\t$tw.rootWidget.addEventListener(\"tm-permalink\",function(event) {\n\t\t\tupdateLocationHash({\n\t\t\t\tupdateAddressBar: $tw.wiki.getTiddlerText(CONFIG_PERMALINKVIEW_UPDATE_ADDRESS_BAR,\"yes\").trim() === \"yes\" ? \"permalink\" : \"none\",\n\t\t\t\tupdateHistory: $tw.wiki.getTiddlerText(CONFIG_UPDATE_HISTORY,\"no\").trim(),\n\t\t\t\ttargetTiddler: event.param || event.tiddlerTitle,\n\t\t\t\tcopyToClipboard: $tw.wiki.getTiddlerText(CONFIG_PERMALINKVIEW_COPY_TO_CLIPBOARD,\"yes\").trim() === \"yes\" ? \"permalink\" : \"none\"\n\t\t\t});\n\t\t});\n\t\t// Listen for the tm-permaview message\n\t\t$tw.rootWidget.addEventListener(\"tm-permaview\",function(event) {\n\t\t\tupdateLocationHash({\n\t\t\t\tupdateAddressBar: $tw.wiki.getTiddlerText(CONFIG_PERMALINKVIEW_UPDATE_ADDRESS_BAR,\"yes\").trim() === \"yes\" ? \"permaview\" : \"none\",\n\t\t\t\tupdateHistory: $tw.wiki.getTiddlerText(CONFIG_UPDATE_HISTORY,\"no\").trim(),\n\t\t\t\ttargetTiddler: event.param || event.tiddlerTitle,\n\t\t\t\tcopyToClipboard: $tw.wiki.getTiddlerText(CONFIG_PERMALINKVIEW_COPY_TO_CLIPBOARD,\"yes\").trim() === \"yes\" ? \"permaview\" : \"none\"\n\t\t\t});\t\t\t\t\n\t\t});\n\t}\n};\n\n/*\nProcess the location hash to open the specified tiddlers. Options:\ndisableHistory: if true $:/History is NOT updated\ndefaultToCurrentStory: If true, the current story is retained as the default, instead of opening the default tiddlers\n*/\nfunction openStartupTiddlers(options) {\n\toptions = options || {};\n\t// Work out the target tiddler and the story filter. \"null\" means \"unspecified\"\n\tvar target = null,\n\t\tstoryFilter = null;\n\tif($tw.locationHash.length > 1) {\n\t\tvar hash = $tw.locationHash.substr(1),\n\t\t\tsplit = hash.indexOf(\":\");\n\t\tif(split === -1) {\n\t\t\ttarget = decodeURIComponent(hash.trim());\n\t\t} else {\n\t\t\ttarget = decodeURIComponent(hash.substr(0,split).trim());\n\t\t\tstoryFilter = decodeURIComponent(hash.substr(split + 1).trim());\n\t\t}\n\t}\n\t// If the story wasn't specified use the current tiddlers or a blank story\n\tif(storyFilter === null) {\n\t\tif(options.defaultToCurrentStory) {\n\t\t\tvar currStoryList = $tw.wiki.getTiddlerList(DEFAULT_STORY_TITLE);\n\t\t\tstoryFilter = $tw.utils.stringifyList(currStoryList);\n\t\t} else {\n\t\t\tif(target && target !== \"\") {\n\t\t\t\tstoryFilter = \"\";\n\t\t\t} else {\n\t\t\t\tstoryFilter = $tw.wiki.getTiddlerText(DEFAULT_TIDDLERS_TITLE);\n\t\t\t}\n\t\t}\n\t}\n\t// Process the story filter to get the story list\n\tvar storyList = $tw.wiki.filterTiddlers(storyFilter);\n\t// Invoke any hooks that want to change the default story list\n\tstoryList = $tw.hooks.invokeHook(\"th-opening-default-tiddlers-list\",storyList);\n\t// If the target tiddler isn't included then splice it in at the top\n\tif(target && storyList.indexOf(target) === -1) {\n\t\tstoryList.unshift(target);\n\t}\n\t// Save the story list\n\t$tw.wiki.addTiddler({title: DEFAULT_STORY_TITLE, text: \"\", list: storyList},$tw.wiki.getModificationFields());\n\t// Update history\n\tif(!options.disableHistory) {\n\t\t// If a target tiddler was specified add it to the history stack\n\t\tif(target && target !== \"\") {\n\t\t\t// The target tiddler doesn't need double square brackets, but we'll silently remove them if they're present\n\t\t\tif(target.indexOf(\"[[\") === 0 && target.substr(-2) === \"]]\") {\n\t\t\t\ttarget = target.substr(2,target.length - 4);\n\t\t\t}\n\t\t\t$tw.wiki.addToHistory(target);\n\t\t} else if(storyList.length > 0) {\n\t\t\t$tw.wiki.addToHistory(storyList[0]);\n\t\t}\t\t\n\t}\n}\n\n/*\noptions: See below\noptions.updateAddressBar: \"permalink\", \"permaview\" or \"no\" (defaults to \"permaview\")\noptions.updateHistory: \"yes\" or \"no\" (defaults to \"no\")\noptions.copyToClipboard: \"permalink\", \"permaview\" or \"no\" (defaults to \"no\")\noptions.targetTiddler: optional title of target tiddler for permalink\n*/\nfunction updateLocationHash(options) {\n\t// Get the story and the history stack\n\tvar storyList = $tw.wiki.getTiddlerList(DEFAULT_STORY_TITLE),\n\t\thistoryList = $tw.wiki.getTiddlerData(DEFAULT_HISTORY_TITLE,[]),\n\t\ttargetTiddler = \"\";\n\tif(options.targetTiddler) {\n\t\ttargetTiddler = options.targetTiddler;\n\t} else {\n\t\t// The target tiddler is the one at the top of the stack\n\t\tif(historyList.length > 0) {\n\t\t\ttargetTiddler = historyList[historyList.length-1].title;\n\t\t}\n\t\t// Blank the target tiddler if it isn't present in the story\n\t\tif(storyList.indexOf(targetTiddler) === -1) {\n\t\t\ttargetTiddler = \"\";\n\t\t}\n\t}\n\t// Assemble the location hash\n\tswitch(options.updateAddressBar) {\n\t\tcase \"permalink\":\n\t\t\t$tw.locationHash = \"#\" + encodeURIComponent(targetTiddler);\n\t\t\tbreak;\n\t\tcase \"permaview\":\n\t\t\t$tw.locationHash = \"#\" + encodeURIComponent(targetTiddler) + \":\" + encodeURIComponent($tw.utils.stringifyList(storyList));\n\t\t\tbreak;\n\t}\n\t// Copy URL to the clipboard\n\tswitch(options.copyToClipboard) {\n\t\tcase \"permalink\":\n\t\t\t$tw.utils.copyToClipboard($tw.utils.getLocationPath() + \"#\" + encodeURIComponent(targetTiddler));\n\t\t\tbreak;\n\t\tcase \"permaview\":\n\t\t\t$tw.utils.copyToClipboard($tw.utils.getLocationPath() + \"#\" + encodeURIComponent(targetTiddler) + \":\" + encodeURIComponent($tw.utils.stringifyList(storyList)));\n\t\t\tbreak;\n\t}\n\t// Only change the location hash if we must, thus avoiding unnecessary onhashchange events\n\tif($tw.utils.getLocationHash() !== $tw.locationHash) {\n\t\tif(options.updateHistory === \"yes\") {\n\t\t\t// Assign the location hash so that history is updated\n\t\t\twindow.location.hash = $tw.locationHash;\n\t\t} else {\n\t\t\t// We use replace so that browser history isn't affected\n\t\t\twindow.location.replace(window.location.toString().split(\"#\")[0] + $tw.locationHash);\n\t\t}\n\t}\n}\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/startup/windows.js": {
"title": "$:/core/modules/startup/windows.js",
"text": "/*\\\ntitle: $:/core/modules/startup/windows.js\ntype: application/javascript\nmodule-type: startup\n\nSetup root widget handlers for the messages concerned with opening external browser windows\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Export name and synchronous status\nexports.name = \"windows\";\nexports.platforms = [\"browser\"];\nexports.after = [\"startup\"];\nexports.synchronous = true;\n\n// Global to keep track of open windows (hashmap by title)\nvar windows = {};\n\nexports.startup = function() {\n\t// Handle open window message\n\t$tw.rootWidget.addEventListener(\"tm-open-window\",function(event) {\n\t\t// Get the parameters\n\t\tvar refreshHandler,\n\t\t\ttitle = event.param || event.tiddlerTitle,\n\t\t\tparamObject = event.paramObject || {},\n\t\t\twindowTitle = paramObject.windowTitle || title,\n\t\t\ttemplate = paramObject.template || \"$:/core/templates/single.tiddler.window\",\n\t\t\twidth = paramObject.width || \"700\",\n\t\t\theight = paramObject.height || \"600\",\n\t\t\tvariables = $tw.utils.extend({},paramObject,{currentTiddler: title});\n\t\t// Open the window\n\t\tvar srcWindow,\n\t\t srcDocument;\n\t\t// In case that popup blockers deny opening a new window\n\t\ttry {\n\t\t\tsrcWindow = window.open(\"\",\"external-\" + title,\"scrollbars,width=\" + width + \",height=\" + height),\n\t\t\tsrcDocument = srcWindow.document;\n\t\t}\n\t\tcatch(e) {\n\t\t\treturn;\n\t\t}\n\t\twindows[title] = srcWindow;\n\t\t// Check for reopening the same window\n\t\tif(srcWindow.haveInitialisedWindow) {\n\t\t\treturn;\n\t\t}\n\t\t// Initialise the document\n\t\tsrcDocument.write(\"<html><head></head><body class='tc-body tc-single-tiddler-window'></body></html>\");\n\t\tsrcDocument.close();\n\t\tsrcDocument.title = windowTitle;\n\t\tsrcWindow.addEventListener(\"beforeunload\",function(event) {\n\t\t\tdelete windows[title];\n\t\t\t$tw.wiki.removeEventListener(\"change\",refreshHandler);\n\t\t},false);\n\t\t// Set up the styles\n\t\tvar styleWidgetNode = $tw.wiki.makeTranscludeWidget(\"$:/core/ui/PageStylesheet\",{\n\t\t\t\tdocument: $tw.fakeDocument,\n\t\t\t\tvariables: variables,\n\t\t\t\timportPageMacros: true}),\n\t\t\tstyleContainer = $tw.fakeDocument.createElement(\"style\");\n\t\tstyleWidgetNode.render(styleContainer,null);\n\t\tvar styleElement = srcDocument.createElement(\"style\");\n\t\tstyleElement.innerHTML = styleContainer.textContent;\n\t\tsrcDocument.head.insertBefore(styleElement,srcDocument.head.firstChild);\n\t\t// Render the text of the tiddler\n\t\tvar parser = $tw.wiki.parseTiddler(template),\n\t\t\twidgetNode = $tw.wiki.makeWidget(parser,{document: srcDocument, parentWidget: $tw.rootWidget, variables: variables});\n\t\twidgetNode.render(srcDocument.body,srcDocument.body.firstChild);\n\t\t// Function to handle refreshes\n\t\trefreshHandler = function(changes) {\n\t\t\tif(styleWidgetNode.refresh(changes,styleContainer,null)) {\n\t\t\t\tstyleElement.innerHTML = styleContainer.textContent;\n\t\t\t}\n\t\t\twidgetNode.refresh(changes);\n\t\t};\n\t\t$tw.wiki.addEventListener(\"change\",refreshHandler);\n\t\t// Listen for keyboard shortcuts\n\t\t$tw.utils.addEventListeners(srcDocument,[{\n\t\t\tname: \"keydown\",\n\t\t\thandlerObject: $tw.keyboardManager,\n\t\t\thandlerMethod: \"handleKeydownEvent\"\n\t\t},{\n\t\t\tname: \"click\",\n\t\t\thandlerObject: $tw.popup,\n\t\t\thandlerMethod: \"handleEvent\"\n\t\t}]);\n\t\tsrcWindow.haveInitialisedWindow = true;\n\t});\n\t// Close open windows when unloading main window\n\t$tw.addUnloadTask(function() {\n\t\t$tw.utils.each(windows,function(win) {\n\t\t\twin.close();\n\t\t});\n\t});\n\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "startup"
},
"$:/core/modules/story.js": {
"title": "$:/core/modules/story.js",
"text": "/*\\\ntitle: $:/core/modules/story.js\ntype: application/javascript\nmodule-type: global\n\nLightweight object for managing interactions with the story and history lists.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nConstruct Story object with options:\nwiki: reference to wiki object to use to resolve tiddler titles\nstoryTitle: title of story list tiddler\nhistoryTitle: title of history list tiddler\n*/\nfunction Story(options) {\n\toptions = options || {};\n\tthis.wiki = options.wiki || $tw.wiki;\n\tthis.storyTitle = options.storyTitle || \"$:/StoryList\";\n\tthis.historyTitle = options.historyTitle || \"$:/HistoryList\";\n};\n\nStory.prototype.navigateTiddler = function(navigateTo,navigateFromTitle,navigateFromClientRect) {\n\tthis.addToStory(navigateTo,navigateFromTitle);\n\tthis.addToHistory(navigateTo,navigateFromClientRect);\n};\n\nStory.prototype.getStoryList = function() {\n\treturn this.wiki.getTiddlerList(this.storyTitle) || [];\n};\n\nStory.prototype.addToStory = function(navigateTo,navigateFromTitle,options) {\n\toptions = options || {};\n\tvar storyList = this.getStoryList();\n\t// See if the tiddler is already there\n\tvar slot = storyList.indexOf(navigateTo);\n\t// Quit if it already exists in the story river\n\tif(slot >= 0) {\n\t\treturn;\n\t}\n\t// First we try to find the position of the story element we navigated from\n\tvar fromIndex = storyList.indexOf(navigateFromTitle);\n\tif(fromIndex >= 0) {\n\t\t// The tiddler is added from inside the river\n\t\t// Determine where to insert the tiddler; Fallback is \"below\"\n\t\tswitch(options.openLinkFromInsideRiver) {\n\t\t\tcase \"top\":\n\t\t\t\tslot = 0;\n\t\t\t\tbreak;\n\t\t\tcase \"bottom\":\n\t\t\t\tslot = storyList.length;\n\t\t\t\tbreak;\n\t\t\tcase \"above\":\n\t\t\t\tslot = fromIndex;\n\t\t\t\tbreak;\n\t\t\tcase \"below\": // Intentional fall-through\n\t\t\tdefault:\n\t\t\t\tslot = fromIndex + 1;\n\t\t\t\tbreak;\n\t\t}\n\t} else {\n\t\t// The tiddler is opened from outside the river. Determine where to insert the tiddler; default is \"top\"\n\t\tif(options.openLinkFromOutsideRiver === \"bottom\") {\n\t\t\t// Insert at bottom\n\t\t\tslot = storyList.length;\n\t\t} else {\n\t\t\t// Insert at top\n\t\t\tslot = 0;\n\t\t}\n\t}\n\t// Add the tiddler\n\tstoryList.splice(slot,0,navigateTo);\n\t// Save the story\n\tthis.saveStoryList(storyList);\n};\n\nStory.prototype.saveStoryList = function(storyList) {\n\tvar storyTiddler = this.wiki.getTiddler(this.storyTitle);\n\tthis.wiki.addTiddler(new $tw.Tiddler(\n\t\tthis.wiki.getCreationFields(),\n\t\t{title: this.storyTitle},\n\t\tstoryTiddler,\n\t\t{list: storyList},\n\t\tthis.wiki.getModificationFields()\n\t));\n};\n\nStory.prototype.addToHistory = function(navigateTo,navigateFromClientRect) {\n\tvar titles = $tw.utils.isArray(navigateTo) ? navigateTo : [navigateTo];\n\t// Add a new record to the top of the history stack\n\tvar historyList = this.wiki.getTiddlerData(this.historyTitle,[]);\n\t$tw.utils.each(titles,function(title) {\n\t\thistoryList.push({title: title, fromPageRect: navigateFromClientRect});\n\t});\n\tthis.wiki.setTiddlerData(this.historyTitle,historyList,{\"current-tiddler\": titles[titles.length-1]});\n};\n\nStory.prototype.storyCloseTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyCloseAllTiddlers = function() {\n// TBD\n};\n\nStory.prototype.storyCloseOtherTiddlers = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyEditTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyDeleteTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storySaveTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyCancelTiddler = function(targetTitle) {\n// TBD\n};\n\nStory.prototype.storyNewTiddler = function(targetTitle) {\n// TBD\n};\n\nexports.Story = Story;\n\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/storyviews/classic.js": {
"title": "$:/core/modules/storyviews/classic.js",
"text": "/*\\\ntitle: $:/core/modules/storyviews/classic.js\ntype: application/javascript\nmodule-type: storyview\n\nViews the story as a linear sequence\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar easing = \"cubic-bezier(0.645, 0.045, 0.355, 1)\"; // From http://easings.net/#easeInOutCubic\n\nvar ClassicStoryView = function(listWidget) {\n\tthis.listWidget = listWidget;\n};\n\nClassicStoryView.prototype.navigateTo = function(historyInfo) {\n\tvar duration = $tw.utils.getAnimationDuration()\n\tvar listElementIndex = this.listWidget.findListItem(0,historyInfo.title);\n\tif(listElementIndex === undefined) {\n\t\treturn;\n\t}\n\tvar listItemWidget = this.listWidget.children[listElementIndex],\n\t\ttargetElement = listItemWidget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\tif(duration) {\n\t\t// Scroll the node into view\n\t\tthis.listWidget.dispatchEvent({type: \"tm-scroll\", target: targetElement});\t\n\t} else {\n\t\ttargetElement.scrollIntoView();\n\t}\n};\n\nClassicStoryView.prototype.insert = function(widget) {\n\tvar duration = $tw.utils.getAnimationDuration();\n\tif(duration) {\n\t\tvar targetElement = widget.findFirstDomNode();\n\t\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\t\tif(!(targetElement instanceof Element)) {\n\t\t\treturn;\n\t\t}\n\t\t// Get the current height of the tiddler\n\t\tvar computedStyle = window.getComputedStyle(targetElement),\n\t\t\tcurrMarginBottom = parseInt(computedStyle.marginBottom,10),\n\t\t\tcurrMarginTop = parseInt(computedStyle.marginTop,10),\n\t\t\tcurrHeight = targetElement.offsetHeight + currMarginTop;\n\t\t// Reset the margin once the transition is over\n\t\tsetTimeout(function() {\n\t\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t\t{transition: \"none\"},\n\t\t\t\t{marginBottom: \"\"}\n\t\t\t]);\n\t\t},duration);\n\t\t// Set up the initial position of the element\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: \"none\"},\n\t\t\t{marginBottom: (-currHeight) + \"px\"},\n\t\t\t{opacity: \"0.0\"}\n\t\t]);\n\t\t$tw.utils.forceLayout(targetElement);\n\t\t// Transition to the final position\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: \"opacity \" + duration + \"ms \" + easing + \", \" +\n\t\t\t\t\t\t\"margin-bottom \" + duration + \"ms \" + easing},\n\t\t\t{marginBottom: currMarginBottom + \"px\"},\n\t\t\t{opacity: \"1.0\"}\n\t]);\n\t}\n};\n\nClassicStoryView.prototype.remove = function(widget) {\n\tvar duration = $tw.utils.getAnimationDuration();\n\tif(duration) {\n\t\tvar targetElement = widget.findFirstDomNode(),\n\t\t\tremoveElement = function() {\n\t\t\t\twidget.removeChildDomNodes();\n\t\t\t};\n\t\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\t\tif(!(targetElement instanceof Element)) {\n\t\t\tremoveElement();\n\t\t\treturn;\n\t\t}\n\t\t// Get the current height of the tiddler\n\t\tvar currWidth = targetElement.offsetWidth,\n\t\t\tcomputedStyle = window.getComputedStyle(targetElement),\n\t\t\tcurrMarginBottom = parseInt(computedStyle.marginBottom,10),\n\t\t\tcurrMarginTop = parseInt(computedStyle.marginTop,10),\n\t\t\tcurrHeight = targetElement.offsetHeight + currMarginTop;\n\t\t// Remove the dom nodes of the widget at the end of the transition\n\t\tsetTimeout(removeElement,duration);\n\t\t// Animate the closure\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: \"none\"},\n\t\t\t{transform: \"translateX(0px)\"},\n\t\t\t{marginBottom: currMarginBottom + \"px\"},\n\t\t\t{opacity: \"1.0\"}\n\t\t]);\n\t\t$tw.utils.forceLayout(targetElement);\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", \" +\n\t\t\t\t\t\t\"opacity \" + duration + \"ms \" + easing + \", \" +\n\t\t\t\t\t\t\"margin-bottom \" + duration + \"ms \" + easing},\n\t\t\t{transform: \"translateX(-\" + currWidth + \"px)\"},\n\t\t\t{marginBottom: (-currHeight) + \"px\"},\n\t\t\t{opacity: \"0.0\"}\n\t\t]);\n\t} else {\n\t\twidget.removeChildDomNodes();\n\t}\n};\n\nexports.classic = ClassicStoryView;\n\n})();",
"type": "application/javascript",
"module-type": "storyview"
},
"$:/core/modules/storyviews/pop.js": {
"title": "$:/core/modules/storyviews/pop.js",
"text": "/*\\\ntitle: $:/core/modules/storyviews/pop.js\ntype: application/javascript\nmodule-type: storyview\n\nAnimates list insertions and removals\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar PopStoryView = function(listWidget) {\n\tthis.listWidget = listWidget;\n};\n\nPopStoryView.prototype.navigateTo = function(historyInfo) {\n\tvar listElementIndex = this.listWidget.findListItem(0,historyInfo.title);\n\tif(listElementIndex === undefined) {\n\t\treturn;\n\t}\n\tvar listItemWidget = this.listWidget.children[listElementIndex],\n\t\ttargetElement = listItemWidget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Scroll the node into view\n\tthis.listWidget.dispatchEvent({type: \"tm-scroll\", target: targetElement});\n};\n\nPopStoryView.prototype.insert = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Reset once the transition is over\n\tsetTimeout(function() {\n\t\t$tw.utils.setStyle(targetElement,[\n\t\t\t{transition: \"none\"},\n\t\t\t{transform: \"none\"}\n\t\t]);\n\t\t$tw.utils.setStyle(widget.document.body,[\n\t\t\t{\"overflow-x\": \"\"}\n\t\t]);\n\t},duration);\n\t// Prevent the page from overscrolling due to the zoom factor\n\t$tw.utils.setStyle(widget.document.body,[\n\t\t{\"overflow-x\": \"hidden\"}\n\t]);\n\t// Set up the initial position of the element\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: \"none\"},\n\t\t{transform: \"scale(2)\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n\t$tw.utils.forceLayout(targetElement);\n\t// Transition to the final position\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{transform: \"scale(1)\"},\n\t\t{opacity: \"1.0\"}\n\t]);\n};\n\nPopStoryView.prototype.remove = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\tremoveElement = function() {\n\t\t\tif(targetElement && targetElement.parentNode) {\n\t\t\t\twidget.removeChildDomNodes();\n\t\t\t}\n\t\t};\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\tremoveElement();\n\t\treturn;\n\t}\n\t// Remove the element at the end of the transition\n\tsetTimeout(removeElement,duration);\n\t// Animate the closure\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: \"none\"},\n\t\t{transform: \"scale(1)\"},\n\t\t{opacity: \"1.0\"}\n\t]);\n\t$tw.utils.forceLayout(targetElement);\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{transform: \"scale(0.1)\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n};\n\nexports.pop = PopStoryView;\n\n})();\n",
"type": "application/javascript",
"module-type": "storyview"
},
"$:/core/modules/storyviews/zoomin.js": {
"title": "$:/core/modules/storyviews/zoomin.js",
"text": "/*\\\ntitle: $:/core/modules/storyviews/zoomin.js\ntype: application/javascript\nmodule-type: storyview\n\nZooms between individual tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar easing = \"cubic-bezier(0.645, 0.045, 0.355, 1)\"; // From http://easings.net/#easeInOutCubic\n\nvar ZoominListView = function(listWidget) {\n\tvar self = this;\n\tthis.listWidget = listWidget;\n\t// Get the index of the tiddler that is at the top of the history\n\tvar history = this.listWidget.wiki.getTiddlerDataCached(this.listWidget.historyTitle,[]),\n\t\ttargetTiddler;\n\tif(history.length > 0) {\n\t\ttargetTiddler = history[history.length-1].title;\n\t}\n\t// Make all the tiddlers position absolute, and hide all but the top (or first) one\n\t$tw.utils.each(this.listWidget.children,function(itemWidget,index) {\n\t\tvar domNode = itemWidget.findFirstDomNode();\n\t\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\t\tif(!(domNode instanceof Element)) {\n\t\t\treturn;\n\t\t}\n\t\tif((targetTiddler && targetTiddler !== itemWidget.parseTreeNode.itemTitle) || (!targetTiddler && index)) {\n\t\t\tdomNode.style.display = \"none\";\n\t\t} else {\n\t\t\tself.currentTiddlerDomNode = domNode;\n\t\t}\n\t\t$tw.utils.addClass(domNode,\"tc-storyview-zoomin-tiddler\");\n\t});\n};\n\nZoominListView.prototype.navigateTo = function(historyInfo) {\n\tvar duration = $tw.utils.getAnimationDuration(),\n\t\tlistElementIndex = this.listWidget.findListItem(0,historyInfo.title);\n\tif(listElementIndex === undefined) {\n\t\treturn;\n\t}\n\tvar listItemWidget = this.listWidget.children[listElementIndex],\n\t\ttargetElement = listItemWidget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Make the new tiddler be position absolute and visible so that we can measure it\n\t$tw.utils.addClass(targetElement,\"tc-storyview-zoomin-tiddler\");\n\t$tw.utils.setStyle(targetElement,[\n\t\t{display: \"block\"},\n\t\t{transformOrigin: \"0 0\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t{transition: \"none\"},\n\t\t{opacity: \"0.0\"}\n\t]);\n\t// Get the position of the source node, or use the centre of the window as the source position\n\tvar sourceBounds = historyInfo.fromPageRect || {\n\t\t\tleft: window.innerWidth/2 - 2,\n\t\t\ttop: window.innerHeight/2 - 2,\n\t\t\twidth: window.innerWidth/8,\n\t\t\theight: window.innerHeight/8\n\t\t};\n\t// Try to find the title node in the target tiddler\n\tvar titleDomNode = findTitleDomNode(listItemWidget) || listItemWidget.findFirstDomNode(),\n\t\tzoomBounds = titleDomNode.getBoundingClientRect();\n\t// Compute the transform for the target tiddler to make the title lie over the source rectange\n\tvar targetBounds = targetElement.getBoundingClientRect(),\n\t\tscale = sourceBounds.width / zoomBounds.width,\n\t\tx = sourceBounds.left - targetBounds.left - (zoomBounds.left - targetBounds.left) * scale,\n\t\ty = sourceBounds.top - targetBounds.top - (zoomBounds.top - targetBounds.top) * scale;\n\t// Transform the target tiddler to its starting position\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transform: \"translateX(\" + x + \"px) translateY(\" + y + \"px) scale(\" + scale + \")\"}\n\t]);\n\t// Force layout\n\t$tw.utils.forceLayout(targetElement);\n\t// Apply the ending transitions with a timeout to ensure that the previously applied transformations are applied first\n\tvar self = this,\n\t\tprevCurrentTiddler = this.currentTiddlerDomNode;\n\tthis.currentTiddlerDomNode = targetElement;\n\t// Transform the target tiddler to its natural size\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t{opacity: \"1.0\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t{zIndex: \"500\"},\n\t]);\n\t// Transform the previous tiddler out of the way and then hide it\n\tif(prevCurrentTiddler && prevCurrentTiddler !== targetElement) {\n\t\tscale = zoomBounds.width / sourceBounds.width;\n\t\tx = zoomBounds.left - targetBounds.left - (sourceBounds.left - targetBounds.left) * scale;\n\t\ty = zoomBounds.top - targetBounds.top - (sourceBounds.top - targetBounds.top) * scale;\n\t\t$tw.utils.setStyle(prevCurrentTiddler,[\n\t\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t\t{opacity: \"0.0\"},\n\t\t\t{transformOrigin: \"0 0\"},\n\t\t\t{transform: \"translateX(\" + x + \"px) translateY(\" + y + \"px) scale(\" + scale + \")\"},\n\t\t\t{zIndex: \"0\"}\n\t\t]);\n\t\t// Hide the tiddler when the transition has finished\n\t\tsetTimeout(function() {\n\t\t\tif(self.currentTiddlerDomNode !== prevCurrentTiddler) {\n\t\t\t\tprevCurrentTiddler.style.display = \"none\";\n\t\t\t}\n\t\t},duration);\n\t}\n\t// Scroll the target into view\n//\t$tw.pageScroller.scrollIntoView(targetElement);\n};\n\n/*\nFind the first child DOM node of a widget that has the class \"tc-title\"\n*/\nfunction findTitleDomNode(widget,targetClass) {\n\ttargetClass = targetClass || \"tc-title\";\n\tvar domNode = widget.findFirstDomNode();\n\tif(domNode && domNode.querySelector) {\n\t\treturn domNode.querySelector(\".\" + targetClass);\n\t}\n\treturn null;\n}\n\nZoominListView.prototype.insert = function(widget) {\n\tvar targetElement = widget.findFirstDomNode();\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\treturn;\n\t}\n\t// Make the newly inserted node position absolute and hidden\n\t$tw.utils.addClass(targetElement,\"tc-storyview-zoomin-tiddler\");\n\t$tw.utils.setStyle(targetElement,[\n\t\t{display: \"none\"}\n\t]);\n};\n\nZoominListView.prototype.remove = function(widget) {\n\tvar targetElement = widget.findFirstDomNode(),\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\tremoveElement = function() {\n\t\t\twidget.removeChildDomNodes();\n\t\t};\n\t// Abandon if the list entry isn't a DOM element (it might be a text node)\n\tif(!(targetElement instanceof Element)) {\n\t\tremoveElement();\n\t\treturn;\n\t}\n\t// Abandon if hidden\n\tif(targetElement.style.display != \"block\" ) {\n\t\tremoveElement();\n\t\treturn;\n\t}\n\t// Set up the tiddler that is being closed\n\t$tw.utils.addClass(targetElement,\"tc-storyview-zoomin-tiddler\");\n\t$tw.utils.setStyle(targetElement,[\n\t\t{display: \"block\"},\n\t\t{transformOrigin: \"50% 50%\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t{transition: \"none\"},\n\t\t{zIndex: \"0\"}\n\t]);\n\t// We'll move back to the previous or next element in the story\n\tvar toWidget = widget.previousSibling();\n\tif(!toWidget) {\n\t\ttoWidget = widget.nextSibling();\n\t}\n\tvar toWidgetDomNode = toWidget && toWidget.findFirstDomNode();\n\t// Set up the tiddler we're moving back in\n\tif(toWidgetDomNode) {\n\t\t$tw.utils.addClass(toWidgetDomNode,\"tc-storyview-zoomin-tiddler\");\n\t\t$tw.utils.setStyle(toWidgetDomNode,[\n\t\t\t{display: \"block\"},\n\t\t\t{transformOrigin: \"50% 50%\"},\n\t\t\t{transform: \"translateX(0px) translateY(0px) scale(10)\"},\n\t\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t\t{opacity: \"0\"},\n\t\t\t{zIndex: \"500\"}\n\t\t]);\n\t\tthis.currentTiddlerDomNode = toWidgetDomNode;\n\t}\n\t// Animate them both\n\t// Force layout\n\t$tw.utils.forceLayout(this.listWidget.parentDomNode);\n\t// First, the tiddler we're closing\n\t$tw.utils.setStyle(targetElement,[\n\t\t{transformOrigin: \"50% 50%\"},\n\t\t{transform: \"translateX(0px) translateY(0px) scale(0.1)\"},\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms \" + easing + \", opacity \" + duration + \"ms \" + easing},\n\t\t{opacity: \"0\"},\n\t\t{zIndex: \"0\"}\n\t]);\n\tsetTimeout(removeElement,duration);\n\t// Now the tiddler we're going back to\n\tif(toWidgetDomNode) {\n\t\t$tw.utils.setStyle(toWidgetDomNode,[\n\t\t\t{transform: \"translateX(0px) translateY(0px) scale(1)\"},\n\t\t\t{opacity: \"1\"}\n\t\t]);\n\t}\n\treturn true; // Indicate that we'll delete the DOM node\n};\n\nexports.zoomin = ZoominListView;\n\n})();\n",
"type": "application/javascript",
"module-type": "storyview"
},
"$:/core/modules/syncer.js": {
"title": "$:/core/modules/syncer.js",
"text": "/*\\\ntitle: $:/core/modules/syncer.js\ntype: application/javascript\nmodule-type: global\n\nThe syncer tracks changes to the store and synchronises them to a remote data store represented as a \"sync adaptor\"\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nDefaults\n*/\nSyncer.prototype.titleIsLoggedIn = \"$:/status/IsLoggedIn\";\nSyncer.prototype.titleIsAnonymous = \"$:/status/IsAnonymous\";\nSyncer.prototype.titleIsReadOnly = \"$:/status/IsReadOnly\";\nSyncer.prototype.titleUserName = \"$:/status/UserName\";\nSyncer.prototype.titleSyncFilter = \"$:/config/SyncFilter\";\nSyncer.prototype.titleSyncPollingInterval = \"$:/config/SyncPollingInterval\";\nSyncer.prototype.titleSyncDisableLazyLoading = \"$:/config/SyncDisableLazyLoading\";\nSyncer.prototype.titleSavedNotification = \"$:/language/Notifications/Save/Done\";\nSyncer.prototype.titleSyncThrottleInterval = \"$:/config/SyncThrottleInterval\";\nSyncer.prototype.taskTimerInterval = 1 * 1000; // Interval for sync timer\nSyncer.prototype.throttleInterval = 1 * 1000; // Defer saving tiddlers if they've changed in the last 1s...\nSyncer.prototype.errorRetryInterval = 5 * 1000; // Interval to retry after an error\nSyncer.prototype.fallbackInterval = 10 * 1000; // Unless the task is older than 10s\nSyncer.prototype.pollTimerInterval = 60 * 1000; // Interval for polling for changes from the adaptor\n\n/*\nInstantiate the syncer with the following options:\nsyncadaptor: reference to syncadaptor to be used\nwiki: wiki to be synced\n*/\nfunction Syncer(options) {\n\tvar self = this;\n\tthis.wiki = options.wiki;\n\t// Save parameters\n\tthis.syncadaptor = options.syncadaptor;\n\tthis.disableUI = !!options.disableUI;\n\tthis.titleIsLoggedIn = options.titleIsLoggedIn || this.titleIsLoggedIn;\n\tthis.titleUserName = options.titleUserName || this.titleUserName;\n\tthis.titleSyncFilter = options.titleSyncFilter || this.titleSyncFilter;\n\tthis.titleSavedNotification = options.titleSavedNotification || this.titleSavedNotification;\n\tthis.taskTimerInterval = options.taskTimerInterval || this.taskTimerInterval;\n\tthis.throttleInterval = options.throttleInterval || parseInt(this.wiki.getTiddlerText(this.titleSyncThrottleInterval,\"\"),10) || this.throttleInterval;\n\tthis.errorRetryInterval = options.errorRetryInterval || this.errorRetryInterval;\n\tthis.fallbackInterval = options.fallbackInterval || this.fallbackInterval;\n\tthis.pollTimerInterval = options.pollTimerInterval || parseInt(this.wiki.getTiddlerText(this.titleSyncPollingInterval,\"\"),10) || this.pollTimerInterval;\n\tthis.logging = \"logging\" in options ? options.logging : true;\n\t// Make a logger\n\tthis.logger = new $tw.utils.Logger(\"syncer\" + ($tw.browser ? \"-browser\" : \"\") + ($tw.node ? \"-server\" : \"\") + (this.syncadaptor.name ? (\"-\" + this.syncadaptor.name) : \"\"),{\n\t\tcolour: \"cyan\",\n\t\tenable: this.logging,\n\t\tsaveHistory: true\n\t});\n\t// Make another logger for connection errors\n\tthis.loggerConnection = new $tw.utils.Logger(\"syncer\" + ($tw.browser ? \"-browser\" : \"\") + ($tw.node ? \"-server\" : \"\") + (this.syncadaptor.name ? (\"-\" + this.syncadaptor.name) : \"\") + \"-connection\",{\n\t\tcolour: \"cyan\",\n\t\tenable: this.logging\n\t});\n\t// Ask the syncadaptor to use the main logger\n\tif(this.syncadaptor.setLoggerSaveBuffer) {\n\t\tthis.syncadaptor.setLoggerSaveBuffer(this.logger);\n\t}\n\t// Compile the dirty tiddler filter\n\tthis.filterFn = this.wiki.compileFilter(this.wiki.getTiddlerText(this.titleSyncFilter));\n\t// Record information for known tiddlers\n\tthis.readTiddlerInfo();\n\tthis.titlesToBeLoaded = {}; // Hashmap of titles of tiddlers that need loading from the server\n\tthis.titlesHaveBeenLazyLoaded = {}; // Hashmap of titles of tiddlers that have already been lazily loaded from the server\n\t// Timers\n\tthis.taskTimerId = null; // Timer for task dispatch\n\tthis.pollTimerId = null; // Timer for polling server\n\t// Number of outstanding requests\n\tthis.numTasksInProgress = 0;\n\t// Listen out for changes to tiddlers\n\tthis.wiki.addEventListener(\"change\",function(changes) {\n\t\t// Filter the changes to just include ones that are being synced\n\t\tvar filteredChanges = self.getSyncedTiddlers(function(callback) {\n\t\t\t$tw.utils.each(changes,function(change,title) {\n\t\t\t\tvar tiddler = self.wiki.tiddlerExists(title) && self.wiki.getTiddler(title);\n\t\t\t\tcallback(tiddler,title);\n\t\t\t});\n\t\t});\n\t\tif(filteredChanges.length > 0) {\n\t\t\tself.processTaskQueue();\n\t\t} else {\n\t\t\t// Look for deletions of tiddlers we're already syncing\t\n\t\t\tvar outstandingDeletion = false\n\t\t\t$tw.utils.each(changes,function(change,title,object) {\n\t\t\t\tif(change.deleted && $tw.utils.hop(self.tiddlerInfo,title)) {\n\t\t\t\t\toutstandingDeletion = true;\n\t\t\t\t}\n\t\t\t});\n\t\t\tif(outstandingDeletion) {\n\t\t\t\tself.processTaskQueue();\n\t\t\t}\n\t\t}\n\t});\n\t// Browser event handlers\n\tif($tw.browser && !this.disableUI) {\n\t\t// Set up our beforeunload handler\n\t\t$tw.addUnloadTask(function(event) {\n\t\t\tvar confirmationMessage;\n\t\t\tif(self.isDirty()) {\n\t\t\t\tconfirmationMessage = $tw.language.getString(\"UnsavedChangesWarning\");\n\t\t\t\tevent.returnValue = confirmationMessage; // Gecko\n\t\t\t}\n\t\t\treturn confirmationMessage;\n\t\t});\n\t\t// Listen out for login/logout/refresh events in the browser\n\t\t$tw.rootWidget.addEventListener(\"tm-login\",function() {\n\t\t\tself.handleLoginEvent();\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tm-logout\",function() {\n\t\t\tself.handleLogoutEvent();\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tm-server-refresh\",function() {\n\t\t\tself.handleRefreshEvent();\n\t\t});\n\t\t$tw.rootWidget.addEventListener(\"tm-copy-syncer-logs-to-clipboard\",function() {\n\t\t\t$tw.utils.copyToClipboard($tw.utils.getSystemInfo() + \"\\n\\nLog:\\n\" + self.logger.getBuffer());\n\t\t});\n\t}\n\t// Listen out for lazyLoad events\n\tif(!this.disableUI && $tw.wiki.getTiddlerText(this.titleSyncDisableLazyLoading) !== \"yes\") {\n\t\tthis.wiki.addEventListener(\"lazyLoad\",function(title) {\n\t\t\tself.handleLazyLoadEvent(title);\n\t\t});\t\t\n\t}\n\t// Get the login status\n\tthis.getStatus(function(err,isLoggedIn) {\n\t\t// Do a sync from the server\n\t\tself.syncFromServer();\n\t});\n}\n\n/*\nShow a generic network error alert\n*/\nSyncer.prototype.displayError = function(msg,err) {\n\tif(err === ($tw.language.getString(\"Error/XMLHttpRequest\") + \": 0\")) {\n\t\tthis.loggerConnection.alert($tw.language.getString(\"Error/NetworkErrorAlert\"));\n\t\tthis.logger.log(msg + \":\",err);\n\t} else {\n\t\tthis.logger.alert(msg + \":\",err);\n\t}\n};\n\n/*\nReturn an array of the tiddler titles that are subjected to syncing\n*/\nSyncer.prototype.getSyncedTiddlers = function(source) {\n\treturn this.filterFn.call(this.wiki,source);\n};\n\n/*\nReturn an array of the tiddler titles that are subjected to syncing\n*/\nSyncer.prototype.getTiddlerRevision = function(title) {\n\tif(this.syncadaptor && this.syncadaptor.getTiddlerRevision) {\n\t\treturn this.syncadaptor.getTiddlerRevision(title);\n\t} else {\n\t\treturn this.wiki.getTiddler(title).fields.revision;\t\n\t} \n};\n\n/*\nRead (or re-read) the latest tiddler info from the store\n*/\nSyncer.prototype.readTiddlerInfo = function() {\n\t// Hashmap by title of {revision:,changeCount:,adaptorInfo:}\n\t// \"revision\" is the revision of the tiddler last seen on the server, and \"changecount\" is the corresponding local changecount\n\tthis.tiddlerInfo = {};\n\t// Record information for known tiddlers\n\tvar self = this,\n\t\ttiddlers = this.getSyncedTiddlers();\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.wiki.tiddlerExists(title) && self.wiki.getTiddler(title);\n\t\tself.tiddlerInfo[title] = {\n\t\t\trevision: self.getTiddlerRevision(title),\n\t\t\tadaptorInfo: self.syncadaptor && self.syncadaptor.getTiddlerInfo(tiddler),\n\t\t\tchangeCount: self.wiki.getChangeCount(title)\n\t\t};\n\t});\n};\n\n/*\nChecks whether the wiki is dirty (ie the window shouldn't be closed)\n*/\nSyncer.prototype.isDirty = function() {\n\tthis.logger.log(\"Checking dirty status\");\n\t// Check tiddlers that are in the store and included in the filter function\n\tvar titles = this.getSyncedTiddlers();\n\tfor(var index=0; index<titles.length; index++) {\n\t\tvar title = titles[index],\n\t\t\ttiddlerInfo = this.tiddlerInfo[title];\n\t\tif(this.wiki.tiddlerExists(title)) {\n\t\t\tif(tiddlerInfo) {\n\t\t\t\t// If the tiddler is known on the server and has been modified locally then it needs to be saved to the server\n\t\t\t\tif($tw.wiki.getChangeCount(title) > tiddlerInfo.changeCount) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// If the tiddler isn't known on the server then it needs to be saved to the server\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\t// Check tiddlers that are known from the server but not currently in the store\n\ttitles = Object.keys(this.tiddlerInfo);\n\tfor(index=0; index<titles.length; index++) {\n\t\tif(!this.wiki.tiddlerExists(titles[index])) {\n\t\t\t// There must be a pending delete\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\n/*\nUpdate the document body with the class \"tc-dirty\" if the wiki has unsaved/unsynced changes\n*/\nSyncer.prototype.updateDirtyStatus = function() {\n\tif($tw.browser && !this.disableUI) {\n\t\tvar dirty = this.isDirty();\n\t\t$tw.utils.toggleClass(document.body,\"tc-dirty\",dirty);\n\t\tif(!dirty) {\n\t\t\tthis.loggerConnection.clearAlerts();\n\t\t}\n\t}\n};\n\n/*\nSave an incoming tiddler in the store, and updates the associated tiddlerInfo\n*/\nSyncer.prototype.storeTiddler = function(tiddlerFields) {\n\t// Save the tiddler\n\tvar tiddler = new $tw.Tiddler(tiddlerFields);\n\tthis.wiki.addTiddler(tiddler);\n\t// Save the tiddler revision and changeCount details\n\tthis.tiddlerInfo[tiddlerFields.title] = {\n\t\trevision: this.getTiddlerRevision(tiddlerFields.title),\n\t\tadaptorInfo: this.syncadaptor.getTiddlerInfo(tiddler),\n\t\tchangeCount: this.wiki.getChangeCount(tiddlerFields.title)\n\t};\n};\n\nSyncer.prototype.getStatus = function(callback) {\n\tvar self = this;\n\t// Check if the adaptor supports getStatus()\n\tif(this.syncadaptor && this.syncadaptor.getStatus) {\n\t\t// Mark us as not logged in\n\t\tthis.wiki.addTiddler({title: this.titleIsLoggedIn,text: \"no\"});\n\t\t// Get login status\n\t\tthis.syncadaptor.getStatus(function(err,isLoggedIn,username,isReadOnly,isAnonymous) {\n\t\t\tif(err) {\n\t\t\t\tself.logger.alert(err);\n\t\t\t} else {\n\t\t\t\t// Set the various status tiddlers\n\t\t\t\tself.wiki.addTiddler({title: self.titleIsReadOnly,text: isReadOnly ? \"yes\" : \"no\"});\n\t\t\t\tself.wiki.addTiddler({title: self.titleIsAnonymous,text: isAnonymous ? \"yes\" : \"no\"});\n\t\t\t\tself.wiki.addTiddler({title: self.titleIsLoggedIn,text: isLoggedIn ? \"yes\" : \"no\"});\n\t\t\t\tif(isLoggedIn) {\n\t\t\t\t\tself.wiki.addTiddler({title: self.titleUserName,text: username || \"\"});\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Invoke the callback\n\t\t\tif(callback) {\n\t\t\t\tcallback(err,isLoggedIn,username);\n\t\t\t}\n\t\t});\n\t} else {\n\t\tcallback(null,true,\"UNAUTHENTICATED\");\n\t}\n};\n\n/*\nSynchronise from the server by reading the skinny tiddler list and queuing up loads for any tiddlers that we don't already have up to date\n*/\nSyncer.prototype.syncFromServer = function() {\n\tvar self = this,\n\t\tcancelNextSync = function() {\n\t\t\tif(self.pollTimerId) {\n\t\t\t\tclearTimeout(self.pollTimerId);\n\t\t\t\tself.pollTimerId = null;\n\t\t\t}\n\t\t},\n\t\ttriggerNextSync = function() {\n\t\t\tself.pollTimerId = setTimeout(function() {\n\t\t\t\tself.pollTimerId = null;\n\t\t\t\tself.syncFromServer.call(self);\n\t\t\t},self.pollTimerInterval);\n\t\t};\n\tif(this.syncadaptor && this.syncadaptor.getUpdatedTiddlers) {\n\t\tthis.logger.log(\"Retrieving updated tiddler list\");\n\t\tcancelNextSync();\n\t\tthis.syncadaptor.getUpdatedTiddlers(self,function(err,updates) {\n\t\t\ttriggerNextSync();\n\t\t\tif(err) {\n\t\t\t\tself.displayError($tw.language.getString(\"Error/RetrievingSkinny\"),err);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(updates) {\n\t\t\t\t$tw.utils.each(updates.modifications,function(title) {\n\t\t\t\t\tself.titlesToBeLoaded[title] = true;\n\t\t\t\t});\n\t\t\t\t$tw.utils.each(updates.deletions,function(title) {\n\t\t\t\t\tdelete self.tiddlerInfo[title];\n\t\t\t\t\tself.logger.log(\"Deleting tiddler missing from server:\",title);\n\t\t\t\t\tself.wiki.deleteTiddler(title);\n\t\t\t\t});\n\t\t\t\tif(updates.modifications.length > 0 || updates.deletions.length > 0) {\n\t\t\t\t\tself.processTaskQueue();\n\t\t\t\t}\t\t\t\t\n\t\t\t}\n\t\t});\n\t} else if(this.syncadaptor && this.syncadaptor.getSkinnyTiddlers) {\n\t\tthis.logger.log(\"Retrieving skinny tiddler list\");\n\t\tcancelNextSync();\n\t\tthis.syncadaptor.getSkinnyTiddlers(function(err,tiddlers) {\n\t\t\ttriggerNextSync();\n\t\t\t// Check for errors\n\t\t\tif(err) {\n\t\t\t\tself.displayError($tw.language.getString(\"Error/RetrievingSkinny\"),err);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t// Keep track of which tiddlers we already know about have been reported this time\n\t\t\tvar previousTitles = Object.keys(self.tiddlerInfo);\n\t\t\t// Process each incoming tiddler\n\t\t\tfor(var t=0; t<tiddlers.length; t++) {\n\t\t\t\t// Get the incoming tiddler fields, and the existing tiddler\n\t\t\t\tvar tiddlerFields = tiddlers[t],\n\t\t\t\t\tincomingRevision = tiddlerFields.revision + \"\",\n\t\t\t\t\ttiddler = self.wiki.tiddlerExists(tiddlerFields.title) && self.wiki.getTiddler(tiddlerFields.title),\n\t\t\t\t\ttiddlerInfo = self.tiddlerInfo[tiddlerFields.title],\n\t\t\t\t\tcurrRevision = tiddlerInfo ? tiddlerInfo.revision : null,\n\t\t\t\t\tindexInPreviousTitles = previousTitles.indexOf(tiddlerFields.title);\n\t\t\t\tif(indexInPreviousTitles !== -1) {\n\t\t\t\t\tpreviousTitles.splice(indexInPreviousTitles,1);\n\t\t\t\t}\n\t\t\t\t// Ignore the incoming tiddler if it's the same as the revision we've already got\n\t\t\t\tif(currRevision !== incomingRevision) {\n\t\t\t\t\t// Only load the skinny version if we don't already have a fat version of the tiddler\n\t\t\t\t\tif(!tiddler || tiddler.fields.text === undefined) {\n\t\t\t\t\t\tself.storeTiddler(tiddlerFields);\n\t\t\t\t\t}\n\t\t\t\t\t// Do a full load of this tiddler\n\t\t\t\t\tself.titlesToBeLoaded[tiddlerFields.title] = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Delete any tiddlers that were previously reported but missing this time\n\t\t\t$tw.utils.each(previousTitles,function(title) {\n\t\t\t\tdelete self.tiddlerInfo[title];\n\t\t\t\tself.logger.log(\"Deleting tiddler missing from server:\",title);\n\t\t\t\tself.wiki.deleteTiddler(title);\n\t\t\t});\n\t\t\tself.processTaskQueue();\n\t\t});\n\t}\n};\n\n/*\nForce load a tiddler from the server\n*/\nSyncer.prototype.enqueueLoadTiddler = function(title) {\n\tthis.titlesToBeLoaded[title] = true;\n\tthis.processTaskQueue();\n};\n\n/*\nLazily load a skinny tiddler if we can\n*/\nSyncer.prototype.handleLazyLoadEvent = function(title) {\n\t// Ignore if the syncadaptor doesn't handle it\n\tif(!this.syncadaptor.supportsLazyLoading) {\n\t\treturn;\n\t}\n\t// Don't lazy load the same tiddler twice\n\tif(!this.titlesHaveBeenLazyLoaded[title]) {\n\t\t// Don't lazy load if the tiddler isn't included in the sync filter\n\t\tif(this.getSyncedTiddlers().indexOf(title) !== -1) {\n\t\t\t// Mark the tiddler as needing loading, and having already been lazily loaded\n\t\t\tthis.titlesToBeLoaded[title] = true;\n\t\t\tthis.titlesHaveBeenLazyLoaded[title] = true;\n\t\t}\n\t}\n};\n\n/*\nDispay a password prompt and allow the user to login\n*/\nSyncer.prototype.handleLoginEvent = function() {\n\tvar self = this;\n\tthis.getStatus(function(err,isLoggedIn,username) {\n\t\tif(!err && !isLoggedIn) {\n\t\t\t$tw.passwordPrompt.createPrompt({\n\t\t\t\tserviceName: $tw.language.getString(\"LoginToTiddlySpace\"),\n\t\t\t\tcallback: function(data) {\n\t\t\t\t\tself.login(data.username,data.password,function(err,isLoggedIn) {\n\t\t\t\t\t\tself.syncFromServer();\n\t\t\t\t\t});\n\t\t\t\t\treturn true; // Get rid of the password prompt\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n};\n\n/*\nAttempt to login to TiddlyWeb.\n\tusername: username\n\tpassword: password\n\tcallback: invoked with arguments (err,isLoggedIn)\n*/\nSyncer.prototype.login = function(username,password,callback) {\n\tthis.logger.log(\"Attempting to login as\",username);\n\tvar self = this;\n\tif(this.syncadaptor.login) {\n\t\tthis.syncadaptor.login(username,password,function(err) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tself.getStatus(function(err,isLoggedIn,username) {\n\t\t\t\tif(callback) {\n\t\t\t\t\tcallback(err,isLoggedIn);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t} else {\n\t\tcallback(null,true);\n\t}\n};\n\n/*\nAttempt to log out of TiddlyWeb\n*/\nSyncer.prototype.handleLogoutEvent = function() {\n\tthis.logger.log(\"Attempting to logout\");\n\tvar self = this;\n\tif(this.syncadaptor.logout) {\n\t\tthis.syncadaptor.logout(function(err) {\n\t\t\tif(err) {\n\t\t\t\tself.logger.alert(err);\n\t\t\t} else {\n\t\t\t\tself.getStatus();\n\t\t\t}\n\t\t});\n\t}\n};\n\n/*\nImmediately refresh from the server\n*/\nSyncer.prototype.handleRefreshEvent = function() {\n\tthis.syncFromServer();\n};\n\n/*\nProcess the next task\n*/\nSyncer.prototype.processTaskQueue = function() {\n\tvar self = this;\n\t// Only process a task if the sync adaptor is fully initialised and we're not already performing\n\t// a task. If we are already performing a task then we'll dispatch the next one when it completes\n\tif((!this.syncadaptor.isReady || this.syncadaptor.isReady()) && this.numTasksInProgress === 0) {\n\t\t// Choose the next task to perform\n\t\tvar task = this.chooseNextTask();\n\t\t// Perform the task if we had one\n\t\tif(typeof task === \"object\" && task !== null) {\n\t\t\tthis.numTasksInProgress += 1;\n\t\t\ttask.run(function(err) {\n\t\t\t\tself.numTasksInProgress -= 1;\n\t\t\t\tif(err) {\n\t\t\t\t\tself.displayError(\"Sync error while processing \" + task.type + \" of '\" + task.title + \"'\",err);\n\t\t\t\t\tself.updateDirtyStatus();\n\t\t\t\t\tself.triggerTimeout(self.errorRetryInterval);\n\t\t\t\t} else {\n\t\t\t\t\tself.updateDirtyStatus();\n\t\t\t\t\t// Process the next task\n\t\t\t\t\tself.processTaskQueue.call(self);\t\t\t\t\t\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\t// No task is ready so update the status\n\t\t\tthis.updateDirtyStatus();\n\t\t\t// And trigger a timeout if there is a pending task\n\t\t\tif(task === true) {\n\t\t\t\tthis.triggerTimeout();\t\t\t\t\n\t\t\t}\n\t\t}\n\t} else {\n\t\tthis.updateDirtyStatus();\t\t\n\t}\n};\n\nSyncer.prototype.triggerTimeout = function(interval) {\n\tvar self = this;\n\tif(!this.taskTimerId) {\n\t\tthis.taskTimerId = setTimeout(function() {\n\t\t\tself.taskTimerId = null;\n\t\t\tself.processTaskQueue.call(self);\n\t\t},interval || self.taskTimerInterval);\n\t}\n};\n\n/*\nChoose the next sync task. We prioritise saves, then deletes, then loads from the server\n\nReturns either a task object, null if there's no upcoming tasks, or the boolean true if there are pending tasks that aren't yet due\n*/\nSyncer.prototype.chooseNextTask = function() {\n\tvar thresholdLastSaved = (new Date()) - this.throttleInterval,\n\t\thavePending = null;\n\t// First we look for tiddlers that have been modified locally and need saving back to the server\n\tvar titles = this.getSyncedTiddlers();\n\tfor(var index=0; index<titles.length; index++) {\n\t\tvar title = titles[index],\n\t\t\ttiddler = this.wiki.tiddlerExists(title) && this.wiki.getTiddler(title),\n\t\t\ttiddlerInfo = this.tiddlerInfo[title];\n\t\tif(tiddler) {\n\t\t\t// If the tiddler is not known on the server, or has been modified locally no more recently than the threshold then it needs to be saved to the server\n\t\t\tvar hasChanged = !tiddlerInfo || $tw.wiki.getChangeCount(title) > tiddlerInfo.changeCount,\n\t\t\t\tisReadyToSave = !tiddlerInfo || !tiddlerInfo.timestampLastSaved || tiddlerInfo.timestampLastSaved < thresholdLastSaved;\n\t\t\tif(hasChanged) {\n\t\t\t\tif(isReadyToSave) {\n\t\t\t\t\treturn new SaveTiddlerTask(this,title); \t\t\t\t\t\n\t\t\t\t} else {\n\t\t\t\t\thavePending = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t// Second, we check tiddlers that are known from the server but not currently in the store, and so need deleting on the server\n\ttitles = Object.keys(this.tiddlerInfo);\n\tfor(index=0; index<titles.length; index++) {\n\t\ttitle = titles[index];\n\t\ttiddlerInfo = this.tiddlerInfo[title];\n\t\ttiddler = this.wiki.tiddlerExists(title) && this.wiki.getTiddler(title);\n\t\tif(!tiddler) {\n\t\t\treturn new DeleteTiddlerTask(this,title);\n\t\t}\n\t}\n\t// Check for tiddlers that need loading\n\ttitle = Object.keys(this.titlesToBeLoaded)[0];\n\tif(title) {\n\t\tdelete this.titlesToBeLoaded[title];\n\t\treturn new LoadTiddlerTask(this,title);\n\t}\n\t// No tasks are ready\n\treturn havePending;\n};\n\nfunction SaveTiddlerTask(syncer,title) {\n\tthis.syncer = syncer;\n\tthis.title = title;\n\tthis.type = \"save\";\n}\n\nSaveTiddlerTask.prototype.run = function(callback) {\n\tvar self = this,\n\t\tchangeCount = this.syncer.wiki.getChangeCount(this.title),\n\t\ttiddler = this.syncer.wiki.tiddlerExists(this.title) && this.syncer.wiki.getTiddler(this.title);\n\tthis.syncer.logger.log(\"Dispatching 'save' task:\",this.title);\n\tif(tiddler) {\n\t\tthis.syncer.syncadaptor.saveTiddler(tiddler,function(err,adaptorInfo,revision) {\n\t\t\t// If there's an error, exit without changing any internal state\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\t// Adjust the info stored about this tiddler\n\t\t\tself.syncer.tiddlerInfo[self.title] = {\n\t\t\t\tchangeCount: changeCount,\n\t\t\t\tadaptorInfo: adaptorInfo,\n\t\t\t\trevision: revision,\n\t\t\t\ttimestampLastSaved: new Date()\n\t\t\t};\n\t\t\t// Invoke the callback\n\t\t\tcallback(null);\n\t\t});\n\t} else {\n\t\tthis.syncer.logger.log(\" Not Dispatching 'save' task:\",this.title,\"tiddler does not exist\");\n\t\t$tw.utils.nextTick(callback(null));\n\t}\n};\n\nfunction DeleteTiddlerTask(syncer,title) {\n\tthis.syncer = syncer;\n\tthis.title = title;\n\tthis.type = \"delete\";\n}\n\nDeleteTiddlerTask.prototype.run = function(callback) {\n\tvar self = this;\n\tthis.syncer.logger.log(\"Dispatching 'delete' task:\",this.title);\n\tthis.syncer.syncadaptor.deleteTiddler(this.title,function(err) {\n\t\t// If there's an error, exit without changing any internal state\n\t\tif(err) {\n\t\t\treturn callback(err);\n\t\t}\n\t\t// Remove the info stored about this tiddler\n\t\tdelete self.syncer.tiddlerInfo[self.title];\n\t\t// Invoke the callback\n\t\tcallback(null);\n\t},{\n\t\ttiddlerInfo: self.syncer.tiddlerInfo[this.title]\n\t});\n};\n\nfunction LoadTiddlerTask(syncer,title) {\n\tthis.syncer = syncer;\n\tthis.title = title;\n\tthis.type = \"load\";\n}\n\nLoadTiddlerTask.prototype.run = function(callback) {\n\tvar self = this;\n\tthis.syncer.logger.log(\"Dispatching 'load' task:\",this.title);\n\tthis.syncer.syncadaptor.loadTiddler(this.title,function(err,tiddlerFields) {\n\t\t// If there's an error, exit without changing any internal state\n\t\tif(err) {\n\t\t\treturn callback(err);\n\t\t}\n\t\t// Update the info stored about this tiddler\n\t\tif(tiddlerFields) {\n\t\t\tself.syncer.storeTiddler(tiddlerFields);\n\t\t}\n\t\t// Invoke the callback\n\t\tcallback(null);\n\t});\n};\n\nexports.Syncer = Syncer;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/tiddler.js": {
"title": "$:/core/modules/tiddler.js",
"text": "/*\\\ntitle: $:/core/modules/tiddler.js\ntype: application/javascript\nmodule-type: tiddlermethod\n\nExtension methods for the $tw.Tiddler object (constructor and methods required at boot time are in boot/boot.js)\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.hasTag = function(tag) {\n\treturn this.fields.tags && this.fields.tags.indexOf(tag) !== -1;\n};\n\nexports.isPlugin = function() {\n\treturn this.fields.type === \"application/json\" && this.hasField(\"plugin-type\");\n};\n\nexports.isDraft = function() {\n\treturn this.hasField(\"draft.of\");\n};\n\nexports.getFieldString = function(field) {\n\tvar value = this.fields[field];\n\t// Check for a missing field\n\tif(value === undefined || value === null) {\n\t\treturn \"\";\n\t}\n\t// Parse the field with the associated module (if any)\n\tvar fieldModule = $tw.Tiddler.fieldModules[field];\n\tif(fieldModule && fieldModule.stringify) {\n\t\treturn fieldModule.stringify.call(this,value);\n\t} else {\n\t\treturn value.toString();\n\t}\n};\n\n/*\nGet the value of a field as a list\n*/\nexports.getFieldList = function(field) {\n\tvar value = this.fields[field];\n\t// Check for a missing field\n\tif(value === undefined || value === null) {\n\t\treturn [];\n\t}\n\treturn $tw.utils.parseStringArray(value);\n};\n\n/*\nGet all the fields as a hashmap of strings. Options:\n\texclude: an array of field names to exclude\n*/\nexports.getFieldStrings = function(options) {\n\toptions = options || {};\n\tvar exclude = options.exclude || [];\n\tvar fields = {};\n\tfor(var field in this.fields) {\n\t\tif($tw.utils.hop(this.fields,field)) {\n\t\t\tif(exclude.indexOf(field) === -1) {\n\t\t\t\tfields[field] = this.getFieldString(field);\n\t\t\t}\n\t\t}\n\t}\n\treturn fields;\n};\n\n/*\nGet all the fields as a name:value block. Options:\n\texclude: an array of field names to exclude\n*/\nexports.getFieldStringBlock = function(options) {\n\toptions = options || {};\n\tvar exclude = options.exclude || [],\n\t\tfields = Object.keys(this.fields).sort(),\n\t\tresult = [];\n\tfor(var t=0; t<fields.length; t++) {\n\t\tvar field = fields[t];\n\t\tif(exclude.indexOf(field) === -1) {\n\t\t\tresult.push(field + \": \" + this.getFieldString(field));\n\t\t}\n\t}\n\treturn result.join(\"\\n\");\n};\n\nexports.getFieldDay = function(field) {\n\tif(this.cache && this.cache.day && $tw.utils.hop(this.cache.day,field) ) {\n\t\treturn this.cache.day[field];\n\t}\n\tvar day = \"\";\n\tif(this.fields[field]) {\n\t\tday = (new Date($tw.utils.parseDate(this.fields[field]))).setHours(0,0,0,0);\n\t}\n\tthis.cache.day = this.cache.day || {};\n\tthis.cache.day[field] = day;\n\treturn day;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "tiddlermethod"
},
"$:/core/modules/upgraders/plugins.js": {
"title": "$:/core/modules/upgraders/plugins.js",
"text": "/*\\\ntitle: $:/core/modules/upgraders/plugins.js\ntype: application/javascript\nmodule-type: upgrader\n\nUpgrader module that checks that plugins are newer than any already installed version\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar UPGRADE_LIBRARY_TITLE = \"$:/UpgradeLibrary\";\n\nvar BLOCKED_PLUGINS = {\n\t\"$:/themes/tiddlywiki/stickytitles\": {\n\t\tversions: [\"*\"]\n\t},\n\t\"$:/plugins/tiddlywiki/fullscreen\": {\n\t\tversions: [\"*\"]\n\t}\n};\n\nexports.upgrade = function(wiki,titles,tiddlers) {\n\tvar self = this,\n\t\tmessages = {},\n\t\tupgradeLibrary,\n\t\tgetLibraryTiddler = function(title) {\n\t\t\tif(!upgradeLibrary) {\n\t\t\t\tupgradeLibrary = wiki.getTiddlerData(UPGRADE_LIBRARY_TITLE,{});\n\t\t\t\tupgradeLibrary.tiddlers = upgradeLibrary.tiddlers || {};\n\t\t\t}\n\t\t\treturn upgradeLibrary.tiddlers[title];\n\t\t};\n\n\t// Go through all the incoming tiddlers\n\t$tw.utils.each(titles,function(title) {\n\t\tvar incomingTiddler = tiddlers[title];\n\t\t// Check if we're dealing with a plugin\n\t\tif(incomingTiddler && incomingTiddler[\"plugin-type\"]) {\n\t\t\t// Check whether the plugin contains JS modules\n\t\t\tvar requiresReload = $tw.wiki.doesPluginInfoRequireReload(JSON.parse(incomingTiddler.text)) ? ($tw.wiki.getTiddlerText(\"$:/language/ControlPanel/Plugins/PluginWillRequireReload\") + \" \") : \"\";\n\t\t\tmessages[title] = requiresReload;\n\t\t\tif(incomingTiddler.version) {\n\t\t\t\t// Upgrade the incoming plugin if it is in the upgrade library\n\t\t\t\tvar libraryTiddler = getLibraryTiddler(title);\n\t\t\t\tif(libraryTiddler && libraryTiddler[\"plugin-type\"] && libraryTiddler.version) {\n\t\t\t\t\ttiddlers[title] = libraryTiddler;\n\t\t\t\t\tmessages[title] = requiresReload + $tw.language.getString(\"Import/Upgrader/Plugins/Upgraded\",{variables: {incoming: incomingTiddler.version, upgraded: libraryTiddler.version}});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\t// Suppress the incoming plugin if it is older than the currently installed one\n\t\t\t\tvar existingTiddler = wiki.getTiddler(title);\n\t\t\t\tif(existingTiddler && existingTiddler.hasField(\"plugin-type\") && existingTiddler.hasField(\"version\")) {\n\t\t\t\t\t// Reject the incoming plugin by blanking all its fields\n\t\t\t\t\tif($tw.utils.checkVersions(existingTiddler.fields.version,incomingTiddler.version)) {\n\t\t\t\t\t\ttiddlers[title] = Object.create(null);\n\t\t\t\t\t\tmessages[title] = requiresReload + $tw.language.getString(\"Import/Upgrader/Plugins/Suppressed/Version\",{variables: {incoming: incomingTiddler.version, existing: existingTiddler.fields.version}});\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Check whether the plugin is on the blocked list\n\t\t\tvar blockInfo = BLOCKED_PLUGINS[title];\n\t\t\tif(blockInfo) {\n\t\t\t\tif(blockInfo.versions.indexOf(\"*\") !== -1 || (incomingTiddler.version && blockInfo.versions.indexOf(incomingTiddler.version) !== -1)) {\n\t\t\t\t\ttiddlers[title] = Object.create(null);\n\t\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/Plugins/Suppressed/Incompatible\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\treturn messages;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "upgrader"
},
"$:/core/modules/upgraders/system.js": {
"title": "$:/core/modules/upgraders/system.js",
"text": "/*\\\ntitle: $:/core/modules/upgraders/system.js\ntype: application/javascript\nmodule-type: upgrader\n\nUpgrader module that suppresses certain system tiddlers that shouldn't be imported\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar DONT_IMPORT_LIST = [\"$:/StoryList\",\"$:/HistoryList\"],\n\tDONT_IMPORT_PREFIX_LIST = [\"$:/temp/\",\"$:/state/\",\"$:/Import\"],\n\tWARN_IMPORT_PREFIX_LIST = [\"$:/core/modules/\"];\n\nexports.upgrade = function(wiki,titles,tiddlers) {\n\tvar self = this,\n\t\tmessages = {},\n\t\tshowAlert = false;\n\t// Check for tiddlers on our list\n\t$tw.utils.each(titles,function(title) {\n\t\tif(DONT_IMPORT_LIST.indexOf(title) !== -1) {\n\t\t\ttiddlers[title] = Object.create(null);\n\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/System/Suppressed\");\n\t\t} else {\n\t\t\tfor(var t=0; t<DONT_IMPORT_PREFIX_LIST.length; t++) {\n\t\t\t\tvar prefix = DONT_IMPORT_PREFIX_LIST[t];\n\t\t\t\tif(title.substr(0,prefix.length) === prefix) {\n\t\t\t\t\ttiddlers[title] = Object.create(null);\n\t\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/State/Suppressed\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor(var t=0; t<WARN_IMPORT_PREFIX_LIST.length; t++) {\n\t\t\t\tvar prefix = WARN_IMPORT_PREFIX_LIST[t];\n\t\t\t\tif(title.substr(0,prefix.length) === prefix && wiki.isShadowTiddler(title)) {\n\t\t\t\t\tshowAlert = true;\n\t\t\t\t\tmessages[title] = $tw.language.getString(\"Import/Upgrader/System/Warning\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\tif(showAlert) {\n\t\tvar logger = new $tw.utils.Logger(\"import\");\n\t\tlogger.alert($tw.language.getString(\"Import/Upgrader/System/Alert\"));\n\t}\n\treturn messages;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "upgrader"
},
"$:/core/modules/upgraders/themetweaks.js": {
"title": "$:/core/modules/upgraders/themetweaks.js",
"text": "/*\\\ntitle: $:/core/modules/upgraders/themetweaks.js\ntype: application/javascript\nmodule-type: upgrader\n\nUpgrader module that handles the change in theme tweak storage introduced in 5.0.14-beta.\n\nPreviously, theme tweaks were stored in two data tiddlers:\n\n* $:/themes/tiddlywiki/vanilla/metrics\n* $:/themes/tiddlywiki/vanilla/settings\n\nNow, each tweak is stored in its own separate tiddler.\n\nThis upgrader copies any values from the old format to the new. The old data tiddlers are not deleted in case they have been used to store additional indexes.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar MAPPINGS = {\n\t\"$:/themes/tiddlywiki/vanilla/metrics\": {\n\t\t\"fontsize\": \"$:/themes/tiddlywiki/vanilla/metrics/fontsize\",\n\t\t\"lineheight\": \"$:/themes/tiddlywiki/vanilla/metrics/lineheight\",\n\t\t\"storyleft\": \"$:/themes/tiddlywiki/vanilla/metrics/storyleft\",\n\t\t\"storytop\": \"$:/themes/tiddlywiki/vanilla/metrics/storytop\",\n\t\t\"storyright\": \"$:/themes/tiddlywiki/vanilla/metrics/storyright\",\n\t\t\"storywidth\": \"$:/themes/tiddlywiki/vanilla/metrics/storywidth\",\n\t\t\"tiddlerwidth\": \"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\"\n\t},\n\t\"$:/themes/tiddlywiki/vanilla/settings\": {\n\t\t\"fontfamily\": \"$:/themes/tiddlywiki/vanilla/settings/fontfamily\"\n\t}\n};\n\nexports.upgrade = function(wiki,titles,tiddlers) {\n\tvar self = this,\n\t\tmessages = {};\n\t// Check for tiddlers on our list\n\t$tw.utils.each(titles,function(title) {\n\t\tvar mapping = MAPPINGS[title];\n\t\tif(mapping) {\n\t\t\tvar tiddler = new $tw.Tiddler(tiddlers[title]),\n\t\t\t\ttiddlerData = wiki.getTiddlerDataCached(tiddler,{});\n\t\t\tfor(var index in mapping) {\n\t\t\t\tvar mappedTitle = mapping[index];\n\t\t\t\tif(!tiddlers[mappedTitle] || tiddlers[mappedTitle].title !== mappedTitle) {\n\t\t\t\t\ttiddlers[mappedTitle] = {\n\t\t\t\t\t\ttitle: mappedTitle,\n\t\t\t\t\t\ttext: tiddlerData[index]\n\t\t\t\t\t};\n\t\t\t\t\tmessages[mappedTitle] = $tw.language.getString(\"Import/Upgrader/ThemeTweaks/Created\",{variables: {\n\t\t\t\t\t\tfrom: title + \"##\" + index\n\t\t\t\t\t}});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\treturn messages;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "upgrader"
},
"$:/core/modules/utils/base64-utf8/base64-utf8.module.js": {
"text": "(function(){// From https://gist.github.com/Nijikokun/5192472\n//\n// UTF8 Module\n//\n// Cleaner and modularized utf-8 encoding and decoding library for javascript.\n//\n// copyright: MIT\n// author: Nijiko Yonskai, @nijikokun, nijikokun@gmail.com\n!function(r,e,o,t){void 0!==o.module&&o.module.exports?o.module.exports=e.apply(o):void 0!==o.define&&\"function\"===o.define&&o.define.amd?define(\"utf8\",[],e):o.utf8=e.apply(o)}(0,function(){return{encode:function(r){if(\"string\"!=typeof r)return r;r=r.replace(/\\r\\n/g,\"\\n\");for(var e,o=\"\",t=0;t<r.length;t++)(e=r.charCodeAt(t))<128?o+=String.fromCharCode(e):e>127&&e<2048?(o+=String.fromCharCode(e>>6|192),o+=String.fromCharCode(63&e|128)):(o+=String.fromCharCode(e>>12|224),o+=String.fromCharCode(e>>6&63|128),o+=String.fromCharCode(63&e|128));return o},decode:function(r){if(\"string\"!=typeof r)return r;for(var e=\"\",o=0,t=0;o<r.length;)(t=r.charCodeAt(o))<128?(e+=String.fromCharCode(t),o++):t>191&&t<224?(e+=String.fromCharCode((31&t)<<6|63&r.charCodeAt(o+1)),o+=2):(e+=String.fromCharCode((15&t)<<12|(63&r.charCodeAt(o+1))<<6|63&r.charCodeAt(o+2)),o+=3);return e}}},this),function(r,e,o,t){if(void 0!==o.module&&o.module.exports){if(t&&o.require)for(var n=0;n<t.length;n++)o[t[n]]=o.require(t[n]);o.module.exports=e.apply(o)}else void 0!==o.define&&\"function\"===o.define&&o.define.amd?define(\"base64\",t||[],e):o.base64=e.apply(o)}(0,function(r){var e=r||this.utf8,o=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";return{encode:function(r){if(void 0===e)throw{error:\"MissingMethod\",message:\"UTF8 Module is missing.\"};if(\"string\"!=typeof r)return r;r=e.encode(r);for(var t,n,i,d,f,a,h,c=\"\",u=0;u<r.length;)d=(t=r.charCodeAt(u++))>>2,f=(3&t)<<4|(n=r.charCodeAt(u++))>>4,a=(15&n)<<2|(i=r.charCodeAt(u++))>>6,h=63&i,isNaN(n)?a=h=64:isNaN(i)&&(h=64),c+=o.charAt(d)+o.charAt(f)+o.charAt(a)+o.charAt(h);return c},decode:function(r){if(void 0===e)throw{error:\"MissingMethod\",message:\"UTF8 Module is missing.\"};if(\"string\"!=typeof r)return r;r=r.replace(/[^A-Za-z0-9\\+\\/\\=]/g,\"\");for(var t,n,i,d,f,a,h=\"\",c=0;c<r.length;)t=o.indexOf(r.charAt(c++))<<2|(d=o.indexOf(r.charAt(c++)))>>4,n=(15&d)<<4|(f=o.indexOf(r.charAt(c++)))>>2,i=(3&f)<<6|(a=o.indexOf(r.charAt(c++))),h+=String.fromCharCode(t),64!=f&&(h+=String.fromCharCode(n)),64!=a&&(h+=String.fromCharCode(i));return e.decode(h)}}},this,[\"utf8\"]);}).call(exports);",
"type": "application/javascript",
"title": "$:/core/modules/utils/base64-utf8/base64-utf8.module.js",
"module-type": "library"
},
"$:/core/modules/utils/crypto.js": {
"title": "$:/core/modules/utils/crypto.js",
"text": "/*\\\ntitle: $:/core/modules/utils/crypto.js\ntype: application/javascript\nmodule-type: utils\n\nUtility functions related to crypto.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nLook for an encrypted store area in the text of a TiddlyWiki file\n*/\nexports.extractEncryptedStoreArea = function(text) {\n\tvar encryptedStoreAreaStartMarker = \"<pre id=\\\"encryptedStoreArea\\\" type=\\\"text/plain\\\" style=\\\"display:none;\\\">\",\n\t\tencryptedStoreAreaStart = text.indexOf(encryptedStoreAreaStartMarker);\n\tif(encryptedStoreAreaStart !== -1) {\n\t\tvar encryptedStoreAreaEnd = text.indexOf(\"</pre>\",encryptedStoreAreaStart);\n\t\tif(encryptedStoreAreaEnd !== -1) {\n\t\t\treturn $tw.utils.htmlDecode(text.substring(encryptedStoreAreaStart + encryptedStoreAreaStartMarker.length,encryptedStoreAreaEnd-1));\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nAttempt to extract the tiddlers from an encrypted store area using the current password. If the password is not provided then the password in the password store will be used\n*/\nexports.decryptStoreArea = function(encryptedStoreArea,password) {\n\tvar decryptedText = $tw.crypto.decrypt(encryptedStoreArea,password);\n\tif(decryptedText) {\n\t\tvar json = JSON.parse(decryptedText),\n\t\t\ttiddlers = [];\n\t\tfor(var title in json) {\n\t\t\tif(title !== \"$:/isEncrypted\") {\n\t\t\t\ttiddlers.push(json[title]);\n\t\t\t}\n\t\t}\n\t\treturn tiddlers;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n\n/*\nAttempt to extract the tiddlers from an encrypted store area using the current password. If that fails, the user is prompted for a password.\nencryptedStoreArea: text of the TiddlyWiki encrypted store area\ncallback: function(tiddlers) called with the array of decrypted tiddlers\n\nThe following configuration settings are supported:\n\n$tw.config.usePasswordVault: causes any password entered by the user to also be put into the system password vault\n*/\nexports.decryptStoreAreaInteractive = function(encryptedStoreArea,callback,options) {\n\t// Try to decrypt with the current password\n\tvar tiddlers = $tw.utils.decryptStoreArea(encryptedStoreArea);\n\tif(tiddlers) {\n\t\tcallback(tiddlers);\n\t} else {\n\t\t// Prompt for a new password and keep trying\n\t\t$tw.passwordPrompt.createPrompt({\n\t\t\tserviceName: \"Enter a password to decrypt the imported TiddlyWiki\",\n\t\t\tnoUserName: true,\n\t\t\tcanCancel: true,\n\t\t\tsubmitText: \"Decrypt\",\n\t\t\tcallback: function(data) {\n\t\t\t\t// Exit if the user cancelled\n\t\t\t\tif(!data) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t// Attempt to decrypt the tiddlers\n\t\t\t\tvar tiddlers = $tw.utils.decryptStoreArea(encryptedStoreArea,data.password);\n\t\t\t\tif(tiddlers) {\n\t\t\t\t\tif($tw.config.usePasswordVault) {\n\t\t\t\t\t\t$tw.crypto.setPassword(data.password);\n\t\t\t\t\t}\n\t\t\t\t\tcallback(tiddlers);\n\t\t\t\t\t// Exit and remove the password prompt\n\t\t\t\t\treturn true;\n\t\t\t\t} else {\n\t\t\t\t\t// We didn't decrypt everything, so continue to prompt for password\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/csv.js": {
"title": "$:/core/modules/utils/csv.js",
"text": "/*\\\ntitle: $:/core/modules/utils/csv.js\ntype: application/javascript\nmodule-type: utils\n\nA barebones CSV parser\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nParse a CSV string with a header row and return an array of hashmaps.\n*/\nexports.parseCsvStringWithHeader = function(text,options) {\n\toptions = options || {};\n\tvar separator = options.separator || \",\",\n\t\trows = text.split(/\\r?\\n/mg).map(function(row) {\n\t\t\treturn $tw.utils.trim(row);\n\t\t}).filter(function(row) {\n\t\t\treturn row !== \"\";\n\t\t});\n\tif(rows.length < 1) {\n\t\treturn \"Missing header row\";\n\t}\n\tvar headings = rows[0].split(separator),\n\t\tresults = [];\n\tfor(var row=1; row<rows.length; row++) {\n\t\tvar columns = rows[row].split(separator),\n\t\t\tcolumnResult = Object.create(null);\n\t\tif(columns.length !== headings.length) {\n\t\t\treturn \"Malformed CSV row '\" + rows[row] + \"'\";\n\t\t}\n\t\tfor(var column=0; column<columns.length; column++) {\n\t\t\tvar columnName = headings[column];\n\t\t\tcolumnResult[columnName] = $tw.utils.trim(columns[column] || \"\");\n\t\t}\n\t\tresults.push(columnResult);\t\t\t\n\t}\n\treturn results;\n}\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/diff-match-patch/diff_match_patch.js": {
"text": "(function(){function diff_match_patch(){this.Diff_Timeout=1;this.Diff_EditCost=4;this.Match_Threshold=.5;this.Match_Distance=1E3;this.Patch_DeleteThreshold=.5;this.Patch_Margin=4;this.Match_MaxBits=32}var DIFF_DELETE=-1,DIFF_INSERT=1,DIFF_EQUAL=0;\ndiff_match_patch.prototype.diff_main=function(a,b,c,d){\"undefined\"==typeof d&&(d=0>=this.Diff_Timeout?Number.MAX_VALUE:(new Date).getTime()+1E3*this.Diff_Timeout);if(null==a||null==b)throw Error(\"Null input. (diff_main)\");if(a==b)return a?[[DIFF_EQUAL,a]]:[];\"undefined\"==typeof c&&(c=!0);var e=c,f=this.diff_commonPrefix(a,b);c=a.substring(0,f);a=a.substring(f);b=b.substring(f);f=this.diff_commonSuffix(a,b);var g=a.substring(a.length-f);a=a.substring(0,a.length-f);b=b.substring(0,b.length-f);a=this.diff_compute_(a,\nb,e,d);c&&a.unshift([DIFF_EQUAL,c]);g&&a.push([DIFF_EQUAL,g]);this.diff_cleanupMerge(a);return a};\ndiff_match_patch.prototype.diff_compute_=function(a,b,c,d){if(!a)return[[DIFF_INSERT,b]];if(!b)return[[DIFF_DELETE,a]];var e=a.length>b.length?a:b,f=a.length>b.length?b:a,g=e.indexOf(f);return-1!=g?(c=[[DIFF_INSERT,e.substring(0,g)],[DIFF_EQUAL,f],[DIFF_INSERT,e.substring(g+f.length)]],a.length>b.length&&(c[0][0]=c[2][0]=DIFF_DELETE),c):1==f.length?[[DIFF_DELETE,a],[DIFF_INSERT,b]]:(e=this.diff_halfMatch_(a,b))?(b=e[1],f=e[3],a=e[4],e=this.diff_main(e[0],e[2],c,d),c=this.diff_main(b,f,c,d),e.concat([[DIFF_EQUAL,\na]],c)):c&&100<a.length&&100<b.length?this.diff_lineMode_(a,b,d):this.diff_bisect_(a,b,d)};\ndiff_match_patch.prototype.diff_lineMode_=function(a,b,c){var d=this.diff_linesToChars_(a,b);a=d.chars1;b=d.chars2;d=d.lineArray;a=this.diff_main(a,b,!1,c);this.diff_charsToLines_(a,d);this.diff_cleanupSemantic(a);a.push([DIFF_EQUAL,\"\"]);for(var e=d=b=0,f=\"\",g=\"\";b<a.length;){switch(a[b][0]){case DIFF_INSERT:e++;g+=a[b][1];break;case DIFF_DELETE:d++;f+=a[b][1];break;case DIFF_EQUAL:if(1<=d&&1<=e){a.splice(b-d-e,d+e);b=b-d-e;d=this.diff_main(f,g,!1,c);for(e=d.length-1;0<=e;e--)a.splice(b,0,d[e]);b+=\nd.length}d=e=0;g=f=\"\"}b++}a.pop();return a};\ndiff_match_patch.prototype.diff_bisect_=function(a,b,c){for(var d=a.length,e=b.length,f=Math.ceil((d+e)/2),g=2*f,h=Array(g),l=Array(g),k=0;k<g;k++)h[k]=-1,l[k]=-1;h[f+1]=0;l[f+1]=0;k=d-e;for(var m=0!=k%2,p=0,x=0,w=0,q=0,t=0;t<f&&!((new Date).getTime()>c);t++){for(var v=-t+p;v<=t-x;v+=2){var n=f+v;var r=v==-t||v!=t&&h[n-1]<h[n+1]?h[n+1]:h[n-1]+1;for(var y=r-v;r<d&&y<e&&a.charAt(r)==b.charAt(y);)r++,y++;h[n]=r;if(r>d)x+=2;else if(y>e)p+=2;else if(m&&(n=f+k-v,0<=n&&n<g&&-1!=l[n])){var u=d-l[n];if(r>=\nu)return this.diff_bisectSplit_(a,b,r,y,c)}}for(v=-t+w;v<=t-q;v+=2){n=f+v;u=v==-t||v!=t&&l[n-1]<l[n+1]?l[n+1]:l[n-1]+1;for(r=u-v;u<d&&r<e&&a.charAt(d-u-1)==b.charAt(e-r-1);)u++,r++;l[n]=u;if(u>d)q+=2;else if(r>e)w+=2;else if(!m&&(n=f+k-v,0<=n&&n<g&&-1!=h[n]&&(r=h[n],y=f+r-n,u=d-u,r>=u)))return this.diff_bisectSplit_(a,b,r,y,c)}}return[[DIFF_DELETE,a],[DIFF_INSERT,b]]};\ndiff_match_patch.prototype.diff_bisectSplit_=function(a,b,c,d,e){var f=a.substring(0,c),g=b.substring(0,d);a=a.substring(c);b=b.substring(d);f=this.diff_main(f,g,!1,e);e=this.diff_main(a,b,!1,e);return f.concat(e)};\ndiff_match_patch.prototype.diff_linesToChars_=function(a,b){function c(a){for(var b=\"\",c=0,f=-1,g=d.length;f<a.length-1;){f=a.indexOf(\"\\n\",c);-1==f&&(f=a.length-1);var h=a.substring(c,f+1);c=f+1;(e.hasOwnProperty?e.hasOwnProperty(h):void 0!==e[h])?b+=String.fromCharCode(e[h]):(b+=String.fromCharCode(g),e[h]=g,d[g++]=h)}return b}var d=[],e={};d[0]=\"\";var f=c(a),g=c(b);return{chars1:f,chars2:g,lineArray:d}};\ndiff_match_patch.prototype.diff_charsToLines_=function(a,b){for(var c=0;c<a.length;c++){for(var d=a[c][1],e=[],f=0;f<d.length;f++)e[f]=b[d.charCodeAt(f)];a[c][1]=e.join(\"\")}};diff_match_patch.prototype.diff_commonPrefix=function(a,b){if(!a||!b||a.charAt(0)!=b.charAt(0))return 0;for(var c=0,d=Math.min(a.length,b.length),e=d,f=0;c<e;)a.substring(f,e)==b.substring(f,e)?f=c=e:d=e,e=Math.floor((d-c)/2+c);return e};\ndiff_match_patch.prototype.diff_commonSuffix=function(a,b){if(!a||!b||a.charAt(a.length-1)!=b.charAt(b.length-1))return 0;for(var c=0,d=Math.min(a.length,b.length),e=d,f=0;c<e;)a.substring(a.length-e,a.length-f)==b.substring(b.length-e,b.length-f)?f=c=e:d=e,e=Math.floor((d-c)/2+c);return e};\ndiff_match_patch.prototype.diff_commonOverlap_=function(a,b){var c=a.length,d=b.length;if(0==c||0==d)return 0;c>d?a=a.substring(c-d):c<d&&(b=b.substring(0,c));c=Math.min(c,d);if(a==b)return c;d=0;for(var e=1;;){var f=a.substring(c-e);f=b.indexOf(f);if(-1==f)return d;e+=f;if(0==f||a.substring(c-e)==b.substring(0,e))d=e,e++}};\ndiff_match_patch.prototype.diff_halfMatch_=function(a,b){function c(a,b,c){for(var d=a.substring(c,c+Math.floor(a.length/4)),e=-1,g=\"\",h,k,l,m;-1!=(e=b.indexOf(d,e+1));){var p=f.diff_commonPrefix(a.substring(c),b.substring(e)),u=f.diff_commonSuffix(a.substring(0,c),b.substring(0,e));g.length<u+p&&(g=b.substring(e-u,e)+b.substring(e,e+p),h=a.substring(0,c-u),k=a.substring(c+p),l=b.substring(0,e-u),m=b.substring(e+p))}return 2*g.length>=a.length?[h,k,l,m,g]:null}if(0>=this.Diff_Timeout)return null;\nvar d=a.length>b.length?a:b,e=a.length>b.length?b:a;if(4>d.length||2*e.length<d.length)return null;var f=this,g=c(d,e,Math.ceil(d.length/4));d=c(d,e,Math.ceil(d.length/2));if(g||d)g=d?g?g[4].length>d[4].length?g:d:d:g;else return null;if(a.length>b.length){d=g[0];e=g[1];var h=g[2];var l=g[3]}else h=g[0],l=g[1],d=g[2],e=g[3];return[d,e,h,l,g[4]]};\ndiff_match_patch.prototype.diff_cleanupSemantic=function(a){for(var b=!1,c=[],d=0,e=null,f=0,g=0,h=0,l=0,k=0;f<a.length;)a[f][0]==DIFF_EQUAL?(c[d++]=f,g=l,h=k,k=l=0,e=a[f][1]):(a[f][0]==DIFF_INSERT?l+=a[f][1].length:k+=a[f][1].length,e&&e.length<=Math.max(g,h)&&e.length<=Math.max(l,k)&&(a.splice(c[d-1],0,[DIFF_DELETE,e]),a[c[d-1]+1][0]=DIFF_INSERT,d--,d--,f=0<d?c[d-1]:-1,k=l=h=g=0,e=null,b=!0)),f++;b&&this.diff_cleanupMerge(a);this.diff_cleanupSemanticLossless(a);for(f=1;f<a.length;){if(a[f-1][0]==\nDIFF_DELETE&&a[f][0]==DIFF_INSERT){b=a[f-1][1];c=a[f][1];d=this.diff_commonOverlap_(b,c);e=this.diff_commonOverlap_(c,b);if(d>=e){if(d>=b.length/2||d>=c.length/2)a.splice(f,0,[DIFF_EQUAL,c.substring(0,d)]),a[f-1][1]=b.substring(0,b.length-d),a[f+1][1]=c.substring(d),f++}else if(e>=b.length/2||e>=c.length/2)a.splice(f,0,[DIFF_EQUAL,b.substring(0,e)]),a[f-1][0]=DIFF_INSERT,a[f-1][1]=c.substring(0,c.length-e),a[f+1][0]=DIFF_DELETE,a[f+1][1]=b.substring(e),f++;f++}f++}};\ndiff_match_patch.prototype.diff_cleanupSemanticLossless=function(a){function b(a,b){if(!a||!b)return 6;var c=a.charAt(a.length-1),d=b.charAt(0),e=c.match(diff_match_patch.nonAlphaNumericRegex_),f=d.match(diff_match_patch.nonAlphaNumericRegex_),g=e&&c.match(diff_match_patch.whitespaceRegex_),h=f&&d.match(diff_match_patch.whitespaceRegex_);c=g&&c.match(diff_match_patch.linebreakRegex_);d=h&&d.match(diff_match_patch.linebreakRegex_);var k=c&&a.match(diff_match_patch.blanklineEndRegex_),l=d&&b.match(diff_match_patch.blanklineStartRegex_);\nreturn k||l?5:c||d?4:e&&!g&&h?3:g||h?2:e||f?1:0}for(var c=1;c<a.length-1;){if(a[c-1][0]==DIFF_EQUAL&&a[c+1][0]==DIFF_EQUAL){var d=a[c-1][1],e=a[c][1],f=a[c+1][1],g=this.diff_commonSuffix(d,e);if(g){var h=e.substring(e.length-g);d=d.substring(0,d.length-g);e=h+e.substring(0,e.length-g);f=h+f}g=d;h=e;for(var l=f,k=b(d,e)+b(e,f);e.charAt(0)===f.charAt(0);){d+=e.charAt(0);e=e.substring(1)+f.charAt(0);f=f.substring(1);var m=b(d,e)+b(e,f);m>=k&&(k=m,g=d,h=e,l=f)}a[c-1][1]!=g&&(g?a[c-1][1]=g:(a.splice(c-\n1,1),c--),a[c][1]=h,l?a[c+1][1]=l:(a.splice(c+1,1),c--))}c++}};diff_match_patch.nonAlphaNumericRegex_=/[^a-zA-Z0-9]/;diff_match_patch.whitespaceRegex_=/\\s/;diff_match_patch.linebreakRegex_=/[\\r\\n]/;diff_match_patch.blanklineEndRegex_=/\\n\\r?\\n$/;diff_match_patch.blanklineStartRegex_=/^\\r?\\n\\r?\\n/;\ndiff_match_patch.prototype.diff_cleanupEfficiency=function(a){for(var b=!1,c=[],d=0,e=null,f=0,g=!1,h=!1,l=!1,k=!1;f<a.length;)a[f][0]==DIFF_EQUAL?(a[f][1].length<this.Diff_EditCost&&(l||k)?(c[d++]=f,g=l,h=k,e=a[f][1]):(d=0,e=null),l=k=!1):(a[f][0]==DIFF_DELETE?k=!0:l=!0,e&&(g&&h&&l&&k||e.length<this.Diff_EditCost/2&&3==g+h+l+k)&&(a.splice(c[d-1],0,[DIFF_DELETE,e]),a[c[d-1]+1][0]=DIFF_INSERT,d--,e=null,g&&h?(l=k=!0,d=0):(d--,f=0<d?c[d-1]:-1,l=k=!1),b=!0)),f++;b&&this.diff_cleanupMerge(a)};\ndiff_match_patch.prototype.diff_cleanupMerge=function(a){a.push([DIFF_EQUAL,\"\"]);for(var b=0,c=0,d=0,e=\"\",f=\"\",g;b<a.length;)switch(a[b][0]){case DIFF_INSERT:d++;f+=a[b][1];b++;break;case DIFF_DELETE:c++;e+=a[b][1];b++;break;case DIFF_EQUAL:1<c+d?(0!==c&&0!==d&&(g=this.diff_commonPrefix(f,e),0!==g&&(0<b-c-d&&a[b-c-d-1][0]==DIFF_EQUAL?a[b-c-d-1][1]+=f.substring(0,g):(a.splice(0,0,[DIFF_EQUAL,f.substring(0,g)]),b++),f=f.substring(g),e=e.substring(g)),g=this.diff_commonSuffix(f,e),0!==g&&(a[b][1]=f.substring(f.length-\ng)+a[b][1],f=f.substring(0,f.length-g),e=e.substring(0,e.length-g))),0===c?a.splice(b-d,c+d,[DIFF_INSERT,f]):0===d?a.splice(b-c,c+d,[DIFF_DELETE,e]):a.splice(b-c-d,c+d,[DIFF_DELETE,e],[DIFF_INSERT,f]),b=b-c-d+(c?1:0)+(d?1:0)+1):0!==b&&a[b-1][0]==DIFF_EQUAL?(a[b-1][1]+=a[b][1],a.splice(b,1)):b++,c=d=0,f=e=\"\"}\"\"===a[a.length-1][1]&&a.pop();c=!1;for(b=1;b<a.length-1;)a[b-1][0]==DIFF_EQUAL&&a[b+1][0]==DIFF_EQUAL&&(a[b][1].substring(a[b][1].length-a[b-1][1].length)==a[b-1][1]?(a[b][1]=a[b-1][1]+a[b][1].substring(0,\na[b][1].length-a[b-1][1].length),a[b+1][1]=a[b-1][1]+a[b+1][1],a.splice(b-1,1),c=!0):a[b][1].substring(0,a[b+1][1].length)==a[b+1][1]&&(a[b-1][1]+=a[b+1][1],a[b][1]=a[b][1].substring(a[b+1][1].length)+a[b+1][1],a.splice(b+1,1),c=!0)),b++;c&&this.diff_cleanupMerge(a)};\ndiff_match_patch.prototype.diff_xIndex=function(a,b){var c=0,d=0,e=0,f=0,g;for(g=0;g<a.length;g++){a[g][0]!==DIFF_INSERT&&(c+=a[g][1].length);a[g][0]!==DIFF_DELETE&&(d+=a[g][1].length);if(c>b)break;e=c;f=d}return a.length!=g&&a[g][0]===DIFF_DELETE?f:f+(b-e)};\ndiff_match_patch.prototype.diff_prettyHtml=function(a){for(var b=[],c=/&/g,d=/</g,e=/>/g,f=/\\n/g,g=0;g<a.length;g++){var h=a[g][0],l=a[g][1].replace(c,\"&\").replace(d,\"<\").replace(e,\">\").replace(f,\"¶<br>\");switch(h){case DIFF_INSERT:b[g]='<ins style=\"background:#e6ffe6;\">'+l+\"</ins>\";break;case DIFF_DELETE:b[g]='<del style=\"background:#ffe6e6;\">'+l+\"</del>\";break;case DIFF_EQUAL:b[g]=\"<span>\"+l+\"</span>\"}}return b.join(\"\")};\ndiff_match_patch.prototype.diff_text1=function(a){for(var b=[],c=0;c<a.length;c++)a[c][0]!==DIFF_INSERT&&(b[c]=a[c][1]);return b.join(\"\")};diff_match_patch.prototype.diff_text2=function(a){for(var b=[],c=0;c<a.length;c++)a[c][0]!==DIFF_DELETE&&(b[c]=a[c][1]);return b.join(\"\")};\ndiff_match_patch.prototype.diff_levenshtein=function(a){for(var b=0,c=0,d=0,e=0;e<a.length;e++){var f=a[e][1];switch(a[e][0]){case DIFF_INSERT:c+=f.length;break;case DIFF_DELETE:d+=f.length;break;case DIFF_EQUAL:b+=Math.max(c,d),d=c=0}}return b+=Math.max(c,d)};\ndiff_match_patch.prototype.diff_toDelta=function(a){for(var b=[],c=0;c<a.length;c++)switch(a[c][0]){case DIFF_INSERT:b[c]=\"+\"+encodeURI(a[c][1]);break;case DIFF_DELETE:b[c]=\"-\"+a[c][1].length;break;case DIFF_EQUAL:b[c]=\"=\"+a[c][1].length}return b.join(\"\\t\").replace(/%20/g,\" \")};\ndiff_match_patch.prototype.diff_fromDelta=function(a,b){for(var c=[],d=0,e=0,f=b.split(/\\t/g),g=0;g<f.length;g++){var h=f[g].substring(1);switch(f[g].charAt(0)){case \"+\":try{c[d++]=[DIFF_INSERT,decodeURI(h)]}catch(k){throw Error(\"Illegal escape in diff_fromDelta: \"+h);}break;case \"-\":case \"=\":var l=parseInt(h,10);if(isNaN(l)||0>l)throw Error(\"Invalid number in diff_fromDelta: \"+h);h=a.substring(e,e+=l);\"=\"==f[g].charAt(0)?c[d++]=[DIFF_EQUAL,h]:c[d++]=[DIFF_DELETE,h];break;default:if(f[g])throw Error(\"Invalid diff operation in diff_fromDelta: \"+\nf[g]);}}if(e!=a.length)throw Error(\"Delta length (\"+e+\") does not equal source text length (\"+a.length+\").\");return c};diff_match_patch.prototype.match_main=function(a,b,c){if(null==a||null==b||null==c)throw Error(\"Null input. (match_main)\");c=Math.max(0,Math.min(c,a.length));return a==b?0:a.length?a.substring(c,c+b.length)==b?c:this.match_bitap_(a,b,c):-1};\ndiff_match_patch.prototype.match_bitap_=function(a,b,c){function d(a,d){var e=a/b.length,g=Math.abs(c-d);return f.Match_Distance?e+g/f.Match_Distance:g?1:e}if(b.length>this.Match_MaxBits)throw Error(\"Pattern too long for this browser.\");var e=this.match_alphabet_(b),f=this,g=this.Match_Threshold,h=a.indexOf(b,c);-1!=h&&(g=Math.min(d(0,h),g),h=a.lastIndexOf(b,c+b.length),-1!=h&&(g=Math.min(d(0,h),g)));var l=1<<b.length-1;h=-1;for(var k,m,p=b.length+a.length,x,w=0;w<b.length;w++){k=0;for(m=p;k<m;)d(w,\nc+m)<=g?k=m:p=m,m=Math.floor((p-k)/2+k);p=m;k=Math.max(1,c-m+1);var q=Math.min(c+m,a.length)+b.length;m=Array(q+2);for(m[q+1]=(1<<w)-1;q>=k;q--){var t=e[a.charAt(q-1)];m[q]=0===w?(m[q+1]<<1|1)&t:(m[q+1]<<1|1)&t|(x[q+1]|x[q])<<1|1|x[q+1];if(m[q]&l&&(t=d(w,q-1),t<=g))if(g=t,h=q-1,h>c)k=Math.max(1,2*c-h);else break}if(d(w+1,c)>g)break;x=m}return h};\ndiff_match_patch.prototype.match_alphabet_=function(a){for(var b={},c=0;c<a.length;c++)b[a.charAt(c)]=0;for(c=0;c<a.length;c++)b[a.charAt(c)]|=1<<a.length-c-1;return b};\ndiff_match_patch.prototype.patch_addContext_=function(a,b){if(0!=b.length){for(var c=b.substring(a.start2,a.start2+a.length1),d=0;b.indexOf(c)!=b.lastIndexOf(c)&&c.length<this.Match_MaxBits-this.Patch_Margin-this.Patch_Margin;)d+=this.Patch_Margin,c=b.substring(a.start2-d,a.start2+a.length1+d);d+=this.Patch_Margin;(c=b.substring(a.start2-d,a.start2))&&a.diffs.unshift([DIFF_EQUAL,c]);(d=b.substring(a.start2+a.length1,a.start2+a.length1+d))&&a.diffs.push([DIFF_EQUAL,d]);a.start1-=c.length;a.start2-=\nc.length;a.length1+=c.length+d.length;a.length2+=c.length+d.length}};\ndiff_match_patch.prototype.patch_make=function(a,b,c){if(\"string\"==typeof a&&\"string\"==typeof b&&\"undefined\"==typeof c){var d=a;b=this.diff_main(d,b,!0);2<b.length&&(this.diff_cleanupSemantic(b),this.diff_cleanupEfficiency(b))}else if(a&&\"object\"==typeof a&&\"undefined\"==typeof b&&\"undefined\"==typeof c)b=a,d=this.diff_text1(b);else if(\"string\"==typeof a&&b&&\"object\"==typeof b&&\"undefined\"==typeof c)d=a;else if(\"string\"==typeof a&&\"string\"==typeof b&&c&&\"object\"==typeof c)d=a,b=c;else throw Error(\"Unknown call format to patch_make.\");\nif(0===b.length)return[];c=[];a=new diff_match_patch.patch_obj;for(var e=0,f=0,g=0,h=d,l=0;l<b.length;l++){var k=b[l][0],m=b[l][1];e||k===DIFF_EQUAL||(a.start1=f,a.start2=g);switch(k){case DIFF_INSERT:a.diffs[e++]=b[l];a.length2+=m.length;d=d.substring(0,g)+m+d.substring(g);break;case DIFF_DELETE:a.length1+=m.length;a.diffs[e++]=b[l];d=d.substring(0,g)+d.substring(g+m.length);break;case DIFF_EQUAL:m.length<=2*this.Patch_Margin&&e&&b.length!=l+1?(a.diffs[e++]=b[l],a.length1+=m.length,a.length2+=m.length):\nm.length>=2*this.Patch_Margin&&e&&(this.patch_addContext_(a,h),c.push(a),a=new diff_match_patch.patch_obj,e=0,h=d,f=g)}k!==DIFF_INSERT&&(f+=m.length);k!==DIFF_DELETE&&(g+=m.length)}e&&(this.patch_addContext_(a,h),c.push(a));return c};\ndiff_match_patch.prototype.patch_deepCopy=function(a){for(var b=[],c=0;c<a.length;c++){var d=a[c],e=new diff_match_patch.patch_obj;e.diffs=[];for(var f=0;f<d.diffs.length;f++)e.diffs[f]=d.diffs[f].slice();e.start1=d.start1;e.start2=d.start2;e.length1=d.length1;e.length2=d.length2;b[c]=e}return b};\ndiff_match_patch.prototype.patch_apply=function(a,b){if(0==a.length)return[b,[]];a=this.patch_deepCopy(a);var c=this.patch_addPadding(a);b=c+b+c;this.patch_splitMax(a);for(var d=0,e=[],f=0;f<a.length;f++){var g=a[f].start2+d,h=this.diff_text1(a[f].diffs),l=-1;if(h.length>this.Match_MaxBits){var k=this.match_main(b,h.substring(0,this.Match_MaxBits),g);-1!=k&&(l=this.match_main(b,h.substring(h.length-this.Match_MaxBits),g+h.length-this.Match_MaxBits),-1==l||k>=l)&&(k=-1)}else k=this.match_main(b,h,\ng);if(-1==k)e[f]=!1,d-=a[f].length2-a[f].length1;else if(e[f]=!0,d=k-g,g=-1==l?b.substring(k,k+h.length):b.substring(k,l+this.Match_MaxBits),h==g)b=b.substring(0,k)+this.diff_text2(a[f].diffs)+b.substring(k+h.length);else if(g=this.diff_main(h,g,!1),h.length>this.Match_MaxBits&&this.diff_levenshtein(g)/h.length>this.Patch_DeleteThreshold)e[f]=!1;else{this.diff_cleanupSemanticLossless(g);h=0;var m;for(l=0;l<a[f].diffs.length;l++){var p=a[f].diffs[l];p[0]!==DIFF_EQUAL&&(m=this.diff_xIndex(g,h));p[0]===\nDIFF_INSERT?b=b.substring(0,k+m)+p[1]+b.substring(k+m):p[0]===DIFF_DELETE&&(b=b.substring(0,k+m)+b.substring(k+this.diff_xIndex(g,h+p[1].length)));p[0]!==DIFF_DELETE&&(h+=p[1].length)}}}b=b.substring(c.length,b.length-c.length);return[b,e]};\ndiff_match_patch.prototype.patch_addPadding=function(a){for(var b=this.Patch_Margin,c=\"\",d=1;d<=b;d++)c+=String.fromCharCode(d);for(d=0;d<a.length;d++)a[d].start1+=b,a[d].start2+=b;d=a[0];var e=d.diffs;if(0==e.length||e[0][0]!=DIFF_EQUAL)e.unshift([DIFF_EQUAL,c]),d.start1-=b,d.start2-=b,d.length1+=b,d.length2+=b;else if(b>e[0][1].length){var f=b-e[0][1].length;e[0][1]=c.substring(e[0][1].length)+e[0][1];d.start1-=f;d.start2-=f;d.length1+=f;d.length2+=f}d=a[a.length-1];e=d.diffs;0==e.length||e[e.length-\n1][0]!=DIFF_EQUAL?(e.push([DIFF_EQUAL,c]),d.length1+=b,d.length2+=b):b>e[e.length-1][1].length&&(f=b-e[e.length-1][1].length,e[e.length-1][1]+=c.substring(0,f),d.length1+=f,d.length2+=f);return c};\ndiff_match_patch.prototype.patch_splitMax=function(a){for(var b=this.Match_MaxBits,c=0;c<a.length;c++)if(!(a[c].length1<=b)){var d=a[c];a.splice(c--,1);for(var e=d.start1,f=d.start2,g=\"\";0!==d.diffs.length;){var h=new diff_match_patch.patch_obj,l=!0;h.start1=e-g.length;h.start2=f-g.length;\"\"!==g&&(h.length1=h.length2=g.length,h.diffs.push([DIFF_EQUAL,g]));for(;0!==d.diffs.length&&h.length1<b-this.Patch_Margin;){g=d.diffs[0][0];var k=d.diffs[0][1];g===DIFF_INSERT?(h.length2+=k.length,f+=k.length,h.diffs.push(d.diffs.shift()),\nl=!1):g===DIFF_DELETE&&1==h.diffs.length&&h.diffs[0][0]==DIFF_EQUAL&&k.length>2*b?(h.length1+=k.length,e+=k.length,l=!1,h.diffs.push([g,k]),d.diffs.shift()):(k=k.substring(0,b-h.length1-this.Patch_Margin),h.length1+=k.length,e+=k.length,g===DIFF_EQUAL?(h.length2+=k.length,f+=k.length):l=!1,h.diffs.push([g,k]),k==d.diffs[0][1]?d.diffs.shift():d.diffs[0][1]=d.diffs[0][1].substring(k.length))}g=this.diff_text2(h.diffs);g=g.substring(g.length-this.Patch_Margin);k=this.diff_text1(d.diffs).substring(0,\nthis.Patch_Margin);\"\"!==k&&(h.length1+=k.length,h.length2+=k.length,0!==h.diffs.length&&h.diffs[h.diffs.length-1][0]===DIFF_EQUAL?h.diffs[h.diffs.length-1][1]+=k:h.diffs.push([DIFF_EQUAL,k]));l||a.splice(++c,0,h)}}};diff_match_patch.prototype.patch_toText=function(a){for(var b=[],c=0;c<a.length;c++)b[c]=a[c];return b.join(\"\")};\ndiff_match_patch.prototype.patch_fromText=function(a){var b=[];if(!a)return b;a=a.split(\"\\n\");for(var c=0,d=/^@@ -(\\d+),?(\\d*) \\+(\\d+),?(\\d*) @@$/;c<a.length;){var e=a[c].match(d);if(!e)throw Error(\"Invalid patch string: \"+a[c]);var f=new diff_match_patch.patch_obj;b.push(f);f.start1=parseInt(e[1],10);\"\"===e[2]?(f.start1--,f.length1=1):\"0\"==e[2]?f.length1=0:(f.start1--,f.length1=parseInt(e[2],10));f.start2=parseInt(e[3],10);\"\"===e[4]?(f.start2--,f.length2=1):\"0\"==e[4]?f.length2=0:(f.start2--,f.length2=\nparseInt(e[4],10));for(c++;c<a.length;){e=a[c].charAt(0);try{var g=decodeURI(a[c].substring(1))}catch(h){throw Error(\"Illegal escape in patch_fromText: \"+g);}if(\"-\"==e)f.diffs.push([DIFF_DELETE,g]);else if(\"+\"==e)f.diffs.push([DIFF_INSERT,g]);else if(\" \"==e)f.diffs.push([DIFF_EQUAL,g]);else if(\"@\"==e)break;else if(\"\"!==e)throw Error('Invalid patch mode \"'+e+'\" in: '+g);c++}}return b};diff_match_patch.patch_obj=function(){this.diffs=[];this.start2=this.start1=null;this.length2=this.length1=0};\ndiff_match_patch.patch_obj.prototype.toString=function(){for(var a=[\"@@ -\"+(0===this.length1?this.start1+\",0\":1==this.length1?this.start1+1:this.start1+1+\",\"+this.length1)+\" +\"+(0===this.length2?this.start2+\",0\":1==this.length2?this.start2+1:this.start2+1+\",\"+this.length2)+\" @@\\n\"],b,c=0;c<this.diffs.length;c++){switch(this.diffs[c][0]){case DIFF_INSERT:b=\"+\";break;case DIFF_DELETE:b=\"-\";break;case DIFF_EQUAL:b=\" \"}a[c+1]=b+encodeURI(this.diffs[c][1])+\"\\n\"}return a.join(\"\").replace(/%20/g,\" \")};\nthis.diff_match_patch=diff_match_patch;this.DIFF_DELETE=DIFF_DELETE;this.DIFF_INSERT=DIFF_INSERT;this.DIFF_EQUAL=DIFF_EQUAL;\n}).call(exports);",
"type": "application/javascript",
"title": "$:/core/modules/utils/diff-match-patch/diff_match_patch.js",
"module-type": "library"
},
"$:/core/modules/utils/dom/animations/slide.js": {
"title": "$:/core/modules/utils/dom/animations/slide.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/animations/slide.js\ntype: application/javascript\nmodule-type: animation\n\nA simple slide animation that varies the height of the element\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction slideOpen(domNode,options) {\n\toptions = options || {};\n\tvar duration = options.duration || $tw.utils.getAnimationDuration();\n\t// Get the current height of the domNode\n\tvar computedStyle = window.getComputedStyle(domNode),\n\t\tcurrMarginBottom = parseInt(computedStyle.marginBottom,10),\n\t\tcurrMarginTop = parseInt(computedStyle.marginTop,10),\n\t\tcurrPaddingBottom = parseInt(computedStyle.paddingBottom,10),\n\t\tcurrPaddingTop = parseInt(computedStyle.paddingTop,10),\n\t\tcurrHeight = domNode.offsetHeight;\n\t// Reset the margin once the transition is over\n\tsetTimeout(function() {\n\t\t$tw.utils.setStyle(domNode,[\n\t\t\t{transition: \"none\"},\n\t\t\t{marginBottom: \"\"},\n\t\t\t{marginTop: \"\"},\n\t\t\t{paddingBottom: \"\"},\n\t\t\t{paddingTop: \"\"},\n\t\t\t{height: \"auto\"},\n\t\t\t{opacity: \"\"}\n\t\t]);\n\t\tif(options.callback) {\n\t\t\toptions.callback();\n\t\t}\n\t},duration);\n\t// Set up the initial position of the element\n\t$tw.utils.setStyle(domNode,[\n\t\t{transition: \"none\"},\n\t\t{marginTop: \"0px\"},\n\t\t{marginBottom: \"0px\"},\n\t\t{paddingTop: \"0px\"},\n\t\t{paddingBottom: \"0px\"},\n\t\t{height: \"0px\"},\n\t\t{opacity: \"0\"}\n\t]);\n\t$tw.utils.forceLayout(domNode);\n\t// Transition to the final position\n\t$tw.utils.setStyle(domNode,[\n\t\t{transition: \"margin-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"margin-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"height \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{marginBottom: currMarginBottom + \"px\"},\n\t\t{marginTop: currMarginTop + \"px\"},\n\t\t{paddingBottom: currPaddingBottom + \"px\"},\n\t\t{paddingTop: currPaddingTop + \"px\"},\n\t\t{height: currHeight + \"px\"},\n\t\t{opacity: \"1\"}\n\t]);\n}\n\nfunction slideClosed(domNode,options) {\n\toptions = options || {};\n\tvar duration = options.duration || $tw.utils.getAnimationDuration(),\n\t\tcurrHeight = domNode.offsetHeight;\n\t// Clear the properties we've set when the animation is over\n\tsetTimeout(function() {\n\t\t$tw.utils.setStyle(domNode,[\n\t\t\t{transition: \"none\"},\n\t\t\t{marginBottom: \"\"},\n\t\t\t{marginTop: \"\"},\n\t\t\t{paddingBottom: \"\"},\n\t\t\t{paddingTop: \"\"},\n\t\t\t{height: \"auto\"},\n\t\t\t{opacity: \"\"}\n\t\t]);\n\t\tif(options.callback) {\n\t\t\toptions.callback();\n\t\t}\n\t},duration);\n\t// Set up the initial position of the element\n\t$tw.utils.setStyle(domNode,[\n\t\t{height: currHeight + \"px\"},\n\t\t{opacity: \"1\"}\n\t]);\n\t$tw.utils.forceLayout(domNode);\n\t// Transition to the final position\n\t$tw.utils.setStyle(domNode,[\n\t\t{transition: \"margin-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"margin-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-top \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"padding-bottom \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"height \" + duration + \"ms ease-in-out, \" +\n\t\t\t\t\t\"opacity \" + duration + \"ms ease-in-out\"},\n\t\t{marginTop: \"0px\"},\n\t\t{marginBottom: \"0px\"},\n\t\t{paddingTop: \"0px\"},\n\t\t{paddingBottom: \"0px\"},\n\t\t{height: \"0px\"},\n\t\t{opacity: \"0\"}\n\t]);\n}\n\nexports.slide = {\n\topen: slideOpen,\n\tclose: slideClosed\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "animation"
},
"$:/core/modules/utils/dom/animator.js": {
"title": "$:/core/modules/utils/dom/animator.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/animator.js\ntype: application/javascript\nmodule-type: utils\n\nOrchestrates animations and transitions\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction Animator() {\n\t// Get the registered animation modules\n\tthis.animations = {};\n\t$tw.modules.applyMethods(\"animation\",this.animations);\n}\n\nAnimator.prototype.perform = function(type,domNode,options) {\n\toptions = options || {};\n\t// Find an animation that can handle this type\n\tvar chosenAnimation;\n\t$tw.utils.each(this.animations,function(animation,name) {\n\t\tif($tw.utils.hop(animation,type)) {\n\t\t\tchosenAnimation = animation[type];\n\t\t}\n\t});\n\tif(!chosenAnimation) {\n\t\tchosenAnimation = function(domNode,options) {\n\t\t\tif(options.callback) {\n\t\t\t\toptions.callback();\n\t\t\t}\n\t\t};\n\t}\n\t// Call the animation\n\tchosenAnimation(domNode,options);\n};\n\nexports.Animator = Animator;\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/browser.js": {
"title": "$:/core/modules/utils/dom/browser.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/browser.js\ntype: application/javascript\nmodule-type: utils\n\nBrowser feature detection\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nSet style properties of an element\n\telement: dom node\n\tstyles: ordered array of {name: value} pairs\n*/\nexports.setStyle = function(element,styles) {\n\tif(element.nodeType === 1) { // Element.ELEMENT_NODE\n\t\tfor(var t=0; t<styles.length; t++) {\n\t\t\tfor(var styleName in styles[t]) {\n\t\t\t\telement.style[$tw.utils.convertStyleNameToPropertyName(styleName)] = styles[t][styleName];\n\t\t\t}\n\t\t}\n\t}\n};\n\n/*\nConverts a standard CSS property name into the local browser-specific equivalent. For example:\n\t\"background-color\" --> \"backgroundColor\"\n\t\"transition\" --> \"webkitTransition\"\n*/\n\nvar styleNameCache = {}; // We'll cache the style name conversions\n\nexports.convertStyleNameToPropertyName = function(styleName) {\n\t// Return from the cache if we can\n\tif(styleNameCache[styleName]) {\n\t\treturn styleNameCache[styleName];\n\t}\n\t// Convert it by first removing any hyphens\n\tvar propertyName = $tw.utils.unHyphenateCss(styleName);\n\t// Then check if it needs a prefix\n\tif($tw.browser && document.body.style[propertyName] === undefined) {\n\t\tvar prefixes = [\"O\",\"MS\",\"Moz\",\"webkit\"];\n\t\tfor(var t=0; t<prefixes.length; t++) {\n\t\t\tvar prefixedName = prefixes[t] + propertyName.substr(0,1).toUpperCase() + propertyName.substr(1);\n\t\t\tif(document.body.style[prefixedName] !== undefined) {\n\t\t\t\tpropertyName = prefixedName;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\t// Put it in the cache too\n\tstyleNameCache[styleName] = propertyName;\n\treturn propertyName;\n};\n\n/*\nConverts a JS format CSS property name back into the dashed form used in CSS declarations. For example:\n\t\"backgroundColor\" --> \"background-color\"\n\t\"webkitTransform\" --> \"-webkit-transform\"\n*/\nexports.convertPropertyNameToStyleName = function(propertyName) {\n\t// Rehyphenate the name\n\tvar styleName = $tw.utils.hyphenateCss(propertyName);\n\t// If there's a webkit prefix, add a dash (other browsers have uppercase prefixes, and so get the dash automatically)\n\tif(styleName.indexOf(\"webkit\") === 0) {\n\t\tstyleName = \"-\" + styleName;\n\t} else if(styleName.indexOf(\"-m-s\") === 0) {\n\t\tstyleName = \"-ms\" + styleName.substr(4);\n\t}\n\treturn styleName;\n};\n\n/*\nRound trip a stylename to a property name and back again. For example:\n\t\"transform\" --> \"webkitTransform\" --> \"-webkit-transform\"\n*/\nexports.roundTripPropertyName = function(propertyName) {\n\treturn $tw.utils.convertPropertyNameToStyleName($tw.utils.convertStyleNameToPropertyName(propertyName));\n};\n\n/*\nConverts a standard event name into the local browser specific equivalent. For example:\n\t\"animationEnd\" --> \"webkitAnimationEnd\"\n*/\n\nvar eventNameCache = {}; // We'll cache the conversions\n\nvar eventNameMappings = {\n\t\"transitionEnd\": {\n\t\tcorrespondingCssProperty: \"transition\",\n\t\tmappings: {\n\t\t\ttransition: \"transitionend\",\n\t\t\tOTransition: \"oTransitionEnd\",\n\t\t\tMSTransition: \"msTransitionEnd\",\n\t\t\tMozTransition: \"transitionend\",\n\t\t\twebkitTransition: \"webkitTransitionEnd\"\n\t\t}\n\t},\n\t\"animationEnd\": {\n\t\tcorrespondingCssProperty: \"animation\",\n\t\tmappings: {\n\t\t\tanimation: \"animationend\",\n\t\t\tOAnimation: \"oAnimationEnd\",\n\t\t\tMSAnimation: \"msAnimationEnd\",\n\t\t\tMozAnimation: \"animationend\",\n\t\t\twebkitAnimation: \"webkitAnimationEnd\"\n\t\t}\n\t}\n};\n\nexports.convertEventName = function(eventName) {\n\tif(eventNameCache[eventName]) {\n\t\treturn eventNameCache[eventName];\n\t}\n\tvar newEventName = eventName,\n\t\tmappings = eventNameMappings[eventName];\n\tif(mappings) {\n\t\tvar convertedProperty = $tw.utils.convertStyleNameToPropertyName(mappings.correspondingCssProperty);\n\t\tif(mappings.mappings[convertedProperty]) {\n\t\t\tnewEventName = mappings.mappings[convertedProperty];\n\t\t}\n\t}\n\t// Put it in the cache too\n\teventNameCache[eventName] = newEventName;\n\treturn newEventName;\n};\n\n/*\nReturn the names of the fullscreen APIs\n*/\nexports.getFullScreenApis = function() {\n\tvar d = document,\n\t\tdb = d.body,\n\t\tresult = {\n\t\t\"_requestFullscreen\": db.webkitRequestFullscreen !== undefined ? \"webkitRequestFullscreen\" :\n\t\t\t\t\t\t\tdb.mozRequestFullScreen !== undefined ? \"mozRequestFullScreen\" :\n\t\t\t\t\t\t\tdb.msRequestFullscreen !== undefined ? \"msRequestFullscreen\" :\n\t\t\t\t\t\t\tdb.requestFullscreen !== undefined ? \"requestFullscreen\" : \"\",\n\t\t\"_exitFullscreen\": d.webkitExitFullscreen !== undefined ? \"webkitExitFullscreen\" :\n\t\t\t\t\t\t\td.mozCancelFullScreen !== undefined ? \"mozCancelFullScreen\" :\n\t\t\t\t\t\t\td.msExitFullscreen !== undefined ? \"msExitFullscreen\" :\n\t\t\t\t\t\t\td.exitFullscreen !== undefined ? \"exitFullscreen\" : \"\",\n\t\t\"_fullscreenElement\": d.webkitFullscreenElement !== undefined ? \"webkitFullscreenElement\" :\n\t\t\t\t\t\t\td.mozFullScreenElement !== undefined ? \"mozFullScreenElement\" :\n\t\t\t\t\t\t\td.msFullscreenElement !== undefined ? \"msFullscreenElement\" :\n\t\t\t\t\t\t\td.fullscreenElement !== undefined ? \"fullscreenElement\" : \"\",\n\t\t\"_fullscreenChange\": d.webkitFullscreenElement !== undefined ? \"webkitfullscreenchange\" :\n\t\t\t\t\t\t\td.mozFullScreenElement !== undefined ? \"mozfullscreenchange\" :\n\t\t\t\t\t\t\td.msFullscreenElement !== undefined ? \"MSFullscreenChange\" :\n\t\t\t\t\t\t\td.fullscreenElement !== undefined ? \"fullscreenchange\" : \"\"\n\t};\n\tif(!result._requestFullscreen || !result._exitFullscreen || !result._fullscreenElement || !result._fullscreenChange) {\n\t\treturn null;\n\t} else {\n\t\treturn result;\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/csscolorparser.js": {
"title": "$:/core/modules/utils/dom/csscolorparser.js",
"text": "// (c) Dean McNamee <dean@gmail.com>, 2012.\n//\n// https://github.com/deanm/css-color-parser-js\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n// IN THE SOFTWARE.\n\n// http://www.w3.org/TR/css3-color/\nvar kCSSColorTable = {\n \"transparent\": [0,0,0,0], \"aliceblue\": [240,248,255,1],\n \"antiquewhite\": [250,235,215,1], \"aqua\": [0,255,255,1],\n \"aquamarine\": [127,255,212,1], \"azure\": [240,255,255,1],\n \"beige\": [245,245,220,1], \"bisque\": [255,228,196,1],\n \"black\": [0,0,0,1], \"blanchedalmond\": [255,235,205,1],\n \"blue\": [0,0,255,1], \"blueviolet\": [138,43,226,1],\n \"brown\": [165,42,42,1], \"burlywood\": [222,184,135,1],\n \"cadetblue\": [95,158,160,1], \"chartreuse\": [127,255,0,1],\n \"chocolate\": [210,105,30,1], \"coral\": [255,127,80,1],\n \"cornflowerblue\": [100,149,237,1], \"cornsilk\": [255,248,220,1],\n \"crimson\": [220,20,60,1], \"cyan\": [0,255,255,1],\n \"darkblue\": [0,0,139,1], \"darkcyan\": [0,139,139,1],\n \"darkgoldenrod\": [184,134,11,1], \"darkgray\": [169,169,169,1],\n \"darkgreen\": [0,100,0,1], \"darkgrey\": [169,169,169,1],\n \"darkkhaki\": [189,183,107,1], \"darkmagenta\": [139,0,139,1],\n \"darkolivegreen\": [85,107,47,1], \"darkorange\": [255,140,0,1],\n \"darkorchid\": [153,50,204,1], \"darkred\": [139,0,0,1],\n \"darksalmon\": [233,150,122,1], \"darkseagreen\": [143,188,143,1],\n \"darkslateblue\": [72,61,139,1], \"darkslategray\": [47,79,79,1],\n \"darkslategrey\": [47,79,79,1], \"darkturquoise\": [0,206,209,1],\n \"darkviolet\": [148,0,211,1], \"deeppink\": [255,20,147,1],\n \"deepskyblue\": [0,191,255,1], \"dimgray\": [105,105,105,1],\n \"dimgrey\": [105,105,105,1], \"dodgerblue\": [30,144,255,1],\n \"firebrick\": [178,34,34,1], \"floralwhite\": [255,250,240,1],\n \"forestgreen\": [34,139,34,1], \"fuchsia\": [255,0,255,1],\n \"gainsboro\": [220,220,220,1], \"ghostwhite\": [248,248,255,1],\n \"gold\": [255,215,0,1], \"goldenrod\": [218,165,32,1],\n \"gray\": [128,128,128,1], \"green\": [0,128,0,1],\n \"greenyellow\": [173,255,47,1], \"grey\": [128,128,128,1],\n \"honeydew\": [240,255,240,1], \"hotpink\": [255,105,180,1],\n \"indianred\": [205,92,92,1], \"indigo\": [75,0,130,1],\n \"ivory\": [255,255,240,1], \"khaki\": [240,230,140,1],\n \"lavender\": [230,230,250,1], \"lavenderblush\": [255,240,245,1],\n \"lawngreen\": [124,252,0,1], \"lemonchiffon\": [255,250,205,1],\n \"lightblue\": [173,216,230,1], \"lightcoral\": [240,128,128,1],\n \"lightcyan\": [224,255,255,1], \"lightgoldenrodyellow\": [250,250,210,1],\n \"lightgray\": [211,211,211,1], \"lightgreen\": [144,238,144,1],\n \"lightgrey\": [211,211,211,1], \"lightpink\": [255,182,193,1],\n \"lightsalmon\": [255,160,122,1], \"lightseagreen\": [32,178,170,1],\n \"lightskyblue\": [135,206,250,1], \"lightslategray\": [119,136,153,1],\n \"lightslategrey\": [119,136,153,1], \"lightsteelblue\": [176,196,222,1],\n \"lightyellow\": [255,255,224,1], \"lime\": [0,255,0,1],\n \"limegreen\": [50,205,50,1], \"linen\": [250,240,230,1],\n \"magenta\": [255,0,255,1], \"maroon\": [128,0,0,1],\n \"mediumaquamarine\": [102,205,170,1], \"mediumblue\": [0,0,205,1],\n \"mediumorchid\": [186,85,211,1], \"mediumpurple\": [147,112,219,1],\n \"mediumseagreen\": [60,179,113,1], \"mediumslateblue\": [123,104,238,1],\n \"mediumspringgreen\": [0,250,154,1], \"mediumturquoise\": [72,209,204,1],\n \"mediumvioletred\": [199,21,133,1], \"midnightblue\": [25,25,112,1],\n \"mintcream\": [245,255,250,1], \"mistyrose\": [255,228,225,1],\n \"moccasin\": [255,228,181,1], \"navajowhite\": [255,222,173,1],\n \"navy\": [0,0,128,1], \"oldlace\": [253,245,230,1],\n \"olive\": [128,128,0,1], \"olivedrab\": [107,142,35,1],\n \"orange\": [255,165,0,1], \"orangered\": [255,69,0,1],\n \"orchid\": [218,112,214,1], \"palegoldenrod\": [238,232,170,1],\n \"palegreen\": [152,251,152,1], \"paleturquoise\": [175,238,238,1],\n \"palevioletred\": [219,112,147,1], \"papayawhip\": [255,239,213,1],\n \"peachpuff\": [255,218,185,1], \"peru\": [205,133,63,1],\n \"pink\": [255,192,203,1], \"plum\": [221,160,221,1],\n \"powderblue\": [176,224,230,1], \"purple\": [128,0,128,1],\n \"red\": [255,0,0,1], \"rosybrown\": [188,143,143,1],\n \"royalblue\": [65,105,225,1], \"saddlebrown\": [139,69,19,1],\n \"salmon\": [250,128,114,1], \"sandybrown\": [244,164,96,1],\n \"seagreen\": [46,139,87,1], \"seashell\": [255,245,238,1],\n \"sienna\": [160,82,45,1], \"silver\": [192,192,192,1],\n \"skyblue\": [135,206,235,1], \"slateblue\": [106,90,205,1],\n \"slategray\": [112,128,144,1], \"slategrey\": [112,128,144,1],\n \"snow\": [255,250,250,1], \"springgreen\": [0,255,127,1],\n \"steelblue\": [70,130,180,1], \"tan\": [210,180,140,1],\n \"teal\": [0,128,128,1], \"thistle\": [216,191,216,1],\n \"tomato\": [255,99,71,1], \"turquoise\": [64,224,208,1],\n \"violet\": [238,130,238,1], \"wheat\": [245,222,179,1],\n \"white\": [255,255,255,1], \"whitesmoke\": [245,245,245,1],\n \"yellow\": [255,255,0,1], \"yellowgreen\": [154,205,50,1]}\n\nfunction clamp_css_byte(i) { // Clamp to integer 0 .. 255.\n i = Math.round(i); // Seems to be what Chrome does (vs truncation).\n return i < 0 ? 0 : i > 255 ? 255 : i;\n}\n\nfunction clamp_css_float(f) { // Clamp to float 0.0 .. 1.0.\n return f < 0 ? 0 : f > 1 ? 1 : f;\n}\n\nfunction parse_css_int(str) { // int or percentage.\n if (str[str.length - 1] === '%')\n return clamp_css_byte(parseFloat(str) / 100 * 255);\n return clamp_css_byte(parseInt(str));\n}\n\nfunction parse_css_float(str) { // float or percentage.\n if (str[str.length - 1] === '%')\n return clamp_css_float(parseFloat(str) / 100);\n return clamp_css_float(parseFloat(str));\n}\n\nfunction css_hue_to_rgb(m1, m2, h) {\n if (h < 0) h += 1;\n else if (h > 1) h -= 1;\n\n if (h * 6 < 1) return m1 + (m2 - m1) * h * 6;\n if (h * 2 < 1) return m2;\n if (h * 3 < 2) return m1 + (m2 - m1) * (2/3 - h) * 6;\n return m1;\n}\n\nfunction parseCSSColor(css_str) {\n // Remove all whitespace, not compliant, but should just be more accepting.\n var str = css_str.replace(/ /g, '').toLowerCase();\n\n // Color keywords (and transparent) lookup.\n if (str in kCSSColorTable) return kCSSColorTable[str].slice(); // dup.\n\n // #abc and #abc123 syntax.\n if (str[0] === '#') {\n if (str.length === 4) {\n var iv = parseInt(str.substr(1), 16); // TODO(deanm): Stricter parsing.\n if (!(iv >= 0 && iv <= 0xfff)) return null; // Covers NaN.\n return [((iv & 0xf00) >> 4) | ((iv & 0xf00) >> 8),\n (iv & 0xf0) | ((iv & 0xf0) >> 4),\n (iv & 0xf) | ((iv & 0xf) << 4),\n 1];\n } else if (str.length === 7) {\n var iv = parseInt(str.substr(1), 16); // TODO(deanm): Stricter parsing.\n if (!(iv >= 0 && iv <= 0xffffff)) return null; // Covers NaN.\n return [(iv & 0xff0000) >> 16,\n (iv & 0xff00) >> 8,\n iv & 0xff,\n 1];\n }\n\n return null;\n }\n\n var op = str.indexOf('('), ep = str.indexOf(')');\n if (op !== -1 && ep + 1 === str.length) {\n var fname = str.substr(0, op);\n var params = str.substr(op+1, ep-(op+1)).split(',');\n var alpha = 1; // To allow case fallthrough.\n switch (fname) {\n case 'rgba':\n if (params.length !== 4) return null;\n alpha = parse_css_float(params.pop());\n // Fall through.\n case 'rgb':\n if (params.length !== 3) return null;\n return [parse_css_int(params[0]),\n parse_css_int(params[1]),\n parse_css_int(params[2]),\n alpha];\n case 'hsla':\n if (params.length !== 4) return null;\n alpha = parse_css_float(params.pop());\n // Fall through.\n case 'hsl':\n if (params.length !== 3) return null;\n var h = (((parseFloat(params[0]) % 360) + 360) % 360) / 360; // 0 .. 1\n // NOTE(deanm): According to the CSS spec s/l should only be\n // percentages, but we don't bother and let float or percentage.\n var s = parse_css_float(params[1]);\n var l = parse_css_float(params[2]);\n var m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s;\n var m1 = l * 2 - m2;\n return [clamp_css_byte(css_hue_to_rgb(m1, m2, h+1/3) * 255),\n clamp_css_byte(css_hue_to_rgb(m1, m2, h) * 255),\n clamp_css_byte(css_hue_to_rgb(m1, m2, h-1/3) * 255),\n alpha];\n default:\n return null;\n }\n }\n\n return null;\n}\n\ntry { exports.parseCSSColor = parseCSSColor } catch(e) { }\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom.js": {
"title": "$:/core/modules/utils/dom.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom.js\ntype: application/javascript\nmodule-type: utils\n\nVarious static DOM-related utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nDetermines whether element 'a' contains element 'b'\nCode thanks to John Resig, http://ejohn.org/blog/comparing-document-position/\n*/\nexports.domContains = function(a,b) {\n\treturn a.contains ?\n\t\ta !== b && a.contains(b) :\n\t\t!!(a.compareDocumentPosition(b) & 16);\n};\n\nexports.removeChildren = function(node) {\n\twhile(node.hasChildNodes()) {\n\t\tnode.removeChild(node.firstChild);\n\t}\n};\n\nexports.hasClass = function(el,className) {\n\treturn el && el.className && el.className.toString().split(\" \").indexOf(className) !== -1;\n};\n\nexports.addClass = function(el,className) {\n\tvar c = el.className.split(\" \");\n\tif(c.indexOf(className) === -1) {\n\t\tc.push(className);\n\t\tel.className = c.join(\" \");\n\t}\n};\n\nexports.removeClass = function(el,className) {\n\tvar c = el.className.split(\" \"),\n\t\tp = c.indexOf(className);\n\tif(p !== -1) {\n\t\tc.splice(p,1);\n\t\tel.className = c.join(\" \");\n\t}\n};\n\nexports.toggleClass = function(el,className,status) {\n\tif(status === undefined) {\n\t\tstatus = !exports.hasClass(el,className);\n\t}\n\tif(status) {\n\t\texports.addClass(el,className);\n\t} else {\n\t\texports.removeClass(el,className);\n\t}\n};\n\n/*\nGet the first parent element that has scrollbars or use the body as fallback.\n*/\nexports.getScrollContainer = function(el) {\n\tvar doc = el.ownerDocument;\n\twhile(el.parentNode) {\t\n\t\tel = el.parentNode;\n\t\tif(el.scrollTop) {\n\t\t\treturn el;\n\t\t}\n\t}\n\treturn doc.body;\n};\n\n/*\nGet the scroll position of the viewport\nReturns:\n\t{\n\t\tx: horizontal scroll position in pixels,\n\t\ty: vertical scroll position in pixels\n\t}\n*/\nexports.getScrollPosition = function(srcWindow) {\n\tvar scrollWindow = srcWindow || window;\n\tif(\"scrollX\" in scrollWindow) {\n\t\treturn {x: scrollWindow.scrollX, y: scrollWindow.scrollY};\n\t} else {\n\t\treturn {x: scrollWindow.document.documentElement.scrollLeft, y: scrollWindow.document.documentElement.scrollTop};\n\t}\n};\n\n/*\nAdjust the height of a textarea to fit its content, preserving scroll position, and return the height\n*/\nexports.resizeTextAreaToFit = function(domNode,minHeight) {\n\t// Get the scroll container and register the current scroll position\n\tvar container = $tw.utils.getScrollContainer(domNode),\n\t\tscrollTop = container.scrollTop;\n // Measure the specified minimum height\n\tdomNode.style.height = minHeight;\n\tvar measuredHeight = domNode.offsetHeight || parseInt(minHeight,10);\n\t// Set its height to auto so that it snaps to the correct height\n\tdomNode.style.height = \"auto\";\n\t// Calculate the revised height\n\tvar newHeight = Math.max(domNode.scrollHeight + domNode.offsetHeight - domNode.clientHeight,measuredHeight);\n\t// Only try to change the height if it has changed\n\tif(newHeight !== domNode.offsetHeight) {\n\t\tdomNode.style.height = newHeight + \"px\";\n\t\t// Make sure that the dimensions of the textarea are recalculated\n\t\t$tw.utils.forceLayout(domNode);\n\t\t// Set the container to the position we registered at the beginning\n\t\tcontainer.scrollTop = scrollTop;\n\t}\n\treturn newHeight;\n};\n\n/*\nGets the bounding rectangle of an element in absolute page coordinates\n*/\nexports.getBoundingPageRect = function(element) {\n\tvar scrollPos = $tw.utils.getScrollPosition(element.ownerDocument.defaultView),\n\t\tclientRect = element.getBoundingClientRect();\n\treturn {\n\t\tleft: clientRect.left + scrollPos.x,\n\t\twidth: clientRect.width,\n\t\tright: clientRect.right + scrollPos.x,\n\t\ttop: clientRect.top + scrollPos.y,\n\t\theight: clientRect.height,\n\t\tbottom: clientRect.bottom + scrollPos.y\n\t};\n};\n\n/*\nSaves a named password in the browser\n*/\nexports.savePassword = function(name,password) {\n\tvar done = false;\n\ttry {\n\t\twindow.localStorage.setItem(\"tw5-password-\" + name,password);\n\t\tdone = true;\n\t} catch(e) {\n\t}\n\tif(!done) {\n\t\t$tw.savedPasswords = $tw.savedPasswords || Object.create(null);\n\t\t$tw.savedPasswords[name] = password;\n\t}\n};\n\n/*\nRetrieve a named password from the browser\n*/\nexports.getPassword = function(name) {\n\tvar value;\n\ttry {\n\t\tvalue = window.localStorage.getItem(\"tw5-password-\" + name);\n\t} catch(e) {\n\t}\n\tif(value !== undefined) {\n\t\treturn value;\n\t} else {\n\t\treturn ($tw.savedPasswords || Object.create(null))[name] || \"\";\n\t}\n};\n\n/*\nForce layout of a dom node and its descendents\n*/\nexports.forceLayout = function(element) {\n\tvar dummy = element.offsetWidth;\n};\n\n/*\nPulse an element for debugging purposes\n*/\nexports.pulseElement = function(element) {\n\t// Event handler to remove the class at the end\n\telement.addEventListener($tw.browser.animationEnd,function handler(event) {\n\t\telement.removeEventListener($tw.browser.animationEnd,handler,false);\n\t\t$tw.utils.removeClass(element,\"pulse\");\n\t},false);\n\t// Apply the pulse class\n\t$tw.utils.removeClass(element,\"pulse\");\n\t$tw.utils.forceLayout(element);\n\t$tw.utils.addClass(element,\"pulse\");\n};\n\n/*\nAttach specified event handlers to a DOM node\ndomNode: where to attach the event handlers\nevents: array of event handlers to be added (see below)\nEach entry in the events array is an object with these properties:\nhandlerFunction: optional event handler function\nhandlerObject: optional event handler object\nhandlerMethod: optionally specifies object handler method name (defaults to `handleEvent`)\n*/\nexports.addEventListeners = function(domNode,events) {\n\t$tw.utils.each(events,function(eventInfo) {\n\t\tvar handler;\n\t\tif(eventInfo.handlerFunction) {\n\t\t\thandler = eventInfo.handlerFunction;\n\t\t} else if(eventInfo.handlerObject) {\n\t\t\tif(eventInfo.handlerMethod) {\n\t\t\t\thandler = function(event) {\n\t\t\t\t\teventInfo.handlerObject[eventInfo.handlerMethod].call(eventInfo.handlerObject,event);\n\t\t\t\t};\t\n\t\t\t} else {\n\t\t\t\thandler = eventInfo.handlerObject;\n\t\t\t}\n\t\t}\n\t\tdomNode.addEventListener(eventInfo.name,handler,false);\n\t});\n};\n\n/*\nGet the computed styles applied to an element as an array of strings of individual CSS properties\n*/\nexports.getComputedStyles = function(domNode) {\n\tvar textAreaStyles = window.getComputedStyle(domNode,null),\n\t\tstyleDefs = [],\n\t\tname;\n\tfor(var t=0; t<textAreaStyles.length; t++) {\n\t\tname = textAreaStyles[t];\n\t\tstyleDefs.push(name + \": \" + textAreaStyles.getPropertyValue(name) + \";\");\n\t}\n\treturn styleDefs;\n};\n\n/*\nApply a set of styles passed as an array of strings of individual CSS properties\n*/\nexports.setStyles = function(domNode,styleDefs) {\n\tdomNode.style.cssText = styleDefs.join(\"\");\n};\n\n/*\nCopy the computed styles from a source element to a destination element\n*/\nexports.copyStyles = function(srcDomNode,dstDomNode) {\n\t$tw.utils.setStyles(dstDomNode,$tw.utils.getComputedStyles(srcDomNode));\n};\n\n/*\nCopy plain text to the clipboard on browsers that support it\n*/\nexports.copyToClipboard = function(text,options) {\n\toptions = options || {};\n\tvar textArea = document.createElement(\"textarea\");\n\ttextArea.style.position = \"fixed\";\n\ttextArea.style.top = 0;\n\ttextArea.style.left = 0;\n\ttextArea.style.fontSize = \"12pt\";\n\ttextArea.style.width = \"2em\";\n\ttextArea.style.height = \"2em\";\n\ttextArea.style.padding = 0;\n\ttextArea.style.border = \"none\";\n\ttextArea.style.outline = \"none\";\n\ttextArea.style.boxShadow = \"none\";\n\ttextArea.style.background = \"transparent\";\n\ttextArea.value = text;\n\tdocument.body.appendChild(textArea);\n\ttextArea.select();\n\ttextArea.setSelectionRange(0,text.length);\n\tvar succeeded = false;\n\ttry {\n\t\tsucceeded = document.execCommand(\"copy\");\n\t} catch (err) {\n\t}\n\tif(!options.doNotNotify) {\n\t\t$tw.notifier.display(succeeded ? \"$:/language/Notifications/CopiedToClipboard/Succeeded\" : \"$:/language/Notifications/CopiedToClipboard/Failed\");\n\t}\n\tdocument.body.removeChild(textArea);\n};\n\nexports.getLocationPath = function() {\n\treturn window.location.toString().split(\"#\")[0];\n};\n\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/dragndrop.js": {
"title": "$:/core/modules/utils/dom/dragndrop.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/dragndrop.js\ntype: application/javascript\nmodule-type: utils\n\nBrowser data transfer utilities, used with the clipboard and drag and drop\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nOptions:\n\ndomNode: dom node to make draggable\ndragImageType: \"pill\" or \"dom\"\ndragTiddlerFn: optional function to retrieve the title of tiddler to drag\ndragFilterFn: optional function to retreive the filter defining a list of tiddlers to drag\nwidget: widget to use as the contect for the filter\n*/\nexports.makeDraggable = function(options) {\n\tvar dragImageType = options.dragImageType || \"dom\",\n\t\tdragImage,\n\t\tdomNode = options.domNode;\n\t// Make the dom node draggable (not necessary for anchor tags)\n\tif((domNode.tagName || \"\").toLowerCase() !== \"a\") {\n\t\tdomNode.setAttribute(\"draggable\",\"true\");\t\t\n\t}\n\t// Add event handlers\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"dragstart\", handlerFunction: function(event) {\n\t\t\tif(event.dataTransfer === undefined) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// Collect the tiddlers being dragged\n\t\t\tvar dragTiddler = options.dragTiddlerFn && options.dragTiddlerFn(),\n\t\t\t\tdragFilter = options.dragFilterFn && options.dragFilterFn(),\n\t\t\t\ttitles = dragTiddler ? [dragTiddler] : [],\n\t\t\t \tstartActions = options.startActions;\n\t\t\tif(dragFilter) {\n\t\t\t\ttitles.push.apply(titles,options.widget.wiki.filterTiddlers(dragFilter,options.widget));\n\t\t\t}\n\t\t\tvar titleString = $tw.utils.stringifyList(titles);\n\t\t\t// Check that we've something to drag\n\t\t\tif(titles.length > 0 && event.target === domNode) {\n\t\t\t\t// Mark the drag in progress\n\t\t\t\t$tw.dragInProgress = domNode;\n\t\t\t\t// Set the dragging class on the element being dragged\n\t\t\t\t$tw.utils.addClass(event.target,\"tc-dragging\");\n\t\t\t\t// Invoke drag-start actions if given\n\t\t\t\tif(startActions !== undefined) {\n\t\t\t\t\toptions.widget.invokeActionString(startActions,options.widget,event,{actionTiddler: titleString});\n\t\t\t\t}\n\t\t\t\t// Create the drag image elements\n\t\t\t\tdragImage = options.widget.document.createElement(\"div\");\n\t\t\t\tdragImage.className = \"tc-tiddler-dragger\";\n\t\t\t\tvar inner = options.widget.document.createElement(\"div\");\n\t\t\t\tinner.className = \"tc-tiddler-dragger-inner\";\n\t\t\t\tinner.appendChild(options.widget.document.createTextNode(\n\t\t\t\t\ttitles.length === 1 ? \n\t\t\t\t\t\ttitles[0] :\n\t\t\t\t\t\ttitles.length + \" tiddlers\"\n\t\t\t\t));\n\t\t\t\tdragImage.appendChild(inner);\n\t\t\t\toptions.widget.document.body.appendChild(dragImage);\n\t\t\t\t// Set the data transfer properties\n\t\t\t\tvar dataTransfer = event.dataTransfer;\n\t\t\t\t// Set up the image\n\t\t\t\tdataTransfer.effectAllowed = \"all\";\n\t\t\t\tif(dataTransfer.setDragImage) {\n\t\t\t\t\tif(dragImageType === \"pill\") {\n\t\t\t\t\t\tdataTransfer.setDragImage(dragImage.firstChild,-16,-16);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar r = domNode.getBoundingClientRect();\n\t\t\t\t\t\tdataTransfer.setDragImage(domNode,event.clientX-r.left,event.clientY-r.top);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Set up the data transfer\n\t\t\t\tif(dataTransfer.clearData) {\n\t\t\t\t\tdataTransfer.clearData();\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\tvar jsonData = [];\n\t\t\t\tif(titles.length > 1) {\n\t\t\t\t\ttitles.forEach(function(title) {\n\t\t\t\t\t\tjsonData.push(options.widget.wiki.getTiddlerAsJson(title));\n\t\t\t\t\t});\n\t\t\t\t\tjsonData = \"[\" + jsonData.join(\",\") + \"]\";\n\t\t\t\t} else {\n\t\t\t\t\tjsonData = options.widget.wiki.getTiddlerAsJson(titles[0]);\n\t\t\t\t}\n\t\t\t\t// IE doesn't like these content types\n\t\t\t\tif(!$tw.browser.isIE) {\n\t\t\t\t\tdataTransfer.setData(\"text/vnd.tiddler\",jsonData);\n\t\t\t\t\tdataTransfer.setData(\"text/plain\",titleString);\n\t\t\t\t\tdataTransfer.setData(\"text/x-moz-url\",\"data:text/vnd.tiddler,\" + encodeURIComponent(jsonData));\n\t\t\t\t}\n\t\t\t\tdataTransfer.setData(\"URL\",\"data:text/vnd.tiddler,\" + encodeURIComponent(jsonData));\n\t\t\t\tdataTransfer.setData(\"Text\",titleString);\n\t\t\t\tevent.stopPropagation();\n\t\t\t}\n\t\t\treturn false;\n\t\t}},\n\t\t{name: \"dragend\", handlerFunction: function(event) {\n\t\t\tif(event.target === domNode) {\n\t\t\t\t// Collect the tiddlers being dragged\n\t\t\t\tvar dragTiddler = options.dragTiddlerFn && options.dragTiddlerFn(),\n\t\t\t\t\tdragFilter = options.dragFilterFn && options.dragFilterFn(),\n\t\t\t\t\ttitles = dragTiddler ? [dragTiddler] : [],\n\t\t\t \t\tendActions = options.endActions;\n\t\t\t\tif(dragFilter) {\n\t\t\t\t\ttitles.push.apply(titles,options.widget.wiki.filterTiddlers(dragFilter,options.widget));\n\t\t\t\t}\n\t\t\t\tvar titleString = $tw.utils.stringifyList(titles);\n\t\t\t\t$tw.dragInProgress = null;\n\t\t\t\t// Invoke drag-end actions if given\n\t\t\t\tif(endActions !== undefined) {\n\t\t\t\t\toptions.widget.invokeActionString(endActions,options.widget,event,{actionTiddler: titleString});\n\t\t\t\t}\n\t\t\t\t// Remove the dragging class on the element being dragged\n\t\t\t\t$tw.utils.removeClass(event.target,\"tc-dragging\");\n\t\t\t\t// Delete the drag image element\n\t\t\t\tif(dragImage) {\n\t\t\t\t\tdragImage.parentNode.removeChild(dragImage);\n\t\t\t\t\tdragImage = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}}\n\t]);\n};\n\nexports.importDataTransfer = function(dataTransfer,fallbackTitle,callback) {\n\t// Try each provided data type in turn\n\tif($tw.log.IMPORT) {\n\t\tconsole.log(\"Available data types:\");\n\t\tfor(var type=0; type<dataTransfer.types.length; type++) {\n\t\t\tconsole.log(\"type\",dataTransfer.types[type],dataTransfer.getData(dataTransfer.types[type]))\n\t\t}\n\t}\n\tfor(var t=0; t<importDataTypes.length; t++) {\n\t\tif(!$tw.browser.isIE || importDataTypes[t].IECompatible) {\n\t\t\t// Get the data\n\t\t\tvar dataType = importDataTypes[t];\n\t\t\t\tvar data = dataTransfer.getData(dataType.type);\n\t\t\t// Import the tiddlers in the data\n\t\t\tif(data !== \"\" && data !== null) {\n\t\t\t\tif($tw.log.IMPORT) {\n\t\t\t\t\tconsole.log(\"Importing data type '\" + dataType.type + \"', data: '\" + data + \"'\")\n\t\t\t\t}\n\t\t\t\tvar tiddlerFields = dataType.toTiddlerFieldsArray(data,fallbackTitle);\n\t\t\t\tcallback(tiddlerFields);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n};\n\nvar importDataTypes = [\n\t{type: \"text/vnd.tiddler\", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\treturn parseJSONTiddlers(data,fallbackTitle);\n\t}},\n\t{type: \"URL\", IECompatible: true, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\t// Check for tiddler data URI\n\t\tvar match = decodeURIComponent(data).match(/^data\\:text\\/vnd\\.tiddler,(.*)/i);\n\t\tif(match) {\n\t\t\treturn parseJSONTiddlers(match[1],fallbackTitle);\n\t\t} else {\n\t\t\treturn [{title: fallbackTitle, text: data}]; // As URL string\n\t\t}\n\t}},\n\t{type: \"text/x-moz-url\", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\t// Check for tiddler data URI\n\t\tvar match = decodeURIComponent(data).match(/^data\\:text\\/vnd\\.tiddler,(.*)/i);\n\t\tif(match) {\n\t\t\treturn parseJSONTiddlers(match[1],fallbackTitle);\n\t\t} else {\n\t\t\treturn [{title: fallbackTitle, text: data}]; // As URL string\n\t\t}\n\t}},\n\t{type: \"text/html\", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\treturn [{title: fallbackTitle, text: data}];\n\t}},\n\t{type: \"text/plain\", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\treturn [{title: fallbackTitle, text: data}];\n\t}},\n\t{type: \"Text\", IECompatible: true, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\treturn [{title: fallbackTitle, text: data}];\n\t}},\n\t{type: \"text/uri-list\", IECompatible: false, toTiddlerFieldsArray: function(data,fallbackTitle) {\n\t\treturn [{title: fallbackTitle, text: data}];\n\t}}\n];\n\nfunction parseJSONTiddlers(json,fallbackTitle) {\n\tvar data = JSON.parse(json);\n\tif(!$tw.utils.isArray(data)) {\n\t\tdata = [data];\n\t}\n\tdata.forEach(function(fields) {\n\t\tfields.title = fields.title || fallbackTitle;\n\t});\n\treturn data;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/http.js": {
"title": "$:/core/modules/utils/dom/http.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/http.js\ntype: application/javascript\nmodule-type: utils\n\nBrowser HTTP support\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nA quick and dirty HTTP function; to be refactored later. Options are:\n\turl: URL to retrieve\n\theaders: hashmap of headers to send\n\ttype: GET, PUT, POST etc\n\tcallback: function invoked with (err,data,xhr)\n\treturnProp: string name of the property to return as first argument of callback\n*/\nexports.httpRequest = function(options) {\n\tvar type = options.type || \"GET\",\n\t\turl = options.url,\n\t\theaders = options.headers || {accept: \"application/json\"},\n\t\treturnProp = options.returnProp || \"responseText\",\n\t\trequest = new XMLHttpRequest(),\n\t\tdata = \"\",\n\t\tf,results;\n\t// Massage the data hashmap into a string\n\tif(options.data) {\n\t\tif(typeof options.data === \"string\") { // Already a string\n\t\t\tdata = options.data;\n\t\t} else { // A hashmap of strings\n\t\t\tresults = [];\n\t\t\t$tw.utils.each(options.data,function(dataItem,dataItemTitle) {\n\t\t\t\tresults.push(dataItemTitle + \"=\" + encodeURIComponent(dataItem));\n\t\t\t});\n\t\t\tif(type === \"GET\" || type === \"HEAD\") {\n\t\t\t\turl += \"?\" + results.join(\"&\");\n\t\t\t} else {\n\t\t\t\tdata = results.join(\"&\");\n\t\t\t}\n\t\t}\n\t}\n\t// Set up the state change handler\n\trequest.onreadystatechange = function() {\n\t\tif(this.readyState === 4) {\n\t\t\tif(this.status === 200 || this.status === 201 || this.status === 204) {\n\t\t\t\t// Success!\n\t\t\t\toptions.callback(null,this[returnProp],this);\n\t\t\t\treturn;\n\t\t\t}\n\t\t// Something went wrong\n\t\toptions.callback($tw.language.getString(\"Error/XMLHttpRequest\") + \": \" + this.status,null,this);\n\t\t}\n\t};\n\t// Make the request\n\trequest.open(type,url,true);\n\tif(headers) {\n\t\t$tw.utils.each(headers,function(header,headerTitle,object) {\n\t\t\trequest.setRequestHeader(headerTitle,header);\n\t\t});\n\t}\n\tif(data && !$tw.utils.hop(headers,\"Content-type\")) {\n\t\trequest.setRequestHeader(\"Content-type\",\"application/x-www-form-urlencoded; charset=UTF-8\");\n\t}\n\tif(!$tw.utils.hop(headers,\"X-Requested-With\")) {\n\t\trequest.setRequestHeader(\"X-Requested-With\",\"TiddlyWiki\");\n\t}\n\ttry {\n\t\trequest.send(data);\n\t} catch(e) {\n\t\toptions.callback(e,null,this);\n\t}\n\treturn request;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/keyboard.js": {
"title": "$:/core/modules/utils/dom/keyboard.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/keyboard.js\ntype: application/javascript\nmodule-type: utils\n\nKeyboard utilities; now deprecated. Instead, use $tw.keyboardManager\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n[\"parseKeyDescriptor\",\"checkKeyDescriptor\"].forEach(function(method) {\n\texports[method] = function() {\n\t\tif($tw.keyboardManager) {\n\t\t\treturn $tw.keyboardManager[method].apply($tw.keyboardManager,Array.prototype.slice.call(arguments,0));\n\t\t} else {\n\t\t\treturn null\n\t\t}\n\t};\n});\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/modal.js": {
"title": "$:/core/modules/utils/dom/modal.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/modal.js\ntype: application/javascript\nmodule-type: utils\n\nModal message mechanism\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nvar Modal = function(wiki) {\n\tthis.wiki = wiki;\n\tthis.modalCount = 0;\n};\n\n/*\nDisplay a modal dialogue\n\ttitle: Title of tiddler to display\n\toptions: see below\nOptions include:\n\tdownloadLink: Text of a big download link to include\n*/\nModal.prototype.display = function(title,options) {\n\toptions = options || {};\n\tthis.srcDocument = options.variables && (options.variables.rootwindow === \"true\" ||\n\t\t\t\toptions.variables.rootwindow === \"yes\") ? document :\n\t\t\t\t(options.event.event && options.event.event.target ? options.event.event.target.ownerDocument : document);\n\tthis.srcWindow = this.srcDocument.defaultView;\n\tvar self = this,\n\t\trefreshHandler,\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\ttiddler = this.wiki.getTiddler(title);\n\t// Don't do anything if the tiddler doesn't exist\n\tif(!tiddler) {\n\t\treturn;\n\t}\n\t// Create the variables\n\tvar variables = $tw.utils.extend({currentTiddler: title},options.variables);\n\t// Create the wrapper divs\n\tvar wrapper = this.srcDocument.createElement(\"div\"),\n\t\tmodalBackdrop = this.srcDocument.createElement(\"div\"),\n\t\tmodalWrapper = this.srcDocument.createElement(\"div\"),\n\t\tmodalHeader = this.srcDocument.createElement(\"div\"),\n\t\theaderTitle = this.srcDocument.createElement(\"h3\"),\n\t\tmodalBody = this.srcDocument.createElement(\"div\"),\n\t\tmodalLink = this.srcDocument.createElement(\"a\"),\n\t\tmodalFooter = this.srcDocument.createElement(\"div\"),\n\t\tmodalFooterHelp = this.srcDocument.createElement(\"span\"),\n\t\tmodalFooterButtons = this.srcDocument.createElement(\"span\");\n\t// Up the modal count and adjust the body class\n\tthis.modalCount++;\n\tthis.adjustPageClass();\n\t// Add classes\n\t$tw.utils.addClass(wrapper,\"tc-modal-wrapper\");\n\tif(tiddler.fields && tiddler.fields.class) {\n\t\t$tw.utils.addClass(wrapper,tiddler.fields.class);\n\t}\n\t$tw.utils.addClass(modalBackdrop,\"tc-modal-backdrop\");\n\t$tw.utils.addClass(modalWrapper,\"tc-modal\");\n\t$tw.utils.addClass(modalHeader,\"tc-modal-header\");\n\t$tw.utils.addClass(modalBody,\"tc-modal-body\");\n\t$tw.utils.addClass(modalFooter,\"tc-modal-footer\");\n\t// Join them together\n\twrapper.appendChild(modalBackdrop);\n\twrapper.appendChild(modalWrapper);\n\tmodalHeader.appendChild(headerTitle);\n\tmodalWrapper.appendChild(modalHeader);\n\tmodalWrapper.appendChild(modalBody);\n\tmodalFooter.appendChild(modalFooterHelp);\n\tmodalFooter.appendChild(modalFooterButtons);\n\tmodalWrapper.appendChild(modalFooter);\n\t// Render the title of the message\n\tvar headerWidgetNode = this.wiki.makeTranscludeWidget(title,{\n\t\tfield: \"subtitle\",\n\t\tmode: \"inline\",\n\t\tchildren: [{\n\t\t\ttype: \"text\",\n\t\t\tattributes: {\n\t\t\t\ttext: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tvalue: title\n\t\t}}}],\n\t\tparentWidget: $tw.rootWidget,\n\t\tdocument: this.srcDocument,\n\t\tvariables: variables,\n\t\timportPageMacros: true\n\t});\n\theaderWidgetNode.render(headerTitle,null);\n\t// Render the body of the message\n\tvar bodyWidgetNode = this.wiki.makeTranscludeWidget(title,{\n\t\tparentWidget: $tw.rootWidget,\n\t\tdocument: this.srcDocument,\n\t\tvariables: variables,\n\t\timportPageMacros: true\n\t});\n\tbodyWidgetNode.render(modalBody,null);\n\t// Setup the link if present\n\tif(options.downloadLink) {\n\t\tmodalLink.href = options.downloadLink;\n\t\tmodalLink.appendChild(this.srcDocument.createTextNode(\"Right-click to save changes\"));\n\t\tmodalBody.appendChild(modalLink);\n\t}\n\t// Render the footer of the message\n\tif(tiddler.fields && tiddler.fields.help) {\n\t\tvar link = this.srcDocument.createElement(\"a\");\n\t\tlink.setAttribute(\"href\",tiddler.fields.help);\n\t\tlink.setAttribute(\"target\",\"_blank\");\n\t\tlink.setAttribute(\"rel\",\"noopener noreferrer\");\n\t\tlink.appendChild(this.srcDocument.createTextNode(\"Help\"));\n\t\tmodalFooterHelp.appendChild(link);\n\t\tmodalFooterHelp.style.float = \"left\";\n\t}\n\tvar footerWidgetNode = this.wiki.makeTranscludeWidget(title,{\n\t\tfield: \"footer\",\n\t\tmode: \"inline\",\n\t\tchildren: [{\n\t\t\ttype: \"button\",\n\t\t\tattributes: {\n\t\t\t\tmessage: {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tvalue: \"tm-close-tiddler\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tchildren: [{\n\t\t\t\ttype: \"text\",\n\t\t\t\tattributes: {\n\t\t\t\t\ttext: {\n\t\t\t\t\t\ttype: \"string\",\n\t\t\t\t\t\tvalue: $tw.language.getString(\"Buttons/Close/Caption\")\n\t\t\t}}}\n\t\t]}],\n\t\tparentWidget: $tw.rootWidget,\n\t\tdocument: this.srcDocument,\n\t\tvariables: variables,\n\t\timportPageMacros: true\n\t});\n\tfooterWidgetNode.render(modalFooterButtons,null);\n\t// Set up the refresh handler\n\trefreshHandler = function(changes) {\n\t\theaderWidgetNode.refresh(changes,modalHeader,null);\n\t\tbodyWidgetNode.refresh(changes,modalBody,null);\n\t\tfooterWidgetNode.refresh(changes,modalFooterButtons,null);\n\t};\n\tthis.wiki.addEventListener(\"change\",refreshHandler);\n\t// Add the close event handler\n\tvar closeHandler = function(event) {\n\t\t// Remove our refresh handler\n\t\tself.wiki.removeEventListener(\"change\",refreshHandler);\n\t\t// Decrease the modal count and adjust the body class\n\t\tself.modalCount--;\n\t\tself.adjustPageClass();\n\t\t// Force layout and animate the modal message away\n\t\t$tw.utils.forceLayout(modalBackdrop);\n\t\t$tw.utils.forceLayout(modalWrapper);\n\t\t$tw.utils.setStyle(modalBackdrop,[\n\t\t\t{opacity: \"0\"}\n\t\t]);\n\t\t$tw.utils.setStyle(modalWrapper,[\n\t\t\t{transform: \"translateY(\" + self.srcWindow.innerHeight + \"px)\"}\n\t\t]);\n\t\t// Set up an event for the transition end\n\t\tself.srcWindow.setTimeout(function() {\n\t\t\tif(wrapper.parentNode) {\n\t\t\t\t// Remove the modal message from the DOM\n\t\t\t\tself.srcDocument.body.removeChild(wrapper);\n\t\t\t}\n\t\t},duration);\n\t\t// Don't let anyone else handle the tm-close-tiddler message\n\t\treturn false;\n\t};\n\theaderWidgetNode.addEventListener(\"tm-close-tiddler\",closeHandler,false);\n\tbodyWidgetNode.addEventListener(\"tm-close-tiddler\",closeHandler,false);\n\tfooterWidgetNode.addEventListener(\"tm-close-tiddler\",closeHandler,false);\n\t// Set the initial styles for the message\n\t$tw.utils.setStyle(modalBackdrop,[\n\t\t{opacity: \"0\"}\n\t]);\n\t$tw.utils.setStyle(modalWrapper,[\n\t\t{transformOrigin: \"0% 0%\"},\n\t\t{transform: \"translateY(\" + (-this.srcWindow.innerHeight) + \"px)\"}\n\t]);\n\t// Put the message into the document\n\tthis.srcDocument.body.appendChild(wrapper);\n\t// Set up animation for the styles\n\t$tw.utils.setStyle(modalBackdrop,[\n\t\t{transition: \"opacity \" + duration + \"ms ease-out\"}\n\t]);\n\t$tw.utils.setStyle(modalWrapper,[\n\t\t{transition: $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out\"}\n\t]);\n\t// Force layout\n\t$tw.utils.forceLayout(modalBackdrop);\n\t$tw.utils.forceLayout(modalWrapper);\n\t// Set final animated styles\n\t$tw.utils.setStyle(modalBackdrop,[\n\t\t{opacity: \"0.7\"}\n\t]);\n\t$tw.utils.setStyle(modalWrapper,[\n\t\t{transform: \"translateY(0px)\"}\n\t]);\n};\n\nModal.prototype.adjustPageClass = function() {\n\tvar windowContainer = $tw.pageContainer ? ($tw.pageContainer === this.srcDocument.body.firstChild ? $tw.pageContainer : this.srcDocument.body.firstChild) : null;\n\tif(windowContainer) {\n\t\t$tw.utils.toggleClass(windowContainer,\"tc-modal-displayed\",this.modalCount > 0);\n\t}\n};\n\nexports.Modal = Modal;\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/notifier.js": {
"title": "$:/core/modules/utils/dom/notifier.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/notifier.js\ntype: application/javascript\nmodule-type: utils\n\nNotifier mechanism\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nvar Notifier = function(wiki) {\n\tthis.wiki = wiki;\n};\n\n/*\nDisplay a notification\n\ttitle: Title of tiddler containing the notification text\n\toptions: see below\nOptions include:\n*/\nNotifier.prototype.display = function(title,options) {\n\toptions = options || {};\n\t// Create the wrapper divs\n\tvar self = this,\n\t\tnotification = document.createElement(\"div\"),\n\t\ttiddler = this.wiki.getTiddler(title),\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t\trefreshHandler;\n\t// Don't do anything if the tiddler doesn't exist\n\tif(!tiddler) {\n\t\treturn;\n\t}\n\t// Add classes\n\t$tw.utils.addClass(notification,\"tc-notification\");\n\t// Create the variables\n\tvar variables = $tw.utils.extend({currentTiddler: title},options.variables);\n\t// Render the body of the notification\n\tvar widgetNode = this.wiki.makeTranscludeWidget(title,{\n\t\tparentWidget: $tw.rootWidget,\n\t\tdocument: document,\n\t\tvariables: variables,\n\t\timportPageMacros: true});\n\twidgetNode.render(notification,null);\n\trefreshHandler = function(changes) {\n\t\twidgetNode.refresh(changes,notification,null);\n\t};\n\tthis.wiki.addEventListener(\"change\",refreshHandler);\n\t// Set the initial styles for the notification\n\t$tw.utils.setStyle(notification,[\n\t\t{opacity: \"0\"},\n\t\t{transformOrigin: \"0% 0%\"},\n\t\t{transform: \"translateY(\" + (-window.innerHeight) + \"px)\"},\n\t\t{transition: \"opacity \" + duration + \"ms ease-out, \" + $tw.utils.roundTripPropertyName(\"transform\") + \" \" + duration + \"ms ease-in-out\"}\n\t]);\n\t// Add the notification to the DOM\n\tdocument.body.appendChild(notification);\n\t// Force layout\n\t$tw.utils.forceLayout(notification);\n\t// Set final animated styles\n\t$tw.utils.setStyle(notification,[\n\t\t{opacity: \"1.0\"},\n\t\t{transform: \"translateY(0px)\"}\n\t]);\n\t// Set a timer to remove the notification\n\twindow.setTimeout(function() {\n\t\t// Remove our change event handler\n\t\tself.wiki.removeEventListener(\"change\",refreshHandler);\n\t\t// Force layout and animate the notification away\n\t\t$tw.utils.forceLayout(notification);\n\t\t$tw.utils.setStyle(notification,[\n\t\t\t{opacity: \"0.0\"},\n\t\t\t{transform: \"translateX(\" + (notification.offsetWidth) + \"px)\"}\n\t\t]);\n\t\t// Remove the modal message from the DOM once the transition ends\n\t\tsetTimeout(function() {\n\t\t\tif(notification.parentNode) {\n\t\t\t\tdocument.body.removeChild(notification);\n\t\t\t}\n\t\t},duration);\n\t},$tw.config.preferences.notificationDuration);\n};\n\nexports.Notifier = Notifier;\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/popup.js": {
"title": "$:/core/modules/utils/dom/popup.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/popup.js\ntype: application/javascript\nmodule-type: utils\n\nModule that creates a $tw.utils.Popup object prototype that manages popups in the browser\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nCreates a Popup object with these options:\n\trootElement: the DOM element to which the popup zapper should be attached\n*/\nvar Popup = function(options) {\n\toptions = options || {};\n\tthis.rootElement = options.rootElement || document.documentElement;\n\tthis.popups = []; // Array of {title:,wiki:,domNode:} objects\n};\n\n/*\nTrigger a popup open or closed. Parameters are in a hashmap:\n\ttitle: title of the tiddler where the popup details are stored\n\tdomNode: dom node to which the popup will be positioned (one of domNode or domNodeRect is required)\n\tdomNodeRect: rectangle to which the popup will be positioned\n\twiki: wiki\n\tforce: if specified, forces the popup state to true or false (instead of toggling it)\n\tfloating: if true, skips registering the popup, meaning that it will need manually clearing\n*/\nPopup.prototype.triggerPopup = function(options) {\n\t// Check if this popup is already active\n\tvar index = this.findPopup(options.title);\n\t// Compute the new state\n\tvar state = index === -1;\n\tif(options.force !== undefined) {\n\t\tstate = options.force;\n\t}\n\t// Show or cancel the popup according to the new state\n\tif(state) {\n\t\tthis.show(options);\n\t} else {\n\t\tthis.cancel(index);\n\t}\n};\n\nPopup.prototype.findPopup = function(title) {\n\tvar index = -1;\n\tfor(var t=0; t<this.popups.length; t++) {\n\t\tif(this.popups[t].title === title) {\n\t\t\tindex = t;\n\t\t}\n\t}\n\treturn index;\n};\n\nPopup.prototype.handleEvent = function(event) {\n\tif(event.type === \"click\") {\n\t\t// Find out what was clicked on\n\t\tvar info = this.popupInfo(event.target),\n\t\t\tcancelLevel = info.popupLevel - 1;\n\t\t// Don't remove the level that was clicked on if we clicked on a handle\n\t\tif(info.isHandle) {\n\t\t\tcancelLevel++;\n\t\t}\n\t\t// Cancel\n\t\tthis.cancel(cancelLevel);\n\t}\n};\n\n/*\nFind the popup level containing a DOM node. Returns:\npopupLevel: count of the number of nested popups containing the specified element\nisHandle: true if the specified element is within a popup handle\n*/\nPopup.prototype.popupInfo = function(domNode) {\n\tvar isHandle = false,\n\t\tpopupCount = 0,\n\t\tnode = domNode;\n\t// First check ancestors to see if we're within a popup handle\n\twhile(node) {\n\t\tif($tw.utils.hasClass(node,\"tc-popup-handle\")) {\n\t\t\tisHandle = true;\n\t\t\tpopupCount++;\n\t\t}\n\t\tif($tw.utils.hasClass(node,\"tc-popup-keep\")) {\n\t\t\tisHandle = true;\n\t\t}\n\t\tnode = node.parentNode;\n\t}\n\t// Then count the number of ancestor popups\n\tnode = domNode;\n\twhile(node) {\n\t\tif($tw.utils.hasClass(node,\"tc-popup\")) {\n\t\t\tpopupCount++;\n\t\t}\n\t\tnode = node.parentNode;\n\t}\n\tvar info = {\n\t\tpopupLevel: popupCount,\n\t\tisHandle: isHandle\n\t};\n\treturn info;\n};\n\n/*\nDisplay a popup by adding it to the stack\n*/\nPopup.prototype.show = function(options) {\n\t// Find out what was clicked on\n\tvar info = this.popupInfo(options.domNode);\n\t// Cancel any higher level popups\n\tthis.cancel(info.popupLevel);\n\n\t// Store the popup details if not already there\n\tif(!options.floating && this.findPopup(options.title) === -1) {\n\t\tthis.popups.push({\n\t\t\ttitle: options.title,\n\t\t\twiki: options.wiki,\n\t\t\tdomNode: options.domNode,\n\t\t\tnoStateReference: options.noStateReference\n\t\t});\n\t}\n\t// Set the state tiddler\n\tvar rect;\n\tif(options.domNodeRect) {\n\t\trect = options.domNodeRect;\n\t} else {\n\t\trect = {\n\t\t\tleft: options.domNode.offsetLeft,\n\t\t\ttop: options.domNode.offsetTop,\n\t\t\twidth: options.domNode.offsetWidth,\n\t\t\theight: options.domNode.offsetHeight\n\t\t};\n\t}\n\tvar popupRect = \"(\" + rect.left + \",\" + rect.top + \",\" + \n\t\t\t\trect.width + \",\" + rect.height + \")\";\n\tif(options.noStateReference) {\n\t\toptions.wiki.setText(options.title,\"text\",undefined,popupRect);\n\t} else {\n\t\toptions.wiki.setTextReference(options.title,popupRect);\n\t}\n\t// Add the click handler if we have any popups\n\tif(this.popups.length > 0) {\n\t\tthis.rootElement.addEventListener(\"click\",this,true);\t\t\n\t}\n};\n\n/*\nCancel all popups at or above a specified level or DOM node\nlevel: popup level to cancel (0 cancels all popups)\n*/\nPopup.prototype.cancel = function(level) {\n\tvar numPopups = this.popups.length;\n\tlevel = Math.max(0,Math.min(level,numPopups));\n\tfor(var t=level; t<numPopups; t++) {\n\t\tvar popup = this.popups.pop();\n\t\tif(popup.title) {\n\t\t\tif(popup.noStateReference) {\n\t\t\t\tpopup.wiki.deleteTiddler(popup.title);\n\t\t\t} else {\n\t\t\t\tpopup.wiki.deleteTiddler($tw.utils.parseTextReference(popup.title).title);\n \t\t}\n\t\t}\n\t}\n\tif(this.popups.length === 0) {\n\t\tthis.rootElement.removeEventListener(\"click\",this,false);\n\t}\n};\n\n/*\nReturns true if the specified title and text identifies an active popup\n*/\nPopup.prototype.readPopupState = function(text) {\n\tvar popupLocationRegExp = /^\\((-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+)\\)$/;\n\treturn popupLocationRegExp.test(text);\n};\n\nexports.Popup = Popup;\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/dom/scroller.js": {
"title": "$:/core/modules/utils/dom/scroller.js",
"text": "/*\\\ntitle: $:/core/modules/utils/dom/scroller.js\ntype: application/javascript\nmodule-type: utils\n\nModule that creates a $tw.utils.Scroller object prototype that manages scrolling in the browser\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nEvent handler for when the `tm-scroll` event hits the document body\n*/\nvar PageScroller = function() {\n\tthis.idRequestFrame = null;\n\tthis.requestAnimationFrame = window.requestAnimationFrame ||\n\t\twindow.webkitRequestAnimationFrame ||\n\t\twindow.mozRequestAnimationFrame ||\n\t\tfunction(callback) {\n\t\t\treturn window.setTimeout(callback, 1000/60);\n\t\t};\n\tthis.cancelAnimationFrame = window.cancelAnimationFrame ||\n\t\twindow.webkitCancelAnimationFrame ||\n\t\twindow.webkitCancelRequestAnimationFrame ||\n\t\twindow.mozCancelAnimationFrame ||\n\t\twindow.mozCancelRequestAnimationFrame ||\n\t\tfunction(id) {\n\t\t\twindow.clearTimeout(id);\n\t\t};\n};\n\nPageScroller.prototype.isScrolling = function() {\n\treturn this.idRequestFrame !== null;\n}\n\nPageScroller.prototype.cancelScroll = function(srcWindow) {\n\tif(this.idRequestFrame) {\n\t\tthis.cancelAnimationFrame.call(srcWindow,this.idRequestFrame);\n\t\tthis.idRequestFrame = null;\n\t}\n};\n\n/*\nHandle an event\n*/\nPageScroller.prototype.handleEvent = function(event) {\n\tif(event.type === \"tm-scroll\") {\n\t\treturn this.scrollIntoView(event.target);\n\t}\n\treturn true;\n};\n\n/*\nHandle a scroll event hitting the page document\n*/\nPageScroller.prototype.scrollIntoView = function(element,callback) {\n\tvar self = this,\n\t\tduration = $tw.utils.getAnimationDuration(),\n\t srcWindow = element ? element.ownerDocument.defaultView : window;\n\t// Now get ready to scroll the body\n\tthis.cancelScroll(srcWindow);\n\tthis.startTime = Date.now();\n\t// Get the height of any position:fixed toolbars\n\tvar toolbar = srcWindow.document.querySelector(\".tc-adjust-top-of-scroll\"),\n\t\toffset = 0;\n\tif(toolbar) {\n\t\toffset = toolbar.offsetHeight;\n\t}\n\t// Get the client bounds of the element and adjust by the scroll position\n\tvar getBounds = function() {\n\t\t\tvar clientBounds = typeof callback === 'function' ? callback() : element.getBoundingClientRect(),\n\t\t\t\tscrollPosition = $tw.utils.getScrollPosition(srcWindow);\n\t\t\treturn {\n\t\t\t\tleft: clientBounds.left + scrollPosition.x,\n\t\t\t\ttop: clientBounds.top + scrollPosition.y - offset,\n\t\t\t\twidth: clientBounds.width,\n\t\t\t\theight: clientBounds.height\n\t\t\t};\n\t\t},\n\t\t// We'll consider the horizontal and vertical scroll directions separately via this function\n\t\t// targetPos/targetSize - position and size of the target element\n\t\t// currentPos/currentSize - position and size of the current scroll viewport\n\t\t// returns: new position of the scroll viewport\n\t\tgetEndPos = function(targetPos,targetSize,currentPos,currentSize) {\n\t\t\tvar newPos = targetPos;\n\t\t\t// If we are scrolling within 50 pixels of the top/left then snap to zero\n\t\t\tif(newPos < 50) {\n\t\t\t\tnewPos = 0;\n\t\t\t}\n\t\t\treturn newPos;\n\t\t},\n\t\tdrawFrame = function drawFrame() {\n\t\t\tvar t;\n\t\t\tif(duration <= 0) {\n\t\t\t\tt = 1;\n\t\t\t} else {\n\t\t\t\tt = ((Date.now()) - self.startTime) / duration;\t\n\t\t\t}\n\t\t\tif(t >= 1) {\n\t\t\t\tself.cancelScroll(srcWindow);\n\t\t\t\tt = 1;\n\t\t\t}\n\t\t\tt = $tw.utils.slowInSlowOut(t);\n\t\t\tvar scrollPosition = $tw.utils.getScrollPosition(srcWindow),\n\t\t\t\tbounds = getBounds(),\n\t\t\t\tendX = getEndPos(bounds.left,bounds.width,scrollPosition.x,srcWindow.innerWidth),\n\t\t\t\tendY = getEndPos(bounds.top,bounds.height,scrollPosition.y,srcWindow.innerHeight);\n\t\t\tsrcWindow.scrollTo(scrollPosition.x + (endX - scrollPosition.x) * t,scrollPosition.y + (endY - scrollPosition.y) * t);\n\t\t\tif(t < 1) {\n\t\t\t\tself.idRequestFrame = self.requestAnimationFrame.call(srcWindow,drawFrame);\n\t\t\t}\n\t\t};\n\tdrawFrame();\n};\n\nexports.PageScroller = PageScroller;\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/edition-info.js": {
"title": "$:/core/modules/utils/edition-info.js",
"text": "/*\\\ntitle: $:/core/modules/utils/edition-info.js\ntype: application/javascript\nmodule-type: utils-node\n\nInformation about the available editions\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar fs = require(\"fs\"),\n\tpath = require(\"path\");\n\nvar editionInfo;\n\nexports.getEditionInfo = function() {\n\tif(!editionInfo) {\n\t\t// Enumerate the edition paths\n\t\tvar editionPaths = $tw.getLibraryItemSearchPaths($tw.config.editionsPath,$tw.config.editionsEnvVar);\n\t\teditionInfo = {};\n\t\tfor(var editionIndex=0; editionIndex<editionPaths.length; editionIndex++) {\n\t\t\tvar editionPath = editionPaths[editionIndex];\n\t\t\t// Enumerate the folders\n\t\t\tvar entries = fs.readdirSync(editionPath);\n\t\t\tfor(var entryIndex=0; entryIndex<entries.length; entryIndex++) {\n\t\t\t\tvar entry = entries[entryIndex];\n\t\t\t\t// Check if directories have a valid tiddlywiki.info\n\t\t\t\tif(!editionInfo[entry] && $tw.utils.isDirectory(path.resolve(editionPath,entry))) {\n\t\t\t\t\tvar info;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tinfo = JSON.parse(fs.readFileSync(path.resolve(editionPath,entry,\"tiddlywiki.info\"),\"utf8\"));\n\t\t\t\t\t} catch(ex) {\n\t\t\t\t\t}\n\t\t\t\t\tif(info) {\n\t\t\t\t\t\teditionInfo[entry] = info;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn editionInfo;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils-node"
},
"$:/core/modules/utils/fakedom.js": {
"title": "$:/core/modules/utils/fakedom.js",
"text": "/*\\\ntitle: $:/core/modules/utils/fakedom.js\ntype: application/javascript\nmodule-type: global\n\nA barebones implementation of DOM interfaces needed by the rendering mechanism.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Sequence number used to enable us to track objects for testing\nvar sequenceNumber = null;\n\nvar bumpSequenceNumber = function(object) {\n\tif(sequenceNumber !== null) {\n\t\tobject.sequenceNumber = sequenceNumber++;\n\t}\n};\n\nvar TW_TextNode = function(text) {\n\tbumpSequenceNumber(this);\n\tthis.textContent = text + \"\";\n};\n\nObject.defineProperty(TW_TextNode.prototype, \"nodeType\", {\n\tget: function() {\n\t\treturn 3;\n\t}\n});\n\nObject.defineProperty(TW_TextNode.prototype, \"formattedTextContent\", {\n\tget: function() {\n\t\treturn this.textContent.replace(/(\\r?\\n)/g,\"\");\n\t}\n});\n\nvar TW_Element = function(tag,namespace) {\n\tbumpSequenceNumber(this);\n\tthis.isTiddlyWikiFakeDom = true;\n\tthis.tag = tag;\n\tthis.attributes = {};\n\tthis.isRaw = false;\n\tthis.children = [];\n\tthis._style = {};\n\tthis.namespaceURI = namespace || \"http://www.w3.org/1999/xhtml\";\n};\n\nObject.defineProperty(TW_Element.prototype, \"style\", {\n\tget: function() {\n\t\treturn this._style;\n\t},\n\tset: function(str) {\n\t\tvar self = this;\n\t\tstr = str || \"\";\n\t\t$tw.utils.each(str.split(\";\"),function(declaration) {\n\t\t\tvar parts = declaration.split(\":\"),\n\t\t\t\tname = $tw.utils.trim(parts[0]),\n\t\t\t\tvalue = $tw.utils.trim(parts[1]);\n\t\t\tif(name && value) {\n\t\t\t\tself._style[$tw.utils.convertStyleNameToPropertyName(name)] = value;\n\t\t\t}\n\t\t});\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"nodeType\", {\n\tget: function() {\n\t\treturn 1;\n\t}\n});\n\nTW_Element.prototype.getAttribute = function(name) {\n\tif(this.isRaw) {\n\t\tthrow \"Cannot getAttribute on a raw TW_Element\";\n\t}\n\treturn this.attributes[name];\n};\n\nTW_Element.prototype.setAttribute = function(name,value) {\n\tif(this.isRaw) {\n\t\tthrow \"Cannot setAttribute on a raw TW_Element\";\n\t}\n\tthis.attributes[name] = value + \"\";\n};\n\nTW_Element.prototype.setAttributeNS = function(namespace,name,value) {\n\tthis.setAttribute(name,value);\n};\n\nTW_Element.prototype.removeAttribute = function(name) {\n\tif(this.isRaw) {\n\t\tthrow \"Cannot removeAttribute on a raw TW_Element\";\n\t}\n\tif($tw.utils.hop(this.attributes,name)) {\n\t\tdelete this.attributes[name];\n\t}\n};\n\nTW_Element.prototype.appendChild = function(node) {\n\tthis.children.push(node);\n\tnode.parentNode = this;\n};\n\nTW_Element.prototype.insertBefore = function(node,nextSibling) {\n\tif(nextSibling) {\n\t\tvar p = this.children.indexOf(nextSibling);\n\t\tif(p !== -1) {\n\t\t\tthis.children.splice(p,0,node);\n\t\t\tnode.parentNode = this;\n\t\t} else {\n\t\t\tthis.appendChild(node);\n\t\t}\n\t} else {\n\t\tthis.appendChild(node);\n\t}\n};\n\nTW_Element.prototype.removeChild = function(node) {\n\tvar p = this.children.indexOf(node);\n\tif(p !== -1) {\n\t\tthis.children.splice(p,1);\n\t}\n};\n\nTW_Element.prototype.hasChildNodes = function() {\n\treturn !!this.children.length;\n};\n\nObject.defineProperty(TW_Element.prototype, \"childNodes\", {\n\tget: function() {\n\t\treturn this.children;\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"firstChild\", {\n\tget: function() {\n\t\treturn this.children[0];\n\t}\n});\n\nTW_Element.prototype.addEventListener = function(type,listener,useCapture) {\n\t// Do nothing\n};\n\nObject.defineProperty(TW_Element.prototype, \"tagName\", {\n\tget: function() {\n\t\treturn this.tag || \"\";\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"className\", {\n\tget: function() {\n\t\treturn this.attributes[\"class\"] || \"\";\n\t},\n\tset: function(value) {\n\t\tthis.attributes[\"class\"] = value + \"\";\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"value\", {\n\tget: function() {\n\t\treturn this.attributes.value || \"\";\n\t},\n\tset: function(value) {\n\t\tthis.attributes.value = value + \"\";\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"outerHTML\", {\n\tget: function() {\n\t\tvar output = [],attr,a,v;\n\t\toutput.push(\"<\",this.tag);\n\t\tif(this.attributes) {\n\t\t\tattr = [];\n\t\t\tfor(a in this.attributes) {\n\t\t\t\tattr.push(a);\n\t\t\t}\n\t\t\tattr.sort();\n\t\t\tfor(a=0; a<attr.length; a++) {\n\t\t\t\tv = this.attributes[attr[a]];\n\t\t\t\tif(v !== undefined) {\n\t\t\t\t\toutput.push(\" \",attr[a],\"=\\\"\",$tw.utils.htmlEncode(v),\"\\\"\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif(this._style) {\n\t\t\tvar style = [];\n\t\t\tfor(var s in this._style) {\n\t\t\t\tstyle.push($tw.utils.convertPropertyNameToStyleName(s) + \":\" + this._style[s] + \";\");\n\t\t\t}\n\t\t\tif(style.length > 0) {\n\t\t\t\toutput.push(\" style=\\\"\",style.join(\"\"),\"\\\"\");\n\t\t\t}\n\t\t}\n\t\toutput.push(\">\");\n\t\tif($tw.config.htmlVoidElements.indexOf(this.tag) === -1) {\n\t\t\toutput.push(this.innerHTML);\n\t\t\toutput.push(\"</\",this.tag,\">\");\n\t\t}\n\t\treturn output.join(\"\");\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"innerHTML\", {\n\tget: function() {\n\t\tif(this.isRaw) {\n\t\t\treturn this.rawHTML;\n\t\t} else {\n\t\t\tvar b = [];\n\t\t\t$tw.utils.each(this.children,function(node) {\n\t\t\t\tif(node instanceof TW_Element) {\n\t\t\t\t\tb.push(node.outerHTML);\n\t\t\t\t} else if(node instanceof TW_TextNode) {\n\t\t\t\t\tb.push($tw.utils.htmlEncode(node.textContent));\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn b.join(\"\");\n\t\t}\n\t},\n\tset: function(value) {\n\t\tthis.isRaw = true;\n\t\tthis.rawHTML = value;\n\t\tthis.rawTextContent = null;\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"textInnerHTML\", {\n\tset: function(value) {\n\t\tif(this.isRaw) {\n\t\t\tthis.rawTextContent = value;\n\t\t} else {\n\t\t\tthrow \"Cannot set textInnerHTML of a non-raw TW_Element\";\n\t\t}\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"textContent\", {\n\tget: function() {\n\t\tif(this.isRaw) {\n\t\t\tif(this.rawTextContent === null) {\n\t\t\t\treturn \"\";\n\t\t\t} else {\n\t\t\t\treturn this.rawTextContent;\n\t\t\t}\n\t\t} else {\n\t\t\tvar b = [];\n\t\t\t$tw.utils.each(this.children,function(node) {\n\t\t\t\tb.push(node.textContent);\n\t\t\t});\n\t\t\treturn b.join(\"\");\n\t\t}\n\t},\n\tset: function(value) {\n\t\tthis.children = [new TW_TextNode(value)];\n\t}\n});\n\nObject.defineProperty(TW_Element.prototype, \"formattedTextContent\", {\n\tget: function() {\n\t\tif(this.isRaw) {\n\t\t\treturn \"\";\n\t\t} else {\n\t\t\tvar b = [],\n\t\t\t\tisBlock = $tw.config.htmlBlockElements.indexOf(this.tag) !== -1;\n\t\t\tif(isBlock) {\n\t\t\t\tb.push(\"\\n\");\n\t\t\t}\n\t\t\tif(this.tag === \"li\") {\n\t\t\t\tb.push(\"* \");\n\t\t\t}\n\t\t\t$tw.utils.each(this.children,function(node) {\n\t\t\t\tb.push(node.formattedTextContent);\n\t\t\t});\n\t\t\tif(isBlock) {\n\t\t\t\tb.push(\"\\n\");\n\t\t\t}\n\t\t\treturn b.join(\"\");\n\t\t}\n\t}\n});\n\nvar document = {\n\tsetSequenceNumber: function(value) {\n\t\tsequenceNumber = value;\n\t},\n\tcreateElementNS: function(namespace,tag) {\n\t\treturn new TW_Element(tag,namespace);\n\t},\n\tcreateElement: function(tag) {\n\t\treturn new TW_Element(tag);\n\t},\n\tcreateTextNode: function(text) {\n\t\treturn new TW_TextNode(text);\n\t},\n\tcompatMode: \"CSS1Compat\", // For KaTeX to know that we're not a browser in quirks mode\n\tisTiddlyWikiFakeDom: true\n};\n\nexports.fakeDocument = document;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/utils/filesystem.js": {
"title": "$:/core/modules/utils/filesystem.js",
"text": "/*\\\ntitle: $:/core/modules/utils/filesystem.js\ntype: application/javascript\nmodule-type: utils-node\n\nFile system utilities\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar fs = require(\"fs\"),\n\tpath = require(\"path\");\n\n/*\nRecursively (and synchronously) copy a directory and all its content\n*/\nexports.copyDirectory = function(srcPath,dstPath) {\n\t// Remove any trailing path separators\n\tsrcPath = $tw.utils.removeTrailingSeparator(srcPath);\n\tdstPath = $tw.utils.removeTrailingSeparator(dstPath);\n\t// Create the destination directory\n\tvar err = $tw.utils.createDirectory(dstPath);\n\tif(err) {\n\t\treturn err;\n\t}\n\t// Function to copy a folder full of files\n\tvar copy = function(srcPath,dstPath) {\n\t\tvar srcStats = fs.lstatSync(srcPath),\n\t\t\tdstExists = fs.existsSync(dstPath);\n\t\tif(srcStats.isFile()) {\n\t\t\t$tw.utils.copyFile(srcPath,dstPath);\n\t\t} else if(srcStats.isDirectory()) {\n\t\t\tvar items = fs.readdirSync(srcPath);\n\t\t\tfor(var t=0; t<items.length; t++) {\n\t\t\t\tvar item = items[t],\n\t\t\t\t\terr = copy(srcPath + path.sep + item,dstPath + path.sep + item);\n\t\t\t\tif(err) {\n\t\t\t\t\treturn err;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\tcopy(srcPath,dstPath);\n\treturn null;\n};\n\n/*\nCopy a file\n*/\nvar FILE_BUFFER_LENGTH = 64 * 1024,\n\tfileBuffer;\n\nexports.copyFile = function(srcPath,dstPath) {\n\t// Create buffer if required\n\tif(!fileBuffer) {\n\t\tfileBuffer = Buffer.alloc(FILE_BUFFER_LENGTH);\n\t}\n\t// Create any directories in the destination\n\t$tw.utils.createDirectory(path.dirname(dstPath));\n\t// Copy the file\n\tvar srcFile = fs.openSync(srcPath,\"r\"),\n\t\tdstFile = fs.openSync(dstPath,\"w\"),\n\t\tbytesRead = 1,\n\t\tpos = 0;\n\twhile (bytesRead > 0) {\n\t\tbytesRead = fs.readSync(srcFile,fileBuffer,0,FILE_BUFFER_LENGTH,pos);\n\t\tfs.writeSync(dstFile,fileBuffer,0,bytesRead);\n\t\tpos += bytesRead;\n\t}\n\tfs.closeSync(srcFile);\n\tfs.closeSync(dstFile);\n\treturn null;\n};\n\n/*\nRemove trailing path separator\n*/\nexports.removeTrailingSeparator = function(dirPath) {\n\tvar len = dirPath.length;\n\tif(dirPath.charAt(len-1) === path.sep) {\n\t\tdirPath = dirPath.substr(0,len-1);\n\t}\n\treturn dirPath;\n};\n\n/*\nRecursively create a directory\n*/\nexports.createDirectory = function(dirPath) {\n\tif(dirPath.substr(dirPath.length-1,1) !== path.sep) {\n\t\tdirPath = dirPath + path.sep;\n\t}\n\tvar pos = 1;\n\tpos = dirPath.indexOf(path.sep,pos);\n\twhile(pos !== -1) {\n\t\tvar subDirPath = dirPath.substr(0,pos);\n\t\tif(!$tw.utils.isDirectory(subDirPath)) {\n\t\t\ttry {\n\t\t\t\tfs.mkdirSync(subDirPath);\n\t\t\t} catch(e) {\n\t\t\t\treturn \"Error creating directory '\" + subDirPath + \"'\";\n\t\t\t}\n\t\t}\n\t\tpos = dirPath.indexOf(path.sep,pos + 1);\n\t}\n\treturn null;\n};\n\n/*\nRecursively create directories needed to contain a specified file\n*/\nexports.createFileDirectories = function(filePath) {\n\treturn $tw.utils.createDirectory(path.dirname(filePath));\n};\n\n/*\nRecursively delete a directory\n*/\nexports.deleteDirectory = function(dirPath) {\n\tif(fs.existsSync(dirPath)) {\n\t\tvar entries = fs.readdirSync(dirPath);\n\t\tfor(var entryIndex=0; entryIndex<entries.length; entryIndex++) {\n\t\t\tvar currPath = dirPath + path.sep + entries[entryIndex];\n\t\t\tif(fs.lstatSync(currPath).isDirectory()) {\n\t\t\t\t$tw.utils.deleteDirectory(currPath);\n\t\t\t} else {\n\t\t\t\tfs.unlinkSync(currPath);\n\t\t\t}\n\t\t}\n\tfs.rmdirSync(dirPath);\n\t}\n\treturn null;\n};\n\n/*\nCheck if a path identifies a directory\n*/\nexports.isDirectory = function(dirPath) {\n\treturn fs.existsSync(dirPath) && fs.statSync(dirPath).isDirectory();\n};\n\n/*\nCheck if a path identifies a directory that is empty\n*/\nexports.isDirectoryEmpty = function(dirPath) {\n\tif(!$tw.utils.isDirectory(dirPath)) {\n\t\treturn false;\n\t}\n\tvar files = fs.readdirSync(dirPath),\n\t\tempty = true;\n\t$tw.utils.each(files,function(file,index) {\n\t\tif(file.charAt(0) !== \".\") {\n\t\t\tempty = false;\n\t\t}\n\t});\n\treturn empty;\n};\n\n/*\nRecursively delete a tree of empty directories\n*/\nexports.deleteEmptyDirs = function(dirpath,callback) {\n\tvar self = this;\n\tfs.readdir(dirpath,function(err,files) {\n\t\tif(err) {\n\t\t\treturn callback(err);\n\t\t}\n\t\tif(files.length > 0) {\n\t\t\treturn callback(null);\n\t\t}\n\t\tfs.rmdir(dirpath,function(err) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tself.deleteEmptyDirs(path.dirname(dirpath),callback);\n\t\t});\n\t});\n};\n\n/*\nCreate a fileInfo object for saving a tiddler:\n\tfilepath: the absolute path to the file containing the tiddler\n\ttype: the type of the tiddler file (NOT the type of the tiddler)\n\thasMetaFile: true if the file also has a companion .meta file\nOptions include:\n\tdirectory: absolute path of root directory to which we are saving\n\tpathFilters: optional array of filters to be used to generate the base path\n\twiki: optional wiki for evaluating the pathFilters\n*/\nexports.generateTiddlerFileInfo = function(tiddler,options) {\n\tvar fileInfo = {};\n\t// Check if the tiddler has any unsafe fields that can't be expressed in a .tid or .meta file: containing control characters, or leading/trailing whitespace\n\tvar hasUnsafeFields = false;\n\t$tw.utils.each(tiddler.getFieldStrings(),function(value,fieldName) {\n\t\tif(fieldName !== \"text\") {\n\t\t\thasUnsafeFields = hasUnsafeFields || /[\\x00-\\x1F]/mg.test(value);\n\t\t\thasUnsafeFields = hasUnsafeFields || ($tw.utils.trim(value) !== value);\n\t\t}\n\t});\n\t// Check for field values \n\tif(hasUnsafeFields) {\n\t\t// Save as a JSON file\n\t\tfileInfo.type = \"application/json\";\n\t\tfileInfo.hasMetaFile = false;\n\t} else {\n\t\t// Save as a .tid or a text/binary file plus a .meta file\n\t\tvar tiddlerType = tiddler.fields.type || \"text/vnd.tiddlywiki\";\n\t\tif(tiddlerType === \"text/vnd.tiddlywiki\") {\n\t\t\t// Save as a .tid file\n\t\t\tfileInfo.type = \"application/x-tiddler\";\n\t\t\tfileInfo.hasMetaFile = false;\n\t\t} else {\n\t\t\t// Save as a text/binary file and a .meta file\n\t\t\tfileInfo.type = tiddlerType;\n\t\t\tfileInfo.hasMetaFile = true;\n\t\t}\n\t}\n\t// Take the file extension from the tiddler content type\n\tvar contentTypeInfo = $tw.config.contentTypeInfo[fileInfo.type] || {extension: \"\"};\n\t// Generate the filepath\n\tfileInfo.filepath = $tw.utils.generateTiddlerFilepath(tiddler.fields.title,{\n\t\textension: contentTypeInfo.extension,\n\t\tdirectory: options.directory,\n\t\tpathFilters: options.pathFilters,\n\t\twiki: options.wiki\n\t});\n\treturn fileInfo;\n};\n\n/*\nGenerate the filepath for saving a tiddler\nOptions include:\n\textension: file extension to be added the finished filepath\n\tdirectory: absolute path of root directory to which we are saving\n\tpathFilters: optional array of filters to be used to generate the base path\n\twiki: optional wiki for evaluating the pathFilters\n*/\nexports.generateTiddlerFilepath = function(title,options) {\n\tvar self = this,\n\t\tdirectory = options.directory || \"\",\n\t\textension = options.extension || \"\",\n\t\tfilepath;\n\t// Check if any of the pathFilters applies\n\tif(options.pathFilters && options.wiki) {\n\t\t$tw.utils.each(options.pathFilters,function(filter) {\n\t\t\tif(!filepath) {\n\t\t\t\tvar source = options.wiki.makeTiddlerIterator([title]),\n\t\t\t\t\tresult = options.wiki.filterTiddlers(filter,null,source);\n\t\t\t\tif(result.length > 0) {\n\t\t\t\t\tfilepath = result[0];\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\t// If not, generate a base pathname\n\tif(!filepath) {\n\t\tfilepath = title;\n\t\t// If the filepath already ends in the extension then remove it\n\t\tif(filepath.substring(filepath.length - extension.length) === extension) {\n\t\t\tfilepath = filepath.substring(0,filepath.length - extension.length);\n\t\t}\n\t\t// Remove any forward or backward slashes so we don't create directories\n\t\tfilepath = filepath.replace(/\\/|\\\\/g,\"_\");\n\t}\n\t// Don't let the filename start with a dot because such files are invisible on *nix\n\tfilepath = filepath.replace(/^\\./g,\"_\");\n\t// Remove any characters that can't be used in cross-platform filenames\n\tfilepath = $tw.utils.transliterate(filepath.replace(/<|>|\\:|\\\"|\\||\\?|\\*|\\^/g,\"_\"));\n\t// Truncate the filename if it is too long\n\tif(filepath.length > 200) {\n\t\tfilepath = filepath.substr(0,200);\n\t}\n\t// If the resulting filename is blank (eg because the title is just punctuation characters)\n\tif(!filepath) {\n\t\t// ...then just use the character codes of the title\n\t\tfilepath = \"\";\t\n\t\t$tw.utils.each(title.split(\"\"),function(char) {\n\t\t\tif(filepath) {\n\t\t\t\tfilepath += \"-\";\n\t\t\t}\n\t\t\tfilepath += char.charCodeAt(0).toString();\n\t\t});\n\t}\n\t// Add a uniquifier if the file already exists\n\tvar fullPath,\n\t\tcount = 0;\n\tdo {\n\t\tfullPath = path.resolve(directory,filepath + (count ? \"_\" + count : \"\") + extension);\n\t\tcount++;\n\t} while(fs.existsSync(fullPath));\n\t// Return the full path to the file\n\treturn fullPath;\n};\n\n/*\nSave a tiddler to a file described by the fileInfo:\n\tfilepath: the absolute path to the file containing the tiddler\n\ttype: the type of the tiddler file (NOT the type of the tiddler)\n\thasMetaFile: true if the file also has a companion .meta file\n*/\nexports.saveTiddlerToFile = function(tiddler,fileInfo,callback) {\n\t$tw.utils.createDirectory(path.dirname(fileInfo.filepath));\n\tif(fileInfo.hasMetaFile) {\n\t\t// Save the tiddler as a separate body and meta file\n\t\tvar typeInfo = $tw.config.contentTypeInfo[tiddler.fields.type || \"text/plain\"] || {encoding: \"utf8\"};\n\t\tfs.writeFile(fileInfo.filepath,tiddler.fields.text,typeInfo.encoding,function(err) {\n\t\t\tif(err) {\n\t\t\t\treturn callback(err);\n\t\t\t}\n\t\t\tfs.writeFile(fileInfo.filepath + \".meta\",tiddler.getFieldStringBlock({exclude: [\"text\",\"bag\"]}),\"utf8\",callback);\n\t\t});\n\t} else {\n\t\t// Save the tiddler as a self contained templated file\n\t\tif(fileInfo.type === \"application/x-tiddler\") {\n\t\t\tfs.writeFile(fileInfo.filepath,tiddler.getFieldStringBlock({exclude: [\"text\",\"bag\"]}) + (!!tiddler.fields.text ? \"\\n\\n\" + tiddler.fields.text : \"\"),\"utf8\",callback);\n\t\t} else {\n\t\t\tfs.writeFile(fileInfo.filepath,JSON.stringify([tiddler.getFieldStrings({exclude: [\"bag\"]})],null,$tw.config.preferences.jsonSpaces),\"utf8\",callback);\n\t\t}\n\t}\n};\n\n/*\nSave a tiddler to a file described by the fileInfo:\n\tfilepath: the absolute path to the file containing the tiddler\n\ttype: the type of the tiddler file (NOT the type of the tiddler)\n\thasMetaFile: true if the file also has a companion .meta file\n*/\nexports.saveTiddlerToFileSync = function(tiddler,fileInfo) {\n\t$tw.utils.createDirectory(path.dirname(fileInfo.filepath));\n\tif(fileInfo.hasMetaFile) {\n\t\t// Save the tiddler as a separate body and meta file\n\t\tvar typeInfo = $tw.config.contentTypeInfo[tiddler.fields.type || \"text/plain\"] || {encoding: \"utf8\"};\n\t\tfs.writeFileSync(fileInfo.filepath,tiddler.fields.text,typeInfo.encoding);\n\t\tfs.writeFileSync(fileInfo.filepath + \".meta\",tiddler.getFieldStringBlock({exclude: [\"text\",\"bag\"]}),\"utf8\");\n\t} else {\n\t\t// Save the tiddler as a self contained templated file\n\t\tif(fileInfo.type === \"application/x-tiddler\") {\n\t\t\tfs.writeFileSync(fileInfo.filepath,tiddler.getFieldStringBlock({exclude: [\"text\",\"bag\"]}) + (!!tiddler.fields.text ? \"\\n\\n\" + tiddler.fields.text : \"\"),\"utf8\");\n\t\t} else {\n\t\t\tfs.writeFileSync(fileInfo.filepath,JSON.stringify([tiddler.getFieldStrings({exclude: [\"bag\"]})],null,$tw.config.preferences.jsonSpaces),\"utf8\");\n\t\t}\n\t}\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils-node"
},
"$:/core/modules/utils/logger.js": {
"title": "$:/core/modules/utils/logger.js",
"text": "/*\\\ntitle: $:/core/modules/utils/logger.js\ntype: application/javascript\nmodule-type: utils\n\nA basic logging implementation\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar ALERT_TAG = \"$:/tags/Alert\";\n\n/*\nMake a new logger\n*/\nfunction Logger(componentName,options) {\n\toptions = options || {};\n\tthis.componentName = componentName || \"\";\n\tthis.colour = options.colour || \"white\";\n\tthis.enable = \"enable\" in options ? options.enable : true;\n\tthis.save = \"save\" in options ? options.save : true;\n\tthis.saveLimit = options.saveLimit || 100 * 1024;\n\tthis.saveBufferLogger = this;\n\tthis.buffer = \"\";\n\tthis.alertCount = 0;\n}\n\nLogger.prototype.setSaveBuffer = function(logger) {\n\tthis.saveBufferLogger = logger;\n};\n\n/*\nLog a message\n*/\nLogger.prototype.log = function(/* args */) {\n\tvar self = this;\n\tif(this.enable) {\n\t\tif(this.saveBufferLogger.save) {\n\t\t\tthis.saveBufferLogger.buffer += $tw.utils.formatDateString(new Date(),\"YYYY MM DD 0hh:0mm:0ss.0XXX\") + \":\";\n\t\t\t$tw.utils.each(Array.prototype.slice.call(arguments,0),function(arg,index) {\n\t\t\t\tself.saveBufferLogger.buffer += \" \" + arg;\n\t\t\t});\n\t\t\tthis.saveBufferLogger.buffer += \"\\n\";\n\t\t\tthis.saveBufferLogger.buffer = this.saveBufferLogger.buffer.slice(-this.saveBufferLogger.saveLimit);\t\t\t\n\t\t}\n\t\tif(console !== undefined && console.log !== undefined) {\n\t\t\treturn Function.apply.call(console.log, console, [$tw.utils.terminalColour(this.colour),this.componentName + \":\"].concat(Array.prototype.slice.call(arguments,0)).concat($tw.utils.terminalColour()));\n\t\t}\n\t} \n};\n\n/*\nRead the message buffer\n*/\nLogger.prototype.getBuffer = function() {\n\treturn this.saveBufferLogger.buffer;\n};\n\n/*\nLog a structure as a table\n*/\nLogger.prototype.table = function(value) {\n\t(console.table || console.log)(value);\n};\n\n/*\nAlert a message\n*/\nLogger.prototype.alert = function(/* args */) {\n\tif(this.enable) {\n\t\t// Prepare the text of the alert\n\t\tvar text = Array.prototype.join.call(arguments,\" \");\n\t\t// Create alert tiddlers in the browser\n\t\tif($tw.browser) {\n\t\t\t// Check if there is an existing alert with the same text and the same component\n\t\t\tvar existingAlerts = $tw.wiki.getTiddlersWithTag(ALERT_TAG),\n\t\t\t\talertFields,\n\t\t\t\texistingCount,\n\t\t\t\tself = this;\n\t\t\t$tw.utils.each(existingAlerts,function(title) {\n\t\t\t\tvar tiddler = $tw.wiki.getTiddler(title);\n\t\t\t\tif(tiddler.fields.text === text && tiddler.fields.component === self.componentName && tiddler.fields.modified && (!alertFields || tiddler.fields.modified < alertFields.modified)) {\n\t\t\t\t\t\talertFields = $tw.utils.extend({},tiddler.fields);\n\t\t\t\t}\n\t\t\t});\n\t\t\tif(alertFields) {\n\t\t\t\texistingCount = alertFields.count || 1;\n\t\t\t} else {\n\t\t\t\talertFields = {\n\t\t\t\t\ttitle: $tw.wiki.generateNewTitle(\"$:/temp/alerts/alert\",{prefix: \"\"}),\n\t\t\t\t\ttext: text,\n\t\t\t\t\ttags: [ALERT_TAG],\n\t\t\t\t\tcomponent: this.componentName\n\t\t\t\t};\n\t\t\t\texistingCount = 0;\n\t\t\t\tthis.alertCount += 1;\n\t\t\t}\n\t\t\talertFields.modified = new Date();\n\t\t\tif(++existingCount > 1) {\n\t\t\t\talertFields.count = existingCount;\n\t\t\t} else {\n\t\t\t\talertFields.count = undefined;\n\t\t\t}\n\t\t\t$tw.wiki.addTiddler(new $tw.Tiddler(alertFields));\n\t\t\t// Log the alert as well\n\t\t\tthis.log.apply(this,Array.prototype.slice.call(arguments,0));\n\t\t} else {\n\t\t\t// Print an orange message to the console if not in the browser\n\t\t\tconsole.error(\"\\x1b[1;33m\" + text + \"\\x1b[0m\");\n\t\t}\t\t\n\t}\n};\n\n/*\nClear outstanding alerts\n*/\nLogger.prototype.clearAlerts = function() {\n\tvar self = this;\n\tif($tw.browser && this.alertCount > 0) {\n\t\t$tw.utils.each($tw.wiki.getTiddlersWithTag(ALERT_TAG),function(title) {\n\t\t\tvar tiddler = $tw.wiki.getTiddler(title);\n\t\t\tif(tiddler.fields.component === self.componentName) {\n\t\t\t\t$tw.wiki.deleteTiddler(title);\n\t\t\t}\n\t\t});\n\t\tthis.alertCount = 0;\n\t}\n};\n\nexports.Logger = Logger;\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/parsetree.js": {
"title": "$:/core/modules/utils/parsetree.js",
"text": "/*\\\ntitle: $:/core/modules/utils/parsetree.js\ntype: application/javascript\nmodule-type: utils\n\nParse tree utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.addAttributeToParseTreeNode = function(node,name,value) {\n\tnode.attributes = node.attributes || {};\n\tnode.attributes[name] = {type: \"string\", value: value};\n};\n\nexports.getAttributeValueFromParseTreeNode = function(node,name,defaultValue) {\n\tif(node.attributes && node.attributes[name] && node.attributes[name].value !== undefined) {\n\t\treturn node.attributes[name].value;\n\t}\n\treturn defaultValue;\n};\n\nexports.addClassToParseTreeNode = function(node,classString) {\n\tvar classes = [];\n\tnode.attributes = node.attributes || {};\n\tnode.attributes[\"class\"] = node.attributes[\"class\"] || {type: \"string\", value: \"\"};\n\tif(node.attributes[\"class\"].type === \"string\") {\n\t\tif(node.attributes[\"class\"].value !== \"\") {\n\t\t\tclasses = node.attributes[\"class\"].value.split(\" \");\n\t\t}\n\t\tif(classString !== \"\") {\n\t\t\t$tw.utils.pushTop(classes,classString.split(\" \"));\n\t\t}\n\t\tnode.attributes[\"class\"].value = classes.join(\" \");\n\t}\n};\n\nexports.addStyleToParseTreeNode = function(node,name,value) {\n\t\tnode.attributes = node.attributes || {};\n\t\tnode.attributes.style = node.attributes.style || {type: \"string\", value: \"\"};\n\t\tif(node.attributes.style.type === \"string\") {\n\t\t\tnode.attributes.style.value += name + \":\" + value + \";\";\n\t\t}\n};\n\nexports.findParseTreeNode = function(nodeArray,search) {\n\tfor(var t=0; t<nodeArray.length; t++) {\n\t\tif(nodeArray[t].type === search.type && nodeArray[t].tag === search.tag) {\n\t\t\treturn nodeArray[t];\n\t\t}\n\t}\n\treturn undefined;\n};\n\n/*\nHelper to get the text of a parse tree node or array of nodes\n*/\nexports.getParseTreeText = function getParseTreeText(tree) {\n\tvar output = [];\n\tif($tw.utils.isArray(tree)) {\n\t\t$tw.utils.each(tree,function(node) {\n\t\t\toutput.push(getParseTreeText(node));\n\t\t});\n\t} else {\n\t\tif(tree.type === \"text\") {\n\t\t\toutput.push(tree.text);\n\t\t}\n\t\tif(tree.children) {\n\t\t\treturn getParseTreeText(tree.children);\n\t\t}\n\t}\n\treturn output.join(\"\");\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/performance.js": {
"title": "$:/core/modules/utils/performance.js",
"text": "/*\\\ntitle: $:/core/modules/utils/performance.js\ntype: application/javascript\nmodule-type: global\n\nPerformance measurement.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nfunction Performance(enabled) {\n\tthis.enabled = !!enabled;\n\tthis.measures = {}; // Hashmap by measurement name of {time:, invocations:}\n\tthis.logger = new $tw.utils.Logger(\"performance\");\n\tthis.showGreeting();\n}\n\nPerformance.prototype.showGreeting = function() {\n\tif($tw.browser) {\n\t\tthis.logger.log(\"Execute $tw.perf.log(); to see filter execution timings\");\t\t\n\t}\n};\n\n/*\nWrap performance reporting around a top level function\n*/\nPerformance.prototype.report = function(name,fn) {\n\tvar self = this;\n\tif(this.enabled) {\n\t\treturn function() {\n\t\t\tvar startTime = $tw.utils.timer(),\n\t\t\t\tresult = fn.apply(this,arguments);\n\t\t\tself.logger.log(name + \": \" + $tw.utils.timer(startTime).toFixed(2) + \"ms\");\n\t\t\treturn result;\n\t\t};\n\t} else {\n\t\treturn fn;\n\t}\n};\n\nPerformance.prototype.log = function() {\n\tvar self = this,\n\t\ttotalTime = 0,\n\t\torderedMeasures = Object.keys(this.measures).sort(function(a,b) {\n\t\t\tif(self.measures[a].time > self.measures[b].time) {\n\t\t\t\treturn -1;\n\t\t\t} else if (self.measures[a].time < self.measures[b].time) {\n\t\t\t\treturn + 1;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t});\n\t$tw.utils.each(orderedMeasures,function(name) {\n\t\ttotalTime += self.measures[name].time;\n\t});\n\tvar results = []\n\t$tw.utils.each(orderedMeasures,function(name) {\n\t\tvar measure = self.measures[name];\n\t\tresults.push({name: name,invocations: measure.invocations, avgTime: measure.time / measure.invocations, totalTime: measure.time, percentTime: (measure.time / totalTime) * 100})\n\t});\n\tself.logger.table(results);\n};\n\n/*\nWrap performance measurements around a subfunction\n*/\nPerformance.prototype.measure = function(name,fn) {\n\tvar self = this;\n\tif(this.enabled) {\n\t\treturn function() {\n\t\t\tvar startTime = $tw.utils.timer(),\n\t\t\t\tresult = fn.apply(this,arguments);\n\t\t\tif(!(name in self.measures)) {\n\t\t\t\tself.measures[name] = {time: 0, invocations: 0};\n\t\t\t}\n\t\t\tself.measures[name].time += $tw.utils.timer(startTime);\n\t\t\tself.measures[name].invocations++;\n\t\t\treturn result;\n\t\t};\n\t} else {\n\t\treturn fn;\n\t}\n};\n\nexports.Performance = Performance;\n\n})();\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/core/modules/utils/pluginmaker.js": {
"title": "$:/core/modules/utils/pluginmaker.js",
"text": "/*\\\ntitle: $:/core/modules/utils/pluginmaker.js\ntype: application/javascript\nmodule-type: utils\n\nA quick and dirty way to pack up plugins within the browser.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nRepack a plugin, and then delete any non-shadow payload tiddlers\n*/\nexports.repackPlugin = function(title,additionalTiddlers,excludeTiddlers) {\n\tadditionalTiddlers = additionalTiddlers || [];\n\texcludeTiddlers = excludeTiddlers || [];\n\t// Get the plugin tiddler\n\tvar pluginTiddler = $tw.wiki.getTiddler(title);\n\tif(!pluginTiddler) {\n\t\tthrow \"No such tiddler as \" + title;\n\t}\n\t// Extract the JSON\n\tvar jsonPluginTiddler;\n\ttry {\n\t\tjsonPluginTiddler = JSON.parse(pluginTiddler.fields.text);\n\t} catch(e) {\n\t\tthrow \"Cannot parse plugin tiddler \" + title + \"\\n\" + $tw.language.getString(\"Error/Caption\") + \": \" + e;\n\t}\n\t// Get the list of tiddlers\n\tvar tiddlers = Object.keys(jsonPluginTiddler.tiddlers);\n\t// Add the additional tiddlers\n\t$tw.utils.pushTop(tiddlers,additionalTiddlers);\n\t// Remove any excluded tiddlers\n\tfor(var t=tiddlers.length-1; t>=0; t--) {\n\t\tif(excludeTiddlers.indexOf(tiddlers[t]) !== -1) {\n\t\t\ttiddlers.splice(t,1);\n\t\t}\n\t}\n\t// Pack up the tiddlers into a block of JSON\n\tvar plugins = {};\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = $tw.wiki.getTiddler(title),\n\t\t\tfields = {};\n\t\t$tw.utils.each(tiddler.fields,function (value,name) {\n\t\t\tfields[name] = tiddler.getFieldString(name);\n\t\t});\n\t\tplugins[title] = fields;\n\t});\n\t// Retrieve and bump the version number\n\tvar pluginVersion = $tw.utils.parseVersion(pluginTiddler.getFieldString(\"version\") || \"0.0.0\") || {\n\t\t\tmajor: \"0\",\n\t\t\tminor: \"0\",\n\t\t\tpatch: \"0\"\n\t\t};\n\tpluginVersion.patch++;\n\tvar version = pluginVersion.major + \".\" + pluginVersion.minor + \".\" + pluginVersion.patch;\n\tif(pluginVersion.prerelease) {\n\t\tversion += \"-\" + pluginVersion.prerelease;\n\t}\n\tif(pluginVersion.build) {\n\t\tversion += \"+\" + pluginVersion.build;\n\t}\n\t// Save the tiddler\n\t$tw.wiki.addTiddler(new $tw.Tiddler(pluginTiddler,{text: JSON.stringify({tiddlers: plugins},null,4), version: version}));\n\t// Delete any non-shadow constituent tiddlers\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tif($tw.wiki.tiddlerExists(title)) {\n\t\t\t$tw.wiki.deleteTiddler(title);\n\t\t}\n\t});\n\t// Trigger an autosave\n\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n\t// Return a heartwarming confirmation\n\treturn \"Plugin \" + title + \" successfully saved\";\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/transliterate.js": {
"title": "$:/core/modules/utils/transliterate.js",
"text": "/*\\\ntitle: $:/core/modules/utils/transliterate.js\ntype: application/javascript\nmodule-type: utils\n\nTransliteration static utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nTransliterate string to ASCII\n\n(Some pairs taken from http://semplicewebsites.com/removing-accents-javascript)\n*/\nexports.transliterationPairs = {\n\t\"Á\":\"A\",\n\t\"Ă\":\"A\",\n\t\"Ắ\":\"A\",\n\t\"Ặ\":\"A\",\n\t\"Ằ\":\"A\",\n\t\"Ẳ\":\"A\",\n\t\"Ẵ\":\"A\",\n\t\"Ǎ\":\"A\",\n\t\"Â\":\"A\",\n\t\"Ấ\":\"A\",\n\t\"Ậ\":\"A\",\n\t\"Ầ\":\"A\",\n\t\"Ẩ\":\"A\",\n\t\"Ẫ\":\"A\",\n\t\"Ä\":\"A\",\n\t\"Ǟ\":\"A\",\n\t\"Ȧ\":\"A\",\n\t\"Ǡ\":\"A\",\n\t\"Ạ\":\"A\",\n\t\"Ȁ\":\"A\",\n\t\"À\":\"A\",\n\t\"Ả\":\"A\",\n\t\"Ȃ\":\"A\",\n\t\"Ā\":\"A\",\n\t\"Ą\":\"A\",\n\t\"Å\":\"A\",\n\t\"Ǻ\":\"A\",\n\t\"Ḁ\":\"A\",\n\t\"Ⱥ\":\"A\",\n\t\"Ã\":\"A\",\n\t\"Ꜳ\":\"AA\",\n\t\"Æ\":\"AE\",\n\t\"Ǽ\":\"AE\",\n\t\"Ǣ\":\"AE\",\n\t\"Ꜵ\":\"AO\",\n\t\"Ꜷ\":\"AU\",\n\t\"Ꜹ\":\"AV\",\n\t\"Ꜻ\":\"AV\",\n\t\"Ꜽ\":\"AY\",\n\t\"Ḃ\":\"B\",\n\t\"Ḅ\":\"B\",\n\t\"Ɓ\":\"B\",\n\t\"Ḇ\":\"B\",\n\t\"Ƀ\":\"B\",\n\t\"Ƃ\":\"B\",\n\t\"Ć\":\"C\",\n\t\"Č\":\"C\",\n\t\"Ç\":\"C\",\n\t\"Ḉ\":\"C\",\n\t\"Ĉ\":\"C\",\n\t\"Ċ\":\"C\",\n\t\"Ƈ\":\"C\",\n\t\"Ȼ\":\"C\",\n\t\"Ď\":\"D\",\n\t\"Ḑ\":\"D\",\n\t\"Ḓ\":\"D\",\n\t\"Ḋ\":\"D\",\n\t\"Ḍ\":\"D\",\n\t\"Ɗ\":\"D\",\n\t\"Ḏ\":\"D\",\n\t\"Dz\":\"D\",\n\t\"Dž\":\"D\",\n\t\"Đ\":\"D\",\n\t\"Ƌ\":\"D\",\n\t\"DZ\":\"DZ\",\n\t\"DŽ\":\"DZ\",\n\t\"É\":\"E\",\n\t\"Ĕ\":\"E\",\n\t\"Ě\":\"E\",\n\t\"Ȩ\":\"E\",\n\t\"Ḝ\":\"E\",\n\t\"Ê\":\"E\",\n\t\"Ế\":\"E\",\n\t\"Ệ\":\"E\",\n\t\"Ề\":\"E\",\n\t\"Ể\":\"E\",\n\t\"Ễ\":\"E\",\n\t\"Ḙ\":\"E\",\n\t\"Ë\":\"E\",\n\t\"Ė\":\"E\",\n\t\"Ẹ\":\"E\",\n\t\"Ȅ\":\"E\",\n\t\"È\":\"E\",\n\t\"Ẻ\":\"E\",\n\t\"Ȇ\":\"E\",\n\t\"Ē\":\"E\",\n\t\"Ḗ\":\"E\",\n\t\"Ḕ\":\"E\",\n\t\"Ę\":\"E\",\n\t\"Ɇ\":\"E\",\n\t\"Ẽ\":\"E\",\n\t\"Ḛ\":\"E\",\n\t\"Ꝫ\":\"ET\",\n\t\"Ḟ\":\"F\",\n\t\"Ƒ\":\"F\",\n\t\"Ǵ\":\"G\",\n\t\"Ğ\":\"G\",\n\t\"Ǧ\":\"G\",\n\t\"Ģ\":\"G\",\n\t\"Ĝ\":\"G\",\n\t\"Ġ\":\"G\",\n\t\"Ɠ\":\"G\",\n\t\"Ḡ\":\"G\",\n\t\"Ǥ\":\"G\",\n\t\"Ḫ\":\"H\",\n\t\"Ȟ\":\"H\",\n\t\"Ḩ\":\"H\",\n\t\"Ĥ\":\"H\",\n\t\"Ⱨ\":\"H\",\n\t\"Ḧ\":\"H\",\n\t\"Ḣ\":\"H\",\n\t\"Ḥ\":\"H\",\n\t\"Ħ\":\"H\",\n\t\"Í\":\"I\",\n\t\"Ĭ\":\"I\",\n\t\"Ǐ\":\"I\",\n\t\"Î\":\"I\",\n\t\"Ï\":\"I\",\n\t\"Ḯ\":\"I\",\n\t\"İ\":\"I\",\n\t\"Ị\":\"I\",\n\t\"Ȉ\":\"I\",\n\t\"Ì\":\"I\",\n\t\"Ỉ\":\"I\",\n\t\"Ȋ\":\"I\",\n\t\"Ī\":\"I\",\n\t\"Į\":\"I\",\n\t\"Ɨ\":\"I\",\n\t\"Ĩ\":\"I\",\n\t\"Ḭ\":\"I\",\n\t\"Ꝺ\":\"D\",\n\t\"Ꝼ\":\"F\",\n\t\"Ᵹ\":\"G\",\n\t\"Ꞃ\":\"R\",\n\t\"Ꞅ\":\"S\",\n\t\"Ꞇ\":\"T\",\n\t\"Ꝭ\":\"IS\",\n\t\"Ĵ\":\"J\",\n\t\"Ɉ\":\"J\",\n\t\"Ḱ\":\"K\",\n\t\"Ǩ\":\"K\",\n\t\"Ķ\":\"K\",\n\t\"Ⱪ\":\"K\",\n\t\"Ꝃ\":\"K\",\n\t\"Ḳ\":\"K\",\n\t\"Ƙ\":\"K\",\n\t\"Ḵ\":\"K\",\n\t\"Ꝁ\":\"K\",\n\t\"Ꝅ\":\"K\",\n\t\"Ĺ\":\"L\",\n\t\"Ƚ\":\"L\",\n\t\"Ľ\":\"L\",\n\t\"Ļ\":\"L\",\n\t\"Ḽ\":\"L\",\n\t\"Ḷ\":\"L\",\n\t\"Ḹ\":\"L\",\n\t\"Ⱡ\":\"L\",\n\t\"Ꝉ\":\"L\",\n\t\"Ḻ\":\"L\",\n\t\"Ŀ\":\"L\",\n\t\"Ɫ\":\"L\",\n\t\"Lj\":\"L\",\n\t\"Ł\":\"L\",\n\t\"LJ\":\"LJ\",\n\t\"Ḿ\":\"M\",\n\t\"Ṁ\":\"M\",\n\t\"Ṃ\":\"M\",\n\t\"Ɱ\":\"M\",\n\t\"Ń\":\"N\",\n\t\"Ň\":\"N\",\n\t\"Ņ\":\"N\",\n\t\"Ṋ\":\"N\",\n\t\"Ṅ\":\"N\",\n\t\"Ṇ\":\"N\",\n\t\"Ǹ\":\"N\",\n\t\"Ɲ\":\"N\",\n\t\"Ṉ\":\"N\",\n\t\"Ƞ\":\"N\",\n\t\"Nj\":\"N\",\n\t\"Ñ\":\"N\",\n\t\"NJ\":\"NJ\",\n\t\"Ó\":\"O\",\n\t\"Ŏ\":\"O\",\n\t\"Ǒ\":\"O\",\n\t\"Ô\":\"O\",\n\t\"Ố\":\"O\",\n\t\"Ộ\":\"O\",\n\t\"Ồ\":\"O\",\n\t\"Ổ\":\"O\",\n\t\"Ỗ\":\"O\",\n\t\"Ö\":\"O\",\n\t\"Ȫ\":\"O\",\n\t\"Ȯ\":\"O\",\n\t\"Ȱ\":\"O\",\n\t\"Ọ\":\"O\",\n\t\"Ő\":\"O\",\n\t\"Ȍ\":\"O\",\n\t\"Ò\":\"O\",\n\t\"Ỏ\":\"O\",\n\t\"Ơ\":\"O\",\n\t\"Ớ\":\"O\",\n\t\"Ợ\":\"O\",\n\t\"Ờ\":\"O\",\n\t\"Ở\":\"O\",\n\t\"Ỡ\":\"O\",\n\t\"Ȏ\":\"O\",\n\t\"Ꝋ\":\"O\",\n\t\"Ꝍ\":\"O\",\n\t\"Ō\":\"O\",\n\t\"Ṓ\":\"O\",\n\t\"Ṑ\":\"O\",\n\t\"Ɵ\":\"O\",\n\t\"Ǫ\":\"O\",\n\t\"Ǭ\":\"O\",\n\t\"Ø\":\"O\",\n\t\"Ǿ\":\"O\",\n\t\"Õ\":\"O\",\n\t\"Ṍ\":\"O\",\n\t\"Ṏ\":\"O\",\n\t\"Ȭ\":\"O\",\n\t\"Ƣ\":\"OI\",\n\t\"Ꝏ\":\"OO\",\n\t\"Ɛ\":\"E\",\n\t\"Ɔ\":\"O\",\n\t\"Ȣ\":\"OU\",\n\t\"Ṕ\":\"P\",\n\t\"Ṗ\":\"P\",\n\t\"Ꝓ\":\"P\",\n\t\"Ƥ\":\"P\",\n\t\"Ꝕ\":\"P\",\n\t\"Ᵽ\":\"P\",\n\t\"Ꝑ\":\"P\",\n\t\"Ꝙ\":\"Q\",\n\t\"Ꝗ\":\"Q\",\n\t\"Ŕ\":\"R\",\n\t\"Ř\":\"R\",\n\t\"Ŗ\":\"R\",\n\t\"Ṙ\":\"R\",\n\t\"Ṛ\":\"R\",\n\t\"Ṝ\":\"R\",\n\t\"Ȑ\":\"R\",\n\t\"Ȓ\":\"R\",\n\t\"Ṟ\":\"R\",\n\t\"Ɍ\":\"R\",\n\t\"Ɽ\":\"R\",\n\t\"Ꜿ\":\"C\",\n\t\"Ǝ\":\"E\",\n\t\"Ś\":\"S\",\n\t\"Ṥ\":\"S\",\n\t\"Š\":\"S\",\n\t\"Ṧ\":\"S\",\n\t\"Ş\":\"S\",\n\t\"Ŝ\":\"S\",\n\t\"Ș\":\"S\",\n\t\"Ṡ\":\"S\",\n\t\"Ṣ\":\"S\",\n\t\"Ṩ\":\"S\",\n\t\"Ť\":\"T\",\n\t\"Ţ\":\"T\",\n\t\"Ṱ\":\"T\",\n\t\"Ț\":\"T\",\n\t\"Ⱦ\":\"T\",\n\t\"Ṫ\":\"T\",\n\t\"Ṭ\":\"T\",\n\t\"Ƭ\":\"T\",\n\t\"Ṯ\":\"T\",\n\t\"Ʈ\":\"T\",\n\t\"Ŧ\":\"T\",\n\t\"Ɐ\":\"A\",\n\t\"Ꞁ\":\"L\",\n\t\"Ɯ\":\"M\",\n\t\"Ʌ\":\"V\",\n\t\"Ꜩ\":\"TZ\",\n\t\"Ú\":\"U\",\n\t\"Ŭ\":\"U\",\n\t\"Ǔ\":\"U\",\n\t\"Û\":\"U\",\n\t\"Ṷ\":\"U\",\n\t\"Ü\":\"U\",\n\t\"Ǘ\":\"U\",\n\t\"Ǚ\":\"U\",\n\t\"Ǜ\":\"U\",\n\t\"Ǖ\":\"U\",\n\t\"Ṳ\":\"U\",\n\t\"Ụ\":\"U\",\n\t\"Ű\":\"U\",\n\t\"Ȕ\":\"U\",\n\t\"Ù\":\"U\",\n\t\"Ủ\":\"U\",\n\t\"Ư\":\"U\",\n\t\"Ứ\":\"U\",\n\t\"Ự\":\"U\",\n\t\"Ừ\":\"U\",\n\t\"Ử\":\"U\",\n\t\"Ữ\":\"U\",\n\t\"Ȗ\":\"U\",\n\t\"Ū\":\"U\",\n\t\"Ṻ\":\"U\",\n\t\"Ų\":\"U\",\n\t\"Ů\":\"U\",\n\t\"Ũ\":\"U\",\n\t\"Ṹ\":\"U\",\n\t\"Ṵ\":\"U\",\n\t\"Ꝟ\":\"V\",\n\t\"Ṿ\":\"V\",\n\t\"Ʋ\":\"V\",\n\t\"Ṽ\":\"V\",\n\t\"Ꝡ\":\"VY\",\n\t\"Ẃ\":\"W\",\n\t\"Ŵ\":\"W\",\n\t\"Ẅ\":\"W\",\n\t\"Ẇ\":\"W\",\n\t\"Ẉ\":\"W\",\n\t\"Ẁ\":\"W\",\n\t\"Ⱳ\":\"W\",\n\t\"Ẍ\":\"X\",\n\t\"Ẋ\":\"X\",\n\t\"Ý\":\"Y\",\n\t\"Ŷ\":\"Y\",\n\t\"Ÿ\":\"Y\",\n\t\"Ẏ\":\"Y\",\n\t\"Ỵ\":\"Y\",\n\t\"Ỳ\":\"Y\",\n\t\"Ƴ\":\"Y\",\n\t\"Ỷ\":\"Y\",\n\t\"Ỿ\":\"Y\",\n\t\"Ȳ\":\"Y\",\n\t\"Ɏ\":\"Y\",\n\t\"Ỹ\":\"Y\",\n\t\"Ź\":\"Z\",\n\t\"Ž\":\"Z\",\n\t\"Ẑ\":\"Z\",\n\t\"Ⱬ\":\"Z\",\n\t\"Ż\":\"Z\",\n\t\"Ẓ\":\"Z\",\n\t\"Ȥ\":\"Z\",\n\t\"Ẕ\":\"Z\",\n\t\"Ƶ\":\"Z\",\n\t\"IJ\":\"IJ\",\n\t\"Œ\":\"OE\",\n\t\"ᴀ\":\"A\",\n\t\"ᴁ\":\"AE\",\n\t\"ʙ\":\"B\",\n\t\"ᴃ\":\"B\",\n\t\"ᴄ\":\"C\",\n\t\"ᴅ\":\"D\",\n\t\"ᴇ\":\"E\",\n\t\"ꜰ\":\"F\",\n\t\"ɢ\":\"G\",\n\t\"ʛ\":\"G\",\n\t\"ʜ\":\"H\",\n\t\"ɪ\":\"I\",\n\t\"ʁ\":\"R\",\n\t\"ᴊ\":\"J\",\n\t\"ᴋ\":\"K\",\n\t\"ʟ\":\"L\",\n\t\"ᴌ\":\"L\",\n\t\"ᴍ\":\"M\",\n\t\"ɴ\":\"N\",\n\t\"ᴏ\":\"O\",\n\t\"ɶ\":\"OE\",\n\t\"ᴐ\":\"O\",\n\t\"ᴕ\":\"OU\",\n\t\"ᴘ\":\"P\",\n\t\"ʀ\":\"R\",\n\t\"ᴎ\":\"N\",\n\t\"ᴙ\":\"R\",\n\t\"ꜱ\":\"S\",\n\t\"ᴛ\":\"T\",\n\t\"ⱻ\":\"E\",\n\t\"ᴚ\":\"R\",\n\t\"ᴜ\":\"U\",\n\t\"ᴠ\":\"V\",\n\t\"ᴡ\":\"W\",\n\t\"ʏ\":\"Y\",\n\t\"ᴢ\":\"Z\",\n\t\"á\":\"a\",\n\t\"ă\":\"a\",\n\t\"ắ\":\"a\",\n\t\"ặ\":\"a\",\n\t\"ằ\":\"a\",\n\t\"ẳ\":\"a\",\n\t\"ẵ\":\"a\",\n\t\"ǎ\":\"a\",\n\t\"â\":\"a\",\n\t\"ấ\":\"a\",\n\t\"ậ\":\"a\",\n\t\"ầ\":\"a\",\n\t\"ẩ\":\"a\",\n\t\"ẫ\":\"a\",\n\t\"ä\":\"a\",\n\t\"ǟ\":\"a\",\n\t\"ȧ\":\"a\",\n\t\"ǡ\":\"a\",\n\t\"ạ\":\"a\",\n\t\"ȁ\":\"a\",\n\t\"à\":\"a\",\n\t\"ả\":\"a\",\n\t\"ȃ\":\"a\",\n\t\"ā\":\"a\",\n\t\"ą\":\"a\",\n\t\"ᶏ\":\"a\",\n\t\"ẚ\":\"a\",\n\t\"å\":\"a\",\n\t\"ǻ\":\"a\",\n\t\"ḁ\":\"a\",\n\t\"ⱥ\":\"a\",\n\t\"ã\":\"a\",\n\t\"ꜳ\":\"aa\",\n\t\"æ\":\"ae\",\n\t\"ǽ\":\"ae\",\n\t\"ǣ\":\"ae\",\n\t\"ꜵ\":\"ao\",\n\t\"ꜷ\":\"au\",\n\t\"ꜹ\":\"av\",\n\t\"ꜻ\":\"av\",\n\t\"ꜽ\":\"ay\",\n\t\"ḃ\":\"b\",\n\t\"ḅ\":\"b\",\n\t\"ɓ\":\"b\",\n\t\"ḇ\":\"b\",\n\t\"ᵬ\":\"b\",\n\t\"ᶀ\":\"b\",\n\t\"ƀ\":\"b\",\n\t\"ƃ\":\"b\",\n\t\"ɵ\":\"o\",\n\t\"ć\":\"c\",\n\t\"č\":\"c\",\n\t\"ç\":\"c\",\n\t\"ḉ\":\"c\",\n\t\"ĉ\":\"c\",\n\t\"ɕ\":\"c\",\n\t\"ċ\":\"c\",\n\t\"ƈ\":\"c\",\n\t\"ȼ\":\"c\",\n\t\"ď\":\"d\",\n\t\"ḑ\":\"d\",\n\t\"ḓ\":\"d\",\n\t\"ȡ\":\"d\",\n\t\"ḋ\":\"d\",\n\t\"ḍ\":\"d\",\n\t\"ɗ\":\"d\",\n\t\"ᶑ\":\"d\",\n\t\"ḏ\":\"d\",\n\t\"ᵭ\":\"d\",\n\t\"ᶁ\":\"d\",\n\t\"đ\":\"d\",\n\t\"ɖ\":\"d\",\n\t\"ƌ\":\"d\",\n\t\"ı\":\"i\",\n\t\"ȷ\":\"j\",\n\t\"ɟ\":\"j\",\n\t\"ʄ\":\"j\",\n\t\"dz\":\"dz\",\n\t\"dž\":\"dz\",\n\t\"é\":\"e\",\n\t\"ĕ\":\"e\",\n\t\"ě\":\"e\",\n\t\"ȩ\":\"e\",\n\t\"ḝ\":\"e\",\n\t\"ê\":\"e\",\n\t\"ế\":\"e\",\n\t\"ệ\":\"e\",\n\t\"ề\":\"e\",\n\t\"ể\":\"e\",\n\t\"ễ\":\"e\",\n\t\"ḙ\":\"e\",\n\t\"ë\":\"e\",\n\t\"ė\":\"e\",\n\t\"ẹ\":\"e\",\n\t\"ȅ\":\"e\",\n\t\"è\":\"e\",\n\t\"ẻ\":\"e\",\n\t\"ȇ\":\"e\",\n\t\"ē\":\"e\",\n\t\"ḗ\":\"e\",\n\t\"ḕ\":\"e\",\n\t\"ⱸ\":\"e\",\n\t\"ę\":\"e\",\n\t\"ᶒ\":\"e\",\n\t\"ɇ\":\"e\",\n\t\"ẽ\":\"e\",\n\t\"ḛ\":\"e\",\n\t\"ꝫ\":\"et\",\n\t\"ḟ\":\"f\",\n\t\"ƒ\":\"f\",\n\t\"ᵮ\":\"f\",\n\t\"ᶂ\":\"f\",\n\t\"ǵ\":\"g\",\n\t\"ğ\":\"g\",\n\t\"ǧ\":\"g\",\n\t\"ģ\":\"g\",\n\t\"ĝ\":\"g\",\n\t\"ġ\":\"g\",\n\t\"ɠ\":\"g\",\n\t\"ḡ\":\"g\",\n\t\"ᶃ\":\"g\",\n\t\"ǥ\":\"g\",\n\t\"ḫ\":\"h\",\n\t\"ȟ\":\"h\",\n\t\"ḩ\":\"h\",\n\t\"ĥ\":\"h\",\n\t\"ⱨ\":\"h\",\n\t\"ḧ\":\"h\",\n\t\"ḣ\":\"h\",\n\t\"ḥ\":\"h\",\n\t\"ɦ\":\"h\",\n\t\"ẖ\":\"h\",\n\t\"ħ\":\"h\",\n\t\"ƕ\":\"hv\",\n\t\"í\":\"i\",\n\t\"ĭ\":\"i\",\n\t\"ǐ\":\"i\",\n\t\"î\":\"i\",\n\t\"ï\":\"i\",\n\t\"ḯ\":\"i\",\n\t\"ị\":\"i\",\n\t\"ȉ\":\"i\",\n\t\"ì\":\"i\",\n\t\"ỉ\":\"i\",\n\t\"ȋ\":\"i\",\n\t\"ī\":\"i\",\n\t\"į\":\"i\",\n\t\"ᶖ\":\"i\",\n\t\"ɨ\":\"i\",\n\t\"ĩ\":\"i\",\n\t\"ḭ\":\"i\",\n\t\"ꝺ\":\"d\",\n\t\"ꝼ\":\"f\",\n\t\"ᵹ\":\"g\",\n\t\"ꞃ\":\"r\",\n\t\"ꞅ\":\"s\",\n\t\"ꞇ\":\"t\",\n\t\"ꝭ\":\"is\",\n\t\"ǰ\":\"j\",\n\t\"ĵ\":\"j\",\n\t\"ʝ\":\"j\",\n\t\"ɉ\":\"j\",\n\t\"ḱ\":\"k\",\n\t\"ǩ\":\"k\",\n\t\"ķ\":\"k\",\n\t\"ⱪ\":\"k\",\n\t\"ꝃ\":\"k\",\n\t\"ḳ\":\"k\",\n\t\"ƙ\":\"k\",\n\t\"ḵ\":\"k\",\n\t\"ᶄ\":\"k\",\n\t\"ꝁ\":\"k\",\n\t\"ꝅ\":\"k\",\n\t\"ĺ\":\"l\",\n\t\"ƚ\":\"l\",\n\t\"ɬ\":\"l\",\n\t\"ľ\":\"l\",\n\t\"ļ\":\"l\",\n\t\"ḽ\":\"l\",\n\t\"ȴ\":\"l\",\n\t\"ḷ\":\"l\",\n\t\"ḹ\":\"l\",\n\t\"ⱡ\":\"l\",\n\t\"ꝉ\":\"l\",\n\t\"ḻ\":\"l\",\n\t\"ŀ\":\"l\",\n\t\"ɫ\":\"l\",\n\t\"ᶅ\":\"l\",\n\t\"ɭ\":\"l\",\n\t\"ł\":\"l\",\n\t\"lj\":\"lj\",\n\t\"ſ\":\"s\",\n\t\"ẜ\":\"s\",\n\t\"ẛ\":\"s\",\n\t\"ẝ\":\"s\",\n\t\"ḿ\":\"m\",\n\t\"ṁ\":\"m\",\n\t\"ṃ\":\"m\",\n\t\"ɱ\":\"m\",\n\t\"ᵯ\":\"m\",\n\t\"ᶆ\":\"m\",\n\t\"ń\":\"n\",\n\t\"ň\":\"n\",\n\t\"ņ\":\"n\",\n\t\"ṋ\":\"n\",\n\t\"ȵ\":\"n\",\n\t\"ṅ\":\"n\",\n\t\"ṇ\":\"n\",\n\t\"ǹ\":\"n\",\n\t\"ɲ\":\"n\",\n\t\"ṉ\":\"n\",\n\t\"ƞ\":\"n\",\n\t\"ᵰ\":\"n\",\n\t\"ᶇ\":\"n\",\n\t\"ɳ\":\"n\",\n\t\"ñ\":\"n\",\n\t\"nj\":\"nj\",\n\t\"ó\":\"o\",\n\t\"ŏ\":\"o\",\n\t\"ǒ\":\"o\",\n\t\"ô\":\"o\",\n\t\"ố\":\"o\",\n\t\"ộ\":\"o\",\n\t\"ồ\":\"o\",\n\t\"ổ\":\"o\",\n\t\"ỗ\":\"o\",\n\t\"ö\":\"o\",\n\t\"ȫ\":\"o\",\n\t\"ȯ\":\"o\",\n\t\"ȱ\":\"o\",\n\t\"ọ\":\"o\",\n\t\"ő\":\"o\",\n\t\"ȍ\":\"o\",\n\t\"ò\":\"o\",\n\t\"ỏ\":\"o\",\n\t\"ơ\":\"o\",\n\t\"ớ\":\"o\",\n\t\"ợ\":\"o\",\n\t\"ờ\":\"o\",\n\t\"ở\":\"o\",\n\t\"ỡ\":\"o\",\n\t\"ȏ\":\"o\",\n\t\"ꝋ\":\"o\",\n\t\"ꝍ\":\"o\",\n\t\"ⱺ\":\"o\",\n\t\"ō\":\"o\",\n\t\"ṓ\":\"o\",\n\t\"ṑ\":\"o\",\n\t\"ǫ\":\"o\",\n\t\"ǭ\":\"o\",\n\t\"ø\":\"o\",\n\t\"ǿ\":\"o\",\n\t\"õ\":\"o\",\n\t\"ṍ\":\"o\",\n\t\"ṏ\":\"o\",\n\t\"ȭ\":\"o\",\n\t\"ƣ\":\"oi\",\n\t\"ꝏ\":\"oo\",\n\t\"ɛ\":\"e\",\n\t\"ᶓ\":\"e\",\n\t\"ɔ\":\"o\",\n\t\"ᶗ\":\"o\",\n\t\"ȣ\":\"ou\",\n\t\"ṕ\":\"p\",\n\t\"ṗ\":\"p\",\n\t\"ꝓ\":\"p\",\n\t\"ƥ\":\"p\",\n\t\"ᵱ\":\"p\",\n\t\"ᶈ\":\"p\",\n\t\"ꝕ\":\"p\",\n\t\"ᵽ\":\"p\",\n\t\"ꝑ\":\"p\",\n\t\"ꝙ\":\"q\",\n\t\"ʠ\":\"q\",\n\t\"ɋ\":\"q\",\n\t\"ꝗ\":\"q\",\n\t\"ŕ\":\"r\",\n\t\"ř\":\"r\",\n\t\"ŗ\":\"r\",\n\t\"ṙ\":\"r\",\n\t\"ṛ\":\"r\",\n\t\"ṝ\":\"r\",\n\t\"ȑ\":\"r\",\n\t\"ɾ\":\"r\",\n\t\"ᵳ\":\"r\",\n\t\"ȓ\":\"r\",\n\t\"ṟ\":\"r\",\n\t\"ɼ\":\"r\",\n\t\"ᵲ\":\"r\",\n\t\"ᶉ\":\"r\",\n\t\"ɍ\":\"r\",\n\t\"ɽ\":\"r\",\n\t\"ↄ\":\"c\",\n\t\"ꜿ\":\"c\",\n\t\"ɘ\":\"e\",\n\t\"ɿ\":\"r\",\n\t\"ś\":\"s\",\n\t\"ṥ\":\"s\",\n\t\"š\":\"s\",\n\t\"ṧ\":\"s\",\n\t\"ş\":\"s\",\n\t\"ŝ\":\"s\",\n\t\"ș\":\"s\",\n\t\"ṡ\":\"s\",\n\t\"ṣ\":\"s\",\n\t\"ṩ\":\"s\",\n\t\"ʂ\":\"s\",\n\t\"ᵴ\":\"s\",\n\t\"ᶊ\":\"s\",\n\t\"ȿ\":\"s\",\n\t\"ɡ\":\"g\",\n\t\"ᴑ\":\"o\",\n\t\"ᴓ\":\"o\",\n\t\"ᴝ\":\"u\",\n\t\"ť\":\"t\",\n\t\"ţ\":\"t\",\n\t\"ṱ\":\"t\",\n\t\"ț\":\"t\",\n\t\"ȶ\":\"t\",\n\t\"ẗ\":\"t\",\n\t\"ⱦ\":\"t\",\n\t\"ṫ\":\"t\",\n\t\"ṭ\":\"t\",\n\t\"ƭ\":\"t\",\n\t\"ṯ\":\"t\",\n\t\"ᵵ\":\"t\",\n\t\"ƫ\":\"t\",\n\t\"ʈ\":\"t\",\n\t\"ŧ\":\"t\",\n\t\"ᵺ\":\"th\",\n\t\"ɐ\":\"a\",\n\t\"ᴂ\":\"ae\",\n\t\"ǝ\":\"e\",\n\t\"ᵷ\":\"g\",\n\t\"ɥ\":\"h\",\n\t\"ʮ\":\"h\",\n\t\"ʯ\":\"h\",\n\t\"ᴉ\":\"i\",\n\t\"ʞ\":\"k\",\n\t\"ꞁ\":\"l\",\n\t\"ɯ\":\"m\",\n\t\"ɰ\":\"m\",\n\t\"ᴔ\":\"oe\",\n\t\"ɹ\":\"r\",\n\t\"ɻ\":\"r\",\n\t\"ɺ\":\"r\",\n\t\"ⱹ\":\"r\",\n\t\"ʇ\":\"t\",\n\t\"ʌ\":\"v\",\n\t\"ʍ\":\"w\",\n\t\"ʎ\":\"y\",\n\t\"ꜩ\":\"tz\",\n\t\"ú\":\"u\",\n\t\"ŭ\":\"u\",\n\t\"ǔ\":\"u\",\n\t\"û\":\"u\",\n\t\"ṷ\":\"u\",\n\t\"ü\":\"u\",\n\t\"ǘ\":\"u\",\n\t\"ǚ\":\"u\",\n\t\"ǜ\":\"u\",\n\t\"ǖ\":\"u\",\n\t\"ṳ\":\"u\",\n\t\"ụ\":\"u\",\n\t\"ű\":\"u\",\n\t\"ȕ\":\"u\",\n\t\"ù\":\"u\",\n\t\"ủ\":\"u\",\n\t\"ư\":\"u\",\n\t\"ứ\":\"u\",\n\t\"ự\":\"u\",\n\t\"ừ\":\"u\",\n\t\"ử\":\"u\",\n\t\"ữ\":\"u\",\n\t\"ȗ\":\"u\",\n\t\"ū\":\"u\",\n\t\"ṻ\":\"u\",\n\t\"ų\":\"u\",\n\t\"ᶙ\":\"u\",\n\t\"ů\":\"u\",\n\t\"ũ\":\"u\",\n\t\"ṹ\":\"u\",\n\t\"ṵ\":\"u\",\n\t\"ᵫ\":\"ue\",\n\t\"ꝸ\":\"um\",\n\t\"ⱴ\":\"v\",\n\t\"ꝟ\":\"v\",\n\t\"ṿ\":\"v\",\n\t\"ʋ\":\"v\",\n\t\"ᶌ\":\"v\",\n\t\"ⱱ\":\"v\",\n\t\"ṽ\":\"v\",\n\t\"ꝡ\":\"vy\",\n\t\"ẃ\":\"w\",\n\t\"ŵ\":\"w\",\n\t\"ẅ\":\"w\",\n\t\"ẇ\":\"w\",\n\t\"ẉ\":\"w\",\n\t\"ẁ\":\"w\",\n\t\"ⱳ\":\"w\",\n\t\"ẘ\":\"w\",\n\t\"ẍ\":\"x\",\n\t\"ẋ\":\"x\",\n\t\"ᶍ\":\"x\",\n\t\"ý\":\"y\",\n\t\"ŷ\":\"y\",\n\t\"ÿ\":\"y\",\n\t\"ẏ\":\"y\",\n\t\"ỵ\":\"y\",\n\t\"ỳ\":\"y\",\n\t\"ƴ\":\"y\",\n\t\"ỷ\":\"y\",\n\t\"ỿ\":\"y\",\n\t\"ȳ\":\"y\",\n\t\"ẙ\":\"y\",\n\t\"ɏ\":\"y\",\n\t\"ỹ\":\"y\",\n\t\"ź\":\"z\",\n\t\"ž\":\"z\",\n\t\"ẑ\":\"z\",\n\t\"ʑ\":\"z\",\n\t\"ⱬ\":\"z\",\n\t\"ż\":\"z\",\n\t\"ẓ\":\"z\",\n\t\"ȥ\":\"z\",\n\t\"ẕ\":\"z\",\n\t\"ᵶ\":\"z\",\n\t\"ᶎ\":\"z\",\n\t\"ʐ\":\"z\",\n\t\"ƶ\":\"z\",\n\t\"ɀ\":\"z\",\n\t\"ff\":\"ff\",\n\t\"ffi\":\"ffi\",\n\t\"ffl\":\"ffl\",\n\t\"fi\":\"fi\",\n\t\"fl\":\"fl\",\n\t\"ij\":\"ij\",\n\t\"œ\":\"oe\",\n\t\"st\":\"st\",\n\t\"ₐ\":\"a\",\n\t\"ₑ\":\"e\",\n\t\"ᵢ\":\"i\",\n\t\"ⱼ\":\"j\",\n\t\"ₒ\":\"o\",\n\t\"ᵣ\":\"r\",\n\t\"ᵤ\":\"u\",\n\t\"ᵥ\":\"v\",\n\t\"ₓ\":\"x\",\n\t\"Ё\":\"YO\",\n\t\"Й\":\"I\",\n\t\"Ц\":\"TS\",\n\t\"У\":\"U\",\n\t\"К\":\"K\",\n\t\"Е\":\"E\",\n\t\"Н\":\"N\",\n\t\"Г\":\"G\",\n\t\"Ш\":\"SH\",\n\t\"Щ\":\"SCH\",\n\t\"З\":\"Z\",\n\t\"Х\":\"H\",\n\t\"Ъ\":\"'\",\n\t\"ё\":\"yo\",\n\t\"й\":\"i\",\n\t\"ц\":\"ts\",\n\t\"у\":\"u\",\n\t\"к\":\"k\",\n\t\"е\":\"e\",\n\t\"н\":\"n\",\n\t\"г\":\"g\",\n\t\"ш\":\"sh\",\n\t\"щ\":\"sch\",\n\t\"з\":\"z\",\n\t\"х\":\"h\",\n\t\"ъ\":\"'\",\n\t\"Ф\":\"F\",\n\t\"Ы\":\"I\",\n\t\"В\":\"V\",\n\t\"А\":\"a\",\n\t\"П\":\"P\",\n\t\"Р\":\"R\",\n\t\"О\":\"O\",\n\t\"Л\":\"L\",\n\t\"Д\":\"D\",\n\t\"Ж\":\"ZH\",\n\t\"Э\":\"E\",\n\t\"ф\":\"f\",\n\t\"ы\":\"i\",\n\t\"в\":\"v\",\n\t\"а\":\"a\",\n\t\"п\":\"p\",\n\t\"р\":\"r\",\n\t\"о\":\"o\",\n\t\"л\":\"l\",\n\t\"д\":\"d\",\n\t\"ж\":\"zh\",\n\t\"э\":\"e\",\n\t\"Я\":\"Ya\",\n\t\"Ч\":\"CH\",\n\t\"С\":\"S\",\n\t\"М\":\"M\",\n\t\"И\":\"I\",\n\t\"Т\":\"T\",\n\t\"Ь\":\"'\",\n\t\"Б\":\"B\",\n\t\"Ю\":\"YU\",\n\t\"я\":\"ya\",\n\t\"ч\":\"ch\",\n\t\"с\":\"s\",\n\t\"м\":\"m\",\n\t\"и\":\"i\",\n\t\"т\":\"t\",\n\t\"ь\":\"'\",\n\t\"б\":\"b\",\n\t\"ю\":\"yu\"\n};\n\nexports.transliterate = function(str) {\n\treturn str.replace(/[^A-Za-z0-9\\[\\] ]/g,function(ch) {\n\t\treturn exports.transliterationPairs[ch] || ch\n\t});\n};\n\nexports.transliterateToSafeASCII = function(str) {\n\treturn str.replace(/[^\\x00-\\x7F]/g,function(ch) {\n\t\treturn exports.transliterationPairs[ch] || \"\"\n\t});\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/utils/utils.js": {
"title": "$:/core/modules/utils/utils.js",
"text": "/*\\\ntitle: $:/core/modules/utils/utils.js\ntype: application/javascript\nmodule-type: utils\n\nVarious static utility functions.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar base64utf8 = require(\"$:/core/modules/utils/base64-utf8/base64-utf8.module.js\");\n\n/*\nDisplay a message, in colour if we're on a terminal\n*/\nexports.log = function(text,colour) {\n\tconsole.log($tw.node ? exports.terminalColour(colour) + text + exports.terminalColour() : text);\n};\n\nexports.terminalColour = function(colour) {\n\tif(!$tw.browser && $tw.node && process.stdout.isTTY) {\n\t\tif(colour) {\n\t\t\tvar code = exports.terminalColourLookup[colour];\n\t\t\tif(code) {\n\t\t\t\treturn \"\\x1b[\" + code + \"m\";\n\t\t\t}\n\t\t} else {\n\t\t\treturn \"\\x1b[0m\"; // Cancel colour\n\t\t}\n\t}\n\treturn \"\";\n};\n\nexports.terminalColourLookup = {\n\t\"black\": \"0;30\",\n\t\"red\": \"0;31\",\n\t\"green\": \"0;32\",\n\t\"brown/orange\": \"0;33\",\n\t\"blue\": \"0;34\",\n\t\"purple\": \"0;35\",\n\t\"cyan\": \"0;36\",\n\t\"light gray\": \"0;37\"\n};\n\n/*\nDisplay a warning, in colour if we're on a terminal\n*/\nexports.warning = function(text) {\n\texports.log(text,\"brown/orange\");\n};\n\n/*\nReturn the integer represented by the str (string).\nReturn the dflt (default) parameter if str is not a base-10 number.\n*/\nexports.getInt = function(str,deflt) {\n\tvar i = parseInt(str,10);\n\treturn isNaN(i) ? deflt : i;\n}\n\n/*\nRepeatedly replaces a substring within a string. Like String.prototype.replace, but without any of the default special handling of $ sequences in the replace string\n*/\nexports.replaceString = function(text,search,replace) {\n\treturn text.replace(search,function() {\n\t\treturn replace;\n\t});\n};\n\n/*\nRepeats a string\n*/\nexports.repeat = function(str,count) {\n\tvar result = \"\";\n\tfor(var t=0;t<count;t++) {\n\t\tresult += str;\n\t}\n\treturn result;\n};\n\n/*\nTrim whitespace from the start and end of a string\nThanks to Steven Levithan, http://blog.stevenlevithan.com/archives/faster-trim-javascript\n*/\nexports.trim = function(str) {\n\tif(typeof str === \"string\") {\n\t\treturn str.replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n\t} else {\n\t\treturn str;\n\t}\n};\n\n/*\nConvert a string to sentence case (ie capitalise first letter)\n*/\nexports.toSentenceCase = function(str) {\n\treturn (str || \"\").replace(/^\\S/, function(c) {return c.toUpperCase();});\n}\n\n/*\nConvert a string to title case (ie capitalise each initial letter)\n*/\nexports.toTitleCase = function(str) {\n\treturn (str || \"\").replace(/(^|\\s)\\S/g, function(c) {return c.toUpperCase();});\n}\n\t\n/*\nFind the line break preceding a given position in a string\nReturns position immediately after that line break, or the start of the string\n*/\nexports.findPrecedingLineBreak = function(text,pos) {\n\tvar result = text.lastIndexOf(\"\\n\",pos - 1);\n\tif(result === -1) {\n\t\tresult = 0;\n\t} else {\n\t\tresult++;\n\t\tif(text.charAt(result) === \"\\r\") {\n\t\t\tresult++;\n\t\t}\n\t}\n\treturn result;\n};\n\n/*\nFind the line break following a given position in a string\n*/\nexports.findFollowingLineBreak = function(text,pos) {\n\t// Cut to just past the following line break, or to the end of the text\n\tvar result = text.indexOf(\"\\n\",pos);\n\tif(result === -1) {\n\t\tresult = text.length;\n\t} else {\n\t\tif(text.charAt(result) === \"\\r\") {\n\t\t\tresult++;\n\t\t}\n\t}\n\treturn result;\n};\n\n/*\nReturn the number of keys in an object\n*/\nexports.count = function(object) {\n\treturn Object.keys(object || {}).length;\n};\n\n/*\nDetermine whether an array-item is an object-property\n*/\nexports.hopArray = function(object,array) {\n\tfor(var i=0; i<array.length; i++) {\n\t\tif($tw.utils.hop(object,array[i])) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\n/*\nRemove entries from an array\n\tarray: array to modify\n\tvalue: a single value to remove, or an array of values to remove\n*/\nexports.removeArrayEntries = function(array,value) {\n\tvar t,p;\n\tif($tw.utils.isArray(value)) {\n\t\tfor(t=0; t<value.length; t++) {\n\t\t\tp = array.indexOf(value[t]);\n\t\t\tif(p !== -1) {\n\t\t\t\tarray.splice(p,1);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tp = array.indexOf(value);\n\t\tif(p !== -1) {\n\t\t\tarray.splice(p,1);\n\t\t}\n\t}\n};\n\n/*\nCheck whether any members of a hashmap are present in another hashmap\n*/\nexports.checkDependencies = function(dependencies,changes) {\n\tvar hit = false;\n\t$tw.utils.each(changes,function(change,title) {\n\t\tif($tw.utils.hop(dependencies,title)) {\n\t\t\thit = true;\n\t\t}\n\t});\n\treturn hit;\n};\n\nexports.extend = function(object /* [, src] */) {\n\t$tw.utils.each(Array.prototype.slice.call(arguments, 1), function(source) {\n\t\tif(source) {\n\t\t\tfor(var property in source) {\n\t\t\t\tobject[property] = source[property];\n\t\t\t}\n\t\t}\n\t});\n\treturn object;\n};\n\nexports.deepCopy = function(object) {\n\tvar result,t;\n\tif($tw.utils.isArray(object)) {\n\t\t// Copy arrays\n\t\tresult = object.slice(0);\n\t} else if(typeof object === \"object\") {\n\t\tresult = {};\n\t\tfor(t in object) {\n\t\t\tif(object[t] !== undefined) {\n\t\t\t\tresult[t] = $tw.utils.deepCopy(object[t]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tresult = object;\n\t}\n\treturn result;\n};\n\nexports.extendDeepCopy = function(object,extendedProperties) {\n\tvar result = $tw.utils.deepCopy(object),t;\n\tfor(t in extendedProperties) {\n\t\tif(extendedProperties[t] !== undefined) {\n\t\t\tresult[t] = $tw.utils.deepCopy(extendedProperties[t]);\n\t\t}\n\t}\n\treturn result;\n};\n\nexports.deepFreeze = function deepFreeze(object) {\n\tvar property, key;\n\tif(object) {\n\t\tObject.freeze(object);\n\t\tfor(key in object) {\n\t\t\tproperty = object[key];\n\t\t\tif($tw.utils.hop(object,key) && (typeof property === \"object\") && !Object.isFrozen(property)) {\n\t\t\t\tdeepFreeze(property);\n\t\t\t}\n\t\t}\n\t}\n};\n\nexports.slowInSlowOut = function(t) {\n\treturn (1 - ((Math.cos(t * Math.PI) + 1) / 2));\n};\n\nexports.formatDateString = function(date,template) {\n\tvar result = \"\",\n\t\tt = template,\n\t\tmatches = [\n\t\t\t[/^0hh12/, function() {\n\t\t\t\treturn $tw.utils.pad($tw.utils.getHours12(date));\n\t\t\t}],\n\t\t\t[/^wYYYY/, function() {\n\t\t\t\treturn $tw.utils.getYearForWeekNo(date);\n\t\t\t}],\n\t\t\t[/^hh12/, function() {\n\t\t\t\treturn $tw.utils.getHours12(date);\n\t\t\t}],\n\t\t\t[/^DDth/, function() {\n\t\t\t\treturn date.getDate() + $tw.utils.getDaySuffix(date);\n\t\t\t}],\n\t\t\t[/^YYYY/, function() {\n\t\t\t\treturn date.getFullYear();\n\t\t\t}],\n\t\t\t[/^0hh/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getHours());\n\t\t\t}],\n\t\t\t[/^0mm/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getMinutes());\n\t\t\t}],\n\t\t\t[/^0ss/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getSeconds());\n\t\t\t}],\n\t\t\t[/^0XXX/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getMilliseconds(),3);\n\t\t\t}],\n\t\t\t[/^0DD/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getDate());\n\t\t\t}],\n\t\t\t[/^0MM/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getMonth()+1);\n\t\t\t}],\n\t\t\t[/^0WW/, function() {\n\t\t\t\treturn $tw.utils.pad($tw.utils.getWeek(date));\n\t\t\t}],\n\t\t\t[/^ddd/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Short/Day/\" + date.getDay());\n\t\t\t}],\n\t\t\t[/^mmm/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Short/Month/\" + (date.getMonth() + 1));\n\t\t\t}],\n\t\t\t[/^DDD/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Long/Day/\" + date.getDay());\n\t\t\t}],\n\t\t\t[/^MMM/, function() {\n\t\t\t\treturn $tw.language.getString(\"Date/Long/Month/\" + (date.getMonth() + 1));\n\t\t\t}],\n\t\t\t[/^TZD/, function() {\n\t\t\t\tvar tz = date.getTimezoneOffset(),\n\t\t\t\tatz = Math.abs(tz);\n\t\t\t\treturn (tz < 0 ? '+' : '-') + $tw.utils.pad(Math.floor(atz / 60)) + ':' + $tw.utils.pad(atz % 60);\n\t\t\t}],\n\t\t\t[/^wYY/, function() {\n\t\t\t\treturn $tw.utils.pad($tw.utils.getYearForWeekNo(date) - 2000);\n\t\t\t}],\n\t\t\t[/^[ap]m/, function() {\n\t\t\t\treturn $tw.utils.getAmPm(date).toLowerCase();\n\t\t\t}],\n\t\t\t[/^hh/, function() {\n\t\t\t\treturn date.getHours();\n\t\t\t}],\n\t\t\t[/^mm/, function() {\n\t\t\t\treturn date.getMinutes();\n\t\t\t}],\n\t\t\t[/^ss/, function() {\n\t\t\t\treturn date.getSeconds();\n\t\t\t}],\n\t\t\t[/^XXX/, function() {\n\t\t\t\treturn date.getMilliseconds();\n\t\t\t}],\n\t\t\t[/^[AP]M/, function() {\n\t\t\t\treturn $tw.utils.getAmPm(date).toUpperCase();\n\t\t\t}],\n\t\t\t[/^DD/, function() {\n\t\t\t\treturn date.getDate();\n\t\t\t}],\n\t\t\t[/^MM/, function() {\n\t\t\t\treturn date.getMonth() + 1;\n\t\t\t}],\n\t\t\t[/^WW/, function() {\n\t\t\t\treturn $tw.utils.getWeek(date);\n\t\t\t}],\n\t\t\t[/^YY/, function() {\n\t\t\t\treturn $tw.utils.pad(date.getFullYear() - 2000);\n\t\t\t}]\n\t\t];\n\t// If the user wants everything in UTC, shift the datestamp\n\t// Optimize for format string that essentially means\n\t// 'return raw UTC (tiddlywiki style) date string.'\n\tif(t.indexOf(\"[UTC]\") == 0 ) {\n\t\tif(t == \"[UTC]YYYY0MM0DD0hh0mm0ssXXX\")\n\t\t\treturn $tw.utils.stringifyDate(new Date());\n\t\tvar offset = date.getTimezoneOffset() ; // in minutes\n\t\tdate = new Date(date.getTime()+offset*60*1000) ;\n\t\tt = t.substr(5) ;\n\t}\n\twhile(t.length){\n\t\tvar matchString = \"\";\n\t\t$tw.utils.each(matches, function(m) {\n\t\t\tvar match = m[0].exec(t);\n\t\t\tif(match) {\n\t\t\t\tmatchString = m[1].call();\n\t\t\t\tt = t.substr(match[0].length);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t\tif(matchString) {\n\t\t\tresult += matchString;\n\t\t} else {\n\t\t\tresult += t.charAt(0);\n\t\t\tt = t.substr(1);\n\t\t}\n\t}\n\tresult = result.replace(/\\\\(.)/g,\"$1\");\n\treturn result;\n};\n\nexports.getAmPm = function(date) {\n\treturn $tw.language.getString(\"Date/Period/\" + (date.getHours() >= 12 ? \"pm\" : \"am\"));\n};\n\nexports.getDaySuffix = function(date) {\n\treturn $tw.language.getString(\"Date/DaySuffix/\" + date.getDate());\n};\n\nexports.getWeek = function(date) {\n\tvar dt = new Date(date.getTime());\n\tvar d = dt.getDay();\n\tif(d === 0) {\n\t\td = 7; // JavaScript Sun=0, ISO Sun=7\n\t}\n\tdt.setTime(dt.getTime() + (4 - d) * 86400000);// shift day to Thurs of same week to calculate weekNo\n\tvar x = new Date(dt.getFullYear(),0,1);\n\tvar n = Math.floor((dt.getTime() - x.getTime()) / 86400000);\n\treturn Math.floor(n / 7) + 1;\n};\n\nexports.getYearForWeekNo = function(date) {\n\tvar dt = new Date(date.getTime());\n\tvar d = dt.getDay();\n\tif(d === 0) {\n\t\td = 7; // JavaScript Sun=0, ISO Sun=7\n\t}\n\tdt.setTime(dt.getTime() + (4 - d) * 86400000);// shift day to Thurs of same week\n\treturn dt.getFullYear();\n};\n\nexports.getHours12 = function(date) {\n\tvar h = date.getHours();\n\treturn h > 12 ? h-12 : ( h > 0 ? h : 12 );\n};\n\n/*\nConvert a date delta in milliseconds into a string representation of \"23 seconds ago\", \"27 minutes ago\" etc.\n\tdelta: delta in milliseconds\nReturns an object with these members:\n\tdescription: string describing the delta period\n\tupdatePeriod: time in millisecond until the string will be inaccurate\n*/\nexports.getRelativeDate = function(delta) {\n\tvar futurep = false;\n\tif(delta < 0) {\n\t\tdelta = -1 * delta;\n\t\tfuturep = true;\n\t}\n\tvar units = [\n\t\t{name: \"Years\", duration: 365 * 24 * 60 * 60 * 1000},\n\t\t{name: \"Months\", duration: (365/12) * 24 * 60 * 60 * 1000},\n\t\t{name: \"Days\", duration: 24 * 60 * 60 * 1000},\n\t\t{name: \"Hours\", duration: 60 * 60 * 1000},\n\t\t{name: \"Minutes\", duration: 60 * 1000},\n\t\t{name: \"Seconds\", duration: 1000}\n\t];\n\tfor(var t=0; t<units.length; t++) {\n\t\tvar result = Math.floor(delta / units[t].duration);\n\t\tif(result >= 2) {\n\t\t\treturn {\n\t\t\t\tdelta: delta,\n\t\t\t\tdescription: $tw.language.getString(\n\t\t\t\t\t\"RelativeDate/\" + (futurep ? \"Future\" : \"Past\") + \"/\" + units[t].name,\n\t\t\t\t\t{variables:\n\t\t\t\t\t\t{period: result.toString()}\n\t\t\t\t\t}\n\t\t\t\t),\n\t\t\t\tupdatePeriod: units[t].duration\n\t\t\t};\n\t\t}\n\t}\n\treturn {\n\t\tdelta: delta,\n\t\tdescription: $tw.language.getString(\n\t\t\t\"RelativeDate/\" + (futurep ? \"Future\" : \"Past\") + \"/Second\",\n\t\t\t{variables:\n\t\t\t\t{period: \"1\"}\n\t\t\t}\n\t\t),\n\t\tupdatePeriod: 1000\n\t};\n};\n\n// Convert & to \"&\", < to \"<\", > to \">\", \" to \""\"\nexports.htmlEncode = function(s) {\n\tif(s) {\n\t\treturn s.toString().replace(/&/mg,\"&\").replace(/</mg,\"<\").replace(/>/mg,\">\").replace(/\\\"/mg,\""\");\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\n// Converts all HTML entities to their character equivalents\nexports.entityDecode = function(s) {\n\tvar converter = String.fromCodePoint || String.fromCharCode,\n\t\te = s.substr(1,s.length-2), // Strip the & and the ;\n\t\tc;\n\tif(e.charAt(0) === \"#\") {\n\t\tif(e.charAt(1) === \"x\" || e.charAt(1) === \"X\") {\n\t\t\tc = parseInt(e.substr(2),16);\n\t\t} else {\n\t\t\tc = parseInt(e.substr(1),10);\n\t\t}\n\t\tif(isNaN(c)) {\n\t\t\treturn s;\n\t\t} else {\n\t\t\treturn converter(c);\n\t\t}\n\t} else {\n\t\tc = $tw.config.htmlEntities[e];\n\t\tif(c) {\n\t\t\treturn converter(c);\n\t\t} else {\n\t\t\treturn s; // Couldn't convert it as an entity, just return it raw\n\t\t}\n\t}\n};\n\nexports.unescapeLineBreaks = function(s) {\n\treturn s.replace(/\\\\n/mg,\"\\n\").replace(/\\\\b/mg,\" \").replace(/\\\\s/mg,\"\\\\\").replace(/\\r/mg,\"\");\n};\n\n/*\n * Returns an escape sequence for given character. Uses \\x for characters <=\n * 0xFF to save space, \\u for the rest.\n *\n * The code needs to be in sync with th code template in the compilation\n * function for \"action\" nodes.\n */\n// Copied from peg.js, thanks to David Majda\nexports.escape = function(ch) {\n\tvar charCode = ch.charCodeAt(0);\n\tif(charCode <= 0xFF) {\n\t\treturn '\\\\x' + $tw.utils.pad(charCode.toString(16).toUpperCase());\n\t} else {\n\t\treturn '\\\\u' + $tw.utils.pad(charCode.toString(16).toUpperCase(),4);\n\t}\n};\n\n// Turns a string into a legal JavaScript string\n// Copied from peg.js, thanks to David Majda\nexports.stringify = function(s) {\n\t/*\n\t* ECMA-262, 5th ed., 7.8.4: All characters may appear literally in a string\n\t* literal except for the closing quote character, backslash, carriage return,\n\t* line separator, paragraph separator, and line feed. Any character may\n\t* appear in the form of an escape sequence.\n\t*\n\t* For portability, we also escape all non-ASCII characters.\n\t*/\n\treturn (s || \"\")\n\t\t.replace(/\\\\/g, '\\\\\\\\') // backslash\n\t\t.replace(/\"/g, '\\\\\"') // double quote character\n\t\t.replace(/'/g, \"\\\\'\") // single quote character\n\t\t.replace(/\\r/g, '\\\\r') // carriage return\n\t\t.replace(/\\n/g, '\\\\n') // line feed\n\t\t.replace(/[\\x00-\\x1f\\x80-\\uFFFF]/g, exports.escape); // non-ASCII characters\n};\n\n// Turns a string into a legal JSON string\n// Derived from peg.js, thanks to David Majda\nexports.jsonStringify = function(s) {\n\t// See http://www.json.org/\n\treturn (s || \"\")\n\t\t.replace(/\\\\/g, '\\\\\\\\') // backslash\n\t\t.replace(/\"/g, '\\\\\"') // double quote character\n\t\t.replace(/\\r/g, '\\\\r') // carriage return\n\t\t.replace(/\\n/g, '\\\\n') // line feed\n\t\t.replace(/\\x08/g, '\\\\b') // backspace\n\t\t.replace(/\\x0c/g, '\\\\f') // formfeed\n\t\t.replace(/\\t/g, '\\\\t') // tab\n\t\t.replace(/[\\x00-\\x1f\\x80-\\uFFFF]/g,function(s) {\n\t\t\treturn '\\\\u' + $tw.utils.pad(s.charCodeAt(0).toString(16).toUpperCase(),4);\n\t\t}); // non-ASCII characters\n};\n\n/*\nEscape the RegExp special characters with a preceding backslash\n*/\nexports.escapeRegExp = function(s) {\n return s.replace(/[\\-\\/\\\\\\^\\$\\*\\+\\?\\.\\(\\)\\|\\[\\]\\{\\}]/g, '\\\\$&');\n};\n\n// Checks whether a link target is external, i.e. not a tiddler title\nexports.isLinkExternal = function(to) {\n\tvar externalRegExp = /^(?:file|http|https|mailto|ftp|irc|news|data|skype):[^\\s<>{}\\[\\]`|\"\\\\^]+(?:\\/|\\b)/i;\n\treturn externalRegExp.test(to);\n};\n\nexports.nextTick = function(fn) {\n/*global window: false */\n\tif(typeof process === \"undefined\") {\n\t\t// Apparently it would be faster to use postMessage - http://dbaron.org/log/20100309-faster-timeouts\n\t\twindow.setTimeout(fn,4);\n\t} else {\n\t\tprocess.nextTick(fn);\n\t}\n};\n\n/*\nConvert a hyphenated CSS property name into a camel case one\n*/\nexports.unHyphenateCss = function(propName) {\n\treturn propName.replace(/-([a-z])/gi, function(match0,match1) {\n\t\treturn match1.toUpperCase();\n\t});\n};\n\n/*\nConvert a camelcase CSS property name into a dashed one (\"backgroundColor\" --> \"background-color\")\n*/\nexports.hyphenateCss = function(propName) {\n\treturn propName.replace(/([A-Z])/g, function(match0,match1) {\n\t\treturn \"-\" + match1.toLowerCase();\n\t});\n};\n\n/*\nParse a text reference of one of these forms:\n* title\n* !!field\n* title!!field\n* title##index\n* etc\nReturns an object with the following fields, all optional:\n* title: tiddler title\n* field: tiddler field name\n* index: JSON property index\n*/\nexports.parseTextReference = function(textRef) {\n\t// Separate out the title, field name and/or JSON indices\n\tvar reTextRef = /(?:(.*?)!!(.+))|(?:(.*?)##(.+))|(.*)/mg,\n\t\tmatch = reTextRef.exec(textRef),\n\t\tresult = {};\n\tif(match && reTextRef.lastIndex === textRef.length) {\n\t\t// Return the parts\n\t\tif(match[1]) {\n\t\t\tresult.title = match[1];\n\t\t}\n\t\tif(match[2]) {\n\t\t\tresult.field = match[2];\n\t\t}\n\t\tif(match[3]) {\n\t\t\tresult.title = match[3];\n\t\t}\n\t\tif(match[4]) {\n\t\t\tresult.index = match[4];\n\t\t}\n\t\tif(match[5]) {\n\t\t\tresult.title = match[5];\n\t\t}\n\t} else {\n\t\t// If we couldn't parse it\n\t\tresult.title = textRef\n\t}\n\treturn result;\n};\n\n/*\nChecks whether a string is a valid fieldname\n*/\nexports.isValidFieldName = function(name) {\n\tif(!name || typeof name !== \"string\") {\n\t\treturn false;\n\t}\n\tname = name.toLowerCase().trim();\n\tvar fieldValidatorRegEx = /^[a-z0-9\\-\\._]+$/mg;\n\treturn fieldValidatorRegEx.test(name);\n};\n\n/*\nExtract the version number from the meta tag or from the boot file\n*/\n\n// Browser version\nexports.extractVersionInfo = function() {\n\tif($tw.packageInfo) {\n\t\treturn $tw.packageInfo.version;\n\t} else {\n\t\tvar metatags = document.getElementsByTagName(\"meta\");\n\t\tfor(var t=0; t<metatags.length; t++) {\n\t\t\tvar m = metatags[t];\n\t\t\tif(m.name === \"tiddlywiki-version\") {\n\t\t\t\treturn m.content;\n\t\t\t}\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nGet the animation duration in ms\n*/\nexports.getAnimationDuration = function() {\n\treturn parseInt($tw.wiki.getTiddlerText(\"$:/config/AnimationDuration\",\"400\"),10) || 0;\n};\n\n/*\nHash a string to a number\nDerived from http://stackoverflow.com/a/15710692\n*/\nexports.hashString = function(str) {\n\treturn str.split(\"\").reduce(function(a,b) {\n\t\ta = ((a << 5) - a) + b.charCodeAt(0);\n\t\treturn a & a;\n\t},0);\n};\n\n/*\nDecode a base64 string\n*/\nexports.base64Decode = function(string64) {\n\treturn base64utf8.base64.decode.call(base64utf8,string64);\n};\n\n/*\nEncode a string to base64\n*/\nexports.base64Encode = function(string64) {\n\treturn base64utf8.base64.encode.call(base64utf8,string64);\n};\n\n/*\nConvert a hashmap into a tiddler dictionary format sequence of name:value pairs\n*/\nexports.makeTiddlerDictionary = function(data) {\n\tvar output = [];\n\tfor(var name in data) {\n\t\toutput.push(name + \": \" + data[name]);\n\t}\n\treturn output.join(\"\\n\");\n};\n\n/*\nHigh resolution microsecond timer for profiling\n*/\nexports.timer = function(base) {\n\tvar m;\n\tif($tw.node) {\n\t\tvar r = process.hrtime();\n\t\tm = r[0] * 1e3 + (r[1] / 1e6);\n\t} else if(window.performance) {\n\t\tm = performance.now();\n\t} else {\n\t\tm = Date.now();\n\t}\n\tif(typeof base !== \"undefined\") {\n\t\tm = m - base;\n\t}\n\treturn m;\n};\n\n/*\nConvert text and content type to a data URI\n*/\nexports.makeDataUri = function(text,type,_canonical_uri) {\n\ttype = type || \"text/vnd.tiddlywiki\";\n\tvar typeInfo = $tw.config.contentTypeInfo[type] || $tw.config.contentTypeInfo[\"text/plain\"],\n\t\tisBase64 = typeInfo.encoding === \"base64\",\n\t\tparts = [];\n\tif(_canonical_uri) {\n\t\tparts.push(_canonical_uri);\n\t} else {\n\t\tparts.push(\"data:\");\n\t\tparts.push(type);\n\t\tparts.push(isBase64 ? \";base64\" : \"\");\n\t\tparts.push(\",\");\n\t\tparts.push(isBase64 ? text : encodeURIComponent(text));\t\t\n\t}\n\treturn parts.join(\"\");\n};\n\n/*\nUseful for finding out the fully escaped CSS selector equivalent to a given tag. For example:\n\n$tw.utils.tagToCssSelector(\"$:/tags/Stylesheet\") --> tc-tagged-\\%24\\%3A\\%2Ftags\\%2FStylesheet\n*/\nexports.tagToCssSelector = function(tagName) {\n\treturn \"tc-tagged-\" + encodeURIComponent(tagName).replace(/[!\"#$%&'()*+,\\-./:;<=>?@[\\\\\\]^`{\\|}~,]/mg,function(c) {\n\t\treturn \"\\\\\" + c;\n\t});\n};\n\n/*\nIE does not have sign function\n*/\nexports.sign = Math.sign || function(x) {\n\tx = +x; // convert to a number\n\tif (x === 0 || isNaN(x)) {\n\t\treturn x;\n\t}\n\treturn x > 0 ? 1 : -1;\n};\n\n/*\nIE does not have an endsWith function\n*/\nexports.strEndsWith = function(str,ending,position) {\n\tif(str.endsWith) {\n\t\treturn str.endsWith(ending,position);\n\t} else {\n\t\tif (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > str.length) {\n\t\t\tposition = str.length;\n\t\t}\n\t\tposition -= ending.length;\n\t\tvar lastIndex = str.indexOf(ending, position);\n\t\treturn lastIndex !== -1 && lastIndex === position;\n\t}\n};\n\n/*\nReturn system information useful for debugging\n*/\nexports.getSystemInfo = function(str,ending,position) {\n\tvar results = [],\n\t\tsave = function(desc,value) {\n\t\t\tresults.push(desc + \": \" + value);\n\t\t};\n\tif($tw.browser) {\n\t\tsave(\"User Agent\",navigator.userAgent);\n\t\tsave(\"Online Status\",window.navigator.onLine);\n\t}\n\tif($tw.node) {\n\t\tsave(\"Node Version\",process.version);\n\t}\n\treturn results.join(\"\\n\");\n};\n\nexports.parseNumber = function(str) {\n\treturn parseFloat(str) || 0;\n};\n\nexports.parseInt = function(str) {\n\treturn parseInt(str,10) || 0;\n};\n\nexports.stringifyNumber = function(num) {\n\treturn num + \"\";\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "utils"
},
"$:/core/modules/widgets/action-createtiddler.js": {
"title": "$:/core/modules/widgets/action-createtiddler.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/action-createtiddler.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to create a new tiddler with a unique name and specified fields.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw:false, require:false, exports:false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CreateTiddlerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCreateTiddlerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCreateTiddlerWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nCreateTiddlerWidget.prototype.execute = function() {\n\tthis.actionBaseTitle = this.getAttribute(\"$basetitle\");\n\tthis.hasBase = !!this.actionBaseTitle;\n\tthis.actionSaveTitle = this.getAttribute(\"$savetitle\");\n\tthis.actionSaveDraftTitle = this.getAttribute(\"$savedrafttitle\");\n\tthis.actionTimestamp = this.getAttribute(\"$timestamp\",\"yes\") === \"yes\";\n\t//Following params are new since 5.1.22\n\tthis.actionTemplate = this.getAttribute(\"$template\");\n\tthis.useTemplate = !!this.actionTemplate;\n\tthis.actionOverwrite = this.getAttribute(\"$overwrite\",\"no\");\n\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nCreateTiddlerWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif($tw.utils.count(changedAttributes) > 0) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nCreateTiddlerWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar title = this.wiki.getTiddlerText(\"$:/language/DefaultNewTiddlerTitle\"), // Get the initial new-tiddler title\n\t\tfields = {},\n\t\tcreationFields,\n\t\tmodificationFields;\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\tfields[name] = attribute;\n\t\t}\n\t});\n\tif(this.actionTimestamp) {\n\t\tcreationFields = this.wiki.getCreationFields();\n\t\tmodificationFields = this.wiki.getModificationFields();\n\t}\n\tif(this.hasBase && this.actionOverwrite === \"no\") {\n\t\ttitle = this.wiki.generateNewTitle(this.actionBaseTitle);\n\t} else if (this.hasBase && this.actionOverwrite === \"yes\") {\n\t\ttitle = this.actionBaseTitle\n\t}\n\t// NO $basetitle BUT $template parameter is available\n\t// the title MUST be unique, otherwise the template would be overwritten\n\tif (!this.hasBase && this.useTemplate) {\n\t\ttitle = this.wiki.generateNewTitle(this.actionTemplate);\n\t} else if (!this.hasBase && !this.useTemplate) {\n\t\t// If NO $basetitle AND NO $template use initial title\n\t\t// DON'T overwrite any stuff\n\t\ttitle = this.wiki.generateNewTitle(title);\n\t}\n\tvar templateTiddler = this.wiki.getTiddler(this.actionTemplate) || {};\n\tvar tiddler = this.wiki.addTiddler(new $tw.Tiddler(templateTiddler.fields,creationFields,fields,modificationFields,{title: title}));\n\tif(this.actionSaveTitle) {\n\t\tthis.wiki.setTextReference(this.actionSaveTitle,title,this.getVariable(\"currentTiddler\"));\n\t}\n\tif(this.actionSaveDraftTitle) {\n\t\tthis.wiki.setTextReference(this.actionSaveDraftTitle,this.wiki.generateDraftTitle(title),this.getVariable(\"currentTiddler\"));\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-createtiddler\"] = CreateTiddlerWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/action-deletefield.js": {
"title": "$:/core/modules/widgets/action-deletefield.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/action-deletefield.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to delete fields of a tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DeleteFieldWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDeleteFieldWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDeleteFieldWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nDeleteFieldWidget.prototype.execute = function() {\n\tthis.actionTiddler = this.getAttribute(\"$tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.actionField = this.getAttribute(\"$field\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nDeleteFieldWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$tiddler\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nDeleteFieldWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar self = this,\n\t\ttiddler = this.wiki.getTiddler(self.actionTiddler),\n\t\tremoveFields = {},\n\t\thasChanged = false;\n\tif(this.actionField && tiddler) {\n\t\tremoveFields[this.actionField] = undefined;\n\t\tif(this.actionField in tiddler.fields) {\n\t\t\thasChanged = true;\n\t\t}\n\t}\n\tif(tiddler) {\n\t\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\t\tif(name.charAt(0) !== \"$\" && name !== \"title\") {\n\t\t\t\tremoveFields[name] = undefined;\n\t\t\t\thasChanged = true;\n\t\t\t}\n\t\t});\n\t\tif(hasChanged) {\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getCreationFields(),tiddler,removeFields,this.wiki.getModificationFields()));\t\t\t\n\t\t}\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-deletefield\"] = DeleteFieldWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/action-deletetiddler.js": {
"title": "$:/core/modules/widgets/action-deletetiddler.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/action-deletetiddler.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to delete a tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DeleteTiddlerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDeleteTiddlerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDeleteTiddlerWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nDeleteTiddlerWidget.prototype.execute = function() {\n\tthis.actionFilter = this.getAttribute(\"$filter\");\n\tthis.actionTiddler = this.getAttribute(\"$tiddler\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nDeleteTiddlerWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$filter\"] || changedAttributes[\"$tiddler\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nDeleteTiddlerWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar tiddlers = [];\n\tif(this.actionFilter) {\n\t\ttiddlers = this.wiki.filterTiddlers(this.actionFilter,this);\n\t}\n\tif(this.actionTiddler) {\n\t\ttiddlers.push(this.actionTiddler);\n\t}\n\tfor(var t=0; t<tiddlers.length; t++) {\n\t\tthis.wiki.deleteTiddler(tiddlers[t]);\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-deletetiddler\"] = DeleteTiddlerWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/action-listops.js": {
"title": "$:/core/modules/widgets/action-listops.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/action-listops.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to apply list operations to any tiddler field (defaults to the 'list' field of the current tiddler)\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\nvar ActionListopsWidget = function(parseTreeNode, options) {\n\tthis.initialise(parseTreeNode, options);\n};\n/**\n * Inherit from the base widget class\n */\nActionListopsWidget.prototype = new Widget();\n/**\n * Render this widget into the DOM\n */\nActionListopsWidget.prototype.render = function(parent, nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n/**\n * Compute the internal state of the widget\n */\nActionListopsWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.target = this.getAttribute(\"$tiddler\", this.getVariable(\n\t\t\"currentTiddler\"));\n\tthis.filter = this.getAttribute(\"$filter\");\n\tthis.subfilter = this.getAttribute(\"$subfilter\");\n\tthis.listField = this.getAttribute(\"$field\", \"list\");\n\tthis.listIndex = this.getAttribute(\"$index\");\n\tthis.filtertags = this.getAttribute(\"$tags\");\n};\n/**\n * \tRefresh the widget by ensuring our attributes are up to date\n */\nActionListopsWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.$tiddler || changedAttributes.$filter ||\n\t\tchangedAttributes.$subfilter || changedAttributes.$field ||\n\t\tchangedAttributes.$index || changedAttributes.$tags) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n/**\n * \tInvoke the action associated with this widget\n */\nActionListopsWidget.prototype.invokeAction = function(triggeringWidget,\n\tevent) {\n\t//Apply the specified filters to the lists\n\tvar field = this.listField,\n\t\tindex,\n\t\ttype = \"!!\",\n\t\tlist = this.listField;\n\tif(this.listIndex) {\n\t\tfield = undefined;\n\t\tindex = this.listIndex;\n\t\ttype = \"##\";\n\t\tlist = this.listIndex;\n\t}\n\tif(this.filter) {\n\t\tthis.wiki.setText(this.target, field, index, $tw.utils.stringifyList(\n\t\t\tthis.wiki\n\t\t\t.filterTiddlers(this.filter, this)));\n\t}\n\tif(this.subfilter) {\n\t\tvar subfilter = \"[list[\" + this.target + type + list + \"]] \" + this.subfilter;\n\t\tthis.wiki.setText(this.target, field, index, $tw.utils.stringifyList(\n\t\t\tthis.wiki\n\t\t\t.filterTiddlers(subfilter, this)));\n\t}\n\tif(this.filtertags) {\n\t\tvar tiddler = this.wiki.getTiddler(this.target),\n\t\t\toldtags = tiddler ? (tiddler.fields.tags || []).slice(0) : [],\n\t\t\ttagfilter = \"[list[\" + this.target + \"!!tags]] \" + this.filtertags,\n\t\t\tnewtags = this.wiki.filterTiddlers(tagfilter,this);\n\t\tif($tw.utils.stringifyList(oldtags.sort()) !== $tw.utils.stringifyList(newtags.sort())) {\n\t\t\tthis.wiki.setText(this.target,\"tags\",undefined,$tw.utils.stringifyList(newtags));\t\t\t\n\t\t}\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-listops\"] = ActionListopsWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/action-navigate.js": {
"title": "$:/core/modules/widgets/action-navigate.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/action-navigate.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to navigate to a tiddler\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar NavigateWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nNavigateWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nNavigateWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nNavigateWidget.prototype.execute = function() {\n\tthis.actionTo = this.getAttribute(\"$to\");\n\tthis.actionScroll = this.getAttribute(\"$scroll\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nNavigateWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$to\"] || changedAttributes[\"$scroll\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nNavigateWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tevent = event || {};\n\tvar bounds = triggeringWidget && triggeringWidget.getBoundingClientRect && triggeringWidget.getBoundingClientRect(),\n\t\tsuppressNavigation = event.metaKey || event.ctrlKey || (event.button === 1);\n\tif(this.actionScroll === \"yes\") {\n\t\tsuppressNavigation = false;\n\t} else if(this.actionScroll === \"no\") {\n\t\tsuppressNavigation = true;\n\t}\n\tthis.dispatchEvent({\n\t\ttype: \"tm-navigate\",\n\t\tnavigateTo: this.actionTo === undefined ? this.getVariable(\"currentTiddler\") : this.actionTo,\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\"),\n\t\tnavigateFromNode: triggeringWidget,\n\t\tnavigateFromClientRect: bounds && { top: bounds.top, left: bounds.left, width: bounds.width, right: bounds.right, bottom: bounds.bottom, height: bounds.height\n\t\t},\n\t\tnavigateSuppressNavigation: suppressNavigation\n\t});\n\treturn true; // Action was invoked\n};\n\nexports[\"action-navigate\"] = NavigateWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/action-popup.js": {
"title": "$:/core/modules/widgets/action-popup.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/action-popup.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to trigger a popup.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ActionPopupWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nActionPopupWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nActionPopupWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nActionPopupWidget.prototype.execute = function() {\n\tthis.actionState = this.getAttribute(\"$state\");\n\tthis.actionCoords = this.getAttribute(\"$coords\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nActionPopupWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$state\"] || changedAttributes[\"$coords\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nActionPopupWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\t// Trigger the popup\n\tvar popupLocationRegExp = /^\\((-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+)\\)$/,\n\t\tmatch = popupLocationRegExp.exec(this.actionCoords);\n\tif(match) {\n\t\t$tw.popup.triggerPopup({\n\t\t\tdomNode: null,\n\t\t\tdomNodeRect: {\n\t\t\t\tleft: parseFloat(match[1]),\n\t\t\t\ttop: parseFloat(match[2]),\n\t\t\t\twidth: parseFloat(match[3]),\n\t\t\t\theight: parseFloat(match[4])\n\t\t\t},\n\t\t\ttitle: this.actionState,\n\t\t\twiki: this.wiki\n\t\t});\n\t}\n\treturn true; // Action was invoked\n};\n\nexports[\"action-popup\"] = ActionPopupWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/action-sendmessage.js": {
"title": "$:/core/modules/widgets/action-sendmessage.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/action-sendmessage.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to send a message\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SendMessageWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSendMessageWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSendMessageWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nSendMessageWidget.prototype.execute = function() {\n\tthis.actionMessage = this.getAttribute(\"$message\");\n\tthis.actionParam = this.getAttribute(\"$param\");\n\tthis.actionName = this.getAttribute(\"$name\");\n\tthis.actionValue = this.getAttribute(\"$value\",\"\");\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nSendMessageWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(Object.keys(changedAttributes).length) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nSendMessageWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\t// Get the string parameter\n\tvar param = this.actionParam;\n\t// Assemble the attributes as a hashmap\n\tvar paramObject = Object.create(null);\n\tvar count = 0;\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\tparamObject[name] = attribute;\n\t\t\tcount++;\n\t\t}\n\t});\n\t// Add name/value pair if present\n\tif(this.actionName) {\n\t\tparamObject[this.actionName] = this.actionValue;\n\t}\n\t// Dispatch the message\n\tthis.dispatchEvent({\n\t\ttype: this.actionMessage,\n\t\tparam: param,\n\t\tparamObject: paramObject,\n\t\ttiddlerTitle: this.getVariable(\"currentTiddler\"),\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\"),\n\t\tevent: event\n\t});\n\treturn true; // Action was invoked\n};\n\nexports[\"action-sendmessage\"] = SendMessageWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/action-setfield.js": {
"title": "$:/core/modules/widgets/action-setfield.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/action-setfield.js\ntype: application/javascript\nmodule-type: widget\n\nAction widget to set a single field or index on a tiddler.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SetFieldWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSetFieldWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSetFieldWidget.prototype.render = function(parent,nextSibling) {\n\tthis.computeAttributes();\n\tthis.execute();\n};\n\n/*\nCompute the internal state of the widget\n*/\nSetFieldWidget.prototype.execute = function() {\n\tthis.actionTiddler = this.getAttribute(\"$tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.actionField = this.getAttribute(\"$field\");\n\tthis.actionIndex = this.getAttribute(\"$index\");\n\tthis.actionValue = this.getAttribute(\"$value\");\n\tthis.actionTimestamp = this.getAttribute(\"$timestamp\",\"yes\") === \"yes\";\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nSetFieldWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"$tiddler\"] || changedAttributes[\"$field\"] || changedAttributes[\"$index\"] || changedAttributes[\"$value\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nInvoke the action associated with this widget\n*/\nSetFieldWidget.prototype.invokeAction = function(triggeringWidget,event) {\n\tvar self = this,\n\t\toptions = {};\n\toptions.suppressTimestamp = !this.actionTimestamp;\n\tif((typeof this.actionField == \"string\") || (typeof this.actionIndex == \"string\") || (typeof this.actionValue == \"string\")) {\n\t\tthis.wiki.setText(this.actionTiddler,this.actionField,this.actionIndex,this.actionValue,options);\n\t}\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\tself.wiki.setText(self.actionTiddler,name,undefined,attribute,options);\n\t\t}\n\t});\n\treturn true; // Action was invoked\n};\n\nexports[\"action-setfield\"] = SetFieldWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/browse.js": {
"title": "$:/core/modules/widgets/browse.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/browse.js\ntype: application/javascript\nmodule-type: widget\n\nBrowse widget for browsing for files to import\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar BrowseWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nBrowseWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nBrowseWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\tvar domNode = this.document.createElement(\"input\");\n\tdomNode.setAttribute(\"type\",\"file\");\n\tif(this.browseMultiple) {\n\t\tdomNode.setAttribute(\"multiple\",\"multiple\");\n\t}\n\tif(this.tooltip) {\n\t\tdomNode.setAttribute(\"title\",this.tooltip);\n\t}\n\t// Nw.js supports \"nwsaveas\" to force a \"save as\" dialogue that allows a new or existing file to be selected\n\tif(this.nwsaveas) {\n\t\tdomNode.setAttribute(\"nwsaveas\",this.nwsaveas);\n\t}\n\t// Nw.js supports \"webkitdirectory\" and \"nwdirectory\" to allow a directory to be selected\n\tif(this.webkitdirectory) {\n\t\tdomNode.setAttribute(\"webkitdirectory\",this.webkitdirectory);\n\t}\n\tif(this.nwdirectory) {\n\t\tdomNode.setAttribute(\"nwdirectory\",this.nwdirectory);\n\t}\n\t// Add a click event handler\n\tdomNode.addEventListener(\"change\",function (event) {\n\t\tif(self.message) {\n\t\t\tself.dispatchEvent({type: self.message, param: self.param, files: event.target.files});\n\t\t} else {\n\t\t\tself.wiki.readFiles(event.target.files,{\n\t\t\t\tcallback: function(tiddlerFieldsArray) {\n\t\t\t\t\tself.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify(tiddlerFieldsArray)});\n\t\t\t\t},\n\t\t\t\tdeserializer: self.deserializer\n\t\t\t});\n\t\t}\n\t\treturn false;\n\t},false);\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nBrowseWidget.prototype.execute = function() {\n\tthis.browseMultiple = this.getAttribute(\"multiple\");\n\tthis.deserializer = this.getAttribute(\"deserializer\");\n\tthis.message = this.getAttribute(\"message\");\n\tthis.param = this.getAttribute(\"param\");\n\tthis.tooltip = this.getAttribute(\"tooltip\");\n\tthis.nwsaveas = this.getAttribute(\"nwsaveas\");\n\tthis.webkitdirectory = this.getAttribute(\"webkitdirectory\");\n\tthis.nwdirectory = this.getAttribute(\"nwdirectory\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nBrowseWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\n};\n\nexports.browse = BrowseWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/button.js": {
"title": "$:/core/modules/widgets/button.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/button.js\ntype: application/javascript\nmodule-type: widget\n\nButton widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ButtonWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nButtonWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nButtonWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\tvar tag = \"button\";\n\tif(this.buttonTag && $tw.config.htmlUnsafeElements.indexOf(this.buttonTag) === -1) {\n\t\ttag = this.buttonTag;\n\t}\n\tvar domNode = this.document.createElement(tag);\n\t// Assign classes\n\tvar classes = this[\"class\"].split(\" \") || [],\n\t\tisPoppedUp = (this.popup || this.popupTitle) && this.isPoppedUp();\n\tif(this.selectedClass) {\n\t\tif((this.set || this.setTitle) && this.setTo && this.isSelected()) {\n\t\t\t$tw.utils.pushTop(classes,this.selectedClass.split(\" \"));\n\t\t}\n\t\tif(isPoppedUp) {\n\t\t\t$tw.utils.pushTop(classes,this.selectedClass.split(\" \"));\n\t\t}\n\t}\n\tif(isPoppedUp) {\n\t\t$tw.utils.pushTop(classes,\"tc-popup-handle\");\n\t}\n\tdomNode.className = classes.join(\" \");\n\t// Assign other attributes\n\tif(this.style) {\n\t\tdomNode.setAttribute(\"style\",this.style);\n\t}\n\tif(this.tooltip) {\n\t\tdomNode.setAttribute(\"title\",this.tooltip);\n\t}\n\tif(this[\"aria-label\"]) {\n\t\tdomNode.setAttribute(\"aria-label\",this[\"aria-label\"]);\n\t}\n\t// Set the tabindex\n\tif(this.tabIndex) {\n\t\tdomNode.setAttribute(\"tabindex\",this.tabIndex);\n\t}\t\n\t// Add a click event handler\n\tdomNode.addEventListener(\"click\",function (event) {\n\t\tvar handled = false;\n\t\tif(self.invokeActions(self,event)) {\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.to) {\n\t\t\tself.navigateTo(event);\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.message) {\n\t\t\tself.dispatchMessage(event);\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.popup || self.popupTitle) {\n\t\t\tself.triggerPopup(event);\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.set || self.setTitle) {\n\t\t\tself.setTiddler();\n\t\t\thandled = true;\n\t\t}\n\t\tif(self.actions) {\n\t\t\tself.invokeActionString(self.actions,self,event);\n\t\t}\n\t\tif(handled) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t}\n\t\treturn handled;\n\t},false);\n\t// Make it draggable if required\n\tif(this.dragTiddler || this.dragFilter) {\n\t\t$tw.utils.makeDraggable({\n\t\t\tdomNode: domNode,\n\t\t\tdragTiddlerFn: function() {return self.dragTiddler;},\n\t\t\tdragFilterFn: function() {return self.dragFilter;},\n\t\t\twidget: this\n\t\t});\n\t}\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nWe don't allow actions to propagate because we trigger actions ourselves\n*/\nButtonWidget.prototype.allowActionPropagation = function() {\n\treturn false;\n};\n\nButtonWidget.prototype.getBoundingClientRect = function() {\n\treturn this.domNodes[0].getBoundingClientRect();\n};\n\nButtonWidget.prototype.isSelected = function() {\n return this.setTitle ? (this.setField ? this.wiki.getTiddler(this.setTitle).getFieldString(this.setField) === this.setTo :\n\t\t(this.setIndex ? this.wiki.extractTiddlerDataItem(this.setTitle,this.setIndex) === this.setTo :\n\t\t\tthis.wiki.getTiddlerText(this.setTitle))) || this.defaultSetValue || this.getVariable(\"currentTiddler\") :\n\t\tthis.wiki.getTextReference(this.set,this.defaultSetValue,this.getVariable(\"currentTiddler\")) === this.setTo;\n};\n\nButtonWidget.prototype.isPoppedUp = function() {\n\tvar tiddler = this.popupTitle ? this.wiki.getTiddler(this.popupTitle) : this.wiki.getTiddler(this.popup);\n\tvar result = tiddler && tiddler.fields.text ? $tw.popup.readPopupState(tiddler.fields.text) : false;\n\treturn result;\n};\n\nButtonWidget.prototype.navigateTo = function(event) {\n\tvar bounds = this.getBoundingClientRect();\n\tthis.dispatchEvent({\n\t\ttype: \"tm-navigate\",\n\t\tnavigateTo: this.to,\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\"),\n\t\tnavigateFromNode: this,\n\t\tnavigateFromClientRect: { top: bounds.top, left: bounds.left, width: bounds.width, right: bounds.right, bottom: bounds.bottom, height: bounds.height\n\t\t},\n\t\tnavigateSuppressNavigation: event.metaKey || event.ctrlKey || (event.button === 1),\n\t\tevent: event\n\t});\n};\n\nButtonWidget.prototype.dispatchMessage = function(event) {\n\tthis.dispatchEvent({type: this.message, param: this.param, tiddlerTitle: this.getVariable(\"currentTiddler\"), event: event});\n};\n\nButtonWidget.prototype.triggerPopup = function(event) {\n\tif(this.popupTitle) {\n\t\t$tw.popup.triggerPopup({\n\t\t\tdomNode: this.domNodes[0],\n\t\t\ttitle: this.popupTitle,\n\t\t\twiki: this.wiki,\n\t\t\tnoStateReference: true\n\t\t});\n\t} else {\n\t\t$tw.popup.triggerPopup({\n\t\t\tdomNode: this.domNodes[0],\n\t\t\ttitle: this.popup,\n\t\t\twiki: this.wiki\n\t\t});\n\t}\n};\n\nButtonWidget.prototype.setTiddler = function() {\n\tif(this.setTitle) {\n\t\tthis.setField ? this.wiki.setText(this.setTitle,this.setField,undefined,this.setTo) :\n\t\t\t\t(this.setIndex ? this.wiki.setText(this.setTitle,undefined,this.setIndex,this.setTo) :\n\t\t\t\tthis.wiki.setText(this.setTitle,\"text\",undefined,this.setTo));\n\t} else {\n\t\tthis.wiki.setTextReference(this.set,this.setTo,this.getVariable(\"currentTiddler\"));\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nButtonWidget.prototype.execute = function() {\n\t// Get attributes\n\tthis.actions = this.getAttribute(\"actions\");\n\tthis.to = this.getAttribute(\"to\");\n\tthis.message = this.getAttribute(\"message\");\n\tthis.param = this.getAttribute(\"param\");\n\tthis.set = this.getAttribute(\"set\");\n\tthis.setTo = this.getAttribute(\"setTo\");\n\tthis.popup = this.getAttribute(\"popup\");\n\tthis.hover = this.getAttribute(\"hover\");\n\tthis[\"class\"] = this.getAttribute(\"class\",\"\");\n\tthis[\"aria-label\"] = this.getAttribute(\"aria-label\");\n\tthis.tooltip = this.getAttribute(\"tooltip\");\n\tthis.style = this.getAttribute(\"style\");\n\tthis.selectedClass = this.getAttribute(\"selectedClass\");\n\tthis.defaultSetValue = this.getAttribute(\"default\",\"\");\n\tthis.buttonTag = this.getAttribute(\"tag\");\n\tthis.dragTiddler = this.getAttribute(\"dragTiddler\");\n\tthis.dragFilter = this.getAttribute(\"dragFilter\");\n\tthis.setTitle = this.getAttribute(\"setTitle\");\n\tthis.setField = this.getAttribute(\"setField\");\n\tthis.setIndex = this.getAttribute(\"setIndex\");\n\tthis.popupTitle = this.getAttribute(\"popupTitle\");\n\tthis.tabIndex = this.getAttribute(\"tabindex\");\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nButtonWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.actions || changedAttributes.to || changedAttributes.message || changedAttributes.param || changedAttributes.set || changedAttributes.setTo || changedAttributes.popup || changedAttributes.hover || changedAttributes[\"class\"] || changedAttributes.selectedClass || changedAttributes.style || changedAttributes.dragFilter || changedAttributes.dragTiddler || (this.set && changedTiddlers[this.set]) || (this.popup && changedTiddlers[this.popup]) || (this.popupTitle && changedTiddlers[this.popupTitle]) || changedAttributes.setTitle || changedAttributes.setField || changedAttributes.setIndex || changedAttributes.popupTitle) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.button = ButtonWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/checkbox.js": {
"title": "$:/core/modules/widgets/checkbox.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/checkbox.js\ntype: application/javascript\nmodule-type: widget\n\nCheckbox widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CheckboxWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCheckboxWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCheckboxWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Create our elements\n\tthis.labelDomNode = this.document.createElement(\"label\");\n\tthis.labelDomNode.setAttribute(\"class\",this.checkboxClass);\n\tthis.inputDomNode = this.document.createElement(\"input\");\n\tthis.inputDomNode.setAttribute(\"type\",\"checkbox\");\n\tif(this.getValue()) {\n\t\tthis.inputDomNode.setAttribute(\"checked\",\"true\");\n\t}\n\tthis.labelDomNode.appendChild(this.inputDomNode);\n\tthis.spanDomNode = this.document.createElement(\"span\");\n\tthis.labelDomNode.appendChild(this.spanDomNode);\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(this.inputDomNode,[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n\t// Insert the label into the DOM and render any children\n\tparent.insertBefore(this.labelDomNode,nextSibling);\n\tthis.renderChildren(this.spanDomNode,null);\n\tthis.domNodes.push(this.labelDomNode);\n};\n\nCheckboxWidget.prototype.getValue = function() {\n\tvar tiddler = this.wiki.getTiddler(this.checkboxTitle);\n\tif(tiddler) {\n\t\tif(this.checkboxTag) {\n\t\t\tif(this.checkboxInvertTag) {\n\t\t\t\treturn !tiddler.hasTag(this.checkboxTag);\n\t\t\t} else {\n\t\t\t\treturn tiddler.hasTag(this.checkboxTag);\n\t\t\t}\n\t\t}\n\t\tif(this.checkboxField) {\n\t\t\tvar value;\n\t\t\tif($tw.utils.hop(tiddler.fields,this.checkboxField)) {\n\t\t\t\tvalue = tiddler.fields[this.checkboxField] || \"\";\n\t\t\t} else {\n\t\t\t\tvalue = this.checkboxDefault || \"\";\n\t\t\t}\n\t\t\tif(value === this.checkboxChecked) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif(value === this.checkboxUnchecked) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\tif(this.checkboxIndex) {\n\t\t\tvar value = this.wiki.extractTiddlerDataItem(tiddler,this.checkboxIndex,this.checkboxDefault || \"\");\n\t\t\tif(value === this.checkboxChecked) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif(value === this.checkboxUnchecked) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif(this.checkboxTag) {\n\t\t\treturn false;\n\t\t}\n\t\tif(this.checkboxField) {\n\t\t\tif(this.checkboxDefault === this.checkboxChecked) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tif(this.checkboxDefault === this.checkboxUnchecked) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n};\n\nCheckboxWidget.prototype.handleChangeEvent = function(event) {\n\tvar checked = this.inputDomNode.checked,\n\t\ttiddler = this.wiki.getTiddler(this.checkboxTitle),\n\t\tfallbackFields = {text: \"\"},\n\t\tnewFields = {title: this.checkboxTitle},\n\t\thasChanged = false,\n\t\ttagCheck = false,\n\t\thasTag = tiddler && tiddler.hasTag(this.checkboxTag),\n\t\tvalue = checked ? this.checkboxChecked : this.checkboxUnchecked;\n\tif(this.checkboxTag && this.checkboxInvertTag === \"yes\") {\n\t\ttagCheck = hasTag === checked;\n\t} else {\n\t\ttagCheck = hasTag !== checked;\n\t}\n\t// Set the tag if specified\n\tif(this.checkboxTag && (!tiddler || tagCheck)) {\n\t\tnewFields.tags = tiddler ? (tiddler.fields.tags || []).slice(0) : [];\n\t\tvar pos = newFields.tags.indexOf(this.checkboxTag);\n\t\tif(pos !== -1) {\n\t\t\tnewFields.tags.splice(pos,1);\n\t\t}\n\t\tif(this.checkboxInvertTag === \"yes\" && !checked) {\n\t\t\tnewFields.tags.push(this.checkboxTag);\n\t\t} else if(this.checkboxInvertTag !== \"yes\" && checked) {\n\t\t\tnewFields.tags.push(this.checkboxTag);\n\t\t}\n\t\thasChanged = true;\n\t}\n\t// Set the field if specified\n\tif(this.checkboxField) {\n\t\tif(!tiddler || tiddler.fields[this.checkboxField] !== value) {\n\t\t\tnewFields[this.checkboxField] = value;\n\t\t\thasChanged = true;\n\t\t}\n\t}\n\t// Set the index if specified\n\tif(this.checkboxIndex) {\n\t\tvar indexValue = this.wiki.extractTiddlerDataItem(this.checkboxTitle,this.checkboxIndex);\n\t\tif(!tiddler || indexValue !== value) {\n\t\t\thasChanged = true;\n\t\t}\n\t}\n\tif(hasChanged) {\n\t\tif(this.checkboxIndex) {\n\t\t\tthis.wiki.setText(this.checkboxTitle,\"\",this.checkboxIndex,value);\n\t\t} else {\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getCreationFields(),fallbackFields,tiddler,newFields,this.wiki.getModificationFields()));\n\t\t}\n\t}\n\t// Trigger actions\n\tif(this.checkboxActions) {\n\t\tthis.invokeActionString(this.checkboxActions,this,event);\n\t}\n\tif(this.checkboxCheckActions && checked) {\n\t\tthis.invokeActionString(this.checkboxCheckActions,this,event);\n\t}\n\tif(this.checkboxUncheckActions && !checked) {\n\t\tthis.invokeActionString(this.checkboxUncheckActions,this,event);\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nCheckboxWidget.prototype.execute = function() {\n\t// Get the parameters from the attributes\n\tthis.checkboxActions = this.getAttribute(\"actions\");\n\tthis.checkboxCheckActions = this.getAttribute(\"checkactions\");\n\tthis.checkboxUncheckActions = this.getAttribute(\"uncheckactions\");\n\tthis.checkboxTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.checkboxTag = this.getAttribute(\"tag\");\n\tthis.checkboxField = this.getAttribute(\"field\");\n\tthis.checkboxIndex = this.getAttribute(\"index\");\n\tthis.checkboxChecked = this.getAttribute(\"checked\");\n\tthis.checkboxUnchecked = this.getAttribute(\"unchecked\");\n\tthis.checkboxDefault = this.getAttribute(\"default\");\n\tthis.checkboxClass = this.getAttribute(\"class\",\"\");\n\tthis.checkboxInvertTag = this.getAttribute(\"invertTag\",\"\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nCheckboxWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.tag || changedAttributes.invertTag || changedAttributes.field || changedAttributes.index || changedAttributes.checked || changedAttributes.unchecked || changedAttributes[\"default\"] || changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar refreshed = false;\n\t\tif(changedTiddlers[this.checkboxTitle]) {\n\t\t\tthis.inputDomNode.checked = this.getValue();\n\t\t\trefreshed = true;\n\t\t}\n\t\treturn this.refreshChildren(changedTiddlers) || refreshed;\n\t}\n};\n\nexports.checkbox = CheckboxWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/codeblock.js": {
"title": "$:/core/modules/widgets/codeblock.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/codeblock.js\ntype: application/javascript\nmodule-type: widget\n\nCode block node widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CodeBlockWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCodeBlockWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCodeBlockWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar codeNode = this.document.createElement(\"code\"),\n\t\tdomNode = this.document.createElement(\"pre\");\n\tcodeNode.appendChild(this.document.createTextNode(this.getAttribute(\"code\")));\n\tdomNode.appendChild(codeNode);\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.domNodes.push(domNode);\n\tif(this.postRender) {\n\t\tthis.postRender();\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nCodeBlockWidget.prototype.execute = function() {\n\tthis.language = this.getAttribute(\"language\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nCodeBlockWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\n};\n\nexports.codeblock = CodeBlockWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/count.js": {
"title": "$:/core/modules/widgets/count.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/count.js\ntype: application/javascript\nmodule-type: widget\n\nCount widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar CountWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nCountWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nCountWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar textNode = this.document.createTextNode(this.currentCount);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nCountWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.filter = this.getAttribute(\"filter\");\n\t// Execute the filter\n\tif(this.filter) {\n\t\tthis.currentCount = this.wiki.filterTiddlers(this.filter,this).length;\n\t} else {\n\t\tthis.currentCount = \"0\";\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nCountWidget.prototype.refresh = function(changedTiddlers) {\n\t// Re-execute the filter to get the count\n\tthis.computeAttributes();\n\tvar oldCount = this.currentCount;\n\tthis.execute();\n\tif(this.currentCount !== oldCount) {\n\t\t// Regenerate and rerender the widget and replace the existing DOM node\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n\n};\n\nexports.count = CountWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/diff-text.js": {
"title": "$:/core/modules/widgets/diff-text.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/diff-text.js\ntype: application/javascript\nmodule-type: widget\n\nWidget to display a diff between two texts\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget,\n\tdmp = require(\"$:/core/modules/utils/diff-match-patch/diff_match_patch.js\");\n\nvar DiffTextWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDiffTextWidget.prototype = new Widget();\n\nDiffTextWidget.prototype.invisibleCharacters = {\n\t\"\\n\": \"↩︎\\n\",\n\t\"\\r\": \"⇠\",\n\t\"\\t\": \"⇥\\t\"\n};\n\n/*\nRender this widget into the DOM\n*/\nDiffTextWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create the diff\n\tvar dmpObject = new dmp.diff_match_patch(),\n\t\tdiffs = dmpObject.diff_main(this.getAttribute(\"source\"),this.getAttribute(\"dest\"));\n\t// Apply required cleanup\n\tswitch(this.getAttribute(\"cleanup\",\"semantic\")) {\n\t\tcase \"none\":\n\t\t\t// No cleanup\n\t\t\tbreak;\n\t\tcase \"efficiency\":\n\t\t\tdmpObject.diff_cleanupEfficiency(diffs);\n\t\t\tbreak;\n\t\tdefault: // case \"semantic\"\n\t\t\tdmpObject.diff_cleanupSemantic(diffs);\n\t\t\tbreak;\n\t}\n\t// Create the elements\n\tvar domContainer = this.document.createElement(\"div\"), \n\t\tdomDiff = this.createDiffDom(diffs);\n\tparent.insertBefore(domContainer,nextSibling);\n\t// Set variables\n\tthis.setVariable(\"diff-count\",diffs.reduce(function(acc,diff) {\n\t\tif(diff[0] !== dmp.DIFF_EQUAL) {\n\t\t\tacc++;\n\t\t}\n\t\treturn acc;\n\t},0).toString());\n\t// Render child widgets\n\tthis.renderChildren(domContainer,null);\n\t// Render the diff\n\tdomContainer.appendChild(domDiff);\n\t// Save our container\n\tthis.domNodes.push(domContainer);\n};\n\n/*\nCreate DOM elements representing a list of diffs\n*/\nDiffTextWidget.prototype.createDiffDom = function(diffs) {\n\tvar self = this;\n\t// Create the element and assign the attributes\n\tvar domPre = this.document.createElement(\"pre\"),\n\t\tdomCode = this.document.createElement(\"code\");\n\t$tw.utils.each(diffs,function(diff) {\n\t\tvar tag = diff[0] === dmp.DIFF_INSERT ? \"ins\" : (diff[0] === dmp.DIFF_DELETE ? \"del\" : \"span\"),\n\t\t\tclassName = diff[0] === dmp.DIFF_INSERT ? \"tc-diff-insert\" : (diff[0] === dmp.DIFF_DELETE ? \"tc-diff-delete\" : \"tc-diff-equal\"),\n\t\t\tdom = self.document.createElement(tag),\n\t\t\ttext = diff[1],\n\t\t\tcurrPos = 0,\n\t\t\tre = /([\\x00-\\x1F])/mg,\n\t\t\tmatch = re.exec(text),\n\t\t\tspan,\n\t\t\tprintable;\n\t\tdom.className = className;\n\t\twhile(match) {\n\t\t\tif(currPos < match.index) {\n\t\t\t\tdom.appendChild(self.document.createTextNode(text.slice(currPos,match.index)));\n\t\t\t}\n\t\t\tspan = self.document.createElement(\"span\");\n\t\t\tspan.className = \"tc-diff-invisible\";\n\t\t\tprintable = self.invisibleCharacters[match[0]] || (\"[0x\" + match[0].charCodeAt(0).toString(16) + \"]\");\n\t\t\tspan.appendChild(self.document.createTextNode(printable));\n\t\t\tdom.appendChild(span);\n\t\t\tcurrPos = match.index + match[0].length;\n\t\t\tmatch = re.exec(text);\n\t\t}\n\t\tif(currPos < text.length) {\n\t\t\tdom.appendChild(self.document.createTextNode(text.slice(currPos)));\n\t\t}\n\t\tdomCode.appendChild(dom);\n\t});\n\tdomPre.appendChild(domCode);\n\treturn domPre;\n};\n\n/*\nCompute the internal state of the widget\n*/\nDiffTextWidget.prototype.execute = function() {\n\t// Make child widgets\n\tvar parseTreeNodes;\n\tif(this.parseTreeNode && this.parseTreeNode.children && this.parseTreeNode.children.length > 0) {\n\t\tparseTreeNodes = this.parseTreeNode.children;\n\t} else {\n\t\tparseTreeNodes = [{\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: \"$:/language/Diffs/CountMessage\"}\n\t\t\t}\n\t\t}];\n\t}\n\tthis.makeChildWidgets(parseTreeNodes);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nDiffTextWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.source || changedAttributes.dest || changedAttributes.cleanup) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports[\"diff-text\"] = DiffTextWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/draggable.js": {
"title": "$:/core/modules/widgets/draggable.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/draggable.js\ntype: application/javascript\nmodule-type: widget\n\nDraggable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DraggableWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDraggableWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDraggableWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Sanitise the specified tag\n\tvar tag = this.draggableTag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"div\";\n\t}\n\t// Create our element\n\tvar domNode = this.document.createElement(tag);\n\t// Assign classes\n\tvar classes = [\"tc-draggable\"];\n\tif(this.draggableClasses) {\n\t\tclasses.push(this.draggableClasses);\n\t}\n\tdomNode.setAttribute(\"class\",classes.join(\" \"));\n\t// Add event handlers\n\t$tw.utils.makeDraggable({\n\t\tdomNode: domNode,\n\t\tdragTiddlerFn: function() {return self.getAttribute(\"tiddler\");},\n\t\tdragFilterFn: function() {return self.getAttribute(\"filter\");},\n\t\tstartActions: self.startActions,\n\t\tendActions: self.endActions,\n\t\twidget: this\n\t});\n\t// Insert the link into the DOM and render any children\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nDraggableWidget.prototype.execute = function() {\n\t// Pick up our attributes\n\tthis.draggableTag = this.getAttribute(\"tag\",\"div\");\n\tthis.draggableClasses = this.getAttribute(\"class\");\n\tthis.startActions = this.getAttribute(\"startactions\");\n\tthis.endActions = this.getAttribute(\"endactions\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nDraggableWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tag || changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.draggable = DraggableWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/droppable.js": {
"title": "$:/core/modules/widgets/droppable.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/droppable.js\ntype: application/javascript\nmodule-type: widget\n\nDroppable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DroppableWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDroppableWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDroppableWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar tag = this.parseTreeNode.isBlock ? \"div\" : \"span\";\n\tif(this.droppableTag && $tw.config.htmlUnsafeElements.indexOf(this.droppableTag) === -1) {\n\t\ttag = this.droppableTag;\n\t}\n\t// Create element and assign classes\n\tvar domNode = this.document.createElement(tag),\n\t\tclasses = (this[\"class\"] || \"\").split(\" \");\n\tclasses.push(\"tc-droppable\");\n\tdomNode.className = classes.join(\" \");\n\t// Add event handlers\n\tif(this.droppableEnable) {\n\t\t$tw.utils.addEventListeners(domNode,[\n\t\t\t{name: \"dragenter\", handlerObject: this, handlerMethod: \"handleDragEnterEvent\"},\n\t\t\t{name: \"dragover\", handlerObject: this, handlerMethod: \"handleDragOverEvent\"},\n\t\t\t{name: \"dragleave\", handlerObject: this, handlerMethod: \"handleDragLeaveEvent\"},\n\t\t\t{name: \"drop\", handlerObject: this, handlerMethod: \"handleDropEvent\"}\n\t\t]);\t\t\n\t}\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n\t// Stack of outstanding enter/leave events\n\tthis.currentlyEntered = [];\n};\n\nDroppableWidget.prototype.enterDrag = function(event) {\n\tif(this.currentlyEntered.indexOf(event.target) === -1) {\n\t\tthis.currentlyEntered.push(event.target);\n\t}\n\t// If we're entering for the first time we need to apply highlighting\n\t$tw.utils.addClass(this.domNodes[0],\"tc-dragover\");\n};\n\nDroppableWidget.prototype.leaveDrag = function(event) {\n\tvar pos = this.currentlyEntered.indexOf(event.target);\n\tif(pos !== -1) {\n\t\tthis.currentlyEntered.splice(pos,1);\n\t}\n\t// Remove highlighting if we're leaving externally. The hacky second condition is to resolve a problem with Firefox whereby there is an erroneous dragenter event if the node being dragged is within the dropzone\n\tif(this.currentlyEntered.length === 0 || (this.currentlyEntered.length === 1 && this.currentlyEntered[0] === $tw.dragInProgress)) {\n\t\tthis.currentlyEntered = [];\n\t\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n\t}\n};\n\nDroppableWidget.prototype.handleDragEnterEvent = function(event) {\n\tthis.enterDrag(event);\n\t// Tell the browser that we're ready to handle the drop\n\tevent.preventDefault();\n\t// Tell the browser not to ripple the drag up to any parent drop handlers\n\tevent.stopPropagation();\n\treturn false;\n};\n\nDroppableWidget.prototype.handleDragOverEvent = function(event) {\n\t// Check for being over a TEXTAREA or INPUT\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) !== -1) {\n\t\treturn false;\n\t}\n\t// Tell the browser that we're still interested in the drop\n\tevent.preventDefault();\n\t// Set the drop effect\n\tevent.dataTransfer.dropEffect = this.droppableEffect;\n\treturn false;\n};\n\nDroppableWidget.prototype.handleDragLeaveEvent = function(event) {\n\tthis.leaveDrag(event);\n\treturn false;\n};\n\nDroppableWidget.prototype.handleDropEvent = function(event) {\n\tvar self = this;\n\tthis.leaveDrag(event);\n\t// Check for being over a TEXTAREA or INPUT\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) !== -1) {\n\t\treturn false;\n\t}\n\tvar dataTransfer = event.dataTransfer;\n\t// Remove highlighting\n\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n\t// Try to import the various data types we understand\n\t$tw.utils.importDataTransfer(dataTransfer,null,function(fieldsArray) {\n\t\tfieldsArray.forEach(function(fields) {\n\t\t\tself.performActions(fields.title || fields.text,event);\n\t\t});\n\t});\n\t// Tell the browser that we handled the drop\n\tevent.preventDefault();\n\t// Stop the drop ripple up to any parent handlers\n\tevent.stopPropagation();\n\treturn false;\n};\n\nDroppableWidget.prototype.performActions = function(title,event) {\n\tif(this.droppableActions) {\n\t\tvar modifierKey = event.ctrlKey && ! event.shiftKey ? \"ctrl\" : event.shiftKey && !event.ctrlKey ? \"shift\" : \n\t\t\t\tevent.ctrlKey && event.shiftKey ? \"ctrl-shift\" : \"normal\" ;\n\t\tthis.invokeActionString(this.droppableActions,this,event,{actionTiddler: title, modifier: modifierKey});\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nDroppableWidget.prototype.execute = function() {\n\tthis.droppableActions = this.getAttribute(\"actions\");\n\tthis.droppableEffect = this.getAttribute(\"effect\",\"copy\");\n\tthis.droppableTag = this.getAttribute(\"tag\");\n\tthis.droppableClass = this.getAttribute(\"class\");\n\tthis.droppableEnable = (this.getAttribute(\"enable\") || \"yes\") === \"yes\";\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nDroppableWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"class\"] || changedAttributes.tag || changedAttributes.enable) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.droppable = DroppableWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/dropzone.js": {
"title": "$:/core/modules/widgets/dropzone.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/dropzone.js\ntype: application/javascript\nmodule-type: widget\n\nDropzone widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar DropZoneWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nDropZoneWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nDropZoneWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\tvar domNode = this.document.createElement(\"div\");\n\tdomNode.className = this.dropzoneClass || \"tc-dropzone\";\n\t// Add event handlers\n\tif(this.dropzoneEnable) {\n\t\t$tw.utils.addEventListeners(domNode,[\n\t\t\t{name: \"dragenter\", handlerObject: this, handlerMethod: \"handleDragEnterEvent\"},\n\t\t\t{name: \"dragover\", handlerObject: this, handlerMethod: \"handleDragOverEvent\"},\n\t\t\t{name: \"dragleave\", handlerObject: this, handlerMethod: \"handleDragLeaveEvent\"},\n\t\t\t{name: \"drop\", handlerObject: this, handlerMethod: \"handleDropEvent\"},\n\t\t\t{name: \"paste\", handlerObject: this, handlerMethod: \"handlePasteEvent\"},\n\t\t\t{name: \"dragend\", handlerObject: this, handlerMethod: \"handleDragEndEvent\"}\n\t\t]);\t\t\n\t}\n\tdomNode.addEventListener(\"click\",function (event) {\n\t},false);\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n\t// Stack of outstanding enter/leave events\n\tthis.currentlyEntered = [];\n};\n\nDropZoneWidget.prototype.enterDrag = function(event) {\n\tif(this.currentlyEntered.indexOf(event.target) === -1) {\n\t\tthis.currentlyEntered.push(event.target);\n\t}\n\t// If we're entering for the first time we need to apply highlighting\n\t$tw.utils.addClass(this.domNodes[0],\"tc-dragover\");\n};\n\nDropZoneWidget.prototype.leaveDrag = function(event) {\n\tvar pos = this.currentlyEntered.indexOf(event.target);\n\tif(pos !== -1) {\n\t\tthis.currentlyEntered.splice(pos,1);\n\t}\n\t// Remove highlighting if we're leaving externally\n\tif(this.currentlyEntered.length === 0) {\n\t\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n\t}\n};\n\nDropZoneWidget.prototype.handleDragEnterEvent = function(event) {\n\t// Check for this window being the source of the drag\n\tif($tw.dragInProgress) {\n\t\treturn false;\n\t}\n\tthis.enterDrag(event);\n\t// Tell the browser that we're ready to handle the drop\n\tevent.preventDefault();\n\t// Tell the browser not to ripple the drag up to any parent drop handlers\n\tevent.stopPropagation();\n};\n\nDropZoneWidget.prototype.handleDragOverEvent = function(event) {\n\t// Check for being over a TEXTAREA or INPUT\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) !== -1) {\n\t\treturn false;\n\t}\n\t// Check for this window being the source of the drag\n\tif($tw.dragInProgress) {\n\t\treturn false;\n\t}\n\t// Tell the browser that we're still interested in the drop\n\tevent.preventDefault();\n\tevent.dataTransfer.dropEffect = \"copy\"; // Explicitly show this is a copy\n};\n\nDropZoneWidget.prototype.handleDragLeaveEvent = function(event) {\n\tthis.leaveDrag(event);\n};\n\nDropZoneWidget.prototype.handleDragEndEvent = function(event) {\n\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n};\n\nDropZoneWidget.prototype.handleDropEvent = function(event) {\n\tvar self = this,\n\t\treadFileCallback = function(tiddlerFieldsArray) {\n\t\t\tself.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify(tiddlerFieldsArray)});\n\t\t};\n\tthis.leaveDrag(event);\n\t// Check for being over a TEXTAREA or INPUT\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) !== -1) {\n\t\treturn false;\n\t}\n\t// Check for this window being the source of the drag\n\tif($tw.dragInProgress) {\n\t\treturn false;\n\t}\n\tvar self = this,\n\t\tdataTransfer = event.dataTransfer;\n\t// Remove highlighting\n\t$tw.utils.removeClass(this.domNodes[0],\"tc-dragover\");\n\t// Import any files in the drop\n\tvar numFiles = 0;\n\tif(dataTransfer.files) {\n\t\tnumFiles = this.wiki.readFiles(dataTransfer.files,{\n\t\t\tcallback: readFileCallback,\n\t\t\tdeserializer: this.dropzoneDeserializer\n\t\t});\n\t}\n\t// Try to import the various data types we understand\n\tif(numFiles === 0) {\n\t\t$tw.utils.importDataTransfer(dataTransfer,this.wiki.generateNewTitle(\"Untitled\"),readFileCallback);\n\t}\n\t// Tell the browser that we handled the drop\n\tevent.preventDefault();\n\t// Stop the drop ripple up to any parent handlers\n\tevent.stopPropagation();\n};\n\nDropZoneWidget.prototype.handlePasteEvent = function(event) {\n\tvar self = this,\n\t\treadFileCallback = function(tiddlerFieldsArray) {\n\t\t\tself.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify(tiddlerFieldsArray)});\n\t\t};\n\t// Let the browser handle it if we're in a textarea or input box\n\tif([\"TEXTAREA\",\"INPUT\"].indexOf(event.target.tagName) == -1 && !event.target.isContentEditable) {\n\t\tvar self = this,\n\t\t\titems = event.clipboardData.items;\n\t\t// Enumerate the clipboard items\n\t\tfor(var t = 0; t<items.length; t++) {\n\t\t\tvar item = items[t];\n\t\t\tif(item.kind === \"file\") {\n\t\t\t\t// Import any files\n\t\t\t\tthis.wiki.readFile(item.getAsFile(),{\n\t\t\t\t\tcallback: readFileCallback,\n\t\t\t\t\tdeserializer: this.dropzoneDeserializer\n\t\t\t\t});\n\t\t\t} else if(item.kind === \"string\") {\n\t\t\t\t// Create tiddlers from string items\n\t\t\t\tvar type = item.type;\n\t\t\t\titem.getAsString(function(str) {\n\t\t\t\t\tvar tiddlerFields = {\n\t\t\t\t\t\ttitle: self.wiki.generateNewTitle(\"Untitled\"),\n\t\t\t\t\t\ttext: str,\n\t\t\t\t\t\ttype: type\n\t\t\t\t\t};\n\t\t\t\t\tif($tw.log.IMPORT) {\n\t\t\t\t\t\tconsole.log(\"Importing string '\" + str + \"', type: '\" + type + \"'\");\n\t\t\t\t\t}\n\t\t\t\t\tself.dispatchEvent({type: \"tm-import-tiddlers\", param: JSON.stringify([tiddlerFields])});\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\t// Tell the browser that we've handled the paste\n\t\tevent.stopPropagation();\n\t\tevent.preventDefault();\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nDropZoneWidget.prototype.execute = function() {\n\tthis.dropzoneClass = this.getAttribute(\"class\");\n\tthis.dropzoneDeserializer = this.getAttribute(\"deserializer\");\n\tthis.dropzoneEnable = (this.getAttribute(\"enable\") || \"yes\") === \"yes\";\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nDropZoneWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.enable) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.dropzone = DropZoneWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/edit-binary.js": {
"title": "$:/core/modules/widgets/edit-binary.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/edit-binary.js\ntype: application/javascript\nmodule-type: widget\n\nEdit-binary widget; placeholder for editing binary tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar BINARY_WARNING_MESSAGE = \"$:/core/ui/BinaryWarning\";\nvar EXPORT_BUTTON_IMAGE = \"$:/core/images/export-button\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditBinaryWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditBinaryWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditBinaryWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nEditBinaryWidget.prototype.execute = function() {\n\t// Get our parameters\n\tvar editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tvar tiddler = this.wiki.getTiddler(editTitle);\n\tvar type = tiddler.fields.type;\n\tvar text = tiddler.fields.text;\n\t// Transclude the binary data tiddler warning message\n\tvar warn = {\n\t\ttype: \"element\",\n\t\ttag: \"p\",\n\t\tchildren: [{\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: BINARY_WARNING_MESSAGE}\n\t\t\t}\n\t\t}]\n\t};\n\t// Create download link based on draft tiddler title\n\tvar link = {\n\t\ttype: \"element\",\n\t\ttag: \"a\",\n\t\tattributes: {\n\t\t\ttitle: {type: \"indirect\", textReference: \"!!draft.title\"},\n\t\t\tdownload: {type: \"indirect\", textReference: \"!!draft.title\"}\n\t\t},\n\t\tchildren: [{\n\t\ttype: \"transclude\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {type: \"string\", value: EXPORT_BUTTON_IMAGE}\n\t\t\t}\n\t\t}]\n\t};\n\t// Set the link href to internal data URI (no external)\n\tif(text) {\n\t\tlink.attributes.href = {\n\t\t\ttype: \"string\", \n\t\t\tvalue: \"data:\" + type + \";base64,\" + text\n\t\t};\n\t}\n\t// Combine warning message and download link in a div\n\tvar element = {\n\t\ttype: \"element\",\n\t\ttag: \"div\",\n\t\tattributes: {\n\t\t\tclass: {type: \"string\", value: \"tc-binary-warning\"}\n\t\t},\n\t\tchildren: [warn, link]\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets([element]);\n};\n\n/*\nRefresh by refreshing our child widget\n*/\nEditBinaryWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports[\"edit-binary\"] = EditBinaryWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/edit-bitmap.js": {
"title": "$:/core/modules/widgets/edit-bitmap.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/edit-bitmap.js\ntype: application/javascript\nmodule-type: widget\n\nEdit-bitmap widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n// Default image sizes\nvar DEFAULT_IMAGE_WIDTH = 600,\n\tDEFAULT_IMAGE_HEIGHT = 370,\n\tDEFAULT_IMAGE_TYPE = \"image/png\";\n\n// Configuration tiddlers\nvar LINE_WIDTH_TITLE = \"$:/config/BitmapEditor/LineWidth\",\n\tLINE_COLOUR_TITLE = \"$:/config/BitmapEditor/Colour\",\n\tLINE_OPACITY_TITLE = \"$:/config/BitmapEditor/Opacity\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditBitmapWidget = function(parseTreeNode,options) {\n\t// Initialise the editor operations if they've not been done already\n\tif(!this.editorOperations) {\n\t\tEditBitmapWidget.prototype.editorOperations = {};\n\t\t$tw.modules.applyMethods(\"bitmapeditoroperation\",this.editorOperations);\n\t}\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditBitmapWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditBitmapWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Create the wrapper for the toolbar and render its content\n\tthis.toolbarNode = this.document.createElement(\"div\");\n\tthis.toolbarNode.className = \"tc-editor-toolbar\";\n\tparent.insertBefore(this.toolbarNode,nextSibling);\n\tthis.domNodes.push(this.toolbarNode);\n\t// Create the on-screen canvas\n\tthis.canvasDomNode = $tw.utils.domMaker(\"canvas\",{\n\t\tdocument: this.document,\n\t\t\"class\":\"tc-edit-bitmapeditor\",\n\t\teventListeners: [{\n\t\t\tname: \"touchstart\", handlerObject: this, handlerMethod: \"handleTouchStartEvent\"\n\t\t},{\n\t\t\tname: \"touchmove\", handlerObject: this, handlerMethod: \"handleTouchMoveEvent\"\n\t\t},{\n\t\t\tname: \"touchend\", handlerObject: this, handlerMethod: \"handleTouchEndEvent\"\n\t\t},{\n\t\t\tname: \"mousedown\", handlerObject: this, handlerMethod: \"handleMouseDownEvent\"\n\t\t},{\n\t\t\tname: \"mousemove\", handlerObject: this, handlerMethod: \"handleMouseMoveEvent\"\n\t\t},{\n\t\t\tname: \"mouseup\", handlerObject: this, handlerMethod: \"handleMouseUpEvent\"\n\t\t}]\n\t});\n\t// Set the width and height variables\n\tthis.setVariable(\"tv-bitmap-editor-width\",this.canvasDomNode.width + \"px\");\n\tthis.setVariable(\"tv-bitmap-editor-height\",this.canvasDomNode.height + \"px\");\n\t// Render toolbar child widgets\n\tthis.renderChildren(this.toolbarNode,null);\n\t// // Insert the elements into the DOM\n\tparent.insertBefore(this.canvasDomNode,nextSibling);\n\tthis.domNodes.push(this.canvasDomNode);\n\t// Load the image into the canvas\n\tif($tw.browser) {\n\t\tthis.loadCanvas();\n\t}\n\t// Add widget message listeners\n\tthis.addEventListeners([\n\t\t{type: \"tm-edit-bitmap-operation\", handler: \"handleEditBitmapOperationMessage\"}\n\t]);\n};\n\n/*\nHandle an edit bitmap operation message from the toolbar\n*/\nEditBitmapWidget.prototype.handleEditBitmapOperationMessage = function(event) {\n\t// Invoke the handler\n\tvar handler = this.editorOperations[event.param];\n\tif(handler) {\n\t\thandler.call(this,event);\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nEditBitmapWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nJust refresh the toolbar\n*/\nEditBitmapWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nSet the bitmap size variables and refresh the toolbar\n*/\nEditBitmapWidget.prototype.refreshToolbar = function() {\n\t// Set the width and height variables\n\tthis.setVariable(\"tv-bitmap-editor-width\",this.canvasDomNode.width + \"px\");\n\tthis.setVariable(\"tv-bitmap-editor-height\",this.canvasDomNode.height + \"px\");\n\t// Refresh each of our child widgets\n\t$tw.utils.each(this.children,function(childWidget) {\n\t\tchildWidget.refreshSelf();\n\t});\n};\n\nEditBitmapWidget.prototype.loadCanvas = function() {\n\tvar tiddler = this.wiki.getTiddler(this.editTitle),\n\t\tcurrImage = new Image();\n\t// Set up event handlers for loading the image\n\tvar self = this;\n\tcurrImage.onload = function() {\n\t\t// Copy the image to the on-screen canvas\n\t\tself.initCanvas(self.canvasDomNode,currImage.width,currImage.height,currImage);\n\t\t// And also copy the current bitmap to the off-screen canvas\n\t\tself.currCanvas = self.document.createElement(\"canvas\");\n\t\tself.initCanvas(self.currCanvas,currImage.width,currImage.height,currImage);\n\t\t// Set the width and height input boxes\n\t\tself.refreshToolbar();\n\t};\n\tcurrImage.onerror = function() {\n\t\t// Set the on-screen canvas size and clear it\n\t\tself.initCanvas(self.canvasDomNode,DEFAULT_IMAGE_WIDTH,DEFAULT_IMAGE_HEIGHT);\n\t\t// Set the off-screen canvas size and clear it\n\t\tself.currCanvas = self.document.createElement(\"canvas\");\n\t\tself.initCanvas(self.currCanvas,DEFAULT_IMAGE_WIDTH,DEFAULT_IMAGE_HEIGHT);\n\t\t// Set the width and height input boxes\n\t\tself.refreshToolbar();\n\t};\n\t// Get the current bitmap into an image object\n\tif(tiddler && tiddler.fields.type && tiddler.fields.text) {\n\t\tcurrImage.src = \"data:\" + tiddler.fields.type + \";base64,\" + tiddler.fields.text;\t\t\n\t} else {\n\t\tcurrImage.width = DEFAULT_IMAGE_WIDTH;\n\t\tcurrImage.height = DEFAULT_IMAGE_HEIGHT;\n\t\tcurrImage.onerror();\n\t}\n};\n\nEditBitmapWidget.prototype.initCanvas = function(canvas,width,height,image) {\n\tcanvas.width = width;\n\tcanvas.height = height;\n\tvar ctx = canvas.getContext(\"2d\");\n\tif(image) {\n\t\tctx.drawImage(image,0,0);\n\t} else {\n\t\tctx.fillStyle = \"#fff\";\n\t\tctx.fillRect(0,0,canvas.width,canvas.height);\n\t}\n};\n\n/*\n** Change the size of the canvas, preserving the current image\n*/\nEditBitmapWidget.prototype.changeCanvasSize = function(newWidth,newHeight) {\n\t// Create and size a new canvas\n\tvar newCanvas = this.document.createElement(\"canvas\");\n\tthis.initCanvas(newCanvas,newWidth,newHeight);\n\t// Copy the old image\n\tvar ctx = newCanvas.getContext(\"2d\");\n\tctx.drawImage(this.currCanvas,0,0);\n\t// Set the new canvas as the current one\n\tthis.currCanvas = newCanvas;\n\t// Set the size of the onscreen canvas\n\tthis.canvasDomNode.width = newWidth;\n\tthis.canvasDomNode.height = newHeight;\n\t// Paint the onscreen canvas with the offscreen canvas\n\tctx = this.canvasDomNode.getContext(\"2d\");\n\tctx.drawImage(this.currCanvas,0,0);\n};\n\n/*\n** Rotate the canvas left by 90 degrees\n*/\nEditBitmapWidget.prototype.rotateCanvasLeft = function() {\n\t// Get the current size of the image\n\tvar origWidth = this.currCanvas.width,\n\t\torigHeight = this.currCanvas.height;\n\t// Create and size a new canvas\n\tvar newCanvas = this.document.createElement(\"canvas\"),\n\t\tnewWidth = origHeight,\n\t\tnewHeight = origWidth;\n\tthis.initCanvas(newCanvas,newWidth,newHeight);\n\t// Copy the old image\n\tvar ctx = newCanvas.getContext(\"2d\");\n\tctx.save();\n\tctx.translate(newWidth / 2,newHeight / 2);\n\tctx.rotate(-Math.PI / 2);\n\tctx.drawImage(this.currCanvas,-origWidth / 2,-origHeight / 2);\n\tctx.restore();\n\t// Set the new canvas as the current one\n\tthis.currCanvas = newCanvas;\n\t// Set the size of the onscreen canvas\n\tthis.canvasDomNode.width = newWidth;\n\tthis.canvasDomNode.height = newHeight;\n\t// Paint the onscreen canvas with the offscreen canvas\n\tctx = this.canvasDomNode.getContext(\"2d\");\n\tctx.drawImage(this.currCanvas,0,0);\n};\n\nEditBitmapWidget.prototype.handleTouchStartEvent = function(event) {\n\tthis.brushDown = true;\n\tthis.strokeStart(event.touches[0].clientX,event.touches[0].clientY);\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleTouchMoveEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.strokeMove(event.touches[0].clientX,event.touches[0].clientY);\n\t}\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleTouchEndEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.brushDown = false;\n\t\tthis.strokeEnd();\n\t}\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleMouseDownEvent = function(event) {\n\tthis.strokeStart(event.clientX,event.clientY);\n\tthis.brushDown = true;\n\tevent.preventDefault();\n\tevent.stopPropagation();\n\treturn false;\n};\n\nEditBitmapWidget.prototype.handleMouseMoveEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.strokeMove(event.clientX,event.clientY);\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\treturn false;\n\t}\n\treturn true;\n};\n\nEditBitmapWidget.prototype.handleMouseUpEvent = function(event) {\n\tif(this.brushDown) {\n\t\tthis.brushDown = false;\n\t\tthis.strokeEnd();\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\treturn false;\n\t}\n\treturn true;\n};\n\nEditBitmapWidget.prototype.adjustCoordinates = function(x,y) {\n\tvar canvasRect = this.canvasDomNode.getBoundingClientRect(),\n\t\tscale = this.canvasDomNode.width/canvasRect.width;\n\treturn {x: (x - canvasRect.left) * scale, y: (y - canvasRect.top) * scale};\n};\n\nEditBitmapWidget.prototype.strokeStart = function(x,y) {\n\t// Start off a new stroke\n\tthis.stroke = [this.adjustCoordinates(x,y)];\n};\n\nEditBitmapWidget.prototype.strokeMove = function(x,y) {\n\tvar ctx = this.canvasDomNode.getContext(\"2d\"),\n\t\tt;\n\t// Add the new position to the end of the stroke\n\tthis.stroke.push(this.adjustCoordinates(x,y));\n\t// Redraw the previous image\n\tctx.drawImage(this.currCanvas,0,0);\n\t// Render the stroke\n\tctx.globalAlpha = parseFloat(this.wiki.getTiddlerText(LINE_OPACITY_TITLE,\"1.0\"));\n\tctx.strokeStyle = this.wiki.getTiddlerText(LINE_COLOUR_TITLE,\"#ff0\");\n\tctx.lineWidth = parseFloat(this.wiki.getTiddlerText(LINE_WIDTH_TITLE,\"3\"));\n\tctx.lineCap = \"round\";\n\tctx.lineJoin = \"round\";\n\tctx.beginPath();\n\tctx.moveTo(this.stroke[0].x,this.stroke[0].y);\n\tfor(t=1; t<this.stroke.length-1; t++) {\n\t\tvar s1 = this.stroke[t],\n\t\t\ts2 = this.stroke[t-1],\n\t\t\ttx = (s1.x + s2.x)/2,\n\t\t\tty = (s1.y + s2.y)/2;\n\t\tctx.quadraticCurveTo(s2.x,s2.y,tx,ty);\n\t}\n\tctx.stroke();\n};\n\nEditBitmapWidget.prototype.strokeEnd = function() {\n\t// Copy the bitmap to the off-screen canvas\n\tvar ctx = this.currCanvas.getContext(\"2d\");\n\tctx.drawImage(this.canvasDomNode,0,0);\n\t// Save the image into the tiddler\n\tthis.saveChanges();\n};\n\nEditBitmapWidget.prototype.saveChanges = function() {\n\tvar tiddler = this.wiki.getTiddler(this.editTitle) || new $tw.Tiddler({title: this.editTitle,type: DEFAULT_IMAGE_TYPE});\n\t// data URIs look like \"data:<type>;base64,<text>\"\n\tvar dataURL = this.canvasDomNode.toDataURL(tiddler.fields.type),\n\t\tposColon = dataURL.indexOf(\":\"),\n\t\tposSemiColon = dataURL.indexOf(\";\"),\n\t\tposComma = dataURL.indexOf(\",\"),\n\t\ttype = dataURL.substring(posColon+1,posSemiColon),\n\t\ttext = dataURL.substring(posComma+1);\n\tvar update = {type: type, text: text};\n\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getModificationFields(),tiddler,update,this.wiki.getCreationFields()));\n};\n\nexports[\"edit-bitmap\"] = EditBitmapWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/edit-shortcut.js": {
"title": "$:/core/modules/widgets/edit-shortcut.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/edit-shortcut.js\ntype: application/javascript\nmodule-type: widget\n\nWidget to display an editable keyboard shortcut\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditShortcutWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditShortcutWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditShortcutWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.inputNode = this.document.createElement(\"input\");\n\t// Assign classes\n\tif(this.shortcutClass) {\n\t\tthis.inputNode.className = this.shortcutClass;\t\t\n\t}\n\t// Assign other attributes\n\tif(this.shortcutStyle) {\n\t\tthis.inputNode.setAttribute(\"style\",this.shortcutStyle);\n\t}\n\tif(this.shortcutTooltip) {\n\t\tthis.inputNode.setAttribute(\"title\",this.shortcutTooltip);\n\t}\n\tif(this.shortcutPlaceholder) {\n\t\tthis.inputNode.setAttribute(\"placeholder\",this.shortcutPlaceholder);\n\t}\n\tif(this.shortcutAriaLabel) {\n\t\tthis.inputNode.setAttribute(\"aria-label\",this.shortcutAriaLabel);\n\t}\n\t// Assign the current shortcut\n\tthis.updateInputNode();\n\t// Add event handlers\n\t$tw.utils.addEventListeners(this.inputNode,[\n\t\t{name: \"keydown\", handlerObject: this, handlerMethod: \"handleKeydownEvent\"}\n\t]);\n\t// Link into the DOM\n\tparent.insertBefore(this.inputNode,nextSibling);\n\tthis.domNodes.push(this.inputNode);\n\t// Focus the input Node if focus === \"yes\" or focus === \"true\"\n\tif(this.shortcutFocus === \"yes\" || this.shortcutFocus === \"true\") {\n\t\tthis.focus();\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nEditShortcutWidget.prototype.execute = function() {\n\tthis.shortcutTiddler = this.getAttribute(\"tiddler\");\n\tthis.shortcutField = this.getAttribute(\"field\");\n\tthis.shortcutIndex = this.getAttribute(\"index\");\n\tthis.shortcutPlaceholder = this.getAttribute(\"placeholder\");\n\tthis.shortcutDefault = this.getAttribute(\"default\",\"\");\n\tthis.shortcutClass = this.getAttribute(\"class\");\n\tthis.shortcutStyle = this.getAttribute(\"style\");\n\tthis.shortcutTooltip = this.getAttribute(\"tooltip\");\n\tthis.shortcutAriaLabel = this.getAttribute(\"aria-label\");\n\tthis.shortcutFocus = this.getAttribute(\"focus\");\n};\n\n/*\nUpdate the value of the input node\n*/\nEditShortcutWidget.prototype.updateInputNode = function() {\n\tif(this.shortcutField) {\n\t\tvar tiddler = this.wiki.getTiddler(this.shortcutTiddler);\n\t\tif(tiddler && $tw.utils.hop(tiddler.fields,this.shortcutField)) {\n\t\t\tthis.inputNode.value = tiddler.getFieldString(this.shortcutField);\n\t\t} else {\n\t\t\tthis.inputNode.value = this.shortcutDefault;\n\t\t}\n\t} else if(this.shortcutIndex) {\n\t\tthis.inputNode.value = this.wiki.extractTiddlerDataItem(this.shortcutTiddler,this.shortcutIndex,this.shortcutDefault);\n\t} else {\n\t\tthis.inputNode.value = this.wiki.getTiddlerText(this.shortcutTiddler,this.shortcutDefault);\n\t}\n};\n\n/*\nHandle a dom \"keydown\" event\n*/\nEditShortcutWidget.prototype.handleKeydownEvent = function(event) {\n\t// Ignore shift, ctrl, meta, alt\n\tif(event.keyCode && $tw.keyboardManager.getModifierKeys().indexOf(event.keyCode) === -1) {\n\t\t// Get the shortcut text representation\n\t\tvar value = $tw.keyboardManager.getPrintableShortcuts([{\n\t\t\tctrlKey: event.ctrlKey,\n\t\t\tshiftKey: event.shiftKey,\n\t\t\taltKey: event.altKey,\n\t\t\tmetaKey: event.metaKey,\n\t\t\tkeyCode: event.keyCode\n\t\t}]);\n\t\tif(value.length > 0) {\n\t\t\tthis.wiki.setText(this.shortcutTiddler,this.shortcutField,this.shortcutIndex,value[0]);\n\t\t}\n\t\t// Ignore the keydown if it was already handled\n\t\tevent.preventDefault();\n\t\tevent.stopPropagation();\n\t\treturn true;\t\t\n\t} else {\n\t\treturn false;\n\t}\n};\n\n/*\nfocus the input node\n*/\nEditShortcutWidget.prototype.focus = function() {\n\tif(this.inputNode.focus && this.inputNode.select) {\n\t\tthis.inputNode.focus();\n\t\tthis.inputNode.select();\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget needed re-rendering\n*/\nEditShortcutWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes.placeholder || changedAttributes[\"default\"] || changedAttributes[\"class\"] || changedAttributes.style || changedAttributes.tooltip || changedAttributes[\"aria-label\"] || changedAttributes.focus) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else if(changedTiddlers[this.shortcutTiddler]) {\n\t\tthis.updateInputNode();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports[\"edit-shortcut\"] = EditShortcutWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/edit-text.js": {
"title": "$:/core/modules/widgets/edit-text.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/edit-text.js\ntype: application/javascript\nmodule-type: widget\n\nEdit-text widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar editTextWidgetFactory = require(\"$:/core/modules/editor/factory.js\").editTextWidgetFactory,\n\tFramedEngine = require(\"$:/core/modules/editor/engines/framed.js\").FramedEngine,\n\tSimpleEngine = require(\"$:/core/modules/editor/engines/simple.js\").SimpleEngine;\n\nexports[\"edit-text\"] = editTextWidgetFactory(FramedEngine,SimpleEngine);\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/edit.js": {
"title": "$:/core/modules/widgets/edit.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/edit.js\ntype: application/javascript\nmodule-type: widget\n\nEdit widget is a meta-widget chooses the appropriate actual editting widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EditWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEditWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEditWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n// Mappings from content type to editor type are stored in tiddlers with this prefix\nvar EDITOR_MAPPING_PREFIX = \"$:/config/EditorTypeMappings/\";\n\n/*\nCompute the internal state of the widget\n*/\nEditWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.editTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.editField = this.getAttribute(\"field\",\"text\");\n\tthis.editIndex = this.getAttribute(\"index\");\n\tthis.editClass = this.getAttribute(\"class\");\n\tthis.editPlaceholder = this.getAttribute(\"placeholder\");\n\tthis.editTabIndex = this.getAttribute(\"tabindex\");\n\tthis.editFocus = this.getAttribute(\"focus\",\"\");\n\t// Choose the appropriate edit widget\n\tthis.editorType = this.getEditorType();\n\t// Make the child widgets\n\tthis.makeChildWidgets([{\n\t\ttype: \"edit-\" + this.editorType,\n\t\tattributes: {\n\t\t\ttiddler: {type: \"string\", value: this.editTitle},\n\t\t\tfield: {type: \"string\", value: this.editField},\n\t\t\tindex: {type: \"string\", value: this.editIndex},\n\t\t\t\"class\": {type: \"string\", value: this.editClass},\n\t\t\t\"placeholder\": {type: \"string\", value: this.editPlaceholder},\n\t\t\t\"tabindex\": {type: \"string\", value: this.editTabIndex},\n\t\t\t\"focus\": {type: \"string\", value: this.editFocus}\n\t\t},\n\t\tchildren: this.parseTreeNode.children\n\t}]);\n};\n\nEditWidget.prototype.getEditorType = function() {\n\t// Get the content type of the thing we're editing\n\tvar type;\n\tif(this.editField === \"text\") {\n\t\tvar tiddler = this.wiki.getTiddler(this.editTitle);\n\t\tif(tiddler) {\n\t\t\ttype = tiddler.fields.type;\n\t\t}\n\t}\n\ttype = type || \"text/vnd.tiddlywiki\";\n\tvar editorType = this.wiki.getTiddlerText(EDITOR_MAPPING_PREFIX + type);\n\tif(!editorType) {\n\t\tvar typeInfo = $tw.config.contentTypeInfo[type];\n\t\tif(typeInfo && typeInfo.encoding === \"base64\") {\n\t\t\teditorType = \"binary\";\n\t\t} else {\n\t\t\teditorType = \"text\";\n\t\t}\n\t}\n\treturn editorType;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEditWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\t// Refresh if an attribute has changed, or the type associated with the target tiddler has changed\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes.tabindex || (changedTiddlers[this.editTitle] && this.getEditorType() !== this.editorType)) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.edit = EditWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/element.js": {
"title": "$:/core/modules/widgets/element.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/element.js\ntype: application/javascript\nmodule-type: widget\n\nElement widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ElementWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nElementWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nElementWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Neuter blacklisted elements\n\tvar tag = this.parseTreeNode.tag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"safe-\" + tag;\n\t}\n\t// Adjust headings by the current base level\n\tvar headingLevel = [\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\"].indexOf(tag);\n\tif(headingLevel !== -1) {\n\t\tvar baseLevel = parseInt(this.getVariable(\"tv-adjust-heading-level\",\"0\"),10) || 0;\n\t\theadingLevel = Math.min(Math.max(headingLevel + 1 + baseLevel,1),6);\n\t\ttag = \"h\" + headingLevel;\n\t}\n\t// Create the DOM node\n\tvar domNode = this.document.createElementNS(this.namespace,tag);\n\tthis.assignAttributes(domNode,{excludeEventAttributes: true});\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nElementWidget.prototype.execute = function() {\n\t// Select the namespace for the tag\n\tvar tagNamespaces = {\n\t\t\tsvg: \"http://www.w3.org/2000/svg\",\n\t\t\tmath: \"http://www.w3.org/1998/Math/MathML\",\n\t\t\tbody: \"http://www.w3.org/1999/xhtml\"\n\t\t};\n\tthis.namespace = tagNamespaces[this.parseTreeNode.tag];\n\tif(this.namespace) {\n\t\tthis.setVariable(\"namespace\",this.namespace);\n\t} else {\n\t\tthis.namespace = this.getVariable(\"namespace\",{defaultValue: \"http://www.w3.org/1999/xhtml\"});\n\t}\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nElementWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes(),\n\t\thasChangedAttributes = $tw.utils.count(changedAttributes) > 0;\n\tif(hasChangedAttributes) {\n\t\t// Update our attributes\n\t\tthis.assignAttributes(this.domNodes[0],{excludeEventAttributes: true});\n\t}\n\treturn this.refreshChildren(changedTiddlers) || hasChangedAttributes;\n};\n\nexports.element = ElementWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/encrypt.js": {
"title": "$:/core/modules/widgets/encrypt.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/encrypt.js\ntype: application/javascript\nmodule-type: widget\n\nEncrypt widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EncryptWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEncryptWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEncryptWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar textNode = this.document.createTextNode(this.encryptedText);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nEncryptWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.filter = this.getAttribute(\"filter\",\"[!is[system]]\");\n\t// Encrypt the filtered tiddlers\n\tvar tiddlers = this.wiki.filterTiddlers(this.filter),\n\t\tjson = {},\n\t\tself = this;\n\t$tw.utils.each(tiddlers,function(title) {\n\t\tvar tiddler = self.wiki.getTiddler(title),\n\t\t\tjsonTiddler = {};\n\t\tfor(var f in tiddler.fields) {\n\t\t\tjsonTiddler[f] = tiddler.getFieldString(f);\n\t\t}\n\t\tjson[title] = jsonTiddler;\n\t});\n\tthis.encryptedText = $tw.utils.htmlEncode($tw.crypto.encrypt(JSON.stringify(json)));\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEncryptWidget.prototype.refresh = function(changedTiddlers) {\n\t// We don't need to worry about refreshing because the encrypt widget isn't for interactive use\n\treturn false;\n};\n\nexports.encrypt = EncryptWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/entity.js": {
"title": "$:/core/modules/widgets/entity.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/entity.js\ntype: application/javascript\nmodule-type: widget\n\nHTML entity widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar EntityWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nEntityWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nEntityWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.execute();\n\tvar entityString = this.getAttribute(\"entity\",this.parseTreeNode.entity || \"\"),\n\t\ttextNode = this.document.createTextNode($tw.utils.entityDecode(entityString));\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nEntityWidget.prototype.execute = function() {\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nEntityWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.entity) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports.entity = EntityWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/fieldmangler.js": {
"title": "$:/core/modules/widgets/fieldmangler.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/fieldmangler.js\ntype: application/javascript\nmodule-type: widget\n\nField mangler widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar FieldManglerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.addEventListeners([\n\t\t{type: \"tm-remove-field\", handler: \"handleRemoveFieldEvent\"},\n\t\t{type: \"tm-add-field\", handler: \"handleAddFieldEvent\"},\n\t\t{type: \"tm-remove-tag\", handler: \"handleRemoveTagEvent\"},\n\t\t{type: \"tm-add-tag\", handler: \"handleAddTagEvent\"}\n\t]);\n};\n\n/*\nInherit from the base widget class\n*/\nFieldManglerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nFieldManglerWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nFieldManglerWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.mangleTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nFieldManglerWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nFieldManglerWidget.prototype.handleRemoveFieldEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle),\n\t\tdeletion = {};\n\tdeletion[event.param] = undefined;\n\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,deletion));\n\treturn true;\n};\n\nFieldManglerWidget.prototype.handleAddFieldEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle),\n\t\taddition = this.wiki.getModificationFields(),\n\t\thadInvalidFieldName = false,\n\t\taddField = function(name,value) {\n\t\t\tvar trimmedName = name.toLowerCase().trim();\n\t\t\tif(!$tw.utils.isValidFieldName(trimmedName)) {\n\t\t\t\tif(!hadInvalidFieldName) {\n\t\t\t\t\talert($tw.language.getString(\n\t\t\t\t\t\t\"InvalidFieldName\",\n\t\t\t\t\t\t{variables:\n\t\t\t\t\t\t\t{fieldName: trimmedName}\n\t\t\t\t\t\t}\n\t\t\t\t\t));\n\t\t\t\t\thadInvalidFieldName = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif(!value && tiddler) {\n\t\t\t\t\tvalue = tiddler.fields[trimmedName];\n\t\t\t\t}\n\t\t\t\taddition[trimmedName] = value || \"\";\n\t\t\t}\n\t\t\treturn;\n\t\t};\n\taddition.title = this.mangleTitle;\n\tif(typeof event.param === \"string\") {\n\t\taddField(event.param,\"\");\n\t}\n\tif(typeof event.paramObject === \"object\") {\n\t\tfor(var name in event.paramObject) {\n\t\t\taddField(name,event.paramObject[name]);\n\t\t}\n\t}\n\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,addition));\n\treturn true;\n};\n\nFieldManglerWidget.prototype.handleRemoveTagEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle),\n\t\tmodification = this.wiki.getModificationFields();\n\tif(tiddler && tiddler.fields.tags) {\n\t\tvar p = tiddler.fields.tags.indexOf(event.param);\n\t\tif(p !== -1) {\n\t\t\tmodification.tags = (tiddler.fields.tags || []).slice(0);\n\t\t\tmodification.tags.splice(p,1);\n\t\t\tif(modification.tags.length === 0) {\n\t\t\t\tmodification.tags = undefined;\n\t\t\t}\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,modification));\n\t\t}\n\t}\n\treturn true;\n};\n\nFieldManglerWidget.prototype.handleAddTagEvent = function(event) {\n\tvar tiddler = this.wiki.getTiddler(this.mangleTitle),\n\t\tmodification = this.wiki.getModificationFields();\n\tif(tiddler && typeof event.param === \"string\") {\n\t\tvar tag = event.param.trim();\n\t\tif(tag !== \"\") {\n\t\t\tmodification.tags = (tiddler.fields.tags || []).slice(0);\n\t\t\t$tw.utils.pushTop(modification.tags,tag);\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,modification));\t\t\t\n\t\t}\n\t} else if(typeof event.param === \"string\" && event.param.trim() !== \"\" && this.mangleTitle.trim() !== \"\") {\n\t\tvar tag = [];\n\t\ttag.push(event.param.trim());\n\t\tthis.wiki.addTiddler(new $tw.Tiddler({title: this.mangleTitle, tags: tag},modification));\n\t}\n\treturn true;\n};\n\nexports.fieldmangler = FieldManglerWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/fields.js": {
"title": "$:/core/modules/widgets/fields.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/fields.js\ntype: application/javascript\nmodule-type: widget\n\nFields widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar FieldsWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nFieldsWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nFieldsWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar textNode = this.document.createTextNode(this.text);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nFieldsWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.tiddlerTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.template = this.getAttribute(\"template\");\n\tthis.sort = this.getAttribute(\"sort\",\"yes\") === \"yes\";\n\tthis.sortReverse = this.getAttribute(\"sortReverse\",\"no\") === \"yes\";\n\tthis.exclude = this.getAttribute(\"exclude\");\n\tthis.include = this.getAttribute(\"include\",null);\n\tthis.stripTitlePrefix = this.getAttribute(\"stripTitlePrefix\",\"no\") === \"yes\";\n\t// Get the value to display\n\tvar tiddler = this.wiki.getTiddler(this.tiddlerTitle);\n\n\t// Get the inclusion and exclusion list\n\tvar excludeArr = (this.exclude) ? this.exclude.split(\" \") : [\"text\"];\n\t// Include takes precedence\n\tvar includeArr = (this.include) ? this.include.split(\" \") : null;\n\n\t// Compose the template\n\tvar text = [];\n\tif(this.template && tiddler) {\n\t\tvar fields = [];\n\t\tif (includeArr) { // Include takes precedence\n\t\t\tfor(var i=0; i<includeArr.length; i++) {\n\t\t\t\tif(tiddler.fields[includeArr[i]]) {\n\t\t\t\t\tfields.push(includeArr[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor(var fieldName in tiddler.fields) {\n\t\t\t\tif(excludeArr.indexOf(fieldName) === -1) {\n\t\t\t\t\tfields.push(fieldName);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (this.sort) fields.sort();\n\t\tif (this.sortReverse) fields.reverse();\n\t\tfor(var f=0, fmax=fields.length; f<fmax; f++) {\n\t\t\tfieldName = fields[f];\n\t\t\tvar row = this.template,\n\t\t\t\tvalue = tiddler.getFieldString(fieldName);\n\t\t\tif(this.stripTitlePrefix && fieldName === \"title\") {\n\t\t\t\tvar reStrip = /^\\{[^\\}]+\\}(.+)/mg,\n\t\t\t\t\treMatch = reStrip.exec(value);\n\t\t\t\tif(reMatch) {\n\t\t\t\t\tvalue = reMatch[1];\n\t\t\t\t}\n\t\t\t}\n\t\t\trow = $tw.utils.replaceString(row,\"$name$\",fieldName);\n\t\t\trow = $tw.utils.replaceString(row,\"$value$\",value);\n\t\t\trow = $tw.utils.replaceString(row,\"$encoded_value$\",$tw.utils.htmlEncode(value));\n\t\t\ttext.push(row);\n\t\t}\n\t}\n\tthis.text = text.join(\"\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nFieldsWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif( changedAttributes.tiddler || changedAttributes.template || changedAttributes.exclude ||\n\t\tchangedAttributes.include || changedAttributes.sort || changedAttributes.sortReverse ||\n\t\tchangedTiddlers[this.tiddlerTitle] || changedAttributes.stripTitlePrefix) {\n\t\t\tthis.refreshSelf();\n\t\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n};\n\nexports.fields = FieldsWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/image.js": {
"title": "$:/core/modules/widgets/image.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/image.js\ntype: application/javascript\nmodule-type: widget\n\nThe image widget displays an image referenced with an external URI or with a local tiddler title.\n\n```\n<$image src=\"TiddlerTitle\" width=\"320\" height=\"400\" class=\"classnames\">\n```\n\nThe image source can be the title of an existing tiddler or the URL of an external image.\n\nExternal images always generate an HTML `<img>` tag.\n\nTiddlers that have a _canonical_uri field generate an HTML `<img>` tag with the src attribute containing the URI.\n\nTiddlers that contain image data generate an HTML `<img>` tag with the src attribute containing a base64 representation of the image.\n\nTiddlers that contain wikitext could be rendered to a DIV of the usual size of a tiddler, and then transformed to the size requested.\n\nThe width and height attributes are interpreted as a number of pixels, and do not need to include the \"px\" suffix.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ImageWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nImageWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nImageWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create element\n\t// Determine what type of image it is\n\tvar tag = \"img\", src = \"\",\n\t\ttiddler = this.wiki.getTiddler(this.imageSource);\n\tif(!tiddler) {\n\t\t// The source isn't the title of a tiddler, so we'll assume it's a URL\n\t\tsrc = this.getVariable(\"tv-get-export-image-link\",{params: [{name: \"src\",value: this.imageSource}],defaultValue: this.imageSource});\n\t} else {\n\t\t// Check if it is an image tiddler\n\t\tif(this.wiki.isImageTiddler(this.imageSource)) {\n\t\t\tvar type = tiddler.fields.type,\n\t\t\t\ttext = tiddler.fields.text,\n\t\t\t\t_canonical_uri = tiddler.fields._canonical_uri;\n\t\t\t// If the tiddler has body text then it doesn't need to be lazily loaded\n\t\t\tif(text) {\n\t\t\t\t// Render the appropriate element for the image type\n\t\t\t\tswitch(type) {\n\t\t\t\t\tcase \"application/pdf\":\n\t\t\t\t\t\ttag = \"embed\";\n\t\t\t\t\t\tsrc = \"data:application/pdf;base64,\" + text;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"image/svg+xml\":\n\t\t\t\t\t\tsrc = \"data:image/svg+xml,\" + encodeURIComponent(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tsrc = \"data:\" + type + \";base64,\" + text;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else if(_canonical_uri) {\n\t\t\t\tswitch(type) {\n\t\t\t\t\tcase \"application/pdf\":\n\t\t\t\t\t\ttag = \"embed\";\n\t\t\t\t\t\tsrc = _canonical_uri;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"image/svg+xml\":\n\t\t\t\t\t\tsrc = _canonical_uri;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tsrc = _canonical_uri;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\t\n\t\t\t} else {\n\t\t\t\t// Just trigger loading of the tiddler\n\t\t\t\tthis.wiki.getTiddlerText(this.imageSource);\n\t\t\t}\n\t\t}\n\t}\n\t// Create the element and assign the attributes\n\tvar domNode = this.document.createElement(tag);\n\tdomNode.setAttribute(\"src\",src);\n\tif(this.imageClass) {\n\t\tdomNode.setAttribute(\"class\",this.imageClass);\t\t\n\t}\n\tif(this.imageWidth) {\n\t\tdomNode.setAttribute(\"width\",this.imageWidth);\n\t}\n\tif(this.imageHeight) {\n\t\tdomNode.setAttribute(\"height\",this.imageHeight);\n\t}\n\tif(this.imageTooltip) {\n\t\tdomNode.setAttribute(\"title\",this.imageTooltip);\t\t\n\t}\n\tif(this.imageAlt) {\n\t\tdomNode.setAttribute(\"alt\",this.imageAlt);\t\t\n\t}\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.domNodes.push(domNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nImageWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.imageSource = this.getAttribute(\"source\");\n\tthis.imageWidth = this.getAttribute(\"width\");\n\tthis.imageHeight = this.getAttribute(\"height\");\n\tthis.imageClass = this.getAttribute(\"class\");\n\tthis.imageTooltip = this.getAttribute(\"tooltip\");\n\tthis.imageAlt = this.getAttribute(\"alt\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nImageWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.source || changedAttributes.width || changedAttributes.height || changedAttributes[\"class\"] || changedAttributes.tooltip || changedTiddlers[this.imageSource]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\t\n\t}\n};\n\nexports.image = ImageWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/importvariables.js": {
"title": "$:/core/modules/widgets/importvariables.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/importvariables.js\ntype: application/javascript\nmodule-type: widget\n\nImport variable definitions from other tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ImportVariablesWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nImportVariablesWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nImportVariablesWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nImportVariablesWidget.prototype.execute = function(tiddlerList) {\n\tvar widgetPointer = this;\n\t// Get our parameters\n\tthis.filter = this.getAttribute(\"filter\");\n\t// Compute the filter\n\tthis.tiddlerList = tiddlerList || this.wiki.filterTiddlers(this.filter,this);\n\t// Accumulate the <$set> widgets from each tiddler\n\t$tw.utils.each(this.tiddlerList,function(title) {\n\t\tvar parser = widgetPointer.wiki.parseTiddler(title);\n\t\tif(parser) {\n\t\t\tvar parseTreeNode = parser.tree[0];\n\t\t\twhile(parseTreeNode && parseTreeNode.type === \"set\") {\n\t\t\t\tvar node = {\n\t\t\t\t\ttype: \"set\",\n\t\t\t\t\tattributes: parseTreeNode.attributes,\n\t\t\t\t\tparams: parseTreeNode.params,\n\t\t\t\t\tisMacroDefinition: parseTreeNode.isMacroDefinition\n\t\t\t\t};\n\t\t\t\tif (parseTreeNode.isMacroDefinition) {\n\t\t\t\t\t// Macro definitions can be folded into\n\t\t\t\t\t// current widget instead of adding\n\t\t\t\t\t// another link to the chain.\n\t\t\t\t\tvar widget = widgetPointer.makeChildWidget(node);\n\t\t\t\t\twidget.computeAttributes();\n\t\t\t\t\twidget.execute();\n\t\t\t\t\t// We SHALLOW copy over all variables\n\t\t\t\t\t// in widget. We can't use\n\t\t\t\t\t// $tw.utils.assign, because that copies\n\t\t\t\t\t// up the prototype chain, which we\n\t\t\t\t\t// don't want.\n\t\t\t\t\t$tw.utils.each(Object.keys(widget.variables), function(key) {\n\t\t\t\t\t\twidgetPointer.variables[key] = widget.variables[key];\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\twidgetPointer.makeChildWidgets([node]);\n\t\t\t\t\twidgetPointer = widgetPointer.children[0];\n\t\t\t\t}\n\t\t\t\tparseTreeNode = parseTreeNode.children && parseTreeNode.children[0];\n\t\t\t}\n\t\t} \n\t});\n\n\tif (widgetPointer != this) {\n\t\twidgetPointer.parseTreeNode.children = this.parseTreeNode.children;\n\t} else {\n\t\twidgetPointer.makeChildWidgets();\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nImportVariablesWidget.prototype.refresh = function(changedTiddlers) {\n\t// Recompute our attributes and the filter list\n\tvar changedAttributes = this.computeAttributes(),\n\t\ttiddlerList = this.wiki.filterTiddlers(this.getAttribute(\"filter\"),this);\n\t// Refresh if the filter has changed, or the list of tiddlers has changed, or any of the tiddlers in the list has changed\n\tfunction haveListedTiddlersChanged() {\n\t\tvar changed = false;\n\t\ttiddlerList.forEach(function(title) {\n\t\t\tif(changedTiddlers[title]) {\n\t\t\t\tchanged = true;\n\t\t\t}\n\t\t});\n\t\treturn changed;\n\t}\n\tif(changedAttributes.filter || !$tw.utils.isArrayEqual(this.tiddlerList,tiddlerList) || haveListedTiddlersChanged()) {\n\t\t// Compute the filter\n\t\tthis.removeChildDomNodes();\n\t\tthis.execute(tiddlerList);\n\t\tthis.renderChildren(this.parentDomNode,this.findNextSiblingDomNode());\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.importvariables = ImportVariablesWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/keyboard.js": {
"title": "$:/core/modules/widgets/keyboard.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/keyboard.js\ntype: application/javascript\nmodule-type: widget\n\nKeyboard shortcut widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar KeyboardWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nKeyboardWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nKeyboardWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar tag = this.parseTreeNode.isBlock ? \"div\" : \"span\";\n\tif(this.tag && $tw.config.htmlUnsafeElements.indexOf(this.tag) === -1) {\n\t\ttag = this.tag;\n\t}\n\t// Create element\n\tvar domNode = this.document.createElement(tag);\n\t// Assign classes\n\tvar classes = (this[\"class\"] || \"\").split(\" \");\n\tclasses.push(\"tc-keyboard\");\n\tdomNode.className = classes.join(\" \");\n\t// Add a keyboard event handler\n\tdomNode.addEventListener(\"keydown\",function (event) {\n\t\tif($tw.keyboardManager.checkKeyDescriptors(event,self.keyInfoArray)) {\n\t\t\tself.invokeActions(self,event);\n\t\t\tif(self.actions) {\n\t\t\t\tself.invokeActionString(self.actions,self,event);\n\t\t\t}\n\t\t\tself.dispatchMessage(event);\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},false);\n\t// Insert element\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\nKeyboardWidget.prototype.dispatchMessage = function(event) {\n\tthis.dispatchEvent({type: this.message, param: this.param, tiddlerTitle: this.getVariable(\"currentTiddler\")});\n};\n\n/*\nCompute the internal state of the widget\n*/\nKeyboardWidget.prototype.execute = function() {\n\tvar self = this;\n\t// Get attributes\n\tthis.actions = this.getAttribute(\"actions\",\"\");\n\tthis.message = this.getAttribute(\"message\",\"\");\n\tthis.param = this.getAttribute(\"param\",\"\");\n\tthis.key = this.getAttribute(\"key\",\"\");\n\tthis.tag = this.getAttribute(\"tag\",\"\");\n\tthis.keyInfoArray = $tw.keyboardManager.parseKeyDescriptors(this.key);\n\tthis[\"class\"] = this.getAttribute(\"class\",\"\");\n\tif(this.key.substr(0,2) === \"((\" && this.key.substr(-2,2) === \"))\") {\n\t\tthis.shortcutTiddlers = [];\n\t\tvar name = this.key.substring(2,this.key.length -2);\n\t\t$tw.utils.each($tw.keyboardManager.lookupNames,function(platformDescriptor) {\n\t\t\tself.shortcutTiddlers.push(\"$:/config/\" + platformDescriptor + \"/\" + name);\n\t\t});\n\t}\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nKeyboardWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.message || changedAttributes.param || changedAttributes.key || changedAttributes[\"class\"] || changedAttributes.tag) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\t// Update the keyInfoArray if one of its shortcut-config-tiddlers has changed\n\tif(this.shortcutTiddlers && $tw.utils.hopArray(changedTiddlers,this.shortcutTiddlers)) {\n\t\tthis.keyInfoArray = $tw.keyboardManager.parseKeyDescriptors(this.key);\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.keyboard = KeyboardWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/link.js": {
"title": "$:/core/modules/widgets/link.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/link.js\ntype: application/javascript\nmodule-type: widget\n\nLink widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar LinkWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nLinkWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nLinkWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Get the value of the tv-wikilinks configuration macro\n\tvar wikiLinksMacro = this.getVariable(\"tv-wikilinks\"),\n\t\tuseWikiLinks = wikiLinksMacro ? (wikiLinksMacro.trim() !== \"no\") : true,\n\t\tmissingLinksEnabled = !(this.hideMissingLinks && this.isMissing && !this.isShadow);\n\t// Render the link if required\n\tif(useWikiLinks && missingLinksEnabled) {\n\t\tthis.renderLink(parent,nextSibling);\n\t} else {\n\t\t// Just insert the link text\n\t\tvar domNode = this.document.createElement(\"span\");\n\t\tparent.insertBefore(domNode,nextSibling);\n\t\tthis.renderChildren(domNode,null);\n\t\tthis.domNodes.push(domNode);\n\t}\n};\n\n/*\nRender this widget into the DOM\n*/\nLinkWidget.prototype.renderLink = function(parent,nextSibling) {\n\tvar self = this;\n\t// Sanitise the specified tag\n\tvar tag = this.linkTag;\n\tif($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n\t\ttag = \"a\";\n\t}\n\t// Create our element\n\tvar domNode = this.document.createElement(tag);\n\t// Assign classes\n\tvar classes = [];\n\tif(this.overrideClasses === undefined) {\n\t\tclasses.push(\"tc-tiddlylink\");\n\t\tif(this.isShadow) {\n\t\t\tclasses.push(\"tc-tiddlylink-shadow\");\n\t\t}\n\t\tif(this.isMissing && !this.isShadow) {\n\t\t\tclasses.push(\"tc-tiddlylink-missing\");\n\t\t} else {\n\t\t\tif(!this.isMissing) {\n\t\t\t\tclasses.push(\"tc-tiddlylink-resolves\");\n\t\t\t}\n\t\t}\n\t\tif(this.linkClasses) {\n\t\t\tclasses.push(this.linkClasses);\t\t\t\n\t\t}\n\t} else if(this.overrideClasses !== \"\") {\n\t\tclasses.push(this.overrideClasses)\n\t}\n\tif(classes.length > 0) {\n\t\tdomNode.setAttribute(\"class\",classes.join(\" \"));\n\t}\n\t// Set an href\n\tvar wikilinkTransformFilter = this.getVariable(\"tv-filter-export-link\"),\n\t\twikiLinkText;\n\tif(wikilinkTransformFilter) {\n\t\t// Use the filter to construct the href\n\t\twikiLinkText = this.wiki.filterTiddlers(wikilinkTransformFilter,this,function(iterator) {\n\t\t\titerator(self.wiki.getTiddler(self.to),self.to)\n\t\t})[0];\n\t} else {\n\t\t// Expand the tv-wikilink-template variable to construct the href\n\t\tvar wikiLinkTemplateMacro = this.getVariable(\"tv-wikilink-template\"),\n\t\t\twikiLinkTemplate = wikiLinkTemplateMacro ? wikiLinkTemplateMacro.trim() : \"#$uri_encoded$\";\n\t\twikiLinkText = $tw.utils.replaceString(wikiLinkTemplate,\"$uri_encoded$\",encodeURIComponent(this.to));\n\t\twikiLinkText = $tw.utils.replaceString(wikiLinkText,\"$uri_doubleencoded$\",encodeURIComponent(encodeURIComponent(this.to)));\n\t}\n\t// Override with the value of tv-get-export-link if defined\n\twikiLinkText = this.getVariable(\"tv-get-export-link\",{params: [{name: \"to\",value: this.to}],defaultValue: wikiLinkText});\n\tif(tag === \"a\") {\n\t\tdomNode.setAttribute(\"href\",wikiLinkText);\n\t}\n\t// Set the tabindex\n\tif(this.tabIndex) {\n\t\tdomNode.setAttribute(\"tabindex\",this.tabIndex);\n\t}\n\t// Set the tooltip\n\t// HACK: Performance issues with re-parsing the tooltip prevent us defaulting the tooltip to \"<$transclude field='tooltip'><$transclude field='title'/></$transclude>\"\n\tvar tooltipWikiText = this.tooltip || this.getVariable(\"tv-wikilink-tooltip\");\n\tif(tooltipWikiText) {\n\t\tvar tooltipText = this.wiki.renderText(\"text/plain\",\"text/vnd.tiddlywiki\",tooltipWikiText,{\n\t\t\t\tparseAsInline: true,\n\t\t\t\tvariables: {\n\t\t\t\t\tcurrentTiddler: this.to\n\t\t\t\t},\n\t\t\t\tparentWidget: this\n\t\t\t});\n\t\tdomNode.setAttribute(\"title\",tooltipText);\n\t}\n\tif(this[\"aria-label\"]) {\n\t\tdomNode.setAttribute(\"aria-label\",this[\"aria-label\"]);\n\t}\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"click\", handlerObject: this, handlerMethod: \"handleClickEvent\"},\n\t]);\n\t// Make the link draggable if required\n\tif(this.draggable === \"yes\") {\n\t\t$tw.utils.makeDraggable({\n\t\t\tdomNode: domNode,\n\t\t\tdragTiddlerFn: function() {return self.to;},\n\t\t\twidget: this\n\t\t});\n\t}\n\t// Insert the link into the DOM and render any children\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\nLinkWidget.prototype.handleClickEvent = function(event) {\n\t// Send the click on its way as a navigate event\n\tvar bounds = this.domNodes[0].getBoundingClientRect();\n\tthis.dispatchEvent({\n\t\ttype: \"tm-navigate\",\n\t\tnavigateTo: this.to,\n\t\tnavigateFromTitle: this.getVariable(\"storyTiddler\"),\n\t\tnavigateFromNode: this,\n\t\tnavigateFromClientRect: { top: bounds.top, left: bounds.left, width: bounds.width, right: bounds.right, bottom: bounds.bottom, height: bounds.height\n\t\t},\n\t\tnavigateSuppressNavigation: event.metaKey || event.ctrlKey || (event.button === 1),\n\t\tmetaKey: event.metaKey,\n\t\tctrlKey: event.ctrlKey,\n\t\taltKey: event.altKey,\n\t\tshiftKey: event.shiftKey\n\t});\n\tif(this.domNodes[0].hasAttribute(\"href\")) {\n\t\tevent.preventDefault();\n\t}\n\tevent.stopPropagation();\n\treturn false;\n};\n\n/*\nCompute the internal state of the widget\n*/\nLinkWidget.prototype.execute = function() {\n\t// Pick up our attributes\n\tthis.to = this.getAttribute(\"to\",this.getVariable(\"currentTiddler\"));\n\tthis.tooltip = this.getAttribute(\"tooltip\");\n\tthis[\"aria-label\"] = this.getAttribute(\"aria-label\");\n\tthis.linkClasses = this.getAttribute(\"class\");\n\tthis.overrideClasses = this.getAttribute(\"overrideClass\");\n\tthis.tabIndex = this.getAttribute(\"tabindex\");\n\tthis.draggable = this.getAttribute(\"draggable\",\"yes\");\n\tthis.linkTag = this.getAttribute(\"tag\",\"a\");\n\t// Determine the link characteristics\n\tthis.isMissing = !this.wiki.tiddlerExists(this.to);\n\tthis.isShadow = this.wiki.isShadowTiddler(this.to);\n\tthis.hideMissingLinks = (this.getVariable(\"tv-show-missing-links\") || \"yes\") === \"no\";\n\t// Make the child widgets\n\tvar templateTree;\n\tif(this.parseTreeNode.children && this.parseTreeNode.children.length > 0) {\n\t\ttemplateTree = this.parseTreeNode.children;\n\t} else {\n\t\t// Default template is a link to the title\n\t\ttemplateTree = [{type: \"text\", text: this.to}];\n\t}\n\tthis.makeChildWidgets(templateTree);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nLinkWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.to || changedTiddlers[this.to] || changedAttributes[\"aria-label\"] || changedAttributes.tooltip) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.link = LinkWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/linkcatcher.js": {
"title": "$:/core/modules/widgets/linkcatcher.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/linkcatcher.js\ntype: application/javascript\nmodule-type: widget\n\nLinkcatcher widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar LinkCatcherWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.addEventListeners([\n\t\t{type: \"tm-navigate\", handler: \"handleNavigateEvent\"}\n\t]);\n};\n\n/*\nInherit from the base widget class\n*/\nLinkCatcherWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nLinkCatcherWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nLinkCatcherWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.catchTo = this.getAttribute(\"to\");\n\tthis.catchMessage = this.getAttribute(\"message\");\n\tthis.catchSet = this.getAttribute(\"set\");\n\tthis.catchSetTo = this.getAttribute(\"setTo\");\n\tthis.catchActions = this.getAttribute(\"actions\");\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n\t// When executing actions we avoid trapping navigate events, so that we don't trigger ourselves recursively\n\tthis.executingActions = false;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nLinkCatcherWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.to || changedAttributes.message || changedAttributes.set || changedAttributes.setTo) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\n/*\nHandle a tm-navigate event\n*/\nLinkCatcherWidget.prototype.handleNavigateEvent = function(event) {\n\tif(!this.executingActions) {\n\t\t// Execute the actions\n\t\tif(this.catchTo) {\n\t\t\tthis.wiki.setTextReference(this.catchTo,event.navigateTo,this.getVariable(\"currentTiddler\"));\n\t\t}\n\t\tif(this.catchMessage && this.parentWidget) {\n\t\t\tthis.parentWidget.dispatchEvent({\n\t\t\t\ttype: this.catchMessage,\n\t\t\t\tparam: event.navigateTo,\n\t\t\t\tnavigateTo: event.navigateTo\n\t\t\t});\n\t\t}\n\t\tif(this.catchSet) {\n\t\t\tvar tiddler = this.wiki.getTiddler(this.catchSet);\n\t\t\tthis.wiki.addTiddler(new $tw.Tiddler(tiddler,{title: this.catchSet, text: this.catchSetTo}));\n\t\t}\n\t\tif(this.catchActions) {\n\t\t\tthis.executingActions = true;\n\t\t\tthis.invokeActionString(this.catchActions,this,event,{navigateTo: event.navigateTo});\n\t\t\tthis.executingActions = false;\n\t\t}\n\t} else {\n\t\t// This is a navigate event generated by the actions of this linkcatcher, so we don't trap it again, but just pass it to the parent\n\t\tthis.parentWidget.dispatchEvent({\n\t\t\ttype: \"tm-navigate\",\n\t\t\tparam: event.navigateTo,\n\t\t\tnavigateTo: event.navigateTo\n\t\t});\n\t}\n\treturn false;\n};\n\nexports.linkcatcher = LinkCatcherWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/list.js": {
"title": "$:/core/modules/widgets/list.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/list.js\ntype: application/javascript\nmodule-type: widget\n\nList and list item widgets\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\n/*\nThe list widget creates list element sub-widgets that reach back into the list widget for their configuration\n*/\n\nvar ListWidget = function(parseTreeNode,options) {\n\t// Initialise the storyviews if they've not been done already\n\tif(!this.storyViews) {\n\t\tListWidget.prototype.storyViews = {};\n\t\t$tw.modules.applyMethods(\"storyview\",this.storyViews);\n\t}\n\t// Main initialisation inherited from widget.js\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nListWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nListWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n\t// Construct the storyview\n\tvar StoryView = this.storyViews[this.storyViewName];\n\tif(this.storyViewName && !StoryView) {\n\t\tStoryView = this.storyViews[\"classic\"];\n\t}\n\tif(StoryView && !this.document.isTiddlyWikiFakeDom) {\n\t\tthis.storyview = new StoryView(this);\n\t} else {\n\t\tthis.storyview = null;\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nListWidget.prototype.execute = function() {\n\t// Get our attributes\n\tthis.template = this.getAttribute(\"template\");\n\tthis.editTemplate = this.getAttribute(\"editTemplate\");\n\tthis.variableName = this.getAttribute(\"variable\",\"currentTiddler\");\n\tthis.storyViewName = this.getAttribute(\"storyview\");\n\tthis.historyTitle = this.getAttribute(\"history\");\n\t// Compose the list elements\n\tthis.list = this.getTiddlerList();\n\tvar members = [],\n\t\tself = this;\n\t// Check for an empty list\n\tif(this.list.length === 0) {\n\t\tmembers = this.getEmptyMessage();\n\t} else {\n\t\t$tw.utils.each(this.list,function(title,index) {\n\t\t\tmembers.push(self.makeItemTemplate(title));\n\t\t});\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets(members);\n\t// Clear the last history\n\tthis.history = [];\n};\n\nListWidget.prototype.getTiddlerList = function() {\n\tvar defaultFilter = \"[!is[system]sort[title]]\";\n\treturn this.wiki.filterTiddlers(this.getAttribute(\"filter\",defaultFilter),this);\n};\n\nListWidget.prototype.getEmptyMessage = function() {\n\tvar emptyMessage = this.getAttribute(\"emptyMessage\",\"\"),\n\t\tparser = this.wiki.parseText(\"text/vnd.tiddlywiki\",emptyMessage,{parseAsInline: true});\n\tif(parser) {\n\t\treturn parser.tree;\n\t} else {\n\t\treturn [];\n\t}\n};\n\n/*\nCompose the template for a list item\n*/\nListWidget.prototype.makeItemTemplate = function(title) {\n\t// Check if the tiddler is a draft\n\tvar tiddler = this.wiki.getTiddler(title),\n\t\tisDraft = tiddler && tiddler.hasField(\"draft.of\"),\n\t\ttemplate = this.template,\n\t\ttemplateTree;\n\tif(isDraft && this.editTemplate) {\n\t\ttemplate = this.editTemplate;\n\t}\n\t// Compose the transclusion of the template\n\tif(template) {\n\t\ttemplateTree = [{type: \"transclude\", attributes: {tiddler: {type: \"string\", value: template}}}];\n\t} else {\n\t\tif(this.parseTreeNode.children && this.parseTreeNode.children.length > 0) {\n\t\t\ttemplateTree = this.parseTreeNode.children;\n\t\t} else {\n\t\t\t// Default template is a link to the title\n\t\t\ttemplateTree = [{type: \"element\", tag: this.parseTreeNode.isBlock ? \"div\" : \"span\", children: [{type: \"link\", attributes: {to: {type: \"string\", value: title}}, children: [\n\t\t\t\t\t{type: \"text\", text: title}\n\t\t\t]}]}];\n\t\t}\n\t}\n\t// Return the list item\n\treturn {type: \"listitem\", itemTitle: title, variableName: this.variableName, children: templateTree};\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nListWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes(),\n\t\tresult;\n\t// Call the storyview\n\tif(this.storyview && this.storyview.refreshStart) {\n\t\tthis.storyview.refreshStart(changedTiddlers,changedAttributes);\n\t}\n\t// Completely refresh if any of our attributes have changed\n\tif(changedAttributes.filter || changedAttributes.template || changedAttributes.editTemplate || changedAttributes.emptyMessage || changedAttributes.storyview || changedAttributes.history) {\n\t\tthis.refreshSelf();\n\t\tresult = true;\n\t} else {\n\t\t// Handle any changes to the list\n\t\tresult = this.handleListChanges(changedTiddlers);\n\t\t// Handle any changes to the history stack\n\t\tif(this.historyTitle && changedTiddlers[this.historyTitle]) {\n\t\t\tthis.handleHistoryChanges();\n\t\t}\n\t}\n\t// Call the storyview\n\tif(this.storyview && this.storyview.refreshEnd) {\n\t\tthis.storyview.refreshEnd(changedTiddlers,changedAttributes);\n\t}\n\treturn result;\n};\n\n/*\nHandle any changes to the history list\n*/\nListWidget.prototype.handleHistoryChanges = function() {\n\t// Get the history data\n\tvar newHistory = this.wiki.getTiddlerDataCached(this.historyTitle,[]);\n\t// Ignore any entries of the history that match the previous history\n\tvar entry = 0;\n\twhile(entry < newHistory.length && entry < this.history.length && newHistory[entry].title === this.history[entry].title) {\n\t\tentry++;\n\t}\n\t// Navigate forwards to each of the new tiddlers\n\twhile(entry < newHistory.length) {\n\t\tif(this.storyview && this.storyview.navigateTo) {\n\t\t\tthis.storyview.navigateTo(newHistory[entry]);\n\t\t}\n\t\tentry++;\n\t}\n\t// Update the history\n\tthis.history = newHistory;\n};\n\n/*\nProcess any changes to the list\n*/\nListWidget.prototype.handleListChanges = function(changedTiddlers) {\n\t// Get the new list\n\tvar prevList = this.list;\n\tthis.list = this.getTiddlerList();\n\t// Check for an empty list\n\tif(this.list.length === 0) {\n\t\t// Check if it was empty before\n\t\tif(prevList.length === 0) {\n\t\t\t// If so, just refresh the empty message\n\t\t\treturn this.refreshChildren(changedTiddlers);\n\t\t} else {\n\t\t\t// Replace the previous content with the empty message\n\t\t\tfor(t=this.children.length-1; t>=0; t--) {\n\t\t\t\tthis.removeListItem(t);\n\t\t\t}\n\t\t\tvar nextSibling = this.findNextSiblingDomNode();\n\t\t\tthis.makeChildWidgets(this.getEmptyMessage());\n\t\t\tthis.renderChildren(this.parentDomNode,nextSibling);\n\t\t\treturn true;\n\t\t}\n\t} else {\n\t\t// If the list was empty then we need to remove the empty message\n\t\tif(prevList.length === 0) {\n\t\t\tthis.removeChildDomNodes();\n\t\t\tthis.children = [];\n\t\t}\n\t\t// Cycle through the list, inserting and removing list items as needed\n\t\tvar hasRefreshed = false;\n\t\tfor(var t=0; t<this.list.length; t++) {\n\t\t\tvar index = this.findListItem(t,this.list[t]);\n\t\t\tif(index === undefined) {\n\t\t\t\t// The list item must be inserted\n\t\t\t\tthis.insertListItem(t,this.list[t]);\n\t\t\t\thasRefreshed = true;\n\t\t\t} else {\n\t\t\t\t// There are intervening list items that must be removed\n\t\t\t\tfor(var n=index-1; n>=t; n--) {\n\t\t\t\t\tthis.removeListItem(n);\n\t\t\t\t\thasRefreshed = true;\n\t\t\t\t}\n\t\t\t\t// Refresh the item we're reusing\n\t\t\t\tvar refreshed = this.children[t].refresh(changedTiddlers);\n\t\t\t\thasRefreshed = hasRefreshed || refreshed;\n\t\t\t}\n\t\t}\n\t\t// Remove any left over items\n\t\tfor(t=this.children.length-1; t>=this.list.length; t--) {\n\t\t\tthis.removeListItem(t);\n\t\t\thasRefreshed = true;\n\t\t}\n\t\treturn hasRefreshed;\n\t}\n};\n\n/*\nFind the list item with a given title, starting from a specified position\n*/\nListWidget.prototype.findListItem = function(startIndex,title) {\n\twhile(startIndex < this.children.length) {\n\t\tif(this.children[startIndex].parseTreeNode.itemTitle === title) {\n\t\t\treturn startIndex;\n\t\t}\n\t\tstartIndex++;\n\t}\n\treturn undefined;\n};\n\n/*\nInsert a new list item at the specified index\n*/\nListWidget.prototype.insertListItem = function(index,title) {\n\t// Create, insert and render the new child widgets\n\tvar widget = this.makeChildWidget(this.makeItemTemplate(title));\n\twidget.parentDomNode = this.parentDomNode; // Hack to enable findNextSiblingDomNode() to work\n\tthis.children.splice(index,0,widget);\n\tvar nextSibling = widget.findNextSiblingDomNode();\n\twidget.render(this.parentDomNode,nextSibling);\n\t// Animate the insertion if required\n\tif(this.storyview && this.storyview.insert) {\n\t\tthis.storyview.insert(widget);\n\t}\n\treturn true;\n};\n\n/*\nRemove the specified list item\n*/\nListWidget.prototype.removeListItem = function(index) {\n\tvar widget = this.children[index];\n\t// Animate the removal if required\n\tif(this.storyview && this.storyview.remove) {\n\t\tthis.storyview.remove(widget);\n\t} else {\n\t\twidget.removeChildDomNodes();\n\t}\n\t// Remove the child widget\n\tthis.children.splice(index,1);\n};\n\nexports.list = ListWidget;\n\nvar ListItemWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nListItemWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nListItemWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nListItemWidget.prototype.execute = function() {\n\t// Set the current list item title\n\tthis.setVariable(this.parseTreeNode.variableName,this.parseTreeNode.itemTitle);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nListItemWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.listitem = ListItemWidget;\n\n})();",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/macrocall.js": {
"title": "$:/core/modules/widgets/macrocall.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/macrocall.js\ntype: application/javascript\nmodule-type: widget\n\nMacrocall widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar MacroCallWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nMacroCallWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nMacroCallWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nMacroCallWidget.prototype.execute = function() {\n\t// Get the parse type if specified\n\tthis.parseType = this.getAttribute(\"$type\",\"text/vnd.tiddlywiki\");\n\tthis.renderOutput = this.getAttribute(\"$output\",\"text/html\");\n\t// Merge together the parameters specified in the parse tree with the specified attributes\n\tvar params = this.parseTreeNode.params ? this.parseTreeNode.params.slice(0) : [];\n\t$tw.utils.each(this.attributes,function(attribute,name) {\n\t\tif(name.charAt(0) !== \"$\") {\n\t\t\tparams.push({name: name, value: attribute});\t\t\t\n\t\t}\n\t});\n\t// Get the macro value\n\tvar macroName = this.parseTreeNode.name || this.getAttribute(\"$name\"),\n\t\tvariableInfo = this.getVariableInfo(macroName,{params: params}),\n\t\ttext = variableInfo.text,\n\t\tparseTreeNodes;\n\t// Are we rendering to HTML?\n\tif(this.renderOutput === \"text/html\") {\n\t\t// If so we'll return the parsed macro\n\t\tvar parser = this.wiki.parseText(this.parseType,text,\n\t\t\t\t\t\t\t{parseAsInline: !this.parseTreeNode.isBlock});\n\t\tparseTreeNodes = parser ? parser.tree : [];\n\t\t// Wrap the parse tree in a vars widget assigning the parameters to variables named \"__paramname__\"\n\t\tvar attributes = {};\n\t\t$tw.utils.each(variableInfo.params,function(param) {\n\t\t\tvar name = \"__\" + param.name + \"__\";\n\t\t\tattributes[name] = {\n\t\t\t\tname: name,\n\t\t\t\ttype: \"string\",\n\t\t\t\tvalue: param.value\n\t\t\t};\n\t\t});\n\t\tparseTreeNodes = [{\n\t\t\ttype: \"vars\",\n\t\t\tattributes: attributes,\n\t\t\tchildren: parseTreeNodes\n\t\t}];\n\t} else {\n\t\t// Otherwise, we'll render the text\n\t\tvar plainText = this.wiki.renderText(\"text/plain\",this.parseType,text,{parentWidget: this});\n\t\tparseTreeNodes = [{type: \"text\", text: plainText}];\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets(parseTreeNodes);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nMacroCallWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif($tw.utils.count(changedAttributes) > 0) {\n\t\t// Rerender ourselves\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.macrocall = MacroCallWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/navigator.js": {
"title": "$:/core/modules/widgets/navigator.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/navigator.js\ntype: application/javascript\nmodule-type: widget\n\nNavigator widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar IMPORT_TITLE = \"$:/Import\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar NavigatorWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.addEventListeners([\n\t\t{type: \"tm-navigate\", handler: \"handleNavigateEvent\"},\n\t\t{type: \"tm-edit-tiddler\", handler: \"handleEditTiddlerEvent\"},\n\t\t{type: \"tm-delete-tiddler\", handler: \"handleDeleteTiddlerEvent\"},\n\t\t{type: \"tm-save-tiddler\", handler: \"handleSaveTiddlerEvent\"},\n\t\t{type: \"tm-cancel-tiddler\", handler: \"handleCancelTiddlerEvent\"},\n\t\t{type: \"tm-close-tiddler\", handler: \"handleCloseTiddlerEvent\"},\n\t\t{type: \"tm-close-all-tiddlers\", handler: \"handleCloseAllTiddlersEvent\"},\n\t\t{type: \"tm-close-other-tiddlers\", handler: \"handleCloseOtherTiddlersEvent\"},\n\t\t{type: \"tm-new-tiddler\", handler: \"handleNewTiddlerEvent\"},\n\t\t{type: \"tm-import-tiddlers\", handler: \"handleImportTiddlersEvent\"},\n\t\t{type: \"tm-perform-import\", handler: \"handlePerformImportEvent\"},\n\t\t{type: \"tm-fold-tiddler\", handler: \"handleFoldTiddlerEvent\"},\n\t\t{type: \"tm-fold-other-tiddlers\", handler: \"handleFoldOtherTiddlersEvent\"},\n\t\t{type: \"tm-fold-all-tiddlers\", handler: \"handleFoldAllTiddlersEvent\"},\n\t\t{type: \"tm-unfold-all-tiddlers\", handler: \"handleUnfoldAllTiddlersEvent\"},\n\t\t{type: \"tm-rename-tiddler\", handler: \"handleRenameTiddlerEvent\"}\n\t]);\n};\n\n/*\nInherit from the base widget class\n*/\nNavigatorWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nNavigatorWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nNavigatorWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.storyTitle = this.getAttribute(\"story\");\n\tthis.historyTitle = this.getAttribute(\"history\");\n\tthis.setVariable(\"tv-story-list\",this.storyTitle);\n\tthis.setVariable(\"tv-history-list\",this.historyTitle);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nNavigatorWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.story || changedAttributes.history) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nNavigatorWidget.prototype.getStoryList = function() {\n\treturn this.storyTitle ? this.wiki.getTiddlerList(this.storyTitle) : null;\n};\n\nNavigatorWidget.prototype.saveStoryList = function(storyList) {\n\tif(this.storyTitle) {\n\t\tvar storyTiddler = this.wiki.getTiddler(this.storyTitle);\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(\n\t\t\t{title: this.storyTitle},\n\t\t\tstoryTiddler,\n\t\t\t{list: storyList}\n\t\t));\t\t\n\t}\n};\n\nNavigatorWidget.prototype.removeTitleFromStory = function(storyList,title) {\n\tif(storyList) {\n\t\tvar p = storyList.indexOf(title);\n\t\twhile(p !== -1) {\n\t\t\tstoryList.splice(p,1);\n\t\t\tp = storyList.indexOf(title);\n\t\t}\t\t\n\t}\n};\n\nNavigatorWidget.prototype.replaceFirstTitleInStory = function(storyList,oldTitle,newTitle) {\n\tif(storyList) {\n\t\tvar pos = storyList.indexOf(oldTitle);\n\t\tif(pos !== -1) {\n\t\t\tstoryList[pos] = newTitle;\n\t\t\tdo {\n\t\t\t\tpos = storyList.indexOf(oldTitle,pos + 1);\n\t\t\t\tif(pos !== -1) {\n\t\t\t\t\tstoryList.splice(pos,1);\n\t\t\t\t}\n\t\t\t} while(pos !== -1);\n\t\t} else {\n\t\t\tstoryList.splice(0,0,newTitle);\n\t\t}\t\t\n\t}\n};\n\nNavigatorWidget.prototype.addToStory = function(title,fromTitle) {\n\tif(this.storyTitle) {\n\t\tthis.wiki.addToStory(title,fromTitle,this.storyTitle,{\n\t\t\topenLinkFromInsideRiver: this.getAttribute(\"openLinkFromInsideRiver\",\"top\"),\n\t\t\topenLinkFromOutsideRiver: this.getAttribute(\"openLinkFromOutsideRiver\",\"top\")\n\t\t});\n\t}\n};\n\n/*\nAdd a new record to the top of the history stack\ntitle: a title string or an array of title strings\nfromPageRect: page coordinates of the origin of the navigation\n*/\nNavigatorWidget.prototype.addToHistory = function(title,fromPageRect) {\n\tthis.wiki.addToHistory(title,fromPageRect,this.historyTitle);\n};\n\n/*\nHandle a tm-navigate event\n*/\nNavigatorWidget.prototype.handleNavigateEvent = function(event) {\n\tevent = $tw.hooks.invokeHook(\"th-navigating\",event);\n\tif(event.navigateTo) {\n\t\tthis.addToStory(event.navigateTo,event.navigateFromTitle);\n\t\tif(!event.navigateSuppressNavigation) {\n\t\t\tthis.addToHistory(event.navigateTo,event.navigateFromClientRect);\n\t\t}\n\t}\n\treturn false;\n};\n\n// Close a specified tiddler\nNavigatorWidget.prototype.handleCloseTiddlerEvent = function(event) {\n\tvar title = event.param || event.tiddlerTitle,\n\t\tstoryList = this.getStoryList();\n\t// Look for tiddlers with this title to close\n\tthis.removeTitleFromStory(storyList,title);\n\tthis.saveStoryList(storyList);\n\treturn false;\n};\n\n// Close all tiddlers\nNavigatorWidget.prototype.handleCloseAllTiddlersEvent = function(event) {\n\tthis.saveStoryList([]);\n\treturn false;\n};\n\n// Close other tiddlers\nNavigatorWidget.prototype.handleCloseOtherTiddlersEvent = function(event) {\n\tvar title = event.param || event.tiddlerTitle;\n\tthis.saveStoryList([title]);\n\treturn false;\n};\n\n// Place a tiddler in edit mode\nNavigatorWidget.prototype.handleEditTiddlerEvent = function(event) {\n\tvar editTiddler = $tw.hooks.invokeHook(\"th-editing-tiddler\",event);\n\tif(!editTiddler) {\n\t\treturn false;\n\t}\n\tvar self = this;\n\tfunction isUnmodifiedShadow(title) {\n\t\treturn self.wiki.isShadowTiddler(title) && !self.wiki.tiddlerExists(title);\n\t}\n\tfunction confirmEditShadow(title) {\n\t\treturn confirm($tw.language.getString(\n\t\t\t\"ConfirmEditShadowTiddler\",\n\t\t\t{variables:\n\t\t\t\t{title: title}\n\t\t\t}\n\t\t));\n\t}\n\tvar title = event.param || event.tiddlerTitle;\n\tif(isUnmodifiedShadow(title) && !confirmEditShadow(title)) {\n\t\treturn false;\n\t}\n\t// Replace the specified tiddler with a draft in edit mode\n\tvar draftTiddler = this.makeDraftTiddler(title);\n\t// Update the story and history if required\n\tif(!event.paramObject || event.paramObject.suppressNavigation !== \"yes\") {\n\t\tvar draftTitle = draftTiddler.fields.title,\n\t\t\tstoryList = this.getStoryList();\n\t\tthis.removeTitleFromStory(storyList,draftTitle);\n\t\tthis.replaceFirstTitleInStory(storyList,title,draftTitle);\n\t\tthis.addToHistory(draftTitle,event.navigateFromClientRect);\n\t\tthis.saveStoryList(storyList);\n\t\treturn false;\n\t}\n};\n\n// Delete a tiddler\nNavigatorWidget.prototype.handleDeleteTiddlerEvent = function(event) {\n\t// Get the tiddler we're deleting\n\tvar title = event.param || event.tiddlerTitle,\n\t\ttiddler = this.wiki.getTiddler(title),\n\t\tstoryList = this.getStoryList(),\n\t\toriginalTitle = tiddler ? tiddler.fields[\"draft.of\"] : \"\",\n\t\toriginalTiddler = originalTitle ? this.wiki.getTiddler(originalTitle) : undefined,\n\t\tconfirmationTitle;\n\tif(!tiddler) {\n\t\treturn false;\n\t}\n\t// Check if the tiddler we're deleting is in draft mode\n\tif(originalTitle) {\n\t\t// If so, we'll prompt for confirmation referencing the original tiddler\n\t\tconfirmationTitle = originalTitle;\n\t} else {\n\t\t// If not a draft, then prompt for confirmation referencing the specified tiddler\n\t\tconfirmationTitle = title;\n\t}\n\t// Seek confirmation\n\tif((this.wiki.getTiddler(originalTitle) || (tiddler.fields.text || \"\") !== \"\") && !confirm($tw.language.getString(\n\t\t\t\t\"ConfirmDeleteTiddler\",\n\t\t\t\t{variables:\n\t\t\t\t\t{title: confirmationTitle}\n\t\t\t\t}\n\t\t\t))) {\n\t\treturn false;\n\t}\n\t// Delete the original tiddler\n\tif(originalTitle) {\n\t\tif(originalTiddler) {\n\t\t\t$tw.hooks.invokeHook(\"th-deleting-tiddler\",originalTiddler);\n\t\t}\n\t\tthis.wiki.deleteTiddler(originalTitle);\n\t\tthis.removeTitleFromStory(storyList,originalTitle);\n\t}\n\t// Invoke the hook function and delete this tiddler\n\t$tw.hooks.invokeHook(\"th-deleting-tiddler\",tiddler);\n\tthis.wiki.deleteTiddler(title);\n\t// Remove the closed tiddler from the story\n\tthis.removeTitleFromStory(storyList,title);\n\tthis.saveStoryList(storyList);\n\t// Trigger an autosave\n\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n\treturn false;\n};\n\n/*\nCreate/reuse the draft tiddler for a given title\n*/\nNavigatorWidget.prototype.makeDraftTiddler = function(targetTitle) {\n\t// See if there is already a draft tiddler for this tiddler\n\tvar draftTitle = this.wiki.findDraft(targetTitle);\n\tif(draftTitle) {\n\t\treturn this.wiki.getTiddler(draftTitle);\n\t}\n\t// Get the current value of the tiddler we're editing\n\tvar tiddler = this.wiki.getTiddler(targetTitle);\n\t// Save the initial value of the draft tiddler\n\tdraftTitle = this.generateDraftTitle(targetTitle);\n\tvar draftTiddler = new $tw.Tiddler(\n\t\t\ttiddler,\n\t\t\t{\n\t\t\t\ttitle: draftTitle,\n\t\t\t\t\"draft.title\": targetTitle,\n\t\t\t\t\"draft.of\": targetTitle\n\t\t\t},\n\t\t\tthis.wiki.getModificationFields()\n\t\t);\n\tthis.wiki.addTiddler(draftTiddler);\n\treturn draftTiddler;\n};\n\n/*\nGenerate a title for the draft of a given tiddler\n*/\nNavigatorWidget.prototype.generateDraftTitle = function(title) {\n\treturn this.wiki.generateDraftTitle(title);\n};\n\n// Take a tiddler out of edit mode, saving the changes\nNavigatorWidget.prototype.handleSaveTiddlerEvent = function(event) {\n\tvar title = event.param || event.tiddlerTitle,\n\t\ttiddler = this.wiki.getTiddler(title),\n\t\tstoryList = this.getStoryList();\n\t// Replace the original tiddler with the draft\n\tif(tiddler) {\n\t\tvar draftTitle = (tiddler.fields[\"draft.title\"] || \"\").trim(),\n\t\t\tdraftOf = (tiddler.fields[\"draft.of\"] || \"\").trim();\n\t\tif(draftTitle) {\n\t\t\tvar isRename = draftOf !== draftTitle,\n\t\t\t\tisConfirmed = true;\n\t\t\tif(isRename && this.wiki.tiddlerExists(draftTitle)) {\n\t\t\t\tisConfirmed = confirm($tw.language.getString(\n\t\t\t\t\t\"ConfirmOverwriteTiddler\",\n\t\t\t\t\t{variables:\n\t\t\t\t\t\t{title: draftTitle}\n\t\t\t\t\t}\n\t\t\t\t));\n\t\t\t}\n\t\t\tif(isConfirmed) {\n\t\t\t\t// Create the new tiddler and pass it through the th-saving-tiddler hook\n\t\t\t\tvar newTiddler = new $tw.Tiddler(this.wiki.getCreationFields(),tiddler,{\n\t\t\t\t\ttitle: draftTitle,\n\t\t\t\t\t\"draft.title\": undefined,\n\t\t\t\t\t\"draft.of\": undefined\n\t\t\t\t},this.wiki.getModificationFields());\n\t\t\t\tnewTiddler = $tw.hooks.invokeHook(\"th-saving-tiddler\",newTiddler);\n\t\t\t\tthis.wiki.addTiddler(newTiddler);\n\t\t\t\t// If enabled, relink references to renamed tiddler\n\t\t\t\tvar shouldRelink = this.getAttribute(\"relinkOnRename\",\"no\").toLowerCase().trim() === \"yes\";\n\t\t\t\tif(isRename && shouldRelink && this.wiki.tiddlerExists(draftOf)) {\nconsole.log(\"Relinking '\" + draftOf + \"' to '\" + draftTitle + \"'\");\n\t\t\t\t\tthis.wiki.relinkTiddler(draftOf,draftTitle);\n\t\t\t\t}\n\t\t\t\t// Remove the draft tiddler\n\t\t\t\tthis.wiki.deleteTiddler(title);\n\t\t\t\t// Remove the original tiddler if we're renaming it\n\t\t\t\tif(isRename) {\n\t\t\t\t\tthis.wiki.deleteTiddler(draftOf);\n\t\t\t\t}\n\t\t\t\t// #2381 always remove new title & old\n\t\t\t\tthis.removeTitleFromStory(storyList,draftTitle);\n\t\t\t\tthis.removeTitleFromStory(storyList,draftOf);\n\t\t\t\tif(!event.paramObject || event.paramObject.suppressNavigation !== \"yes\") {\n\t\t\t\t\t// Replace the draft in the story with the original\n\t\t\t\t\tthis.replaceFirstTitleInStory(storyList,title,draftTitle);\n\t\t\t\t\tthis.addToHistory(draftTitle,event.navigateFromClientRect);\n\t\t\t\t\tif(draftTitle !== this.storyTitle) {\n\t\t\t\t\t\tthis.saveStoryList(storyList);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Trigger an autosave\n\t\t\t\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n};\n\n// Take a tiddler out of edit mode without saving the changes\nNavigatorWidget.prototype.handleCancelTiddlerEvent = function(event) {\n\tevent = $tw.hooks.invokeHook(\"th-cancelling-tiddler\", event);\n\t// Flip the specified tiddler from draft back to the original\n\tvar draftTitle = event.param || event.tiddlerTitle,\n\t\tdraftTiddler = this.wiki.getTiddler(draftTitle),\n\t\toriginalTitle = draftTiddler && draftTiddler.fields[\"draft.of\"];\n\tif(draftTiddler && originalTitle) {\n\t\t// Ask for confirmation if the tiddler text has changed\n\t\tvar isConfirmed = true,\n\t\t\toriginalTiddler = this.wiki.getTiddler(originalTitle),\n\t\t\tstoryList = this.getStoryList();\n\t\tif(this.wiki.isDraftModified(draftTitle)) {\n\t\t\tisConfirmed = confirm($tw.language.getString(\n\t\t\t\t\"ConfirmCancelTiddler\",\n\t\t\t\t{variables:\n\t\t\t\t\t{title: draftTitle}\n\t\t\t\t}\n\t\t\t));\n\t\t}\n\t\t// Remove the draft tiddler\n\t\tif(isConfirmed) {\n\t\t\tthis.wiki.deleteTiddler(draftTitle);\n\t\t\tif(!event.paramObject || event.paramObject.suppressNavigation !== \"yes\") {\n\t\t\t\tif(originalTiddler) {\n\t\t\t\t\tthis.replaceFirstTitleInStory(storyList,draftTitle,originalTitle);\n\t\t\t\t\tthis.addToHistory(originalTitle,event.navigateFromClientRect);\n\t\t\t\t} else {\n\t\t\t\t\tthis.removeTitleFromStory(storyList,draftTitle);\n\t\t\t\t}\n\t\t\t\tthis.saveStoryList(storyList);\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n};\n\n// Create a new draft tiddler\n// event.param can either be the title of a template tiddler, or a hashmap of fields.\n//\n// The title of the newly created tiddler follows these rules:\n// * If a hashmap was used and a title field was specified, use that title\n// * If a hashmap was used without a title field, use a default title, if necessary making it unique with a numeric suffix\n// * If a template tiddler was used, use the title of the template, if necessary making it unique with a numeric suffix\n//\n// If a draft of the target tiddler already exists then it is reused\nNavigatorWidget.prototype.handleNewTiddlerEvent = function(event) {\n\tevent = $tw.hooks.invokeHook(\"th-new-tiddler\", event);\n\t// Get the story details\n\tvar storyList = this.getStoryList(),\n\t\ttemplateTiddler, additionalFields, title, draftTitle, existingTiddler;\n\t// Get the template tiddler (if any)\n\tif(typeof event.param === \"string\") {\n\t\t// Get the template tiddler\n\t\ttemplateTiddler = this.wiki.getTiddler(event.param);\n\t\t// Generate a new title\n\t\ttitle = this.wiki.generateNewTitle(event.param || $tw.language.getString(\"DefaultNewTiddlerTitle\"));\n\t}\n\t// Get the specified additional fields\n\tif(typeof event.paramObject === \"object\") {\n\t\tadditionalFields = event.paramObject;\n\t}\n\tif(typeof event.param === \"object\") { // Backwards compatibility with 5.1.3\n\t\tadditionalFields = event.param;\n\t}\n\tif(additionalFields && additionalFields.title) {\n\t\ttitle = additionalFields.title;\n\t}\n\t// Make a copy of the additional fields excluding any blank ones\n\tvar filteredAdditionalFields = $tw.utils.extend({},additionalFields);\n\tObject.keys(filteredAdditionalFields).forEach(function(fieldName) {\n\t\tif(filteredAdditionalFields[fieldName] === \"\") {\n\t\t\tdelete filteredAdditionalFields[fieldName];\n\t\t}\n\t});\n\t// Generate a title if we don't have one\n\ttitle = title || this.wiki.generateNewTitle($tw.language.getString(\"DefaultNewTiddlerTitle\"));\n\t// Find any existing draft for this tiddler\n\tdraftTitle = this.wiki.findDraft(title);\n\t// Pull in any existing tiddler\n\tif(draftTitle) {\n\t\texistingTiddler = this.wiki.getTiddler(draftTitle);\n\t} else {\n\t\tdraftTitle = this.generateDraftTitle(title);\n\t\texistingTiddler = this.wiki.getTiddler(title);\n\t}\n\t// Merge the tags\n\tvar mergedTags = [];\n\tif(existingTiddler && existingTiddler.fields.tags) {\n\t\t$tw.utils.pushTop(mergedTags,existingTiddler.fields.tags);\n\t}\n\tif(additionalFields && additionalFields.tags) {\n\t\t// Merge tags\n\t\tmergedTags = $tw.utils.pushTop(mergedTags,$tw.utils.parseStringArray(additionalFields.tags));\n\t}\n\tif(templateTiddler && templateTiddler.fields.tags) {\n\t\t// Merge tags\n\t\tmergedTags = $tw.utils.pushTop(mergedTags,templateTiddler.fields.tags);\n\t}\n\t// Save the draft tiddler\n\tvar draftTiddler = new $tw.Tiddler({\n\t\t\ttext: \"\",\n\t\t\t\"draft.title\": title\n\t\t},\n\t\ttemplateTiddler,\n\t\tadditionalFields,\n\t\tthis.wiki.getCreationFields(),\n\t\texistingTiddler,\n\t\tfilteredAdditionalFields,\n\t\t{\n\t\t\ttitle: draftTitle,\n\t\t\t\"draft.of\": title,\n\t\t\ttags: mergedTags\n\t\t},this.wiki.getModificationFields());\n\tthis.wiki.addTiddler(draftTiddler);\n\t// Update the story to insert the new draft at the top and remove any existing tiddler\n\tif(storyList && storyList.indexOf(draftTitle) === -1) {\n\t\tvar slot = storyList.indexOf(event.navigateFromTitle);\n\t\tif(slot === -1) {\n\t\t\tslot = this.getAttribute(\"openLinkFromOutsideRiver\",\"top\") === \"bottom\" ? storyList.length - 1 : slot;\n\t\t}\n\t\tstoryList.splice(slot + 1,0,draftTitle);\n\t}\n\tif(storyList && storyList.indexOf(title) !== -1) {\n\t\tstoryList.splice(storyList.indexOf(title),1);\n\t}\n\tthis.saveStoryList(storyList);\n\t// Add a new record to the top of the history stack\n\tthis.addToHistory(draftTitle);\n\treturn false;\n};\n\n// Import JSON tiddlers into a pending import tiddler\nNavigatorWidget.prototype.handleImportTiddlersEvent = function(event) {\n\t// Get the tiddlers\n\tvar tiddlers = [];\n\ttry {\n\t\ttiddlers = JSON.parse(event.param);\n\t} catch(e) {\n\t}\n\t// Get the current $:/Import tiddler\n\tvar importTiddler = this.wiki.getTiddler(IMPORT_TITLE),\n\t\timportData = this.wiki.getTiddlerData(IMPORT_TITLE,{}),\n\t\tnewFields = new Object({\n\t\t\ttitle: IMPORT_TITLE,\n\t\t\ttype: \"application/json\",\n\t\t\t\"plugin-type\": \"import\",\n\t\t\t\"status\": \"pending\"\n\t\t}),\n\t\tincomingTiddlers = [];\n\t// Process each tiddler\n\timportData.tiddlers = importData.tiddlers || {};\n\t$tw.utils.each(tiddlers,function(tiddlerFields) {\n\t\ttiddlerFields.title = $tw.utils.trim(tiddlerFields.title);\n\t\tvar title = tiddlerFields.title;\n\t\tif(title) {\n\t\t\tincomingTiddlers.push(title);\n\t\t\timportData.tiddlers[title] = tiddlerFields;\n\t\t}\n\t});\n\t// Give the active upgrader modules a chance to process the incoming tiddlers\n\tvar messages = this.wiki.invokeUpgraders(incomingTiddlers,importData.tiddlers);\n\t$tw.utils.each(messages,function(message,title) {\n\t\tnewFields[\"message-\" + title] = message;\n\t});\n\t// Deselect any suppressed tiddlers\n\t$tw.utils.each(importData.tiddlers,function(tiddler,title) {\n\t\tif($tw.utils.count(tiddler) === 0) {\n\t\t\tnewFields[\"selection-\" + title] = \"unchecked\";\n\t\t}\n\t});\n\t// Save the $:/Import tiddler\n\tnewFields.text = JSON.stringify(importData,null,$tw.config.preferences.jsonSpaces);\n\tthis.wiki.addTiddler(new $tw.Tiddler(importTiddler,newFields));\n\t// Update the story and history details\n\tif(this.getVariable(\"tv-auto-open-on-import\") !== \"no\") {\n\t\tvar storyList = this.getStoryList(),\n\t\t\thistory = [];\n\t\t// Add it to the story\n\t\tif(storyList && storyList.indexOf(IMPORT_TITLE) === -1) {\n\t\t\tstoryList.unshift(IMPORT_TITLE);\n\t\t}\n\t\t// And to history\n\t\thistory.push(IMPORT_TITLE);\n\t\t// Save the updated story and history\n\t\tthis.saveStoryList(storyList);\n\t\tthis.addToHistory(history);\n\t}\n\treturn false;\n};\n\n//\nNavigatorWidget.prototype.handlePerformImportEvent = function(event) {\n\tvar self = this,\n\t\timportTiddler = this.wiki.getTiddler(event.param),\n\t\timportData = this.wiki.getTiddlerDataCached(event.param,{tiddlers: {}}),\n\t\timportReport = [];\n\t// Add the tiddlers to the store\n\timportReport.push($tw.language.getString(\"Import/Imported/Hint\") + \"\\n\");\n\t$tw.utils.each(importData.tiddlers,function(tiddlerFields) {\n\t\tvar title = tiddlerFields.title;\n\t\tif(title && importTiddler && importTiddler.fields[\"selection-\" + title] !== \"unchecked\") {\n\t\t\tvar tiddler = new $tw.Tiddler(tiddlerFields);\n\t\t\ttiddler = $tw.hooks.invokeHook(\"th-importing-tiddler\",tiddler);\n\t\t\tself.wiki.addTiddler(tiddler);\n\t\t\timportReport.push(\"# [[\" + tiddlerFields.title + \"]]\");\n\t\t}\n\t});\n\t// Replace the $:/Import tiddler with an import report\n\tthis.wiki.addTiddler(new $tw.Tiddler({\n\t\ttitle: event.param,\n\t\ttext: importReport.join(\"\\n\"),\n\t\t\"status\": \"complete\"\n\t}));\n\t// Navigate to the $:/Import tiddler\n\tthis.addToHistory([event.param]);\n\t// Trigger an autosave\n\t$tw.rootWidget.dispatchEvent({type: \"tm-auto-save-wiki\"});\n};\n\nNavigatorWidget.prototype.handleFoldTiddlerEvent = function(event) {\n\tvar paramObject = event.paramObject || {};\n\tif(paramObject.foldedState) {\n\t\tvar foldedState = this.wiki.getTiddlerText(paramObject.foldedState,\"show\") === \"show\" ? \"hide\" : \"show\";\n\t\tthis.wiki.setText(paramObject.foldedState,\"text\",null,foldedState);\n\t}\n};\n\nNavigatorWidget.prototype.handleFoldOtherTiddlersEvent = function(event) {\n\tvar self = this,\n\t\tparamObject = event.paramObject || {},\n\t\tprefix = paramObject.foldedStatePrefix;\n\t$tw.utils.each(this.getStoryList(),function(title) {\n\t\tself.wiki.setText(prefix + title,\"text\",null,event.param === title ? \"show\" : \"hide\");\n\t});\n};\n\nNavigatorWidget.prototype.handleFoldAllTiddlersEvent = function(event) {\n\tvar self = this,\n\t\tparamObject = event.paramObject || {},\n\t\tprefix = paramObject.foldedStatePrefix || \"$:/state/folded/\";\n\t$tw.utils.each(this.getStoryList(),function(title) {\n\t\tself.wiki.setText(prefix + title,\"text\",null,\"hide\");\n\t});\n};\n\nNavigatorWidget.prototype.handleUnfoldAllTiddlersEvent = function(event) {\n\tvar self = this,\n\t\tparamObject = event.paramObject || {},\n\t\tprefix = paramObject.foldedStatePrefix;\n\t$tw.utils.each(this.getStoryList(),function(title) {\n\t\tself.wiki.setText(prefix + title,\"text\",null,\"show\");\n\t});\n};\n\nNavigatorWidget.prototype.handleRenameTiddlerEvent = function(event) {\n\tvar paramObject = event.paramObject || {},\n\t\tfrom = paramObject.from || event.tiddlerTitle,\n\t\tto = paramObject.to;\n\tthis.wiki.renameTiddler(from,to);\n};\n\nexports.navigator = NavigatorWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/password.js": {
"title": "$:/core/modules/widgets/password.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/password.js\ntype: application/javascript\nmodule-type: widget\n\nPassword widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar PasswordWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nPasswordWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nPasswordWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Get the current password\n\tvar password = $tw.browser ? $tw.utils.getPassword(this.passwordName) || \"\" : \"\";\n\t// Create our element\n\tvar domNode = this.document.createElement(\"input\");\n\tdomNode.setAttribute(\"type\",\"password\");\n\tdomNode.setAttribute(\"value\",password);\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(domNode,[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n\t// Insert the label into the DOM and render any children\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tthis.domNodes.push(domNode);\n};\n\nPasswordWidget.prototype.handleChangeEvent = function(event) {\n\tvar password = this.domNodes[0].value;\n\treturn $tw.utils.savePassword(this.passwordName,password);\n};\n\n/*\nCompute the internal state of the widget\n*/\nPasswordWidget.prototype.execute = function() {\n\t// Get the parameters from the attributes\n\tthis.passwordName = this.getAttribute(\"name\",\"\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nPasswordWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.name) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.password = PasswordWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/qualify.js": {
"title": "$:/core/modules/widgets/qualify.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/qualify.js\ntype: application/javascript\nmodule-type: widget\n\nQualify text to a variable \n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar QualifyWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nQualifyWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nQualifyWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nQualifyWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.qualifyName = this.getAttribute(\"name\");\n\tthis.qualifyTitle = this.getAttribute(\"title\");\n\t// Set context variable\n\tif(this.qualifyName) {\n\t\tthis.setVariable(this.qualifyName,this.qualifyTitle + \"-\" + this.getStateQualifier());\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nQualifyWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.name || changedAttributes.title) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.qualify = QualifyWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/radio.js": {
"title": "$:/core/modules/widgets/radio.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/radio.js\ntype: application/javascript\nmodule-type: widget\n\nSet a field or index at a given tiddler via radio buttons\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar RadioWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nRadioWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRadioWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\tvar isChecked = this.getValue() === this.radioValue;\n\t// Create our elements\n\tthis.labelDomNode = this.document.createElement(\"label\");\n\tthis.labelDomNode.setAttribute(\"class\",\n \t\t\"tc-radio \" + this.radioClass + (isChecked ? \" tc-radio-selected\" : \"\")\n \t);\n\tthis.inputDomNode = this.document.createElement(\"input\");\n\tthis.inputDomNode.setAttribute(\"type\",\"radio\");\n\tif(isChecked) {\n\t\tthis.inputDomNode.setAttribute(\"checked\",\"true\");\n\t}\n\tthis.labelDomNode.appendChild(this.inputDomNode);\n\tthis.spanDomNode = this.document.createElement(\"span\");\n\tthis.labelDomNode.appendChild(this.spanDomNode);\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(this.inputDomNode,[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n\t// Insert the label into the DOM and render any children\n\tparent.insertBefore(this.labelDomNode,nextSibling);\n\tthis.renderChildren(this.spanDomNode,null);\n\tthis.domNodes.push(this.labelDomNode);\n};\n\nRadioWidget.prototype.getValue = function() {\n\tvar value,\n\t\ttiddler = this.wiki.getTiddler(this.radioTitle);\n\tif (this.radioIndex) {\n\t\tvalue = this.wiki.extractTiddlerDataItem(this.radioTitle,this.radioIndex);\n\t} else {\n\t\tvalue = tiddler && tiddler.getFieldString(this.radioField);\n\t}\n\treturn value;\n};\n\nRadioWidget.prototype.setValue = function() {\n\tif(this.radioIndex) {\n\t\tthis.wiki.setText(this.radioTitle,\"\",this.radioIndex,this.radioValue);\n\t} else {\n\t\tvar tiddler = this.wiki.getTiddler(this.radioTitle),\n\t\t\taddition = {};\n\t\taddition[this.radioField] = this.radioValue;\n\t\tthis.wiki.addTiddler(new $tw.Tiddler(this.wiki.getCreationFields(),{title: this.radioTitle},tiddler,addition,this.wiki.getModificationFields()));\n\t}\n};\n\nRadioWidget.prototype.handleChangeEvent = function(event) {\n\tif(this.inputDomNode.checked) {\n\t\tthis.setValue();\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nRadioWidget.prototype.execute = function() {\n\t// Get the parameters from the attributes\n\tthis.radioTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.radioField = this.getAttribute(\"field\",\"text\");\n\tthis.radioIndex = this.getAttribute(\"index\");\n\tthis.radioValue = this.getAttribute(\"value\");\n\tthis.radioClass = this.getAttribute(\"class\",\"\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nRadioWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes.value || changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar refreshed = false;\n\t\tif(changedTiddlers[this.radioTitle]) {\n\t\t\tthis.inputDomNode.checked = this.getValue() === this.radioValue;\n\t\t\trefreshed = true;\n\t\t}\n\t\treturn this.refreshChildren(changedTiddlers) || refreshed;\n\t}\n};\n\nexports.radio = RadioWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/range.js": {
"title": "$:/core/modules/widgets/range.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/range.js\ntype: application/javascript\nmodule-type: widget\n\nRange widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar RangeWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nRangeWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRangeWidget.prototype.render = function(parent,nextSibling) {\n\t// Save the parent dom node\n\tthis.parentDomNode = parent;\n\t// Compute our attributes\n\tthis.computeAttributes();\n\t// Execute our logic\n\tthis.execute();\n\t// Create our elements\n\tthis.inputDomNode = this.document.createElement(\"input\");\n\tthis.inputDomNode.setAttribute(\"type\",\"range\");\n\tthis.inputDomNode.setAttribute(\"class\",this.elementClass);\n\tif(this.minValue){\n\t\tthis.inputDomNode.setAttribute(\"min\", this.minValue);\n\t}\n\tif(this.maxValue){\n\t\tthis.inputDomNode.setAttribute(\"max\", this.maxValue);\n\t}\n\tif(this.increment){\n\t\tthis.inputDomNode.setAttribute(\"step\", this.increment);\n\t}\n\tthis.inputDomNode.value = this.getValue();\n\t// Add a click event handler\n\t$tw.utils.addEventListeners(this.inputDomNode,[\n\t\t{name: \"input\", handlerObject: this, handlerMethod: \"handleInputEvent\"},\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleInputEvent\"}\t\t\n\t]);\n\t// Insert the label into the DOM and render any children\n\tparent.insertBefore(this.inputDomNode,nextSibling);\n\tthis.domNodes.push(this.inputDomNode);\n};\n\nRangeWidget.prototype.getValue = function() {\n\tvar tiddler = this.wiki.getTiddler(this.tiddlerTitle),\n\t\tfieldName = this.tiddlerField || \"text\",\n\t\tvalue = this.defaultValue;\n\tif(tiddler) {\n\t\tif(this.tiddlerIndex) {\n\t\t\tvalue = this.wiki.extractTiddlerDataItem(tiddler,this.tiddlerIndex,this.defaultValue || \"\");\n\t\t} else {\n\t\t\tif($tw.utils.hop(tiddler.fields,fieldName)) {\n\t\t\t\tvalue = tiddler.fields[fieldName] || \"\";\n\t\t\t} else {\n\t\t\t\tvalue = this.defaultValue || \"\";\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n\nRangeWidget.prototype.handleInputEvent = function(event) {\n\tif(this.getValue() !== this.inputDomNode.value) {\n\t\tif(this.tiddlerIndex) {\n\t\t\tthis.wiki.setText(this.tiddlerTitle,\"\",this.tiddlerIndex,this.inputDomNode.value);\n\t\t} else {\n\t\t\tthis.wiki.setText(this.tiddlerTitle,this.tiddlerField,null,this.inputDomNode.value);\n\t\t}\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nRangeWidget.prototype.execute = function() {\n\t// Get the parameters from the attributes\n\tthis.tiddlerTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.tiddlerField = this.getAttribute(\"field\");\n\tthis.tiddlerIndex = this.getAttribute(\"index\");\n\tthis.minValue = this.getAttribute(\"min\");\n\tthis.maxValue = this.getAttribute(\"max\");\n\tthis.increment = this.getAttribute(\"increment\");\n\tthis.defaultValue = this.getAttribute(\"default\");\n\tthis.elementClass = this.getAttribute(\"class\",\"\");\n\t// Make the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nRangeWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes['min'] || changedAttributes['max'] || changedAttributes['increment'] || changedAttributes[\"default\"] || changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar refreshed = false;\n\t\tif(changedTiddlers[this.tiddlerTitle]) {\n\t\t\tvar value = this.getValue();\n\t\t\tif(this.inputDomNode.value !== value) {\n\t\t\t\tthis.inputDomNode.value = value;\t\t\t\t\n\t\t\t}\n\t\t\trefreshed = true;\n\t\t}\n\t\treturn this.refreshChildren(changedTiddlers) || refreshed;\n\t}\n};\n\nexports.range = RangeWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/raw.js": {
"title": "$:/core/modules/widgets/raw.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/raw.js\ntype: application/javascript\nmodule-type: widget\n\nRaw widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar RawWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nRawWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRawWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.execute();\n\tvar div = this.document.createElement(\"div\");\n\tdiv.innerHTML=this.parseTreeNode.html;\n\tparent.insertBefore(div,nextSibling);\n\tthis.domNodes.push(div);\t\n};\n\n/*\nCompute the internal state of the widget\n*/\nRawWidget.prototype.execute = function() {\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nRawWidget.prototype.refresh = function(changedTiddlers) {\n\treturn false;\n};\n\nexports.raw = RawWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/reveal.js": {
"title": "$:/core/modules/widgets/reveal.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/reveal.js\ntype: application/javascript\nmodule-type: widget\n\nReveal widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar RevealWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nRevealWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nRevealWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar tag = this.parseTreeNode.isBlock ? \"div\" : \"span\";\n\tif(this.revealTag && $tw.config.htmlUnsafeElements.indexOf(this.revealTag) === -1) {\n\t\ttag = this.revealTag;\n\t}\n\tvar domNode = this.document.createElement(tag);\n\tvar classes = this[\"class\"].split(\" \") || [];\n\tclasses.push(\"tc-reveal\");\n\tdomNode.className = classes.join(\" \");\n\tif(this.style) {\n\t\tdomNode.setAttribute(\"style\",this.style);\n\t}\n\tparent.insertBefore(domNode,nextSibling);\n\tthis.renderChildren(domNode,null);\n\tif(!domNode.isTiddlyWikiFakeDom && this.type === \"popup\" && this.isOpen) {\n\t\tthis.positionPopup(domNode);\n\t\t$tw.utils.addClass(domNode,\"tc-popup\"); // Make sure that clicks don't dismiss popups within the revealed content\n\t}\n\tif(!this.isOpen) {\n\t\tdomNode.setAttribute(\"hidden\",\"true\");\n\t}\n\tthis.domNodes.push(domNode);\n};\n\nRevealWidget.prototype.positionPopup = function(domNode) {\n\tdomNode.style.position = \"absolute\";\n\tdomNode.style.zIndex = \"1000\";\n\tvar left,top;\n\tswitch(this.position) {\n\t\tcase \"left\":\n\t\t\tleft = this.popup.left - domNode.offsetWidth;\n\t\t\ttop = this.popup.top;\n\t\t\tbreak;\n\t\tcase \"above\":\n\t\t\tleft = this.popup.left;\n\t\t\ttop = this.popup.top - domNode.offsetHeight;\n\t\t\tbreak;\n\t\tcase \"aboveright\":\n\t\t\tleft = this.popup.left + this.popup.width;\n\t\t\ttop = this.popup.top + this.popup.height - domNode.offsetHeight;\n\t\t\tbreak;\n\t\tcase \"right\":\n\t\t\tleft = this.popup.left + this.popup.width;\n\t\t\ttop = this.popup.top;\n\t\t\tbreak;\n\t\tcase \"belowleft\":\n\t\t\tleft = this.popup.left + this.popup.width - domNode.offsetWidth;\n\t\t\ttop = this.popup.top + this.popup.height;\n\t\t\tbreak;\n\t\tdefault: // Below\n\t\t\tleft = this.popup.left;\n\t\t\ttop = this.popup.top + this.popup.height;\n\t\t\tbreak;\n\t}\n\tif(!this.positionAllowNegative) {\n\t\tleft = Math.max(0,left);\n\t\ttop = Math.max(0,top);\n\t}\n\tdomNode.style.left = left + \"px\";\n\tdomNode.style.top = top + \"px\";\n};\n\n/*\nCompute the internal state of the widget\n*/\nRevealWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.state = this.getAttribute(\"state\");\n\tthis.revealTag = this.getAttribute(\"tag\");\n\tthis.type = this.getAttribute(\"type\");\n\tthis.text = this.getAttribute(\"text\");\n\tthis.position = this.getAttribute(\"position\");\n\tthis.positionAllowNegative = this.getAttribute(\"positionAllowNegative\") === \"yes\";\n\tthis[\"class\"] = this.getAttribute(\"class\",\"\");\n\tthis.style = this.getAttribute(\"style\",\"\");\n\tthis[\"default\"] = this.getAttribute(\"default\",\"\");\n\tthis.animate = this.getAttribute(\"animate\",\"no\");\n\tthis.retain = this.getAttribute(\"retain\",\"no\");\n\tthis.openAnimation = this.animate === \"no\" ? undefined : \"open\";\n\tthis.closeAnimation = this.animate === \"no\" ? undefined : \"close\";\n\t// Compute the title of the state tiddler and read it\n\tthis.stateTiddlerTitle = this.state;\n\tthis.stateTitle = this.getAttribute(\"stateTitle\");\n\tthis.stateField = this.getAttribute(\"stateField\");\n\tthis.stateIndex = this.getAttribute(\"stateIndex\");\n\tthis.readState();\n\t// Construct the child widgets\n\tvar childNodes = this.isOpen ? this.parseTreeNode.children : [];\n\tthis.hasChildNodes = this.isOpen;\n\tthis.makeChildWidgets(childNodes);\n};\n\n/*\nRead the state tiddler\n*/\nRevealWidget.prototype.readState = function() {\n\t// Read the information from the state tiddler\n\tvar state,\n\t defaultState = this[\"default\"];\n\tif(this.stateTitle) {\n\t\tvar stateTitleTiddler = this.wiki.getTiddler(this.stateTitle);\n\t\tif(this.stateField) {\n\t\t\tstate = stateTitleTiddler ? stateTitleTiddler.getFieldString(this.stateField) || defaultState : defaultState;\n\t\t} else if(this.stateIndex) {\n\t\t\tstate = stateTitleTiddler ? this.wiki.extractTiddlerDataItem(this.stateTitle,this.stateIndex) || defaultState : defaultState;\n\t\t} else if(stateTitleTiddler) {\n\t\t\tstate = this.wiki.getTiddlerText(this.stateTitle) || defaultState;\n\t\t} else {\n\t\t\tstate = defaultState;\n\t\t}\n\t} else {\n\t\tstate = this.stateTiddlerTitle ? this.wiki.getTextReference(this.state,this[\"default\"],this.getVariable(\"currentTiddler\")) : this[\"default\"];\n\t}\n\tif(state === null) {\n\t\tstate = this[\"default\"];\n\t}\n\tswitch(this.type) {\n\t\tcase \"popup\":\n\t\t\tthis.readPopupState(state);\n\t\t\tbreak;\n\t\tcase \"match\":\n\t\t\tthis.isOpen = this.text === state;\n\t\t\tbreak;\n\t\tcase \"nomatch\":\n\t\t\tthis.isOpen = this.text !== state;\n\t\t\tbreak;\n\t\tcase \"lt\":\n\t\t\tthis.isOpen = !!(this.compareStateText(state) < 0);\n\t\t\tbreak;\n\t\tcase \"gt\":\n\t\t\tthis.isOpen = !!(this.compareStateText(state) > 0);\n\t\t\tbreak;\n\t\tcase \"lteq\":\n\t\t\tthis.isOpen = !(this.compareStateText(state) > 0);\n\t\t\tbreak;\n\t\tcase \"gteq\":\n\t\t\tthis.isOpen = !(this.compareStateText(state) < 0);\n\t\t\tbreak;\n\t}\n};\n\nRevealWidget.prototype.compareStateText = function(state) {\n\treturn state.localeCompare(this.text,undefined,{numeric: true,sensitivity: \"case\"});\n};\n\nRevealWidget.prototype.readPopupState = function(state) {\n\tvar popupLocationRegExp = /^\\((-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+),(-?[0-9\\.E]+)\\)$/,\n\t\tmatch = popupLocationRegExp.exec(state);\n\t// Check if the state matches the location regexp\n\tif(match) {\n\t\t// If so, we're open\n\t\tthis.isOpen = true;\n\t\t// Get the location\n\t\tthis.popup = {\n\t\t\tleft: parseFloat(match[1]),\n\t\t\ttop: parseFloat(match[2]),\n\t\t\twidth: parseFloat(match[3]),\n\t\t\theight: parseFloat(match[4])\n\t\t};\n\t} else {\n\t\t// If not, we're closed\n\t\tthis.isOpen = false;\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nRevealWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.state || changedAttributes.type || changedAttributes.text || changedAttributes.position || changedAttributes.positionAllowNegative || changedAttributes[\"default\"] || changedAttributes.animate || changedAttributes.stateTitle || changedAttributes.stateField || changedAttributes.stateIndex) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\tvar currentlyOpen = this.isOpen;\n\t\tthis.readState();\n\t\tif(this.isOpen !== currentlyOpen) {\n\t\t\tif(this.retain === \"yes\") {\n\t\t\t\tthis.updateState();\n\t\t\t} else {\n\t\t\t\tthis.refreshSelf();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\n/*\nCalled by refresh() to dynamically show or hide the content\n*/\nRevealWidget.prototype.updateState = function() {\n\tvar self = this;\n\t// Read the current state\n\tthis.readState();\n\t// Construct the child nodes if needed\n\tvar domNode = this.domNodes[0];\n\tif(this.isOpen && !this.hasChildNodes) {\n\t\tthis.hasChildNodes = true;\n\t\tthis.makeChildWidgets(this.parseTreeNode.children);\n\t\tthis.renderChildren(domNode,null);\n\t}\n\t// Animate our DOM node\n\tif(!domNode.isTiddlyWikiFakeDom && this.type === \"popup\" && this.isOpen) {\n\t\tthis.positionPopup(domNode);\n\t\t$tw.utils.addClass(domNode,\"tc-popup\"); // Make sure that clicks don't dismiss popups within the revealed content\n\n\t}\n\tif(this.isOpen) {\n\t\tdomNode.removeAttribute(\"hidden\");\n $tw.anim.perform(this.openAnimation,domNode);\n\t} else {\n\t\t$tw.anim.perform(this.closeAnimation,domNode,{callback: function() {\n\t\t\t//make sure that the state hasn't changed during the close animation\n\t\t\tself.readState()\n\t\t\tif(!self.isOpen) {\n\t\t\t\tdomNode.setAttribute(\"hidden\",\"true\");\n\t\t\t}\n\t\t}});\n\t}\n};\n\nexports.reveal = RevealWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/scrollable.js": {
"title": "$:/core/modules/widgets/scrollable.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/scrollable.js\ntype: application/javascript\nmodule-type: widget\n\nScrollable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ScrollableWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.scaleFactor = 1;\n\tthis.addEventListeners([\n\t\t{type: \"tm-scroll\", handler: \"handleScrollEvent\"}\n\t]);\n\tif($tw.browser) {\n\t\tthis.requestAnimationFrame = window.requestAnimationFrame ||\n\t\t\twindow.webkitRequestAnimationFrame ||\n\t\t\twindow.mozRequestAnimationFrame ||\n\t\t\tfunction(callback) {\n\t\t\t\treturn window.setTimeout(callback, 1000/60);\n\t\t\t};\n\t\tthis.cancelAnimationFrame = window.cancelAnimationFrame ||\n\t\t\twindow.webkitCancelAnimationFrame ||\n\t\t\twindow.webkitCancelRequestAnimationFrame ||\n\t\t\twindow.mozCancelAnimationFrame ||\n\t\t\twindow.mozCancelRequestAnimationFrame ||\n\t\t\tfunction(id) {\n\t\t\t\twindow.clearTimeout(id);\n\t\t\t};\n\t}\n};\n\n/*\nInherit from the base widget class\n*/\nScrollableWidget.prototype = new Widget();\n\nScrollableWidget.prototype.cancelScroll = function() {\n\tif(this.idRequestFrame) {\n\t\tthis.cancelAnimationFrame.call(window,this.idRequestFrame);\n\t\tthis.idRequestFrame = null;\n\t}\n};\n\n/*\nHandle a scroll event\n*/\nScrollableWidget.prototype.handleScrollEvent = function(event) {\n\t// Pass the scroll event through if our offsetsize is larger than our scrollsize\n\tif(this.outerDomNode.scrollWidth <= this.outerDomNode.offsetWidth && this.outerDomNode.scrollHeight <= this.outerDomNode.offsetHeight && this.fallthrough === \"yes\") {\n\t\treturn true;\n\t}\n\tthis.scrollIntoView(event.target);\n\treturn false; // Handled event\n};\n\n/*\nScroll an element into view\n*/\nScrollableWidget.prototype.scrollIntoView = function(element) {\n\tvar duration = $tw.utils.getAnimationDuration();\n\tthis.cancelScroll();\n\tthis.startTime = Date.now();\n\tvar scrollPosition = {\n\t\tx: this.outerDomNode.scrollLeft,\n\t\ty: this.outerDomNode.scrollTop\n\t};\n\t// Get the client bounds of the element and adjust by the scroll position\n\tvar scrollableBounds = this.outerDomNode.getBoundingClientRect(),\n\t\tclientTargetBounds = element.getBoundingClientRect(),\n\t\tbounds = {\n\t\t\tleft: clientTargetBounds.left + scrollPosition.x - scrollableBounds.left,\n\t\t\ttop: clientTargetBounds.top + scrollPosition.y - scrollableBounds.top,\n\t\t\twidth: clientTargetBounds.width,\n\t\t\theight: clientTargetBounds.height\n\t\t};\n\t// We'll consider the horizontal and vertical scroll directions separately via this function\n\tvar getEndPos = function(targetPos,targetSize,currentPos,currentSize) {\n\t\t\t// If the target is already visible then stay where we are\n\t\t\tif(targetPos >= currentPos && (targetPos + targetSize) <= (currentPos + currentSize)) {\n\t\t\t\treturn currentPos;\n\t\t\t// If the target is above/left of the current view, then scroll to its top/left\n\t\t\t} else if(targetPos <= currentPos) {\n\t\t\t\treturn targetPos;\n\t\t\t// If the target is smaller than the window and the scroll position is too far up, then scroll till the target is at the bottom of the window\n\t\t\t} else if(targetSize < currentSize && currentPos < (targetPos + targetSize - currentSize)) {\n\t\t\t\treturn targetPos + targetSize - currentSize;\n\t\t\t// If the target is big, then just scroll to the top\n\t\t\t} else if(currentPos < targetPos) {\n\t\t\t\treturn targetPos;\n\t\t\t// Otherwise, stay where we are\n\t\t\t} else {\n\t\t\t\treturn currentPos;\n\t\t\t}\n\t\t},\n\t\tendX = getEndPos(bounds.left,bounds.width,scrollPosition.x,this.outerDomNode.offsetWidth),\n\t\tendY = getEndPos(bounds.top,bounds.height,scrollPosition.y,this.outerDomNode.offsetHeight);\n\t// Only scroll if necessary\n\tif(endX !== scrollPosition.x || endY !== scrollPosition.y) {\n\t\tvar self = this,\n\t\t\tdrawFrame;\n\t\tdrawFrame = function () {\n\t\t\tvar t;\n\t\t\tif(duration <= 0) {\n\t\t\t\tt = 1;\n\t\t\t} else {\n\t\t\t\tt = ((Date.now()) - self.startTime) / duration;\t\n\t\t\t}\n\t\t\tif(t >= 1) {\n\t\t\t\tself.cancelScroll();\n\t\t\t\tt = 1;\n\t\t\t}\n\t\t\tt = $tw.utils.slowInSlowOut(t);\n\t\t\tself.outerDomNode.scrollLeft = scrollPosition.x + (endX - scrollPosition.x) * t;\n\t\t\tself.outerDomNode.scrollTop = scrollPosition.y + (endY - scrollPosition.y) * t;\n\t\t\tif(t < 1) {\n\t\t\t\tself.idRequestFrame = self.requestAnimationFrame.call(window,drawFrame);\n\t\t\t}\n\t\t};\n\t\tdrawFrame();\n\t}\n};\n\n/*\nRender this widget into the DOM\n*/\nScrollableWidget.prototype.render = function(parent,nextSibling) {\n\tvar self = this;\n\t// Remember parent\n\tthis.parentDomNode = parent;\n\t// Compute attributes and execute state\n\tthis.computeAttributes();\n\tthis.execute();\n\t// Create elements\n\tthis.outerDomNode = this.document.createElement(\"div\");\n\t$tw.utils.setStyle(this.outerDomNode,[\n\t\t{overflowY: \"auto\"},\n\t\t{overflowX: \"auto\"},\n\t\t{webkitOverflowScrolling: \"touch\"}\n\t]);\n\tthis.innerDomNode = this.document.createElement(\"div\");\n\tthis.outerDomNode.appendChild(this.innerDomNode);\n\t// Assign classes\n\tthis.outerDomNode.className = this[\"class\"] || \"\";\n\t// Insert element\n\tparent.insertBefore(this.outerDomNode,nextSibling);\n\tthis.renderChildren(this.innerDomNode,null);\n\tthis.domNodes.push(this.outerDomNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nScrollableWidget.prototype.execute = function() {\n\t// Get attributes\n\tthis.fallthrough = this.getAttribute(\"fallthrough\",\"yes\");\n\tthis[\"class\"] = this.getAttribute(\"class\");\n\t// Make child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nScrollableWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes[\"class\"]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports.scrollable = ScrollableWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/select.js": {
"title": "$:/core/modules/widgets/select.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/select.js\ntype: application/javascript\nmodule-type: widget\n\nSelect widget:\n\n```\n<$select tiddler=\"MyTiddler\" field=\"text\">\n<$list filter=\"[tag[chapter]]\">\n<option value=<<currentTiddler>>>\n<$view field=\"description\"/>\n</option>\n</$list>\n</$select>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SelectWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSelectWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSelectWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n\tthis.setSelectValue();\n\t$tw.utils.addEventListeners(this.getSelectDomNode(),[\n\t\t{name: \"change\", handlerObject: this, handlerMethod: \"handleChangeEvent\"}\n\t]);\n};\n\n/*\nHandle a change event\n*/\nSelectWidget.prototype.handleChangeEvent = function(event) {\n\t// Get the new value and assign it to the tiddler\n\tif(this.selectMultiple == false) {\n\t\tvar value = this.getSelectDomNode().value;\n\t} else {\n\t\tvar value = this.getSelectValues()\n\t\t\t\tvalue = $tw.utils.stringifyList(value);\n\t}\n\tthis.wiki.setText(this.selectTitle,this.selectField,this.selectIndex,value);\n\t// Trigger actions\n\tif(this.selectActions) {\n\t\tthis.invokeActionString(this.selectActions,this,event);\n\t}\n};\n\n/*\nIf necessary, set the value of the select element to the current value\n*/\nSelectWidget.prototype.setSelectValue = function() {\n\tvar value = this.selectDefault;\n\t// Get the value\n\tif(this.selectIndex) {\n\t\tvalue = this.wiki.extractTiddlerDataItem(this.selectTitle,this.selectIndex,value);\n\t} else {\n\t\tvar tiddler = this.wiki.getTiddler(this.selectTitle);\n\t\tif(tiddler) {\n\t\t\tif(this.selectField === \"text\") {\n\t\t\t\t// Calling getTiddlerText() triggers lazy loading of skinny tiddlers\n\t\t\t\tvalue = this.wiki.getTiddlerText(this.selectTitle);\n\t\t\t} else {\n\t\t\t\tif($tw.utils.hop(tiddler.fields,this.selectField)) {\n\t\t\t\t\tvalue = tiddler.getFieldString(this.selectField);\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif(this.selectField === \"title\") {\n\t\t\t\tvalue = this.selectTitle;\n\t\t\t}\n\t\t}\n\t}\n\t// Assign it to the select element if it's different than the current value\n\tif (this.selectMultiple) {\n\t\tvalue = value === undefined ? \"\" : value;\n\t\tvar select = this.getSelectDomNode();\n\t\tvar values = Array.isArray(value) ? value : $tw.utils.parseStringArray(value);\n\t\tfor(var i=0; i < select.children.length; i++){\n\t\t\tselect.children[i].selected = values.indexOf(select.children[i].value) !== -1\n\t\t}\n\t} else {\n\t\tvar domNode = this.getSelectDomNode();\n\t\tif(domNode.value !== value) {\n\t\t\tdomNode.value = value;\n\t\t}\n\t}\n};\n\n/*\nGet the DOM node of the select element\n*/\nSelectWidget.prototype.getSelectDomNode = function() {\n\treturn this.children[0].domNodes[0];\n};\n\n// Return an array of the selected opion values\n// select is an HTML select element\nSelectWidget.prototype.getSelectValues = function() {\n\tvar select, result, options, opt;\n\tselect = this.getSelectDomNode();\n\tresult = [];\n\toptions = select && select.options;\n\tfor (var i=0; i<options.length; i++) {\n\t\topt = options[i];\n\t\tif (opt.selected) {\n\t\t\tresult.push(opt.value || opt.text);\n\t\t}\n\t}\n\treturn result;\n}\n\n/*\nCompute the internal state of the widget\n*/\nSelectWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.selectActions = this.getAttribute(\"actions\");\n\tthis.selectTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.selectField = this.getAttribute(\"field\",\"text\");\n\tthis.selectIndex = this.getAttribute(\"index\");\n\tthis.selectClass = this.getAttribute(\"class\");\n\tthis.selectDefault = this.getAttribute(\"default\");\n\tthis.selectMultiple = this.getAttribute(\"multiple\", false);\n\tthis.selectSize = this.getAttribute(\"size\");\n\tthis.selectTooltip = this.getAttribute(\"tooltip\");\n\t// Make the child widgets\n\tvar selectNode = {\n\t\ttype: \"element\",\n\t\ttag: \"select\",\n\t\tchildren: this.parseTreeNode.children\n\t};\n\tif(this.selectClass) {\n\t\t$tw.utils.addAttributeToParseTreeNode(selectNode,\"class\",this.selectClass);\n\t}\n\tif(this.selectMultiple) {\n\t\t$tw.utils.addAttributeToParseTreeNode(selectNode,\"multiple\",\"multiple\");\n\t}\n\tif(this.selectSize) {\n\t\t$tw.utils.addAttributeToParseTreeNode(selectNode,\"size\",this.selectSize);\n\t}\n\tif(this.selectTooltip) {\n\t\t$tw.utils.addAttributeToParseTreeNode(selectNode,\"title\",this.selectTooltip);\n\t}\n\tthis.makeChildWidgets([selectNode]);\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nSelectWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\t// If we're using a different tiddler/field/index then completely refresh ourselves\n\tif(changedAttributes.selectTitle || changedAttributes.selectField || changedAttributes.selectIndex || changedAttributes.selectTooltip) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t// If the target tiddler value has changed, just update setting and refresh the children\n\t} else {\n\t\tvar childrenRefreshed = this.refreshChildren(changedTiddlers);\n\t\tif(changedTiddlers[this.selectTitle] || childrenRefreshed) {\n\t\t\tthis.setSelectValue();\n\t\t} \n\t\treturn childrenRefreshed;\n\t}\n};\n\nexports.select = SelectWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/set.js": {
"title": "$:/core/modules/widgets/set.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/set.js\ntype: application/javascript\nmodule-type: widget\n\nSet variable widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar SetWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nSetWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nSetWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nSetWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.setName = this.getAttribute(\"name\",\"currentTiddler\");\n\tthis.setFilter = this.getAttribute(\"filter\");\n\tthis.setSelect = this.getAttribute(\"select\");\n\tthis.setTiddler = this.getAttribute(\"tiddler\");\n\tthis.setSubTiddler = this.getAttribute(\"subtiddler\");\n\tthis.setField = this.getAttribute(\"field\");\n\tthis.setIndex = this.getAttribute(\"index\");\n\tthis.setValue = this.getAttribute(\"value\");\n\tthis.setEmptyValue = this.getAttribute(\"emptyValue\");\n\t// Set context variable\n\tthis.setVariable(this.setName,this.getValue(),this.parseTreeNode.params,!!this.parseTreeNode.isMacroDefinition);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nGet the value to be assigned\n*/\nSetWidget.prototype.getValue = function() {\n\tvar value = this.setValue;\n\tif(this.setTiddler) {\n\t\tvar tiddler;\n\t\tif(this.setSubTiddler) {\n\t\t\ttiddler = this.wiki.getSubTiddler(this.setTiddler,this.setSubTiddler);\n\t\t} else {\n\t\t\ttiddler = this.wiki.getTiddler(this.setTiddler);\t\t\t\n\t\t}\n\t\tif(!tiddler) {\n\t\t\tvalue = this.setEmptyValue;\n\t\t} else if(this.setField) {\n\t\t\tvalue = tiddler.getFieldString(this.setField) || this.setEmptyValue;\n\t\t} else if(this.setIndex) {\n\t\t\tvalue = this.wiki.extractTiddlerDataItem(this.setTiddler,this.setIndex,this.setEmptyValue);\n\t\t} else {\n\t\t\tvalue = tiddler.fields.text || this.setEmptyValue ;\n\t\t}\n\t} else if(this.setFilter) {\n\t\tvar results = this.wiki.filterTiddlers(this.setFilter,this);\n\t\tif(this.setValue == null) {\n\t\t\tvar select;\n\t\t\tif(this.setSelect) {\n\t\t\t\tselect = parseInt(this.setSelect,10);\n\t\t\t}\n\t\t\tif(select !== undefined) {\n\t\t\t\tvalue = results[select] || \"\";\n\t\t\t} else {\n\t\t\t\tvalue = $tw.utils.stringifyList(results);\t\t\t\n\t\t\t}\n\t\t}\n\t\tif(results.length === 0 && this.setEmptyValue !== undefined) {\n\t\t\tvalue = this.setEmptyValue;\n\t\t}\n\t} else if(!value && this.setEmptyValue) {\n\t\tvalue = this.setEmptyValue;\n\t}\n\treturn value || \"\";\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nSetWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.name || changedAttributes.filter || changedAttributes.select || changedAttributes.tiddler || (this.setTiddler && changedTiddlers[this.setTiddler]) || changedAttributes.field || changedAttributes.index || changedAttributes.value || changedAttributes.emptyValue ||\n\t (this.setFilter && this.getValue() != this.variables[this.setName].value)) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.setvariable = SetWidget;\nexports.set = SetWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/text.js": {
"title": "$:/core/modules/widgets/text.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/text.js\ntype: application/javascript\nmodule-type: widget\n\nText node widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar TextNodeWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nTextNodeWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nTextNodeWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tvar text = this.getAttribute(\"text\",this.parseTreeNode.text || \"\");\n\ttext = text.replace(/\\r/mg,\"\");\n\tvar textNode = this.document.createTextNode(text);\n\tparent.insertBefore(textNode,nextSibling);\n\tthis.domNodes.push(textNode);\n};\n\n/*\nCompute the internal state of the widget\n*/\nTextNodeWidget.prototype.execute = function() {\n\t// Nothing to do for a text node\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nTextNodeWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.text) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports.text = TextNodeWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/tiddler.js": {
"title": "$:/core/modules/widgets/tiddler.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/tiddler.js\ntype: application/javascript\nmodule-type: widget\n\nTiddler widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar TiddlerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nTiddlerWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nTiddlerWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nTiddlerWidget.prototype.execute = function() {\n\tthis.tiddlerState = this.computeTiddlerState();\n\tthis.setVariable(\"currentTiddler\",this.tiddlerState.currentTiddler);\n\tthis.setVariable(\"missingTiddlerClass\",this.tiddlerState.missingTiddlerClass);\n\tthis.setVariable(\"shadowTiddlerClass\",this.tiddlerState.shadowTiddlerClass);\n\tthis.setVariable(\"systemTiddlerClass\",this.tiddlerState.systemTiddlerClass);\n\tthis.setVariable(\"tiddlerTagClasses\",this.tiddlerState.tiddlerTagClasses);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nCompute the tiddler state flags\n*/\nTiddlerWidget.prototype.computeTiddlerState = function() {\n\t// Get our parameters\n\tthis.tiddlerTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\t// Compute the state\n\tvar state = {\n\t\tcurrentTiddler: this.tiddlerTitle || \"\",\n\t\tmissingTiddlerClass: (this.wiki.tiddlerExists(this.tiddlerTitle) || this.wiki.isShadowTiddler(this.tiddlerTitle)) ? \"tc-tiddler-exists\" : \"tc-tiddler-missing\",\n\t\tshadowTiddlerClass: this.wiki.isShadowTiddler(this.tiddlerTitle) ? \"tc-tiddler-shadow\" : \"\",\n\t\tsystemTiddlerClass: this.wiki.isSystemTiddler(this.tiddlerTitle) ? \"tc-tiddler-system\" : \"\",\n\t\ttiddlerTagClasses: this.getTagClasses()\n\t};\n\t// Compute a simple hash to make it easier to detect changes\n\tstate.hash = state.currentTiddler + state.missingTiddlerClass + state.shadowTiddlerClass + state.systemTiddlerClass + state.tiddlerTagClasses;\n\treturn state;\n};\n\n/*\nCreate a string of CSS classes derived from the tags of the current tiddler\n*/\nTiddlerWidget.prototype.getTagClasses = function() {\n\tvar tiddler = this.wiki.getTiddler(this.tiddlerTitle);\n\tif(tiddler) {\n\t\tvar tags = [];\n\t\t$tw.utils.each(tiddler.fields.tags,function(tag) {\n\t\t\ttags.push(\"tc-tagged-\" + encodeURIComponent(tag));\n\t\t});\n\t\treturn tags.join(\" \");\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nTiddlerWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes(),\n\t\tnewTiddlerState = this.computeTiddlerState();\n\tif(changedAttributes.tiddler || newTiddlerState.hash !== this.tiddlerState.hash) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.tiddler = TiddlerWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/transclude.js": {
"title": "$:/core/modules/widgets/transclude.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/transclude.js\ntype: application/javascript\nmodule-type: widget\n\nTransclude widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar TranscludeWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nTranscludeWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nTranscludeWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nTranscludeWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.transcludeTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.transcludeSubTiddler = this.getAttribute(\"subtiddler\");\n\tthis.transcludeField = this.getAttribute(\"field\");\n\tthis.transcludeIndex = this.getAttribute(\"index\");\n\tthis.transcludeMode = this.getAttribute(\"mode\");\n\t// Parse the text reference\n\tvar parseAsInline = !this.parseTreeNode.isBlock;\n\tif(this.transcludeMode === \"inline\") {\n\t\tparseAsInline = true;\n\t} else if(this.transcludeMode === \"block\") {\n\t\tparseAsInline = false;\n\t}\n\tvar parser = this.wiki.parseTextReference(\n\t\t\t\t\t\tthis.transcludeTitle,\n\t\t\t\t\t\tthis.transcludeField,\n\t\t\t\t\t\tthis.transcludeIndex,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tparseAsInline: parseAsInline,\n\t\t\t\t\t\t\tsubTiddler: this.transcludeSubTiddler\n\t\t\t\t\t\t}),\n\t\tparseTreeNodes = parser ? parser.tree : this.parseTreeNode.children;\n\t// Set context variables for recursion detection\n\tvar recursionMarker = this.makeRecursionMarker();\n\tthis.setVariable(\"transclusion\",recursionMarker);\n\t// Check for recursion\n\tif(parser) {\n\t\tif(this.parentWidget && this.parentWidget.hasVariable(\"transclusion\",recursionMarker)) {\n\t\t\tparseTreeNodes = [{type: \"element\", tag: \"span\", attributes: {\n\t\t\t\t\"class\": {type: \"string\", value: \"tc-error\"}\n\t\t\t}, children: [\n\t\t\t\t{type: \"text\", text: $tw.language.getString(\"Error/RecursiveTransclusion\")}\n\t\t\t]}];\n\t\t}\n\t}\n\t// Construct the child widgets\n\tthis.makeChildWidgets(parseTreeNodes);\n};\n\n/*\nCompose a string comprising the title, field and/or index to identify this transclusion for recursion detection\n*/\nTranscludeWidget.prototype.makeRecursionMarker = function() {\n\tvar output = [];\n\toutput.push(\"{\");\n\toutput.push(this.getVariable(\"currentTiddler\",{defaultValue: \"\"}));\n\toutput.push(\"|\");\n\toutput.push(this.transcludeTitle || \"\");\n\toutput.push(\"|\");\n\toutput.push(this.transcludeField || \"\");\n\toutput.push(\"|\");\n\toutput.push(this.transcludeIndex || \"\");\n\toutput.push(\"|\");\n\toutput.push(this.transcludeSubTiddler || \"\");\n\toutput.push(\"}\");\n\treturn output.join(\"\");\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nTranscludeWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedTiddlers[this.transcludeTitle]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn this.refreshChildren(changedTiddlers);\t\t\n\t}\n};\n\nexports.transclude = TranscludeWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/vars.js": {
"title": "$:/core/modules/widgets/vars.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/vars.js\ntype: application/javascript\nmodule-type: widget\n\nThis widget allows multiple variables to be set in one go:\n\n```\n\\define helloworld() Hello world!\n<$vars greeting=\"Hi\" me={{!!title}} sentence=<<helloworld>>>\n <<greeting>>! I am <<me>> and I say: <<sentence>>\n</$vars>\n```\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar VarsWidget = function(parseTreeNode,options) {\n\t// Call the constructor\n\tWidget.call(this);\n\t// Initialise\t\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nVarsWidget.prototype = Object.create(Widget.prototype);\n\n/*\nRender this widget into the DOM\n*/\nVarsWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nVarsWidget.prototype.execute = function() {\n\t// Parse variables\n\tvar self = this;\n\t$tw.utils.each(this.attributes,function(val,key) {\n\t\tif(key.charAt(0) !== \"$\") {\n\t\t\tself.setVariable(key,val);\n\t\t}\n\t});\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nRefresh the widget by ensuring our attributes are up to date\n*/\nVarsWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(Object.keys(changedAttributes).length) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t}\n\treturn this.refreshChildren(changedTiddlers);\n};\n\nexports[\"vars\"] = VarsWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/view.js": {
"title": "$:/core/modules/widgets/view.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/view.js\ntype: application/javascript\nmodule-type: widget\n\nView widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar ViewWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nViewWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nViewWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tif(this.text) {\n\t\tvar textNode = this.document.createTextNode(this.text);\n\t\tparent.insertBefore(textNode,nextSibling);\n\t\tthis.domNodes.push(textNode);\n\t} else {\n\t\tthis.makeChildWidgets();\n\t\tthis.renderChildren(parent,nextSibling);\n\t}\n};\n\n/*\nCompute the internal state of the widget\n*/\nViewWidget.prototype.execute = function() {\n\t// Get parameters from our attributes\n\tthis.viewTitle = this.getAttribute(\"tiddler\",this.getVariable(\"currentTiddler\"));\n\tthis.viewSubtiddler = this.getAttribute(\"subtiddler\");\n\tthis.viewField = this.getAttribute(\"field\",\"text\");\n\tthis.viewIndex = this.getAttribute(\"index\");\n\tthis.viewFormat = this.getAttribute(\"format\",\"text\");\n\tthis.viewTemplate = this.getAttribute(\"template\",\"\");\n\tthis.viewMode = this.getAttribute(\"mode\",\"block\");\n\tswitch(this.viewFormat) {\n\t\tcase \"htmlwikified\":\n\t\t\tthis.text = this.getValueAsHtmlWikified(this.viewMode);\n\t\t\tbreak;\n\t\tcase \"plainwikified\":\n\t\t\tthis.text = this.getValueAsPlainWikified(this.viewMode);\n\t\t\tbreak;\n\t\tcase \"htmlencodedplainwikified\":\n\t\t\tthis.text = this.getValueAsHtmlEncodedPlainWikified(this.viewMode);\n\t\t\tbreak;\n\t\tcase \"htmlencoded\":\n\t\t\tthis.text = this.getValueAsHtmlEncoded();\n\t\t\tbreak;\n\t\tcase \"urlencoded\":\n\t\t\tthis.text = this.getValueAsUrlEncoded();\n\t\t\tbreak;\n\t\tcase \"doubleurlencoded\":\n\t\t\tthis.text = this.getValueAsDoubleUrlEncoded();\n\t\t\tbreak;\n\t\tcase \"date\":\n\t\t\tthis.text = this.getValueAsDate(this.viewTemplate);\n\t\t\tbreak;\n\t\tcase \"relativedate\":\n\t\t\tthis.text = this.getValueAsRelativeDate();\n\t\t\tbreak;\n\t\tcase \"stripcomments\":\n\t\t\tthis.text = this.getValueAsStrippedComments();\n\t\t\tbreak;\n\t\tcase \"jsencoded\":\n\t\t\tthis.text = this.getValueAsJsEncoded();\n\t\t\tbreak;\n\t\tdefault: // \"text\"\n\t\t\tthis.text = this.getValueAsText();\n\t\t\tbreak;\n\t}\n};\n\n/*\nThe various formatter functions are baked into this widget for the moment. Eventually they will be replaced by macro functions\n*/\n\n/*\nRetrieve the value of the widget. Options are:\nasString: Optionally return the value as a string\n*/\nViewWidget.prototype.getValue = function(options) {\n\toptions = options || {};\n\tvar value = options.asString ? \"\" : undefined;\n\tif(this.viewIndex) {\n\t\tvalue = this.wiki.extractTiddlerDataItem(this.viewTitle,this.viewIndex);\n\t} else {\n\t\tvar tiddler;\n\t\tif(this.viewSubtiddler) {\n\t\t\ttiddler = this.wiki.getSubTiddler(this.viewTitle,this.viewSubtiddler);\t\n\t\t} else {\n\t\t\ttiddler = this.wiki.getTiddler(this.viewTitle);\n\t\t}\n\t\tif(tiddler) {\n\t\t\tif(this.viewField === \"text\" && !this.viewSubtiddler) {\n\t\t\t\t// Calling getTiddlerText() triggers lazy loading of skinny tiddlers\n\t\t\t\tvalue = this.wiki.getTiddlerText(this.viewTitle);\n\t\t\t} else {\n\t\t\t\tif($tw.utils.hop(tiddler.fields,this.viewField)) {\n\t\t\t\t\tif(options.asString) {\n\t\t\t\t\t\tvalue = tiddler.getFieldString(this.viewField);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalue = tiddler.fields[this.viewField];\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif(this.viewField === \"title\") {\n\t\t\t\tvalue = this.viewTitle;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n\nViewWidget.prototype.getValueAsText = function() {\n\treturn this.getValue({asString: true});\n};\n\nViewWidget.prototype.getValueAsHtmlWikified = function(mode) {\n\treturn this.wiki.renderText(\"text/html\",\"text/vnd.tiddlywiki\",this.getValueAsText(),{\n\t\tparseAsInline: mode !== \"block\",\n\t\tparentWidget: this\n\t});\n};\n\nViewWidget.prototype.getValueAsPlainWikified = function(mode) {\n\treturn this.wiki.renderText(\"text/plain\",\"text/vnd.tiddlywiki\",this.getValueAsText(),{\n\t\tparseAsInline: mode !== \"block\",\n\t\tparentWidget: this\n\t});\n};\n\nViewWidget.prototype.getValueAsHtmlEncodedPlainWikified = function(mode) {\n\treturn $tw.utils.htmlEncode(this.wiki.renderText(\"text/plain\",\"text/vnd.tiddlywiki\",this.getValueAsText(),{\n\t\tparseAsInline: mode !== \"block\",\n\t\tparentWidget: this\n\t}));\n};\n\nViewWidget.prototype.getValueAsHtmlEncoded = function() {\n\treturn $tw.utils.htmlEncode(this.getValueAsText());\n};\n\nViewWidget.prototype.getValueAsUrlEncoded = function() {\n\treturn encodeURIComponent(this.getValueAsText());\n};\n\nViewWidget.prototype.getValueAsDoubleUrlEncoded = function() {\n\treturn encodeURIComponent(encodeURIComponent(this.getValueAsText()));\n};\n\nViewWidget.prototype.getValueAsDate = function(format) {\n\tformat = format || \"YYYY MM DD 0hh:0mm\";\n\tvar value = $tw.utils.parseDate(this.getValue());\n\tif(value && $tw.utils.isDate(value) && value.toString() !== \"Invalid Date\") {\n\t\treturn $tw.utils.formatDateString(value,format);\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\nViewWidget.prototype.getValueAsRelativeDate = function(format) {\n\tvar value = $tw.utils.parseDate(this.getValue());\n\tif(value && $tw.utils.isDate(value) && value.toString() !== \"Invalid Date\") {\n\t\treturn $tw.utils.getRelativeDate((new Date()) - (new Date(value))).description;\n\t} else {\n\t\treturn \"\";\n\t}\n};\n\nViewWidget.prototype.getValueAsStrippedComments = function() {\n\tvar lines = this.getValueAsText().split(\"\\n\"),\n\t\tout = [];\n\tfor(var line=0; line<lines.length; line++) {\n\t\tvar text = lines[line];\n\t\tif(!/^\\s*\\/\\/#/.test(text)) {\n\t\t\tout.push(text);\n\t\t}\n\t}\n\treturn out.join(\"\\n\");\n};\n\nViewWidget.prototype.getValueAsJsEncoded = function() {\n\treturn $tw.utils.stringify(this.getValueAsText());\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nViewWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\tif(changedAttributes.tiddler || changedAttributes.field || changedAttributes.index || changedAttributes.template || changedAttributes.format || changedTiddlers[this.viewTitle]) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\treturn false;\t\n\t}\n};\n\nexports.view = ViewWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/widget.js": {
"title": "$:/core/modules/widgets/widget.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/widget.js\ntype: application/javascript\nmodule-type: widget\n\nWidget base class\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nCreate a widget object for a parse tree node\n\tparseTreeNode: reference to the parse tree node to be rendered\n\toptions: see below\nOptions include:\n\twiki: mandatory reference to wiki associated with this render tree\n\tparentWidget: optional reference to a parent renderer node for the context chain\n\tdocument: optional document object to use instead of global document\n*/\nvar Widget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInitialise widget properties. These steps are pulled out of the constructor so that we can reuse them in subclasses\n*/\nWidget.prototype.initialise = function(parseTreeNode,options) {\n\t// Bail if parseTreeNode is undefined, meaning that the widget constructor was called without any arguments so that it can be subclassed\n\tif(parseTreeNode === undefined) {\n\t\treturn;\n\t}\n\toptions = options || {};\n\t// Save widget info\n\tthis.parseTreeNode = parseTreeNode;\n\tthis.wiki = options.wiki;\n\tthis.parentWidget = options.parentWidget;\n\tthis.variablesConstructor = function() {};\n\tthis.variablesConstructor.prototype = this.parentWidget ? this.parentWidget.variables : {};\n\tthis.variables = new this.variablesConstructor();\n\tthis.document = options.document;\n\tthis.attributes = {};\n\tthis.children = [];\n\tthis.domNodes = [];\n\tthis.eventListeners = {};\n\t// Hashmap of the widget classes\n\tif(!this.widgetClasses) {\n\t\t// Get widget classes\n\t\tWidget.prototype.widgetClasses = $tw.modules.applyMethods(\"widget\");\n\t\t// Process any subclasses\n\t\t$tw.modules.forEachModuleOfType(\"widget-subclass\",function(title,module) {\n\t\t\tif(module.baseClass) {\n\t\t\t\tvar baseClass = Widget.prototype.widgetClasses[module.baseClass];\n\t\t\t\tif(!baseClass) {\n\t\t\t\t\tthrow \"Module '\" + title + \"' is attemping to extend a non-existent base class '\" + module.baseClass + \"'\";\n\t\t\t\t}\n\t\t\t\tvar subClass = module.constructor;\n\t\t\t\tsubClass.prototype = new baseClass();\n\t\t\t\t$tw.utils.extend(subClass.prototype,module.prototype);\n\t\t\t\tWidget.prototype.widgetClasses[module.name || module.baseClass] = subClass;\n\t\t\t}\n\t\t});\n\t}\n};\n\n/*\nRender this widget into the DOM\n*/\nWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nWidget.prototype.execute = function() {\n\tthis.makeChildWidgets();\n};\n\n/*\nSet the value of a context variable\nname: name of the variable\nvalue: value of the variable\nparams: array of {name:, default:} for each parameter\nisMacroDefinition: true if the variable is set via a \\define macro pragma (and hence should have variable substitution performed)\n*/\nWidget.prototype.setVariable = function(name,value,params,isMacroDefinition) {\n\tthis.variables[name] = {value: value, params: params, isMacroDefinition: !!isMacroDefinition};\n};\n\n/*\nGet the prevailing value of a context variable\nname: name of variable\noptions: see below\nOptions include\nparams: array of {name:, value:} for each parameter\ndefaultValue: default value if the variable is not defined\n\nReturns an object with the following fields:\n\nparams: array of {name:,value:} of parameters passed to wikitext variables\ntext: text of variable, with parameters properly substituted\n*/\nWidget.prototype.getVariableInfo = function(name,options) {\n\toptions = options || {};\n\tvar actualParams = options.params || [],\n\t\tparentWidget = this.parentWidget;\n\t// Check for the variable defined in the parent widget (or an ancestor in the prototype chain)\n\tif(parentWidget && name in parentWidget.variables) {\n\t\tvar variable = parentWidget.variables[name],\n\t\t\tvalue = variable.value,\n\t\t\tparams = this.resolveVariableParameters(variable.params,actualParams);\n\t\t// Substitute any parameters specified in the definition\n\t\t$tw.utils.each(params,function(param) {\n\t\t\tvalue = $tw.utils.replaceString(value,new RegExp(\"\\\\$\" + $tw.utils.escapeRegExp(param.name) + \"\\\\$\",\"mg\"),param.value);\n\t\t});\n\t\t// Only substitute variable references if this variable was defined with the \\define pragma\n\t\tif(variable.isMacroDefinition) {\n\t\t\tvalue = this.substituteVariableReferences(value);\t\t\t\n\t\t}\n\t\treturn {\n\t\t\ttext: value,\n\t\t\tparams: params\n\t\t};\n\t}\n\t// If the variable doesn't exist in the parent widget then look for a macro module\n\treturn {\n\t\ttext: this.evaluateMacroModule(name,actualParams,options.defaultValue)\n\t};\n};\n\n/*\nSimplified version of getVariableInfo() that just returns the text\n*/\nWidget.prototype.getVariable = function(name,options) {\n\treturn this.getVariableInfo(name,options).text;\n};\n\nWidget.prototype.resolveVariableParameters = function(formalParams,actualParams) {\n\tformalParams = formalParams || [];\n\tactualParams = actualParams || [];\n\tvar nextAnonParameter = 0, // Next candidate anonymous parameter in macro call\n\t\tparamInfo, paramValue,\n\t\tresults = [];\n\t// Step through each of the parameters in the macro definition\n\tfor(var p=0; p<formalParams.length; p++) {\n\t\t// Check if we've got a macro call parameter with the same name\n\t\tparamInfo = formalParams[p];\n\t\tparamValue = undefined;\n\t\tfor(var m=0; m<actualParams.length; m++) {\n\t\t\tif(actualParams[m].name === paramInfo.name) {\n\t\t\t\tparamValue = actualParams[m].value;\n\t\t\t}\n\t\t}\n\t\t// If not, use the next available anonymous macro call parameter\n\t\twhile(nextAnonParameter < actualParams.length && actualParams[nextAnonParameter].name) {\n\t\t\tnextAnonParameter++;\n\t\t}\n\t\tif(paramValue === undefined && nextAnonParameter < actualParams.length) {\n\t\t\tparamValue = actualParams[nextAnonParameter++].value;\n\t\t}\n\t\t// If we've still not got a value, use the default, if any\n\t\tparamValue = paramValue || paramInfo[\"default\"] || \"\";\n\t\t// Store the parameter name and value\n\t\tresults.push({name: paramInfo.name, value: paramValue});\n\t}\n\treturn results;\n};\n\nWidget.prototype.substituteVariableReferences = function(text) {\n\tvar self = this;\n\treturn (text || \"\").replace(/\\$\\(([^\\)\\$]+)\\)\\$/g,function(match,p1,offset,string) {\n\t\treturn self.getVariable(p1,{defaultValue: \"\"});\n\t});\n};\n\nWidget.prototype.evaluateMacroModule = function(name,actualParams,defaultValue) {\n\tif($tw.utils.hop($tw.macros,name)) {\n\t\tvar macro = $tw.macros[name],\n\t\t\targs = [];\n\t\tif(macro.params.length > 0) {\n\t\t\tvar nextAnonParameter = 0, // Next candidate anonymous parameter in macro call\n\t\t\t\tparamInfo, paramValue;\n\t\t\t// Step through each of the parameters in the macro definition\n\t\t\tfor(var p=0; p<macro.params.length; p++) {\n\t\t\t\t// Check if we've got a macro call parameter with the same name\n\t\t\t\tparamInfo = macro.params[p];\n\t\t\t\tparamValue = undefined;\n\t\t\t\tfor(var m=0; m<actualParams.length; m++) {\n\t\t\t\t\tif(actualParams[m].name === paramInfo.name) {\n\t\t\t\t\t\tparamValue = actualParams[m].value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// If not, use the next available anonymous macro call parameter\n\t\t\t\twhile(nextAnonParameter < actualParams.length && actualParams[nextAnonParameter].name) {\n\t\t\t\t\tnextAnonParameter++;\n\t\t\t\t}\n\t\t\t\tif(paramValue === undefined && nextAnonParameter < actualParams.length) {\n\t\t\t\t\tparamValue = actualParams[nextAnonParameter++].value;\n\t\t\t\t}\n\t\t\t\t// If we've still not got a value, use the default, if any\n\t\t\t\tparamValue = paramValue || paramInfo[\"default\"] || \"\";\n\t\t\t\t// Save the parameter\n\t\t\t\targs.push(paramValue);\n\t\t\t}\n\t\t}\n\t\telse for(var i=0; i<actualParams.length; ++i) {\n\t\t\targs.push(actualParams[i].value);\n\t\t}\n\t\treturn (macro.run.apply(this,args) || \"\").toString();\n\t} else {\n\t\treturn defaultValue;\n\t}\n};\n\n/*\nCheck whether a given context variable value exists in the parent chain\n*/\nWidget.prototype.hasVariable = function(name,value) {\n\tvar node = this;\n\twhile(node) {\n\t\tif($tw.utils.hop(node.variables,name) && node.variables[name].value === value) {\n\t\t\treturn true;\n\t\t}\n\t\tnode = node.parentWidget;\n\t}\n\treturn false;\n};\n\n/*\nConstruct a qualifying string based on a hash of concatenating the values of a given variable in the parent chain\n*/\nWidget.prototype.getStateQualifier = function(name) {\n\tthis.qualifiers = this.qualifiers || Object.create(null);\n\tname = name || \"transclusion\";\n\tif(this.qualifiers[name]) {\n\t\treturn this.qualifiers[name];\n\t} else {\n\t\tvar output = [],\n\t\t\tnode = this;\n\t\twhile(node && node.parentWidget) {\n\t\t\tif($tw.utils.hop(node.parentWidget.variables,name)) {\n\t\t\t\toutput.push(node.getVariable(name));\n\t\t\t}\n\t\t\tnode = node.parentWidget;\n\t\t}\n\t\tvar value = $tw.utils.hashString(output.join(\"\"));\n\t\tthis.qualifiers[name] = value;\n\t\treturn value;\n\t}\n};\n\n/*\nCompute the current values of the attributes of the widget. Returns a hashmap of the names of the attributes that have changed\n*/\nWidget.prototype.computeAttributes = function() {\n\tvar changedAttributes = {},\n\t\tself = this,\n\t\tvalue;\n\t$tw.utils.each(this.parseTreeNode.attributes,function(attribute,name) {\n\t\tif(attribute.type === \"filtered\") {\n\t\t\tvalue = self.wiki.filterTiddlers(attribute.filter,self)[0] || \"\";\n\t\t} else if(attribute.type === \"indirect\") {\n\t\t\tvalue = self.wiki.getTextReference(attribute.textReference,\"\",self.getVariable(\"currentTiddler\"));\n\t\t} else if(attribute.type === \"macro\") {\n\t\t\tvalue = self.getVariable(attribute.value.name,{params: attribute.value.params});\n\t\t} else { // String attribute\n\t\t\tvalue = attribute.value;\n\t\t}\n\t\t// Check whether the attribute has changed\n\t\tif(self.attributes[name] !== value) {\n\t\t\tself.attributes[name] = value;\n\t\t\tchangedAttributes[name] = true;\n\t\t}\n\t});\n\treturn changedAttributes;\n};\n\n/*\nCheck for the presence of an attribute\n*/\nWidget.prototype.hasAttribute = function(name) {\n\treturn $tw.utils.hop(this.attributes,name);\n};\n\n/*\nGet the value of an attribute\n*/\nWidget.prototype.getAttribute = function(name,defaultText) {\n\tif($tw.utils.hop(this.attributes,name)) {\n\t\treturn this.attributes[name];\n\t} else {\n\t\treturn defaultText;\n\t}\n};\n\n/*\nAssign the computed attributes of the widget to a domNode\noptions include:\nexcludeEventAttributes: ignores attributes whose name begins with \"on\"\n*/\nWidget.prototype.assignAttributes = function(domNode,options) {\n\toptions = options || {};\n\tvar self = this;\n\t$tw.utils.each(this.attributes,function(v,a) {\n\t\t// Check exclusions\n\t\tif(options.excludeEventAttributes && a.substr(0,2) === \"on\") {\n\t\t\tv = undefined;\n\t\t}\n\t\tif(v !== undefined) {\n\t\t\tvar b = a.split(\":\");\n\t\t\t// Setting certain attributes can cause a DOM error (eg xmlns on the svg element)\n\t\t\ttry {\n\t\t\t\tif (b.length == 2 && b[0] == \"xlink\"){\n\t\t\t\t\tdomNode.setAttributeNS(\"http://www.w3.org/1999/xlink\",b[1],v);\n\t\t\t\t} else {\n\t\t\t\t\tdomNode.setAttributeNS(null,a,v);\n\t\t\t\t}\n\t\t\t} catch(e) {\n\t\t\t}\n\t\t}\n\t});\n};\n\n/*\nMake child widgets correspondng to specified parseTreeNodes\n*/\nWidget.prototype.makeChildWidgets = function(parseTreeNodes) {\n\tthis.children = [];\n\tvar self = this;\n\t$tw.utils.each(parseTreeNodes || (this.parseTreeNode && this.parseTreeNode.children),function(childNode) {\n\t\tself.children.push(self.makeChildWidget(childNode));\n\t});\n};\n\n/*\nConstruct the widget object for a parse tree node\n*/\nWidget.prototype.makeChildWidget = function(parseTreeNode) {\n\tvar WidgetClass = this.widgetClasses[parseTreeNode.type];\n\tif(!WidgetClass) {\n\t\tWidgetClass = this.widgetClasses.text;\n\t\tparseTreeNode = {type: \"text\", text: \"Undefined widget '\" + parseTreeNode.type + \"'\"};\n\t}\n\treturn new WidgetClass(parseTreeNode,{\n\t\twiki: this.wiki,\n\t\tvariables: {},\n\t\tparentWidget: this,\n\t\tdocument: this.document\n\t});\n};\n\n/*\nGet the next sibling of this widget\n*/\nWidget.prototype.nextSibling = function() {\n\tif(this.parentWidget) {\n\t\tvar index = this.parentWidget.children.indexOf(this);\n\t\tif(index !== -1 && index < this.parentWidget.children.length-1) {\n\t\t\treturn this.parentWidget.children[index+1];\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nGet the previous sibling of this widget\n*/\nWidget.prototype.previousSibling = function() {\n\tif(this.parentWidget) {\n\t\tvar index = this.parentWidget.children.indexOf(this);\n\t\tif(index !== -1 && index > 0) {\n\t\t\treturn this.parentWidget.children[index-1];\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nRender the children of this widget into the DOM\n*/\nWidget.prototype.renderChildren = function(parent,nextSibling) {\n\tvar children = this.children;\n\tfor(var i = 0; i < children.length; i++) {\n\t\tchildren[i].render(parent,nextSibling);\n\t};\n};\n\n/*\nAdd a list of event listeners from an array [{type:,handler:},...]\n*/\nWidget.prototype.addEventListeners = function(listeners) {\n\tvar self = this;\n\t$tw.utils.each(listeners,function(listenerInfo) {\n\t\tself.addEventListener(listenerInfo.type,listenerInfo.handler);\n\t});\n};\n\n/*\nAdd an event listener\n*/\nWidget.prototype.addEventListener = function(type,handler) {\n\tvar self = this;\n\tif(typeof handler === \"string\") { // The handler is a method name on this widget\n\t\tthis.eventListeners[type] = function(event) {\n\t\t\treturn self[handler].call(self,event);\n\t\t};\n\t} else { // The handler is a function\n\t\tthis.eventListeners[type] = function(event) {\n\t\t\treturn handler.call(self,event);\n\t\t};\n\t}\n};\n\n/*\nDispatch an event to a widget. If the widget doesn't handle the event then it is also dispatched to the parent widget\n*/\nWidget.prototype.dispatchEvent = function(event) {\n\t// Dispatch the event if this widget handles it\n\tvar listener = this.eventListeners[event.type];\n\tif(listener) {\n\t\t// Don't propagate the event if the listener returned false\n\t\tif(!listener(event)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\t// Dispatch the event to the parent widget\n\tif(this.parentWidget) {\n\t\treturn this.parentWidget.dispatchEvent(event);\n\t}\n\treturn true;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nWidget.prototype.refresh = function(changedTiddlers) {\n\treturn this.refreshChildren(changedTiddlers);\n};\n\n/*\nRebuild a previously rendered widget\n*/\nWidget.prototype.refreshSelf = function() {\n\tvar nextSibling = this.findNextSiblingDomNode();\n\tthis.removeChildDomNodes();\n\tthis.render(this.parentDomNode,nextSibling);\n};\n\n/*\nRefresh all the children of a widget\n*/\nWidget.prototype.refreshChildren = function(changedTiddlers) {\n\tvar children = this.children,\n\t\trefreshed = false;\n\tfor (var i = 0; i < children.length; i++) {\n\t\trefreshed = children[i].refresh(changedTiddlers) || refreshed;\n\t}\n\treturn refreshed;\n};\n\n/*\nFind the next sibling in the DOM to this widget. This is done by scanning the widget tree through all next siblings and their descendents that share the same parent DOM node\n*/\nWidget.prototype.findNextSiblingDomNode = function(startIndex) {\n\t// Refer to this widget by its index within its parents children\n\tvar parent = this.parentWidget,\n\t\tindex = startIndex !== undefined ? startIndex : parent.children.indexOf(this);\nif(index === -1) {\n\tthrow \"node not found in parents children\";\n}\n\t// Look for a DOM node in the later siblings\n\twhile(++index < parent.children.length) {\n\t\tvar domNode = parent.children[index].findFirstDomNode();\n\t\tif(domNode) {\n\t\t\treturn domNode;\n\t\t}\n\t}\n\t// Go back and look for later siblings of our parent if it has the same parent dom node\n\tvar grandParent = parent.parentWidget;\n\tif(grandParent && parent.parentDomNode === this.parentDomNode) {\n\t\tindex = grandParent.children.indexOf(parent);\n\t\tif(index !== -1) {\n\t\t\treturn parent.findNextSiblingDomNode(index);\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nFind the first DOM node generated by a widget or its children\n*/\nWidget.prototype.findFirstDomNode = function() {\n\t// Return the first dom node of this widget, if we've got one\n\tif(this.domNodes.length > 0) {\n\t\treturn this.domNodes[0];\n\t}\n\t// Otherwise, recursively call our children\n\tfor(var t=0; t<this.children.length; t++) {\n\t\tvar domNode = this.children[t].findFirstDomNode();\n\t\tif(domNode) {\n\t\t\treturn domNode;\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nRemove any DOM nodes created by this widget or its children\n*/\nWidget.prototype.removeChildDomNodes = function() {\n\t// If this widget has directly created DOM nodes, delete them and exit. This assumes that any child widgets are contained within the created DOM nodes, which would normally be the case\n\tif(this.domNodes.length > 0) {\n\t\t$tw.utils.each(this.domNodes,function(domNode) {\n\t\t\tdomNode.parentNode.removeChild(domNode);\n\t\t});\n\t\tthis.domNodes = [];\n\t} else {\n\t\t// Otherwise, ask the child widgets to delete their DOM nodes\n\t\t$tw.utils.each(this.children,function(childWidget) {\n\t\t\tchildWidget.removeChildDomNodes();\n\t\t});\n\t}\n};\n\n/*\nInvoke the action widgets that are descendents of the current widget.\n*/\nWidget.prototype.invokeActions = function(triggeringWidget,event) {\n\tvar handled = false;\n\t// For each child widget\n\tfor(var t=0; t<this.children.length; t++) {\n\t\tvar child = this.children[t];\n\t\t// Invoke the child if it is an action widget\n\t\tif(child.invokeAction) {\n\t\t\tchild.refreshSelf();\n\t\t\tif(child.invokeAction(triggeringWidget,event)) {\n\t\t\t\thandled = true;\n\t\t\t}\n\t\t}\n\t\t// Propagate through through the child if it permits it\n\t\tif(child.allowActionPropagation() && child.invokeActions(triggeringWidget,event)) {\n\t\t\thandled = true;\n\t\t}\n\t}\n\treturn handled;\n};\n\n/*\nInvoke the action widgets defined in a string\n*/\nWidget.prototype.invokeActionString = function(actions,triggeringWidget,event,variables) {\n\tactions = actions || \"\";\n\tvar parser = this.wiki.parseText(\"text/vnd.tiddlywiki\",actions,{\n\t\t\tparentWidget: this,\n\t\t\tdocument: this.document\n\t\t}),\n\t\twidgetNode = this.wiki.makeWidget(parser,{\n\t\t\tparentWidget: this,\n\t\t\tdocument: this.document,\n\t\t\tvariables: variables\n\t\t});\n\tvar container = this.document.createElement(\"div\");\n\twidgetNode.render(container,null);\n\treturn widgetNode.invokeActions(this,event);\n};\n\nWidget.prototype.allowActionPropagation = function() {\n\treturn true;\n};\n\nexports.widget = Widget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/widgets/wikify.js": {
"title": "$:/core/modules/widgets/wikify.js",
"text": "/*\\\ntitle: $:/core/modules/widgets/wikify.js\ntype: application/javascript\nmodule-type: widget\n\nWidget to wikify text into a variable\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nvar WikifyWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n};\n\n/*\nInherit from the base widget class\n*/\nWikifyWidget.prototype = new Widget();\n\n/*\nRender this widget into the DOM\n*/\nWikifyWidget.prototype.render = function(parent,nextSibling) {\n\tthis.parentDomNode = parent;\n\tthis.computeAttributes();\n\tthis.execute();\n\tthis.renderChildren(parent,nextSibling);\n};\n\n/*\nCompute the internal state of the widget\n*/\nWikifyWidget.prototype.execute = function() {\n\t// Get our parameters\n\tthis.wikifyName = this.getAttribute(\"name\");\n\tthis.wikifyText = this.getAttribute(\"text\");\n\tthis.wikifyType = this.getAttribute(\"type\");\n\tthis.wikifyMode = this.getAttribute(\"mode\",\"block\");\n\tthis.wikifyOutput = this.getAttribute(\"output\",\"text\");\n\t// Create the parse tree\n\tthis.wikifyParser = this.wiki.parseText(this.wikifyType,this.wikifyText,{\n\t\t\tparseAsInline: this.wikifyMode === \"inline\"\n\t\t});\n\t// Create the widget tree \n\tthis.wikifyWidgetNode = this.wiki.makeWidget(this.wikifyParser,{\n\t\t\tdocument: $tw.fakeDocument,\n\t\t\tparentWidget: this\n\t\t});\n\t// Render the widget tree to the container\n\tthis.wikifyContainer = $tw.fakeDocument.createElement(\"div\");\n\tthis.wikifyWidgetNode.render(this.wikifyContainer,null);\n\tthis.wikifyResult = this.getResult();\n\t// Set context variable\n\tthis.setVariable(this.wikifyName,this.wikifyResult);\n\t// Construct the child widgets\n\tthis.makeChildWidgets();\n};\n\n/*\nReturn the result string\n*/\nWikifyWidget.prototype.getResult = function() {\n\tvar result;\n\tswitch(this.wikifyOutput) {\n\t\tcase \"text\":\n\t\t\tresult = this.wikifyContainer.textContent;\n\t\t\tbreak;\n\t\tcase \"formattedtext\":\n\t\t\tresult = this.wikifyContainer.formattedTextContent;\n\t\t\tbreak;\n\t\tcase \"html\":\n\t\t\tresult = this.wikifyContainer.innerHTML;\n\t\t\tbreak;\n\t\tcase \"parsetree\":\n\t\t\tresult = JSON.stringify(this.wikifyParser.tree,0,$tw.config.preferences.jsonSpaces);\n\t\t\tbreak;\n\t\tcase \"widgettree\":\n\t\t\tresult = JSON.stringify(this.getWidgetTree(),0,$tw.config.preferences.jsonSpaces);\n\t\t\tbreak;\n\t}\n\treturn result;\n};\n\n/*\nReturn a string of the widget tree\n*/\nWikifyWidget.prototype.getWidgetTree = function() {\n\tvar copyNode = function(widgetNode,resultNode) {\n\t\t\tvar type = widgetNode.parseTreeNode.type;\n\t\t\tresultNode.type = type;\n\t\t\tswitch(type) {\n\t\t\t\tcase \"element\":\n\t\t\t\t\tresultNode.tag = widgetNode.parseTreeNode.tag;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"text\":\n\t\t\t\t\tresultNode.text = widgetNode.parseTreeNode.text;\n\t\t\t\t\tbreak;\t\n\t\t\t}\n\t\t\tif(Object.keys(widgetNode.attributes || {}).length > 0) {\n\t\t\t\tresultNode.attributes = {};\n\t\t\t\t$tw.utils.each(widgetNode.attributes,function(attr,attrName) {\n\t\t\t\t\tresultNode.attributes[attrName] = widgetNode.getAttribute(attrName);\n\t\t\t\t});\n\t\t\t}\n\t\t\tif(Object.keys(widgetNode.children || {}).length > 0) {\n\t\t\t\tresultNode.children = [];\n\t\t\t\t$tw.utils.each(widgetNode.children,function(widgetChildNode) {\n\t\t\t\t\tvar node = {};\n\t\t\t\t\tresultNode.children.push(node);\n\t\t\t\t\tcopyNode(widgetChildNode,node);\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\t\tresults = {};\n\tcopyNode(this.wikifyWidgetNode,results);\n\treturn results;\n};\n\n/*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\nWikifyWidget.prototype.refresh = function(changedTiddlers) {\n\tvar changedAttributes = this.computeAttributes();\n\t// Refresh ourselves entirely if any of our attributes have changed\n\tif(changedAttributes.name || changedAttributes.text || changedAttributes.type || changedAttributes.mode || changedAttributes.output) {\n\t\tthis.refreshSelf();\n\t\treturn true;\n\t} else {\n\t\t// Refresh the widget tree\n\t\tif(this.wikifyWidgetNode.refresh(changedTiddlers)) {\n\t\t\t// Check if there was any change\n\t\t\tvar result = this.getResult();\n\t\t\tif(result !== this.wikifyResult) {\n\t\t\t\t// If so, save the change\n\t\t\t\tthis.wikifyResult = result;\n\t\t\t\tthis.setVariable(this.wikifyName,this.wikifyResult);\n\t\t\t\t// Refresh each of our child widgets\n\t\t\t\t$tw.utils.each(this.children,function(childWidget) {\n\t\t\t\t\tchildWidget.refreshSelf();\n\t\t\t\t});\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\t// Just refresh the children\n\t\treturn this.refreshChildren(changedTiddlers);\n\t}\n};\n\nexports.wikify = WikifyWidget;\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/core/modules/wiki-bulkops.js": {
"title": "$:/core/modules/wiki-bulkops.js",
"text": "/*\\\ntitle: $:/core/modules/wiki-bulkops.js\ntype: application/javascript\nmodule-type: wikimethod\n\nBulk tiddler operations such as rename.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nRename a tiddler, and relink any tags or lists that reference it.\n*/\nfunction renameTiddler(fromTitle,toTitle,options) {\n\tfromTitle = (fromTitle || \"\").trim();\n\ttoTitle = (toTitle || \"\").trim();\n\toptions = options || {};\n\tif(fromTitle && toTitle && fromTitle !== toTitle) {\n\t\t// Rename the tiddler itself\n\t\tvar oldTiddler = this.getTiddler(fromTitle),\n\t\t\tnewTiddler = new $tw.Tiddler(oldTiddler,{title: toTitle},this.getModificationFields());\n\t\tnewTiddler = $tw.hooks.invokeHook(\"th-renaming-tiddler\",newTiddler,oldTiddler);\n\t\tthis.addTiddler(newTiddler);\n\t\tthis.deleteTiddler(fromTitle);\n\t\t// Rename any tags or lists that reference it\n\t\tthis.relinkTiddler(fromTitle,toTitle,options)\n\t}\n}\n\n/*\nRelink any tags or lists that reference a given tiddler\n*/\nfunction relinkTiddler(fromTitle,toTitle,options) {\n\tvar self = this;\n\tfromTitle = (fromTitle || \"\").trim();\n\ttoTitle = (toTitle || \"\").trim();\n\toptions = options || {};\n\tif(fromTitle && toTitle && fromTitle !== toTitle) {\n\t\tthis.each(function(tiddler,title) {\n\t\t\tvar type = tiddler.fields.type || \"\";\n\t\t\t// Don't touch plugins or JavaScript modules\n\t\t\tif(!tiddler.fields[\"plugin-type\"] && type !== \"application/javascript\") {\n\t\t\t\tvar tags = tiddler.fields.tags ? tiddler.fields.tags.slice(0) : undefined,\n\t\t\t\t\tlist = tiddler.fields.list ? tiddler.fields.list.slice(0) : undefined,\n\t\t\t\t\tisModified = false;\n\t\t\t\tif(!options.dontRenameInTags) {\n\t\t\t\t\t// Rename tags\n\t\t\t\t\t$tw.utils.each(tags,function (title,index) {\n\t\t\t\t\t\tif(title === fromTitle) {\nconsole.log(\"Renaming tag '\" + tags[index] + \"' to '\" + toTitle + \"' of tiddler '\" + tiddler.fields.title + \"'\");\n\t\t\t\t\t\t\ttags[index] = toTitle;\n\t\t\t\t\t\t\tisModified = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif(!options.dontRenameInLists) {\n\t\t\t\t\t// Rename lists\n\t\t\t\t\t$tw.utils.each(list,function (title,index) {\n\t\t\t\t\t\tif(title === fromTitle) {\nconsole.log(\"Renaming list item '\" + list[index] + \"' to '\" + toTitle + \"' of tiddler '\" + tiddler.fields.title + \"'\");\n\t\t\t\t\t\t\tlist[index] = toTitle;\n\t\t\t\t\t\t\tisModified = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif(isModified) {\n\t\t\t\t\tvar newTiddler = new $tw.Tiddler(tiddler,{tags: tags, list: list},self.getModificationFields())\n\t\t\t\t\tnewTiddler = $tw.hooks.invokeHook(\"th-relinking-tiddler\",newTiddler,tiddler);\n\t\t\t\t\tself.addTiddler(newTiddler);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n};\n\nexports.renameTiddler = renameTiddler;\nexports.relinkTiddler = relinkTiddler;\n\n})();\n",
"type": "application/javascript",
"module-type": "wikimethod"
},
"$:/core/modules/wiki.js": {
"title": "$:/core/modules/wiki.js",
"text": "/*\\\ntitle: $:/core/modules/wiki.js\ntype: application/javascript\nmodule-type: wikimethod\n\nExtension methods for the $tw.Wiki object\n\nAdds the following properties to the wiki object:\n\n* `eventListeners` is a hashmap by type of arrays of listener functions\n* `changedTiddlers` is a hashmap describing changes to named tiddlers since wiki change events were last dispatched. Each entry is a hashmap containing two fields:\n\tmodified: true/false\n\tdeleted: true/false\n* `changeCount` is a hashmap by tiddler title containing a numerical index that starts at zero and is incremented each time a tiddler is created changed or deleted\n* `caches` is a hashmap by tiddler title containing a further hashmap of named cache objects. Caches are automatically cleared when a tiddler is modified or deleted\n* `globalCache` is a hashmap by cache name of cache objects that are cleared whenever any tiddler change occurs\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar widget = require(\"$:/core/modules/widgets/widget.js\");\n\nvar USER_NAME_TITLE = \"$:/status/UserName\",\n\tTIMESTAMP_DISABLE_TITLE = \"$:/config/TimestampDisable\";\n\n/*\nAdd available indexers to this wiki\n*/\nexports.addIndexersToWiki = function() {\n\tvar self = this;\n\t$tw.utils.each($tw.modules.applyMethods(\"indexer\"),function(Indexer,name) {\n\t\tself.addIndexer(new Indexer(self),name);\n\t});\n};\n\n/*\nGet the value of a text reference. Text references can have any of these forms:\n\t<tiddlertitle>\n\t<tiddlertitle>!!<fieldname>\n\t!!<fieldname> - specifies a field of the current tiddlers\n\t<tiddlertitle>##<index>\n*/\nexports.getTextReference = function(textRef,defaultText,currTiddlerTitle) {\n\tvar tr = $tw.utils.parseTextReference(textRef),\n\t\ttitle = tr.title || currTiddlerTitle;\n\tif(tr.field) {\n\t\tvar tiddler = this.getTiddler(title);\n\t\tif(tr.field === \"title\") { // Special case so we can return the title of a non-existent tiddler\n\t\t\treturn title;\n\t\t} else if(tiddler && $tw.utils.hop(tiddler.fields,tr.field)) {\n\t\t\treturn tiddler.getFieldString(tr.field);\n\t\t} else {\n\t\t\treturn defaultText;\n\t\t}\n\t} else if(tr.index) {\n\t\treturn this.extractTiddlerDataItem(title,tr.index,defaultText);\n\t} else {\n\t\treturn this.getTiddlerText(title,defaultText);\n\t}\n};\n\nexports.setTextReference = function(textRef,value,currTiddlerTitle) {\n\tvar tr = $tw.utils.parseTextReference(textRef),\n\t\ttitle = tr.title || currTiddlerTitle;\n\tthis.setText(title,tr.field,tr.index,value);\n};\n\nexports.setText = function(title,field,index,value,options) {\n\toptions = options || {};\n\tvar creationFields = options.suppressTimestamp ? {} : this.getCreationFields(),\n\t\tmodificationFields = options.suppressTimestamp ? {} : this.getModificationFields();\n\t// Check if it is a reference to a tiddler field\n\tif(index) {\n\t\tvar data = this.getTiddlerData(title,Object.create(null));\n\t\tif(value !== undefined) {\n\t\t\tdata[index] = value;\n\t\t} else {\n\t\t\tdelete data[index];\n\t\t}\n\t\tthis.setTiddlerData(title,data,modificationFields);\n\t} else {\n\t\tvar tiddler = this.getTiddler(title),\n\t\t\tfields = {title: title};\n\t\tfields[field || \"text\"] = value;\n\t\tthis.addTiddler(new $tw.Tiddler(creationFields,tiddler,fields,modificationFields));\n\t}\n};\n\nexports.deleteTextReference = function(textRef,currTiddlerTitle) {\n\tvar tr = $tw.utils.parseTextReference(textRef),\n\t\ttitle,tiddler,fields;\n\t// Check if it is a reference to a tiddler\n\tif(tr.title && !tr.field) {\n\t\tthis.deleteTiddler(tr.title);\n\t// Else check for a field reference\n\t} else if(tr.field) {\n\t\ttitle = tr.title || currTiddlerTitle;\n\t\ttiddler = this.getTiddler(title);\n\t\tif(tiddler && $tw.utils.hop(tiddler.fields,tr.field)) {\n\t\t\tfields = Object.create(null);\n\t\t\tfields[tr.field] = undefined;\n\t\t\tthis.addTiddler(new $tw.Tiddler(tiddler,fields,this.getModificationFields()));\n\t\t}\n\t}\n};\n\nexports.addEventListener = function(type,listener) {\n\tthis.eventListeners = this.eventListeners || {};\n\tthis.eventListeners[type] = this.eventListeners[type] || [];\n\tthis.eventListeners[type].push(listener);\t\n};\n\nexports.removeEventListener = function(type,listener) {\n\tvar listeners = this.eventListeners[type];\n\tif(listeners) {\n\t\tvar p = listeners.indexOf(listener);\n\t\tif(p !== -1) {\n\t\t\tlisteners.splice(p,1);\n\t\t}\n\t}\n};\n\nexports.dispatchEvent = function(type /*, args */) {\n\tvar args = Array.prototype.slice.call(arguments,1),\n\t\tlisteners = this.eventListeners[type];\n\tif(listeners) {\n\t\tfor(var p=0; p<listeners.length; p++) {\n\t\t\tvar listener = listeners[p];\n\t\t\tlistener.apply(listener,args);\n\t\t}\n\t}\n};\n\n/*\nCauses a tiddler to be marked as changed, incrementing the change count, and triggers event handlers.\nThis method should be called after the changes it describes have been made to the wiki.tiddlers[] array.\n\ttitle: Title of tiddler\n\tisDeleted: defaults to false (meaning the tiddler has been created or modified),\n\t\ttrue if the tiddler has been deleted\n*/\nexports.enqueueTiddlerEvent = function(title,isDeleted) {\n\t// Record the touch in the list of changed tiddlers\n\tthis.changedTiddlers = this.changedTiddlers || Object.create(null);\n\tthis.changedTiddlers[title] = this.changedTiddlers[title] || Object.create(null);\n\tthis.changedTiddlers[title][isDeleted ? \"deleted\" : \"modified\"] = true;\n\t// Increment the change count\n\tthis.changeCount = this.changeCount || Object.create(null);\n\tif($tw.utils.hop(this.changeCount,title)) {\n\t\tthis.changeCount[title]++;\n\t} else {\n\t\tthis.changeCount[title] = 1;\n\t}\n\t// Trigger events\n\tthis.eventListeners = this.eventListeners || {};\n\tif(!this.eventsTriggered) {\n\t\tvar self = this;\n\t\t$tw.utils.nextTick(function() {\n\t\t\tvar changes = self.changedTiddlers;\n\t\t\tself.changedTiddlers = Object.create(null);\n\t\t\tself.eventsTriggered = false;\n\t\t\tif($tw.utils.count(changes) > 0) {\n\t\t\t\tself.dispatchEvent(\"change\",changes);\n\t\t\t}\n\t\t});\n\t\tthis.eventsTriggered = true;\n\t}\n};\n\nexports.getSizeOfTiddlerEventQueue = function() {\n\treturn $tw.utils.count(this.changedTiddlers);\n};\n\nexports.clearTiddlerEventQueue = function() {\n\tthis.changedTiddlers = Object.create(null);\n\tthis.changeCount = Object.create(null);\n};\n\nexports.getChangeCount = function(title) {\n\tthis.changeCount = this.changeCount || Object.create(null);\n\tif($tw.utils.hop(this.changeCount,title)) {\n\t\treturn this.changeCount[title];\n\t} else {\n\t\treturn 0;\n\t}\n};\n\n/*\nGenerate an unused title from the specified base\n*/\nexports.generateNewTitle = function(baseTitle,options) {\n\toptions = options || {};\n\tvar c = 0,\n\t\ttitle = baseTitle;\n\twhile(this.tiddlerExists(title) || this.isShadowTiddler(title) || this.findDraft(title)) {\n\t\ttitle = baseTitle + \n\t\t\t(options.prefix || \" \") + \n\t\t\t(++c);\n\t}\n\treturn title;\n};\n\nexports.isSystemTiddler = function(title) {\n\treturn title && title.indexOf(\"$:/\") === 0;\n};\n\nexports.isTemporaryTiddler = function(title) {\n\treturn title && title.indexOf(\"$:/temp/\") === 0;\n};\n\nexports.isImageTiddler = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\t\t\n\t\tvar contentTypeInfo = $tw.config.contentTypeInfo[tiddler.fields.type || \"text/vnd.tiddlywiki\"];\n\t\treturn !!contentTypeInfo && contentTypeInfo.flags.indexOf(\"image\") !== -1;\n\t} else {\n\t\treturn null;\n\t}\n};\n\nexports.isBinaryTiddler = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\t\t\n\t\tvar contentTypeInfo = $tw.config.contentTypeInfo[tiddler.fields.type || \"text/vnd.tiddlywiki\"];\n\t\treturn !!contentTypeInfo && contentTypeInfo.encoding === \"base64\";\n\t} else {\n\t\treturn null;\n\t}\n};\n\n/*\nLike addTiddler() except it will silently reject any plugin tiddlers that are older than the currently loaded version. Returns true if the tiddler was imported\n*/\nexports.importTiddler = function(tiddler) {\n\tvar existingTiddler = this.getTiddler(tiddler.fields.title);\n\t// Check if we're dealing with a plugin\n\tif(tiddler && tiddler.hasField(\"plugin-type\") && tiddler.hasField(\"version\") && existingTiddler && existingTiddler.hasField(\"plugin-type\") && existingTiddler.hasField(\"version\")) {\n\t\t// Reject the incoming plugin if it is older\n\t\tif(!$tw.utils.checkVersions(tiddler.fields.version,existingTiddler.fields.version)) {\n\t\t\treturn false;\n\t\t}\n\t}\n\t// Fall through to adding the tiddler\n\tthis.addTiddler(tiddler);\n\treturn true;\n};\n\n/*\nReturn a hashmap of the fields that should be set when a tiddler is created\n*/\nexports.getCreationFields = function() {\n\tif(this.getTiddlerText(TIMESTAMP_DISABLE_TITLE,\"\").toLowerCase() !== \"yes\") {\n\t\tvar fields = {\n\t\t\t\tcreated: new Date()\n\t\t\t},\n\t\t\tcreator = this.getTiddlerText(USER_NAME_TITLE);\n\t\tif(creator) {\n\t\t\tfields.creator = creator;\n\t\t}\n\t\treturn fields;\n\t} else {\n\t\treturn {};\n\t}\n};\n\n/*\nReturn a hashmap of the fields that should be set when a tiddler is modified\n*/\nexports.getModificationFields = function() {\n\tif(this.getTiddlerText(TIMESTAMP_DISABLE_TITLE,\"\").toLowerCase() !== \"yes\") {\n\t\tvar fields = Object.create(null),\n\t\t\tmodifier = this.getTiddlerText(USER_NAME_TITLE);\n\t\tfields.modified = new Date();\n\t\tif(modifier) {\n\t\t\tfields.modifier = modifier;\n\t\t}\n\t\treturn fields;\n\t} else {\n\t\treturn {};\n\t}\n};\n\n/*\nReturn a sorted array of tiddler titles. Options include:\nsortField: field to sort by\nexcludeTag: tag to exclude\nincludeSystem: whether to include system tiddlers (defaults to false)\n*/\nexports.getTiddlers = function(options) {\n\toptions = options || Object.create(null);\n\tvar self = this,\n\t\tsortField = options.sortField || \"title\",\n\t\ttiddlers = [], t, titles = [];\n\tthis.each(function(tiddler,title) {\n\t\tif(options.includeSystem || !self.isSystemTiddler(title)) {\n\t\t\tif(!options.excludeTag || !tiddler.hasTag(options.excludeTag)) {\n\t\t\t\ttiddlers.push(tiddler);\n\t\t\t}\n\t\t}\n\t});\n\ttiddlers.sort(function(a,b) {\n\t\tvar aa = a.fields[sortField].toLowerCase() || \"\",\n\t\t\tbb = b.fields[sortField].toLowerCase() || \"\";\n\t\tif(aa < bb) {\n\t\t\treturn -1;\n\t\t} else {\n\t\t\tif(aa > bb) {\n\t\t\t\treturn 1;\n\t\t\t} else {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t}\n\t});\n\tfor(t=0; t<tiddlers.length; t++) {\n\t\ttitles.push(tiddlers[t].fields.title);\n\t}\n\treturn titles;\n};\n\nexports.countTiddlers = function(excludeTag) {\n\tvar tiddlers = this.getTiddlers({excludeTag: excludeTag});\n\treturn $tw.utils.count(tiddlers);\n};\n\n/*\nReturns a function iterator(callback) that iterates through the specified titles, and invokes the callback with callback(tiddler,title)\n*/\nexports.makeTiddlerIterator = function(titles) {\n\tvar self = this;\n\tif(!$tw.utils.isArray(titles)) {\n\t\ttitles = Object.keys(titles);\n\t} else {\n\t\ttitles = titles.slice(0);\n\t}\n\treturn function(callback) {\n\t\ttitles.forEach(function(title) {\n\t\t\tcallback(self.getTiddler(title),title);\n\t\t});\n\t};\n};\n\n/*\nSort an array of tiddler titles by a specified field\n\ttitles: array of titles (sorted in place)\n\tsortField: name of field to sort by\n\tisDescending: true if the sort should be descending\n\tisCaseSensitive: true if the sort should consider upper and lower case letters to be different\n*/\nexports.sortTiddlers = function(titles,sortField,isDescending,isCaseSensitive,isNumeric,isAlphaNumeric) {\n\tvar self = this;\n\ttitles.sort(function(a,b) {\n\t\tvar x,y,\n\t\t\tcompareNumbers = function(x,y) {\n\t\t\t\tvar result = \n\t\t\t\t\tisNaN(x) && !isNaN(y) ? (isDescending ? -1 : 1) :\n\t\t\t\t\t!isNaN(x) && isNaN(y) ? (isDescending ? 1 : -1) :\n\t\t\t\t\t\t\t\t\t\t\t(isDescending ? y - x : x - y);\n\t\t\t\treturn result;\n\t\t\t};\n\t\tif(sortField !== \"title\") {\n\t\t\tvar tiddlerA = self.getTiddler(a),\n\t\t\t\ttiddlerB = self.getTiddler(b);\n\t\t\tif(tiddlerA) {\n\t\t\t\ta = tiddlerA.fields[sortField] || \"\";\n\t\t\t} else {\n\t\t\t\ta = \"\";\n\t\t\t}\n\t\t\tif(tiddlerB) {\n\t\t\t\tb = tiddlerB.fields[sortField] || \"\";\n\t\t\t} else {\n\t\t\t\tb = \"\";\n\t\t\t}\n\t\t}\n\t\tx = Number(a);\n\t\ty = Number(b);\n\t\tif(isNumeric && (!isNaN(x) || !isNaN(y))) {\n\t\t\treturn compareNumbers(x,y);\n\t\t} else if(isAlphaNumeric) {\n\t\t\treturn isDescending ? b.localeCompare(a,undefined,{numeric: true,sensitivity: \"base\"}) : a.localeCompare(b,undefined,{numeric: true,sensitivity: \"base\"});\n\t\t} else if($tw.utils.isDate(a) && $tw.utils.isDate(b)) {\n\t\t\treturn isDescending ? b - a : a - b;\n\t\t} else {\n\t\t\ta = String(a);\n\t\t\tb = String(b);\n\t\t\tif(!isCaseSensitive) {\n\t\t\t\ta = a.toLowerCase();\n\t\t\t\tb = b.toLowerCase();\n\t\t\t}\n\t\t\treturn isDescending ? b.localeCompare(a) : a.localeCompare(b);\n\t\t}\n\t});\n};\n\n/*\nFor every tiddler invoke a callback(title,tiddler) with `this` set to the wiki object. Options include:\nsortField: field to sort by\nexcludeTag: tag to exclude\nincludeSystem: whether to include system tiddlers (defaults to false)\n*/\nexports.forEachTiddler = function(/* [options,]callback */) {\n\tvar arg = 0,\n\t\toptions = arguments.length >= 2 ? arguments[arg++] : {},\n\t\tcallback = arguments[arg++],\n\t\ttitles = this.getTiddlers(options),\n\t\tt, tiddler;\n\tfor(t=0; t<titles.length; t++) {\n\t\ttiddler = this.getTiddler(titles[t]);\n\t\tif(tiddler) {\n\t\t\tcallback.call(this,tiddler.fields.title,tiddler);\n\t\t}\n\t}\n};\n\n/*\nReturn an array of tiddler titles that are directly linked within the given parse tree\n */\nexports.extractLinks = function(parseTreeRoot) {\n\t// Count up the links\n\tvar links = [],\n\t\tcheckParseTree = function(parseTree) {\n\t\t\tfor(var t=0; t<parseTree.length; t++) {\n\t\t\t\tvar parseTreeNode = parseTree[t];\n\t\t\t\tif(parseTreeNode.type === \"link\" && parseTreeNode.attributes.to && parseTreeNode.attributes.to.type === \"string\") {\n\t\t\t\t\tvar value = parseTreeNode.attributes.to.value;\n\t\t\t\t\tif(links.indexOf(value) === -1) {\n\t\t\t\t\t\tlinks.push(value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(parseTreeNode.children) {\n\t\t\t\t\tcheckParseTree(parseTreeNode.children);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\tcheckParseTree(parseTreeRoot);\n\treturn links;\n};\n\n/*\nReturn an array of tiddler titles that are directly linked from the specified tiddler\n*/\nexports.getTiddlerLinks = function(title) {\n\tvar self = this;\n\t// We'll cache the links so they only get computed if the tiddler changes\n\treturn this.getCacheForTiddler(title,\"links\",function() {\n\t\t// Parse the tiddler\n\t\tvar parser = self.parseTiddler(title);\n\t\tif(parser) {\n\t\t\treturn self.extractLinks(parser.tree);\n\t\t}\n\t\treturn [];\n\t});\n};\n\n/*\nReturn an array of tiddler titles that link to the specified tiddler\n*/\nexports.getTiddlerBacklinks = function(targetTitle) {\n\tvar self = this,\n\t\tbacklinksIndexer = this.getIndexer(\"BacklinksIndexer\"),\n\t\tbacklinks = backlinksIndexer && backlinksIndexer.lookup(targetTitle);\n\n\tif(!backlinks) {\n\t\tbacklinks = [];\n\t\tthis.forEachTiddler(function(title,tiddler) {\n\t\t\tvar links = self.getTiddlerLinks(title);\n\t\t\tif(links.indexOf(targetTitle) !== -1) {\n\t\t\t\tbacklinks.push(title);\n\t\t\t}\n\t\t});\n\t}\n\treturn backlinks;\n};\n\n/*\nReturn a hashmap of tiddler titles that are referenced but not defined. Each value is the number of times the missing tiddler is referenced\n*/\nexports.getMissingTitles = function() {\n\tvar self = this,\n\t\tmissing = [];\n// We should cache the missing tiddler list, even if we recreate it every time any tiddler is modified\n\tthis.forEachTiddler(function(title,tiddler) {\n\t\tvar links = self.getTiddlerLinks(title);\n\t\t$tw.utils.each(links,function(link) {\n\t\t\tif((!self.tiddlerExists(link) && !self.isShadowTiddler(link)) && missing.indexOf(link) === -1) {\n\t\t\t\tmissing.push(link);\n\t\t\t}\n\t\t});\n\t});\n\treturn missing;\n};\n\nexports.getOrphanTitles = function() {\n\tvar self = this,\n\t\torphans = this.getTiddlers();\n\tthis.forEachTiddler(function(title,tiddler) {\n\t\tvar links = self.getTiddlerLinks(title);\n\t\t$tw.utils.each(links,function(link) {\n\t\t\tvar p = orphans.indexOf(link);\n\t\t\tif(p !== -1) {\n\t\t\t\torphans.splice(p,1);\n\t\t\t}\n\t\t});\n\t});\n\treturn orphans; // Todo\n};\n\n/*\nRetrieves a list of the tiddler titles that are tagged with a given tag\n*/\nexports.getTiddlersWithTag = function(tag) {\n\t// Try to use the indexer\n\tvar self = this,\n\t\ttagIndexer = this.getIndexer(\"TagIndexer\"),\n\t\tresults = tagIndexer && tagIndexer.subIndexers[3].lookup(tag);\n\tif(!results) {\n\t\t// If not available, perform a manual scan\n\t\tresults = this.getGlobalCache(\"taglist-\" + tag,function() {\n\t\t\tvar tagmap = self.getTagMap();\n\t\t\treturn self.sortByList(tagmap[tag],tag);\n\t\t});\n\t}\n\treturn results;\n};\n\n/*\nGet a hashmap by tag of arrays of tiddler titles\n*/\nexports.getTagMap = function() {\n\tvar self = this;\n\treturn this.getGlobalCache(\"tagmap\",function() {\n\t\tvar tags = Object.create(null),\n\t\t\tstoreTags = function(tagArray,title) {\n\t\t\t\tif(tagArray) {\n\t\t\t\t\tfor(var index=0; index<tagArray.length; index++) {\n\t\t\t\t\t\tvar tag = tagArray[index];\n\t\t\t\t\t\tif($tw.utils.hop(tags,tag)) {\n\t\t\t\t\t\t\ttags[tag].push(title);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttags[tag] = [title];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\ttitle, tiddler;\n\t\t// Collect up all the tags\n\t\tself.eachShadow(function(tiddler,title) {\n\t\t\tif(!self.tiddlerExists(title)) {\n\t\t\t\ttiddler = self.getTiddler(title);\n\t\t\t\tstoreTags(tiddler.fields.tags,title);\n\t\t\t}\n\t\t});\n\t\tself.each(function(tiddler,title) {\n\t\t\tstoreTags(tiddler.fields.tags,title);\n\t\t});\n\t\treturn tags;\n\t});\n};\n\n/*\nLookup a given tiddler and return a list of all the tiddlers that include it in the specified list field\n*/\nexports.findListingsOfTiddler = function(targetTitle,fieldName) {\n\tfieldName = fieldName || \"list\";\n\tvar titles = [];\n\tthis.each(function(tiddler,title) {\n\t\tvar list = $tw.utils.parseStringArray(tiddler.fields[fieldName]);\n\t\tif(list && list.indexOf(targetTitle) !== -1) {\n\t\t\ttitles.push(title);\n\t\t}\n\t});\n\treturn titles;\n};\n\n/*\nSorts an array of tiddler titles according to an ordered list\n*/\nexports.sortByList = function(array,listTitle) {\n\tvar self = this,\n\t\treplacedTitles = Object.create(null);\n\t// Given a title, this function will place it in the correct location\n\t// within titles.\n\tfunction moveItemInList(title) {\n\t\tif(!$tw.utils.hop(replacedTitles, title)) {\n\t\t\treplacedTitles[title] = true;\n\t\t\tvar newPos = -1,\n\t\t\t\ttiddler = self.getTiddler(title);\n\t\t\tif(tiddler) {\n\t\t\t\tvar beforeTitle = tiddler.fields[\"list-before\"],\n\t\t\t\t\tafterTitle = tiddler.fields[\"list-after\"];\n\t\t\t\tif(beforeTitle === \"\") {\n\t\t\t\t\tnewPos = 0;\n\t\t\t\t} else if(afterTitle === \"\") {\n\t\t\t\t\tnewPos = titles.length;\n\t\t\t\t} else if(beforeTitle) {\n\t\t\t\t\t// if this title is placed relative\n\t\t\t\t\t// to another title, make sure that\n\t\t\t\t\t// title is placed before we place\n\t\t\t\t\t// this one.\n\t\t\t\t\tmoveItemInList(beforeTitle);\n\t\t\t\t\tnewPos = titles.indexOf(beforeTitle);\n\t\t\t\t} else if(afterTitle) {\n\t\t\t\t\t// Same deal\n\t\t\t\t\tmoveItemInList(afterTitle);\n\t\t\t\t\tnewPos = titles.indexOf(afterTitle);\n\t\t\t\t\tif(newPos >= 0) {\n\t\t\t\t\t\t++newPos;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// If a new position is specified, let's move it\n\t\t\t\tif (newPos !== -1) {\n\t\t\t\t\t// get its current Pos, and make sure\n\t\t\t\t\t// sure that it's _actually_ in the list\n\t\t\t\t\t// and that it would _actually_ move\n\t\t\t\t\t// (#4275) We don't bother calling\n\t\t\t\t\t// indexOf unless we have a new\n\t\t\t\t\t// position to work with\n\t\t\t\t\tvar currPos = titles.indexOf(title);\n\t\t\t\t\tif(currPos >= 0 && newPos !== currPos) {\n\t\t\t\t\t\t// move it!\n\t\t\t\t\t\ttitles.splice(currPos,1);\n\t\t\t\t\t\tif(newPos >= currPos) {\n\t\t\t\t\t\t\tnewPos--;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttitles.splice(newPos,0,title);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tvar list = this.getTiddlerList(listTitle);\n\tif(!array || array.length === 0) {\n\t\treturn [];\n\t} else {\n\t\tvar titles = [], t, title;\n\t\t// First place any entries that are present in the list\n\t\tfor(t=0; t<list.length; t++) {\n\t\t\ttitle = list[t];\n\t\t\tif(array.indexOf(title) !== -1) {\n\t\t\t\ttitles.push(title);\n\t\t\t}\n\t\t}\n\t\t// Then place any remaining entries\n\t\tfor(t=0; t<array.length; t++) {\n\t\t\ttitle = array[t];\n\t\t\tif(list.indexOf(title) === -1) {\n\t\t\t\ttitles.push(title);\n\t\t\t}\n\t\t}\n\t\t// Finally obey the list-before and list-after fields of each tiddler in turn\n\t\tvar sortedTitles = titles.slice(0);\n\t\tfor(t=0; t<sortedTitles.length; t++) {\n\t\t\ttitle = sortedTitles[t];\n\t\t\tmoveItemInList(title);\n\t\t}\n\t\treturn titles;\n\t}\n};\n\nexports.getSubTiddler = function(title,subTiddlerTitle) {\n\tvar bundleInfo = this.getPluginInfo(title) || this.getTiddlerDataCached(title);\n\tif(bundleInfo && bundleInfo.tiddlers) {\n\t\tvar subTiddler = bundleInfo.tiddlers[subTiddlerTitle];\n\t\tif(subTiddler) {\n\t\t\treturn new $tw.Tiddler(subTiddler);\n\t\t}\n\t}\n\treturn null;\n};\n\n/*\nRetrieve a tiddler as a JSON string of the fields\n*/\nexports.getTiddlerAsJson = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\n\t\tvar fields = Object.create(null);\n\t\t$tw.utils.each(tiddler.fields,function(value,name) {\n\t\t\tfields[name] = tiddler.getFieldString(name);\n\t\t});\n\t\treturn JSON.stringify(fields);\n\t} else {\n\t\treturn JSON.stringify({title: title});\n\t}\n};\n\nexports.getTiddlersAsJson = function(filter,spaces) {\n\tvar tiddlers = this.filterTiddlers(filter),\n\t\tspaces = (spaces === undefined) ? $tw.config.preferences.jsonSpaces : spaces,\n\t\tdata = [];\n\tfor(var t=0;t<tiddlers.length; t++) {\n\t\tvar tiddler = this.getTiddler(tiddlers[t]);\n\t\tif(tiddler) {\n\t\t\tvar fields = new Object();\n\t\t\tfor(var field in tiddler.fields) {\n\t\t\t\tfields[field] = tiddler.getFieldString(field);\n\t\t\t}\n\t\t\tdata.push(fields);\n\t\t}\n\t}\n\treturn JSON.stringify(data,null,spaces);\n};\n\n/*\nGet the content of a tiddler as a JavaScript object. How this is done depends on the type of the tiddler:\n\napplication/json: the tiddler JSON is parsed into an object\napplication/x-tiddler-dictionary: the tiddler is parsed as sequence of name:value pairs\n\nOther types currently just return null.\n\ntitleOrTiddler: string tiddler title or a tiddler object\ndefaultData: default data to be returned if the tiddler is missing or doesn't contain data\n\nNote that the same value is returned for repeated calls for the same tiddler data. The value is frozen to prevent modification; otherwise modifications would be visible to all callers\n*/\nexports.getTiddlerDataCached = function(titleOrTiddler,defaultData) {\n\tvar self = this,\n\t\ttiddler = titleOrTiddler;\n\tif(!(tiddler instanceof $tw.Tiddler)) {\n\t\ttiddler = this.getTiddler(tiddler);\t\n\t}\n\tif(tiddler) {\n\t\treturn this.getCacheForTiddler(tiddler.fields.title,\"data\",function() {\n\t\t\t// Return the frozen value\n\t\t\tvar value = self.getTiddlerData(tiddler.fields.title,undefined);\n\t\t\t$tw.utils.deepFreeze(value);\n\t\t\treturn value;\n\t\t}) || defaultData;\n\t} else {\n\t\treturn defaultData;\n\t}\n};\n\n/*\nAlternative, uncached version of getTiddlerDataCached(). The return value can be mutated freely and reused\n*/\nexports.getTiddlerData = function(titleOrTiddler,defaultData) {\n\tvar tiddler = titleOrTiddler,\n\t\tdata;\n\tif(!(tiddler instanceof $tw.Tiddler)) {\n\t\ttiddler = this.getTiddler(tiddler);\t\n\t}\n\tif(tiddler && tiddler.fields.text) {\n\t\tswitch(tiddler.fields.type) {\n\t\t\tcase \"application/json\":\n\t\t\t\t// JSON tiddler\n\t\t\t\ttry {\n\t\t\t\t\tdata = JSON.parse(tiddler.fields.text);\n\t\t\t\t} catch(ex) {\n\t\t\t\t\treturn defaultData;\n\t\t\t\t}\n\t\t\t\treturn data;\n\t\t\tcase \"application/x-tiddler-dictionary\":\n\t\t\t\treturn $tw.utils.parseFields(tiddler.fields.text);\n\t\t}\n\t}\n\treturn defaultData;\n};\n\n/*\nExtract an indexed field from within a data tiddler\n*/\nexports.extractTiddlerDataItem = function(titleOrTiddler,index,defaultText) {\n\tvar data = this.getTiddlerDataCached(titleOrTiddler,Object.create(null)),\n\t\ttext;\n\tif(data && $tw.utils.hop(data,index)) {\n\t\ttext = data[index];\n\t}\n\tif(typeof text === \"string\" || typeof text === \"number\") {\n\t\treturn text.toString();\n\t} else {\n\t\treturn defaultText;\n\t}\n};\n\n/*\nSet a tiddlers content to a JavaScript object. Currently this is done by setting the tiddler's type to \"application/json\" and setting the text to the JSON text of the data.\ntitle: title of tiddler\ndata: object that can be serialised to JSON\nfields: optional hashmap of additional tiddler fields to be set\n*/\nexports.setTiddlerData = function(title,data,fields) {\n\tvar existingTiddler = this.getTiddler(title),\n\t\tnewFields = {\n\t\t\ttitle: title\n\t};\n\tif(existingTiddler && existingTiddler.fields.type === \"application/x-tiddler-dictionary\") {\n\t\tnewFields.text = $tw.utils.makeTiddlerDictionary(data);\n\t} else {\n\t\tnewFields.type = \"application/json\";\n\t\tnewFields.text = JSON.stringify(data,null,$tw.config.preferences.jsonSpaces);\n\t}\n\tthis.addTiddler(new $tw.Tiddler(this.getCreationFields(),existingTiddler,fields,newFields,this.getModificationFields()));\n};\n\n/*\nReturn the content of a tiddler as an array containing each line\n*/\nexports.getTiddlerList = function(title,field,index) {\n\tif(index) {\n\t\treturn $tw.utils.parseStringArray(this.extractTiddlerDataItem(title,index,\"\"));\n\t}\n\tfield = field || \"list\";\n\tvar tiddler = this.getTiddler(title);\n\tif(tiddler) {\n\t\treturn ($tw.utils.parseStringArray(tiddler.fields[field]) || []).slice(0);\n\t}\n\treturn [];\n};\n\n// Return a named global cache object. Global cache objects are cleared whenever a tiddler change occurs\nexports.getGlobalCache = function(cacheName,initializer) {\n\tthis.globalCache = this.globalCache || Object.create(null);\n\tif($tw.utils.hop(this.globalCache,cacheName)) {\n\t\treturn this.globalCache[cacheName];\n\t} else {\n\t\tthis.globalCache[cacheName] = initializer();\n\t\treturn this.globalCache[cacheName];\n\t}\n};\n\nexports.clearGlobalCache = function() {\n\tthis.globalCache = Object.create(null);\n};\n\n// Return the named cache object for a tiddler. If the cache doesn't exist then the initializer function is invoked to create it\nexports.getCacheForTiddler = function(title,cacheName,initializer) {\n\tthis.caches = this.caches || Object.create(null);\n\tvar caches = this.caches[title];\n\tif(caches && caches[cacheName]) {\n\t\treturn caches[cacheName];\n\t} else {\n\t\tif(!caches) {\n\t\t\tcaches = Object.create(null);\n\t\t\tthis.caches[title] = caches;\n\t\t}\n\t\tcaches[cacheName] = initializer();\n\t\treturn caches[cacheName];\n\t}\n};\n\n// Clear all caches associated with a particular tiddler, or, if the title is null, clear all the caches for all the tiddlers\nexports.clearCache = function(title) {\n\tif(title) {\n\t\tthis.caches = this.caches || Object.create(null);\n\t\tif($tw.utils.hop(this.caches,title)) {\n\t\t\tdelete this.caches[title];\n\t\t}\n\t} else {\n\t\tthis.caches = Object.create(null);\n\t}\n};\n\nexports.initParsers = function(moduleType) {\n\t// Install the parser modules\n\t$tw.Wiki.parsers = {};\n\tvar self = this;\n\t$tw.modules.forEachModuleOfType(\"parser\",function(title,module) {\n\t\tfor(var f in module) {\n\t\t\tif($tw.utils.hop(module,f)) {\n\t\t\t\t$tw.Wiki.parsers[f] = module[f]; // Store the parser class\n\t\t\t}\n\t\t}\n\t});\n\t// Use the generic binary parser for any binary types not registered so far\n\tif($tw.Wiki.parsers[\"application/octet-stream\"]) {\n\t\tObject.keys($tw.config.contentTypeInfo).forEach(function(type) {\n\t\t\tif(!$tw.utils.hop($tw.Wiki.parsers,type) && $tw.config.contentTypeInfo[type].encoding === \"base64\") {\n\t\t\t\t$tw.Wiki.parsers[type] = $tw.Wiki.parsers[\"application/octet-stream\"];\n\t\t\t}\n\t\t});\t\t\n\t}\n};\n\n/*\nParse a block of text of a specified MIME type\n\ttype: content type of text to be parsed\n\ttext: text\n\toptions: see below\nOptions include:\n\tparseAsInline: if true, the text of the tiddler will be parsed as an inline run\n\t_canonical_uri: optional string of the canonical URI of this content\n*/\nexports.parseText = function(type,text,options) {\n\ttext = text || \"\";\n\toptions = options || {};\n\t// Select a parser\n\tvar Parser = $tw.Wiki.parsers[type];\n\tif(!Parser && $tw.utils.getFileExtensionInfo(type)) {\n\t\tParser = $tw.Wiki.parsers[$tw.utils.getFileExtensionInfo(type).type];\n\t}\n\tif(!Parser) {\n\t\tParser = $tw.Wiki.parsers[options.defaultType || \"text/vnd.tiddlywiki\"];\n\t}\n\tif(!Parser) {\n\t\treturn null;\n\t}\n\t// Return the parser instance\n\treturn new Parser(type,text,{\n\t\tparseAsInline: options.parseAsInline,\n\t\twiki: this,\n\t\t_canonical_uri: options._canonical_uri\n\t});\n};\n\n/*\nParse a tiddler according to its MIME type\n*/\nexports.parseTiddler = function(title,options) {\n\toptions = $tw.utils.extend({},options);\n\tvar cacheType = options.parseAsInline ? \"inlineParseTree\" : \"blockParseTree\",\n\t\ttiddler = this.getTiddler(title),\n\t\tself = this;\n\treturn tiddler ? this.getCacheForTiddler(title,cacheType,function() {\n\t\t\tif(tiddler.hasField(\"_canonical_uri\")) {\n\t\t\t\toptions._canonical_uri = tiddler.fields._canonical_uri;\n\t\t\t}\n\t\t\treturn self.parseText(tiddler.fields.type,tiddler.fields.text,options);\n\t\t}) : null;\n};\n\nexports.parseTextReference = function(title,field,index,options) {\n\tvar tiddler,text;\n\tif(options.subTiddler) {\n\t\ttiddler = this.getSubTiddler(title,options.subTiddler);\n\t} else {\n\t\ttiddler = this.getTiddler(title);\n\t\tif(field === \"text\" || (!field && !index)) {\n\t\t\tthis.getTiddlerText(title); // Force the tiddler to be lazily loaded\n\t\t\treturn this.parseTiddler(title,options);\n\t\t}\n\t}\n\tif(field === \"text\" || (!field && !index)) {\n\t\tif(tiddler && tiddler.fields) {\n\t\t\treturn this.parseText(tiddler.fields.type,tiddler.fields.text,options);\t\t\t\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t} else if(field) {\n\t\tif(field === \"title\") {\n\t\t\ttext = title;\n\t\t} else {\n\t\t\tif(!tiddler || !tiddler.hasField(field)) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\ttext = tiddler.fields[field];\n\t\t}\n\t\treturn this.parseText(\"text/vnd.tiddlywiki\",text.toString(),options);\n\t} else if(index) {\n\t\tthis.getTiddlerText(title); // Force the tiddler to be lazily loaded\n\t\ttext = this.extractTiddlerDataItem(tiddler,index,undefined);\n\t\tif(text === undefined) {\n\t\t\treturn null;\n\t\t}\n\t\treturn this.parseText(\"text/vnd.tiddlywiki\",text,options);\n\t}\n};\n\n/*\nMake a widget tree for a parse tree\nparser: parser object\noptions: see below\nOptions include:\ndocument: optional document to use\nvariables: hashmap of variables to set\nparentWidget: optional parent widget for the root node\n*/\nexports.makeWidget = function(parser,options) {\n\toptions = options || {};\n\tvar widgetNode = {\n\t\t\ttype: \"widget\",\n\t\t\tchildren: []\n\t\t},\n\t\tcurrWidgetNode = widgetNode;\n\t// Create set variable widgets for each variable\n\t$tw.utils.each(options.variables,function(value,name) {\n\t\tvar setVariableWidget = {\n\t\t\ttype: \"set\",\n\t\t\tattributes: {\n\t\t\t\tname: {type: \"string\", value: name},\n\t\t\t\tvalue: {type: \"string\", value: value}\n\t\t\t},\n\t\t\tchildren: []\n\t\t};\n\t\tcurrWidgetNode.children = [setVariableWidget];\n\t\tcurrWidgetNode = setVariableWidget;\n\t});\n\t// Add in the supplied parse tree nodes\n\tcurrWidgetNode.children = parser ? parser.tree : [];\n\t// Create the widget\n\treturn new widget.widget(widgetNode,{\n\t\twiki: this,\n\t\tdocument: options.document || $tw.fakeDocument,\n\t\tparentWidget: options.parentWidget\n\t});\n};\n\n/*\nMake a widget tree for transclusion\ntitle: target tiddler title\noptions: as for wiki.makeWidget() plus:\noptions.field: optional field to transclude (defaults to \"text\")\noptions.mode: transclusion mode \"inline\" or \"block\"\noptions.children: optional array of children for the transclude widget\noptions.importVariables: optional importvariables filter string for macros to be included\noptions.importPageMacros: optional boolean; if true, equivalent to passing \"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\" to options.importVariables\n*/\nexports.makeTranscludeWidget = function(title,options) {\n\toptions = options || {};\n\tvar parseTreeDiv = {tree: [{\n\t\t\ttype: \"element\",\n\t\t\ttag: \"div\",\n\t\t\tchildren: []}]},\n\t\tparseTreeImportVariables = {\n\t\t\ttype: \"importvariables\",\n\t\t\tattributes: {\n\t\t\t\tfilter: {\n\t\t\t\t\tname: \"filter\",\n\t\t\t\t\ttype: \"string\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tisBlock: false,\n\t\t\tchildren: []},\n\t\tparseTreeTransclude = {\n\t\t\ttype: \"transclude\",\n\t\t\tattributes: {\n\t\t\t\ttiddler: {\n\t\t\t\t\tname: \"tiddler\",\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tvalue: title}},\n\t\t\tisBlock: !options.parseAsInline};\n\tif(options.importVariables || options.importPageMacros) {\n\t\tif(options.importVariables) {\n\t\t\tparseTreeImportVariables.attributes.filter.value = options.importVariables;\n\t\t} else if(options.importPageMacros) {\n\t\t\tparseTreeImportVariables.attributes.filter.value = \"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\";\n\t\t}\n\t\tparseTreeDiv.tree[0].children.push(parseTreeImportVariables);\n\t\tparseTreeImportVariables.children.push(parseTreeTransclude);\n\t} else {\n\t\tparseTreeDiv.tree[0].children.push(parseTreeTransclude);\n\t}\n\tif(options.field) {\n\t\tparseTreeTransclude.attributes.field = {type: \"string\", value: options.field};\n\t}\n\tif(options.mode) {\n\t\tparseTreeTransclude.attributes.mode = {type: \"string\", value: options.mode};\n\t}\n\tif(options.children) {\n\t\tparseTreeTransclude.children = options.children;\n\t}\n\treturn $tw.wiki.makeWidget(parseTreeDiv,options);\n};\n\n/*\nParse text in a specified format and render it into another format\n\toutputType: content type for the output\n\ttextType: content type of the input text\n\ttext: input text\n\toptions: see below\nOptions include:\nvariables: hashmap of variables to set\nparentWidget: optional parent widget for the root node\n*/\nexports.renderText = function(outputType,textType,text,options) {\n\toptions = options || {};\n\tvar parser = this.parseText(textType,text,options),\n\t\twidgetNode = this.makeWidget(parser,options);\n\tvar container = $tw.fakeDocument.createElement(\"div\");\n\twidgetNode.render(container,null);\n\treturn outputType === \"text/html\" ? container.innerHTML : container.textContent;\n};\n\n/*\nParse text from a tiddler and render it into another format\n\toutputType: content type for the output\n\ttitle: title of the tiddler to be rendered\n\toptions: see below\nOptions include:\nvariables: hashmap of variables to set\nparentWidget: optional parent widget for the root node\n*/\nexports.renderTiddler = function(outputType,title,options) {\n\toptions = options || {};\n\tvar parser = this.parseTiddler(title,options),\n\t\twidgetNode = this.makeWidget(parser,options);\n\tvar container = $tw.fakeDocument.createElement(\"div\");\n\twidgetNode.render(container,null);\n\treturn outputType === \"text/html\" ? container.innerHTML : (outputType === \"text/plain-formatted\" ? container.formattedTextContent : container.textContent);\n};\n\n/*\nReturn an array of tiddler titles that match a search string\n\ttext: The text string to search for\n\toptions: see below\nOptions available:\n\tsource: an iterator function for the source tiddlers, called source(iterator), where iterator is called as iterator(tiddler,title)\n\texclude: An array of tiddler titles to exclude from the search\n\tinvert: If true returns tiddlers that do not contain the specified string\n\tcaseSensitive: If true forces a case sensitive search\n\tfield: If specified, restricts the search to the specified field, or an array of field names\n\tanchored: If true, forces all but regexp searches to be anchored to the start of text\n\texcludeField: If true, the field options are inverted to specify the fields that are not to be searched\n\tThe search mode is determined by the first of these boolean flags to be true\n\t\tliteral: searches for literal string\n\t\twhitespace: same as literal except runs of whitespace are treated as a single space\n\t\tregexp: treats the search term as a regular expression\n\t\twords: (default) treats search string as a list of tokens, and matches if all tokens are found, regardless of adjacency or ordering\n*/\nexports.search = function(text,options) {\n\toptions = options || {};\n\tvar self = this,\n\t\tt,\n\t\tinvert = !!options.invert;\n\t// Convert the search string into a regexp for each term\n\tvar terms, searchTermsRegExps,\n\t\tflags = options.caseSensitive ? \"\" : \"i\",\n\t\tanchor = options.anchored ? \"^\" : \"\";\n\tif(options.literal) {\n\t\tif(text.length === 0) {\n\t\t\tsearchTermsRegExps = null;\n\t\t} else {\n\t\t\tsearchTermsRegExps = [new RegExp(\"(\" + anchor + $tw.utils.escapeRegExp(text) + \")\",flags)];\n\t\t}\n\t} else if(options.whitespace) {\n\t\tterms = [];\n\t\t$tw.utils.each(text.split(/\\s+/g),function(term) {\n\t\t\tif(term) {\n\t\t\t\tterms.push($tw.utils.escapeRegExp(term));\n\t\t\t}\n\t\t});\n\t\tsearchTermsRegExps = [new RegExp(\"(\" + anchor + terms.join(\"\\\\s+\") + \")\",flags)];\n\t} else if(options.regexp) {\n\t\ttry {\n\t\t\tsearchTermsRegExps = [new RegExp(\"(\" + text + \")\",flags)];\t\t\t\n\t\t} catch(e) {\n\t\t\tsearchTermsRegExps = null;\n\t\t\tconsole.log(\"Regexp error parsing /(\" + text + \")/\" + flags + \": \",e);\n\t\t}\n\t} else {\n\t\tterms = text.split(/ +/);\n\t\tif(terms.length === 1 && terms[0] === \"\") {\n\t\t\tsearchTermsRegExps = null;\n\t\t} else {\n\t\t\tsearchTermsRegExps = [];\n\t\t\tfor(t=0; t<terms.length; t++) {\n\t\t\t\tsearchTermsRegExps.push(new RegExp(\"(\" + anchor + $tw.utils.escapeRegExp(terms[t]) + \")\",flags));\n\t\t\t}\n\t\t}\n\t}\n\t// Accumulate the array of fields to be searched or excluded from the search\n\tvar fields = [];\n\tif(options.field) {\n\t\tif($tw.utils.isArray(options.field)) {\n\t\t\t$tw.utils.each(options.field,function(fieldName) {\n\t\t\t\tif(fieldName) {\n\t\t\t\t\tfields.push(fieldName);\t\t\t\t\t\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tfields.push(options.field);\n\t\t}\n\t}\n\t// Use default fields if none specified and we're not excluding fields (excluding fields with an empty field array is the same as searching all fields)\n\tif(fields.length === 0 && !options.excludeField) {\n\t\tfields.push(\"title\");\n\t\tfields.push(\"tags\");\n\t\tfields.push(\"text\");\n\t}\n\t// Function to check a given tiddler for the search term\n\tvar searchTiddler = function(title) {\n\t\tif(!searchTermsRegExps) {\n\t\t\treturn true;\n\t\t}\n\t\tvar notYetFound = searchTermsRegExps.slice();\n\n\t\tvar tiddler = self.getTiddler(title);\n\t\tif(!tiddler) {\n\t\t\ttiddler = new $tw.Tiddler({title: title, text: \"\", type: \"text/vnd.tiddlywiki\"});\n\t\t}\n\t\tvar contentTypeInfo = $tw.config.contentTypeInfo[tiddler.fields.type] || $tw.config.contentTypeInfo[\"text/vnd.tiddlywiki\"],\n\t\t\tsearchFields;\n\t\t// Get the list of fields we're searching\n\t\tif(options.excludeField) {\n\t\t\tsearchFields = Object.keys(tiddler.fields);\n\t\t\t$tw.utils.each(fields,function(fieldName) {\n\t\t\t\tvar p = searchFields.indexOf(fieldName);\n\t\t\t\tif(p !== -1) {\n\t\t\t\t\tsearchFields.splice(p,1);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tsearchFields = fields;\n\t\t}\n\t\tfor(var fieldIndex=0; notYetFound.length>0 && fieldIndex<searchFields.length; fieldIndex++) {\n\t\t\t// Don't search the text field if the content type is binary\n\t\t\tvar fieldName = searchFields[fieldIndex];\n\t\t\tif(fieldName === \"text\" && contentTypeInfo.encoding !== \"utf8\") {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tvar str = tiddler.fields[fieldName],\n\t\t\t\tt;\n\t\t\tif(str) {\n\t\t\t\tif($tw.utils.isArray(str)) {\n\t\t\t\t\t// If the field value is an array, test each regexp against each field array entry and fail if each regexp doesn't match at least one field array entry\n\t\t\t\t\tfor(var s=0; s<str.length; s++) {\n\t\t\t\t\t\tfor(t=0; t<notYetFound.length;) {\n\t\t\t\t\t\t\tif(notYetFound[t].test(str[s])) {\n\t\t\t\t\t\t\t\tnotYetFound.splice(t, 1);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tt++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// If the field isn't an array, force it to a string and test each regexp against it and fail if any do not match\n\t\t\t\t\tstr = tiddler.getFieldString(fieldName);\n\t\t\t\t\tfor(t=0; t<notYetFound.length;) {\n\t\t\t\t\t\tif(notYetFound[t].test(str)) {\n\t\t\t\t\t\t\tnotYetFound.splice(t, 1);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tt++;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\treturn notYetFound.length == 0;\n\t};\n\t// Loop through all the tiddlers doing the search\n\tvar results = [],\n\t\tsource = options.source || this.each;\n\tsource(function(tiddler,title) {\n\t\tif(searchTiddler(title) !== options.invert) {\n\t\t\tresults.push(title);\n\t\t}\n\t});\n\t// Remove any of the results we have to exclude\n\tif(options.exclude) {\n\t\tfor(t=0; t<options.exclude.length; t++) {\n\t\t\tvar p = results.indexOf(options.exclude[t]);\n\t\t\tif(p !== -1) {\n\t\t\t\tresults.splice(p,1);\n\t\t\t}\n\t\t}\n\t}\n\treturn results;\n};\n\n/*\nTrigger a load for a tiddler if it is skinny. Returns the text, or undefined if the tiddler is missing, null if the tiddler is being lazily loaded.\n*/\nexports.getTiddlerText = function(title,defaultText) {\n\tvar tiddler = this.getTiddler(title);\n\t// Return undefined if the tiddler isn't found\n\tif(!tiddler) {\n\t\treturn defaultText;\n\t}\n\tif(!tiddler.hasField(\"_is_skinny\")) {\n\t\t// Just return the text if we've got it\n\t\treturn tiddler.fields.text || \"\";\n\t} else {\n\t\t// Tell any listeners about the need to lazily load this tiddler\n\t\tthis.dispatchEvent(\"lazyLoad\",title);\n\t\t// Indicate that the text is being loaded\n\t\treturn null;\n\t}\n};\n\n/*\nCheck whether the text of a tiddler matches a given value. By default, the comparison is case insensitive, and any spaces at either end of the tiddler text is trimmed\n*/\nexports.checkTiddlerText = function(title,targetText,options) {\n\toptions = options || {};\n\tvar text = this.getTiddlerText(title,\"\");\n\tif(!options.noTrim) {\n\t\ttext = text.trim();\n\t}\n\tif(!options.caseSensitive) {\n\t\ttext = text.toLowerCase();\n\t\ttargetText = targetText.toLowerCase();\n\t}\n\treturn text === targetText;\n}\n\n/*\nRead an array of browser File objects, invoking callback(tiddlerFieldsArray) once they're all read\n*/\nexports.readFiles = function(files,options) {\n\tvar callback;\n\tif(typeof options === \"function\") {\n\t\tcallback = options;\n\t\toptions = {};\n\t} else {\n\t\tcallback = options.callback;\n\t}\n\tvar result = [],\n\t\toutstanding = files.length,\n\t\treadFileCallback = function(tiddlerFieldsArray) {\n\t\t\tresult.push.apply(result,tiddlerFieldsArray);\n\t\t\tif(--outstanding === 0) {\n\t\t\t\tcallback(result);\n\t\t\t}\n\t\t};\n\tfor(var f=0; f<files.length; f++) {\n\t\tthis.readFile(files[f],$tw.utils.extend({},options,{callback: readFileCallback}));\n\t}\n\treturn files.length;\n};\n\n/*\nRead a browser File object, invoking callback(tiddlerFieldsArray) with an array of tiddler fields objects\n*/\nexports.readFile = function(file,options) {\n\tvar callback;\n\tif(typeof options === \"function\") {\n\t\tcallback = options;\n\t\toptions = {};\n\t} else {\n\t\tcallback = options.callback;\n\t}\n\t// Get the type, falling back to the filename extension\n\tvar self = this,\n\t\ttype = file.type;\n\tif(type === \"\" || !type) {\n\t\tvar dotPos = file.name.lastIndexOf(\".\");\n\t\tif(dotPos !== -1) {\n\t\t\tvar fileExtensionInfo = $tw.utils.getFileExtensionInfo(file.name.substr(dotPos));\n\t\t\tif(fileExtensionInfo) {\n\t\t\t\ttype = fileExtensionInfo.type;\n\t\t\t}\n\t\t}\n\t}\n\t// Figure out if we're reading a binary file\n\tvar contentTypeInfo = $tw.config.contentTypeInfo[type],\n\t\tisBinary = contentTypeInfo ? contentTypeInfo.encoding === \"base64\" : false;\n\t// Log some debugging information\n\tif($tw.log.IMPORT) {\n\t\tconsole.log(\"Importing file '\" + file.name + \"', type: '\" + type + \"', isBinary: \" + isBinary);\n\t}\n\t// Give the hook a chance to process the drag\n\tif($tw.hooks.invokeHook(\"th-importing-file\",{\n\t\tfile: file,\n\t\ttype: type,\n\t\tisBinary: isBinary,\n\t\tcallback: callback\n\t}) !== true) {\n\t\tthis.readFileContent(file,type,isBinary,options.deserializer,callback);\n\t}\n};\n\n/*\nLower level utility to read the content of a browser File object, invoking callback(tiddlerFieldsArray) with an array of tiddler fields objects\n*/\nexports.readFileContent = function(file,type,isBinary,deserializer,callback) {\n\tvar self = this;\n\t// Create the FileReader\n\tvar reader = new FileReader();\n\t// Onload\n\treader.onload = function(event) {\n\t\tvar text = event.target.result,\n\t\t\ttiddlerFields = {title: file.name || \"Untitled\", type: type};\n\t\tif(isBinary) {\n\t\t\tvar commaPos = text.indexOf(\",\");\n\t\t\tif(commaPos !== -1) {\n\t\t\t\ttext = text.substr(commaPos + 1);\n\t\t\t}\n\t\t}\n\t\t// Check whether this is an encrypted TiddlyWiki file\n\t\tvar encryptedJson = $tw.utils.extractEncryptedStoreArea(text);\n\t\tif(encryptedJson) {\n\t\t\t// If so, attempt to decrypt it with the current password\n\t\t\t$tw.utils.decryptStoreAreaInteractive(encryptedJson,function(tiddlers) {\n\t\t\t\tcallback(tiddlers);\n\t\t\t});\n\t\t} else {\n\t\t\t// Otherwise, just try to deserialise any tiddlers in the file\n\t\t\tcallback(self.deserializeTiddlers(type,text,tiddlerFields,{deserializer: deserializer}));\n\t\t}\n\t};\n\t// Kick off the read\n\tif(isBinary) {\n\t\treader.readAsDataURL(file);\n\t} else {\n\t\treader.readAsText(file);\n\t}\n};\n\n/*\nFind any existing draft of a specified tiddler\n*/\nexports.findDraft = function(targetTitle) {\n\tvar draftTitle = undefined;\n\tthis.forEachTiddler({includeSystem: true},function(title,tiddler) {\n\t\tif(tiddler.fields[\"draft.title\"] && tiddler.fields[\"draft.of\"] === targetTitle) {\n\t\t\tdraftTitle = title;\n\t\t}\n\t});\n\treturn draftTitle;\n}\n\n/*\nCheck whether the specified draft tiddler has been modified.\nIf the original tiddler doesn't exist, create a vanilla tiddler variable,\nto check if additional fields have been added.\n*/\nexports.isDraftModified = function(title) {\n\tvar tiddler = this.getTiddler(title);\n\tif(!tiddler.isDraft()) {\n\t\treturn false;\n\t}\n\tvar ignoredFields = [\"created\", \"modified\", \"title\", \"draft.title\", \"draft.of\"],\n\t\torigTiddler = this.getTiddler(tiddler.fields[\"draft.of\"]) || new $tw.Tiddler({text:\"\", tags:[]}),\n\t\ttitleModified = tiddler.fields[\"draft.title\"] !== tiddler.fields[\"draft.of\"];\n\treturn titleModified || !tiddler.isEqual(origTiddler,ignoredFields);\n};\n\n/*\nAdd a new record to the top of the history stack\ntitle: a title string or an array of title strings\nfromPageRect: page coordinates of the origin of the navigation\nhistoryTitle: title of history tiddler (defaults to $:/HistoryList)\n*/\nexports.addToHistory = function(title,fromPageRect,historyTitle) {\n\tvar story = new $tw.Story({wiki: this, historyTitle: historyTitle});\n\tstory.addToHistory(title,fromPageRect);\t\t\n};\n\n/*\nAdd a new tiddler to the story river\ntitle: a title string or an array of title strings\nfromTitle: the title of the tiddler from which the navigation originated\nstoryTitle: title of story tiddler (defaults to $:/StoryList)\noptions: see story.js\n*/\nexports.addToStory = function(title,fromTitle,storyTitle,options) {\n\tvar story = new $tw.Story({wiki: this, storyTitle: storyTitle});\n\tstory.addToStory(title,fromTitle,options);\t\t\n};\n\n/*\nGenerate a title for the draft of a given tiddler\n*/\nexports.generateDraftTitle = function(title) {\n\tvar c = 0,\n\t\tdraftTitle,\n\t\tusername = this.getTiddlerText(\"$:/status/UserName\"),\n\t\tattribution = username ? \" by \" + username : \"\";\n\tdo {\n\t\tdraftTitle = \"Draft \" + (c ? (c + 1) + \" \" : \"\") + \"of '\" + title + \"'\" + attribution;\n\t\tc++;\n\t} while(this.tiddlerExists(draftTitle));\n\treturn draftTitle;\n};\n\n/*\nInvoke the available upgrader modules\ntitles: array of tiddler titles to be processed\ntiddlers: hashmap by title of tiddler fields of pending import tiddlers. These can be modified by the upgraders. An entry with no fields indicates a tiddler that was pending import has been suppressed. When entries are added to the pending import the tiddlers hashmap may have entries that are not present in the titles array\nReturns a hashmap of messages keyed by tiddler title.\n*/\nexports.invokeUpgraders = function(titles,tiddlers) {\n\t// Collect up the available upgrader modules\n\tvar self = this;\n\tif(!this.upgraderModules) {\n\t\tthis.upgraderModules = [];\n\t\t$tw.modules.forEachModuleOfType(\"upgrader\",function(title,module) {\n\t\t\tif(module.upgrade) {\n\t\t\t\tself.upgraderModules.push(module);\n\t\t\t}\n\t\t});\n\t}\n\t// Invoke each upgrader in turn\n\tvar messages = {};\n\tfor(var t=0; t<this.upgraderModules.length; t++) {\n\t\tvar upgrader = this.upgraderModules[t],\n\t\t\tupgraderMessages = upgrader.upgrade(this,titles,tiddlers);\n\t\t$tw.utils.extend(messages,upgraderMessages);\n\t}\n\treturn messages;\n};\n\n// Determine whether a plugin by title is dynamically loadable\nexports.doesPluginRequireReload = function(title) {\n\treturn this.doesPluginInfoRequireReload(this.getPluginInfo(title) || this.getTiddlerDataCached(title));\n};\n\n// Determine whether a plugin info structure is dynamically loadable\nexports.doesPluginInfoRequireReload = function(pluginInfo) {\n\tif(pluginInfo) {\n\t\tvar foundModule = false;\n\t\t$tw.utils.each(pluginInfo.tiddlers,function(tiddler) {\n\t\t\tif(tiddler.type === \"application/javascript\" && $tw.utils.hop(tiddler,\"module-type\")) {\n\t\t\t\tfoundModule = true;\n\t\t\t}\n\t\t});\n\t\treturn foundModule;\n\t} else {\n\t\treturn null;\n\t}\n};\n\n})();\n\n",
"type": "application/javascript",
"module-type": "wikimethod"
},
"$:/palettes/Blanca": {
"title": "$:/palettes/Blanca",
"name": "Blanca",
"description": "A clean white palette to let you focus",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #66cccc\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #999999\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #ffffff\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #7897f3\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #ccc\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #ffffff\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #7897f3\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #eeeeee\ntab-border-selected: #cccccc\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ffeedd\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: #eee\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #ff9900\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
},
"$:/palettes/Blue": {
"title": "$:/palettes/Blue",
"name": "Blue",
"description": "A blue theme",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #fff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour foreground>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333353\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #999999\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #ddddff\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #5778d8\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #ffffff\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: <<colour page-background>>\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #5959c0\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: #ccccdd\ntab-border-selected: #ccccdd\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #eeeeff\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #666666\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #ffffff\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #ffffff\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #5959c0\ntoolbar-new-button: #5eb95e\ntoolbar-options-button: rgb(128, 88, 165)\ntoolbar-save-button: #0e90d2\ntoolbar-info-button: #0e90d2\ntoolbar-edit-button: rgb(243, 123, 29)\ntoolbar-close-button: #dd514c\ntoolbar-delete-button: #dd514c\ntoolbar-cancel-button: rgb(243, 123, 29)\ntoolbar-done-button: #5eb95e\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
},
"$:/palettes/Muted": {
"title": "$:/palettes/Muted",
"name": "Muted",
"description": "Bright tiddlers on a muted background",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #bbb\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #6f6f70\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #29a6ee\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #c2c1c2\nsidebar-foreground-shadow: rgba(255,255,255,0)\nsidebar-foreground: #d3d2d4\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #6f6f70\nsidebar-tab-background: #666667\nsidebar-tab-border-selected: #999\nsidebar-tab-border: #515151\nsidebar-tab-divider: #999\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: #999\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #d1d0d2\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #d5ad34\ntag-foreground: #ffffff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #182955\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
},
"$:/palettes/ContrastLight": {
"title": "$:/palettes/ContrastLight",
"name": "Contrast (Light)",
"description": "High contrast and unambiguous (light version)",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #f00\nalert-border: <<colour background>>\nalert-highlight: <<colour foreground>>\nalert-muted-foreground: #800\nbackground: #fff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background: <<colour background>>\nbutton-foreground: <<colour foreground>>\nbutton-border: <<colour foreground>>\ncode-background: <<colour background>>\ncode-border: <<colour foreground>>\ncode-foreground: <<colour foreground>>\ndirty-indicator: #f00\ndownload-background: #080\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: <<colour foreground>>\ndropdown-tab-background: <<colour foreground>>\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #00a\nexternal-link-foreground: #00e\nforeground: #000\nmessage-background: <<colour foreground>>\nmessage-border: <<colour background>>\nmessage-foreground: <<colour background>>\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: <<colour foreground>>\nmodal-footer-background: <<colour background>>\nmodal-footer-border: <<colour foreground>>\nmodal-header-border: <<colour foreground>>\nmuted-foreground: <<colour foreground>>\nnotification-background: <<colour background>>\nnotification-border: <<colour foreground>>\npage-background: <<colour background>>\npre-background: <<colour background>>\npre-border: <<colour foreground>>\nprimary: #00f\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: <<colour background>>\nsidebar-controls-foreground: <<colour foreground>>\nsidebar-foreground-shadow: rgba(0,0,0, 0)\nsidebar-foreground: <<colour foreground>>\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: <<colour foreground>>\nsidebar-tab-background-selected: <<colour background>>\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: <<colour foreground>>\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: <<colour foreground>>\nsidebar-tiddler-link-foreground: <<colour primary>>\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: <<colour foreground>>\ntab-border-selected: <<colour foreground>>\ntab-border: <<colour foreground>>\ntab-divider: <<colour foreground>>\ntab-foreground-selected: <<colour foreground>>\ntab-foreground: <<colour background>>\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #000\ntag-foreground: #fff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour foreground>>\ntiddler-controls-foreground-hover: #ddd\ntiddler-controls-foreground-selected: #fdd\ntiddler-controls-foreground: <<colour foreground>>\ntiddler-editor-background: <<colour background>>\ntiddler-editor-border-image: <<colour foreground>>\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: <<colour background>>\ntiddler-editor-fields-odd: <<colour background>>\ntiddler-info-background: <<colour background>>\ntiddler-info-border: <<colour foreground>>\ntiddler-info-tab-background: <<colour background>>\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: <<colour foreground>>\ntiddler-title-foreground: <<colour foreground>>\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: <<colour foreground>>\nvery-muted-foreground: #888888\n"
},
"$:/palettes/ContrastDark": {
"title": "$:/palettes/ContrastDark",
"name": "Contrast (Dark)",
"description": "High contrast and unambiguous (dark version)",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #f00\nalert-border: <<colour background>>\nalert-highlight: <<colour foreground>>\nalert-muted-foreground: #800\nbackground: #000\nblockquote-bar: <<colour muted-foreground>>\nbutton-background: <<colour background>>\nbutton-foreground: <<colour foreground>>\nbutton-border: <<colour foreground>>\ncode-background: <<colour background>>\ncode-border: <<colour foreground>>\ncode-foreground: <<colour foreground>>\ndirty-indicator: #f00\ndownload-background: #080\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: <<colour foreground>>\ndropdown-tab-background: <<colour foreground>>\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #00a\nexternal-link-foreground: #00e\nforeground: #fff\nmessage-background: <<colour foreground>>\nmessage-border: <<colour background>>\nmessage-foreground: <<colour background>>\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: <<colour foreground>>\nmodal-footer-background: <<colour background>>\nmodal-footer-border: <<colour foreground>>\nmodal-header-border: <<colour foreground>>\nmuted-foreground: <<colour foreground>>\nnotification-background: <<colour background>>\nnotification-border: <<colour foreground>>\npage-background: <<colour background>>\npre-background: <<colour background>>\npre-border: <<colour foreground>>\nprimary: #00f\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: <<colour background>>\nsidebar-controls-foreground: <<colour foreground>>\nsidebar-foreground-shadow: rgba(0,0,0, 0)\nsidebar-foreground: <<colour foreground>>\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: <<colour foreground>>\nsidebar-tab-background-selected: <<colour background>>\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: <<colour foreground>>\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: <<colour foreground>>\nsidebar-tiddler-link-foreground: <<colour primary>>\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: <<colour foreground>>\ntab-border-selected: <<colour foreground>>\ntab-border: <<colour foreground>>\ntab-divider: <<colour foreground>>\ntab-foreground-selected: <<colour foreground>>\ntab-foreground: <<colour background>>\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #fff\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: <<colour foreground>>\ntiddler-controls-foreground-hover: #ddd\ntiddler-controls-foreground-selected: #fdd\ntiddler-controls-foreground: <<colour foreground>>\ntiddler-editor-background: <<colour background>>\ntiddler-editor-border-image: <<colour foreground>>\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: <<colour background>>\ntiddler-editor-fields-odd: <<colour background>>\ntiddler-info-background: <<colour background>>\ntiddler-info-border: <<colour foreground>>\ntiddler-info-tab-background: <<colour background>>\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: <<colour foreground>>\ntiddler-title-foreground: <<colour foreground>>\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: <<colour foreground>>\nvery-muted-foreground: #888888\n"
},
"$:/palettes/DarkPhotos": {
"title": "$:/palettes/DarkPhotos",
"created": "20150402111612188",
"description": "Good with dark photo backgrounds",
"modified": "20150402112344080",
"name": "DarkPhotos",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background: \nbutton-foreground: \nbutton-border: \ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #ddd\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #336438\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #5778d8\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #ccf\nsidebar-controls-foreground: #fff\nsidebar-foreground-shadow: rgba(0,0,0, 0.5)\nsidebar-foreground: #fff\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #eee\nsidebar-tab-background-selected: rgba(255,255,255, 0.8)\nsidebar-tab-background: rgba(255,255,255, 0.4)\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: rgba(255,255,255, 0.2)\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #aaf\nsidebar-tiddler-link-foreground: #ddf\nsite-title-foreground: #fff\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ec6\ntag-foreground: #ffffff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #182955\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
},
"$:/palettes/GruvboxDark": {
"title": "$:/palettes/GruvboxDark",
"name": "Gruvbox Dark",
"description": "Retro groove color scheme",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"license": "https://github.com/morhetz/gruvbox",
"text": "alert-background: #cc241d\nalert-border: #cc241d\nalert-highlight: #d79921\nalert-muted-foreground: #504945\nbackground: #3c3836\nblockquote-bar: <<colour muted-foreground>>\nbutton-background: #504945\nbutton-foreground: #fbf1c7\nbutton-border: transparent\ncode-background: #504945\ncode-border: #504945\ncode-foreground: #fb4934\ndiff-delete-background: #fb4934\ndiff-delete-foreground: <<colour foreground>>\ndiff-equal-background: \ndiff-equal-foreground: <<colour foreground>>\ndiff-insert-background: #b8bb26\ndiff-insert-foreground: <<colour foreground>>\ndiff-invisible-background: \ndiff-invisible-foreground: <<colour muted-foreground>>\ndirty-indicator: #fb4934\ndownload-background: #b8bb26\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: #665c54\ndropdown-border: <<colour background>>\ndropdown-tab-background-selected: #ebdbb2\ndropdown-tab-background: #665c54\ndropzone-background: #98971a\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #d3869b\nexternal-link-foreground: #8ec07c\nforeground: #fbf1c7\nmenubar-background: #504945\nmenubar-foreground: <<colour foreground>>\nmessage-background: #83a598\nmessage-border: #83a598\nmessage-foreground: #3c3836\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #504945\nmodal-footer-background: #3c3836\nmodal-footer-border: #3c3836\nmodal-header-border: #3c3836\nmuted-foreground: #d5c4a1\nnotification-background: <<colour primary>>\nnotification-border: <<colour primary>>\npage-background: #282828\npre-background: #504945\npre-border: #504945\nprimary: #d79921\nselect-tag-background: #665c54\nselect-tag-foreground: <<colour foreground>>\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #7c6f64\nsidebar-controls-foreground: #504945\nsidebar-foreground-shadow: transparent\nsidebar-foreground: #fbf1c7\nsidebar-muted-foreground-hover: #7c6f64\nsidebar-muted-foreground: #504945\nsidebar-tab-background-selected: #bdae93\nsidebar-tab-background: #3c3836\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: #bdae93\nsidebar-tab-divider: <<colour page-background>>\nsidebar-tab-foreground-selected: #282828\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #458588\nsidebar-tiddler-link-foreground: #98971a\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #B48EAD\ntab-background-selected: #ebdbb2\ntab-background: #665c54\ntab-border-selected: #665c54\ntab-border: #665c54\ntab-divider: #bdae93\ntab-foreground-selected: #282828\ntab-foreground: #ebdbb2\ntable-border: #7c6f64\ntable-footer-background: #665c54\ntable-header-background: #504945\ntag-background: #d3869b\ntag-foreground: #282828\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #7c6f64\ntiddler-controls-foreground-selected: #7c6f64\ntiddler-controls-foreground: #665c54\ntiddler-editor-background: #282828\ntiddler-editor-border-image: #282828\ntiddler-editor-border: #282828\ntiddler-editor-fields-even: #504945\ntiddler-editor-fields-odd: #7c6f64\ntiddler-info-background: #32302f\ntiddler-info-border: #ebdbb2\ntiddler-info-tab-background: #ebdbb2\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #7c6f64\ntiddler-title-foreground: #a89984\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: #504945\nvery-muted-foreground: #bdae93\nwikilist-background: <<colour page-background>>\nwikilist-button-background: <<colour button-background>>\nwikilist-button-foreground: <<colour button-foreground>>\nwikilist-item: <<colour background>>\nwikilist-toolbar-background: <<colour background>>\nwikilist-toolbar-foreground: <<colour foreground>>\nwikilist-title: <<colour foreground>>\nwikilist-title-svg: <<colour wikilist-title>>\nwikilist-url: <<colour muted-foreground>>\nwikilist-button-open-hover: <<colour primary>>\nwikilist-button-open: <<colour dropzone-background>>\nwikilist-button-remove: <<colour dirty-indicator>>\nwikilist-button-remove-hover: <<colour alert-background>>\nwikilist-droplink-dragover: <<colour dropzone-background>>\nwikilist-button-reveal: <<colour sidebar-tiddler-link-foreground-hover>>\nwikilist-button-reveal-hover: <<colour message-background>>"
},
"$:/palettes/Nord": {
"title": "$:/palettes/Nord",
"name": "Nord",
"description": "An arctic, north-bluish color palette.",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"license": "MIT, arcticicestudio, https://github.com/arcticicestudio/nord/blob/develop/LICENSE.md",
"text": "alert-background: #D08770\nalert-border: #D08770\nalert-highlight: #B48EAD\nalert-muted-foreground: #4C566A\nbackground: #3b4252\nblockquote-bar: <<colour muted-foreground>>\nbutton-background: #4C566A\nbutton-foreground: #D8DEE9\nbutton-border: transparent\ncode-background: #2E3440\ncode-border: #2E3440\ncode-foreground: #BF616A\ndiff-delete-background: #BF616A\ndiff-delete-foreground: <<colour foreground>>\ndiff-equal-background: \ndiff-equal-foreground: <<colour foreground>>\ndiff-insert-background: #A3BE8C\ndiff-insert-foreground: <<colour foreground>>\ndiff-invisible-background: \ndiff-invisible-foreground: <<colour muted-foreground>>\ndirty-indicator: #BF616A\ndownload-background: #A3BE8C\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour background>>\ndropdown-tab-background-selected: #ECEFF4\ndropdown-tab-background: #4C566A\ndropzone-background: #A3BE8C\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #5E81AC\nexternal-link-foreground: #8FBCBB\nforeground: #d8dee9\nmenubar-background: #2E3440\nmenubar-foreground: #d8dee9\nmessage-background: #2E3440\nmessage-border: #2E3440\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #3b4252\nmodal-footer-background: #3b4252\nmodal-footer-border: #3b4252\nmodal-header-border: #3b4252\nmuted-foreground: #4C566A\nnotification-background: <<colour primary>>\nnotification-border: #EBCB8B\npage-background: #2e3440\npre-background: #2E3440\npre-border: #2E3440\nprimary: #5E81AC\nselect-tag-background: #3b4252\nselect-tag-foreground: <<colour foreground>>\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #D8DEE9\nsidebar-controls-foreground: #4C566A\nsidebar-foreground-shadow: transparent\nsidebar-foreground: #D8DEE9\nsidebar-muted-foreground-hover: #4C566A\nsidebar-muted-foreground: #4C566A\nsidebar-tab-background-selected: #ECEFF4\nsidebar-tab-background: #4C566A\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: #4C566A\nsidebar-tab-divider: <<colour page-background>>\nsidebar-tab-foreground-selected: #4C566A\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #A3BE8C\nsidebar-tiddler-link-foreground: #81A1C1\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #B48EAD\ntab-background-selected: #ECEFF4\ntab-background: #4C566A\ntab-border-selected: #4C566A\ntab-border: #4C566A\ntab-divider: #4C566A\ntab-foreground-selected: #4C566A\ntab-foreground: #D8DEE9\ntable-border: #4C566A\ntable-footer-background: #2e3440\ntable-header-background: #2e3440\ntag-background: #A3BE8C\ntag-foreground: #4C566A\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: \ntiddler-controls-foreground-selected: #EBCB8B\ntiddler-controls-foreground: #4C566A\ntiddler-editor-background: #2e3440\ntiddler-editor-border-image: #2e3440\ntiddler-editor-border: #2e3440\ntiddler-editor-fields-even: #2e3440\ntiddler-editor-fields-odd: #2e3440\ntiddler-info-background: #2e3440\ntiddler-info-border: #2e3440\ntiddler-info-tab-background: #2e3440\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #4C566A\ntiddler-title-foreground: #81A1C1\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: #2d3038\nvery-muted-foreground: #2d3038\n"
},
"$:/palettes/Rocker": {
"title": "$:/palettes/Rocker",
"name": "Rocker",
"description": "A dark theme",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #999999\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #000\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #cc0000\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #ffffff\nsidebar-foreground-shadow: rgba(255,255,255, 0.0)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #000\nsidebar-tab-background: <<colour tab-background>>\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: <<colour tab-divider>>\nsidebar-tab-foreground-selected: \nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #ffbb99\nsidebar-tiddler-link-foreground: #cc0000\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ffbb99\ntag-foreground: #000\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #cc0000\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
},
"$:/palettes/SolarFlare": {
"title": "$:/palettes/SolarFlare",
"name": "Solar Flare",
"description": "Warm, relaxing earth colours",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": ": Background Tones\n\nbase03: #002b36\nbase02: #073642\n\n: Content Tones\n\nbase01: #586e75\nbase00: #657b83\nbase0: #839496\nbase1: #93a1a1\n\n: Background Tones\n\nbase2: #eee8d5\nbase3: #fdf6e3\n\n: Accent Colors\n\nyellow: #b58900\norange: #cb4b16\nred: #dc322f\nmagenta: #d33682\nviolet: #6c71c4\nblue: #268bd2\ncyan: #2aa198\ngreen: #859900\n\n: Additional Tones (RA)\n\nbase10: #c0c4bb\nviolet-muted: #7c81b0\nblue-muted: #4e7baa\n\nyellow-hot: #ffcc44\norange-hot: #eb6d20\nred-hot: #ff2222\nblue-hot: #2298ee\ngreen-hot: #98ee22\n\n: Palette\n\n: Do not use colour macro for background and foreground\nbackground: #fdf6e3\n download-foreground: <<colour background>>\n dragger-foreground: <<colour background>>\n dropdown-background: <<colour background>>\n modal-background: <<colour background>>\n sidebar-foreground-shadow: <<colour background>>\n tiddler-background: <<colour background>>\n tiddler-border: <<colour background>>\n tiddler-link-background: <<colour background>>\n tab-background-selected: <<colour background>>\n dropdown-tab-background-selected: <<colour tab-background-selected>>\nforeground: #657b83\n dragger-background: <<colour foreground>>\n tab-foreground: <<colour foreground>>\n tab-foreground-selected: <<colour tab-foreground>>\n sidebar-tab-foreground-selected: <<colour tab-foreground-selected>>\n sidebar-tab-foreground: <<colour tab-foreground>>\n sidebar-button-foreground: <<colour foreground>>\n sidebar-controls-foreground: <<colour foreground>>\n sidebar-foreground: <<colour foreground>>\n: base03\n: base02\n: base01\n alert-muted-foreground: <<colour base01>>\n: base00\n code-foreground: <<colour base00>>\n message-foreground: <<colour base00>>\n tag-foreground: <<colour base00>>\n: base0\n sidebar-tiddler-link-foreground: <<colour base0>>\n: base1\n muted-foreground: <<colour base1>>\n blockquote-bar: <<colour muted-foreground>>\n dropdown-border: <<colour muted-foreground>>\n sidebar-muted-foreground: <<colour muted-foreground>>\n tiddler-title-foreground: <<colour muted-foreground>>\n site-title-foreground: <<colour tiddler-title-foreground>>\n: base2\n modal-footer-background: <<colour base2>>\n page-background: <<colour base2>>\n modal-backdrop: <<colour page-background>>\n notification-background: <<colour page-background>>\n code-background: <<colour page-background>>\n code-border: <<colour code-background>>\n pre-background: <<colour page-background>>\n pre-border: <<colour pre-background>>\n sidebar-tab-background-selected: <<colour page-background>>\n table-header-background: <<colour base2>>\n tag-background: <<colour base2>>\n tiddler-editor-background: <<colour base2>>\n tiddler-info-background: <<colour base2>>\n tiddler-info-tab-background: <<colour base2>>\n tab-background: <<colour base2>>\n dropdown-tab-background: <<colour tab-background>>\n: base3\n alert-background: <<colour base3>>\n message-background: <<colour base3>>\n: yellow\n: orange\n: red\n: magenta\n alert-highlight: <<colour magenta>>\n: violet\n external-link-foreground: <<colour violet>>\n: blue\n: cyan\n: green\n: base10\n tiddler-controls-foreground: <<colour base10>>\n: violet-muted\n external-link-foreground-visited: <<colour violet-muted>>\n: blue-muted\n primary: <<colour blue-muted>>\n download-background: <<colour primary>>\n tiddler-link-foreground: <<colour primary>>\n\nalert-border: #b99e2f\ndirty-indicator: #ff0000\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nmessage-border: #cfd6e6\nmodal-border: #999999\nselect-tag-background:\nselect-tag-foreground:\nsidebar-controls-foreground-hover:\nsidebar-muted-foreground-hover:\nsidebar-tab-background: #ded8c5\nsidebar-tiddler-link-foreground-hover:\nstatic-alert-foreground: #aaaaaa\ntab-border: #cccccc\n modal-footer-border: <<colour tab-border>>\n modal-header-border: <<colour tab-border>>\n notification-border: <<colour tab-border>>\n sidebar-tab-border: <<colour tab-border>>\n tab-border-selected: <<colour tab-border>>\n sidebar-tab-border-selected: <<colour tab-border-selected>>\ntab-divider: #d8d8d8\n sidebar-tab-divider: <<colour tab-divider>>\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-border: #dddddd\ntiddler-subtitle-foreground: #c0c0c0\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\n"
},
"$:/palettes/SolarizedLight": {
"title": "$:/palettes/SolarizedLight",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"description": "Precision colors for machines and people",
"license": "MIT, Ethan Schoonover, https://github.com/altercation/solarized/blob/master/LICENSE",
"name": "SolarizedLight",
"text": "alert-background: #eee8d5\nalert-border: #073642\nalert-highlight: #cb4b16\nalert-muted-foreground: #586e75\nbackground: #fdf6e3\nblockquote-bar: <<colour muted-foreground>>\nbutton-background: #cb4b16\nbutton-foreground: #fdf6e3\nbutton-border: transparent\ncode-background: #eee8d5\ncode-border: #93a1a1\ncode-foreground: #d33682\ndiff-delete-background: #BF616A\ndiff-delete-foreground: <<colour foreground>>\ndiff-equal-background: \ndiff-equal-foreground: <<colour foreground>>\ndiff-insert-background: #859900\ndiff-insert-foreground: <<colour foreground>>\ndiff-invisible-background: \ndiff-invisible-foreground: <<colour muted-foreground>>\ndirty-indicator: #D08770\ndownload-background: #859900\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour background>>\ndropdown-tab-background-selected: #fdf6e3\ndropdown-tab-background: #93a1a1\ndropzone-background: #859900\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: #d33682\nexternal-link-foreground-visited: #b58900\nexternal-link-foreground: #cb4b16\nforeground: #839496\nmessage-background: #586e75\nmessage-border: #586e75\nmessage-foreground: #eee8d5\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #eee8d5\nmodal-footer-background: #eee8d5\nmodal-footer-border: #eee8d5\nmodal-header-border: #eee8d5\nmuted-foreground: #93a1a1\nnotification-background: #EBCB8B\nnotification-border: #D08770\npage-background: #eee8d5\npre-background: #eee8d5\npre-border: #93a1a1\nprimary: #2aa198\nselect-tag-background: #eee8d5\nselect-tag-foreground: <<colour foreground>>\nsidebar-button-foreground: #eee8d5\nsidebar-controls-foreground-hover: #268bd2\nsidebar-controls-foreground: #586e75\nsidebar-foreground-shadow: transparent\nsidebar-foreground: #839496\nsidebar-muted-foreground-hover: #657b83\nsidebar-muted-foreground: #93a1a1\nsidebar-tab-background-selected: #eee8d5\nsidebar-tab-background: #839496\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: #657b83\nsidebar-tab-divider: <<colour page-background>>\nsidebar-tab-foreground-selected: #839496\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #859900\nsidebar-tiddler-link-foreground: #268bd2\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #dc322f\ntab-background-selected: #fdf6e3\ntab-background: #839496\ntab-border-selected: #93a1a1\ntab-border: #93a1a1\ntab-divider: #fdf6e3\ntab-foreground-selected: #839496\ntab-foreground: #eee8d5\ntable-border: #657b83\ntable-footer-background: #657b83\ntable-header-background: #93a1a1\ntag-background: #6c71c4\ntag-foreground: #eee8d5\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #b58900\ntiddler-controls-foreground-selected: #b58900\ntiddler-controls-foreground: #073642\ntiddler-editor-background: #eee8d5\ntiddler-editor-border-image: #eee8d5\ntiddler-editor-border: #eee8d5\ntiddler-editor-fields-even: #eee8d5\ntiddler-editor-fields-odd: #fdf6e3\ntiddler-info-background: #eee8d5\ntiddler-info-border: #eee8d5\ntiddler-info-tab-background: #586e75\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #586e75\ntiddler-title-foreground: #073642\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: #839496\nvery-muted-foreground: #93a1a1\n"
},
"$:/palettes/SpartanDay": {
"title": "$:/palettes/SpartanDay",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"description": "Cold, spartan day colors",
"name": "Spartan Day",
"text": "alert-background: <<colour background>>\nalert-border: <<colour very-muted-foreground>>\nalert-highlight: <<colour very-muted-foreground>>\nalert-muted-foreground: <<colour muted-foreground>>\nbackground: #FAFAFA\nblockquote-bar: <<colour page-background>>\nbutton-background: transparent\nbutton-foreground: inherit\nbutton-border: <<colour tag-background>>\ncode-background: #ececec\ncode-border: #ececec\ncode-foreground: \ndirty-indicator: #c80000\ndownload-background: <<colour primary>>\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: #FFFFFF\ndropdown-border: <<colour dropdown-background>>\ndropdown-tab-background-selected: <<colour dropdown-background>>\ndropdown-tab-background: #F5F5F5\ndropzone-background: <<colour tag-background>>\nexternal-link-background-hover: transparent\nexternal-link-background-visited: transparent\nexternal-link-background: transparent\nexternal-link-foreground-hover: \nexternal-link-foreground-visited: \nexternal-link-foreground: \nforeground: rgba(0, 0, 0, 0.87)\nmessage-background: <<colour background>>\nmessage-border: <<colour very-muted-foreground>>\nmessage-foreground: rgba(0, 0, 0, 0.54)\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: <<colour very-muted-foreground>>\nmodal-footer-background: <<colour background>>\nmodal-footer-border: <<colour very-muted-foreground>>\nmodal-header-border: <<colour very-muted-foreground>>\nmuted-foreground: rgba(0, 0, 0, 0.54)\nnotification-background: <<colour dropdown-background>>\nnotification-border: <<colour dropdown-background>>\npage-background: #f4f4f4\npre-background: #ececec\npre-border: #ececec\nprimary: #3949ab\nselect-tag-background: <<colour background>>\nselect-tag-foreground: <<colour foreground>>\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #aeaeae\nsidebar-controls-foreground: #c6c6c6\nsidebar-foreground-shadow: transparent\nsidebar-foreground: rgba(0, 0, 0, 0.54)\nsidebar-muted-foreground-hover: rgba(0, 0, 0, 0.54)\nsidebar-muted-foreground: rgba(0, 0, 0, 0.38)\nsidebar-tab-background-selected: <<colour page-background>>\nsidebar-tab-background: transparent\nsidebar-tab-border-selected: <<colour table-border>>\nsidebar-tab-border: transparent\nsidebar-tab-divider: <<colour table-border>>\nsidebar-tab-foreground-selected: rgba(0, 0, 0, 0.87)\nsidebar-tab-foreground: rgba(0, 0, 0, 0.54)\nsidebar-tiddler-link-foreground-hover: rgba(0, 0, 0, 0.87)\nsidebar-tiddler-link-foreground: rgba(0, 0, 0, 0.54)\nsite-title-foreground: rgba(0, 0, 0, 0.87)\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: transparent\ntab-border-selected: <<colour table-border>>\ntab-border: transparent\ntab-divider: <<colour table-border>>\ntab-foreground-selected: rgba(0, 0, 0, 0.87)\ntab-foreground: rgba(0, 0, 0, 0.54)\ntable-border: #d8d8d8\ntable-footer-background: <<colour tiddler-editor-fields-odd>>\ntable-header-background: <<colour tiddler-editor-fields-even>>\ntag-background: #ec6\ntag-foreground: <<colour button-foreground>>\ntiddler-background: <<colour background>>\ntiddler-border: #f9f9f9\ntiddler-controls-foreground-hover: <<colour sidebar-controls-foreground-hover>>\ntiddler-controls-foreground-selected: <<colour sidebar-controls-foreground-hover>>\ntiddler-controls-foreground: <<colour sidebar-controls-foreground>>\ntiddler-editor-background: transparent\ntiddler-editor-border-image: \ntiddler-editor-border: #e8e7e7\ntiddler-editor-fields-even: rgba(0, 0, 0, 0.1)\ntiddler-editor-fields-odd: rgba(0, 0, 0, 0.04)\ntiddler-info-background: #F5F5F5\ntiddler-info-border: #F5F5F5\ntiddler-info-tab-background: <<colour tiddler-editor-fields-odd>>\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: <<colour muted-foreground>>\ntiddler-title-foreground: #000000\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: <<colour very-muted-foreground>>\nvery-muted-foreground: rgba(0, 0, 0, 0.12)\n"
},
"$:/palettes/SpartanNight": {
"title": "$:/palettes/SpartanNight",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"description": "Dark spartan colors",
"name": "Spartan Night",
"text": "alert-background: <<colour background>>\nalert-border: <<colour very-muted-foreground>>\nalert-highlight: <<colour very-muted-foreground>>\nalert-muted-foreground: <<colour muted-foreground>>\nbackground: #303030\nblockquote-bar: <<colour page-background>>\nbutton-background: transparent\nbutton-foreground: inherit\nbutton-border: <<colour tag-background>>\ncode-background: <<colour pre-background>>\ncode-border: <<colour pre-border>>\ncode-foreground: rgba(255, 255, 255, 0.54)\ndirty-indicator: #c80000\ndownload-background: <<colour primary>>\ndownload-foreground: <<colour foreground>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: #424242\ndropdown-border: <<colour dropdown-background>>\ndropdown-tab-background-selected: <<colour dropdown-background>>\ndropdown-tab-background: #050505\ndropzone-background: <<colour tag-background>>\nexternal-link-background-hover: transparent\nexternal-link-background-visited: transparent\nexternal-link-background: transparent\nexternal-link-foreground-hover: \nexternal-link-foreground-visited: #7c318c\nexternal-link-foreground: #9e3eb3\nforeground: rgba(255, 255, 255, 0.7)\nmessage-background: <<colour background>>\nmessage-border: <<colour very-muted-foreground>>\nmessage-foreground: rgba(255, 255, 255, 0.54)\nmodal-backdrop: <<colour page-background>>\nmodal-background: <<colour background>>\nmodal-border: <<colour very-muted-foreground>>\nmodal-footer-background: <<colour background>>\nmodal-footer-border: <<colour background>>\nmodal-header-border: <<colour very-muted-foreground>>\nmuted-foreground: rgba(255, 255, 255, 0.54)\nnotification-background: <<colour dropdown-background>>\nnotification-border: <<colour dropdown-background>>\npage-background: #212121\npre-background: #2a2a2a\npre-border: transparent\nprimary: #5656f3\nselect-tag-background: <<colour background>>\nselect-tag-foreground: <<colour foreground>>\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #494949\nsidebar-controls-foreground: #5d5d5d\nsidebar-foreground-shadow: transparent\nsidebar-foreground: rgba(255, 255, 255, 0.54)\nsidebar-muted-foreground-hover: rgba(255, 255, 255, 0.54)\nsidebar-muted-foreground: rgba(255, 255, 255, 0.38)\nsidebar-tab-background-selected: <<colour page-background>>\nsidebar-tab-background: transparent\nsidebar-tab-border-selected: <<colour table-border>>\nsidebar-tab-border: transparent\nsidebar-tab-divider: <<colour table-border>>\nsidebar-tab-foreground-selected: rgba(255, 255, 255, 0.87)\nsidebar-tab-foreground: rgba(255, 255, 255, 0.54)\nsidebar-tiddler-link-foreground-hover: rgba(255, 255, 255, 0.7)\nsidebar-tiddler-link-foreground: rgba(255, 255, 255, 0.54)\nsite-title-foreground: rgba(255, 255, 255, 0.7)\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: <<colour background>>\ntab-background: transparent\ntab-border-selected: <<colour table-border>>\ntab-border: transparent\ntab-divider: <<colour table-border>>\ntab-foreground-selected: rgba(255, 255, 255, 0.87)\ntab-foreground: rgba(255, 255, 255, 0.54)\ntable-border: #3a3a3a\ntable-footer-background: <<colour tiddler-editor-fields-odd>>\ntable-header-background: <<colour tiddler-editor-fields-even>>\ntag-background: #ec6\ntag-foreground: <<colour button-foreground>>\ntiddler-background: <<colour background>>\ntiddler-border: rgb(55,55,55)\ntiddler-controls-foreground-hover: <<colour sidebar-controls-foreground-hover>>\ntiddler-controls-foreground-selected: <<colour sidebar-controls-foreground-hover>>\ntiddler-controls-foreground: <<colour sidebar-controls-foreground>>\ntiddler-editor-background: transparent\ntiddler-editor-border-image: \ntiddler-editor-border: rgba(255, 255, 255, 0.08)\ntiddler-editor-fields-even: rgba(255, 255, 255, 0.1)\ntiddler-editor-fields-odd: rgba(255, 255, 255, 0.04)\ntiddler-info-background: #454545\ntiddler-info-border: #454545\ntiddler-info-tab-background: <<colour tiddler-editor-fields-odd>>\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: <<colour muted-foreground>>\ntiddler-title-foreground: #FFFFFF\ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \ntoolbar-info-button: \ntoolbar-edit-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-cancel-button: \ntoolbar-done-button: \nuntagged-background: <<colour very-muted-foreground>>\nvery-muted-foreground: rgba(255, 255, 255, 0.12)\n"
},
"$:/palettes/Twilight": {
"title": "$:/palettes/Twilight",
"tags": "$:/tags/Palette",
"author": "Thomas Elmiger",
"type": "application/x-tiddler-dictionary",
"name": "Twilight",
"description": "Delightful, soft darkness.",
"text": "alert-background: rgb(255, 255, 102)\nalert-border: rgb(232, 232, 125)\nalert-highlight: rgb(255, 51, 51)\nalert-muted-foreground: rgb(224, 82, 82)\nbackground: rgb(38, 38, 38)\nblockquote-bar: rgba(240, 196, 117, 0.7)\nbutton-background: rgb(63, 63, 63)\nbutton-border: rgb(127, 127, 127)\nbutton-foreground: rgb(179, 179, 179)\ncode-background: rgba(0,0,0,0.03)\ncode-border: rgba(0,0,0,0.08)\ncode-foreground: rgb(255, 94, 94)\ndiff-delete-background: #ffc9c9\ndiff-delete-foreground: <<colour foreground>>\ndiff-equal-background: \ndiff-equal-foreground: <<colour foreground>>\ndiff-insert-background: #aaefad\ndiff-insert-foreground: <<colour foreground>>\ndiff-invisible-background: \ndiff-invisible-foreground: <<colour muted-foreground>>\ndirty-indicator: rgb(255, 94, 94)\ndownload-background: #19a974\ndownload-foreground: rgb(38, 38, 38)\ndragger-background: rgb(179, 179, 179)\ndragger-foreground: rgb(38, 38, 38)\ndropdown-background: rgb(38, 38, 38)\ndropdown-border: rgb(255, 255, 255)\ndropdown-tab-background: rgba(0,0,0,.1)\ndropdown-tab-background-selected: rgba(255,255,255,1)\ndropzone-background: #9eebcf\nexternal-link-background: inherit\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-foreground: rgb(179, 179, 255)\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: rgb(153, 153, 255)\nforeground: rgb(179, 179, 179)\nmessage-background: <<colour tag-foreground>>\nmessage-border: #96ccff\nmessage-foreground: <<colour tag-background>>\nmodal-backdrop: rgb(179, 179, 179)\nmodal-background: rgb(38, 38, 38)\nmodal-border: rgba(0,0,0,.5)\nmodal-footer-background: #f4f4f4\nmodal-footer-border: rgba(0,0,0,.1)\nmodal-header-border: rgba(0,0,0,.2)\nmuted-foreground: rgb(255, 255, 255)\nnotification-background: <<colour tag-foreground>>\nnotification-border: <<colour tag-background>>\npage-background: rgb(26, 26, 26)\npre-background: rgb(25, 25, 25)\npre-border: rgba(0,0,0,.2)\nprimary: rgb(255, 201, 102)\nselect-tag-background: \nselect-tag-foreground: \nsidebar-button-foreground: rgb(179, 179, 179)\nsidebar-controls-foreground: rgb(153, 153, 153)\nsidebar-controls-foreground-hover: <<colour tiddler-controls-foreground-hover>>\nsidebar-foreground: rgb(141, 141, 141)\nsidebar-foreground-shadow: transparent\nsidebar-muted-foreground: rgba(0, 0, 0, 0.5)\nsidebar-muted-foreground-hover: rgb(141, 141, 141)\nsidebar-tab-background: rgba(141, 141, 141, 0.2)\nsidebar-tab-background-selected: rgb(26, 26, 26)\nsidebar-tab-border: rgb(127, 127, 127)\nsidebar-tab-border-selected: rgb(127, 127, 127)\nsidebar-tab-divider: rgb(127, 127, 127)\nsidebar-tab-foreground: rgb(179, 179, 179)\nsidebar-tab-foreground-selected: rgb(179, 179, 179)\nsidebar-tiddler-link-foreground: rgb(179, 179, 179)\nsidebar-tiddler-link-foreground-hover: rgb(115, 115, 115)\nsite-title-foreground: rgb(255, 201, 102)\nstatic-alert-foreground: rgba(0,0,0,.3)\ntab-background: rgba(0,0,0,0.125)\ntab-background-selected: rgb(38, 38, 38)\ntab-border: rgb(255, 201, 102)\ntab-border-selected: rgb(255, 201, 102)\ntab-divider: rgb(255, 201, 102)\ntab-foreground: rgb(179, 179, 179)\ntab-foreground-selected: rgb(179, 179, 179)\ntable-border: rgba(255,255,255,.3)\ntable-footer-background: rgba(0,0,0,.4)\ntable-header-background: rgba(0,0,0,.1)\ntag-background: rgb(255, 201, 102)\ntag-foreground: rgb(25, 25, 25)\ntiddler-background: rgb(38, 38, 38)\ntiddler-border: rgba(240, 196, 117, 0.7)\ntiddler-controls-foreground: rgb(128, 128, 128)\ntiddler-controls-foreground-hover: rgba(255, 255, 255, 0.8)\ntiddler-controls-foreground-selected: rgba(255, 255, 255, 0.9)\ntiddler-editor-background: rgb(33, 33, 33)\ntiddler-editor-border: rgb(63, 63, 63)\ntiddler-editor-border-image: rgb(25, 25, 25)\ntiddler-editor-fields-even: rgb(33, 33, 33)\ntiddler-editor-fields-odd: rgb(28, 28, 28)\ntiddler-info-background: rgb(43, 43, 43)\ntiddler-info-border: rgb(25, 25, 25)\ntiddler-info-tab-background: rgb(43, 43, 43)\ntiddler-link-background: rgb(38, 38, 38)\ntiddler-link-foreground: rgb(204, 204, 255)\ntiddler-subtitle-foreground: rgb(255, 255, 255)\ntiddler-title-foreground: rgb(255, 192, 76)\ntoolbar-cancel-button: \ntoolbar-close-button: \ntoolbar-delete-button: \ntoolbar-done-button: \ntoolbar-edit-button: \ntoolbar-info-button: \ntoolbar-new-button: \ntoolbar-options-button: \ntoolbar-save-button: \nuntagged-background: rgb(255, 255, 255)\nvery-muted-foreground: rgba(240, 196, 117, 0.7)\n"
},
"$:/palettes/Vanilla": {
"title": "$:/palettes/Vanilla",
"name": "Vanilla",
"description": "Pale and unobtrusive",
"tags": "$:/tags/Palette",
"type": "application/x-tiddler-dictionary",
"text": "alert-background: #ffe476\nalert-border: #b99e2f\nalert-highlight: #881122\nalert-muted-foreground: #b99e2f\nbackground: #ffffff\nblockquote-bar: <<colour muted-foreground>>\nbutton-background:\nbutton-foreground:\nbutton-border:\ncode-background: #f7f7f9\ncode-border: #e1e1e8\ncode-foreground: #dd1144\ndiff-delete-background: #ffc9c9\ndiff-delete-foreground: <<colour foreground>>\ndiff-equal-background: \ndiff-equal-foreground: <<colour foreground>>\ndiff-insert-background: #aaefad\ndiff-insert-foreground: <<colour foreground>>\ndiff-invisible-background: \ndiff-invisible-foreground: <<colour muted-foreground>>\ndirty-indicator: #ff0000\ndownload-background: #34c734\ndownload-foreground: <<colour background>>\ndragger-background: <<colour foreground>>\ndragger-foreground: <<colour background>>\ndropdown-background: <<colour background>>\ndropdown-border: <<colour muted-foreground>>\ndropdown-tab-background-selected: #fff\ndropdown-tab-background: #ececec\ndropzone-background: rgba(0,200,0,0.7)\nexternal-link-background-hover: inherit\nexternal-link-background-visited: inherit\nexternal-link-background: inherit\nexternal-link-foreground-hover: inherit\nexternal-link-foreground-visited: #0000aa\nexternal-link-foreground: #0000ee\nforeground: #333333\nmessage-background: #ecf2ff\nmessage-border: #cfd6e6\nmessage-foreground: #547599\nmodal-backdrop: <<colour foreground>>\nmodal-background: <<colour background>>\nmodal-border: #999999\nmodal-footer-background: #f5f5f5\nmodal-footer-border: #dddddd\nmodal-header-border: #eeeeee\nmuted-foreground: #bbb\nnotification-background: #ffffdd\nnotification-border: #999999\npage-background: #f4f4f4\npre-background: #f5f5f5\npre-border: #cccccc\nprimary: #5778d8\nselect-tag-background:\nselect-tag-foreground:\nsidebar-button-foreground: <<colour foreground>>\nsidebar-controls-foreground-hover: #000000\nsidebar-controls-foreground: #aaaaaa\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\nsidebar-foreground: #acacac\nsidebar-muted-foreground-hover: #444444\nsidebar-muted-foreground: #c0c0c0\nsidebar-tab-background-selected: #f4f4f4\nsidebar-tab-background: #e0e0e0\nsidebar-tab-border-selected: <<colour tab-border-selected>>\nsidebar-tab-border: <<colour tab-border>>\nsidebar-tab-divider: #e4e4e4\nsidebar-tab-foreground-selected:\nsidebar-tab-foreground: <<colour tab-foreground>>\nsidebar-tiddler-link-foreground-hover: #444444\nsidebar-tiddler-link-foreground: #999999\nsite-title-foreground: <<colour tiddler-title-foreground>>\nstatic-alert-foreground: #aaaaaa\ntab-background-selected: #ffffff\ntab-background: #d8d8d8\ntab-border-selected: #d8d8d8\ntab-border: #cccccc\ntab-divider: #d8d8d8\ntab-foreground-selected: <<colour tab-foreground>>\ntab-foreground: #666666\ntable-border: #dddddd\ntable-footer-background: #a8a8a8\ntable-header-background: #f0f0f0\ntag-background: #ec6\ntag-foreground: #ffffff\ntiddler-background: <<colour background>>\ntiddler-border: <<colour background>>\ntiddler-controls-foreground-hover: #888888\ntiddler-controls-foreground-selected: #444444\ntiddler-controls-foreground: #cccccc\ntiddler-editor-background: #f8f8f8\ntiddler-editor-border-image: #ffffff\ntiddler-editor-border: #cccccc\ntiddler-editor-fields-even: #e0e8e0\ntiddler-editor-fields-odd: #f0f4f0\ntiddler-info-background: #f8f8f8\ntiddler-info-border: #dddddd\ntiddler-info-tab-background: #f8f8f8\ntiddler-link-background: <<colour background>>\ntiddler-link-foreground: <<colour primary>>\ntiddler-subtitle-foreground: #c0c0c0\ntiddler-title-foreground: #182955\ntoolbar-new-button:\ntoolbar-options-button:\ntoolbar-save-button:\ntoolbar-info-button:\ntoolbar-edit-button:\ntoolbar-close-button:\ntoolbar-delete-button:\ntoolbar-cancel-button:\ntoolbar-done-button:\nuntagged-background: #999999\nvery-muted-foreground: #888888\nwikilist-background: #e5e5e5\nwikilist-item: #fff\nwikilist-info: #000\nwikilist-title: #666\nwikilist-title-svg: <<colour wikilist-title>>\nwikilist-url: #aaa\nwikilist-button-open: #4fb82b\nwikilist-button-open-hover: green\nwikilist-button-reveal: #5778d8\nwikilist-button-reveal-hover: blue\nwikilist-button-remove: #d85778\nwikilist-button-remove-hover: red\nwikilist-toolbar-background: #d3d3d3\nwikilist-toolbar-foreground: #888\nwikilist-droplink-dragover: rgba(255,192,192,0.5)\nwikilist-button-background: #acacac\nwikilist-button-foreground: #000\n"
},
"$:/core/readme": {
"title": "$:/core/readme",
"text": "This plugin contains TiddlyWiki's core components, comprising:\n\n* JavaScript code modules\n* Icons\n* Templates needed to create TiddlyWiki's user interface\n* British English (''en-GB'') translations of the localisable strings used by the core\n"
},
"$:/library/sjcl.js/license": {
"title": "$:/library/sjcl.js/license",
"type": "text/plain",
"text": "SJCL is open. You can use, modify and redistribute it under a BSD\nlicense or under the GNU GPL, version 2.0.\n\n---------------------------------------------------------------------\n\nhttp://opensource.org/licenses/BSD-2-Clause\n\nCopyright (c) 2009-2015, Emily Stark, Mike Hamburg and Dan Boneh at\nStanford University. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n1. Redistributions of source code must retain the above copyright\nnotice, this list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright\nnotice, this list of conditions and the following disclaimer in the\ndocumentation and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS\nIS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED\nTO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\nPARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nHOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\nTO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\nLIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\nNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n---------------------------------------------------------------------\n\nhttp://opensource.org/licenses/GPL-2.0\n\nThe Stanford Javascript Crypto Library (hosted here on GitHub) is a\nproject by the Stanford Computer Security Lab to build a secure,\npowerful, fast, small, easy-to-use, cross-browser library for\ncryptography in Javascript.\n\nCopyright (c) 2009-2015, Emily Stark, Mike Hamburg and Dan Boneh at\nStanford University.\n\nThis program is free software; you can redistribute it and/or modify it\nunder the terms of the GNU General Public License as published by the\nFree Software Foundation; either version 2 of the License, or (at your\noption) any later version.\n\nThis program is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General\nPublic License for more details.\n\nYou should have received a copy of the GNU General Public License along\nwith this program; if not, write to the Free Software Foundation, Inc.,\n59 Temple Place, Suite 330, Boston, MA 02111-1307 USA"
},
"$:/core/templates/MOTW.html": {
"title": "$:/core/templates/MOTW.html",
"text": "\\rules only filteredtranscludeinline transcludeinline entity\n<!-- The following comment is called a MOTW comment and is necessary for the TiddlyIE Internet Explorer extension -->\n<!-- saved from url=(0021)https://tiddlywiki.com --> "
},
"$:/core/templates/alltiddlers.template.html": {
"title": "$:/core/templates/alltiddlers.template.html",
"type": "text/vnd.tiddlywiki-html",
"text": "<!-- This template is provided for backwards compatibility with older versions of TiddlyWiki -->\n\n<$set name=\"exportFilter\" value=\"[!is[system]sort[title]]\">\n\n{{$:/core/templates/exporters/StaticRiver}}\n\n</$set>\n"
},
"$:/core/templates/canonical-uri-external-image": {
"title": "$:/core/templates/canonical-uri-external-image",
"text": "<!--\n\nThis template is used to assign the ''_canonical_uri'' field to external images.\n\nChange the `./images/` part to a different base URI. The URI can be relative or absolute.\n\n-->\n./images/<$view field=\"title\" format=\"doubleurlencoded\"/>"
},
"$:/core/templates/canonical-uri-external-raw": {
"title": "$:/core/templates/canonical-uri-external-raw",
"text": "<!--\n\nThis template is used to assign the ''_canonical_uri'' field to external raw files that are stored in the same directory\n\n-->\n<$view field=\"title\" format=\"doubleurlencoded\"/>"
},
"$:/core/templates/canonical-uri-external-text": {
"title": "$:/core/templates/canonical-uri-external-text",
"text": "<!--\n\nThis template is used to assign the ''_canonical_uri'' field to external text files.\n\nChange the `./text/` part to a different base URI. The URI can be relative or absolute.\n\n-->\n./text/<$view field=\"title\" format=\"doubleurlencoded\"/>.tid"
},
"$:/core/templates/css-tiddler": {
"title": "$:/core/templates/css-tiddler",
"text": "<!--\n\nThis template is used for saving CSS tiddlers as a style tag with data attributes representing the tiddler fields.\n\n-->`<style`<$fields template=' data-tiddler-$name$=\"$encoded_value$\"'></$fields>` type=\"text/css\">`<$view field=\"text\" format=\"text\" />`</style>`"
},
"$:/core/templates/exporters/CsvFile": {
"title": "$:/core/templates/exporters/CsvFile",
"tags": "$:/tags/Exporter",
"description": "{{$:/language/Exporters/CsvFile}}",
"extension": ".csv",
"text": "\\define renderContent()\n<$text text=<<csvtiddlers filter:\"\"\"$(exportFilter)$\"\"\" format:\"quoted-comma-sep\">>/>\n\\end\n<<renderContent>>\n"
},
"$:/core/templates/exporters/JsonFile": {
"title": "$:/core/templates/exporters/JsonFile",
"tags": "$:/tags/Exporter",
"description": "{{$:/language/Exporters/JsonFile}}",
"extension": ".json",
"text": "\\define renderContent()\n<$text text=<<jsontiddlers filter:\"\"\"$(exportFilter)$\"\"\">>/>\n\\end\n<<renderContent>>\n"
},
"$:/core/templates/exporters/StaticRiver": {
"title": "$:/core/templates/exporters/StaticRiver",
"tags": "$:/tags/Exporter",
"description": "{{$:/language/Exporters/StaticRiver}}",
"extension": ".html",
"text": "\\define tv-wikilink-template() #$uri_encoded$\n\\define tv-config-toolbar-icons() no\n\\define tv-config-toolbar-text() no\n\\define tv-config-toolbar-class() tc-btn-invisible\n\\rules only filteredtranscludeinline transcludeinline\n<!doctype html>\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"{{$:/core/templates/version}}\" />\n<meta name=\"format-detection\" content=\"telephone=no\">\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<title>{{$:/core/wiki/title}}</title>\n<div id=\"styleArea\">\n{{$:/boot/boot.css||$:/core/templates/css-tiddler}}\n</div>\n<style type=\"text/css\">\n{{$:/core/ui/PageStylesheet||$:/core/templates/wikified-tiddler}}\n</style>\n</head>\n<body class=\"tc-body\">\n{{$:/StaticBanner||$:/core/templates/html-tiddler}}\n<section class=\"tc-story-river\">\n{{$:/core/templates/exporters/StaticRiver/Content||$:/core/templates/html-tiddler}}\n</section>\n</body>\n</html>\n"
},
"$:/core/templates/exporters/StaticRiver/Content": {
"title": "$:/core/templates/exporters/StaticRiver/Content",
"text": "\\define renderContent()\n{{{ $(exportFilter)$ ||$:/core/templates/static-tiddler}}}\n\\end\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n<<renderContent>>\n"
},
"$:/core/templates/exporters/TidFile": {
"title": "$:/core/templates/exporters/TidFile",
"tags": "$:/tags/Exporter",
"description": "{{$:/language/Exporters/TidFile}}",
"extension": ".tid",
"text": "\\define renderContent()\n{{{ $(exportFilter)$ +[limit[1]] ||$:/core/templates/tid-tiddler}}}\n\\end\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n<<renderContent>>"
},
"$:/core/save/all-external-js": {
"title": "$:/core/save/all-external-js",
"text": "\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\\define saveTiddlerFilter()\n[is[tiddler]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/core]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] $(publishFilter)$\n\\end\n{{$:/core/templates/tiddlywiki5-external-js.html}}\n"
},
"$:/core/templates/tiddlywiki5.js": {
"title": "$:/core/templates/tiddlywiki5.js",
"text": "\\rules only filteredtranscludeinline transcludeinline codeinline\n\n/*\n{{ $:/core/copyright.txt ||$:/core/templates/plain-text-tiddler}}\n`*/\n`<!--~~ Library modules ~~-->\n{{{ [is[system]type[application/javascript]library[yes]] ||$:/core/templates/plain-text-tiddler}}}\n<!--~~ Boot prefix ~~-->\n{{ $:/boot/bootprefix.js ||$:/core/templates/plain-text-tiddler}}\n<!--~~ Core plugin ~~-->\n{{$:/core/templates/tiddlywiki5.js/tiddlers}}\n<!--~~ Boot kernel ~~-->\n{{ $:/boot/boot.js ||$:/core/templates/plain-text-tiddler}}\n"
},
"$:/core/templates/tiddlywiki5.js/tiddlers": {
"title": "$:/core/templates/tiddlywiki5.js/tiddlers",
"text": "`\n$tw.preloadTiddlerArray(`<$text text=<<jsontiddlers \"[[$:/core]]\">>/>`);\n$tw.preloadTiddlerArray([{\n\ttitle: \"$:/config/SaveWikiButton/Template\",\n\ttext: \"$:/core/save/all-external-js\"\n}]);\n`\n"
},
"$:/core/templates/tiddlywiki5-external-js.html": {
"title": "$:/core/templates/tiddlywiki5-external-js.html",
"text": "\\rules only filteredtranscludeinline transcludeinline\n<!doctype html>\n{{$:/core/templates/MOTW.html}}<html lang=\"`<$text text={{{ [{$:/language}get[name]] }}}/>`\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<!--~~ Raw markup for the top of the head section ~~-->\n{{{ [all[shadows+tiddlers]tag[$:/tags/RawMarkupWikified/TopHead]] ||$:/core/templates/raw-static-tiddler}}}\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=Edge\"/>\n<meta name=\"application-name\" content=\"TiddlyWiki\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"{{$:/core/templates/version}}\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"mobile-web-app-capable\" content=\"yes\"/>\n<meta name=\"format-detection\" content=\"telephone=no\" />\n<meta name=\"copyright\" content=\"{{$:/core/copyright.txt}}\" />\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<title>{{$:/core/wiki/title}}</title>\n<!--~~ This is a Tiddlywiki file. The points of interest in the file are marked with this pattern ~~-->\n\n<!--~~ Raw markup ~~-->\n{{{ [all[shadows+tiddlers]tag[$:/core/wiki/rawmarkup]] [all[shadows+tiddlers]tag[$:/tags/RawMarkup]] ||$:/core/templates/plain-text-tiddler}}}\n{{{ [all[shadows+tiddlers]tag[$:/tags/RawMarkupWikified]] ||$:/core/templates/raw-static-tiddler}}}\n</head>\n<body class=\"tc-body\">\n<!--~~ Raw markup for the top of the body section ~~-->\n{{{ [all[shadows+tiddlers]tag[$:/tags/RawMarkupWikified/TopBody]] ||$:/core/templates/raw-static-tiddler}}}\n<!--~~ Static styles ~~-->\n<div id=\"styleArea\">\n{{$:/boot/boot.css||$:/core/templates/css-tiddler}}\n</div>\n<!--~~ Static content for Google and browsers without JavaScript ~~-->\n<noscript>\n<div id=\"splashArea\">\n{{$:/core/templates/static.area}}\n</div>\n</noscript>\n<!--~~ Ordinary tiddlers ~~-->\n{{$:/core/templates/store.area.template.html}}\n<!--~~ Raw markup for the bottom of the body section ~~-->\n{{{ [all[shadows+tiddlers]tag[$:/tags/RawMarkupWikified/BottomBody]] ||$:/core/templates/raw-static-tiddler}}}\n</body>\n<script src=\"%24%3A%2Fcore%2Ftemplates%2Ftiddlywiki5.js\" onerror=\"alert('Error: Cannot load tiddlywiki.js');\"></script>\n</html>\n"
},
"$:/core/templates/html-div-skinny-tiddler": {
"title": "$:/core/templates/html-div-skinny-tiddler",
"text": "<!--\n\nThis template is a variant of $:/core/templates/html-div-tiddler used for saving skinny tiddlers (with no text field)\n\n-->`<div`<$fields template=' $name$=\"$encoded_value$\"'></$fields>`>\n<pre></pre>\n</div>`\n"
},
"$:/core/templates/html-div-tiddler": {
"title": "$:/core/templates/html-div-tiddler",
"text": "<!--\n\nThis template is used for saving tiddlers as an HTML DIV tag with attributes representing the tiddler fields.\n\n-->`<div`<$fields template=' $name$=\"$encoded_value$\"'></$fields>`>\n<pre>`<$view field=\"text\" format=\"htmlencoded\" />`</pre>\n</div>`\n"
},
"$:/core/templates/html-tiddler": {
"title": "$:/core/templates/html-tiddler",
"text": "<!--\n\nThis template is used for saving tiddlers as raw HTML\n\n--><$view field=\"text\" format=\"htmlwikified\" />"
},
"$:/core/templates/javascript-tiddler": {
"title": "$:/core/templates/javascript-tiddler",
"text": "<!--\n\nThis template is used for saving JavaScript tiddlers as a script tag with data attributes representing the tiddler fields.\n\n-->`<script`<$fields template=' data-tiddler-$name$=\"$encoded_value$\"'></$fields>` type=\"text/javascript\">`<$view field=\"text\" format=\"text\" />`</script>`"
},
"$:/core/templates/json-tiddler": {
"title": "$:/core/templates/json-tiddler",
"text": "<!--\n\nThis template is used for saving tiddlers as raw JSON\n\n--><$text text=<<jsontiddler>>/>"
},
"$:/core/templates/module-tiddler": {
"title": "$:/core/templates/module-tiddler",
"text": "<!--\n\nThis template is used for saving JavaScript tiddlers as a script tag with data attributes representing the tiddler fields. The body of the tiddler is wrapped in a call to the `$tw.modules.define` function in order to define the body of the tiddler as a module\n\n-->`<script`<$fields template=' data-tiddler-$name$=\"$encoded_value$\"'></$fields>` type=\"text/javascript\" data-module=\"yes\">$tw.modules.define(\"`<$view field=\"title\" format=\"jsencoded\" />`\",\"`<$view field=\"module-type\" format=\"jsencoded\" />`\",function(module,exports,require) {`<$view field=\"text\" format=\"text\" />`});\n</script>`"
},
"$:/core/templates/plain-text-tiddler": {
"title": "$:/core/templates/plain-text-tiddler",
"text": "<$view field=\"text\" format=\"text\" />"
},
"$:/core/templates/raw-static-tiddler": {
"title": "$:/core/templates/raw-static-tiddler",
"text": "<!--\n\nThis template is used for saving tiddlers as static HTML\n\n--><$view field=\"text\" format=\"plainwikified\" />"
},
"$:/core/save/all": {
"title": "$:/core/save/all",
"text": "\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\\define saveTiddlerFilter()\n[is[tiddler]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] $(publishFilter)$\n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
},
"$:/core/save/empty": {
"title": "$:/core/save/empty",
"text": "\\define saveTiddlerFilter()\n[is[system]] -[prefix[$:/state/popup/]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]]\n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
},
"$:/core/save/lazy-all": {
"title": "$:/core/save/lazy-all",
"text": "\\define saveTiddlerFilter()\n[is[system]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] +[sort[title]] \n\\end\n\\define skinnySaveTiddlerFilter()\n[!is[system]]\n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
},
"$:/core/save/lazy-images": {
"title": "$:/core/save/lazy-images",
"text": "\\define saveTiddlerFilter()\n[is[tiddler]] -[prefix[$:/state/popup/]] -[[$:/HistoryList]] -[[$:/boot/boot.css]] -[type[application/javascript]library[yes]] -[[$:/boot/boot.js]] -[[$:/boot/bootprefix.js]] -[!is[system]is[image]] +[sort[title]] \n\\end\n\\define skinnySaveTiddlerFilter()\n[is[image]]\n\\end\n{{$:/core/templates/tiddlywiki5.html}}\n"
},
"$:/core/templates/server/static.sidebar.wikitext": {
"title": "$:/core/templates/server/static.sidebar.wikitext",
"text": "\\whitespace trim\n<div class=\"tc-sidebar-scrollable\" style=\"overflow: auto;\">\n<div class=\"tc-sidebar-header\">\n<h1 class=\"tc-site-title\">\n<$transclude tiddler=\"$:/SiteTitle\"/>\n</h1>\n<div class=\"tc-site-subtitle\">\n<$transclude tiddler=\"$:/SiteSubtitle\"/>\n</div>\n<h2>\n</h2>\n<div class=\"tc-sidebar-lists\">\n<$list filter={{$:/DefaultTiddlers}}>\n<div class=\"tc-menu-list-subitem\">\n<$link><$text text=<<currentTiddler>>/></$link>\n</div>\n</$list>\n</div>\n<!-- Currently disabled the recent list as it is unweildy when the responsive narrow view kicks in\n<h2>\n{{$:/language/SideBar/Recent/Caption}}\n</h2>\n<div class=\"tc-sidebar-lists\">\n<$macrocall $name=\"timeline\" format={{$:/language/RecentChanges/DateFormat}}/>\n</div>\n</div>\n</div>\n-->\n"
},
"$:/core/templates/server/static.tiddler.html": {
"title": "$:/core/templates/server/static.tiddler.html",
"text": "\\whitespace trim\n\\define tv-wikilink-template() $uri_encoded$\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content={{$:/core/templates/version}} />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"mobile-web-app-capable\" content=\"yes\"/>\n<meta name=\"format-detection\" content=\"telephone=no\">\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<link rel=\"stylesheet\" href=\"%24%3A%2Fcore%2Ftemplates%2Fstatic.template.css\">\n<title><$view field=\"caption\" format=\"plainwikified\"><$view field=\"title\"/></$view>: <$view tiddler=\"$:/core/wiki/title\" format=\"plainwikified\"/></title>\n</head>\n<body class=\"tc-body\">\n<$transclude tiddler=\"$:/core/templates/server/static.sidebar.wikitext\" mode=\"inline\"/>\n<section class=\"tc-story-river\">\n<div class=\"tc-tiddler-frame\">\n<$transclude tiddler=\"$:/core/templates/server/static.tiddler.wikitext\" mode=\"inline\"/>\n</div>\n</section>\n</body>\n</html>"
},
"$:/core/templates/server/static.tiddler.wikitext": {
"title": "$:/core/templates/server/static.tiddler.wikitext",
"text": "\\whitespace trim\n<div class=\"tc-tiddler-title\">\n<div class=\"tc-titlebar\">\n<h2><$text text=<<currentTiddler>>/></h2>\n</div>\n</div>\n<div class=\"tc-subtitle\">\n<$link to={{!!modifier}}>\n<$view field=\"modifier\"/>\n</$link> <$view field=\"modified\" format=\"date\" template={{$:/language/Tiddler/DateFormat}}/>\n</div>\n<div class=\"tc-tags-wrapper\">\n<$list filter=\"[all[current]tags[]sort[title]]\">\n<a href={{{ [<currentTiddler>encodeuricomponent[]] }}}>\n<$macrocall $name=\"tag-pill\" tag=<<currentTiddler>>/>\n</a>\n</$list>\n</div>\n<div class=\"tc-tiddler-body\">\n<$transclude mode=\"block\"/>\n</div>\n"
},
"$:/core/templates/single.tiddler.window": {
"title": "$:/core/templates/single.tiddler.window",
"text": "\\whitespace trim\n\\define containerClasses()\ntc-page-container tc-page-view-$(storyviewTitle)$ tc-language-$(languageTitle)$\n\\end\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\n<$set name=\"tv-config-toolbar-icons\" value={{$:/config/Toolbar/Icons}}>\n\n<$set name=\"tv-config-toolbar-text\" value={{$:/config/Toolbar/Text}}>\n\n<$set name=\"tv-config-toolbar-class\" value={{$:/config/Toolbar/ButtonClass}}>\n\n<$set name=\"tv-show-missing-links\" value={{$:/config/MissingLinks}}>\n\n<$set name=\"storyviewTitle\" value={{$:/view}}>\n\n<$set name=\"languageTitle\" value={{{ [{$:/language}get[name]] }}}>\n\n<div class=<<containerClasses>>>\n\n<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\">\n\n<$transclude mode=\"block\"/>\n\n</$navigator>\n\n</div>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n"
},
"$:/core/templates/split-recipe": {
"title": "$:/core/templates/split-recipe",
"text": "<$list filter=\"[!is[system]]\">\ntiddler: <$view field=\"title\" format=\"urlencoded\"/>.tid\n</$list>\n"
},
"$:/core/templates/static-tiddler": {
"title": "$:/core/templates/static-tiddler",
"text": "<a name=<<currentTiddler>>>\n<$transclude tiddler=\"$:/core/ui/ViewTemplate\"/>\n</a>"
},
"$:/core/templates/static.area": {
"title": "$:/core/templates/static.area",
"text": "<$reveal type=\"nomatch\" state=\"$:/isEncrypted\" text=\"yes\">\n{{{ [all[shadows+tiddlers]tag[$:/tags/RawStaticContent]!has[draft.of]] ||$:/core/templates/raw-static-tiddler}}}\n{{$:/core/templates/static.content||$:/core/templates/html-tiddler}}\n</$reveal>\n<$reveal type=\"match\" state=\"$:/isEncrypted\" text=\"yes\">\nThis file contains an encrypted ~TiddlyWiki. Enable ~JavaScript and enter the decryption password when prompted.\n</$reveal>\n<!-- ensure splash screen isn't shown when JS is disabled -->\n`<style>\n.tc-remove-when-wiki-loaded {display: none;}\n</style>`\n"
},
"$:/core/templates/static.content": {
"title": "$:/core/templates/static.content",
"text": "<!-- For Google, and people without JavaScript-->\nThis [[TiddlyWiki|https://tiddlywiki.com]] contains the following tiddlers:\n\n<ul>\n<$list filter=<<saveTiddlerFilter>>>\n<li><$view field=\"title\" format=\"text\"></$view></li>\n</$list>\n</ul>\n"
},
"$:/core/templates/static.template.css": {
"title": "$:/core/templates/static.template.css",
"text": "{{$:/boot/boot.css||$:/core/templates/plain-text-tiddler}}\n\n{{$:/core/ui/PageStylesheet||$:/core/templates/wikified-tiddler}}\n"
},
"$:/core/templates/static.template.html": {
"title": "$:/core/templates/static.template.html",
"type": "text/vnd.tiddlywiki-html",
"text": "\\define tv-wikilink-template() static/$uri_doubleencoded$.html\n\\define tv-config-toolbar-icons() no\n\\define tv-config-toolbar-text() no\n\\define tv-config-toolbar-class() tc-btn-invisible\n\\rules only filteredtranscludeinline transcludeinline\n<!doctype html>\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"{{$:/core/templates/version}}\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"mobile-web-app-capable\" content=\"yes\"/>\n<meta name=\"format-detection\" content=\"telephone=no\">\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<title>{{$:/core/wiki/title}}</title>\n<div id=\"styleArea\">\n{{$:/boot/boot.css||$:/core/templates/css-tiddler}}\n</div>\n<style type=\"text/css\">\n{{$:/core/ui/PageStylesheet||$:/core/templates/wikified-tiddler}}\n</style>\n</head>\n<body class=\"tc-body\">\n{{$:/StaticBanner||$:/core/templates/html-tiddler}}\n{{$:/core/ui/PageTemplate||$:/core/templates/html-tiddler}}\n</body>\n</html>\n"
},
"$:/core/templates/static.tiddler.html": {
"title": "$:/core/templates/static.tiddler.html",
"text": "\\define tv-wikilink-template() $uri_doubleencoded$.html\n\\define tv-config-toolbar-icons() no\n\\define tv-config-toolbar-text() no\n\\define tv-config-toolbar-class() tc-btn-invisible\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n`<!doctype html>\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"`{{$:/core/templates/version}}`\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"mobile-web-app-capable\" content=\"yes\"/>\n<meta name=\"format-detection\" content=\"telephone=no\">\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<link rel=\"stylesheet\" href=\"static.css\">\n<title>`<$view field=\"caption\"><$view field=\"title\"/></$view>: {{$:/core/wiki/title}}`</title>\n</head>\n<body class=\"tc-body\">\n`{{$:/StaticBanner||$:/core/templates/html-tiddler}}`\n<section class=\"tc-story-river\">\n`<$view tiddler=\"$:/core/ui/ViewTemplate\" format=\"htmlwikified\"/>`\n</section>\n</body>\n</html>\n`"
},
"$:/core/templates/store.area.template.html": {
"title": "$:/core/templates/store.area.template.html",
"text": "<$reveal type=\"nomatch\" state=\"$:/isEncrypted\" text=\"yes\">\n`<div id=\"storeArea\" style=\"display:none;\">`\n<$list filter=<<saveTiddlerFilter>> template=\"$:/core/templates/html-div-tiddler\"/>\n<$list filter={{{ [<skinnySaveTiddlerFilter>] }}} template=\"$:/core/templates/html-div-skinny-tiddler\"/>\n`</div>`\n</$reveal>\n<$reveal type=\"match\" state=\"$:/isEncrypted\" text=\"yes\">\n`<!--~~ Encrypted tiddlers ~~-->`\n`<pre id=\"encryptedStoreArea\" type=\"text/plain\" style=\"display:none;\">`\n<$encrypt filter=<<saveTiddlerFilter>>/>\n`</pre>`\n</$reveal>"
},
"$:/core/templates/tid-tiddler": {
"title": "$:/core/templates/tid-tiddler",
"text": "<!--\n\nThis template is used for saving tiddlers in TiddlyWeb *.tid format\n\n--><$fields exclude='text bag' template='$name$: $value$\n'></$fields>`\n`<$view field=\"text\" format=\"text\" />"
},
"$:/core/templates/tiddler-metadata": {
"title": "$:/core/templates/tiddler-metadata",
"text": "<!--\n\nThis template is used for saving tiddler metadata *.meta files\n\n--><$fields exclude='text bag' template='$name$: $value$\n'></$fields>"
},
"$:/core/templates/tiddlywiki5.html": {
"title": "$:/core/templates/tiddlywiki5.html",
"text": "<$set name=\"saveTiddlerAndShadowsFilter\" filter=\"[subfilter<saveTiddlerFilter>] [subfilter<saveTiddlerFilter>plugintiddlers[]]\">\n`<!doctype html>\n`{{$:/core/templates/MOTW.html}}`<html lang=\"`<$text text={{{ [{$:/language}get[name]] }}}/>`\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n<!--~~ Raw markup for the top of the head section ~~-->\n`{{{ [<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkupWikified/TopHead]] ||$:/core/templates/raw-static-tiddler}}}`\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=Edge\"/>\n<meta name=\"application-name\" content=\"TiddlyWiki\" />\n<meta name=\"generator\" content=\"TiddlyWiki\" />\n<meta name=\"tiddlywiki-version\" content=\"`{{$:/core/templates/version}}`\" />\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n<meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n<meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n<meta name=\"mobile-web-app-capable\" content=\"yes\"/>\n<meta name=\"format-detection\" content=\"telephone=no\" />\n<meta name=\"copyright\" content=\"`{{$:/core/copyright.txt}}`\" />\n<link id=\"faviconLink\" rel=\"shortcut icon\" href=\"favicon.ico\">\n<title>`{{$:/core/wiki/title}}`</title>\n<!--~~ This is a Tiddlywiki file. The points of interest in the file are marked with this pattern ~~-->\n\n<!--~~ Raw markup ~~-->\n`{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/core/wiki/rawmarkup]] ||$:/core/templates/plain-text-tiddler}}}\n{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkup]] ||$:/core/templates/plain-text-tiddler}}}\n{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkupWikified]] ||$:/core/templates/raw-static-tiddler}}}`\n</head>\n<body class=\"tc-body\">\n<!--~~ Raw markup for the top of the body section ~~-->\n`{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkupWikified/TopBody]] ||$:/core/templates/raw-static-tiddler}}}`\n<!--~~ Static styles ~~-->\n<div id=\"styleArea\">\n`{{$:/boot/boot.css||$:/core/templates/css-tiddler}}`\n</div>\n<!--~~ Static content for Google and browsers without JavaScript ~~-->\n<noscript>\n<div id=\"splashArea\">\n`{{$:/core/templates/static.area}}`\n</div>\n</noscript>\n<!--~~ Ordinary tiddlers ~~-->\n`{{$:/core/templates/store.area.template.html}}`\n<!--~~ Library modules ~~-->\n<div id=\"libraryModules\" style=\"display:none;\">\n`{{{ [is[system]type[application/javascript]library[yes]] ||$:/core/templates/javascript-tiddler}}}`\n</div>\n<!--~~ Boot kernel prologue ~~-->\n<div id=\"bootKernelPrefix\" style=\"display:none;\">\n`{{ $:/boot/bootprefix.js ||$:/core/templates/javascript-tiddler}}`\n</div>\n<!--~~ Boot kernel ~~-->\n<div id=\"bootKernel\" style=\"display:none;\">\n`{{ $:/boot/boot.js ||$:/core/templates/javascript-tiddler}}`\n</div>\n<!--~~ Raw markup for the bottom of the body section ~~-->\n`{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkupWikified/BottomBody]] ||$:/core/templates/raw-static-tiddler}}}`\n</body>\n</html>`\n"
},
"$:/core/templates/version": {
"title": "$:/core/templates/version",
"text": "<<version>>"
},
"$:/core/templates/wikified-tiddler": {
"title": "$:/core/templates/wikified-tiddler",
"text": "<$transclude />"
},
"$:/core/ui/AboveStory/tw2-plugin-check": {
"title": "$:/core/ui/AboveStory/tw2-plugin-check",
"tags": "$:/tags/AboveStory",
"text": "\\define lingo-base() $:/language/AboveStory/ClassicPlugin/\n<$list filter=\"[all[system+tiddlers]tag[systemConfig]limit[1]]\">\n\n<div class=\"tc-message-box\">\n\n<<lingo Warning>>\n\n<ul>\n\n<$list filter=\"[all[system+tiddlers]tag[systemConfig]]\">\n\n<li>\n\n<$link><$view field=\"title\"/></$link>\n\n</li>\n\n</$list>\n\n</ul>\n\n</div>\n\n</$list>\n"
},
"$:/core/ui/Actions/new-image": {
"title": "$:/core/ui/Actions/new-image",
"tags": "$:/tags/Actions",
"description": "create a new image tiddler",
"text": "\\define get-type()\nimage/$(imageType)$\n\\end\n<$vars imageType={{$:/config/NewImageType}}>\n<$action-sendmessage $message=\"tm-new-tiddler\" type=<<get-type>> tags={{$:/config/NewTiddler/Tags!!tags}}/>\n</$vars>\n"
},
"$:/core/ui/Actions/new-journal": {
"title": "$:/core/ui/Actions/new-journal",
"tags": "$:/tags/Actions",
"description": "create a new journal tiddler",
"text": "<$vars journalTitleTemplate={{$:/config/NewJournal/Title}} journalTags={{$:/config/NewJournal/Tags!!tags}} journalText={{$:/config/NewJournal/Text}}>\n<$wikify name=\"journalTitle\" text=\"\"\"<$macrocall $name=\"now\" format=<<journalTitleTemplate>>/>\"\"\">\n<$reveal type=\"nomatch\" state=<<journalTitle>> text=\"\">\n<$action-sendmessage $message=\"tm-new-tiddler\" title=<<journalTitle>> tags=<<journalTags>> text={{{ [<journalTitle>get[]] }}}/>\n</$reveal>\n<$reveal type=\"match\" state=<<journalTitle>> text=\"\">\n<$action-sendmessage $message=\"tm-new-tiddler\" title=<<journalTitle>> tags=<<journalTags>> text=<<journalText>>/>\n</$reveal>\n</$wikify>\n</$vars>\n"
},
"$:/core/ui/Actions/new-tiddler": {
"title": "$:/core/ui/Actions/new-tiddler",
"tags": "$:/tags/Actions",
"description": "create a new empty tiddler",
"text": "<$action-sendmessage $message=\"tm-new-tiddler\" tags={{$:/config/NewTiddler/Tags!!tags}}/>\n"
},
"$:/core/ui/AdvancedSearch/Filter": {
"title": "$:/core/ui/AdvancedSearch/Filter",
"tags": "$:/tags/AdvancedSearch",
"caption": "{{$:/language/Search/Filter/Caption}}",
"text": "\\define lingo-base() $:/language/Search/\n<<lingo Filter/Hint>>\n\n<div class=\"tc-search tc-advanced-search\">\n<$edit-text tiddler=\"$:/temp/advancedsearch\" type=\"search\" tag=\"input\" focus={{$:/config/Search/AutoFocus}}/>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/AdvancedSearch/FilterButton]!has[draft.of]]\"><$transclude/></$list>\n</div>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$set name=\"resultCount\" value=\"\"\"<$count filter={{$:/temp/advancedsearch}}/>\"\"\">\n<div class=\"tc-search-results\">\n<<lingo Filter/Matches>>\n<$list filter={{$:/temp/advancedsearch}} template=\"$:/core/ui/ListItemTemplate\"/>\n</div>\n</$set>\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/Filter/FilterButtons/clear": {
"title": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/clear",
"tags": "$:/tags/AdvancedSearch/FilterButton",
"text": "<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/Filter/FilterButtons/delete": {
"title": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/delete",
"tags": "$:/tags/AdvancedSearch/FilterButton",
"text": "<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button popup=<<qualify \"$:/state/filterDeleteDropdown\">> class=\"tc-btn-invisible\">\n{{$:/core/images/delete-button}}\n</$button>\n</$reveal>\n\n<$reveal state=<<qualify \"$:/state/filterDeleteDropdown\">> type=\"popup\" position=\"belowleft\" animate=\"yes\">\n<div class=\"tc-block-dropdown-wrapper\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown\">\n<div class=\"tc-dropdown-item-plain\">\n<$set name=\"resultCount\" value=\"\"\"<$count filter={{$:/temp/advancedsearch}}/>\"\"\">\nAre you sure you wish to delete <<resultCount>> tiddler(s)?\n</$set>\n</div>\n<div class=\"tc-dropdown-item-plain\">\n<$button class=\"tc-btn\">\n<$action-deletetiddler $filter={{$:/temp/advancedsearch}}/>\nDelete these tiddlers\n</$button>\n</div>\n</div>\n</div>\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/Filter/FilterButtons/dropdown": {
"title": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/dropdown",
"tags": "$:/tags/AdvancedSearch/FilterButton",
"text": "<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/filterDropdown\">> class=\"tc-btn-invisible\">\n{{$:/core/images/down-arrow}}\n</$button>\n</span>\n\n<$reveal state=<<qualify \"$:/state/filterDropdown\">> type=\"popup\" position=\"belowleft\" animate=\"yes\">\n<$set name=\"tv-show-missing-links\" value=\"yes\">\n<$linkcatcher to=\"$:/temp/advancedsearch\">\n<div class=\"tc-block-dropdown-wrapper\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Filter]]\"><$link to={{!!filter}}><$transclude field=\"description\"/></$link>\n</$list>\n</div>\n</div>\n</$linkcatcher>\n</$set>\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/Filter/FilterButtons/export": {
"title": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/export",
"tags": "$:/tags/AdvancedSearch/FilterButton",
"text": "<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$macrocall $name=\"exportButton\" exportFilter={{$:/temp/advancedsearch}} lingoBase=\"$:/language/Buttons/ExportTiddlers/\"/>\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/Shadows": {
"title": "$:/core/ui/AdvancedSearch/Shadows",
"tags": "$:/tags/AdvancedSearch",
"caption": "{{$:/language/Search/Shadows/Caption}}",
"text": "\\define lingo-base() $:/language/Search/\n<$linkcatcher to=\"$:/temp/advancedsearch\">\n\n<<lingo Shadows/Hint>>\n\n<div class=\"tc-search\">\n<$edit-text tiddler=\"$:/temp/advancedsearch\" type=\"search\" tag=\"input\" focus={{$:/config/Search/AutoFocus}}/>\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</div>\n\n</$linkcatcher>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n\n<$list filter=\"[{$:/temp/advancedsearch}minlength{$:/config/Search/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n\n<$set name=\"resultCount\" value=\"\"\"<$count filter=\"[all[shadows]search{$:/temp/advancedsearch}] -[[$:/temp/advancedsearch]]\"/>\"\"\">\n\n<div class=\"tc-search-results\">\n\n<<lingo Shadows/Matches>>\n\n<$list filter=\"[all[shadows]search{$:/temp/advancedsearch}sort[title]limit[250]] -[[$:/temp/advancedsearch]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n\n</div>\n\n</$set>\n\n</$list>\n\n</$reveal>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"match\" text=\"\">\n\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/Standard": {
"title": "$:/core/ui/AdvancedSearch/Standard",
"tags": "$:/tags/AdvancedSearch",
"caption": "{{$:/language/Search/Standard/Caption}}",
"text": "\\define lingo-base() $:/language/Search/\n<$linkcatcher to=\"$:/temp/advancedsearch\">\n\n<<lingo Standard/Hint>>\n\n<div class=\"tc-search\">\n<$edit-text tiddler=\"$:/temp/advancedsearch\" type=\"search\" tag=\"input\" focus={{$:/config/Search/AutoFocus}}/>\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</div>\n\n</$linkcatcher>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$list filter=\"[{$:/temp/advancedsearch}minlength{$:/config/Search/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n<$set name=\"searchTiddler\" value=\"$:/temp/advancedsearch\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]butfirst[]limit[1]]\" emptyMessage=\"\"\"\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\">\n<$transclude/>\n</$list>\n\"\"\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\" default={{$:/config/SearchResults/Default}}/>\n</$list>\n</$set>\n</$list>\n</$reveal>\n"
},
"$:/core/ui/AdvancedSearch/System": {
"title": "$:/core/ui/AdvancedSearch/System",
"tags": "$:/tags/AdvancedSearch",
"caption": "{{$:/language/Search/System/Caption}}",
"text": "\\define lingo-base() $:/language/Search/\n<$linkcatcher to=\"$:/temp/advancedsearch\">\n\n<<lingo System/Hint>>\n\n<div class=\"tc-search\">\n<$edit-text tiddler=\"$:/temp/advancedsearch\" type=\"search\" tag=\"input\" focus={{$:/config/Search/AutoFocus}}/>\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</div>\n\n</$linkcatcher>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"nomatch\" text=\"\">\n\n<$list filter=\"[{$:/temp/advancedsearch}minlength{$:/config/Search/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n\n<$set name=\"resultCount\" value=\"\"\"<$count filter=\"[is[system]search{$:/temp/advancedsearch}] -[[$:/temp/advancedsearch]]\"/>\"\"\">\n\n<div class=\"tc-search-results\">\n\n<<lingo System/Matches>>\n\n<$list filter=\"[is[system]search{$:/temp/advancedsearch}sort[title]limit[250]] -[[$:/temp/advancedsearch]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n\n</div>\n\n</$set>\n\n</$list>\n\n</$reveal>\n\n<$reveal state=\"$:/temp/advancedsearch\" type=\"match\" text=\"\">\n\n</$reveal>\n"
},
"$:/AdvancedSearch": {
"title": "$:/AdvancedSearch",
"icon": "$:/core/images/advanced-search-button",
"color": "#bbb",
"text": "<div class=\"tc-advanced-search\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/AdvancedSearch]!has[draft.of]]\" \"$:/core/ui/AdvancedSearch/System\">>\n</div>\n"
},
"$:/core/ui/AlertTemplate": {
"title": "$:/core/ui/AlertTemplate",
"text": "<div class=\"tc-alert\">\n<div class=\"tc-alert-toolbar\">\n<$button class=\"tc-btn-invisible\"><$action-deletetiddler $tiddler=<<currentTiddler>>/>{{$:/core/images/cancel-button}}</$button>\n</div>\n<div class=\"tc-alert-subtitle\">\n<$wikify name=\"format\" text=<<lingo Tiddler/DateFormat>>>\n<$view field=\"component\"/> - <$view field=\"modified\" format=\"date\" template=<<format>>/> <$reveal type=\"nomatch\" state=\"!!count\" text=\"\"><span class=\"tc-alert-highlight\">({{$:/language/Count}}: <$view field=\"count\"/>)</span></$reveal>\n</$wikify>\n</div>\n<div class=\"tc-alert-body\">\n\n<$transclude/>\n\n</div>\n</div>\n"
},
"$:/core/ui/BinaryWarning": {
"title": "$:/core/ui/BinaryWarning",
"text": "\\define lingo-base() $:/language/BinaryWarning/\n<<lingo Prompt>>\n"
},
"$:/core/ui/Components/plugin-info": {
"title": "$:/core/ui/Components/plugin-info",
"text": "\\define lingo-base() $:/language/ControlPanel/Plugins/\n\n\\define popup-state-macro()\n$(qualified-state)$-$(currentTiddler)$\n\\end\n\n\\define tabs-state-macro()\n$(popup-state)$-$(pluginInfoType)$\n\\end\n\n\\define plugin-icon-title()\n$(currentTiddler)$/icon\n\\end\n\n\\define plugin-disable-title()\n$:/config/Plugins/Disabled/$(currentTiddler)$\n\\end\n\n\\define plugin-table-body(type,disabledMessage,default-popup-state)\n<div class=\"tc-plugin-info-chunk tc-plugin-info-toggle\">\n<$reveal type=\"nomatch\" state=<<popup-state>> text=\"yes\" default=\"\"\"$default-popup-state$\"\"\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<popup-state>> setTo=\"yes\">\n{{$:/core/images/chevron-right}}\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<popup-state>> text=\"yes\" default=\"\"\"$default-popup-state$\"\"\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<popup-state>> setTo=\"no\">\n{{$:/core/images/chevron-down}}\n</$button>\n</$reveal>\n</div>\n<div class=\"tc-plugin-info-chunk tc-plugin-info-icon\">\n<$transclude tiddler=<<currentTiddler>> subtiddler=<<plugin-icon-title>>>\n<$transclude tiddler=\"$:/core/images/plugin-generic-$type$\"/>\n</$transclude>\n</div>\n<div class=\"tc-plugin-info-chunk tc-plugin-info-description\">\n<h1>\n''<$text text={{{ [<currentTiddler>get[name]] ~[<currentTiddler>split[/]last[1]] }}}/>'': <$view field=\"description\"><$view field=\"title\"/></$view> $disabledMessage$\n</h1>\n<h2>\n<$view field=\"title\"/>\n</h2>\n<h2>\n<div><em><$view field=\"version\"/></em></div>\n</h2>\n</div>\n\\end\n\n\\define plugin-info(type,default-popup-state)\n<$set name=\"popup-state\" value=<<popup-state-macro>>>\n<$reveal type=\"nomatch\" state=<<plugin-disable-title>> text=\"yes\">\n<$link to={{!!title}} class=\"tc-plugin-info\">\n<<plugin-table-body type:\"$type$\" default-popup-state:\"\"\"$default-popup-state$\"\"\">>\n</$link>\n</$reveal>\n<$reveal type=\"match\" state=<<plugin-disable-title>> text=\"yes\">\n<$link to={{!!title}} class=\"tc-plugin-info tc-plugin-info-disabled\">\n<<plugin-table-body type:\"$type$\" default-popup-state:\"\"\"$default-popup-state$\"\"\" disabledMessage:\"<$macrocall $name='lingo' title='Disabled/Status'/>\">>\n</$link>\n</$reveal>\n<$reveal type=\"match\" text=\"yes\" state=<<popup-state>> default=\"\"\"$default-popup-state$\"\"\">\n<div class=\"tc-plugin-info-dropdown\">\n<div class=\"tc-plugin-info-dropdown-body\">\n<$list filter=\"[all[current]] -[[$:/core]]\">\n<div style=\"float:right;\">\n<$reveal type=\"nomatch\" state=<<plugin-disable-title>> text=\"yes\">\n<$button set=<<plugin-disable-title>> setTo=\"yes\" tooltip={{$:/language/ControlPanel/Plugins/Disable/Hint}} aria-label={{$:/language/ControlPanel/Plugins/Disable/Caption}}>\n<<lingo Disable/Caption>>\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<plugin-disable-title>> text=\"yes\">\n<$button set=<<plugin-disable-title>> setTo=\"no\" tooltip={{$:/language/ControlPanel/Plugins/Enable/Hint}} aria-label={{$:/language/ControlPanel/Plugins/Enable/Caption}}>\n<<lingo Enable/Caption>>\n</$button>\n</$reveal>\n</div>\n</$list>\n<$set name=\"tabsList\" filter=\"[<currentTiddler>list[]] contents\">\n<$macrocall $name=\"tabs\" state=<<tabs-state-macro>> tabsList=<<tabsList>> default={{{ [enlist<tabsList>] }}} template=\"$:/core/ui/PluginInfo\"/>\n</$set>\n</div>\n</div>\n</$reveal>\n</$set>\n\\end\n\n<$macrocall $name=\"plugin-info\" type=<<plugin-type>> default-popup-state=<<default-popup-state>>/>\n"
},
"$:/core/ui/Components/tag-link": {
"title": "$:/core/ui/Components/tag-link",
"text": "<$link>\n<$set name=\"backgroundColor\" value={{!!color}}>\n<span style=<<tag-styles>> class=\"tc-tag-label\">\n<$view field=\"title\" format=\"text\"/>\n</span>\n</$set>\n</$link>"
},
"$:/core/ui/ControlPanel/Advanced": {
"title": "$:/core/ui/ControlPanel/Advanced",
"tags": "$:/tags/ControlPanel/Info",
"caption": "{{$:/language/ControlPanel/Advanced/Caption}}",
"text": "{{$:/language/ControlPanel/Advanced/Hint}}\n\n<div class=\"tc-control-panel\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Advanced]!has[draft.of]]\" \"$:/core/ui/ControlPanel/TiddlerFields\">>\n</div>\n"
},
"$:/core/ui/ControlPanel/Appearance": {
"title": "$:/core/ui/ControlPanel/Appearance",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/Appearance/Caption}}",
"text": "{{$:/language/ControlPanel/Appearance/Hint}}\n\n<div class=\"tc-control-panel\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Appearance]!has[draft.of]]\" \"$:/core/ui/ControlPanel/Theme\">>\n</div>\n"
},
"$:/core/ui/ControlPanel/Basics": {
"title": "$:/core/ui/ControlPanel/Basics",
"tags": "$:/tags/ControlPanel/Info",
"caption": "{{$:/language/ControlPanel/Basics/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Basics/\n\n\\define show-filter-count(filter)\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" $value=\"\"\"$filter$\"\"\"/>\n<$action-setfield $tiddler=\"$:/state/tab--1498284803\" $value=\"$:/core/ui/AdvancedSearch/Filter\"/>\n<$action-navigate $to=\"$:/AdvancedSearch\"/>\n''<$count filter=\"\"\"$filter$\"\"\"/>''\n{{$:/core/images/advanced-search-button}}\n</$button>\n\\end\n\n|<<lingo Version/Prompt>> |''<<version>>'' |\n|<$link to=\"$:/SiteTitle\"><<lingo Title/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteTitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/SiteSubtitle\"><<lingo Subtitle/Prompt>></$link> |<$edit-text tiddler=\"$:/SiteSubtitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/status/UserName\"><<lingo Username/Prompt>></$link> |<$edit-text tiddler=\"$:/status/UserName\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/config/AnimationDuration\"><<lingo AnimDuration/Prompt>></$link> |<$edit-text tiddler=\"$:/config/AnimationDuration\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/DefaultTiddlers\"><<lingo DefaultTiddlers/Prompt>></$link> |<<lingo DefaultTiddlers/TopHint>><br> <$edit tag=\"textarea\" tiddler=\"$:/DefaultTiddlers\" class=\"tc-edit-texteditor\"/><br>//<<lingo DefaultTiddlers/BottomHint>>// |\n|<$link to=\"$:/language/DefaultNewTiddlerTitle\"><<lingo NewTiddler/Title/Prompt>></$link> |<$edit-text tiddler=\"$:/language/DefaultNewTiddlerTitle\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/config/NewJournal/Title\"><<lingo NewJournal/Title/Prompt>></$link> |<$edit-text tiddler=\"$:/config/NewJournal/Title\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/config/NewJournal/Text\"><<lingo NewJournal/Text/Prompt>></$link> |<$edit tiddler=\"$:/config/NewJournal/Text\" tag=\"textarea\" class=\"tc-edit-texteditor\" default=\"\"/> |\n|<$link to=\"$:/config/NewTiddler/Tags\"><<lingo NewTiddler/Tags/Prompt>></$link> |<$list filter=\"[[$:/config/NewTiddler/Tags]]\" template=\"$:/core/ui/EditTemplate/tags\"/> |\n|<$link to=\"$:/config/NewJournal/Tags\"><<lingo NewJournal/Tags/Prompt>></$link> |<$list filter=\"[[$:/config/NewJournal/Tags]]\" template=\"$:/core/ui/EditTemplate/tags\"/> |\n|<$link to=\"$:/config/AutoFocus\"><<lingo AutoFocus/Prompt>></$link> |{{$:/snippets/minifocusswitcher}} |\n|<<lingo Language/Prompt>> |{{$:/snippets/minilanguageswitcher}} |\n|<<lingo Tiddlers/Prompt>> |<<show-filter-count \"[!is[system]sort[title]]\">> |\n|<<lingo Tags/Prompt>> |<<show-filter-count \"[tags[]sort[title]]\">> |\n|<<lingo SystemTiddlers/Prompt>> |<<show-filter-count \"[is[system]sort[title]]\">> |\n|<<lingo ShadowTiddlers/Prompt>> |<<show-filter-count \"[all[shadows]sort[title]]\">> |\n|<<lingo OverriddenShadowTiddlers/Prompt>> |<<show-filter-count \"[is[tiddler]is[shadow]sort[title]]\">> |\n"
},
"$:/core/ui/ControlPanel/EditorTypes": {
"title": "$:/core/ui/ControlPanel/EditorTypes",
"tags": "$:/tags/ControlPanel/Advanced",
"caption": "{{$:/language/ControlPanel/EditorTypes/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/EditorTypes/\n\n<<lingo Hint>>\n\n<table>\n<tbody>\n<tr>\n<th><<lingo Type/Caption>></th>\n<th><<lingo Editor/Caption>></th>\n</tr>\n<$list filter=\"[all[shadows+tiddlers]prefix[$:/config/EditorTypeMappings/]sort[title]]\">\n<tr>\n<td>\n<$link>\n<$list filter=\"[all[current]removeprefix[$:/config/EditorTypeMappings/]]\">\n<$text text={{!!title}}/>\n</$list>\n</$link>\n</td>\n<td>\n<$view field=\"text\"/>\n</td>\n</tr>\n</$list>\n</tbody>\n</table>\n"
},
"$:/core/ui/ControlPanel/Info": {
"title": "$:/core/ui/ControlPanel/Info",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/Info/Caption}}",
"text": "{{$:/language/ControlPanel/Info/Hint}}\n\n<div class=\"tc-control-panel\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Info]!has[draft.of]]\" \"$:/core/ui/ControlPanel/Basics\">>\n</div>\n"
},
"$:/core/ui/ControlPanel/KeyboardShortcuts": {
"title": "$:/core/ui/ControlPanel/KeyboardShortcuts",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/KeyboardShortcuts/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/KeyboardShortcuts/\n\n\\define new-shortcut(title)\n<div class=\"tc-dropdown-item-plain\">\n<$edit-shortcut tiddler=\"$title$\" placeholder={{$:/language/ControlPanel/KeyboardShortcuts/Add/Prompt}} focus=\"true\" style=\"width:auto;\"/> <$button>\n<<lingo Add/Caption>>\n<$action-listops\n\t$tiddler=\"$(shortcutTitle)$\"\n\t$field=\"text\"\n\t$subfilter=\"[{$title$}]\"\n/>\n<$action-deletetiddler\n\t$tiddler=\"$title$\"\n/>\n</$button>\n</div>\n\\end\n\n\\define shortcut-list-item(caption)\n<td>\n</td>\n<td style=\"text-align:right;font-size:0.7em;\">\n<<lingo Platform/$caption$>>\n</td>\n<td>\n<div style=\"position:relative;\">\n<$button popup=<<qualify \"$:/state/dropdown/$(shortcutTitle)$\">> class=\"tc-btn-invisible\">\n{{$:/core/images/edit-button}}\n</$button>\n<$macrocall $name=\"displayshortcuts\" $output=\"text/html\" shortcuts={{$(shortcutTitle)$}} prefix=\"<kbd>\" separator=\"</kbd> <kbd>\" suffix=\"</kbd>\"/>\n\n<$reveal state=<<qualify \"$:/state/dropdown/$(shortcutTitle)$\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-block-dropdown-wrapper\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown tc-popup-keep\">\n<$list filter=\"[list[$(shortcutTitle)$!!text]sort[title]]\" variable=\"shortcut\" emptyMessage=\"\"\"\n<div class=\"tc-dropdown-item-plain\">\n//<<lingo NoShortcuts/Caption>>//\n</div>\n\"\"\">\n<div class=\"tc-dropdown-item-plain\">\n<$button class=\"tc-btn-invisible\" tooltip={{$:/language/ControlPanel/KeyboardShortcuts/Remove/Hint}}>\n<$action-listops\n\t$tiddler=\"$(shortcutTitle)$\"\n\t$field=\"text\"\n\t$subfilter=\"+[remove<shortcut>]\"\n/>\n<small>{{$:/core/images/close-button}}</small>\n</$button>\n<kbd>\n<$macrocall $name=\"displayshortcuts\" $output=\"text/html\" shortcuts=<<shortcut>>/>\n</kbd>\n</div>\n</$list>\n<hr/>\n<$macrocall $name=\"new-shortcut\" title=<<qualify \"$:/state/new-shortcut/$(shortcutTitle)$\">>/>\n</div>\n</div>\n</$reveal>\n</div>\n</td>\n\\end\n\n\\define shortcut-list(caption,prefix)\n<tr>\n<$list filter=\"[[$prefix$$(shortcutName)$]]\" variable=\"shortcutTitle\">\n<<shortcut-list-item \"$caption$\">>\n</$list>\n</tr>\n\\end\n\n\\define shortcut-editor()\n<<shortcut-list \"All\" \"$:/config/shortcuts/\">>\n<<shortcut-list \"Mac\" \"$:/config/shortcuts-mac/\">>\n<<shortcut-list \"NonMac\" \"$:/config/shortcuts-not-mac/\">>\n<<shortcut-list \"Linux\" \"$:/config/shortcuts-linux/\">>\n<<shortcut-list \"NonLinux\" \"$:/config/shortcuts-not-linux/\">>\n<<shortcut-list \"Windows\" \"$:/config/shortcuts-windows/\">>\n<<shortcut-list \"NonWindows\" \"$:/config/shortcuts-not-windows/\">>\n\\end\n\n\\define shortcut-preview()\n<$macrocall $name=\"displayshortcuts\" $output=\"text/html\" shortcuts={{$(shortcutPrefix)$$(shortcutName)$}} prefix=\"<kbd>\" separator=\"</kbd> <kbd>\" suffix=\"</kbd>\"/>\n\\end\n\n\\define shortcut-item-inner()\n<tr>\n<td>\n<$reveal type=\"nomatch\" state=<<dropdownStateTitle>> text=\"open\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield\n\t$tiddler=<<dropdownStateTitle>>\n\t$value=\"open\"\n/>\n{{$:/core/images/right-arrow}}\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<dropdownStateTitle>> text=\"open\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield\n\t$tiddler=<<dropdownStateTitle>>\n\t$value=\"close\"\n/>\n{{$:/core/images/down-arrow}}\n</$button>\n</$reveal>\n''<$text text=<<shortcutName>>/>''\n</td>\n<td>\n<$transclude tiddler=\"$:/config/ShortcutInfo/$(shortcutName)$\"/>\n</td>\n<td>\n<$list filter=\"$:/config/shortcuts/ $:/config/shortcuts-mac/ $:/config/shortcuts-not-mac/ $:/config/shortcuts-linux/ $:/config/shortcuts-not-linux/ $:/config/shortcuts-windows/ $:/config/shortcuts-not-windows/\" variable=\"shortcutPrefix\">\n<<shortcut-preview>>\n</$list>\n</td>\n</tr>\n<$set name=\"dropdownState\" value={{$(dropdownStateTitle)$}}>\n<$list filter=\"[<dropdownState>match[open]]\" variable=\"listItem\">\n<<shortcut-editor>>\n</$list>\n</$set>\n\\end\n\n\\define shortcut-item()\n<$set name=\"dropdownStateTitle\" value=<<qualify \"$:/state/dropdown/keyboardshortcut/$(shortcutName)$\">>>\n<<shortcut-item-inner>>\n</$set>\n\\end\n\n<table>\n<tbody>\n<$list filter=\"[all[shadows+tiddlers]removeprefix[$:/config/ShortcutInfo/]]\" variable=\"shortcutName\">\n<<shortcut-item>>\n</$list>\n</tbody>\n</table>\n"
},
"$:/core/ui/ControlPanel/LoadedModules": {
"title": "$:/core/ui/ControlPanel/LoadedModules",
"tags": "$:/tags/ControlPanel/Advanced",
"caption": "{{$:/language/ControlPanel/LoadedModules/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/\n<<lingo LoadedModules/Hint>>\n\n{{$:/snippets/modules}}\n"
},
"$:/core/ui/ControlPanel/Modals/AddPlugins": {
"title": "$:/core/ui/ControlPanel/Modals/AddPlugins",
"subtitle": "{{$:/core/images/download-button}} {{$:/language/ControlPanel/Plugins/Add/Caption}}",
"text": "\\define install-plugin-actions()\n<$action-sendmessage $message=\"tm-load-plugin-from-library\" url={{!!url}} title={{$(assetInfo)$!!original-title}}/>\n<$set name=\"url\" value={{!!url}}>\n<$set name=\"currentTiddler\" value=<<assetInfo>>>\n<$list filter=\"[enlist{!!dependents}] [{!!parent-plugin}] +[sort[title]]\" variable=\"dependency\">\n<$action-sendmessage $message=\"tm-load-plugin-from-library\" url=<<url>> title=<<dependency>>/>\n</$list>\n</$set>\n</$set>\n\\end\n\n\\define install-plugin-button()\n<div>\n<$set name=\"libraryVersion\" value={{{ [<assetInfo>get[version]] }}}>\n<$set name=\"installedVersion\" value={{{ [<assetInfo>get[original-title]get[version]] }}}>\n<$set name=\"reinstall-type\" value={{{ [<libraryVersion>compare:version:eq<installedVersion>then[tc-reinstall]] [<libraryVersion>compare:version:gt<installedVersion>then[tc-reinstall-upgrade]] [<libraryVersion>compare:version:lt<installedVersion>then[tc-reinstall-downgrade]] }}}>\n<$button actions=<<install-plugin-actions>> class={{{ [<assetInfo>get[original-title]has[version]then<reinstall-type>] tc-btn-invisible tc-install-plugin +[join[ ]] }}}>\n{{$:/core/images/download-button}}\n<$list filter=\"[<assetInfo>get[original-title]get[version]]\" variable=\"ignore\" emptyMessage=\"{{$:/language/ControlPanel/Plugins/Install/Caption}}\">\n<$list filter=\"[<libraryVersion>compare:version:gt<installedVersion>]\" variable=\"ignore\" emptyMessage=\"\"\"\n<$list filter=\"[<libraryVersion>compare:version:lt<installedVersion>]\" variable=\"ignore\" emptyMessage=\"{{$:/language/ControlPanel/Plugins/Reinstall/Caption}}\">\n{{$:/language/ControlPanel/Plugins/Downgrade/Caption}}\n</$list>\n\"\"\">\n{{$:/language/ControlPanel/Plugins/Update/Caption}}\n</$list>\n</$list>\n</$button>\n<div>\n</div>\n<$reveal stateTitle=<<assetInfo>> stateField=\"requires-reload\" type=\"match\" text=\"yes\">{{$:/language/ControlPanel/Plugins/PluginWillRequireReload}}</$reveal>\n</$set>\n</$set>\n</$set>\n</div>\n\\end\n\n\\define popup-state-macro()\n$:/state/add-plugin-info/$(connectionTiddler)$/$(assetInfo)$\n\\end\n\n\\define display-plugin-info(type)\n<$set name=\"popup-state\" value=<<popup-state-macro>>>\n<div class=\"tc-plugin-info\">\n<div class=\"tc-plugin-info-chunk tc-plugin-info-toggle\">\n<$reveal type=\"nomatch\" state=<<popup-state>> text=\"yes\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<popup-state>> setTo=\"yes\">\n{{$:/core/images/chevron-right}}\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<popup-state>> text=\"yes\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<popup-state>> setTo=\"no\">\n{{$:/core/images/chevron-down}}\n</$button>\n</$reveal>\n</div>\n<div class=\"tc-plugin-info-chunk tc-plugin-info-icon\">\n<$list filter=\"[<assetInfo>has[icon]]\" emptyMessage=\"\"\"<$transclude tiddler=\"$:/core/images/plugin-generic-$type$\"/>\"\"\">\n<img src={{$(assetInfo)$!!icon}}/>\n</$list>\n</div>\n<div class=\"tc-plugin-info-chunk tc-plugin-info-description\">\n<h1><strong><$text text={{{ [<assetInfo>get[name]] ~[<assetInfo>get[original-title]split[/]last[1]] }}}/></strong>: <$view tiddler=<<assetInfo>> field=\"description\"/></h1>\n<h2><$view tiddler=<<assetInfo>> field=\"original-title\"/></h2>\n<div><em><$view tiddler=<<assetInfo>> field=\"version\"/></em></div>\n<$list filter=\"[<assetInfo>get[original-title]get[version]]\" variable=\"installedVersion\"><div><em>{{$:/language/ControlPanel/Plugins/AlreadyInstalled/Hint}}</em></div></$list>\n</div>\n<div class=\"tc-plugin-info-chunk tc-plugin-info-buttons\">\n<<install-plugin-button>>\n</div>\n</div>\n<$set name=\"original-title\" value={{{ [<assetInfo>get[original-title]] }}}>\n<$reveal type=\"match\" text=\"yes\" state=<<popup-state>>>\n<div class=\"tc-plugin-info-dropdown\">\n<$list filter=\"[enlist{!!dependents}] [<currentTiddler>get[parent-plugin]] +[limit[1]] ~[<assetInfo>get[original-title]!is[tiddler]]\" variable=\"ignore\">\n<div class=\"tc-plugin-info-dropdown-message\">\n<$list filter=\"[<assetInfo>get[original-title]!is[tiddler]]\">\n{{$:/language/ControlPanel/Plugins/NotInstalled/Hint}}\n</$list>\n<$set name=\"currentTiddler\" value=<<assetInfo>>>\n<$list filter=\"[enlist{!!dependents}] [<currentTiddler>get[parent-plugin]] +[limit[1]]\" variable=\"ignore\">\n<div>\n{{$:/language/ControlPanel/Plugins/AlsoRequires}}\n<$list filter=\"[enlist{!!dependents}] [{!!parent-plugin}] +[sort[title]]\" variable=\"dependency\">\n<$text text=<<dependency>>/>\n</$list>\n</div>\n</$list>\n</$set>\n</div>\n</$list>\n<div class=\"tc-plugin-info-dropdown-body\">\n<$transclude tiddler=<<assetInfo>> field=\"readme\" mode=\"block\"/>\n</div>\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[$type$]has[parent-plugin]parent-plugin<original-title>limit[1]]\" variable=\"ignore\">\n<div class=\"tc-plugin-info-sub-plugins\">\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[$type$]has[parent-plugin]parent-plugin<original-title>sort[title]]\" variable=\"assetInfo\">\n<<display-plugin-info \"$type$\">>\n</$list>\n</div>\n</$list>\n</div>\n</$reveal>\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[$type$]has[parent-plugin]parent-plugin<original-title>limit[1]]\" variable=\"ignore\">\n<$reveal type=\"nomatch\" text=\"yes\" state=<<popup-state>> tag=\"div\" class=\"tc-plugin-info-sub-plugin-indicator\">\n<$wikify name=\"count\" text=\"\"\"<$count filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[$type$]has[parent-plugin]parent-plugin<original-title>]\"/>\"\"\">\n<$button class=\"tc-btn-invisible\" set=<<popup-state>> setTo=\"yes\">\n{{$:/language/ControlPanel/Plugins/SubPluginPrompt}}\n</$button>\n</$wikify>\n</$reveal>\n</$list>\n</$set>\n</$set>\n\\end\n\n\\define load-plugin-library-button()\n<$button class=\"tc-btn-big-green\">\n<$action-sendmessage $message=\"tm-load-plugin-library\" url={{!!url}} infoTitlePrefix=\"$:/temp/RemoteAssetInfo/\"/>\n{{$:/core/images/chevron-right}} {{$:/language/ControlPanel/Plugins/OpenPluginLibrary}}\n</$button>\n\\end\n\n\\define display-server-assets(type)\n{{$:/language/Search/Search}}: <$edit-text tiddler=\"\"\"$:/temp/RemoteAssetSearch/$(currentTiddler)$\"\"\" default=\"\" type=\"search\" tag=\"input\"/>\n<$reveal state=\"\"\"$:/temp/RemoteAssetSearch/$(currentTiddler)$\"\"\" type=\"nomatch\" text=\"\">\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"\"\"$:/temp/RemoteAssetSearch/$(currentTiddler)$\"\"\" $field=\"text\" $value=\"\"/>\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n<div class=\"tc-plugin-library-listing\">\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[$type$]search:author,description,original-title,readme,title{$:/temp/RemoteAssetSearch/$(currentTiddler)$}sort[title]]\" variable=\"assetInfo\">\n<$list filter=\"[[$:/temp/RemoteAssetSearch/$(currentTiddler)$]has[text]] ~[<assetInfo>!has[parent-plugin]]\" variable=\"ignore\"><!-- Hide sub-plugins if we're not searching -->\n<<display-plugin-info \"$type$\">>\n</$list>\n</$list>\n</div>\n\\end\n\n\\define display-server-connection()\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/ServerConnection]suffix{!!url}]\" variable=\"connectionTiddler\" emptyMessage=<<load-plugin-library-button>>>\n\n<$set name=\"transclusion\" value=<<connectionTiddler>>>\n\n<<tabs \"[[$:/core/ui/ControlPanel/Plugins/Add/Updates]] [[$:/core/ui/ControlPanel/Plugins/Add/Plugins]] [[$:/core/ui/ControlPanel/Plugins/Add/Themes]] [[$:/core/ui/ControlPanel/Plugins/Add/Languages]]\" \"$:/core/ui/ControlPanel/Plugins/Add/Plugins\">>\n\n</$set>\n\n</$list>\n\\end\n\n\\define close-library-button()\n<$reveal type='nomatch' state='$:/temp/ServerConnection/$(PluginLibraryURL)$' text=''>\n<$button class='tc-btn-big-green'>\n<$action-sendmessage $message=\"tm-unload-plugin-library\" url={{!!url}}/>\n{{$:/core/images/chevron-left}} {{$:/language/ControlPanel/Plugins/ClosePluginLibrary}}\n<$action-deletetiddler $filter=\"[prefix[$:/temp/ServerConnection/$(PluginLibraryURL)$]][prefix[$:/temp/RemoteAssetInfo/$(PluginLibraryURL)$]]\"/>\n</$button>\n</$reveal>\n\\end\n\n\\define plugin-library-listing()\n<div class=\"tc-tab-set\">\n<$set name=\"defaultTab\" value={{{ [all[tiddlers+shadows]tag[$:/tags/PluginLibrary]] }}}>\n<div class=\"tc-tab-buttons\">\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/PluginLibrary]]\">\n<$button set=<<qualify \"$:/state/addplugins/tab\">> setTo=<<currentTiddler>> default=<<defaultTab>> selectedClass=\"tc-tab-selected\">\n<$set name=\"tv-wikilinks\" value=\"no\">\n<$transclude field=\"caption\"/>\n</$set>\n</$button>\n</$list>\n</div>\n<div class=\"tc-tab-divider\"/>\n<div class=\"tc-tab-content\">\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/PluginLibrary]]\">\n<$reveal type=\"match\" state=<<qualify \"$:/state/addplugins/tab\">> text=<<currentTiddler>> default=<<defaultTab>>>\n<h2><$link><$transclude field=\"caption\"><$view field=\"title\"/></$transclude></$link></h2>\n//<$view field=\"url\"/>//\n<$transclude mode=\"block\"/>\n<$set name=PluginLibraryURL value={{!!url}}>\n<<close-library-button>>\n</$set>\n<<display-server-connection>>\n</$reveal>\n</$list>\n</div>\n</$set>\n</div>\n\\end\n\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\n<div>\n<<plugin-library-listing>>\n</div>\n"
},
"$:/core/ui/ControlPanel/Palette": {
"title": "$:/core/ui/ControlPanel/Palette",
"tags": "$:/tags/ControlPanel/Appearance",
"caption": "{{$:/language/ControlPanel/Palette/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Palette/\n\n{{$:/snippets/paletteswitcher}}\n\n<$reveal type=\"nomatch\" state=\"$:/state/ShowPaletteEditor\" text=\"yes\">\n\n<$button set=\"$:/state/ShowPaletteEditor\" setTo=\"yes\"><<lingo ShowEditor/Caption>></$button>\n\n</$reveal>\n\n<$reveal type=\"match\" state=\"$:/state/ShowPaletteEditor\" text=\"yes\">\n\n<$button set=\"$:/state/ShowPaletteEditor\" setTo=\"no\"><<lingo HideEditor/Caption>></$button>\n{{$:/PaletteManager}}\n\n</$reveal>\n\n"
},
"$:/core/ui/ControlPanel/Parsing": {
"title": "$:/core/ui/ControlPanel/Parsing",
"tags": "$:/tags/ControlPanel/Advanced",
"caption": "{{$:/language/ControlPanel/Parsing/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Parsing/\n\n\\define toggle(Type)\n<$checkbox\ntiddler=\"\"\"$:/config/WikiParserRules/$Type$/$(rule)$\"\"\"\nfield=\"text\"\nchecked=\"enable\"\nunchecked=\"disable\"\ndefault=\"enable\">\n<<rule>>\n</$checkbox>\n\\end\n\n\\define rules(type,Type)\n<$list filter=\"[wikiparserrules[$type$]]\" variable=\"rule\">\n<dd><<toggle $Type$>></dd>\n</$list>\n\\end\n\n<<lingo Hint>>\n\n<dl>\n<dt><<lingo Pragma/Caption>></dt>\n<<rules pragma Pragma>>\n<dt><<lingo Inline/Caption>></dt>\n<<rules inline Inline>>\n<dt><<lingo Block/Caption>></dt>\n<<rules block Block>>\n</dl>"
},
"$:/core/ui/ControlPanel/Plugins/Add/Languages": {
"title": "$:/core/ui/ControlPanel/Plugins/Add/Languages",
"caption": "{{$:/language/ControlPanel/Plugins/Languages/Caption}} (<$count filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[language]]\"/>)",
"text": "<<display-server-assets language>>\n"
},
"$:/core/ui/ControlPanel/Plugins/Add/Plugins": {
"title": "$:/core/ui/ControlPanel/Plugins/Add/Plugins",
"caption": "{{$:/language/ControlPanel/Plugins/Plugins/Caption}} (<$count filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[plugin]]\"/>)",
"text": "<<display-server-assets plugin>>\n"
},
"$:/core/ui/ControlPanel/Plugins/Add/Themes": {
"title": "$:/core/ui/ControlPanel/Plugins/Add/Themes",
"caption": "{{$:/language/ControlPanel/Plugins/Themes/Caption}} (<$count filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}original-plugin-type[theme]]\"/>)",
"text": "<<display-server-assets theme>>\n"
},
"$:/core/ui/ControlPanel/Plugins/Add/Updates": {
"title": "$:/core/ui/ControlPanel/Plugins/Add/Updates",
"caption": "<$importvariables filter=\"$:/core/ui/ControlPanel/Plugins/Add/Updates\">{{$:/language/ControlPanel/Plugins/Updates/Caption}} (<<update-count>>)</$importvariables>",
"text": "\\define each-updateable-plugin(body)\n<$list filter=\"[all[tiddlers+shadows]tag[$:/tags/RemoteAssetInfo]server-url{!!url}sort[title]]\" variable=\"assetInfo\">\n<$set name=\"libraryVersion\" value={{{ [<assetInfo>get[version]] }}}>\n<$list filter=\"[<assetInfo>get[original-title]has[version]!version<libraryVersion>]\" variable=\"ignore\">\n<$set name=\"installedVersion\" value={{{ [<assetInfo>get[original-title]get[version]] }}}>\n<$list filter=\"[<installedversion>!match<libraryVersion>]\" variable=\"ignore\">\n$body$\n</$list>\n</$set>\n</$list>\n</$set>\n</$list>\n\\end\n\n\\define update-all-actions()\n<$macrocall $name=\"each-updateable-plugin\" body=\"\"\"\n<<install-plugin-actions>>\n\"\"\"/>\n\\end\n\n\\define update-count()\n<$wikify name=\"count-filter\" text=<<each-updateable-plugin \"[[<$text text=<<assetInfo>>/>]]\">>><$count filter=<<count-filter>>/></$wikify>\n\\end\n\n<$button actions=<<update-all-actions>> class=\"tc-btn-invisible tc-install-plugin tc-reinstall-upgrade\">\n{{$:/core/images/download-button}} {{||$:/language/ControlPanel/Plugins/Updates/UpdateAll/Caption}}\n</$button>\n\n<div class=\"tc-plugin-library-listing\">\n<$macrocall $name=\"each-updateable-plugin\" body=\"\"\"\n<$macrocall $name=\"display-plugin-info\" type={{{ [<assetInfo>get[original-plugin-type]] }}}/>\n\"\"\"/>\n</div>\n"
},
"$:/core/ui/ControlPanel/Plugins/AddPlugins": {
"title": "$:/core/ui/ControlPanel/Plugins/AddPlugins",
"text": "\\define lingo-base() $:/language/ControlPanel/Plugins/\n\n<$button message=\"tm-modal\" param=\"$:/core/ui/ControlPanel/Modals/AddPlugins\" tooltip={{$:/language/ControlPanel/Plugins/Add/Hint}} class=\"tc-btn-big-green tc-primary-btn\">\n{{$:/core/images/download-button}} <<lingo Add/Caption>>\n</$button>\n"
},
"$:/core/ui/ControlPanel/Plugins/Installed/Languages": {
"title": "$:/core/ui/ControlPanel/Plugins/Installed/Languages",
"caption": "{{$:/language/ControlPanel/Plugins/Languages/Caption}} (<$count filter=\"[!has[draft.of]plugin-type[language]]\"/>)",
"text": "<<plugin-table language>>\n"
},
"$:/core/ui/ControlPanel/Plugins/Installed/Plugins": {
"title": "$:/core/ui/ControlPanel/Plugins/Installed/Plugins",
"caption": "{{$:/language/ControlPanel/Plugins/Plugins/Caption}} (<$count filter=\"[!has[draft.of]plugin-type[plugin]]\"/>)",
"text": "<<plugin-table plugin>>\n"
},
"$:/core/ui/ControlPanel/Plugins/Installed/Themes": {
"title": "$:/core/ui/ControlPanel/Plugins/Installed/Themes",
"caption": "{{$:/language/ControlPanel/Plugins/Themes/Caption}} (<$count filter=\"[!has[draft.of]plugin-type[theme]]\"/>)",
"text": "<<plugin-table theme>>\n"
},
"$:/core/ui/ControlPanel/Plugins": {
"title": "$:/core/ui/ControlPanel/Plugins",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/Plugins/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Plugins/\n\n\\define plugin-table(type)\n<$set name=\"plugin-type\" value=\"\"\"$type$\"\"\">\n<$set name=\"qualified-state\" value=<<qualify \"$:/state/plugin-info\">>>\n<$list filter=\"[!has[draft.of]plugin-type[$type$]sort[title]]\" emptyMessage=<<lingo \"Empty/Hint\">> template=\"$:/core/ui/Components/plugin-info\"/>\n</$set>\n</$set>\n\\end\n\n{{$:/core/ui/ControlPanel/Plugins/AddPlugins}}\n\n<<lingo Installed/Hint>>\n\n<<tabs \"[[$:/core/ui/ControlPanel/Plugins/Installed/Plugins]] [[$:/core/ui/ControlPanel/Plugins/Installed/Themes]] [[$:/core/ui/ControlPanel/Plugins/Installed/Languages]]\" \"$:/core/ui/ControlPanel/Plugins/Installed/Plugins\">>\n"
},
"$:/core/ui/ControlPanel/Saving/DownloadSaver": {
"title": "$:/core/ui/ControlPanel/Saving/DownloadSaver",
"tags": "$:/tags/ControlPanel/Saving",
"caption": "{{$:/language/ControlPanel/Saving/DownloadSaver/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Saving/DownloadSaver/\n\n<<lingo Hint>>\n\n!! <$link to=\"$:/config/DownloadSaver/AutoSave\"><<lingo AutoSave/Hint>></$link>\n\n<$checkbox tiddler=\"$:/config/DownloadSaver/AutoSave\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> <<lingo AutoSave/Description>> </$checkbox>\n"
},
"$:/core/ui/ControlPanel/Saving/General": {
"title": "$:/core/ui/ControlPanel/Saving/General",
"tags": "$:/tags/ControlPanel/Saving",
"caption": "{{$:/language/ControlPanel/Saving/General/Caption}}",
"list-before": "",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/\n\n{{$:/language/ControlPanel/Saving/General/Hint}}\n\n!! <$link to=\"$:/config/AutoSave\"><<lingo AutoSave/Caption>></$link>\n\n<<lingo AutoSave/Hint>>\n\n<$radio tiddler=\"$:/config/AutoSave\" value=\"yes\"> <<lingo AutoSave/Enabled/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/AutoSave\" value=\"no\"> <<lingo AutoSave/Disabled/Description>> </$radio>\n"
},
"$:/core/ui/ControlPanel/Saving/GitHub": {
"title": "$:/core/ui/ControlPanel/Saving/GitHub",
"tags": "$:/tags/ControlPanel/Saving",
"caption": "{{$:/language/ControlPanel/Saving/GitService/GitHub/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Saving/GitService/\n\\define service-name() ~GitHub\n\n<<lingo Description>>\n\n|<<lingo UserName>> |<$edit-text tiddler=\"$:/GitHub/Username\" default=\"\" tag=\"input\"/> |\n|<<lingo GitHub/Password>> |<$password name=\"github\"/> |\n|<<lingo Repo>> |<$edit-text tiddler=\"$:/GitHub/Repo\" default=\"\" tag=\"input\"/> |\n|<<lingo Branch>> |<$edit-text tiddler=\"$:/GitHub/Branch\" default=\"master\" tag=\"input\"/> |\n|<<lingo Path>> |<$edit-text tiddler=\"$:/GitHub/Path\" default=\"\" tag=\"input\"/> |\n|<<lingo Filename>> |<$edit-text tiddler=\"$:/GitHub/Filename\" default=\"\" tag=\"input\"/> |\n|<<lingo ServerURL>> |<$edit-text tiddler=\"$:/GitHub/ServerURL\" default=\"https://api.github.com\" tag=\"input\"/> |"
},
"$:/core/ui/ControlPanel/Saving/GitLab": {
"title": "$:/core/ui/ControlPanel/Saving/GitLab",
"tags": "$:/tags/ControlPanel/Saving",
"caption": "{{$:/language/ControlPanel/Saving/GitService/GitLab/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Saving/GitService/\n\\define service-name() ~GitLab\n\n<<lingo Description>>\n\n|<<lingo UserName>> |<$edit-text tiddler=\"$:/GitLab/Username\" default=\"\" tag=\"input\"/> |\n|<<lingo GitLab/Password>> |<$password name=\"gitlab\"/> |\n|<<lingo Repo>> |<$edit-text tiddler=\"$:/GitLab/Repo\" default=\"\" tag=\"input\"/> |\n|<<lingo Branch>> |<$edit-text tiddler=\"$:/GitLab/Branch\" default=\"master\" tag=\"input\"/> |\n|<<lingo Path>> |<$edit-text tiddler=\"$:/GitLab/Path\" default=\"\" tag=\"input\"/> |\n|<<lingo Filename>> |<$edit-text tiddler=\"$:/GitLab/Filename\" default=\"\" tag=\"input\"/> |\n|<<lingo ServerURL>> |<$edit-text tiddler=\"$:/GitLab/ServerURL\" default=\"https://gitlab.com/api/v4\" tag=\"input\"/> |"
},
"$:/core/ui/ControlPanel/Saving/TiddlySpot": {
"title": "$:/core/ui/ControlPanel/Saving/TiddlySpot",
"tags": "$:/tags/ControlPanel/Saving",
"caption": "{{$:/language/ControlPanel/Saving/TiddlySpot/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Saving/TiddlySpot/\n\n\\define backupURL()\nhttp://$(userName)$.tiddlyspot.com/backup/\n\\end\n\\define backupLink()\n<$reveal type=\"nomatch\" state=\"$:/UploadName\" text=\"\">\n<$set name=\"userName\" value={{$:/UploadName}}>\n<$reveal type=\"match\" state=\"$:/UploadURL\" text=\"\">\n<<backupURL>>\n</$reveal>\n<$reveal type=\"nomatch\" state=\"$:/UploadURL\" text=\"\">\n<$macrocall $name=resolvePath source={{$:/UploadBackupDir}} root={{$:/UploadURL}}>>\n</$reveal>\n</$set>\n</$reveal>\n\\end\n\n<<lingo Description>>\n\n|<<lingo UserName>> |<$edit-text tiddler=\"$:/UploadName\" default=\"\" tag=\"input\"/> |\n|<<lingo Password>> |<$password name=\"upload\"/> |\n|<<lingo Backups>> |<<backupLink>> |\n\n''<<lingo Advanced/Heading>>''\n\n|<<lingo ServerURL>> |<$edit-text tiddler=\"$:/UploadURL\" default=\"\" tag=\"input\"/> |\n|<<lingo Filename>> |<$edit-text tiddler=\"$:/UploadFilename\" default=\"index.html\" tag=\"input\"/> |\n|<<lingo UploadDir>> |<$edit-text tiddler=\"$:/UploadDir\" default=\".\" tag=\"input\"/> |\n|<<lingo BackupDir>> |<$edit-text tiddler=\"$:/UploadBackupDir\" default=\".\" tag=\"input\"/> |\n\n<<lingo TiddlySpot/Hint>>"
},
"$:/core/ui/ControlPanel/Saving/Gitea": {
"title": "$:/core/ui/ControlPanel/Saving/Gitea",
"tags": "$:/tags/ControlPanel/Saving",
"caption": "{{$:/language/ControlPanel/Saving/GitService/Gitea/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Saving/GitService/\n\\define service-name() ~Gitea\n\n<<lingo Description>>\n\n|<<lingo UserName>> |<$edit-text tiddler=\"$:/Gitea/Username\" default=\"\" tag=\"input\"/> |\n|<<lingo Gitea/Password>> |<$password name=\"Gitea\"/> |\n|<<lingo Repo>> |<$edit-text tiddler=\"$:/Gitea/Repo\" default=\"\" tag=\"input\"/> |\n|<<lingo Branch>> |<$edit-text tiddler=\"$:/Gitea/Branch\" default=\"master\" tag=\"input\"/> |\n|<<lingo Path>> |<$edit-text tiddler=\"$:/Gitea/Path\" default=\"\" tag=\"input\"/> |\n|<<lingo Filename>> |<$edit-text tiddler=\"$:/Gitea/Filename\" default=\"\" tag=\"input\"/> |\n|<<lingo ServerURL>> |<$edit-text tiddler=\"$:/Gitea/ServerURL\" default=\"https://gitea/api/v1\" tag=\"input\"/> |\n"
},
"$:/core/ui/ControlPanel/Saving": {
"title": "$:/core/ui/ControlPanel/Saving",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/Saving/Caption}}",
"text": "{{$:/language/ControlPanel/Saving/Hint}}\n\n<div class=\"tc-control-panel\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Saving]!has[draft.of]]\" \"$:/core/ui/ControlPanel/Saving/General\">>\n</div>\n"
},
"$:/core/buttonstyles/Borderless": {
"title": "$:/core/buttonstyles/Borderless",
"tags": "$:/tags/ToolbarButtonStyle",
"caption": "{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Borderless}}",
"text": "tc-btn-invisible"
},
"$:/core/buttonstyles/Boxed": {
"title": "$:/core/buttonstyles/Boxed",
"tags": "$:/tags/ToolbarButtonStyle",
"caption": "{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Boxed}}",
"text": "tc-btn-boxed"
},
"$:/core/buttonstyles/Rounded": {
"title": "$:/core/buttonstyles/Rounded",
"tags": "$:/tags/ToolbarButtonStyle",
"caption": "{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Styles/Rounded}}",
"text": "tc-btn-rounded"
},
"$:/core/ui/ControlPanel/Settings/CamelCase": {
"title": "$:/core/ui/ControlPanel/Settings/CamelCase",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/CamelCase/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/CamelCase/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/WikiParserRules/Inline/wikilink\" field=\"text\" checked=\"enable\" unchecked=\"disable\" default=\"enable\"> <$link to=\"$:/config/WikiParserRules/Inline/wikilink\"><<lingo Description>></$link> </$checkbox>\n"
},
"$:/core/ui/ControlPanel/Settings/DefaultMoreSidebarTab": {
"title": "$:/core/ui/ControlPanel/Settings/DefaultMoreSidebarTab",
"caption": "{{$:/language/ControlPanel/Settings/DefaultMoreSidebarTab/Caption}}",
"tags": "$:/tags/ControlPanel/Settings",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/DefaultMoreSidebarTab/\n\n<$link to=\"$:/config/DefaultMoreSidebarTab\"><<lingo Hint>></$link>\n\n<$select tiddler=\"$:/config/DefaultMoreSidebarTab\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/MoreSideBar]!has[draft.of]]\">\n<option value=<<currentTiddler>>><$transclude field=\"caption\"><$text text=<<currentTiddler>>/></$transclude></option>\n</$list>\n</$select>\n"
},
"$:/core/ui/ControlPanel/Settings/DefaultSidebarTab": {
"title": "$:/core/ui/ControlPanel/Settings/DefaultSidebarTab",
"caption": "{{$:/language/ControlPanel/Settings/DefaultSidebarTab/Caption}}",
"tags": "$:/tags/ControlPanel/Settings",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/DefaultSidebarTab/\n\n<$link to=\"$:/config/DefaultSidebarTab\"><<lingo Hint>></$link>\n\n<$select tiddler=\"$:/config/DefaultSidebarTab\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SideBar]!has[draft.of]]\">\n<option value=<<currentTiddler>>><$transclude field=\"caption\"><$text text=<<currentTiddler>>/></$transclude></option>\n</$list>\n</$select>\n"
},
"$:/core/ui/ControlPanel/Settings/EditorToolbar": {
"title": "$:/core/ui/ControlPanel/Settings/EditorToolbar",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/EditorToolbar/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/EditorToolbar/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/TextEditor/EnableToolbar\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/TextEditor/EnableToolbar\"><<lingo Description>></$link> </$checkbox>\n\n"
},
"$:/core/ui/ControlPanel/Settings/InfoPanelMode": {
"title": "$:/core/ui/ControlPanel/Settings/InfoPanelMode",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/InfoPanelMode/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/InfoPanelMode/\n<$link to=\"$:/config/TiddlerInfo/Mode\"><<lingo Hint>></$link>\n\n<$radio tiddler=\"$:/config/TiddlerInfo/Mode\" value=\"popup\"> <<lingo Popup/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/TiddlerInfo/Mode\" value=\"sticky\"> <<lingo Sticky/Description>> </$radio>\n"
},
"$:/core/ui/ControlPanel/Settings/LinkToBehaviour": {
"title": "$:/core/ui/ControlPanel/Settings/LinkToBehaviour",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/LinkToBehaviour/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/LinkToBehaviour/\n\n<$link to=\"$:/config/Navigation/openLinkFromInsideRiver\"><<lingo \"InsideRiver/Hint\">></$link>\n\n<$select tiddler=\"$:/config/Navigation/openLinkFromInsideRiver\">\n <option value=\"above\"><<lingo \"OpenAbove\">></option>\n <option value=\"below\"><<lingo \"OpenBelow\">></option>\n <option value=\"top\"><<lingo \"OpenAtTop\">></option>\n <option value=\"bottom\"><<lingo \"OpenAtBottom\">></option>\n</$select>\n\n<$link to=\"$:/config/Navigation/openLinkFromOutsideRiver\"><<lingo \"OutsideRiver/Hint\">></$link>\n\n<$select tiddler=\"$:/config/Navigation/openLinkFromOutsideRiver\">\n <option value=\"top\"><<lingo \"OpenAtTop\">></option>\n <option value=\"bottom\"><<lingo \"OpenAtBottom\">></option>\n</$select>\n"
},
"$:/core/ui/ControlPanel/Settings/MissingLinks": {
"title": "$:/core/ui/ControlPanel/Settings/MissingLinks",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/MissingLinks/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/MissingLinks/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/MissingLinks\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/MissingLinks\"><<lingo Description>></$link> </$checkbox>\n\n"
},
"$:/core/ui/ControlPanel/Settings/NavigationAddressBar": {
"title": "$:/core/ui/ControlPanel/Settings/NavigationAddressBar",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/NavigationAddressBar/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/NavigationAddressBar/\n\n<$link to=\"$:/config/Navigation/UpdateAddressBar\"><<lingo Hint>></$link>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateAddressBar\" value=\"permaview\"> <<lingo Permaview/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateAddressBar\" value=\"permalink\"> <<lingo Permalink/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateAddressBar\" value=\"no\"> <<lingo No/Description>> </$radio>\n"
},
"$:/core/ui/ControlPanel/Settings/NavigationHistory": {
"title": "$:/core/ui/ControlPanel/Settings/NavigationHistory",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/NavigationHistory/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/NavigationHistory/\n<$link to=\"$:/config/Navigation/UpdateHistory\"><<lingo Hint>></$link>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateHistory\" value=\"yes\"> <<lingo Yes/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/Navigation/UpdateHistory\" value=\"no\"> <<lingo No/Description>> </$radio>\n"
},
"$:/core/ui/ControlPanel/Settings/NavigationPermalinkviewMode": {
"title": "$:/core/ui/ControlPanel/Settings/NavigationPermalinkviewMode",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/NavigationPermalinkviewMode/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/NavigationPermalinkviewMode/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/Navigation/Permalinkview/CopyToClipboard\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/Navigation/Permalinkview/CopyToClipboard\"><<lingo CopyToClipboard/Description>></$link> </$checkbox>\n\n<$checkbox tiddler=\"$:/config/Navigation/Permalinkview/UpdateAddressBar\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/Navigation/Permalinkview/UpdateAddressBar\"><<lingo UpdateAddressBar/Description>></$link> </$checkbox>\n"
},
"$:/core/ui/ControlPanel/Settings/PerformanceInstrumentation": {
"title": "$:/core/ui/ControlPanel/Settings/PerformanceInstrumentation",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/PerformanceInstrumentation/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/PerformanceInstrumentation/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/Performance/Instrumentation\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> <$link to=\"$:/config/Performance/Instrumentation\"><<lingo Description>></$link> </$checkbox>\n"
},
"$:/core/ui/ControlPanel/Settings/TitleLinks": {
"title": "$:/core/ui/ControlPanel/Settings/TitleLinks",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/TitleLinks/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/TitleLinks/\n<$link to=\"$:/config/Tiddlers/TitleLinks\"><<lingo Hint>></$link>\n\n<$radio tiddler=\"$:/config/Tiddlers/TitleLinks\" value=\"yes\"> <<lingo Yes/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/Tiddlers/TitleLinks\" value=\"no\"> <<lingo No/Description>> </$radio>\n"
},
"$:/core/ui/ControlPanel/Settings/ToolbarButtonStyle": {
"title": "$:/core/ui/ControlPanel/Settings/ToolbarButtonStyle",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/ToolbarButtonStyle/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/ToolbarButtonStyle/\n<$link to=\"$:/config/Toolbar/ButtonClass\"><<lingo \"Hint\">></$link>\n\n<$select tiddler=\"$:/config/Toolbar/ButtonClass\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ToolbarButtonStyle]]\">\n<option value={{!!text}}>{{!!caption}}</option>\n</$list>\n</$select>\n"
},
"$:/core/ui/ControlPanel/Settings/ToolbarButtons": {
"title": "$:/core/ui/ControlPanel/Settings/ToolbarButtons",
"tags": "$:/tags/ControlPanel/Settings",
"caption": "{{$:/language/ControlPanel/Settings/ToolbarButtons/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/ToolbarButtons/\n<<lingo Hint>>\n\n<$checkbox tiddler=\"$:/config/Toolbar/Icons\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> <$link to=\"$:/config/Toolbar/Icons\"><<lingo Icons/Description>></$link> </$checkbox>\n\n<$checkbox tiddler=\"$:/config/Toolbar/Text\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> <$link to=\"$:/config/Toolbar/Text\"><<lingo Text/Description>></$link> </$checkbox>\n"
},
"$:/core/ui/ControlPanel/Settings": {
"title": "$:/core/ui/ControlPanel/Settings",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/Settings/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/\n\n<<lingo Hint>>\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Settings]]\">\n\n<div style=\"border-top:1px solid #eee;\">\n\n!! <$link><$transclude field=\"caption\"/></$link>\n\n<$transclude/>\n\n</div>\n\n</$list>\n"
},
"$:/core/ui/ControlPanel/StoryView": {
"title": "$:/core/ui/ControlPanel/StoryView",
"tags": "$:/tags/ControlPanel/Appearance",
"caption": "{{$:/language/ControlPanel/StoryView/Caption}}",
"text": "{{$:/snippets/viewswitcher}}\n"
},
"$:/core/ui/ControlPanel/Stylesheets": {
"title": "$:/core/ui/ControlPanel/Stylesheets",
"tags": "$:/tags/ControlPanel/Advanced",
"caption": "{{$:/language/ControlPanel/Stylesheets/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/\n\n<<lingo Stylesheets/Hint>>\n\n{{$:/snippets/peek-stylesheets}}\n"
},
"$:/core/ui/ControlPanel/Theme": {
"title": "$:/core/ui/ControlPanel/Theme",
"tags": "$:/tags/ControlPanel/Appearance",
"caption": "{{$:/language/ControlPanel/Theme/Caption}}",
"text": "{{$:/snippets/themeswitcher}}\n"
},
"$:/core/ui/ControlPanel/TiddlerFields": {
"title": "$:/core/ui/ControlPanel/TiddlerFields",
"tags": "$:/tags/ControlPanel/Advanced",
"caption": "{{$:/language/ControlPanel/TiddlerFields/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/\n\n<<lingo TiddlerFields/Hint>>\n\n{{$:/snippets/allfields}}"
},
"$:/core/ui/ControlPanel/Toolbars/EditToolbar": {
"title": "$:/core/ui/ControlPanel/Toolbars/EditToolbar",
"tags": "$:/tags/ControlPanel/Toolbars",
"caption": "{{$:/language/ControlPanel/Toolbars/EditToolbar/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n\n\\define config-base() $:/config/EditToolbarButtons/Visibility/\n\n{{$:/language/ControlPanel/Toolbars/EditToolbar/Hint}}\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$macrocall $name=\"list-tagged-draggable\" tag=\"$:/tags/EditToolbar\" itemTemplate=\"$:/core/ui/ControlPanel/Toolbars/ItemTemplate\"/>\n\n</$set>\n\n</$set>"
},
"$:/core/ui/ControlPanel/Toolbars/EditorItemTemplate": {
"title": "$:/core/ui/ControlPanel/Toolbars/EditorItemTemplate",
"text": "\\define config-title()\n$(config-base)$$(currentTiddler)$\n\\end\n\n<$draggable tiddler=<<currentTiddler>>>\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <span class=\"tc-icon-wrapper\"><$transclude tiddler={{!!icon}}/></span> <$transclude field=\"caption\"/> -- <i class=\"tc-muted\"><$transclude field=\"description\"/></i>\n</$draggable>\n"
},
"$:/core/ui/ControlPanel/Toolbars/EditorToolbar": {
"title": "$:/core/ui/ControlPanel/Toolbars/EditorToolbar",
"tags": "$:/tags/ControlPanel/Toolbars",
"caption": "{{$:/language/ControlPanel/Toolbars/EditorToolbar/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n\n\\define config-base() $:/config/EditorToolbarButtons/Visibility/\n\n{{$:/language/ControlPanel/Toolbars/EditorToolbar/Hint}}\n\n<$macrocall $name=\"list-tagged-draggable\" tag=\"$:/tags/EditorToolbar\" itemTemplate=\"$:/core/ui/ControlPanel/Toolbars/EditorItemTemplate\"/>\n"
},
"$:/core/ui/ControlPanel/Toolbars/ItemTemplate": {
"title": "$:/core/ui/ControlPanel/Toolbars/ItemTemplate",
"text": "\\define config-title()\n$(config-base)$$(currentTiddler)$\n\\end\n\n<$draggable tiddler=<<currentTiddler>>>\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <span class=\"tc-icon-wrapper\"> <$transclude field=\"caption\"/> <i class=\"tc-muted\">-- <$transclude field=\"description\"/></i></span>\n</$draggable>\n"
},
"$:/core/ui/ControlPanel/Toolbars/PageControls": {
"title": "$:/core/ui/ControlPanel/Toolbars/PageControls",
"tags": "$:/tags/ControlPanel/Toolbars",
"caption": "{{$:/language/ControlPanel/Toolbars/PageControls/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n\n\\define config-base() $:/config/PageControlButtons/Visibility/\n\n{{$:/language/ControlPanel/Toolbars/PageControls/Hint}}\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$macrocall $name=\"list-tagged-draggable\" tag=\"$:/tags/PageControls\" itemTemplate=\"$:/core/ui/ControlPanel/Toolbars/ItemTemplate\"/>\n\n</$set>\n\n</$set>\n"
},
"$:/core/ui/ControlPanel/Toolbars/ViewToolbar": {
"title": "$:/core/ui/ControlPanel/Toolbars/ViewToolbar",
"tags": "$:/tags/ControlPanel/Toolbars",
"caption": "{{$:/language/ControlPanel/Toolbars/ViewToolbar/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n\n\\define config-base() $:/config/ViewToolbarButtons/Visibility/\n\n{{$:/language/ControlPanel/Toolbars/ViewToolbar/Hint}}\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$macrocall $name=\"list-tagged-draggable\" tag=\"$:/tags/ViewToolbar\" itemTemplate=\"$:/core/ui/ControlPanel/Toolbars/ItemTemplate\"/>\n\n</$set>\n\n</$set>\n"
},
"$:/core/ui/ControlPanel/Toolbars": {
"title": "$:/core/ui/ControlPanel/Toolbars",
"tags": "$:/tags/ControlPanel/Appearance",
"caption": "{{$:/language/ControlPanel/Toolbars/Caption}}",
"text": "{{$:/language/ControlPanel/Toolbars/Hint}}\n\n<div class=\"tc-control-panel\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Toolbars]!has[draft.of]]\" \"$:/core/ui/ControlPanel/Toolbars/ViewToolbar\" \"$:/state/tabs/controlpanel/toolbars\" \"tc-vertical\">>\n</div>\n"
},
"$:/ControlPanel": {
"title": "$:/ControlPanel",
"icon": "$:/core/images/options-button",
"color": "#bbb",
"text": "<div class=\"tc-control-panel\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/ControlPanel]!has[draft.of]]\" \"$:/core/ui/ControlPanel/Info\">>\n</div>\n"
},
"$:/core/ui/DefaultSearchResultList": {
"title": "$:/core/ui/DefaultSearchResultList",
"tags": "$:/tags/SearchResults",
"caption": "{{$:/language/Search/DefaultResults/Caption}}",
"text": "\\define searchResultList()\n//<small>{{$:/language/Search/Matches/Title}}</small>//\n\n<$list filter=\"[!is[system]search:title{$(searchTiddler)$}sort[title]limit[250]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n\n//<small>{{$:/language/Search/Matches/All}}</small>//\n\n<$list filter=\"[!is[system]search{$(searchTiddler)$}sort[title]limit[250]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n\n\\end\n<<searchResultList>>\n"
},
"$:/core/ui/EditTemplate/body/preview/diffs-current": {
"title": "$:/core/ui/EditTemplate/body/preview/diffs-current",
"tags": "$:/tags/EditPreview",
"caption": "differences from current",
"list-after": "$:/core/ui/EditTemplate/body/preview/output",
"text": "<$list filter=\"[<currentTiddler>!is[image]]\" emptyMessage={{$:/core/ui/EditTemplate/body/preview/output}}>\n\n<$macrocall $name=\"compareTiddlerText\" sourceTiddlerTitle={{!!draft.of}} destTiddlerTitle=<<currentTiddler>>/>\n\n</$list>\n\n"
},
"$:/core/ui/EditTemplate/body/preview/diffs-shadow": {
"title": "$:/core/ui/EditTemplate/body/preview/diffs-shadow",
"tags": "$:/tags/EditPreview",
"caption": "differences from shadow (if any)",
"list-after": "$:/core/ui/EditTemplate/body/preview/output",
"text": "<$list filter=\"[<currentTiddler>!is[image]]\" emptyMessage={{$:/core/ui/EditTemplate/body/preview/output}}>\n\n<$macrocall $name=\"compareTiddlerText\" sourceTiddlerTitle={{{ [{!!draft.of}shadowsource[]] }}} sourceSubTiddlerTitle={{!!draft.of}} destTiddlerTitle=<<currentTiddler>>/>\n\n</$list>\n\n"
},
"$:/core/ui/EditTemplate/body/preview/output": {
"title": "$:/core/ui/EditTemplate/body/preview/output",
"tags": "$:/tags/EditPreview",
"caption": "{{$:/language/EditTemplate/Body/Preview/Type/Output}}",
"text": "\\import [all[shadows+tiddlers]tag[$:/tags/Macro/View]!has[draft.of]]\n<$set name=\"tv-tiddler-preview\" value=\"yes\">\n\n<$transclude />\n\n</$set>\n"
},
"$:/state/showeditpreview": {
"title": "$:/state/showeditpreview",
"text": "no"
},
"$:/core/ui/EditTemplate/body/editor": {
"title": "$:/core/ui/EditTemplate/body/editor",
"text": "<$edit\n\n field=\"text\"\n class=\"tc-edit-texteditor tc-edit-texteditor-body\"\n placeholder={{$:/language/EditTemplate/Body/Placeholder}}\n tabindex={{$:/config/EditTabIndex}}\n focus={{{ [{$:/config/AutoFocus}match[text]then[true]] ~[[false]] }}}\n\n><$set\n\n name=\"targetTiddler\"\n value=<<currentTiddler>>\n\n><$list\n\n filter=\"[all[shadows+tiddlers]tag[$:/tags/EditorToolbar]!has[draft.of]]\"\n\n><$reveal\n\n type=\"nomatch\"\n state=<<config-visibility-title>>\n text=\"hide\"\n class=\"tc-text-editor-toolbar-item-wrapper\"\n\n><$transclude\n\n tiddler=\"$:/core/ui/EditTemplate/body/toolbar/button\"\n mode=\"inline\"\n\n/></$reveal></$list></$set></$edit>\n"
},
"$:/core/ui/EditTemplate/body/toolbar/button": {
"title": "$:/core/ui/EditTemplate/body/toolbar/button",
"text": "\\define toolbar-button-icon()\n<$list\n\n filter=\"[all[current]!has[custom-icon]]\"\n variable=\"no-custom-icon\"\n\n><$transclude\n\n tiddler={{!!icon}}\n\n/></$list>\n\\end\n\n\\define toolbar-button-tooltip()\n{{!!description}}<$macrocall $name=\"displayshortcuts\" $output=\"text/plain\" shortcuts={{!!shortcuts}} prefix=\"` - [\" separator=\"] [\" suffix=\"]`\"/>\n\\end\n\n\\define toolbar-button()\n<$list\n\n filter={{!!condition}}\n variable=\"list-condition\"\n\n><$wikify\n\n name=\"tooltip-text\"\n text=<<toolbar-button-tooltip>>\n mode=\"inline\"\n output=\"text\"\n\n><$list\n\n filter=\"[all[current]!has[dropdown]]\"\n variable=\"no-dropdown\"\n\n><$button\n\n class=\"tc-btn-invisible $(buttonClasses)$\"\n tooltip=<<tooltip-text>>\n actions={{!!actions}}\n\n><span\n\n data-tw-keyboard-shortcut={{!!shortcuts}}\n\n/><<toolbar-button-icon>><$transclude\n\n tiddler=<<currentTiddler>>\n field=\"text\"\n\n/></$button></$list><$list\n\n filter=\"[all[current]has[dropdown]]\"\n variable=\"dropdown\"\n\n><$set\n\n name=\"dropdown-state\"\n value=<<qualify \"$:/state/EditorToolbarDropdown\">>\n\n><$button\n\n popup=<<dropdown-state>>\n class=\"tc-popup-keep tc-btn-invisible $(buttonClasses)$\"\n selectedClass=\"tc-selected\"\n tooltip=<<tooltip-text>>\n actions={{!!actions}}\n\n><span\n\n data-tw-keyboard-shortcut={{!!shortcuts}}\n\n/><<toolbar-button-icon>><$transclude\n\n tiddler=<<currentTiddler>>\n field=\"text\"\n\n/></$button><$reveal\n\n state=<<dropdown-state>>\n type=\"popup\"\n position=\"below\"\n animate=\"yes\"\n tag=\"span\"\n\n><div\n\n class=\"tc-drop-down tc-popup-keep\"\n\n><$transclude\n\n tiddler={{!!dropdown}}\n mode=\"block\"\n\n/></div></$reveal></$set></$list></$wikify></$list>\n\\end\n\n\\define toolbar-button-outer()\n<$set\n\n name=\"buttonClasses\"\n value={{!!button-classes}}\n\n><<toolbar-button>></$set>\n\\end\n\n<<toolbar-button-outer>>"
},
"$:/core/ui/EditTemplate/body": {
"title": "$:/core/ui/EditTemplate/body",
"tags": "$:/tags/EditTemplate",
"text": "\\define lingo-base() $:/language/EditTemplate/Body/\n\\define config-visibility-title()\n$:/config/EditorToolbarButtons/Visibility/$(currentTiddler)$\n\\end\n<$list filter=\"[all[current]has[_canonical_uri]]\">\n\n<div class=\"tc-message-box\">\n\n<<lingo External/Hint>>\n\n<a href={{!!_canonical_uri}}><$text text={{!!_canonical_uri}}/></a>\n\n<$edit-text field=\"_canonical_uri\" class=\"tc-edit-fields\" tabindex={{$:/config/EditTabIndex}}></$edit-text>\n\n</div>\n\n</$list>\n\n<$list filter=\"[all[current]!has[_canonical_uri]]\">\n\n<$reveal state=\"$:/state/showeditpreview\" type=\"match\" text=\"yes\">\n\n<div class=\"tc-tiddler-preview\">\n\n<$transclude tiddler=\"$:/core/ui/EditTemplate/body/editor\" mode=\"inline\"/>\n\n<div class=\"tc-tiddler-preview-preview\">\n\n<$transclude tiddler={{$:/state/editpreviewtype}} mode=\"inline\">\n\n<$transclude tiddler=\"$:/core/ui/EditTemplate/body/preview/output\" mode=\"inline\"/>\n\n</$transclude>\n\n</div>\n\n</div>\n\n</$reveal>\n\n<$reveal state=\"$:/state/showeditpreview\" type=\"nomatch\" text=\"yes\">\n\n<$transclude tiddler=\"$:/core/ui/EditTemplate/body/editor\" mode=\"inline\"/>\n\n</$reveal>\n\n</$list>\n"
},
"$:/core/ui/EditTemplate/controls": {
"title": "$:/core/ui/EditTemplate/controls",
"tags": "$:/tags/EditTemplate",
"text": "\\define config-title()\n$:/config/EditToolbarButtons/Visibility/$(listItem)$\n\\end\n<div class=\"tc-tiddler-title tc-tiddler-edit-title\">\n<$view field=\"title\"/>\n<span class=\"tc-tiddler-controls tc-titlebar\"><$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditToolbar]!has[draft.of]]\" variable=\"listItem\"><$reveal type=\"nomatch\" state=<<config-title>> text=\"hide\"><$transclude tiddler=<<listItem>>/></$reveal></$list></span>\n<div style=\"clear: both;\"></div>\n</div>\n"
},
"$:/core/ui/EditTemplate/fields": {
"title": "$:/core/ui/EditTemplate/fields",
"tags": "$:/tags/EditTemplate",
"text": "\\define lingo-base() $:/language/EditTemplate/\n\\define config-title()\n$:/config/EditTemplateFields/Visibility/$(currentField)$\n\\end\n\n\\define config-filter()\n[[hide]] -[title{$(config-title)$}]\n\\end\n\n\\define current-tiddler-new-field-selector()\n[data-tiddler-title=\"$(currentTiddlerCSSescaped)$\"] .tc-edit-field-add-name input\n\\end\n\n\\define new-field-actions()\n<$action-sendmessage $message=\"tm-add-field\" $name={{{ [<newFieldNameTiddler>get[text]] }}} $value={{{ [<newFieldValueTiddler>get[text]] }}}/>\n<$action-deletetiddler $tiddler=<<newFieldNameTiddler>>/>\n<$action-deletetiddler $tiddler=<<newFieldValueTiddler>>/>\n<$action-sendmessage $message=\"tm-focus-selector\" $param=<<current-tiddler-new-field-selector>>/>\n\\end\n\n\\define new-field()\n<$vars name={{{ [<newFieldNameTiddler>get[text]] }}}>\n<$reveal type=\"nomatch\" text=\"\" default=<<name>>>\n<$button tooltip=<<lingo Fields/Add/Button/Hint>>>\n<$action-sendmessage $message=\"tm-add-field\"\n$name=<<name>>\n$value={{{ [<newFieldValueTiddler>get[text]] }}}/>\n<$action-deletetiddler $tiddler=<<newFieldNameTiddler>>/>\n<$action-deletetiddler $tiddler=<<newFieldValueTiddler>>/>\n<<lingo Fields/Add/Button>>\n</$button>\n</$reveal>\n<$reveal type=\"match\" text=\"\" default=<<name>>>\n<$button>\n<<lingo Fields/Add/Button>>\n</$button>\n</$reveal>\n</$vars>\n\\end\n\\whitespace trim\n\n<div class=\"tc-edit-fields\">\n<table class=\"tc-edit-fields\">\n<tbody>\n<$list filter=\"[all[current]fields[]] +[sort[title]]\" variable=\"currentField\" storyview=\"pop\">\n<$list filter=<<config-filter>> variable=\"temp\">\n<tr class=\"tc-edit-field\">\n<td class=\"tc-edit-field-name\">\n<$text text=<<currentField>>/>:</td>\n<td class=\"tc-edit-field-value\">\n<$edit-text tiddler=<<currentTiddler>> field=<<currentField>> placeholder={{$:/language/EditTemplate/Fields/Add/Value/Placeholder}} tabindex={{$:/config/EditTabIndex}}/>\n</td>\n<td class=\"tc-edit-field-remove\">\n<$button class=\"tc-btn-invisible\" tooltip={{$:/language/EditTemplate/Field/Remove/Hint}} aria-label={{$:/language/EditTemplate/Field/Remove/Caption}}>\n<$action-deletefield $field=<<currentField>>/>\n{{$:/core/images/delete-button}}\n</$button>\n</td>\n</tr>\n</$list>\n</$list>\n</tbody>\n</table>\n</div>\n\n<$fieldmangler>\n<div class=\"tc-edit-field-add\">\n<em class=\"tc-edit\">\n<<lingo Fields/Add/Prompt>> \n</em>\n<span class=\"tc-edit-field-add-name\">\n<$edit-text tiddler=<<newFieldNameTiddler>> tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Fields/Add/Name/Placeholder}} focusPopup=<<qualify \"$:/state/popup/field-dropdown\">> class=\"tc-edit-texteditor tc-popup-handle\" tabindex={{$:/config/EditTabIndex}} focus={{{ [{$:/config/AutoFocus}match[fields]then[true]] ~[[false]] }}}/>\n</span> \n<$button popup=<<qualify \"$:/state/popup/field-dropdown\">> class=\"tc-btn-invisible tc-btn-dropdown\" tooltip={{$:/language/EditTemplate/Field/Dropdown/Hint}} aria-label={{$:/language/EditTemplate/Field/Dropdown/Caption}}>{{$:/core/images/down-arrow}}</$button> \n<$reveal state=<<qualify \"$:/state/popup/field-dropdown\">> type=\"nomatch\" text=\"\" default=\"\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown\">\n<$set name=\"tv-show-missing-links\" value=\"yes\">\n<$linkcatcher to=<<newFieldNameTiddler>>>\n<div class=\"tc-dropdown-item\">\n<<lingo Fields/Add/Dropdown/User>>\n</div>\n<$set name=\"newFieldName\" value={{{ [<newFieldNameTiddler>get[text]] }}}>\n<$list filter=\"[!is[shadow]!is[system]fields[]search:title<newFieldName>sort[]] -created -creator -draft.of -draft.title -modified -modifier -tags -text -title -type\" variable=\"currentField\">\n<$link to=<<currentField>>>\n<$text text=<<currentField>>/>\n</$link>\n</$list>\n<div class=\"tc-dropdown-item\">\n<<lingo Fields/Add/Dropdown/System>>\n</div>\n<$list filter=\"[fields[]search:title<newFieldName>sort[]] -[!is[shadow]!is[system]fields[]]\" variable=\"currentField\">\n<$link to=<<currentField>>>\n<$text text=<<currentField>>/>\n</$link>\n</$list>\n</$set>\n</$linkcatcher>\n</$set>\n</div>\n</$reveal>\n<span class=\"tc-edit-field-add-value\">\n<$set name=\"currentTiddlerCSSescaped\" value={{{ [<currentTiddler>escapecss[]] }}}>\n<$keyboard key=\"((add-field))\" actions=<<new-field-actions>>>\n<$edit-text tiddler=<<newFieldValueTiddler>> tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Fields/Add/Value/Placeholder}} class=\"tc-edit-texteditor\" tabindex={{$:/config/EditTabIndex}}/>\n</$keyboard>\n</$set>\n</span> \n<span class=\"tc-edit-field-add-button\">\n<$macrocall $name=\"new-field\"/>\n</span>\n</div>\n</$fieldmangler>\n"
},
"$:/core/ui/EditTemplate/shadow": {
"title": "$:/core/ui/EditTemplate/shadow",
"tags": "$:/tags/EditTemplate",
"text": "\\define lingo-base() $:/language/EditTemplate/Shadow/\n\\define pluginLinkBody()\n<$link to=\"\"\"$(pluginTitle)$\"\"\">\n<$text text=\"\"\"$(pluginTitle)$\"\"\"/>\n</$link>\n\\end\n<$list filter=\"[all[current]get[draft.of]is[shadow]!is[tiddler]]\">\n\n<$list filter=\"[all[current]shadowsource[]]\" variable=\"pluginTitle\">\n\n<$set name=\"pluginLink\" value=<<pluginLinkBody>>>\n<div class=\"tc-message-box\">\n\n<<lingo Warning>>\n\n</div>\n</$set>\n</$list>\n\n</$list>\n\n<$list filter=\"[all[current]get[draft.of]is[shadow]is[tiddler]]\">\n\n<$list filter=\"[all[current]shadowsource[]]\" variable=\"pluginTitle\">\n\n<$set name=\"pluginLink\" value=<<pluginLinkBody>>>\n<div class=\"tc-message-box\">\n\n<<lingo OverriddenWarning>>\n\n</div>\n</$set>\n</$list>\n\n</$list>"
},
"$:/core/ui/EditTemplate/tags": {
"title": "$:/core/ui/EditTemplate/tags",
"tags": "$:/tags/EditTemplate",
"text": "\\whitespace trim\n\n\\define lingo-base() $:/language/EditTemplate/\n\n\\define tag-styles()\nbackground-color:$(backgroundColor)$;\nfill:$(foregroundColor)$;\ncolor:$(foregroundColor)$;\n\\end\n\n\\define tag-body-inner(colour,fallbackTarget,colourA,colourB,icon)\n\\whitespace trim\n<$vars foregroundColor=<<contrastcolour target:\"\"\"$colour$\"\"\" fallbackTarget:\"\"\"$fallbackTarget$\"\"\" colourA:\"\"\"$colourA$\"\"\" colourB:\"\"\"$colourB$\"\"\">> backgroundColor=\"\"\"$colour$\"\"\">\n<span style=<<tag-styles>> class=\"tc-tag-label tc-tag-list-item\">\n<$transclude tiddler=\"\"\"$icon$\"\"\"/><$view field=\"title\" format=\"text\" />\n<$button message=\"tm-remove-tag\" param={{!!title}} class=\"tc-btn-invisible tc-remove-tag-button\">{{$:/core/images/close-button}}</$button>\n</span>\n</$vars>\n\\end\n\n\\define tag-body(colour,palette,icon)\n<$macrocall $name=\"tag-body-inner\" colour=\"\"\"$colour$\"\"\" fallbackTarget={{$palette$##tag-background}} colourA={{$palette$##foreground}} colourB={{$palette$##background}} icon=\"\"\"$icon$\"\"\"/>\n\\end\n\n<div class=\"tc-edit-tags\">\n<$fieldmangler>\n<$list filter=\"[all[current]tags[]sort[title]]\" storyview=\"pop\">\n<$macrocall $name=\"tag-body\" colour={{!!color}} palette={{$:/palette}} icon={{!!icon}}/>\n</$list>\n<$set name=\"tabIndex\" value={{$:/config/EditTabIndex}}>\n<$macrocall $name=\"tag-picker\"/>\n</$set>\n</$fieldmangler>\n</div>\n"
},
"$:/core/ui/EditTemplate/title": {
"title": "$:/core/ui/EditTemplate/title",
"tags": "$:/tags/EditTemplate",
"text": "<$edit-text field=\"draft.title\" class=\"tc-titlebar tc-edit-texteditor\" focus={{{ [{$:/config/AutoFocus}match[title]then[true]] ~[[false]] }}} tabindex={{$:/config/EditTabIndex}}/>\n\n<$vars pattern=\"\"\"[\\|\\[\\]{}]\"\"\" bad-chars=\"\"\"`| [ ] { }`\"\"\">\n\n<$list filter=\"[all[current]regexp:draft.title<pattern>]\" variable=\"listItem\">\n\n<div class=\"tc-message-box\">\n\n{{$:/core/images/warning}} {{$:/language/EditTemplate/Title/BadCharacterWarning}}\n\n</div>\n\n</$list>\n\n</$vars>\n\n<$reveal state=\"!!draft.title\" type=\"nomatch\" text={{!!draft.of}} tag=\"div\">\n\n<$list filter=\"[{!!draft.title}!is[missing]]\" variable=\"listItem\">\n\n<div class=\"tc-message-box\">\n\n{{$:/core/images/warning}} {{$:/language/EditTemplate/Title/Exists/Prompt}}\n\n</div>\n\n</$list>\n\n<$list filter=\"[{!!draft.of}!is[missing]]\" variable=\"listItem\">\n\n<$vars fromTitle={{!!draft.of}} toTitle={{!!draft.title}}>\n\n<$checkbox tiddler=\"$:/config/RelinkOnRename\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> {{$:/language/EditTemplate/Title/Relink/Prompt}}</$checkbox>\n\n<$list filter=\"[title<fromTitle>backlinks[]limit[1]]\" variable=\"listItem\">\n\n<$vars stateTiddler=<<qualify \"$:/state/edit/references\">> >\n\n<$reveal type=\"nomatch\" state=<<stateTiddler>> text=\"show\">\n<$button set=<<stateTiddler>> setTo=\"show\" class=\"tc-btn-invisible\">{{$:/core/images/right-arrow}} \n<<lingo EditTemplate/Title/References/Prompt>></$button>\n</$reveal>\n<$reveal type=\"match\" state=<<stateTiddler>> text=\"show\">\n<$button set=<<stateTiddler>> setTo=\"hide\" class=\"tc-btn-invisible\">{{$:/core/images/down-arrow}} \n<<lingo EditTemplate/Title/References/Prompt>></$button>\n</$reveal>\n\n<$reveal type=\"match\" state=<<stateTiddler>> text=\"show\">\n<$tiddler tiddler=<<fromTitle>> >\n<$transclude tiddler=\"$:/core/ui/TiddlerInfo/References\"/>\n</$tiddler>\n</$reveal>\n\n</$vars>\n\n</$list>\n\n</$vars>\n\n</$list>\n\n</$reveal>\n"
},
"$:/core/ui/EditTemplate/type": {
"title": "$:/core/ui/EditTemplate/type",
"tags": "$:/tags/EditTemplate",
"text": "\\define lingo-base() $:/language/EditTemplate/\n\\whitespace trim\n<div class=\"tc-type-selector\"><$fieldmangler>\n<em class=\"tc-edit\"><<lingo Type/Prompt>></em> <$edit-text field=\"type\" tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Type/Placeholder}} focusPopup=<<qualify \"$:/state/popup/type-dropdown\">> class=\"tc-edit-typeeditor tc-edit-texteditor tc-popup-handle\" tabindex={{$:/config/EditTabIndex}} focus={{{ [{$:/config/AutoFocus}match[type]then[true]] ~[[false]] }}}/> <$button popup=<<qualify \"$:/state/popup/type-dropdown\">> class=\"tc-btn-invisible tc-btn-dropdown\" tooltip={{$:/language/EditTemplate/Type/Dropdown/Hint}} aria-label={{$:/language/EditTemplate/Type/Dropdown/Caption}}>{{$:/core/images/down-arrow}}</$button> <$button message=\"tm-remove-field\" param=\"type\" class=\"tc-btn-invisible tc-btn-icon\" tooltip={{$:/language/EditTemplate/Type/Delete/Hint}} aria-label={{$:/language/EditTemplate/Type/Delete/Caption}}>{{$:/core/images/delete-button}}</$button>\n</$fieldmangler></div>\n\n<div class=\"tc-block-dropdown-wrapper\">\n<$set name=\"tv-show-missing-links\" value=\"yes\">\n<$reveal state=<<qualify \"$:/state/popup/type-dropdown\">> type=\"nomatch\" text=\"\" default=\"\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown\">\n<$linkcatcher to=\"!!type\">\n<$list filter='[all[shadows+tiddlers]prefix[$:/language/Docs/Types/]each[group]sort[group-sort]]'>\n<div class=\"tc-dropdown-item\">\n<$text text={{!!group}}/>\n</div>\n<$list filter=\"[all[shadows+tiddlers]prefix[$:/language/Docs/Types/]group{!!group}] +[sort[description]]\"><$link to={{!!name}}><$view field=\"description\"/> (<$view field=\"name\"/>)</$link>\n</$list>\n</$list>\n</$linkcatcher>\n</div>\n</$reveal>\n</$set>\n</div>\n"
},
"$:/core/ui/EditTemplate": {
"title": "$:/core/ui/EditTemplate",
"text": "\\define save-tiddler-actions()\n<$action-sendmessage $message=\"tm-add-tag\" $param={{{ [<newTagNameTiddler>get[text]] }}}/>\n<$action-deletetiddler $tiddler=<<newTagNameTiddler>>/>\n<$action-sendmessage $message=\"tm-add-field\" $name={{{ [<newFieldNameTiddler>get[text]] }}} $value={{{ [<newFieldValueTiddler>get[text]] }}}/>\n<$action-deletetiddler $tiddler=<<newFieldNameTiddler>>/>\n<$action-deletetiddler $tiddler=<<newFieldValueTiddler>>/>\n<$action-sendmessage $message=\"tm-save-tiddler\"/>\n\\end\n<div data-tiddler-title=<<currentTiddler>> data-tags={{!!tags}} class={{{ tc-tiddler-frame tc-tiddler-edit-frame [<currentTiddler>is[tiddler]then[tc-tiddler-exists]] [<currentTiddler>is[missing]!is[shadow]then[tc-tiddler-missing]] [<currentTiddler>is[shadow]then[tc-tiddler-exists tc-tiddler-shadow]] [<currentTiddler>is[system]then[tc-tiddler-system]] [{!!class}] [<currentTiddler>tags[]encodeuricomponent[]addprefix[tc-tagged-]] +[join[ ]] }}}>\n<$fieldmangler>\n<$vars storyTiddler=<<currentTiddler>> newTagNameTiddler=<<qualify \"$:/temp/NewTagName\">> newFieldNameTiddler=<<qualify \"$:/temp/NewFieldName\">> newFieldValueTiddler=<<qualify \"$:/temp/NewFieldValue\">>>\n<$keyboard key=\"((cancel-edit-tiddler))\" message=\"tm-cancel-tiddler\">\n<$keyboard key=\"((save-tiddler))\" actions=<<save-tiddler-actions>>>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditTemplate]!has[draft.of]]\" variable=\"listItem\">\n<$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\">\n<$transclude tiddler=<<listItem>>/>\n</$set>\n</$list>\n</$keyboard>\n</$keyboard>\n</$vars>\n</$fieldmangler>\n</div>\n"
},
"$:/core/ui/Buttons/cancel": {
"title": "$:/core/ui/Buttons/cancel",
"tags": "$:/tags/EditToolbar",
"caption": "{{$:/core/images/cancel-button}} {{$:/language/Buttons/Cancel/Caption}}",
"description": "{{$:/language/Buttons/Cancel/Hint}}",
"text": "<$button message=\"tm-cancel-tiddler\" tooltip={{$:/language/Buttons/Cancel/Hint}} aria-label={{$:/language/Buttons/Cancel/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/cancel-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Cancel/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/delete": {
"title": "$:/core/ui/Buttons/delete",
"tags": "$:/tags/EditToolbar $:/tags/ViewToolbar",
"caption": "{{$:/core/images/delete-button}} {{$:/language/Buttons/Delete/Caption}}",
"description": "{{$:/language/Buttons/Delete/Hint}}",
"text": "<$button message=\"tm-delete-tiddler\" tooltip={{$:/language/Buttons/Delete/Hint}} aria-label={{$:/language/Buttons/Delete/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/delete-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Delete/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/save": {
"title": "$:/core/ui/Buttons/save",
"tags": "$:/tags/EditToolbar",
"caption": "{{$:/core/images/done-button}} {{$:/language/Buttons/Save/Caption}}",
"description": "{{$:/language/Buttons/Save/Hint}}",
"text": "\\define save-tiddler-button()\n<$fieldmangler><$button tooltip={{$:/language/Buttons/Save/Hint}} aria-label={{$:/language/Buttons/Save/Caption}} class=<<tv-config-toolbar-class>>>\n<<save-tiddler-actions>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/done-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Save/Caption}}/></span>\n</$list>\n</$button></$fieldmangler>\n\\end\n<<save-tiddler-button>>\n"
},
"$:/core/ui/EditorToolbar/bold": {
"title": "$:/core/ui/EditorToolbar/bold",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/bold",
"caption": "{{$:/language/Buttons/Bold/Caption}}",
"description": "{{$:/language/Buttons/Bold/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((bold))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"''\"\n\tsuffix=\"''\"\n/>\n"
},
"$:/core/ui/EditorToolbar/clear-dropdown": {
"title": "$:/core/ui/EditorToolbar/clear-dropdown",
"text": "''{{$:/language/Buttons/Clear/Hint}}''\n\n<div class=\"tc-colour-chooser\">\n\n<$macrocall $name=\"colour-picker\" actions=\"\"\"\n\n<$action-sendmessage\n\t$message=\"tm-edit-bitmap-operation\"\n\t$param=\"clear\"\n\tcolour=<<colour-picker-value>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n\"\"\"/>\n\n</div>\n"
},
"$:/core/ui/EditorToolbar/clear": {
"title": "$:/core/ui/EditorToolbar/clear",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/erase",
"caption": "{{$:/language/Buttons/Clear/Caption}}",
"description": "{{$:/language/Buttons/Clear/Hint}}",
"condition": "[<targetTiddler>is[image]]",
"dropdown": "$:/core/ui/EditorToolbar/clear-dropdown",
"text": ""
},
"$:/core/ui/EditorToolbar/editor-height-dropdown": {
"title": "$:/core/ui/EditorToolbar/editor-height-dropdown",
"text": "\\define lingo-base() $:/language/Buttons/EditorHeight/\n''<<lingo Hint>>''\n\n<$radio tiddler=\"$:/config/TextEditor/EditorHeight/Mode\" value=\"auto\"> {{$:/core/images/auto-height}} <<lingo Caption/Auto>></$radio>\n\n<$radio tiddler=\"$:/config/TextEditor/EditorHeight/Mode\" value=\"fixed\"> {{$:/core/images/fixed-height}} <<lingo Caption/Fixed>> <$edit-text tag=\"input\" tiddler=\"$:/config/TextEditor/EditorHeight/Height\" default=\"100px\"/></$radio>\n"
},
"$:/core/ui/EditorToolbar/editor-height": {
"title": "$:/core/ui/EditorToolbar/editor-height",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/fixed-height",
"custom-icon": "yes",
"caption": "{{$:/language/Buttons/EditorHeight/Caption}}",
"description": "{{$:/language/Buttons/EditorHeight/Hint}}",
"condition": "[<targetTiddler>type[]] [<targetTiddler>get[type]prefix[text/]] +[first[]]",
"dropdown": "$:/core/ui/EditorToolbar/editor-height-dropdown",
"text": "<$reveal tag=\"span\" state=\"$:/config/TextEditor/EditorHeight/Mode\" type=\"match\" text=\"fixed\">\n{{$:/core/images/fixed-height}}\n</$reveal>\n<$reveal tag=\"span\" state=\"$:/config/TextEditor/EditorHeight/Mode\" type=\"match\" text=\"auto\">\n{{$:/core/images/auto-height}}\n</$reveal>\n"
},
"$:/core/ui/EditorToolbar/excise-dropdown": {
"title": "$:/core/ui/EditorToolbar/excise-dropdown",
"text": "\\define lingo-base() $:/language/Buttons/Excise/\n\n\\define body(config-title)\n''<<lingo Hint>>''\n\n<<lingo Caption/NewTitle>> <$edit-text tag=\"input\" tiddler=\"$config-title$/new-title\" default=\"\" focus=\"true\"/>\n\n<$set name=\"new-title\" value={{$config-title$/new-title}}>\n<$list filter=\"\"\"[<new-title>is[tiddler]]\"\"\">\n<div class=\"tc-error\">\n<<lingo Caption/TiddlerExists>>\n</div>\n</$list>\n</$set>\n\n<$checkbox tiddler=\"\"\"$config-title$/tagnew\"\"\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"false\"> <<lingo Caption/Tag>></$checkbox>\n\n<<lingo Caption/Replace>> <$select tiddler=\"\"\"$config-title$/type\"\"\" default=\"transclude\">\n<option value=\"link\"><<lingo Caption/Replace/Link>></option>\n<option value=\"transclude\"><<lingo Caption/Replace/Transclusion>></option>\n<option value=\"macro\"><<lingo Caption/Replace/Macro>></option>\n</$select>\n\n<$reveal state=\"\"\"$config-title$/type\"\"\" type=\"match\" text=\"macro\">\n<<lingo Caption/MacroName>> <$edit-text tag=\"input\" tiddler=\"\"\"$config-title$/macro-title\"\"\" default=\"translink\"/>\n</$reveal>\n\n<$button>\n<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"excise\"\n\ttitle={{$config-title$/new-title}}\n\ttype={{$config-title$/type}}\n\tmacro={{$config-title$/macro-title}}\n\ttagnew={{$config-title$/tagnew}}\n/>\n<$action-deletetiddler\n\t$tiddler=\"$config-title$/new-title\"\n/>\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n<<lingo Caption/Excise>>\n</$button>\n\\end\n\n<$macrocall $name=\"body\" config-title=<<qualify \"$:/state/Excise/\">>/>\n"
},
"$:/core/ui/EditorToolbar/excise": {
"title": "$:/core/ui/EditorToolbar/excise",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/excise",
"caption": "{{$:/language/Buttons/Excise/Caption}}",
"description": "{{$:/language/Buttons/Excise/Hint}}",
"condition": "[<targetTiddler>type[]] [<targetTiddler>type[text/vnd.tiddlywiki]] +[first[]]",
"shortcuts": "((excise))",
"dropdown": "$:/core/ui/EditorToolbar/excise-dropdown",
"text": ""
},
"$:/core/ui/EditorToolbar/heading-1": {
"title": "$:/core/ui/EditorToolbar/heading-1",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-1",
"caption": "{{$:/language/Buttons/Heading1/Caption}}",
"description": "{{$:/language/Buttons/Heading1/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"button-classes": "tc-text-editor-toolbar-item-start-group",
"shortcuts": "((heading-1))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"1\"\n/>\n"
},
"$:/core/ui/EditorToolbar/heading-2": {
"title": "$:/core/ui/EditorToolbar/heading-2",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-2",
"caption": "{{$:/language/Buttons/Heading2/Caption}}",
"description": "{{$:/language/Buttons/Heading2/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((heading-2))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"2\"\n/>\n"
},
"$:/core/ui/EditorToolbar/heading-3": {
"title": "$:/core/ui/EditorToolbar/heading-3",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-3",
"caption": "{{$:/language/Buttons/Heading3/Caption}}",
"description": "{{$:/language/Buttons/Heading3/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((heading-3))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"3\"\n/>\n"
},
"$:/core/ui/EditorToolbar/heading-4": {
"title": "$:/core/ui/EditorToolbar/heading-4",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-4",
"caption": "{{$:/language/Buttons/Heading4/Caption}}",
"description": "{{$:/language/Buttons/Heading4/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((heading-4))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"4\"\n/>\n"
},
"$:/core/ui/EditorToolbar/heading-5": {
"title": "$:/core/ui/EditorToolbar/heading-5",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-5",
"caption": "{{$:/language/Buttons/Heading5/Caption}}",
"description": "{{$:/language/Buttons/Heading5/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((heading-5))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"5\"\n/>\n"
},
"$:/core/ui/EditorToolbar/heading-6": {
"title": "$:/core/ui/EditorToolbar/heading-6",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-6",
"caption": "{{$:/language/Buttons/Heading6/Caption}}",
"description": "{{$:/language/Buttons/Heading6/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((heading-6))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"!\"\n\tcount=\"6\"\n/>\n"
},
"$:/core/ui/EditorToolbar/italic": {
"title": "$:/core/ui/EditorToolbar/italic",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/italic",
"caption": "{{$:/language/Buttons/Italic/Caption}}",
"description": "{{$:/language/Buttons/Italic/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((italic))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"//\"\n\tsuffix=\"//\"\n/>\n"
},
"$:/core/ui/EditorToolbar/line-width-dropdown": {
"title": "$:/core/ui/EditorToolbar/line-width-dropdown",
"text": "\\define lingo-base() $:/language/Buttons/LineWidth/\n\n\\define toolbar-line-width-inner()\n<$button tag=\"a\" tooltip=\"\"\"$(line-width)$\"\"\">\n\n<$action-setfield\n\t$tiddler=\"$:/config/BitmapEditor/LineWidth\"\n\t$value=\"$(line-width)$\"\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<div style=\"display: inline-block; margin: 4px calc(80px - $(line-width)$); background-color: #000; width: calc(100px + $(line-width)$ * 2); height: $(line-width)$; border-radius: 120px; vertical-align: middle;\"/>\n\n<span style=\"margin-left: 8px;\">\n\n<$text text=\"\"\"$(line-width)$\"\"\"/>\n\n<$reveal state=\"$:/config/BitmapEditor/LineWidth\" type=\"match\" text=\"\"\"$(line-width)$\"\"\" tag=\"span\">\n\n<$entity entity=\" \"/>\n\n<$entity entity=\"✓\"/>\n\n</$reveal>\n\n</span>\n\n</$button>\n\\end\n\n''<<lingo Hint>>''\n\n<$list filter={{$:/config/BitmapEditor/LineWidths}} variable=\"line-width\">\n\n<<toolbar-line-width-inner>>\n\n</$list>\n"
},
"$:/core/ui/EditorToolbar/line-width": {
"title": "$:/core/ui/EditorToolbar/line-width",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/line-width",
"caption": "{{$:/language/Buttons/LineWidth/Caption}}",
"description": "{{$:/language/Buttons/LineWidth/Hint}}",
"condition": "[<targetTiddler>is[image]]",
"dropdown": "$:/core/ui/EditorToolbar/line-width-dropdown",
"text": "<$text text={{$:/config/BitmapEditor/LineWidth}}/>"
},
"$:/core/ui/EditorToolbar/link-dropdown": {
"title": "$:/core/ui/EditorToolbar/link-dropdown",
"text": "\\define lingo-base() $:/language/Buttons/Link/\n\n\\define add-link-actions()\n<$action-sendmessage $message=\"tm-edit-text-operation\" $param=\"make-link\" text={{$(linkTiddler)$}} />\n<$action-deletetiddler $tiddler=<<dropdown-state>> />\n<$action-deletetiddler $tiddler=<<searchTiddler>> />\n<$action-deletetiddler $tiddler=<<linkTiddler>> />\n\\end\n\n\\define external-link()\n<$button class=\"tc-btn-invisible\" style=\"width: auto; display: inline-block; background-colour: inherit;\" actions=<<add-link-actions>>>\n{{$:/core/images/chevron-right}}\n</$button>\n\\end\n\n\\define body(config-title)\n''<<lingo Hint>>''\n\n<$vars searchTiddler=\"\"\"$config-title$/search\"\"\" linkTiddler=\"\"\"$config-title$/link\"\"\" linktext=\"\" >\n\n<$vars linkTiddler=<<searchTiddler>>>\n<$keyboard key=\"ENTER\" actions=<<add-link-actions>>>\n<$edit-text tiddler=<<searchTiddler>> type=\"search\" tag=\"input\" focus=\"true\" placeholder={{$:/language/Search/Search}} default=\"\"/>\n<$reveal tag=\"span\" state=<<searchTiddler>> type=\"nomatch\" text=\"\">\n<<external-link>>\n<$button class=\"tc-btn-invisible\" style=\"width: auto; display: inline-block; background-colour: inherit;\">\n<$action-setfield $tiddler=<<searchTiddler>> text=\"\" />\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</$keyboard>\n</$vars>\n\n<$reveal tag=\"div\" state=<<searchTiddler>> type=\"nomatch\" text=\"\">\n\n<$linkcatcher actions=<<add-link-actions>> to=<<linkTiddler>>>\n\n{{$:/core/ui/SearchResults}}\n\n</$linkcatcher>\n\n</$reveal>\n\n</$vars>\n\n\\end\n\n<$macrocall $name=\"body\" config-title=<<qualify \"$:/state/Link/\">>/>"
},
"$:/core/ui/EditorToolbar/link": {
"title": "$:/core/ui/EditorToolbar/link",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/link",
"caption": "{{$:/language/Buttons/Link/Caption}}",
"description": "{{$:/language/Buttons/Link/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"button-classes": "tc-text-editor-toolbar-item-start-group",
"shortcuts": "((link))",
"dropdown": "$:/core/ui/EditorToolbar/link-dropdown",
"text": ""
},
"$:/core/ui/EditorToolbar/linkify": {
"title": "$:/core/ui/EditorToolbar/linkify",
"caption": "{{$:/language/Buttons/Linkify/Caption}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"description": "{{$:/language/Buttons/Linkify/Hint}}",
"icon": "$:/core/images/linkify",
"list-before": "$:/core/ui/EditorToolbar/mono-block",
"shortcuts": "((linkify))",
"tags": "$:/tags/EditorToolbar",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"[[\"\n\tsuffix=\"]]\"\n/>\n"
},
"$:/core/ui/EditorToolbar/list-bullet": {
"title": "$:/core/ui/EditorToolbar/list-bullet",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/list-bullet",
"caption": "{{$:/language/Buttons/ListBullet/Caption}}",
"description": "{{$:/language/Buttons/ListBullet/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((list-bullet))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"*\"\n\tcount=\"1\"\n/>\n"
},
"$:/core/ui/EditorToolbar/list-number": {
"title": "$:/core/ui/EditorToolbar/list-number",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/list-number",
"caption": "{{$:/language/Buttons/ListNumber/Caption}}",
"description": "{{$:/language/Buttons/ListNumber/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((list-number))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"#\"\n\tcount=\"1\"\n/>\n"
},
"$:/core/ui/EditorToolbar/mono-block": {
"title": "$:/core/ui/EditorToolbar/mono-block",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/mono-block",
"caption": "{{$:/language/Buttons/MonoBlock/Caption}}",
"description": "{{$:/language/Buttons/MonoBlock/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"button-classes": "tc-text-editor-toolbar-item-start-group",
"shortcuts": "((mono-block))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-lines\"\n\tprefix=\"\n```\"\n\tsuffix=\"```\"\n/>\n"
},
"$:/core/ui/EditorToolbar/mono-line": {
"title": "$:/core/ui/EditorToolbar/mono-line",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/mono-line",
"caption": "{{$:/language/Buttons/MonoLine/Caption}}",
"description": "{{$:/language/Buttons/MonoLine/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((mono-line))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"`\"\n\tsuffix=\"`\"\n/>\n"
},
"$:/core/ui/EditorToolbar/more-dropdown": {
"title": "$:/core/ui/EditorToolbar/more-dropdown",
"text": "\\define config-title()\n$:/config/EditorToolbarButtons/Visibility/$(toolbarItem)$\n\\end\n\n\\define conditional-button()\n<$list filter={{$(toolbarItem)$!!condition}} variable=\"condition\">\n<$transclude tiddler=\"$:/core/ui/EditTemplate/body/toolbar/button\" mode=\"inline\"/> <$transclude tiddler=<<toolbarItem>> field=\"description\"/>\n</$list>\n\\end\n\n<div class=\"tc-text-editor-toolbar-more\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditorToolbar]!has[draft.of]] -[[$:/core/ui/EditorToolbar/more]]\">\n<$reveal type=\"match\" state=<<config-visibility-title>> text=\"hide\" tag=\"div\">\n<<conditional-button>>\n</$reveal>\n</$list>\n</div>\n"
},
"$:/core/ui/EditorToolbar/more": {
"title": "$:/core/ui/EditorToolbar/more",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/down-arrow",
"caption": "{{$:/language/Buttons/More/Caption}}",
"description": "{{$:/language/Buttons/More/Hint}}",
"condition": "[<targetTiddler>]",
"dropdown": "$:/core/ui/EditorToolbar/more-dropdown",
"text": ""
},
"$:/core/ui/EditorToolbar/opacity-dropdown": {
"title": "$:/core/ui/EditorToolbar/opacity-dropdown",
"text": "\\define lingo-base() $:/language/Buttons/Opacity/\n\n\\define toolbar-opacity-inner()\n<$button tag=\"a\" tooltip=\"\"\"$(opacity)$\"\"\">\n\n<$action-setfield\n\t$tiddler=\"$:/config/BitmapEditor/Opacity\"\n\t$value=\"$(opacity)$\"\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<div style=\"display: inline-block; vertical-align: middle; background-color: $(current-paint-colour)$; opacity: $(opacity)$; width: 1em; height: 1em; border-radius: 50%;\"/>\n\n<span style=\"margin-left: 8px;\">\n\n<$text text=\"\"\"$(opacity)$\"\"\"/>\n\n<$reveal state=\"$:/config/BitmapEditor/Opacity\" type=\"match\" text=\"\"\"$(opacity)$\"\"\" tag=\"span\">\n\n<$entity entity=\" \"/>\n\n<$entity entity=\"✓\"/>\n\n</$reveal>\n\n</span>\n\n</$button>\n\\end\n\n\\define toolbar-opacity()\n''<<lingo Hint>>''\n\n<$list filter={{$:/config/BitmapEditor/Opacities}} variable=\"opacity\">\n\n<<toolbar-opacity-inner>>\n\n</$list>\n\\end\n\n<$set name=\"current-paint-colour\" value={{$:/config/BitmapEditor/Colour}}>\n\n<$set name=\"current-opacity\" value={{$:/config/BitmapEditor/Opacity}}>\n\n<<toolbar-opacity>>\n\n</$set>\n\n</$set>\n"
},
"$:/core/ui/EditorToolbar/opacity": {
"title": "$:/core/ui/EditorToolbar/opacity",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/opacity",
"caption": "{{$:/language/Buttons/Opacity/Caption}}",
"description": "{{$:/language/Buttons/Opacity/Hint}}",
"condition": "[<targetTiddler>is[image]]",
"dropdown": "$:/core/ui/EditorToolbar/opacity-dropdown",
"text": "<$text text={{$:/config/BitmapEditor/Opacity}}/>\n"
},
"$:/core/ui/EditorToolbar/paint-dropdown": {
"title": "$:/core/ui/EditorToolbar/paint-dropdown",
"text": "''{{$:/language/Buttons/Paint/Hint}}''\n\n<$macrocall $name=\"colour-picker\" actions=\"\"\"\n\n<$action-setfield\n\t$tiddler=\"$:/config/BitmapEditor/Colour\"\n\t$value=<<colour-picker-value>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n\"\"\"/>\n"
},
"$:/core/ui/EditorToolbar/paint": {
"title": "$:/core/ui/EditorToolbar/paint",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/paint",
"caption": "{{$:/language/Buttons/Paint/Caption}}",
"description": "{{$:/language/Buttons/Paint/Hint}}",
"condition": "[<targetTiddler>is[image]]",
"dropdown": "$:/core/ui/EditorToolbar/paint-dropdown",
"text": "\\define toolbar-paint()\n<div style=\"display: inline-block; vertical-align: middle; background-color: $(colour-picker-value)$; width: 1em; height: 1em; border-radius: 50%;\"/>\n\\end\n<$set name=\"colour-picker-value\" value={{$:/config/BitmapEditor/Colour}}>\n<<toolbar-paint>>\n</$set>\n"
},
"$:/core/ui/EditorToolbar/picture-dropdown": {
"title": "$:/core/ui/EditorToolbar/picture-dropdown",
"text": "\\define replacement-text()\n[img[$(imageTitle)$]]\n\\end\n\n''{{$:/language/Buttons/Picture/Hint}}''\n\n<$macrocall $name=\"image-picker\" actions=\"\"\"\n\n<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"replace-selection\"\n\ttext=<<replacement-text>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n\"\"\"/>\n"
},
"$:/core/ui/EditorToolbar/picture": {
"title": "$:/core/ui/EditorToolbar/picture",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/picture",
"caption": "{{$:/language/Buttons/Picture/Caption}}",
"description": "{{$:/language/Buttons/Picture/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((picture))",
"dropdown": "$:/core/ui/EditorToolbar/picture-dropdown",
"text": ""
},
"$:/core/ui/EditorToolbar/preview-type-dropdown": {
"title": "$:/core/ui/EditorToolbar/preview-type-dropdown",
"text": "\\define preview-type-button()\n<$button tag=\"a\">\n\n<$action-setfield $tiddler=\"$:/state/editpreviewtype\" $value=\"$(previewType)$\"/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<$transclude tiddler=<<previewType>> field=\"caption\" mode=\"inline\">\n\n<$view tiddler=<<previewType>> field=\"title\" mode=\"inline\"/>\n\n</$transclude> \n\n<$reveal tag=\"span\" state=\"$:/state/editpreviewtype\" type=\"match\" text=<<previewType>> default=\"$:/core/ui/EditTemplate/body/preview/output\">\n\n<$entity entity=\" \"/>\n\n<$entity entity=\"✓\"/>\n\n</$reveal>\n\n</$button>\n\\end\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/EditPreview]!has[draft.of]]\" variable=\"previewType\">\n\n<<preview-type-button>>\n\n</$list>\n"
},
"$:/core/ui/EditorToolbar/preview-type": {
"title": "$:/core/ui/EditorToolbar/preview-type",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/chevron-down",
"caption": "{{$:/language/Buttons/PreviewType/Caption}}",
"description": "{{$:/language/Buttons/PreviewType/Hint}}",
"condition": "[all[shadows+tiddlers]tag[$:/tags/EditPreview]!has[draft.of]butfirst[]limit[1]]",
"button-classes": "tc-text-editor-toolbar-item-adjunct",
"dropdown": "$:/core/ui/EditorToolbar/preview-type-dropdown"
},
"$:/core/ui/EditorToolbar/preview": {
"title": "$:/core/ui/EditorToolbar/preview",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/preview-open",
"custom-icon": "yes",
"caption": "{{$:/language/Buttons/Preview/Caption}}",
"description": "{{$:/language/Buttons/Preview/Hint}}",
"condition": "[<targetTiddler>]",
"button-classes": "tc-text-editor-toolbar-item-start-group",
"shortcuts": "((preview))",
"text": "<$reveal state=\"$:/state/showeditpreview\" type=\"match\" text=\"yes\" tag=\"span\">\n{{$:/core/images/preview-open}}\n<$action-setfield $tiddler=\"$:/state/showeditpreview\" $value=\"no\"/>\n</$reveal>\n<$reveal state=\"$:/state/showeditpreview\" type=\"nomatch\" text=\"yes\" tag=\"span\">\n{{$:/core/images/preview-closed}}\n<$action-setfield $tiddler=\"$:/state/showeditpreview\" $value=\"yes\"/>\n</$reveal>\n"
},
"$:/core/ui/EditorToolbar/quote": {
"title": "$:/core/ui/EditorToolbar/quote",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/quote",
"caption": "{{$:/language/Buttons/Quote/Caption}}",
"description": "{{$:/language/Buttons/Quote/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((quote))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-lines\"\n\tprefix=\"\n<<<\"\n\tsuffix=\"<<<\"\n/>\n"
},
"$:/core/ui/EditorToolbar/rotate-left": {
"title": "$:/core/ui/EditorToolbar/rotate-left",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/rotate-left",
"caption": "{{$:/language/Buttons/RotateLeft/Caption}}",
"description": "{{$:/language/Buttons/RotateLeft/Hint}}",
"condition": "[<targetTiddler>is[image]]",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-bitmap-operation\"\n\t$param=\"rotate-left\"\n/>\n"
},
"$:/core/ui/EditorToolbar/size-dropdown": {
"title": "$:/core/ui/EditorToolbar/size-dropdown",
"text": "\\define lingo-base() $:/language/Buttons/Size/\n\n\\define toolbar-button-size-preset(config-title)\n<$set name=\"width\" filter=\"$(sizePair)$ +[first[]]\">\n\n<$set name=\"height\" filter=\"$(sizePair)$ +[last[]]\">\n\n<$button tag=\"a\">\n\n<$action-setfield\n\t$tiddler=\"\"\"$config-title$/new-width\"\"\"\n\t$value=<<width>>\n/>\n\n<$action-setfield\n\t$tiddler=\"\"\"$config-title$/new-height\"\"\"\n\t$value=<<height>>\n/>\n\n<$action-deletetiddler\n\t$tiddler=\"\"\"$config-title$/presets-popup\"\"\"\n/>\n\n<$text text=<<width>>/> × <$text text=<<height>>/>\n\n</$button>\n\n</$set>\n\n</$set>\n\\end\n\n\\define toolbar-button-size(config-title)\n''{{$:/language/Buttons/Size/Hint}}''\n\n<<lingo Caption/Width>> <$edit-text tag=\"input\" tiddler=\"\"\"$config-title$/new-width\"\"\" default=<<tv-bitmap-editor-width>> focus=\"true\" size=\"8\"/> <<lingo Caption/Height>> <$edit-text tag=\"input\" tiddler=\"\"\"$config-title$/new-height\"\"\" default=<<tv-bitmap-editor-height>> size=\"8\"/> <$button popup=\"\"\"$config-title$/presets-popup\"\"\" class=\"tc-btn-invisible tc-popup-keep\" style=\"width: auto; display: inline-block; background-colour: inherit;\" selectedClass=\"tc-selected\">\n{{$:/core/images/down-arrow}}\n</$button>\n\n<$reveal tag=\"span\" state=\"\"\"$config-title$/presets-popup\"\"\" type=\"popup\" position=\"belowleft\" animate=\"yes\">\n\n<div class=\"tc-drop-down tc-popup-keep\">\n\n<$list filter={{$:/config/BitmapEditor/ImageSizes}} variable=\"sizePair\">\n\n<$macrocall $name=\"toolbar-button-size-preset\" config-title=\"$config-title$\"/>\n\n</$list>\n\n</div>\n\n</$reveal>\n\n<$button>\n<$action-sendmessage\n\t$message=\"tm-edit-bitmap-operation\"\n\t$param=\"resize\"\n\twidth={{$config-title$/new-width}}\n\theight={{$config-title$/new-height}}\n/>\n<$action-deletetiddler\n\t$tiddler=\"\"\"$config-title$/new-width\"\"\"\n/>\n<$action-deletetiddler\n\t$tiddler=\"\"\"$config-title$/new-height\"\"\"\n/>\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n<<lingo Caption/Resize>>\n</$button>\n\\end\n\n<$macrocall $name=\"toolbar-button-size\" config-title=<<qualify \"$:/state/Size/\">>/>\n"
},
"$:/core/ui/EditorToolbar/size": {
"title": "$:/core/ui/EditorToolbar/size",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/size",
"caption": "{{$:/language/Buttons/Size/Caption}}",
"description": "{{$:/language/Buttons/Size/Hint}}",
"condition": "[<targetTiddler>is[image]]",
"dropdown": "$:/core/ui/EditorToolbar/size-dropdown",
"text": ""
},
"$:/core/ui/EditorToolbar/stamp-dropdown": {
"title": "$:/core/ui/EditorToolbar/stamp-dropdown",
"text": "\\define toolbar-button-stamp-inner()\n<$button tag=\"a\">\n\n<$list filter=\"[[$(snippetTitle)$]addsuffix[/prefix]is[missing]removesuffix[/prefix]addsuffix[/suffix]is[missing]]\">\n\n<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"replace-selection\"\n\ttext={{$(snippetTitle)$}}\n/>\n\n</$list>\n\n\n<$list filter=\"[[$(snippetTitle)$]addsuffix[/prefix]is[missing]removesuffix[/prefix]addsuffix[/suffix]!is[missing]] [[$(snippetTitle)$]addsuffix[/prefix]!is[missing]removesuffix[/prefix]addsuffix[/suffix]is[missing]] [[$(snippetTitle)$]addsuffix[/prefix]!is[missing]removesuffix[/prefix]addsuffix[/suffix]!is[missing]]\">\n\n<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix={{{ [[$(snippetTitle)$]addsuffix[/prefix]get[text]] }}}\nsuffix={{{ [[$(snippetTitle)$]addsuffix[/suffix]get[text]] }}}\n/>\n\n</$list>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<$transclude tiddler=<<snippetTitle>> field=\"caption\" mode=\"inline\">\n\n<$view tiddler=<<snippetTitle>> field=\"title\" />\n\n</$transclude>\n\n</$button>\n\\end\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TextEditor/Snippet]!has[draft.of]sort[caption]]\" variable=\"snippetTitle\">\n\n<<toolbar-button-stamp-inner>>\n\n</$list>\n\n----\n\n<$button tag=\"a\">\n\n<$action-sendmessage\n\t$message=\"tm-new-tiddler\"\n\ttags=\"$:/tags/TextEditor/Snippet\"\n\tcaption={{$:/language/Buttons/Stamp/New/Title}}\n\ttext={{$:/language/Buttons/Stamp/New/Text}}\n/>\n\n<$action-deletetiddler\n\t$tiddler=<<dropdown-state>>\n/>\n\n<em>\n\n<$text text={{$:/language/Buttons/Stamp/Caption/New}}/>\n\n</em>\n\n</$button>\n"
},
"$:/core/ui/EditorToolbar/stamp": {
"title": "$:/core/ui/EditorToolbar/stamp",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/stamp",
"caption": "{{$:/language/Buttons/Stamp/Caption}}",
"description": "{{$:/language/Buttons/Stamp/Hint}}",
"condition": "[<targetTiddler>type[]] [<targetTiddler>get[type]prefix[text/]] +[first[]]",
"shortcuts": "((stamp))",
"dropdown": "$:/core/ui/EditorToolbar/stamp-dropdown",
"text": ""
},
"$:/core/ui/EditorToolbar/strikethrough": {
"title": "$:/core/ui/EditorToolbar/strikethrough",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/strikethrough",
"caption": "{{$:/language/Buttons/Strikethrough/Caption}}",
"description": "{{$:/language/Buttons/Strikethrough/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((strikethrough))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"~~\"\n\tsuffix=\"~~\"\n/>\n"
},
"$:/core/ui/EditorToolbar/subscript": {
"title": "$:/core/ui/EditorToolbar/subscript",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/subscript",
"caption": "{{$:/language/Buttons/Subscript/Caption}}",
"description": "{{$:/language/Buttons/Subscript/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((subscript))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\",,\"\n\tsuffix=\",,\"\n/>\n"
},
"$:/core/ui/EditorToolbar/superscript": {
"title": "$:/core/ui/EditorToolbar/superscript",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/superscript",
"caption": "{{$:/language/Buttons/Superscript/Caption}}",
"description": "{{$:/language/Buttons/Superscript/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((superscript))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"^^\"\n\tsuffix=\"^^\"\n/>\n"
},
"$:/core/ui/EditorToolbar/transcludify": {
"title": "$:/core/ui/EditorToolbar/transcludify",
"caption": "{{$:/language/Buttons/Transcludify/Caption}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"description": "{{$:/language/Buttons/Transcludify/Hint}}",
"icon": "$:/core/images/transcludify",
"list-before": "$:/core/ui/EditorToolbar/mono-block",
"shortcuts": "((transcludify))",
"tags": "$:/tags/EditorToolbar",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"{{\"\n\tsuffix=\"}}\"\n/>\n"
},
"$:/core/ui/EditorToolbar/underline": {
"title": "$:/core/ui/EditorToolbar/underline",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/underline",
"caption": "{{$:/language/Buttons/Underline/Caption}}",
"description": "{{$:/language/Buttons/Underline/Hint}}",
"condition": "[<targetTiddler>!has[type]] [<targetTiddler>type[text/vnd.tiddlywiki]]",
"shortcuts": "((underline))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"__\"\n\tsuffix=\"__\"\n/>\n"
},
"$:/core/Filters/AllTags": {
"title": "$:/core/Filters/AllTags",
"tags": "$:/tags/Filter",
"filter": "[tags[]!is[system]sort[title]]",
"description": "{{$:/language/Filters/AllTags}}",
"text": ""
},
"$:/core/Filters/AllTiddlers": {
"title": "$:/core/Filters/AllTiddlers",
"tags": "$:/tags/Filter",
"filter": "[!is[system]sort[title]]",
"description": "{{$:/language/Filters/AllTiddlers}}",
"text": ""
},
"$:/core/Filters/Drafts": {
"title": "$:/core/Filters/Drafts",
"tags": "$:/tags/Filter",
"filter": "[has[draft.of]sort[title]]",
"description": "{{$:/language/Filters/Drafts}}",
"text": ""
},
"$:/core/Filters/Missing": {
"title": "$:/core/Filters/Missing",
"tags": "$:/tags/Filter",
"filter": "[all[missing]sort[title]]",
"description": "{{$:/language/Filters/Missing}}",
"text": ""
},
"$:/core/Filters/Orphans": {
"title": "$:/core/Filters/Orphans",
"tags": "$:/tags/Filter",
"filter": "[all[orphans]sort[title]]",
"description": "{{$:/language/Filters/Orphans}}",
"text": ""
},
"$:/core/Filters/OverriddenShadowTiddlers": {
"title": "$:/core/Filters/OverriddenShadowTiddlers",
"tags": "$:/tags/Filter",
"filter": "[is[shadow]]",
"description": "{{$:/language/Filters/OverriddenShadowTiddlers}}",
"text": ""
},
"$:/core/Filters/RecentSystemTiddlers": {
"title": "$:/core/Filters/RecentSystemTiddlers",
"tags": "$:/tags/Filter",
"filter": "[has[modified]!sort[modified]limit[50]]",
"description": "{{$:/language/Filters/RecentSystemTiddlers}}",
"text": ""
},
"$:/core/Filters/RecentTiddlers": {
"title": "$:/core/Filters/RecentTiddlers",
"tags": "$:/tags/Filter",
"filter": "[!is[system]has[modified]!sort[modified]limit[50]]",
"description": "{{$:/language/Filters/RecentTiddlers}}",
"text": ""
},
"$:/core/Filters/SessionTiddlers": {
"title": "$:/core/Filters/SessionTiddlers",
"tags": "$:/tags/Filter",
"filter": "[haschanged[]]",
"description": "{{$:/language/Filters/SessionTiddlers}}",
"text": ""
},
"$:/core/Filters/ShadowTiddlers": {
"title": "$:/core/Filters/ShadowTiddlers",
"tags": "$:/tags/Filter",
"filter": "[all[shadows]sort[title]]",
"description": "{{$:/language/Filters/ShadowTiddlers}}",
"text": ""
},
"$:/core/Filters/StoryList": {
"title": "$:/core/Filters/StoryList",
"tags": "$:/tags/Filter",
"filter": "[list[$:/StoryList]] -$:/AdvancedSearch",
"description": "{{$:/language/Filters/StoryList}}",
"text": ""
},
"$:/core/Filters/SystemTags": {
"title": "$:/core/Filters/SystemTags",
"tags": "$:/tags/Filter",
"filter": "[all[shadows+tiddlers]tags[]is[system]sort[title]]",
"description": "{{$:/language/Filters/SystemTags}}",
"text": ""
},
"$:/core/Filters/SystemTiddlers": {
"title": "$:/core/Filters/SystemTiddlers",
"tags": "$:/tags/Filter",
"filter": "[is[system]sort[title]]",
"description": "{{$:/language/Filters/SystemTiddlers}}",
"text": ""
},
"$:/core/Filters/TypedTiddlers": {
"title": "$:/core/Filters/TypedTiddlers",
"tags": "$:/tags/Filter",
"filter": "[!is[system]has[type]each[type]sort[type]] -[type[text/vnd.tiddlywiki]]",
"description": "{{$:/language/Filters/TypedTiddlers}}",
"text": ""
},
"$:/core/ui/ImportListing": {
"title": "$:/core/ui/ImportListing",
"text": "\\define lingo-base() $:/language/Import/\n\n\\define messageField()\nmessage-$(payloadTiddler)$\n\\end\n\n\\define selectionField()\nselection-$(payloadTiddler)$\n\\end\n\n\\define previewPopupState()\n$(currentTiddler)$!!popup-$(payloadTiddler)$\n\\end\n\n\\define select-all-actions()\n<$list filter=\"[all[current]plugintiddlers[]sort[title]]\" variable=\"payloadTiddler\">\n<$action-setfield $field={{{ [<payloadTiddler>addprefix[selection-]] }}} $value={{$:/state/import/select-all}}/>\n</$list>\n\\end\n\n<table>\n<tbody>\n<tr>\n<th>\n<$checkbox tiddler=\"$:/state/import/select-all\" field=\"text\" checked=\"checked\" unchecked=\"unchecked\" default=\"checked\" actions=<<select-all-actions>>>\n<<lingo Listing/Select/Caption>>\n</$checkbox>\n</th>\n<th>\n<<lingo Listing/Title/Caption>>\n</th>\n<th>\n<<lingo Listing/Status/Caption>>\n</th>\n</tr>\n<$list filter=\"[all[current]plugintiddlers[]sort[title]]\" variable=\"payloadTiddler\">\n<tr>\n<td>\n<$checkbox field=<<selectionField>> checked=\"checked\" unchecked=\"unchecked\" default=\"checked\"/>\n</td>\n<td>\n<$reveal type=\"nomatch\" stateTitle=<<previewPopupState>> text=\"yes\" tag=\"div\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" setTitle=<<previewPopupState>> setTo=\"yes\">\n{{$:/core/images/right-arrow}} <$text text=<<payloadTiddler>>/>\n</$button>\n</$reveal>\n<$reveal type=\"match\" stateTitle=<<previewPopupState>> text=\"yes\" tag=\"div\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" setTitle=<<previewPopupState>> setTo=\"no\">\n{{$:/core/images/down-arrow}} <$text text=<<payloadTiddler>>/>\n</$button>\n</$reveal>\n</td>\n<td>\n<$view field=<<messageField>>/>\n</td>\n</tr>\n<tr>\n<td colspan=\"3\">\n<$reveal type=\"match\" text=\"yes\" stateTitle=<<previewPopupState>> tag=\"div\">\n<$list filter=\"[{$:/state/importpreviewtype}has[text]]\" variable=\"listItem\" emptyMessage={{$:/core/ui/ImportPreviews/Text}}>\n<$transclude tiddler={{$:/state/importpreviewtype}}/>\n</$list>\n</$reveal>\n</td>\n</tr>\n</$list>\n</tbody>\n</table>\n"
},
"$:/core/ui/ImportPreviews/Diff": {
"title": "$:/core/ui/ImportPreviews/Diff",
"tags": "$:/tags/ImportPreview",
"caption": "{{$:/language/Import/Listing/Preview/Diff}}",
"text": "<$macrocall $name=\"compareTiddlerText\" sourceTiddlerTitle=<<payloadTiddler>> destTiddlerTitle=<<currentTiddler>> destSubTiddlerTitle=<<payloadTiddler>>/>\n"
},
"$:/core/ui/ImportPreviews/DiffFields": {
"title": "$:/core/ui/ImportPreviews/DiffFields",
"tags": "$:/tags/ImportPreview",
"caption": "{{$:/language/Import/Listing/Preview/DiffFields}}",
"text": "<$macrocall $name=\"compareTiddlers\" sourceTiddlerTitle=<<payloadTiddler>> destTiddlerTitle=<<currentTiddler>> destSubTiddlerTitle=<<payloadTiddler>> exclude=\"text\"/>\n"
},
"$:/core/ui/ImportPreviews/Fields": {
"title": "$:/core/ui/ImportPreviews/Fields",
"tags": "$:/tags/ImportPreview",
"caption": "{{$:/language/Import/Listing/Preview/Fields}}",
"text": "<table class=\"tc-view-field-table\">\n<tbody>\n<$list filter=\"[<payloadTiddler>subtiddlerfields<currentTiddler>sort[]] -text\" variable=\"fieldName\">\n<tr class=\"tc-view-field\">\n<td class=\"tc-view-field-name\">\n<$text text=<<fieldName>>/>\n</td>\n<td class=\"tc-view-field-value\">\n<$view field=<<fieldName>> tiddler=<<currentTiddler>> subtiddler=<<payloadTiddler>>/>\n</td>\n</tr>\n</$list>\n</tbody>\n</table>\n"
},
"$:/core/ui/ImportPreviews/Text": {
"title": "$:/core/ui/ImportPreviews/Text",
"tags": "$:/tags/ImportPreview",
"caption": "{{$:/language/Import/Listing/Preview/Text}}",
"text": "<$transclude tiddler=<<currentTiddler>> subtiddler=<<payloadTiddler>> mode=\"block\"/>\n"
},
"$:/core/ui/ImportPreviews/TextRaw": {
"title": "$:/core/ui/ImportPreviews/TextRaw",
"tags": "$:/tags/ImportPreview",
"caption": "{{$:/language/Import/Listing/Preview/TextRaw}}",
"text": "<pre><code><$view tiddler=<<currentTiddler>> subtiddler=<<payloadTiddler>> /></code></pre>"
},
"$:/core/ui/KeyboardShortcuts/advanced-search": {
"title": "$:/core/ui/KeyboardShortcuts/advanced-search",
"tags": "$:/tags/KeyboardShortcut",
"key": "((advanced-search))",
"text": "<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\">\n<$action-navigate $to=\"$:/AdvancedSearch\"/>\n<$action-sendmessage $message=\"tm-focus-selector\" $param=\"\"\"[data-tiddler-title=\"$:/AdvancedSearch\"] .tc-search input\"\"\"/>\n</$navigator>\n"
},
"$:/core/ui/KeyboardShortcuts/new-image": {
"title": "$:/core/ui/KeyboardShortcuts/new-image",
"tags": "$:/tags/KeyboardShortcut",
"key": "((new-image))",
"text": "<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\" openLinkFromInsideRiver={{$:/config/Navigation/openLinkFromInsideRiver}} openLinkFromOutsideRiver={{$:/config/Navigation/openLinkFromOutsideRiver}} relinkOnRename={{$:/config/RelinkOnRename}}>\n{{$:/core/ui/Actions/new-image}}\n</$navigator>\n"
},
"$:/core/ui/KeyboardShortcuts/new-journal": {
"title": "$:/core/ui/KeyboardShortcuts/new-journal",
"tags": "$:/tags/KeyboardShortcut",
"key": "((new-journal))",
"text": "<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\" openLinkFromInsideRiver={{$:/config/Navigation/openLinkFromInsideRiver}} openLinkFromOutsideRiver={{$:/config/Navigation/openLinkFromOutsideRiver}} relinkOnRename={{$:/config/RelinkOnRename}}>\n{{$:/core/ui/Actions/new-journal}}\n</$navigator>\n"
},
"$:/core/ui/KeyboardShortcuts/new-tiddler": {
"title": "$:/core/ui/KeyboardShortcuts/new-tiddler",
"tags": "$:/tags/KeyboardShortcut",
"key": "((new-tiddler))",
"text": "<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\" openLinkFromInsideRiver={{$:/config/Navigation/openLinkFromInsideRiver}} openLinkFromOutsideRiver={{$:/config/Navigation/openLinkFromOutsideRiver}} relinkOnRename={{$:/config/RelinkOnRename}}>\n{{$:/core/ui/Actions/new-tiddler}}\n</$navigator>\n"
},
"$:/core/ui/KeyboardShortcuts/sidebar-search": {
"title": "$:/core/ui/KeyboardShortcuts/sidebar-search",
"tags": "$:/tags/KeyboardShortcut",
"key": "((sidebar-search))",
"text": "<$action-sendmessage $message=\"tm-focus-selector\" $param=\".tc-search input\"/>\n"
},
"$:/core/ui/KeyboardShortcut/toggle-sidebar": {
"title": "$:/core/ui/KeyboardShortcut/toggle-sidebar",
"tags": "$:/tags/KeyboardShortcut",
"key": "((toggle-sidebar))",
"text": "<$list filter=\"[[$:/state/sidebar]is[missing]] [{$:/state/sidebar}removeprefix[yes]]\" emptyMessage=\"\"\"\n<$action-setfield $tiddler=\"$:/state/sidebar\" text=\"yes\"/>\n\"\"\">\n<$action-setfield $tiddler=\"$:/state/sidebar\" text=\"no\"/>\n</$list>\n"
},
"$:/core/ui/ListItemTemplate": {
"title": "$:/core/ui/ListItemTemplate",
"text": "<div class=\"tc-menu-list-item\">\n<$link />\n</div>"
},
"$:/Manager/ItemMain/Fields": {
"title": "$:/Manager/ItemMain/Fields",
"tags": "$:/tags/Manager/ItemMain",
"caption": "{{$:/language/Manager/Item/Fields}}",
"text": "<table>\n<tbody>\n<$list filter=\"[all[current]fields[]sort[title]] -text\" template=\"$:/core/ui/TiddlerFieldTemplate\" variable=\"listItem\"/>\n</tbody>\n</table>\n"
},
"$:/Manager/ItemMain/RawText": {
"title": "$:/Manager/ItemMain/RawText",
"tags": "$:/tags/Manager/ItemMain",
"caption": "{{$:/language/Manager/Item/RawText}}",
"text": "<pre><code><$view/></code></pre>\n"
},
"$:/Manager/ItemMain/WikifiedText": {
"title": "$:/Manager/ItemMain/WikifiedText",
"tags": "$:/tags/Manager/ItemMain",
"caption": "{{$:/language/Manager/Item/WikifiedText}}",
"text": "<$transclude mode=\"block\"/>\n"
},
"$:/Manager/ItemSidebar/Colour": {
"title": "$:/Manager/ItemSidebar/Colour",
"tags": "$:/tags/Manager/ItemSidebar",
"caption": "{{$:/language/Manager/Item/Colour}}",
"text": "\\define swatch-styles()\nheight: 1em;\nbackground-color: $(colour)$\n\\end\n\n<$vars colour={{!!color}}>\n<p style=<<swatch-styles>>/>\n</$vars>\n<p>\n<$edit-text field=\"color\" tag=\"input\" type=\"color\"/> / <$edit-text field=\"color\" tag=\"input\" type=\"text\" size=\"9\"/>\n</p>\n"
},
"$:/Manager/ItemSidebar/Icon": {
"title": "$:/Manager/ItemSidebar/Icon",
"tags": "$:/tags/Manager/ItemSidebar",
"caption": "{{$:/language/Manager/Item/Icon}}",
"text": "<p>\n<div class=\"tc-manager-icon-editor\">\n<$button popup=<<qualify \"$:/state/popup/image-picker\">> class=\"tc-btn-invisible\">\n<$transclude tiddler={{!!icon}}>\n{{$:/language/Manager/Item/Icon/None}}\n</$transclude>\n</$button>\n<div class=\"tc-block-dropdown-wrapper\" style=\"position: static;\">\n<$reveal state=<<qualify \"$:/state/popup/image-picker\">> type=\"nomatch\" text=\"\" default=\"\" tag=\"div\" class=\"tc-popup\">\n<div class=\"tc-block-dropdown tc-popup-keep\" style=\"width: 80%; left: 10%; right: 10%; padding: 0.5em;\">\n<$macrocall $name=\"image-picker-include-tagged-images\" actions=\"\"\"\n<$action-setfield $field=\"icon\" $value=<<imageTitle>>/>\n<$action-deletetiddler $tiddler=<<qualify \"$:/state/popup/image-picker\">>/>\n\"\"\"/>\n</div>\n</$reveal>\n</div>\n</div>\n</p>\n"
},
"$:/Manager/ItemSidebar/Tags": {
"title": "$:/Manager/ItemSidebar/Tags",
"tags": "$:/tags/Manager/ItemSidebar",
"caption": "{{$:/language/Manager/Item/Tags}}",
"text": "\\define tag-checkbox-actions()\n<$action-listops\n\t$tiddler=\"$:/config/Manager/RecentTags\"\n\t$subfilter=\"[<tag>] [list[$:/config/Manager/RecentTags]] +[limit[12]]\"\n/>\n\\end\n\n\\define tag-picker-actions()\n<<tag-checkbox-actions>>\n<$action-listops\n\t$tiddler=<<currentTiddler>>\n\t$field=\"tags\"\n\t$subfilter=\"[<tag>] [all[current]tags[]]\"\n/>\n\\end\n\n<p>\n<$list filter=\"[all[current]tags[]] [list[$:/config/Manager/RecentTags]] +[sort[title]] \" variable=\"tag\">\n<div>\n<$checkbox tiddler=<<currentTiddler>> tag=<<tag>> actions=<<tag-checkbox-actions>>>\n<$macrocall $name=\"tag-pill\" tag=<<tag>>/>\n</$checkbox>\n</div>\n</$list>\n</p>\n<p>\n<$macrocall $name=\"tag-picker\" actions=<<tag-picker-actions>>/>\n</p>\n"
},
"$:/Manager/ItemSidebar/Tools": {
"title": "$:/Manager/ItemSidebar/Tools",
"tags": "$:/tags/Manager/ItemSidebar",
"caption": "{{$:/language/Manager/Item/Tools}}",
"text": "<p>\n<$button to=<<currentTiddler>>>{{$:/core/images/link}} open</$button>\n</p>\n<p>\n<$button message=\"tm-edit-tiddler\" param=<<currentTiddler>>>{{$:/core/images/edit-button}} edit</$button>\n</p>\n"
},
"$:/Manager": {
"title": "$:/Manager",
"icon": "$:/core/images/list",
"color": "#bbb",
"text": "\\define lingo-base() $:/language/Manager/\n\n\\define list-item-content-item()\n<div class=\"tc-manager-list-item-content-item\">\n\t<$vars state-title=\"\"\"$:/state/popup/manager/item/$(listItem)$\"\"\">\n\t\t<$reveal state=<<state-title>> type=\"match\" text=\"show\" default=\"show\" tag=\"div\">\n\t\t\t<$button set=<<state-title>> setTo=\"hide\" class=\"tc-btn-invisible tc-manager-list-item-content-item-heading\">\n\t\t\t\t{{$:/core/images/down-arrow}} <$transclude tiddler=<<listItem>> field=\"caption\"/>\n\t\t\t</$button>\n\t\t</$reveal>\n\t\t<$reveal state=<<state-title>> type=\"nomatch\" text=\"show\" default=\"show\" tag=\"div\">\n\t\t\t<$button set=<<state-title>> setTo=\"show\" class=\"tc-btn-invisible tc-manager-list-item-content-item-heading\">\n\t\t\t\t{{$:/core/images/right-arrow}} <$transclude tiddler=<<listItem>> field=\"caption\"/>\n\t\t\t</$button>\n\t\t</$reveal>\n\t\t<$reveal state=<<state-title>> type=\"match\" text=\"show\" default=\"show\" tag=\"div\" class=\"tc-manager-list-item-content-item-body\">\n\t\t\t<$transclude tiddler=<<listItem>>/>\n\t\t</$reveal>\n\t</$vars>\n</div>\n\\end\n\n<div class=\"tc-manager-wrapper\">\n\t<div class=\"tc-manager-controls\">\n\t\t<div class=\"tc-manager-control\">\n\t\t\t<<lingo Controls/Show/Prompt>> <$select tiddler=\"$:/config/Manager/Show\" default=\"tiddlers\">\n\t\t\t\t<option value=\"tiddlers\"><<lingo Controls/Show/Option/Tiddlers>></option>\n\t\t\t\t<option value=\"tags\"><<lingo Controls/Show/Option/Tags>></option>\n\t\t\t</$select>\n\t\t</div>\n\t\t<div class=\"tc-manager-control\">\n\t\t\t<<lingo Controls/Search/Prompt>> <$edit-text tiddler=\"$:/config/Manager/Filter\" tag=\"input\" default=\"\" placeholder={{$:/language/Manager/Controls/Search/Placeholder}}/>\n\t\t</div>\n\t\t<div class=\"tc-manager-control\">\n\t\t\t<<lingo Controls/FilterByTag/Prompt>> <$select tiddler=\"$:/config/Manager/Tag\" default=\"\">\n\t\t\t\t<option value=\"\"><<lingo Controls/FilterByTag/None>></option>\n\t\t\t\t<$list filter=\"[!is{$:/config/Manager/System}tags[]!is[system]sort[title]]\" variable=\"tag\">\n\t\t\t\t\t<option value=<<tag>>><$text text=<<tag>>/></option>\n\t\t\t\t</$list>\n\t\t\t</$select>\n\t\t</div>\n\t\t<div class=\"tc-manager-control\">\n\t\t\t<<lingo Controls/Sort/Prompt>> <$select tiddler=\"$:/config/Manager/Sort\" default=\"title\">\n\t\t\t\t<optgroup label=\"Common\">\n\t\t\t\t\t<$list filter=\"title modified modifier created creator created\" variable=\"field\">\n\t\t\t\t\t\t<option value=<<field>>><$text text=<<field>>/></option>\n\t\t\t\t\t</$list>\n\t\t\t\t</optgroup>\n\t\t\t\t<optgroup label=\"All\">\n\t\t\t\t\t<$list filter=\"[all{$:/config/Manager/Show}!is{$:/config/Manager/System}fields[]sort[title]] -title -modified -modifier -created -creator -created\" variable=\"field\">\n\t\t\t\t\t\t<option value=<<field>>><$text text=<<field>>/></option>\n\t\t\t\t\t</$list>\n\t\t\t\t</optgroup>\n\t\t\t</$select>\n\t\t\t<$checkbox tiddler=\"$:/config/Manager/Order\" field=\"text\" checked=\"reverse\" unchecked=\"forward\" default=\"forward\">\n\t\t\t\t<<lingo Controls/Order/Prompt>>\n\t\t\t</$checkbox>\n\t\t</div>\n\t\t<div class=\"tc-manager-control\">\n\t\t\t<$checkbox tiddler=\"$:/config/Manager/System\" field=\"text\" checked=\"\" unchecked=\"system\" default=\"system\">\n\t\t\t\t{{$:/language/SystemTiddlers/Include/Prompt}}\n\t\t\t</$checkbox>\n\t\t</div>\n\t</div>\n\t<div class=\"tc-manager-list\">\n\t\t<$list filter=\"[all{$:/config/Manager/Show}!is{$:/config/Manager/System}search{$:/config/Manager/Filter}tag:strict{$:/config/Manager/Tag}sort{$:/config/Manager/Sort}order{$:/config/Manager/Order}]\">\n\t\t\t<$vars transclusion=<<currentTiddler>>>\n\t\t\t\t<div style=\"tc-manager-list-item\">\n\t\t\t\t\t<$button popup=<<qualify \"$:/state/manager/popup\">> class=\"tc-btn-invisible tc-manager-list-item-heading\" selectedClass=\"tc-manager-list-item-heading-selected\">\n\t\t\t\t\t\t<$text text=<<currentTiddler>>/>\n\t\t\t\t\t</$button>\n\t\t\t\t\t<$reveal state=<<qualify \"$:/state/manager/popup\">> type=\"nomatch\" text=\"\" default=\"\" tag=\"div\" class=\"tc-manager-list-item-content tc-popup-handle\">\n\t\t\t\t\t\t<div class=\"tc-manager-list-item-content-tiddler\">\n\t\t\t\t\t\t\t<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Manager/ItemMain]!has[draft.of]]\" variable=\"listItem\">\n\t\t\t\t\t\t\t\t<<list-item-content-item>>\n\t\t\t\t\t\t\t</$list>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"tc-manager-list-item-content-sidebar\">\n\t\t\t\t\t\t\t<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Manager/ItemSidebar]!has[draft.of]]\" variable=\"listItem\">\n\t\t\t\t\t\t\t\t<<list-item-content-item>>\n\t\t\t\t\t\t\t</$list>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</$reveal>\n\t\t\t\t</div>\n\t\t\t</$vars>\n\t\t</$list>\n\t</div>\n</div>\n"
},
"$:/core/ui/MissingTemplate": {
"title": "$:/core/ui/MissingTemplate",
"text": "<div class=\"tc-tiddler-missing\">\n<$button popup=<<qualify \"$:/state/popup/missing\">> class=\"tc-btn-invisible tc-missing-tiddler-label\">\n<$view field=\"title\" format=\"text\" />\n</$button>\n<$reveal state=<<qualify \"$:/state/popup/missing\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n<$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n<hr>\n<$list filter=\"[all[current]backlinks[]sort[title]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n</div>\n</$reveal>\n</div>\n"
},
"$:/core/ui/MoreSideBar/All": {
"title": "$:/core/ui/MoreSideBar/All",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/All/Caption}}",
"text": "<$list filter={{$:/core/Filters/AllTiddlers!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/MoreSideBar/Drafts": {
"title": "$:/core/ui/MoreSideBar/Drafts",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Drafts/Caption}}",
"text": "<$list filter={{$:/core/Filters/Drafts!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/MoreSideBar/Explorer": {
"title": "$:/core/ui/MoreSideBar/Explorer",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Explorer/Caption}}",
"text": "<<tree \"$:/\">>\n"
},
"$:/core/ui/MoreSideBar/Missing": {
"title": "$:/core/ui/MoreSideBar/Missing",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Missing/Caption}}",
"text": "<$list filter={{$:/core/Filters/Missing!!filter}} template=\"$:/core/ui/MissingTemplate\"/>\n"
},
"$:/core/ui/MoreSideBar/Orphans": {
"title": "$:/core/ui/MoreSideBar/Orphans",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Orphans/Caption}}",
"text": "<$list filter={{$:/core/Filters/Orphans!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/MoreSideBar/Plugins": {
"title": "$:/core/ui/MoreSideBar/Plugins",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/ControlPanel/Plugins/Caption}}",
"text": "\n{{$:/language/ControlPanel/Plugins/Installed/Hint}}\n\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/MoreSideBar/Plugins]!has[draft.of]]\" \"$:/core/ui/MoreSideBar/Plugins/Plugins\">>\n"
},
"$:/core/ui/MoreSideBar/Recent": {
"title": "$:/core/ui/MoreSideBar/Recent",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Recent/Caption}}",
"text": "<$macrocall $name=\"timeline\" format={{$:/language/RecentChanges/DateFormat}}/>\n"
},
"$:/core/ui/MoreSideBar/Shadows": {
"title": "$:/core/ui/MoreSideBar/Shadows",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Shadows/Caption}}",
"text": "<$list filter={{$:/core/Filters/ShadowTiddlers!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/MoreSideBar/System": {
"title": "$:/core/ui/MoreSideBar/System",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/System/Caption}}",
"text": "<$list filter={{$:/core/Filters/SystemTiddlers!!filter}} template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/MoreSideBar/Tags": {
"title": "$:/core/ui/MoreSideBar/Tags",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Tags/Caption}}",
"text": "<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n{{$:/core/ui/Buttons/tag-manager}}\n\n</$set>\n\n</$set>\n\n</$set>\n\n<$list filter={{$:/core/Filters/AllTags!!filter}}>\n\n<$transclude tiddler=\"$:/core/ui/TagTemplate\"/>\n\n</$list>\n\n<hr class=\"tc-untagged-separator\">\n\n{{$:/core/ui/UntaggedTemplate}}\n"
},
"$:/core/ui/MoreSideBar/Types": {
"title": "$:/core/ui/MoreSideBar/Types",
"tags": "$:/tags/MoreSideBar",
"caption": "{{$:/language/SideBar/Types/Caption}}",
"text": "<$list filter={{$:/core/Filters/TypedTiddlers!!filter}}>\n<div class=\"tc-menu-list-item\">\n<$view field=\"type\"/>\n<$list filter=\"[type{!!type}!is[system]sort[title]]\">\n<div class=\"tc-menu-list-subitem\">\n<$link to={{!!title}}><$view field=\"title\"/></$link>\n</div>\n</$list>\n</div>\n</$list>\n"
},
"$:/core/ui/MoreSideBar/Plugins/Languages": {
"title": "$:/core/ui/MoreSideBar/Plugins/Languages",
"tags": "$:/tags/MoreSideBar/Plugins",
"caption": "{{$:/language/ControlPanel/Plugins/Languages/Caption}}",
"text": "<$list filter=\"[!has[draft.of]plugin-type[language]sort[description]]\" template=\"$:/core/ui/PluginListItemTemplate\" emptyMessage={{$:/language/ControlPanel/Plugins/Empty/Hint}}/>\n"
},
"$:/core/ui/MoreSideBar/Plugins/Plugins": {
"title": "$:/core/ui/MoreSideBar/Plugins/Plugins",
"tags": "$:/tags/MoreSideBar/Plugins",
"caption": "{{$:/language/ControlPanel/Plugins/Plugins/Caption}}",
"text": "<$list filter=\"[!has[draft.of]plugin-type[plugin]sort[description]]\" template=\"$:/core/ui/PluginListItemTemplate\" emptyMessage={{$:/language/ControlPanel/Plugins/Empty/Hint}}>>/>\n"
},
"$:/core/ui/MoreSideBar/Plugins/Theme": {
"title": "$:/core/ui/MoreSideBar/Plugins/Theme",
"tags": "$:/tags/MoreSideBar/Plugins",
"caption": "{{$:/language/ControlPanel/Plugins/Themes/Caption}}",
"text": "<$list filter=\"[!has[draft.of]plugin-type[theme]sort[description]]\" template=\"$:/core/ui/PluginListItemTemplate\" emptyMessage={{$:/language/ControlPanel/Plugins/Empty/Hint}}/>\n"
},
"$:/core/ui/Buttons/advanced-search": {
"title": "$:/core/ui/Buttons/advanced-search",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/advanced-search-button}} {{$:/language/Buttons/AdvancedSearch/Caption}}",
"description": "{{$:/language/Buttons/AdvancedSearch/Hint}}",
"text": "\\whitespace trim\n\\define control-panel-button(class)\n<$button to=\"$:/AdvancedSearch\" tooltip={{$:/language/Buttons/AdvancedSearch/Hint}} aria-label={{$:/language/Buttons/AdvancedSearch/Caption}} class=\"\"\"$(tv-config-toolbar-class)$ $class$\"\"\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/advanced-search-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/AdvancedSearch/Caption}}/></span>\n</$list>\n</$button>\n\\end\n\n<$list filter=\"[list[$:/StoryList]] +[field:title[$:/AdvancedSearch]]\" emptyMessage=<<control-panel-button>>>\n<<control-panel-button \"tc-selected\">>\n</$list>\n"
},
"$:/core/ui/Buttons/close-all": {
"title": "$:/core/ui/Buttons/close-all",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/close-all-button}} {{$:/language/Buttons/CloseAll/Caption}}",
"description": "{{$:/language/Buttons/CloseAll/Hint}}",
"text": "<$button message=\"tm-close-all-tiddlers\" tooltip={{$:/language/Buttons/CloseAll/Hint}} aria-label={{$:/language/Buttons/CloseAll/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/close-all-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/CloseAll/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/control-panel": {
"title": "$:/core/ui/Buttons/control-panel",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/options-button}} {{$:/language/Buttons/ControlPanel/Caption}}",
"description": "{{$:/language/Buttons/ControlPanel/Hint}}",
"text": "\\whitespace trim\n\\define control-panel-button(class)\n<$button to=\"$:/ControlPanel\" tooltip={{$:/language/Buttons/ControlPanel/Hint}} aria-label={{$:/language/Buttons/ControlPanel/Caption}} class=\"\"\"$(tv-config-toolbar-class)$ $class$\"\"\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/options-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/ControlPanel/Caption}}/></span>\n</$list>\n</$button>\n\\end\n\n<$list filter=\"[list[$:/StoryList]] +[field:title[$:/ControlPanel]]\" emptyMessage=<<control-panel-button>>>\n<<control-panel-button \"tc-selected\">>\n</$list>\n"
},
"$:/core/ui/Buttons/encryption": {
"title": "$:/core/ui/Buttons/encryption",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/locked-padlock}} {{$:/language/Buttons/Encryption/Caption}}",
"description": "{{$:/language/Buttons/Encryption/Hint}}",
"text": "\\whitespace trim\n<$reveal type=\"match\" state=\"$:/isEncrypted\" text=\"yes\">\n<$button message=\"tm-clear-password\" tooltip={{$:/language/Buttons/Encryption/ClearPassword/Hint}} aria-label={{$:/language/Buttons/Encryption/ClearPassword/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/locked-padlock}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Encryption/ClearPassword/Caption}}/></span>\n</$list>\n</$button>\n</$reveal>\n<$reveal type=\"nomatch\" state=\"$:/isEncrypted\" text=\"yes\">\n<$button message=\"tm-set-password\" tooltip={{$:/language/Buttons/Encryption/SetPassword/Hint}} aria-label={{$:/language/Buttons/Encryption/SetPassword/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/unlocked-padlock}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Encryption/SetPassword/Caption}}/></span>\n</$list>\n</$button>\n</$reveal>\n"
},
"$:/core/ui/Buttons/export-page": {
"title": "$:/core/ui/Buttons/export-page",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/export-button}} {{$:/language/Buttons/ExportPage/Caption}}",
"description": "{{$:/language/Buttons/ExportPage/Hint}}",
"text": "<$macrocall $name=\"exportButton\" exportFilter=\"[!is[system]sort[title]]\" lingoBase=\"$:/language/Buttons/ExportPage/\"/>"
},
"$:/core/ui/Buttons/fold-all": {
"title": "$:/core/ui/Buttons/fold-all",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/fold-all-button}} {{$:/language/Buttons/FoldAll/Caption}}",
"description": "{{$:/language/Buttons/FoldAll/Hint}}",
"text": "<$button tooltip={{$:/language/Buttons/FoldAll/Hint}} aria-label={{$:/language/Buttons/FoldAll/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-fold-all-tiddlers\" $param=<<currentTiddler>> foldedStatePrefix=\"$:/state/folded/\"/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\" variable=\"listItem\">\n{{$:/core/images/fold-all-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/FoldAll/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/full-screen": {
"title": "$:/core/ui/Buttons/full-screen",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/full-screen-button}} {{$:/language/Buttons/FullScreen/Caption}}",
"description": "{{$:/language/Buttons/FullScreen/Hint}}",
"text": "<$button message=\"tm-full-screen\" tooltip={{$:/language/Buttons/FullScreen/Hint}} aria-label={{$:/language/Buttons/FullScreen/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/full-screen-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/FullScreen/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/home": {
"title": "$:/core/ui/Buttons/home",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/home-button}} {{$:/language/Buttons/Home/Caption}}",
"description": "{{$:/language/Buttons/Home/Hint}}",
"text": "<$button message=\"tm-home\" tooltip={{$:/language/Buttons/Home/Hint}} aria-label={{$:/language/Buttons/Home/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/home-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Home/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/import": {
"title": "$:/core/ui/Buttons/import",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/import-button}} {{$:/language/Buttons/Import/Caption}}",
"description": "{{$:/language/Buttons/Import/Hint}}",
"text": "<div class=\"tc-file-input-wrapper\">\n<$button tooltip={{$:/language/Buttons/Import/Hint}} aria-label={{$:/language/Buttons/Import/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/import-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Import/Caption}}/></span>\n</$list>\n</$button>\n<$browse tooltip={{$:/language/Buttons/Import/Hint}}/>\n</div>"
},
"$:/core/ui/Buttons/language": {
"title": "$:/core/ui/Buttons/language",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/globe}} {{$:/language/Buttons/Language/Caption}}",
"description": "{{$:/language/Buttons/Language/Hint}}",
"text": "\\whitespace trim\n\\define flag-title()\n$(languagePluginTitle)$/icon\n\\end\n<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/popup/language\">> tooltip={{$:/language/Buttons/Language/Hint}} aria-label={{$:/language/Buttons/Language/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n<span class=\"tc-image-button\">\n<$set name=\"languagePluginTitle\" value={{$:/language}}>\n<$image source=<<flag-title>>/>\n</$set>\n</span>\n</$list>\n<$text text=\" \"/>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Language/Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/language\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n{{$:/snippets/languageswitcher}}\n</div>\n</$reveal>\n"
},
"$:/core/ui/Buttons/manager": {
"title": "$:/core/ui/Buttons/manager",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/list}} {{$:/language/Buttons/Manager/Caption}}",
"description": "{{$:/language/Buttons/Manager/Hint}}",
"text": "\\whitespace trim\n\\define manager-button(class)\n<$button to=\"$:/Manager\" tooltip={{$:/language/Buttons/Manager/Hint}} aria-label={{$:/language/Buttons/Manager/Caption}} class=\"\"\"$(tv-config-toolbar-class)$ $class$\"\"\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/list}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Manager/Caption}}/></span>\n</$list>\n</$button>\n\\end\n\n<$list filter=\"[list[$:/StoryList]] +[field:title[$:/Manager]]\" emptyMessage=<<manager-button>>>\n<<manager-button \"tc-selected\">>\n</$list>\n"
},
"$:/core/ui/Buttons/more-page-actions": {
"title": "$:/core/ui/Buttons/more-page-actions",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/down-arrow}} {{$:/language/Buttons/More/Caption}}",
"description": "{{$:/language/Buttons/More/Hint}}",
"text": "\\define config-title()\n$:/config/PageControlButtons/Visibility/$(listItem)$\n\\end\n<$button popup=<<qualify \"$:/state/popup/more\">> tooltip={{$:/language/Buttons/More/Hint}} aria-label={{$:/language/Buttons/More/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/down-arrow}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/More/Caption}}/></span>\n</$list>\n</$button><$reveal state=<<qualify \"$:/state/popup/more\">> type=\"popup\" position=\"below\" animate=\"yes\">\n\n<div class=\"tc-drop-down\">\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"tc-btn-invisible\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]] -[[$:/core/ui/Buttons/more-page-actions]]\" variable=\"listItem\">\n\n<$reveal type=\"match\" state=<<config-title>> text=\"hide\">\n\n<$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$set>\n\n</$reveal>\n\n</$list>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</div>\n\n</$reveal>"
},
"$:/core/ui/Buttons/new-image": {
"title": "$:/core/ui/Buttons/new-image",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/new-image-button}} {{$:/language/Buttons/NewImage/Caption}}",
"description": "{{$:/language/Buttons/NewImage/Hint}}",
"text": "\\whitespace trim\n<$button tooltip={{$:/language/Buttons/NewImage/Hint}} aria-label={{$:/language/Buttons/NewImage/Caption}} class=<<tv-config-toolbar-class>> actions={{$:/core/ui/Actions/new-image}}>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/new-image-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/NewImage/Caption}}/></span>\n</$list>\n</$button>\n"
},
"$:/core/ui/Buttons/new-journal": {
"title": "$:/core/ui/Buttons/new-journal",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/new-journal-button}} {{$:/language/Buttons/NewJournal/Caption}}",
"description": "{{$:/language/Buttons/NewJournal/Hint}}",
"text": "\\whitespace trim\n\\define journalButton()\n<$button tooltip={{$:/language/Buttons/NewJournal/Hint}} aria-label={{$:/language/Buttons/NewJournal/Caption}} class=<<tv-config-toolbar-class>> actions={{$:/core/ui/Actions/new-journal}}>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/new-journal-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/NewJournal/Caption}}/></span>\n</$list>\n</$button>\n\\end\n<<journalButton>>\n"
},
"$:/core/ui/Buttons/new-tiddler": {
"title": "$:/core/ui/Buttons/new-tiddler",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/new-button}} {{$:/language/Buttons/NewTiddler/Caption}}",
"description": "{{$:/language/Buttons/NewTiddler/Hint}}",
"text": "\\whitespace trim\n<$button actions={{$:/core/ui/Actions/new-tiddler}} tooltip={{$:/language/Buttons/NewTiddler/Hint}} aria-label={{$:/language/Buttons/NewTiddler/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/new-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/NewTiddler/Caption}}/></span>\n</$list>\n</$button>\n"
},
"$:/core/ui/Buttons/palette": {
"title": "$:/core/ui/Buttons/palette",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/palette}} {{$:/language/Buttons/Palette/Caption}}",
"description": "{{$:/language/Buttons/Palette/Hint}}",
"text": "\\whitespace trim\n<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/popup/palette\">> tooltip={{$:/language/Buttons/Palette/Hint}} aria-label={{$:/language/Buttons/Palette/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/palette}}\n</$list>\n<$text text=\" \"/>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Palette/Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/palette\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\" style=\"font-size:0.7em;\">\n{{$:/snippets/paletteswitcher}}\n</div>\n</$reveal>\n"
},
"$:/core/ui/Buttons/print": {
"title": "$:/core/ui/Buttons/print",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/print-button}} {{$:/language/Buttons/Print/Caption}}",
"description": "{{$:/language/Buttons/Print/Hint}}",
"text": "<$button message=\"tm-print\" tooltip={{$:/language/Buttons/Print/Hint}} aria-label={{$:/language/Buttons/Print/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/print-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Print/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/refresh": {
"title": "$:/core/ui/Buttons/refresh",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/refresh-button}} {{$:/language/Buttons/Refresh/Caption}}",
"description": "{{$:/language/Buttons/Refresh/Hint}}",
"text": "<$button message=\"tm-browser-refresh\" tooltip={{$:/language/Buttons/Refresh/Hint}} aria-label={{$:/language/Buttons/Refresh/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/refresh-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Refresh/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/save-wiki": {
"title": "$:/core/ui/Buttons/save-wiki",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/save-button}} {{$:/language/Buttons/SaveWiki/Caption}}",
"description": "{{$:/language/Buttons/SaveWiki/Hint}}",
"text": "<$button tooltip={{$:/language/Buttons/SaveWiki/Hint}} aria-label={{$:/language/Buttons/SaveWiki/Caption}} class=<<tv-config-toolbar-class>>>\n<$wikify name=\"site-title\" text={{$:/config/SaveWikiButton/Filename}}>\n<$action-sendmessage $message=\"tm-save-wiki\" $param={{$:/config/SaveWikiButton/Template}} filename=<<site-title>>/>\n</$wikify>\n<span class=\"tc-dirty-indicator\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/save-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/SaveWiki/Caption}}/></span>\n</$list>\n</span>\n</$button>"
},
"$:/core/ui/Buttons/storyview": {
"title": "$:/core/ui/Buttons/storyview",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/storyview-classic}} {{$:/language/Buttons/StoryView/Caption}}",
"description": "{{$:/language/Buttons/StoryView/Hint}}",
"text": "\\whitespace trim\n\\define icon()\n$:/core/images/storyview-$(storyview)$\n\\end\n<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/popup/storyview\">> tooltip={{$:/language/Buttons/StoryView/Hint}} aria-label={{$:/language/Buttons/StoryView/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n<$set name=\"storyview\" value={{$:/view}}>\n<$transclude tiddler=<<icon>>/>\n</$set>\n</$list>\n<$text text=\" \"/>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/StoryView/Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/storyview\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n{{$:/snippets/viewswitcher}}\n</div>\n</$reveal>\n"
},
"$:/core/ui/Buttons/tag-manager": {
"title": "$:/core/ui/Buttons/tag-manager",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/tag-button}} {{$:/language/Buttons/TagManager/Caption}}",
"description": "{{$:/language/Buttons/TagManager/Hint}}",
"text": "\\whitespace trim\n\\define control-panel-button(class)\n<$button to=\"$:/TagManager\" tooltip={{$:/language/Buttons/TagManager/Hint}} aria-label={{$:/language/Buttons/TagManager/Caption}} class=\"\"\"$(tv-config-toolbar-class)$ $class$\"\"\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/tag-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/TagManager/Caption}}/></span>\n</$list>\n</$button>\n\\end\n\n<$list filter=\"[list[$:/StoryList]] +[field:title[$:/TagManager]]\" emptyMessage=<<control-panel-button>>>\n<<control-panel-button \"tc-selected\">>\n</$list>\n"
},
"$:/core/ui/Buttons/theme": {
"title": "$:/core/ui/Buttons/theme",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/theme-button}} {{$:/language/Buttons/Theme/Caption}}",
"description": "{{$:/language/Buttons/Theme/Hint}}",
"text": "\\whitespace trim\n<span class=\"tc-popup-keep\">\n<$button popup=<<qualify \"$:/state/popup/theme\">> tooltip={{$:/language/Buttons/Theme/Hint}} aria-label={{$:/language/Buttons/Theme/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/theme-button}}\n</$list>\n<$text text=\" \"/>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Theme/Caption}}/></span>\n</$list>\n</$button>\n</span>\n<$reveal state=<<qualify \"$:/state/popup/theme\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n<$linkcatcher to=\"$:/theme\">\n{{$:/snippets/themeswitcher}}\n</$linkcatcher>\n</div>\n</$reveal>\n"
},
"$:/core/ui/Buttons/timestamp": {
"title": "$:/core/ui/Buttons/timestamp",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/timestamp-on}} {{$:/language/Buttons/Timestamp/Caption}}",
"description": "{{$:/language/Buttons/Timestamp/Hint}}",
"text": "\\whitespace trim\n<$reveal type=\"nomatch\" state=\"$:/config/TimestampDisable\" text=\"yes\">\n<$button tooltip={{$:/language/Buttons/Timestamp/On/Hint}} aria-label={{$:/language/Buttons/Timestamp/On/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-setfield $tiddler=\"$:/config/TimestampDisable\" $value=\"yes\"/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/timestamp-on}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Timestamp/On/Caption}}/></span>\n</$list>\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=\"$:/config/TimestampDisable\" text=\"yes\">\n<$button tooltip={{$:/language/Buttons/Timestamp/Off/Hint}} aria-label={{$:/language/Buttons/Timestamp/Off/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-setfield $tiddler=\"$:/config/TimestampDisable\" $value=\"no\"/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/timestamp-off}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Timestamp/Off/Caption}}/></span>\n</$list>\n</$button>\n</$reveal>\n"
},
"$:/core/ui/Buttons/unfold-all": {
"title": "$:/core/ui/Buttons/unfold-all",
"tags": "$:/tags/PageControls",
"caption": "{{$:/core/images/unfold-all-button}} {{$:/language/Buttons/UnfoldAll/Caption}}",
"description": "{{$:/language/Buttons/UnfoldAll/Hint}}",
"text": "<$button tooltip={{$:/language/Buttons/UnfoldAll/Hint}} aria-label={{$:/language/Buttons/UnfoldAll/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-unfold-all-tiddlers\" $param=<<currentTiddler>> foldedStatePrefix=\"$:/state/folded/\"/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\" variable=\"listItem\">\n{{$:/core/images/unfold-all-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/UnfoldAll/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/PageTemplate/pagecontrols": {
"title": "$:/core/ui/PageTemplate/pagecontrols",
"text": "\\whitespace trim\n\\define config-title()\n$:/config/PageControlButtons/Visibility/$(listItem)$\n\\end\n<div class=\"tc-page-controls\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]\" variable=\"listItem\">\n<$set name=\"hidden\" value=<<config-title>>>\n<$list filter=\"[<hidden>!text[hide]]\" storyview=\"pop\" variable=\"ignore\">\n<$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\">\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n</$set>\n</$list>\n</$set>\n</$list>\n</div>\n"
},
"$:/core/ui/PageStylesheet": {
"title": "$:/core/ui/PageStylesheet",
"text": "\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\n<$set name=\"currentTiddler\" value={{$:/language}}>\n\n<$set name=\"languageTitle\" value={{!!name}}>\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Stylesheet]!has[draft.of]]\">\n<$transclude mode=\"block\"/>\n</$list>\n\n</$set>\n\n</$set>\n"
},
"$:/core/ui/PageTemplate/alerts": {
"title": "$:/core/ui/PageTemplate/alerts",
"tags": "$:/tags/PageTemplate",
"text": "<div class=\"tc-alerts\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Alert]!has[draft.of]]\" template=\"$:/core/ui/AlertTemplate\" storyview=\"pop\"/>\n\n</div>\n"
},
"$:/core/ui/PageTemplate/drafts": {
"title": "$:/core/ui/PageTemplate/drafts",
"tags": "$:/tags/PageTemplate",
"text": "\\whitespace trim\n<$reveal state=\"$:/status/IsReadOnly\" type=\"nomatch\" text=\"yes\" tag=\"div\" class=\"tc-drafts-list\">\n<$list filter=\"[has[draft.of]!sort[modified]] -[list[$:/StoryList]]\">\n<$link>\n{{$:/core/images/edit-button}} <$text text=<<currentTiddler>>/>\n</$link>\n</$list>\n</$reveal>\n"
},
"$:/core/ui/PageTemplate/pluginreloadwarning": {
"title": "$:/core/ui/PageTemplate/pluginreloadwarning",
"tags": "$:/tags/PageTemplate",
"text": "\\define lingo-base() $:/language/\n\n<$list filter=\"[{$:/status/RequireReloadDueToPluginChange}match[yes]]\">\n\n<$reveal type=\"nomatch\" state=\"$:/temp/HidePluginWarning\" text=\"yes\">\n\n<div class=\"tc-plugin-reload-warning\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n<<lingo PluginReloadWarning>> <$button set=\"$:/temp/HidePluginWarning\" setTo=\"yes\" class=\"tc-btn-invisible\">{{$:/core/images/close-button}}</$button>\n\n</$set>\n\n</div>\n\n</$reveal>\n\n</$list>\n"
},
"$:/core/ui/PageTemplate/sidebar": {
"title": "$:/core/ui/PageTemplate/sidebar",
"tags": "$:/tags/PageTemplate",
"text": "\\whitespace trim\n\\define config-title()\n$:/config/SideBarSegments/Visibility/$(listItem)$\n\\end\n\n<$scrollable fallthrough=\"no\" class=\"tc-sidebar-scrollable\">\n\n<div class=\"tc-sidebar-header\">\n\n<$reveal state=\"$:/state/sidebar\" type=\"match\" text=\"yes\" default=\"yes\" retain=\"yes\" animate=\"yes\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SideBarSegment]!has[draft.of]]\" variable=\"listItem\">\n\n<$reveal type=\"nomatch\" state=<<config-title>> text=\"hide\" tag=\"div\">\n\n<$transclude tiddler=<<listItem>> mode=\"block\"/>\n\n</$reveal>\n\n</$list>\n\n</$reveal>\n\n</div>\n\n</$scrollable>\n"
},
"$:/core/ui/PageTemplate/story": {
"title": "$:/core/ui/PageTemplate/story",
"tags": "$:/tags/PageTemplate",
"text": "\\whitespace trim\n<section class=\"tc-story-river\">\n\n<section class=\"story-backdrop\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/AboveStory]!has[draft.of]]\">\n\n<$transclude/>\n\n</$list>\n\n</section>\n\n<$list filter=\"[list[$:/StoryList]]\" history=\"$:/HistoryList\" template={{$:/config/ui/ViewTemplate}} editTemplate={{$:/config/ui/EditTemplate}} storyview={{$:/view}} emptyMessage={{$:/config/EmptyStoryMessage}}/>\n\n<section class=\"story-frontdrop\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/BelowStory]!has[draft.of]]\">\n\n<$transclude/>\n\n</$list>\n\n</section>\n\n</section>\n"
},
"$:/core/ui/PageTemplate/topleftbar": {
"title": "$:/core/ui/PageTemplate/topleftbar",
"tags": "$:/tags/PageTemplate",
"text": "<span class=\"tc-topbar tc-topbar-left\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TopLeftBar]!has[draft.of]]\" variable=\"listItem\" storyview=\"pop\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$list>\n\n</span>\n"
},
"$:/core/ui/PageTemplate/toprightbar": {
"title": "$:/core/ui/PageTemplate/toprightbar",
"tags": "$:/tags/PageTemplate",
"text": "<span class=\"tc-topbar tc-topbar-right\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TopRightBar]!has[draft.of]]\" variable=\"listItem\" storyview=\"pop\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$list>\n\n</span>\n"
},
"$:/core/ui/PageTemplate": {
"title": "$:/core/ui/PageTemplate",
"text": "\\whitespace trim\n\\define containerClasses()\ntc-page-container tc-page-view-$(storyviewTitle)$ tc-language-$(languageTitle)$\n\\end\n\\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\n\n<$set name=\"tv-config-toolbar-icons\" value={{$:/config/Toolbar/Icons}}>\n\n<$set name=\"tv-config-toolbar-text\" value={{$:/config/Toolbar/Text}}>\n\n<$set name=\"tv-config-toolbar-class\" value={{$:/config/Toolbar/ButtonClass}}>\n\n<$set name=\"tv-enable-drag-and-drop\" value={{$:/config/DragAndDrop/Enable}}>\n\n<$set name=\"tv-show-missing-links\" value={{$:/config/MissingLinks}}>\n\n<$set name=\"storyviewTitle\" value={{$:/view}}>\n\n<$set name=\"languageTitle\" value={{{ [{$:/language}get[name]] }}}>\n\n<div class=<<containerClasses>>>\n\n<$navigator story=\"$:/StoryList\" history=\"$:/HistoryList\" openLinkFromInsideRiver={{$:/config/Navigation/openLinkFromInsideRiver}} openLinkFromOutsideRiver={{$:/config/Navigation/openLinkFromOutsideRiver}} relinkOnRename={{$:/config/RelinkOnRename}}>\n\n<$dropzone enable=<<tv-enable-drag-and-drop>>>\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageTemplate]!has[draft.of]]\" variable=\"listItem\">\n\n<$transclude tiddler=<<listItem>>/>\n\n</$list>\n\n</$dropzone>\n\n</$navigator>\n\n</div>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</$set>\n"
},
"$:/PaletteManager": {
"title": "$:/PaletteManager",
"text": "\\define lingo-base() $:/language/ControlPanel/Palette/Editor/\n\\define describePaletteColour(colour)\n<$transclude tiddler=\"$:/language/Docs/PaletteColours/$colour$\"><$text text=\"$colour$\"/></$transclude>\n\\end\n\\define edit-colour-placeholder()\n edit $(colourName)$\n\\end\n\\define colour-tooltip(showhide) $showhide$ editor for $(newColourName)$ \n\\define resolve-colour(macrocall)\n\\import $:/core/macros/utils\n\\whitespace trim\n<$wikify name=\"name\" text=\"\"\"$macrocall$\"\"\">\n<<name>>\n</$wikify>\n\\end\n\\define delete-colour-index-actions() <$action-setfield $index=<<colourName>>/>\n\\define palette-manager-colour-row-segment()\n\\whitespace trim\n<$edit-text index=<<colourName>> tag=\"input\" placeholder=<<edit-colour-placeholder>> default=\"\"/>\n<br>\n<$edit-text index=<<colourName>> type=\"color\" tag=\"input\" class=\"tc-palette-manager-colour-input\"/>\n<$list filter=\"[<currentTiddler>getindex<colourName>removeprefix[<<]removesuffix[>>]] [<currentTiddler>getindex<colourName>removeprefix[<$]removesuffix[/>]]\" variable=\"ignore\">\n<$set name=\"state\" value={{{ [[$:/state/palettemanager/]addsuffix<currentTiddler>addsuffix[/]addsuffix<colourName>] }}}>\n<$wikify name=\"newColourName\" text=\"\"\"<$macrocall $name=\"resolve-colour\" macrocall={{{ [<currentTiddler>getindex<colourName>] }}}/>\"\"\">\n<$reveal state=<<state>> type=\"nomatch\" text=\"show\">\n<$button tooltip=<<colour-tooltip show>> aria-label=<<colour-tooltip show>> class=\"tc-btn-invisible\" set=<<state>> setTo=\"show\">{{$:/core/images/down-arrow}} <$text text=<<newColourName>>/></$button><br>\n</$reveal>\n<$reveal state=<<state>> type=\"match\" text=\"show\">\n<$button tooltip=<<colour-tooltip hide>> aria-label=<<colour-tooltip show>> class=\"tc-btn-invisible\" actions=\"\"\"<$action-deletetiddler $tiddler=<<state>>/>\"\"\">{{$:/core/images/up-arrow}} <$text text=<<newColourName>>/></$button><br>\n</$reveal>\n<$reveal state=<<state>> type=\"match\" text=\"show\">\n<$set name=\"colourName\" value=<<newColourName>>>\n<br>\n<<palette-manager-colour-row-segment>>\n<br><br>\n</$set>\n</$reveal>\n</$wikify>\n</$set>\n</$list>\n\\end\n\\define palette-manager-colour-row()\n\\whitespace trim\n<tr>\n<td>\n<span style=\"float:right;\">\n<$button tooltip=<<lingo Delete/Hint>> aria-label=<<lingo Delete/Hint>> class=\"tc-btn-invisible\" actions=<<delete-colour-index-actions>>>\n{{$:/core/images/delete-button}}</$button>\n</span>\n''<$macrocall $name=\"describePaletteColour\" colour=<<colourName>>/>''<br/>\n<$macrocall $name=\"colourName\" $output=\"text/plain\"/>\n</td>\n<td>\n<<palette-manager-colour-row-segment>>\n</td>\n</tr>\n\\end\n\\define palette-manager-table()\n\\whitespace trim\n<table>\n<tbody>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Palette]indexes[]]\" variable=\"colourName\">\n<$list filter=\"[<currentTiddler>indexes[]removeprefix<colourName>suffix[]]\" variable=\"ignore\" emptyMessage=\"\"\"\n<$list filter=\"[{$:/state/palettemanager/showexternal}removeprefix[yes]suffix[]]\" variable=\"ignore\">\n<<palette-manager-colour-row>>\n</$list>\n\"\"\">\n<<palette-manager-colour-row>>\n</$list>\n</$list>\n</tbody>\n</table>\n\\end\n<$set name=\"currentTiddler\" value={{$:/palette}}>\n\n<<lingo Prompt>> <$link to={{$:/palette}}><$macrocall $name=\"currentTiddler\" $output=\"text/plain\"/></$link>\n\n<$list filter=\"[all[current]is[shadow]is[tiddler]]\" variable=\"listItem\">\n<<lingo Prompt/Modified>>\n<$button message=\"tm-delete-tiddler\" param={{$:/palette}}><<lingo Reset/Caption>></$button>\n</$list>\n\n<$list filter=\"[all[current]is[shadow]!is[tiddler]]\" variable=\"listItem\">\n<<lingo Clone/Prompt>>\n</$list>\n\n<$button message=\"tm-new-tiddler\" param={{$:/palette}}><<lingo Clone/Caption>></$button>\n\n<$checkbox tiddler=\"$:/state/palettemanager/showexternal\" field=\"text\" checked=\"yes\" unchecked=\"no\"> <<lingo Names/External/Show>></$checkbox>\n\n<<palette-manager-table>>\n"
},
"$:/core/ui/PluginInfo": {
"title": "$:/core/ui/PluginInfo",
"text": "\\define localised-info-tiddler-title()\n$(currentTiddler)$/$(languageTitle)$/$(currentTab)$\n\\end\n\\define info-tiddler-title()\n$(currentTiddler)$/$(currentTab)$\n\\end\n\\define default-tiddler-title()\n$:/core/ui/PluginInfo/Default/$(currentTab)$\n\\end\n<$transclude tiddler=<<localised-info-tiddler-title>> mode=\"block\">\n<$transclude tiddler=<<currentTiddler>> subtiddler=<<localised-info-tiddler-title>> mode=\"block\">\n<$transclude tiddler=<<currentTiddler>> subtiddler=<<info-tiddler-title>> mode=\"block\">\n<$transclude tiddler=<<default-tiddler-title>> mode=\"block\">\n{{$:/language/ControlPanel/Plugin/NoInfoFound/Hint}}\n</$transclude>\n</$transclude>\n</$transclude>\n</$transclude>\n"
},
"$:/core/ui/PluginInfo/Default/contents": {
"title": "$:/core/ui/PluginInfo/Default/contents",
"text": "\\define lingo-base() $:/language/TiddlerInfo/Advanced/PluginInfo/\n<<lingo Hint>>\n<ul>\n<$list filter=\"[all[current]plugintiddlers[]sort[title]]\" emptyMessage=<<lingo Empty/Hint>>>\n<li>\n<$link />\n</li>\n</$list>\n</ul>\n"
},
"$:/core/ui/PluginListItemTemplate": {
"title": "$:/core/ui/PluginListItemTemplate",
"text": "<div class=\"tc-menu-list-item\">\n<$link to={{!!title}}><$view field=\"description\"><$view field=\"title\"/></$view></$link>\n</div>"
},
"$:/core/ui/SearchResults": {
"title": "$:/core/ui/SearchResults",
"text": "<div class=\"tc-search-results\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]butfirst[]limit[1]]\" emptyMessage=\"\"\"\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\">\n<$transclude mode=\"block\"/>\n</$list>\n\"\"\">\n\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/SearchResults]!has[draft.of]]\" default={{$:/config/SearchResults/Default}}/>\n\n</$list>\n\n</div>\n"
},
"$:/core/ui/SideBar/More": {
"title": "$:/core/ui/SideBar/More",
"tags": "$:/tags/SideBar",
"caption": "{{$:/language/SideBar/More/Caption}}",
"text": "<div class=\"tc-more-sidebar\">\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/MoreSideBar]!has[draft.of]]\" default={{$:/config/DefaultMoreSidebarTab}} state=\"$:/state/tab/moresidebar\" class=\"tc-vertical tc-sidebar-tabs-more\" />\n</div>"
},
"$:/core/ui/SideBar/Open": {
"title": "$:/core/ui/SideBar/Open",
"tags": "$:/tags/SideBar",
"caption": "{{$:/language/SideBar/Open/Caption}}",
"text": "\\whitespace trim\n\\define lingo-base() $:/language/CloseAll/\n\n\\define drop-actions()\n<$action-listops $tiddler=<<tv-story-list>> $subfilter=\"+[insertbefore:currentTiddler<actionTiddler>]\"/>\n\\end\n\n\\define placeholder()\n<div class=\"tc-droppable-placeholder\"/>\n\\end\n\n\\define droppable-item(button)\n\\whitespace trim\n<$droppable actions=<<drop-actions>> enable=<<tv-allow-drag-and-drop>>>\n<<placeholder>>\n<div>\n$button$\n</div>\n</$droppable>\n\\end\n\n<div class=\"tc-sidebar-tab-open\">\n<$list filter=\"[list<tv-story-list>]\" history=<<tv-history-list>> storyview=\"pop\">\n<div class=\"tc-sidebar-tab-open-item\">\n<$macrocall $name=\"droppable-item\" button=\"\"\"<$button message=\"tm-close-tiddler\" tooltip={{$:/language/Buttons/Close/Hint}} aria-label={{$:/language/Buttons/Close/Caption}} class=\"tc-btn-invisible tc-btn-mini\">{{$:/core/images/close-button}}</$button> <$link to={{!!title}}><$view field=\"title\"/></$link>\"\"\"/>\n</div>\n</$list>\n<$tiddler tiddler=\"\">\n<div>\n<$macrocall $name=\"droppable-item\" button=\"\"\"<$button message=\"tm-close-all-tiddlers\" class=\"tc-btn-invisible tc-btn-mini\"><<lingo Button>></$button>\"\"\"/>\n</div>\n</$tiddler>\n</div>\n"
},
"$:/core/ui/SideBar/Recent": {
"title": "$:/core/ui/SideBar/Recent",
"tags": "$:/tags/SideBar",
"caption": "{{$:/language/SideBar/Recent/Caption}}",
"text": "<$macrocall $name=\"timeline\" format={{$:/language/RecentChanges/DateFormat}}/>\n"
},
"$:/core/ui/SideBar/Tools": {
"title": "$:/core/ui/SideBar/Tools",
"tags": "$:/tags/SideBar",
"caption": "{{$:/language/SideBar/Tools/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/\n\\define config-title()\n$:/config/PageControlButtons/Visibility/$(listItem)$\n\\end\n\n<<lingo Basics/Version/Prompt>> <<version>>\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]\" variable=\"listItem\">\n\n<div style=\"position:relative;\" class={{{ [<listItem>encodeuricomponent[]addprefix[tc-btn-]] }}}>\n\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <$transclude tiddler=<<listItem>>/> <i class=\"tc-muted\"><$transclude tiddler=<<listItem>> field=\"description\"/></i>\n\n</div>\n\n</$list>\n\n</$set>\n\n</$set>\n\n</$set>\n"
},
"$:/core/ui/SideBarLists": {
"title": "$:/core/ui/SideBarLists",
"text": "<$transclude tiddler=\"$:/core/ui/SideBarSegments/search\"/>\n\n<$transclude tiddler=\"$:/core/ui/SideBarSegments/tabs\"/>\n\n"
},
"$:/core/ui/SideBarSegments/page-controls": {
"title": "$:/core/ui/SideBarSegments/page-controls",
"tags": "$:/tags/SideBarSegment",
"text": "{{||$:/core/ui/PageTemplate/pagecontrols}}\n"
},
"$:/core/ui/SideBarSegments/search": {
"title": "$:/core/ui/SideBarSegments/search",
"tags": "$:/tags/SideBarSegment",
"text": "\\whitespace trim\n<div class=\"tc-sidebar-lists tc-sidebar-search\">\n\n<$set name=\"searchTiddler\" value=\"$:/temp/search\">\n<div class=\"tc-search\">\n<$edit-text tiddler=\"$:/temp/search\" type=\"search\" tag=\"input\" focus={{$:/config/Search/AutoFocus}} focusPopup=<<qualify \"$:/state/popup/search-dropdown\">> class=\"tc-popup-handle\"/>\n<$reveal state=\"$:/temp/search\" type=\"nomatch\" text=\"\">\n<$button tooltip={{$:/language/Buttons/AdvancedSearch/Hint}} aria-label={{$:/language/Buttons/AdvancedSearch/Caption}} class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/advancedsearch\" text={{$:/temp/search}}/>\n<$action-setfield $tiddler=\"$:/temp/search\" text=\"\"/>\n<$action-navigate $to=\"$:/AdvancedSearch\"/>\n{{$:/core/images/advanced-search-button}}\n</$button>\n<$button class=\"tc-btn-invisible\">\n<$action-setfield $tiddler=\"$:/temp/search\" text=\"\" />\n{{$:/core/images/close-button}}\n</$button>\n<$button popup=<<qualify \"$:/state/popup/search-dropdown\">> class=\"tc-btn-invisible\">\n{{$:/core/images/down-arrow}}\n<$list filter=\"[{$:/temp/search}minlength{$:/config/Search/MinLength}limit[1]]\" variable=\"listItem\">\n<$set name=\"searchTerm\" value={{{ [<searchTiddler>get[text]] }}}>\n<$set name=\"resultCount\" value=\"\"\"<$count filter=\"[!is[system]search<searchTerm>]\"/>\"\"\">\n{{$:/language/Search/Matches}}\n</$set>\n</$set>\n</$list>\n</$button>\n</$reveal>\n<$reveal state=\"$:/temp/search\" type=\"match\" text=\"\">\n<$button to=\"$:/AdvancedSearch\" tooltip={{$:/language/Buttons/AdvancedSearch/Hint}} aria-label={{$:/language/Buttons/AdvancedSearch/Caption}} class=\"tc-btn-invisible\">\n{{$:/core/images/advanced-search-button}}\n</$button>\n</$reveal>\n</div>\n\n<$reveal tag=\"div\" class=\"tc-block-dropdown-wrapper\" state=\"$:/temp/search\" type=\"nomatch\" text=\"\">\n\n<$reveal tag=\"div\" class=\"tc-block-dropdown tc-search-drop-down tc-popup-handle\" state=<<qualify \"$:/state/popup/search-dropdown\">> type=\"nomatch\" text=\"\" default=\"\">\n\n<$list filter=\"[{$:/temp/search}minlength{$:/config/Search/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n\n{{$:/core/ui/SearchResults}}\n\n</$list>\n\n</$reveal>\n\n</$reveal>\n\n</$set>\n\n</div>\n"
},
"$:/core/ui/SideBarSegments/site-subtitle": {
"title": "$:/core/ui/SideBarSegments/site-subtitle",
"tags": "$:/tags/SideBarSegment",
"text": "<div class=\"tc-site-subtitle\">\n\n<$transclude tiddler=\"$:/SiteSubtitle\" mode=\"inline\"/>\n\n</div>\n"
},
"$:/core/ui/SideBarSegments/site-title": {
"title": "$:/core/ui/SideBarSegments/site-title",
"tags": "$:/tags/SideBarSegment",
"text": "<h1 class=\"tc-site-title\">\n\n<$transclude tiddler=\"$:/SiteTitle\" mode=\"inline\"/>\n\n</h1>\n"
},
"$:/core/ui/SideBarSegments/tabs": {
"title": "$:/core/ui/SideBarSegments/tabs",
"tags": "$:/tags/SideBarSegment",
"text": "<div class=\"tc-sidebar-lists tc-sidebar-tabs\">\n\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/SideBar]!has[draft.of]]\" default={{$:/config/DefaultSidebarTab}} state=\"$:/state/tab/sidebar\" class=\"tc-sidebar-tabs-main\"/>\n\n</div>\n"
},
"$:/TagManager": {
"title": "$:/TagManager",
"icon": "$:/core/images/tag-button",
"color": "#bbb",
"text": "\\define lingo-base() $:/language/TagManager/\n\\define iconEditorTab(type)\n\\whitespace trim\n<$link to=\"\"><<lingo Icons/None>></$link>\n<$list filter=\"[all[shadows+tiddlers]is[image]] [all[shadows+tiddlers]tag[$:/tags/Image]] -[type[application/pdf]] +[sort[title]] +[$type$is[system]]\">\n<$link to={{!!title}}>\n<$transclude/> <$view field=\"title\"/>\n</$link>\n</$list>\n\\end\n\\define iconEditor(title)\n\\whitespace trim\n<div class=\"tc-drop-down-wrapper\">\n<$button popupTitle={{{ [[$:/state/popup/icon/]addsuffix<__title__>] }}} class=\"tc-btn-invisible tc-btn-dropdown\">{{$:/core/images/down-arrow}}</$button>\n<$reveal stateTitle={{{ [[$:/state/popup/icon/]addsuffix<__title__>] }}} type=\"popup\" position=\"belowleft\" text=\"\" default=\"\">\n<div class=\"tc-drop-down\">\n<$linkcatcher actions=\"\"\"<$action-setfield $tiddler=<<__title__>> icon=<<navigateTo>>/>\"\"\">\n<<iconEditorTab type:\"!\">>\n<hr/>\n<<iconEditorTab type:\"\">>\n</$linkcatcher>\n</div>\n</$reveal>\n</div>\n\\end\n\\define toggleButton(state)\n\\whitespace trim\n<$reveal stateTitle=<<__state__>> type=\"match\" text=\"closed\" default=\"closed\">\n<$button setTitle=<<__state__>> setTo=\"open\" class=\"tc-btn-invisible tc-btn-dropdown\" selectedClass=\"tc-selected\">\n{{$:/core/images/info-button}}\n</$button>\n</$reveal>\n<$reveal stateTitle=<<__state__>> type=\"match\" text=\"open\" default=\"closed\">\n<$button setTitle=<<__state__>> setTo=\"closed\" class=\"tc-btn-invisible tc-btn-dropdown\" selectedClass=\"tc-selected\">\n{{$:/core/images/info-button}}\n</$button>\n</$reveal>\n\\end\n\\whitespace trim\n<table class=\"tc-tag-manager-table\">\n<tbody>\n<tr>\n<th><<lingo Colour/Heading>></th>\n<th class=\"tc-tag-manager-tag\"><<lingo Tag/Heading>></th>\n<th><<lingo Count/Heading>></th>\n<th><<lingo Icon/Heading>></th>\n<th><<lingo Info/Heading>></th>\n</tr>\n<$list filter=\"[tags[]!is[system]sort[title]]\">\n<tr>\n<td><$edit-text field=\"color\" tag=\"input\" type=\"color\"/></td>\n<td>{{||$:/core/ui/TagTemplate}}</td>\n<td><$count filter=\"[all[current]tagging[]]\"/></td>\n<td>\n<$macrocall $name=\"iconEditor\" title={{!!title}}/>\n</td>\n<td>\n<$macrocall $name=\"toggleButton\" state={{{ [[$:/state/tag-manager/]addsuffix<currentTiddler>] }}} /> \n</td>\n</tr>\n<tr>\n<td></td>\n<td colspan=\"4\">\n<$reveal stateTitle={{{ [[$:/state/tag-manager/]addsuffix<currentTiddler>] }}} type=\"match\" text=\"open\" default=\"\">\n<table>\n<tbody>\n<tr><td><<lingo Colour/Heading>></td><td><$edit-text field=\"color\" tag=\"input\" type=\"text\" size=\"9\"/></td></tr>\n<tr><td><<lingo Icon/Heading>></td><td><$edit-text field=\"icon\" tag=\"input\" size=\"45\"/></td></tr>\n</tbody>\n</table>\n</$reveal>\n</td>\n</tr>\n</$list>\n<tr>\n<td></td>\n<td style=\"position:relative;\">\n{{$:/core/ui/UntaggedTemplate}}\n</td>\n<td>\n<small class=\"tc-menu-list-count\"><$count filter=\"[untagged[]!is[system]] -[tags[]]\"/></small>\n</td>\n<td></td>\n<td></td>\n</tr>\n</tbody>\n</table>\n"
},
"$:/core/ui/TagTemplate": {
"title": "$:/core/ui/TagTemplate",
"text": "\\whitespace trim\n<span class=\"tc-tag-list-item\">\n<$set name=\"transclusion\" value=<<currentTiddler>>>\n<$macrocall $name=\"tag-pill-body\" tag=<<currentTiddler>> icon={{!!icon}} colour={{!!color}} palette={{$:/palette}} element-tag=\"\"\"$button\"\"\" element-attributes=\"\"\"popup=<<qualify \"$:/state/popup/tag\">> dragFilter='[all[current]tagging[]]' tag='span'\"\"\"/>\n<$reveal state=<<qualify \"$:/state/popup/tag\">> type=\"popup\" position=\"below\" animate=\"yes\" class=\"tc-drop-down\">\n<$set name=\"tv-show-missing-links\" value=\"yes\">\n<$transclude tiddler=\"$:/core/ui/ListItemTemplate\"/>\n</$set>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TagDropdown]!has[draft.of]]\" variable=\"listItem\"> \n<$transclude tiddler=<<listItem>>/> \n</$list>\n<hr>\n<$macrocall $name=\"list-tagged-draggable\" tag=<<currentTiddler>>/>\n</$reveal>\n</$set>\n</span>\n"
},
"$:/core/ui/TiddlerFieldTemplate": {
"title": "$:/core/ui/TiddlerFieldTemplate",
"text": "<tr class=\"tc-view-field\">\n<td class=\"tc-view-field-name\">\n<$text text=<<listItem>>/>\n</td>\n<td class=\"tc-view-field-value\">\n<$view field=<<listItem>>/>\n</td>\n</tr>"
},
"$:/core/ui/TiddlerFields": {
"title": "$:/core/ui/TiddlerFields",
"text": "<table class=\"tc-view-field-table\">\n<tbody>\n<$list filter=\"[all[current]fields[]sort[title]] -text\" template=\"$:/core/ui/TiddlerFieldTemplate\" variable=\"listItem\"/>\n</tbody>\n</table>\n"
},
"$:/core/ui/TiddlerInfo/Advanced/PluginInfo": {
"title": "$:/core/ui/TiddlerInfo/Advanced/PluginInfo",
"tags": "$:/tags/TiddlerInfo/Advanced",
"text": "\\define lingo-base() $:/language/TiddlerInfo/Advanced/PluginInfo/\n<$list filter=\"[all[current]has[plugin-type]]\">\n\n! <<lingo Heading>>\n\n<<lingo Hint>>\n<ul>\n<$list filter=\"[all[current]plugintiddlers[]sort[title]]\" emptyMessage=<<lingo Empty/Hint>>>\n<li>\n<$link to={{!!title}}>\n<$view field=\"title\"/>\n</$link>\n</li>\n</$list>\n</ul>\n\n</$list>\n"
},
"$:/core/ui/TiddlerInfo/Advanced/ShadowInfo": {
"title": "$:/core/ui/TiddlerInfo/Advanced/ShadowInfo",
"tags": "$:/tags/TiddlerInfo/Advanced",
"text": "\\define lingo-base() $:/language/TiddlerInfo/Advanced/ShadowInfo/\n<$set name=\"infoTiddler\" value=<<currentTiddler>>>\n\n''<<lingo Heading>>''\n\n<$list filter=\"[all[current]!is[shadow]]\">\n\n<<lingo NotShadow/Hint>>\n\n</$list>\n\n<$list filter=\"[all[current]is[shadow]]\">\n\n<<lingo Shadow/Hint>>\n\n<$list filter=\"[all[current]shadowsource[]]\">\n\n<$set name=\"pluginTiddler\" value=<<currentTiddler>>>\n<<lingo Shadow/Source>>\n</$set>\n\n</$list>\n\n<$list filter=\"[all[current]is[shadow]is[tiddler]]\">\n\n<<lingo OverriddenShadow/Hint>>\n\n</$list>\n\n\n</$list>\n</$set>\n"
},
"$:/core/ui/TiddlerInfo/Advanced": {
"title": "$:/core/ui/TiddlerInfo/Advanced",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/Advanced/Caption}}",
"text": "<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TiddlerInfo/Advanced]!has[draft.of]]\" variable=\"listItem\">\n<$transclude tiddler=<<listItem>>/>\n\n</$list>\n"
},
"$:/core/ui/TiddlerInfo/Fields": {
"title": "$:/core/ui/TiddlerInfo/Fields",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/Fields/Caption}}",
"text": "<$transclude tiddler=\"$:/core/ui/TiddlerFields\"/>\n"
},
"$:/core/ui/TiddlerInfo/List": {
"title": "$:/core/ui/TiddlerInfo/List",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/List/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[list{!!title}]\" emptyMessage=<<lingo List/Empty>> template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/TiddlerInfo/Listed": {
"title": "$:/core/ui/TiddlerInfo/Listed",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/Listed/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[all[current]listed[]!is[system]]\" emptyMessage=<<lingo Listed/Empty>> template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/TiddlerInfo/References": {
"title": "$:/core/ui/TiddlerInfo/References",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/References/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[all[current]backlinks[]sort[title]]\" emptyMessage=<<lingo References/Empty>> template=\"$:/core/ui/ListItemTemplate\">\n</$list>"
},
"$:/core/ui/TiddlerInfo/Tagging": {
"title": "$:/core/ui/TiddlerInfo/Tagging",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/Tagging/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n<$list filter=\"[all[current]tagging[]]\" emptyMessage=<<lingo Tagging/Empty>> template=\"$:/core/ui/ListItemTemplate\"/>\n"
},
"$:/core/ui/TiddlerInfo/Tools": {
"title": "$:/core/ui/TiddlerInfo/Tools",
"tags": "$:/tags/TiddlerInfo",
"caption": "{{$:/language/TiddlerInfo/Tools/Caption}}",
"text": "\\define lingo-base() $:/language/TiddlerInfo/\n\\define config-title()\n$:/config/ViewToolbarButtons/Visibility/$(listItem)$\n\\end\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]]\" variable=\"listItem\">\n\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <$transclude tiddler=<<listItem>>/> <i class=\"tc-muted\"><$transclude tiddler=<<listItem>> field=\"description\"/></i>\n\n</$list>\n\n</$set>\n\n</$set>\n\n</$set>\n"
},
"$:/core/ui/TiddlerInfo": {
"title": "$:/core/ui/TiddlerInfo",
"text": "<div style=\"position:relative;\">\n<div class=\"tc-tiddler-controls\" style=\"position:absolute;right:0;\">\n<$reveal state=\"$:/config/TiddlerInfo/Mode\" type=\"match\" text=\"sticky\">\n<$button set=<<tiddlerInfoState>> setTo=\"\" tooltip={{$:/language/Buttons/Info/Hint}} aria-label={{$:/language/Buttons/Info/Caption}} class=\"tc-btn-invisible\">\n{{$:/core/images/close-button}}\n</$button>\n</$reveal>\n</div>\n</div>\n\n<$macrocall $name=\"tabs\" tabsList=\"[all[shadows+tiddlers]tag[$:/tags/TiddlerInfo]!has[draft.of]]\" default={{$:/config/TiddlerInfo/Default}}/>"
},
"$:/core/ui/TopBar/menu": {
"title": "$:/core/ui/TopBar/menu",
"tags": "$:/tags/TopRightBar",
"text": "<$list filter=\"[[$:/state/sidebar]get[text]] +[else[yes]!match[no]]\" variable=\"ignore\">\n<$button set=\"$:/state/sidebar\" setTo=\"no\" tooltip={{$:/language/Buttons/HideSideBar/Hint}} aria-label={{$:/language/Buttons/HideSideBar/Caption}} class=\"tc-btn-invisible\">{{$:/core/images/chevron-right}}</$button>\n</$list>\n<$list filter=\"[[$:/state/sidebar]get[text]] +[else[yes]match[no]]\" variable=\"ignore\">\n<$button set=\"$:/state/sidebar\" setTo=\"yes\" tooltip={{$:/language/Buttons/ShowSideBar/Hint}} aria-label={{$:/language/Buttons/ShowSideBar/Caption}} class=\"tc-btn-invisible\">{{$:/core/images/chevron-left}}</$button>\n</$list>\n"
},
"$:/core/ui/UntaggedTemplate": {
"title": "$:/core/ui/UntaggedTemplate",
"text": "\\define lingo-base() $:/language/SideBar/\n<$button popup=<<qualify \"$:/state/popup/tag\">> class=\"tc-btn-invisible tc-untagged-label tc-tag-label\">\n<<lingo Tags/Untagged/Caption>>\n</$button>\n<$reveal state=<<qualify \"$:/state/popup/tag\">> type=\"popup\" position=\"below\">\n<div class=\"tc-drop-down\">\n<$list filter=\"[untagged[]!is[system]] -[tags[]] +[sort[title]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n</div>\n</$reveal>\n"
},
"$:/core/ui/ViewTemplate/body": {
"title": "$:/core/ui/ViewTemplate/body",
"tags": "$:/tags/ViewTemplate",
"text": "<$reveal tag=\"div\" class=\"tc-tiddler-body\" type=\"nomatch\" stateTitle=<<folded-state>> text=\"hide\" retain=\"yes\" animate=\"yes\">\n\n<$list filter=\"[all[current]!has[plugin-type]!field:hide-body[yes]]\">\n\n<$transclude>\n\n<$transclude tiddler=\"$:/language/MissingTiddler/Hint\"/>\n\n</$transclude>\n\n</$list>\n\n</$reveal>\n"
},
"$:/core/ui/ViewTemplate/classic": {
"title": "$:/core/ui/ViewTemplate/classic",
"tags": "$:/tags/ViewTemplate $:/tags/EditTemplate",
"text": "\\define lingo-base() $:/language/ClassicWarning/\n<$list filter=\"[all[current]type[text/x-tiddlywiki]]\">\n<div class=\"tc-message-box\">\n\n<<lingo Hint>>\n\n<$button set=\"!!type\" setTo=\"text/vnd.tiddlywiki\"><<lingo Upgrade/Caption>></$button>\n\n</div>\n</$list>\n"
},
"$:/core/ui/ViewTemplate/import": {
"title": "$:/core/ui/ViewTemplate/import",
"tags": "$:/tags/ViewTemplate",
"text": "\\define lingo-base() $:/language/Import/\n\n\\define buttons()\n<$button message=\"tm-delete-tiddler\" param=<<currentTiddler>>><<lingo Listing/Cancel/Caption>></$button>\n<$button message=\"tm-perform-import\" param=<<currentTiddler>>><<lingo Listing/Import/Caption>></$button>\n<<lingo Listing/Preview>> <$select tiddler=\"$:/state/importpreviewtype\" default=\"$:/core/ui/ImportPreviews/Text\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ImportPreview]!has[draft.of]]\">\n<option value=<<currentTiddler>>>{{!!caption}}</option>\n</$list>\n</$select>\n\\end\n\n<$list filter=\"[all[current]field:plugin-type[import]]\">\n\n<div class=\"tc-import\">\n\n<<lingo Listing/Hint>>\n\n<<buttons>>\n\n{{||$:/core/ui/ImportListing}}\n\n<<buttons>>\n\n</div>\n\n</$list>\n"
},
"$:/core/ui/ViewTemplate/plugin": {
"title": "$:/core/ui/ViewTemplate/plugin",
"tags": "$:/tags/ViewTemplate",
"text": "<$list filter=\"[all[current]has[plugin-type]] -[all[current]field:plugin-type[import]]\">\n<$set name=\"plugin-type\" value={{!!plugin-type}}>\n<$set name=\"default-popup-state\" value=\"yes\">\n<$set name=\"qualified-state\" value=<<qualify \"$:/state/plugin-info\">>>\n{{||$:/core/ui/Components/plugin-info}}\n</$set>\n</$set>\n</$set>\n</$list>\n"
},
"$:/core/ui/ViewTemplate/subtitle": {
"title": "$:/core/ui/ViewTemplate/subtitle",
"tags": "$:/tags/ViewTemplate",
"text": "\\whitespace trim\n<$reveal type=\"nomatch\" stateTitle=<<folded-state>> text=\"hide\" tag=\"div\" retain=\"yes\" animate=\"yes\">\n<div class=\"tc-subtitle\">\n<$link to={{!!modifier}} />\n<$view field=\"modified\" format=\"date\" template={{$:/language/Tiddler/DateFormat}}/>\n</div>\n</$reveal>\n"
},
"$:/core/ui/ViewTemplate/tags": {
"title": "$:/core/ui/ViewTemplate/tags",
"tags": "$:/tags/ViewTemplate",
"text": "<$reveal type=\"nomatch\" stateTitle=<<folded-state>> text=\"hide\" tag=\"div\" retain=\"yes\" animate=\"yes\">\n<div class=\"tc-tags-wrapper\"><$list filter=\"[all[current]tags[]sort[title]]\" template=\"$:/core/ui/TagTemplate\" storyview=\"pop\"/></div>\n</$reveal>\n"
},
"$:/core/ui/ViewTemplate/title": {
"title": "$:/core/ui/ViewTemplate/title",
"tags": "$:/tags/ViewTemplate",
"text": "\\whitespace trim\n\\define title-styles()\nfill:$(foregroundColor)$;\n\\end\n\\define config-title()\n$:/config/ViewToolbarButtons/Visibility/$(listItem)$\n\\end\n<div class=\"tc-tiddler-title\">\n<div class=\"tc-titlebar\">\n<span class=\"tc-tiddler-controls\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]]\" variable=\"listItem\"><$reveal type=\"nomatch\" state=<<config-title>> text=\"hide\"><$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\"><$transclude tiddler=<<listItem>>/></$set></$reveal></$list>\n</span>\n<$set name=\"tv-wikilinks\" value={{$:/config/Tiddlers/TitleLinks}}>\n<$link>\n<$set name=\"foregroundColor\" value={{!!color}}>\n<span class=\"tc-tiddler-title-icon\" style=<<title-styles>>>\n<$transclude tiddler={{!!icon}}>\n<$transclude tiddler={{$:/config/DefaultTiddlerIcon}}/>\n</$transclude>\n</span>\n</$set>\n<$list filter=\"[all[current]removeprefix[$:/]]\">\n<h2 class=\"tc-title\" title={{$:/language/SystemTiddler/Tooltip}}>\n<span class=\"tc-system-title-prefix\">$:/</span><$text text=<<currentTiddler>>/>\n</h2>\n</$list>\n<$list filter=\"[all[current]!prefix[$:/]]\">\n<h2 class=\"tc-title\">\n<$view field=\"title\"/>\n</h2>\n</$list>\n</$link>\n</$set>\n</div>\n\n<$reveal type=\"nomatch\" text=\"\" default=\"\" state=<<tiddlerInfoState>> class=\"tc-tiddler-info tc-popup-handle\" animate=\"yes\" retain=\"yes\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TiddlerInfoSegment]!has[draft.of]] [[$:/core/ui/TiddlerInfo]]\" variable=\"listItem\"><$transclude tiddler=<<listItem>> mode=\"block\"/></$list>\n\n</$reveal>\n</div>"
},
"$:/core/ui/ViewTemplate/unfold": {
"title": "$:/core/ui/ViewTemplate/unfold",
"tags": "$:/tags/ViewTemplate",
"text": "<$reveal tag=\"div\" type=\"nomatch\" state=\"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-bar\" text=\"hide\">\n<$reveal tag=\"div\" type=\"nomatch\" stateTitle=<<folded-state>> text=\"hide\" default=\"show\" retain=\"yes\" animate=\"yes\">\n<$button tooltip={{$:/language/Buttons/Fold/Hint}} aria-label={{$:/language/Buttons/Fold/Caption}} class=\"tc-fold-banner\">\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<<currentTiddler>> foldedState=<<folded-state>>/>\n{{$:/core/images/chevron-up}}\n</$button>\n</$reveal>\n<$reveal tag=\"div\" type=\"nomatch\" stateTitle=<<folded-state>> text=\"show\" default=\"show\" retain=\"yes\" animate=\"yes\">\n<$button tooltip={{$:/language/Buttons/Unfold/Hint}} aria-label={{$:/language/Buttons/Unfold/Caption}} class=\"tc-unfold-banner\">\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<<currentTiddler>> foldedState=<<folded-state>>/>\n{{$:/core/images/chevron-down}}\n</$button>\n</$reveal>\n</$reveal>\n"
},
"$:/core/ui/ViewTemplate": {
"title": "$:/core/ui/ViewTemplate",
"text": "\\define folded-state()\n$:/state/folded/$(currentTiddler)$\n\\end\n\\import [all[shadows+tiddlers]tag[$:/tags/Macro/View]!has[draft.of]]\n<$vars storyTiddler=<<currentTiddler>> tiddlerInfoState=<<qualify \"$:/state/popup/tiddler-info\">>><div data-tiddler-title=<<currentTiddler>> data-tags={{!!tags}} class={{{ tc-tiddler-frame tc-tiddler-view-frame [<currentTiddler>is[tiddler]then[tc-tiddler-exists]] [<currentTiddler>is[missing]!is[shadow]then[tc-tiddler-missing]] [<currentTiddler>is[shadow]then[tc-tiddler-exists tc-tiddler-shadow]] [<currentTiddler>is[shadow]is[tiddler]then[tc-tiddler-overridden-shadow]] [<currentTiddler>is[system]then[tc-tiddler-system]] [{!!class}] [<currentTiddler>tags[]encodeuricomponent[]addprefix[tc-tagged-]] +[join[ ]] }}}><$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewTemplate]!has[draft.of]]\" variable=\"listItem\"><$transclude tiddler=<<listItem>>/></$list>\n</div>\n</$vars>\n"
},
"$:/core/ui/Buttons/clone": {
"title": "$:/core/ui/Buttons/clone",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/clone-button}} {{$:/language/Buttons/Clone/Caption}}",
"description": "{{$:/language/Buttons/Clone/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-new-tiddler\" param=<<currentTiddler>> tooltip={{$:/language/Buttons/Clone/Hint}} aria-label={{$:/language/Buttons/Clone/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/clone-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Clone/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/close-others": {
"title": "$:/core/ui/Buttons/close-others",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/close-others-button}} {{$:/language/Buttons/CloseOthers/Caption}}",
"description": "{{$:/language/Buttons/CloseOthers/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-close-other-tiddlers\" param=<<currentTiddler>> tooltip={{$:/language/Buttons/CloseOthers/Hint}} aria-label={{$:/language/Buttons/CloseOthers/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/close-others-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/CloseOthers/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/close": {
"title": "$:/core/ui/Buttons/close",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/close-button}} {{$:/language/Buttons/Close/Caption}}",
"description": "{{$:/language/Buttons/Close/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-close-tiddler\" tooltip={{$:/language/Buttons/Close/Hint}} aria-label={{$:/language/Buttons/Close/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/close-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/Close/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/edit": {
"title": "$:/core/ui/Buttons/edit",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/edit-button}} {{$:/language/Buttons/Edit/Caption}}",
"description": "{{$:/language/Buttons/Edit/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-edit-tiddler\" tooltip={{$:/language/Buttons/Edit/Hint}} aria-label={{$:/language/Buttons/Edit/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/edit-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Edit/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/export-tiddler": {
"title": "$:/core/ui/Buttons/export-tiddler",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/export-button}} {{$:/language/Buttons/ExportTiddler/Caption}}",
"description": "{{$:/language/Buttons/ExportTiddler/Hint}}",
"text": "\\define makeExportFilter()\n[[$(currentTiddler)$]]\n\\end\n<$macrocall $name=\"exportButton\" exportFilter=<<makeExportFilter>> lingoBase=\"$:/language/Buttons/ExportTiddler/\" baseFilename=<<currentTiddler>>/>"
},
"$:/core/ui/Buttons/fold-bar": {
"title": "$:/core/ui/Buttons/fold-bar",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/chevron-up}} {{$:/language/Buttons/Fold/FoldBar/Caption}}",
"description": "{{$:/language/Buttons/Fold/FoldBar/Hint}}",
"text": "<!-- This dummy toolbar button is here to allow visibility of the fold-bar to be controlled as if it were a toolbar button -->"
},
"$:/core/ui/Buttons/fold-others": {
"title": "$:/core/ui/Buttons/fold-others",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/fold-others-button}} {{$:/language/Buttons/FoldOthers/Caption}}",
"description": "{{$:/language/Buttons/FoldOthers/Hint}}",
"text": "\\whitespace trim\n<$button tooltip={{$:/language/Buttons/FoldOthers/Hint}} aria-label={{$:/language/Buttons/FoldOthers/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-fold-other-tiddlers\" $param=<<currentTiddler>> foldedStatePrefix=\"$:/state/folded/\"/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\" variable=\"listItem\">\n{{$:/core/images/fold-others-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/FoldOthers/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/fold": {
"title": "$:/core/ui/Buttons/fold",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/fold-button}} {{$:/language/Buttons/Fold/Caption}}",
"description": "{{$:/language/Buttons/Fold/Hint}}",
"text": "\\whitespace trim\n<$reveal type=\"nomatch\" stateTitle=<<folded-state>> text=\"hide\" default=\"show\">\n<$button tooltip={{$:/language/Buttons/Fold/Hint}} aria-label={{$:/language/Buttons/Fold/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<<currentTiddler>> foldedState=<<folded-state>>/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\" variable=\"listItem\">\n{{$:/core/images/fold-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Fold/Caption}}/>\n</span>\n</$list>\n</$button>\n</$reveal>\n<$reveal type=\"match\" stateTitle=<<folded-state>> text=\"hide\" default=\"show\">\n<$button tooltip={{$:/language/Buttons/Unfold/Hint}} aria-label={{$:/language/Buttons/Unfold/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-fold-tiddler\" $param=<<currentTiddler>> foldedState=<<folded-state>>/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\" variable=\"listItem\">\n{{$:/core/images/unfold-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Unfold/Caption}}/>\n</span>\n</$list>\n</$button>\n</$reveal>\n"
},
"$:/core/ui/Buttons/info": {
"title": "$:/core/ui/Buttons/info",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/info-button}} {{$:/language/Buttons/Info/Caption}}",
"description": "{{$:/language/Buttons/Info/Hint}}",
"text": "\\whitespace trim\n\\define button-content()\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/info-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/Info/Caption}}/>\n</span>\n</$list>\n\\end\n<$reveal state=\"$:/config/TiddlerInfo/Mode\" type=\"match\" text=\"popup\">\n<$button popup=<<tiddlerInfoState>> tooltip={{$:/language/Buttons/Info/Hint}} aria-label={{$:/language/Buttons/Info/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$macrocall $name=\"button-content\" mode=\"inline\"/>\n</$button>\n</$reveal>\n<$reveal state=\"$:/config/TiddlerInfo/Mode\" type=\"match\" text=\"sticky\">\n<$reveal state=<<tiddlerInfoState>> type=\"match\" text=\"\" default=\"\">\n<$button set=<<tiddlerInfoState>> setTo=\"yes\" tooltip={{$:/language/Buttons/Info/Hint}} aria-label={{$:/language/Buttons/Info/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$macrocall $name=\"button-content\" mode=\"inline\"/>\n</$button>\n</$reveal>\n<$reveal state=<<tiddlerInfoState>> type=\"nomatch\" text=\"\" default=\"\">\n<$button set=<<tiddlerInfoState>> setTo=\"\" tooltip={{$:/language/Buttons/Info/Hint}} aria-label={{$:/language/Buttons/Info/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$macrocall $name=\"button-content\" mode=\"inline\"/>\n</$button>\n</$reveal>\n</$reveal>"
},
"$:/core/ui/Buttons/more-tiddler-actions": {
"title": "$:/core/ui/Buttons/more-tiddler-actions",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/down-arrow}} {{$:/language/Buttons/More/Caption}}",
"description": "{{$:/language/Buttons/More/Hint}}",
"text": "\\whitespace trim\n\\define config-title()\n$:/config/ViewToolbarButtons/Visibility/$(listItem)$\n\\end\n<$button popup=<<qualify \"$:/state/popup/more\">> tooltip={{$:/language/Buttons/More/Hint}} aria-label={{$:/language/Buttons/More/Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/down-arrow}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/More/Caption}}/>\n</span>\n</$list>\n</$button>\n<$reveal state=<<qualify \"$:/state/popup/more\">> type=\"popup\" position=\"belowleft\" animate=\"yes\">\n\n<div class=\"tc-drop-down\">\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"tc-btn-invisible\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]] -[[$:/core/ui/Buttons/more-tiddler-actions]]\" variable=\"listItem\">\n\n<$reveal type=\"match\" state=<<config-title>> text=\"hide\">\n\n<$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$set>\n\n</$reveal>\n\n</$list>\n\n</$set>\n\n</$set>\n\n</$set>\n\n</div>\n\n</$reveal>"
},
"$:/core/ui/Buttons/new-here": {
"title": "$:/core/ui/Buttons/new-here",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/new-here-button}} {{$:/language/Buttons/NewHere/Caption}}",
"description": "{{$:/language/Buttons/NewHere/Hint}}",
"text": "\\whitespace trim\n\\define newHereActions()\n<$set name=\"tags\" filter=\"[<currentTiddler>] [{$:/config/NewTiddler/Tags!!tags}]\">\n<$action-sendmessage $message=\"tm-new-tiddler\" tags=<<tags>>/>\n</$set>\n\\end\n\\define newHereButton()\n<$button actions=<<newHereActions>> tooltip={{$:/language/Buttons/NewHere/Hint}} aria-label={{$:/language/Buttons/NewHere/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/new-here-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/NewHere/Caption}}/>\n</span>\n</$list>\n</$button>\n\\end\n<<newHereButton>>\n"
},
"$:/core/ui/Buttons/new-journal-here": {
"title": "$:/core/ui/Buttons/new-journal-here",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/new-journal-button}} {{$:/language/Buttons/NewJournalHere/Caption}}",
"description": "{{$:/language/Buttons/NewJournalHere/Hint}}",
"text": "\\whitespace trim\n\\define journalButtonTags()\n[[$(currentTiddlerTag)$]] $(journalTags)$\n\\end\n\\define journalButton()\n<$button tooltip={{$:/language/Buttons/NewJournalHere/Hint}} aria-label={{$:/language/Buttons/NewJournalHere/Caption}} class=<<tv-config-toolbar-class>>>\n<$wikify name=\"journalTitle\" text=\"\"\"<$macrocall $name=\"now\" format=<<journalTitleTemplate>>/>\"\"\">\n<$action-sendmessage $message=\"tm-new-tiddler\" title=<<journalTitle>> tags=<<journalButtonTags>>/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/new-journal-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text={{$:/language/Buttons/NewJournalHere/Caption}}/>\n</span>\n</$list>\n</$wikify>\n</$button>\n\\end\n<$set name=\"journalTitleTemplate\" value={{$:/config/NewJournal/Title}}>\n<$set name=\"journalTags\" value={{$:/config/NewJournal/Tags!!tags}}>\n<$set name=\"currentTiddlerTag\" value=<<currentTiddler>>>\n<<journalButton>>\n</$set>\n</$set>\n</$set>\n"
},
"$:/core/ui/Buttons/open-window": {
"title": "$:/core/ui/Buttons/open-window",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/open-window}} {{$:/language/Buttons/OpenWindow/Caption}}",
"description": "{{$:/language/Buttons/OpenWindow/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-open-window\" tooltip={{$:/language/Buttons/OpenWindow/Hint}} aria-label={{$:/language/Buttons/OpenWindow/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/open-window}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/OpenWindow/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/permalink": {
"title": "$:/core/ui/Buttons/permalink",
"tags": "$:/tags/ViewToolbar",
"caption": "{{$:/core/images/permalink-button}} {{$:/language/Buttons/Permalink/Caption}}",
"description": "{{$:/language/Buttons/Permalink/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-permalink\" tooltip={{$:/language/Buttons/Permalink/Hint}} aria-label={{$:/language/Buttons/Permalink/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/permalink-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Permalink/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/permaview": {
"title": "$:/core/ui/Buttons/permaview",
"tags": "$:/tags/ViewToolbar $:/tags/PageControls",
"caption": "{{$:/core/images/permaview-button}} {{$:/language/Buttons/Permaview/Caption}}",
"description": "{{$:/language/Buttons/Permaview/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-permaview\" tooltip={{$:/language/Buttons/Permaview/Hint}} aria-label={{$:/language/Buttons/Permaview/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/permaview-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Permaview/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/DefaultTiddlers": {
"title": "$:/DefaultTiddlers",
"text": "GettingStarted\n"
},
"$:/temp/advancedsearch": {
"title": "$:/temp/advancedsearch",
"text": ""
},
"$:/snippets/allfields": {
"title": "$:/snippets/allfields",
"text": "\\define renderfield(title)\n<tr class=\"tc-view-field\"><td class=\"tc-view-field-name\">''$title$'':</td><td class=\"tc-view-field-value\">//{{$:/language/Docs/Fields/$title$}}//</td></tr>\n\\end\n<table class=\"tc-view-field-table\"><tbody><$list filter=\"[fields[]sort[title]]\" variable=\"listItem\"><$macrocall $name=\"renderfield\" title=<<listItem>>/></$list>\n</tbody></table>\n"
},
"$:/config/AnimationDuration": {
"title": "$:/config/AnimationDuration",
"text": "400"
},
"$:/config/AutoFocus": {
"title": "$:/config/AutoFocus",
"text": "title"
},
"$:/config/AutoSave": {
"title": "$:/config/AutoSave",
"text": "yes"
},
"$:/config/BitmapEditor/Colour": {
"title": "$:/config/BitmapEditor/Colour",
"text": "#444"
},
"$:/config/BitmapEditor/ImageSizes": {
"title": "$:/config/BitmapEditor/ImageSizes",
"text": "[[62px 100px]] [[100px 62px]] [[124px 200px]] [[200px 124px]] [[248px 400px]] [[371px 600px]] [[400px 248px]] [[556px 900px]] [[600px 371px]] [[742px 1200px]] [[900px 556px]] [[1200px 742px]]"
},
"$:/config/BitmapEditor/LineWidth": {
"title": "$:/config/BitmapEditor/LineWidth",
"text": "3px"
},
"$:/config/BitmapEditor/LineWidths": {
"title": "$:/config/BitmapEditor/LineWidths",
"text": "0.25px 0.5px 1px 2px 3px 4px 6px 8px 10px 16px 20px 28px 40px 56px 80px"
},
"$:/config/BitmapEditor/Opacities": {
"title": "$:/config/BitmapEditor/Opacities",
"text": "0.01 0.025 0.05 0.075 0.1 0.15 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0"
},
"$:/config/BitmapEditor/Opacity": {
"title": "$:/config/BitmapEditor/Opacity",
"text": "1.0"
},
"$:/config/DefaultMoreSidebarTab": {
"title": "$:/config/DefaultMoreSidebarTab",
"text": "$:/core/ui/MoreSideBar/Tags"
},
"$:/config/DefaultSidebarTab": {
"title": "$:/config/DefaultSidebarTab",
"text": "$:/core/ui/SideBar/Open"
},
"$:/config/DownloadSaver/AutoSave": {
"title": "$:/config/DownloadSaver/AutoSave",
"text": "no"
},
"$:/config/Drafts/TypingTimeout": {
"title": "$:/config/Drafts/TypingTimeout",
"text": "400"
},
"$:/config/EditTemplateFields/Visibility/title": {
"title": "$:/config/EditTemplateFields/Visibility/title",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/tags": {
"title": "$:/config/EditTemplateFields/Visibility/tags",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/text": {
"title": "$:/config/EditTemplateFields/Visibility/text",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/creator": {
"title": "$:/config/EditTemplateFields/Visibility/creator",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/created": {
"title": "$:/config/EditTemplateFields/Visibility/created",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/modified": {
"title": "$:/config/EditTemplateFields/Visibility/modified",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/modifier": {
"title": "$:/config/EditTemplateFields/Visibility/modifier",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/type": {
"title": "$:/config/EditTemplateFields/Visibility/type",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/draft.title": {
"title": "$:/config/EditTemplateFields/Visibility/draft.title",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/draft.of": {
"title": "$:/config/EditTemplateFields/Visibility/draft.of",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/revision": {
"title": "$:/config/EditTemplateFields/Visibility/revision",
"text": "hide"
},
"$:/config/EditTemplateFields/Visibility/bag": {
"title": "$:/config/EditTemplateFields/Visibility/bag",
"text": "hide"
},
"$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-4": {
"title": "$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-4",
"text": "hide"
},
"$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-5": {
"title": "$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-5",
"text": "hide"
},
"$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-6": {
"title": "$:/config/EditorToolbarButtons/Visibility/$:/core/ui/EditorToolbar/heading-6",
"text": "hide"
},
"$:/config/EditorTypeMappings/image/gif": {
"title": "$:/config/EditorTypeMappings/image/gif",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/image/webp": {
"title": "$:/config/EditorTypeMappings/image/webp",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/image/heic": {
"title": "$:/config/EditorTypeMappings/image/heic",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/image/heif": {
"title": "$:/config/EditorTypeMappings/image/heif",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/image/jpeg": {
"title": "$:/config/EditorTypeMappings/image/jpeg",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/image/jpg": {
"title": "$:/config/EditorTypeMappings/image/jpg",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/image/png": {
"title": "$:/config/EditorTypeMappings/image/png",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/image/x-icon": {
"title": "$:/config/EditorTypeMappings/image/x-icon",
"text": "bitmap"
},
"$:/config/EditorTypeMappings/text/vnd.tiddlywiki": {
"title": "$:/config/EditorTypeMappings/text/vnd.tiddlywiki",
"text": "text"
},
"$:/config/Manager/Show": {
"title": "$:/config/Manager/Show",
"text": "tiddlers"
},
"$:/config/Manager/Filter": {
"title": "$:/config/Manager/Filter",
"text": ""
},
"$:/config/Manager/Order": {
"title": "$:/config/Manager/Order",
"text": "forward"
},
"$:/config/Manager/Sort": {
"title": "$:/config/Manager/Sort",
"text": "title"
},
"$:/config/Manager/System": {
"title": "$:/config/Manager/System",
"text": "system"
},
"$:/config/Manager/Tag": {
"title": "$:/config/Manager/Tag",
"text": ""
},
"$:/state/popup/manager/item/$:/Manager/ItemMain/RawText": {
"title": "$:/state/popup/manager/item/$:/Manager/ItemMain/RawText",
"text": "hide"
},
"$:/config/MissingLinks": {
"title": "$:/config/MissingLinks",
"text": "yes"
},
"$:/config/Navigation/UpdateAddressBar": {
"title": "$:/config/Navigation/UpdateAddressBar",
"text": "no"
},
"$:/config/Navigation/UpdateHistory": {
"title": "$:/config/Navigation/UpdateHistory",
"text": "no"
},
"$:/config/NewImageType": {
"title": "$:/config/NewImageType",
"text": "jpeg"
},
"$:/config/OfficialPluginLibrary": {
"title": "$:/config/OfficialPluginLibrary",
"tags": "$:/tags/PluginLibrary",
"url": "https://tiddlywiki.com/library/v5.1.22/index.html",
"caption": "{{$:/language/OfficialPluginLibrary}}",
"text": "{{$:/language/OfficialPluginLibrary/Hint}}\n"
},
"$:/config/Navigation/openLinkFromInsideRiver": {
"title": "$:/config/Navigation/openLinkFromInsideRiver",
"text": "below"
},
"$:/config/Navigation/openLinkFromOutsideRiver": {
"title": "$:/config/Navigation/openLinkFromOutsideRiver",
"text": "top"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/advanced-search": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/advanced-search",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/close-all": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/close-all",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/encryption": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/encryption",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/export-page": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/export-page",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/fold-all": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/fold-all",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/full-screen": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/full-screen",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/home": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/home",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/refresh": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/refresh",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/import": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/import",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/language": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/language",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/tag-manager": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/tag-manager",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/manager": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/manager",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/more-page-actions": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/more-page-actions",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-journal": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-journal",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-image": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/new-image",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/palette": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/palette",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/permaview": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/permaview",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/print": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/print",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/storyview": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/storyview",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/timestamp": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/timestamp",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/theme": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/theme",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/unfold-all": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/unfold-all",
"text": "hide"
},
"$:/config/Performance/Instrumentation": {
"title": "$:/config/Performance/Instrumentation",
"text": "no"
},
"$:/config/RegisterPluginType/plugin": {
"title": "$:/config/RegisterPluginType/plugin",
"text": "yes"
},
"$:/config/RegisterPluginType/theme": {
"title": "$:/config/RegisterPluginType/theme",
"text": "no"
},
"$:/config/RegisterPluginType/language": {
"title": "$:/config/RegisterPluginType/language",
"text": "no"
},
"$:/config/RegisterPluginType/info": {
"title": "$:/config/RegisterPluginType/info",
"text": "no"
},
"$:/config/RegisterPluginType/import": {
"title": "$:/config/RegisterPluginType/import",
"text": "no"
},
"$:/config/SaveWikiButton/Template": {
"title": "$:/config/SaveWikiButton/Template",
"text": "$:/core/save/all"
},
"$:/config/SaverFilter": {
"title": "$:/config/SaverFilter",
"text": "[all[]] -[[$:/HistoryList]] -[[$:/StoryList]] -[[$:/Import]] -[[$:/isEncrypted]] -[[$:/UploadName]] -[prefix[$:/state/]] -[prefix[$:/temp/]]"
},
"$:/config/Search/AutoFocus": {
"title": "$:/config/Search/AutoFocus",
"text": "true"
},
"$:/config/Search/MinLength": {
"title": "$:/config/Search/MinLength",
"text": "3"
},
"$:/config/SearchResults/Default": {
"title": "$:/config/SearchResults/Default",
"text": "$:/core/ui/DefaultSearchResultList"
},
"$:/config/Server/ExternalFilters/[all[tiddlers]!is[system]sort[title]]": {
"title": "$:/config/Server/ExternalFilters/[all[tiddlers]!is[system]sort[title]]",
"text": "yes"
},
"$:/config/ShortcutInfo/add-field": {
"title": "$:/config/ShortcutInfo/add-field",
"text": "{{$:/language/EditTemplate/Fields/Add/Button/Hint}}"
},
"$:/config/ShortcutInfo/advanced-search": {
"title": "$:/config/ShortcutInfo/advanced-search",
"text": "{{$:/language/Buttons/AdvancedSearch/Hint}}"
},
"$:/config/ShortcutInfo/bold": {
"title": "$:/config/ShortcutInfo/bold",
"text": "{{$:/language/Buttons/Bold/Hint}}"
},
"$:/config/ShortcutInfo/cancel-edit-tiddler": {
"title": "$:/config/ShortcutInfo/cancel-edit-tiddler",
"text": "{{$:/language/Buttons/Cancel/Hint}}"
},
"$:/config/ShortcutInfo/excise": {
"title": "$:/config/ShortcutInfo/excise",
"text": "{{$:/language/Buttons/Excise/Hint}}"
},
"$:/config/ShortcutInfo/heading-1": {
"title": "$:/config/ShortcutInfo/heading-1",
"text": "{{$:/language/Buttons/Heading1/Hint}}"
},
"$:/config/ShortcutInfo/heading-2": {
"title": "$:/config/ShortcutInfo/heading-2",
"text": "{{$:/language/Buttons/Heading2/Hint}}"
},
"$:/config/ShortcutInfo/heading-3": {
"title": "$:/config/ShortcutInfo/heading-3",
"text": "{{$:/language/Buttons/Heading3/Hint}}"
},
"$:/config/ShortcutInfo/heading-4": {
"title": "$:/config/ShortcutInfo/heading-4",
"text": "{{$:/language/Buttons/Heading4/Hint}}"
},
"$:/config/ShortcutInfo/heading-5": {
"title": "$:/config/ShortcutInfo/heading-5",
"text": "{{$:/language/Buttons/Heading5/Hint}}"
},
"$:/config/ShortcutInfo/heading-6": {
"title": "$:/config/ShortcutInfo/heading-6",
"text": "{{$:/language/Buttons/Heading6/Hint}}"
},
"$:/config/ShortcutInfo/italic": {
"title": "$:/config/ShortcutInfo/italic",
"text": "{{$:/language/Buttons/Italic/Hint}}"
},
"$:/config/ShortcutInfo/link": {
"title": "$:/config/ShortcutInfo/link",
"text": "{{$:/language/Buttons/Link/Hint}}"
},
"$:/config/ShortcutInfo/list-bullet": {
"title": "$:/config/ShortcutInfo/list-bullet",
"text": "{{$:/language/Buttons/ListBullet/Hint}}"
},
"$:/config/ShortcutInfo/list-number": {
"title": "$:/config/ShortcutInfo/list-number",
"text": "{{$:/language/Buttons/ListNumber/Hint}}"
},
"$:/config/ShortcutInfo/mono-block": {
"title": "$:/config/ShortcutInfo/mono-block",
"text": "{{$:/language/Buttons/MonoBlock/Hint}}"
},
"$:/config/ShortcutInfo/mono-line": {
"title": "$:/config/ShortcutInfo/mono-line",
"text": "{{$:/language/Buttons/MonoLine/Hint}}"
},
"$:/config/ShortcutInfo/new-image": {
"title": "$:/config/ShortcutInfo/new-image",
"text": "{{$:/language/Buttons/NewImage/Hint}}"
},
"$:/config/ShortcutInfo/new-journal": {
"title": "$:/config/ShortcutInfo/new-journal",
"text": "{{$:/language/Buttons/NewJournal/Hint}}"
},
"$:/config/ShortcutInfo/new-tiddler": {
"title": "$:/config/ShortcutInfo/new-tiddler",
"text": "{{$:/language/Buttons/NewTiddler/Hint}}"
},
"$:/config/ShortcutInfo/picture": {
"title": "$:/config/ShortcutInfo/picture",
"text": "{{$:/language/Buttons/Picture/Hint}}"
},
"$:/config/ShortcutInfo/preview": {
"title": "$:/config/ShortcutInfo/preview",
"text": "{{$:/language/Buttons/Preview/Hint}}"
},
"$:/config/ShortcutInfo/quote": {
"title": "$:/config/ShortcutInfo/quote",
"text": "{{$:/language/Buttons/Quote/Hint}}"
},
"$:/config/ShortcutInfo/save-tiddler": {
"title": "$:/config/ShortcutInfo/save-tiddler",
"text": "{{$:/language/Buttons/Save/Hint}}"
},
"$:/config/ShortcutInfo/sidebar-search": {
"title": "$:/config/ShortcutInfo/sidebar-search",
"text": "{{$:/language/Buttons/SidebarSearch/Hint}}"
},
"$:/config/ShortcutInfo/stamp": {
"title": "$:/config/ShortcutInfo/stamp",
"text": "{{$:/language/Buttons/Stamp/Hint}}"
},
"$:/config/ShortcutInfo/strikethrough": {
"title": "$:/config/ShortcutInfo/strikethrough",
"text": "{{$:/language/Buttons/Strikethrough/Hint}}"
},
"$:/config/ShortcutInfo/subscript": {
"title": "$:/config/ShortcutInfo/subscript",
"text": "{{$:/language/Buttons/Subscript/Hint}}"
},
"$:/config/ShortcutInfo/superscript": {
"title": "$:/config/ShortcutInfo/superscript",
"text": "{{$:/language/Buttons/Superscript/Hint}}"
},
"$:/config/ShortcutInfo/toggle-sidebar": {
"title": "$:/config/ShortcutInfo/toggle-sidebar",
"text": "{{$:/language/Buttons/ToggleSidebar/Hint}}"
},
"$:/config/ShortcutInfo/underline": {
"title": "$:/config/ShortcutInfo/underline",
"text": "{{$:/language/Buttons/Underline/Hint}}"
},
"$:/config/SyncFilter": {
"title": "$:/config/SyncFilter",
"text": "[is[tiddler]] -[[$:/HistoryList]] -[[$:/Import]] -[[$:/isEncrypted]] -[prefix[$:/status/]] -[prefix[$:/state/]] -[prefix[$:/temp/]]"
},
"$:/config/Tags/MinLength": {
"title": "$:/config/Tags/MinLength",
"text": "0"
},
"$:/config/TextEditor/EditorHeight/Height": {
"title": "$:/config/TextEditor/EditorHeight/Height",
"text": "400px"
},
"$:/config/TextEditor/EditorHeight/Mode": {
"title": "$:/config/TextEditor/EditorHeight/Mode",
"text": "auto"
},
"$:/config/TiddlerInfo/Default": {
"title": "$:/config/TiddlerInfo/Default",
"text": "$:/core/ui/TiddlerInfo/Fields"
},
"$:/config/TiddlerInfo/Mode": {
"title": "$:/config/TiddlerInfo/Mode",
"text": "popup"
},
"$:/config/Tiddlers/TitleLinks": {
"title": "$:/config/Tiddlers/TitleLinks",
"text": "no"
},
"$:/config/Toolbar/ButtonClass": {
"title": "$:/config/Toolbar/ButtonClass",
"text": "tc-btn-invisible"
},
"$:/config/Toolbar/Icons": {
"title": "$:/config/Toolbar/Icons",
"text": "yes"
},
"$:/config/Toolbar/Text": {
"title": "$:/config/Toolbar/Text",
"text": "no"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/clone": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/clone",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/close-others": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/close-others",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/export-tiddler": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/export-tiddler",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/info": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/info",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/more-tiddler-actions": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/more-tiddler-actions",
"text": "show"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-here": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-here",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-journal-here": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/new-journal-here",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/open-window": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/open-window",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permalink": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permalink",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permaview": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/permaview",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/delete": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/delete",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-bar": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-bar",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-others": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/fold-others",
"text": "hide"
},
"$:/config/shortcuts-mac/bold": {
"title": "$:/config/shortcuts-mac/bold",
"text": "meta-B"
},
"$:/config/shortcuts-mac/italic": {
"title": "$:/config/shortcuts-mac/italic",
"text": "meta-I"
},
"$:/config/shortcuts-mac/underline": {
"title": "$:/config/shortcuts-mac/underline",
"text": "meta-U"
},
"$:/config/shortcuts-mac/new-image": {
"title": "$:/config/shortcuts-mac/new-image",
"text": "ctrl-I"
},
"$:/config/shortcuts-mac/new-journal": {
"title": "$:/config/shortcuts-mac/new-journal",
"text": "ctrl-J"
},
"$:/config/shortcuts-mac/new-tiddler": {
"title": "$:/config/shortcuts-mac/new-tiddler",
"text": "ctrl-N"
},
"$:/config/shortcuts-not-mac/bold": {
"title": "$:/config/shortcuts-not-mac/bold",
"text": "ctrl-B"
},
"$:/config/shortcuts-not-mac/italic": {
"title": "$:/config/shortcuts-not-mac/italic",
"text": "ctrl-I"
},
"$:/config/shortcuts-not-mac/underline": {
"title": "$:/config/shortcuts-not-mac/underline",
"text": "ctrl-U"
},
"$:/config/shortcuts-not-mac/new-image": {
"title": "$:/config/shortcuts-not-mac/new-image",
"text": "alt-I"
},
"$:/config/shortcuts-not-mac/new-journal": {
"title": "$:/config/shortcuts-not-mac/new-journal",
"text": "alt-J"
},
"$:/config/shortcuts-not-mac/new-tiddler": {
"title": "$:/config/shortcuts-not-mac/new-tiddler",
"text": "alt-N"
},
"$:/config/shortcuts/add-field": {
"title": "$:/config/shortcuts/add-field",
"text": "enter"
},
"$:/config/shortcuts/advanced-search": {
"title": "$:/config/shortcuts/advanced-search",
"text": "ctrl-shift-A"
},
"$:/config/shortcuts/cancel-edit-tiddler": {
"title": "$:/config/shortcuts/cancel-edit-tiddler",
"text": "escape"
},
"$:/config/shortcuts/excise": {
"title": "$:/config/shortcuts/excise",
"text": "ctrl-E"
},
"$:/config/shortcuts/sidebar-search": {
"title": "$:/config/shortcuts/sidebar-search",
"text": "ctrl-shift-F"
},
"$:/config/shortcuts/heading-1": {
"title": "$:/config/shortcuts/heading-1",
"text": "ctrl-1"
},
"$:/config/shortcuts/heading-2": {
"title": "$:/config/shortcuts/heading-2",
"text": "ctrl-2"
},
"$:/config/shortcuts/heading-3": {
"title": "$:/config/shortcuts/heading-3",
"text": "ctrl-3"
},
"$:/config/shortcuts/heading-4": {
"title": "$:/config/shortcuts/heading-4",
"text": "ctrl-4"
},
"$:/config/shortcuts/heading-5": {
"title": "$:/config/shortcuts/heading-5",
"text": "ctrl-5"
},
"$:/config/shortcuts/heading-6": {
"title": "$:/config/shortcuts/heading-6",
"text": "ctrl-6"
},
"$:/config/shortcuts/link": {
"title": "$:/config/shortcuts/link",
"text": "ctrl-L"
},
"$:/config/shortcuts/linkify": {
"title": "$:/config/shortcuts/linkify",
"text": "alt-shift-L"
},
"$:/config/shortcuts/list-bullet": {
"title": "$:/config/shortcuts/list-bullet",
"text": "ctrl-shift-L"
},
"$:/config/shortcuts/list-number": {
"title": "$:/config/shortcuts/list-number",
"text": "ctrl-shift-N"
},
"$:/config/shortcuts/mono-block": {
"title": "$:/config/shortcuts/mono-block",
"text": "ctrl-shift-M"
},
"$:/config/shortcuts/mono-line": {
"title": "$:/config/shortcuts/mono-line",
"text": "ctrl-M"
},
"$:/config/shortcuts/picture": {
"title": "$:/config/shortcuts/picture",
"text": "ctrl-shift-I"
},
"$:/config/shortcuts/preview": {
"title": "$:/config/shortcuts/preview",
"text": "alt-P"
},
"$:/config/shortcuts/quote": {
"title": "$:/config/shortcuts/quote",
"text": "ctrl-Q"
},
"$:/config/shortcuts/save-tiddler": {
"title": "$:/config/shortcuts/save-tiddler",
"text": "ctrl+enter"
},
"$:/config/shortcuts/stamp": {
"title": "$:/config/shortcuts/stamp",
"text": "ctrl-S"
},
"$:/config/shortcuts/strikethrough": {
"title": "$:/config/shortcuts/strikethrough",
"text": "ctrl-T"
},
"$:/config/shortcuts/subscript": {
"title": "$:/config/shortcuts/subscript",
"text": "ctrl-shift-B"
},
"$:/config/shortcuts/superscript": {
"title": "$:/config/shortcuts/superscript",
"text": "ctrl-shift-P"
},
"$:/config/shortcuts/toggle-sidebar": {
"title": "$:/config/shortcuts/toggle-sidebar",
"text": "alt-shift-S"
},
"$:/config/shortcuts/transcludify": {
"title": "$:/config/shortcuts/transcludify",
"text": "alt-shift-T"
},
"$:/config/ui/EditTemplate": {
"title": "$:/config/ui/EditTemplate",
"text": "$:/core/ui/EditTemplate"
},
"$:/config/ui/ViewTemplate": {
"title": "$:/config/ui/ViewTemplate",
"text": "$:/core/ui/ViewTemplate"
},
"$:/config/WikiParserRules/Inline/wikilink": {
"title": "$:/config/WikiParserRules/Inline/wikilink",
"text": "enable"
},
"$:/snippets/currpalettepreview": {
"title": "$:/snippets/currpalettepreview",
"text": "\\define swatchStyle()\nbackground-color: $(swatchColour)$;\n\\end\n\\define swatch()\n<$set name=\"swatchColour\" value={{##$(colour)$}}\n><div class=\"tc-swatch\" style=<<swatchStyle>> title=<<colour>>/></$set>\n\\end\n<div class=\"tc-swatches-horiz\"><$list filter=\"\nforeground\nbackground\nmuted-foreground\nprimary\npage-background\ntab-background\ntiddler-info-background\n\" variable=\"colour\"><<swatch>></$list></div>"
},
"$:/snippets/download-wiki-button": {
"title": "$:/snippets/download-wiki-button",
"text": "\\define lingo-base() $:/language/ControlPanel/Tools/Download/\n<$button class=\"tc-btn-big-green\">\n<$action-sendmessage $message=\"tm-download-file\" $param=\"$:/core/save/all\" filename=\"index.html\"/>\n<<lingo Full/Caption>> {{$:/core/images/save-button}}\n</$button>"
},
"$:/language": {
"title": "$:/language",
"text": "$:/languages/en-GB"
},
"$:/snippets/languageswitcher": {
"title": "$:/snippets/languageswitcher",
"text": "\\define flag-title()\n$(languagePluginTitle)$/icon\n\\end\n\n<$linkcatcher to=\"$:/language\">\n<div class=\"tc-chooser tc-language-chooser\">\n<$list filter=\"[[$:/languages/en-GB]] [plugin-type[language]sort[description]]\">\n<$set name=\"cls\" filter=\"[all[current]field:title{$:/language}]\" value=\"tc-chooser-item tc-chosen\" emptyValue=\"tc-chooser-item\"><div class=<<cls>>>\n<$link>\n<span class=\"tc-image-button\">\n<$set name=\"languagePluginTitle\" value=<<currentTiddler>>>\n<$transclude subtiddler=<<flag-title>>>\n<$list filter=\"[all[current]field:title[$:/languages/en-GB]]\">\n<$transclude tiddler=\"$:/languages/en-GB/icon\"/>\n</$list>\n</$transclude>\n</$set>\n</span>\n<$view field=\"description\">\n<$view field=\"name\">\n<$view field=\"title\"/>\n</$view>\n</$view>\n</$link>\n</div>\n</$set>\n</$list>\n</div>\n</$linkcatcher>"
},
"$:/core/macros/CSS": {
"title": "$:/core/macros/CSS",
"tags": "$:/tags/Macro",
"text": "\\define colour(name)\n<$transclude tiddler={{$:/palette}} index=\"$name$\"><$transclude tiddler=\"$:/palettes/Vanilla\" index=\"$name$\"><$transclude tiddler=\"$:/config/DefaultColourMappings/$name$\"/></$transclude></$transclude>\n\\end\n\n\\define color(name)\n<<colour $name$>>\n\\end\n\n\\define box-shadow(shadow)\n``\n -webkit-box-shadow: $shadow$;\n -moz-box-shadow: $shadow$;\n box-shadow: $shadow$;\n``\n\\end\n\n\\define filter(filter)\n``\n -webkit-filter: $filter$;\n -moz-filter: $filter$;\n filter: $filter$;\n``\n\\end\n\n\\define transition(transition)\n``\n -webkit-transition: $transition$;\n -moz-transition: $transition$;\n transition: $transition$;\n``\n\\end\n\n\\define transform-origin(origin)\n``\n -webkit-transform-origin: $origin$;\n -moz-transform-origin: $origin$;\n transform-origin: $origin$;\n``\n\\end\n\n\\define background-linear-gradient(gradient)\n``\nbackground-image: linear-gradient($gradient$);\nbackground-image: -o-linear-gradient($gradient$);\nbackground-image: -moz-linear-gradient($gradient$);\nbackground-image: -webkit-linear-gradient($gradient$);\nbackground-image: -ms-linear-gradient($gradient$);\n``\n\\end\n\n\\define column-count(columns)\n``\n-moz-column-count: $columns$;\n-webkit-column-count: $columns$;\ncolumn-count: $columns$;\n``\n\\end\n\n\\define datauri(title)\n<$macrocall $name=\"makedatauri\" type={{$title$!!type}} text={{$title$}} _canonical_uri={{$title$!!_canonical_uri}}/>\n\\end\n\n\\define if-sidebar(text)\n<$reveal state=\"$:/state/sidebar\" type=\"match\" text=\"yes\" default=\"yes\">$text$</$reveal>\n\\end\n\n\\define if-no-sidebar(text)\n<$reveal state=\"$:/state/sidebar\" type=\"nomatch\" text=\"yes\" default=\"yes\">$text$</$reveal>\n\\end\n\n\\define if-background-attachment(text)\n<$reveal state=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\" type=\"nomatch\" text=\"\">$text$</$reveal>\n\\end\n"
},
"$:/core/macros/colour-picker": {
"title": "$:/core/macros/colour-picker",
"tags": "$:/tags/Macro",
"text": "\\define colour-picker-update-recent()\n<$action-listops\n\t$tiddler=\"$:/config/ColourPicker/Recent\"\n\t$subfilter=\"$(colour-picker-value)$ [list[$:/config/ColourPicker/Recent]remove[$(colour-picker-value)$]] +[limit[8]]\"\n/>\n\\end\n\n\\define colour-picker-inner(actions)\n<$button tag=\"a\" tooltip=\"\"\"$(colour-picker-value)$\"\"\">\n\n$(colour-picker-update-recent)$\n\n$actions$\n\n<span style=\"display:inline-block; background-color: $(colour-picker-value)$; width: 100%; height: 100%; border-radius: 50%;\"/>\n\n</$button>\n\\end\n\n\\define colour-picker-recent-inner(actions)\n<$set name=\"colour-picker-value\" value=\"$(recentColour)$\">\n<$macrocall $name=\"colour-picker-inner\" actions=\"\"\"$actions$\"\"\"/>\n</$set>\n\\end\n\n\\define colour-picker-recent(actions)\n{{$:/language/ColourPicker/Recent}} <$list filter=\"[list[$:/config/ColourPicker/Recent]]\" variable=\"recentColour\">\n<$macrocall $name=\"colour-picker-recent-inner\" actions=\"\"\"$actions$\"\"\"/></$list>\n\\end\n\n\\define colour-picker(actions)\n<div class=\"tc-colour-chooser\">\n\n<$macrocall $name=\"colour-picker-recent\" actions=\"\"\"$actions$\"\"\"/>\n\n---\n\n<$list filter=\"LightPink Pink Crimson LavenderBlush PaleVioletRed HotPink DeepPink MediumVioletRed Orchid Thistle Plum Violet Magenta Fuchsia DarkMagenta Purple MediumOrchid DarkViolet DarkOrchid Indigo BlueViolet MediumPurple MediumSlateBlue SlateBlue DarkSlateBlue Lavender GhostWhite Blue MediumBlue MidnightBlue DarkBlue Navy RoyalBlue CornflowerBlue LightSteelBlue LightSlateGrey SlateGrey DodgerBlue AliceBlue SteelBlue LightSkyBlue SkyBlue DeepSkyBlue LightBlue PowderBlue CadetBlue Azure LightCyan PaleTurquoise Cyan Aqua DarkTurquoise DarkSlateGrey DarkCyan Teal MediumTurquoise LightSeaGreen Turquoise Aquamarine MediumAquamarine MediumSpringGreen MintCream SpringGreen MediumSeaGreen SeaGreen Honeydew LightGreen PaleGreen DarkSeaGreen LimeGreen Lime ForestGreen Green DarkGreen Chartreuse LawnGreen GreenYellow DarkOliveGreen YellowGreen OliveDrab Beige LightGoldenrodYellow Ivory LightYellow Yellow Olive DarkKhaki LemonChiffon PaleGoldenrod Khaki Gold Cornsilk Goldenrod DarkGoldenrod FloralWhite OldLace Wheat Moccasin Orange PapayaWhip BlanchedAlmond NavajoWhite AntiqueWhite Tan BurlyWood Bisque DarkOrange Linen Peru PeachPuff SandyBrown Chocolate SaddleBrown Seashell Sienna LightSalmon Coral OrangeRed DarkSalmon Tomato MistyRose Salmon Snow LightCoral RosyBrown IndianRed Red Brown FireBrick DarkRed Maroon White WhiteSmoke Gainsboro LightGrey Silver DarkGrey Grey DimGrey Black\" variable=\"colour-picker-value\">\n<$macrocall $name=\"colour-picker-inner\" actions=\"\"\"$actions$\"\"\"/>\n</$list>\n\n---\n\n<$edit-text tiddler=\"$:/config/ColourPicker/New\" tag=\"input\" default=\"\" placeholder=\"\"/>\n<$edit-text tiddler=\"$:/config/ColourPicker/New\" type=\"color\" tag=\"input\"/>\n<$set name=\"colour-picker-value\" value={{$:/config/ColourPicker/New}}>\n<$macrocall $name=\"colour-picker-inner\" actions=\"\"\"$actions$\"\"\"/>\n</$set>\n\n</div>\n\n\\end\n"
},
"$:/core/macros/copy-to-clipboard": {
"title": "$:/core/macros/copy-to-clipboard",
"tags": "$:/tags/Macro",
"text": "\\define copy-to-clipboard(src,class:\"tc-btn-invisible\",style)\n<$button class=<<__class__>> style=<<__style__>> message=\"tm-copy-to-clipboard\" param=<<__src__>> tooltip={{$:/language/Buttons/CopyToClipboard/Hint}}>\n{{$:/core/images/copy-clipboard}} <$text text={{$:/language/Buttons/CopyToClipboard/Caption}}/>\n</$button>\n\\end\n\n\\define copy-to-clipboard-above-right(src,class:\"tc-btn-invisible\",style)\n<div style=\"position: relative;\">\n<div style=\"position: absolute; bottom: 0; right: 0;\">\n<$macrocall $name=\"copy-to-clipboard\" src=<<__src__>> class=<<__class__>> style=<<__style__>>/>\n</div>\n</div>\n\\end\n\n"
},
"$:/core/macros/diff": {
"title": "$:/core/macros/diff",
"tags": "$:/tags/Macro",
"text": "\\define compareTiddlerText(sourceTiddlerTitle,sourceSubTiddlerTitle,destTiddlerTitle,destSubTiddlerTitle)\n<$set name=\"source\" tiddler=<<__sourceTiddlerTitle__>> subtiddler=<<__sourceSubTiddlerTitle__>>>\n<$set name=\"dest\" tiddler=<<__destTiddlerTitle__>> subtiddler=<<__destSubTiddlerTitle__>>>\n<$diff-text source=<<source>> dest=<<dest>>/>\n</$set>\n</$set>\n\\end\n\n\\define compareTiddlers(sourceTiddlerTitle,sourceSubTiddlerTitle,destTiddlerTitle,destSubTiddlerTitle,exclude)\n<table class=\"tc-diff-tiddlers\">\n<tbody>\n<$set name=\"sourceFields\" filter=\"[<__sourceTiddlerTitle__>fields[]sort[]]\">\n<$set name=\"destFields\" filter=\"[<__destSubTiddlerTitle__>subtiddlerfields<__destTiddlerTitle__>sort[]]\">\n<$list filter=\"[enlist<sourceFields>] [enlist<destFields>] -[enlist<__exclude__>] +[sort[]]\" variable=\"fieldName\">\n<tr>\n<th>\n<$text text=<<fieldName>>/> \n</th>\n<td>\n<$set name=\"source\" tiddler=<<__sourceTiddlerTitle__>> subtiddler=<<__sourceSubTiddlerTitle__>> field=<<fieldName>>>\n<$set name=\"dest\" tiddler=<<__destTiddlerTitle__>> subtiddler=<<__destSubTiddlerTitle__>> field=<<fieldName>>>\n<$diff-text source=<<source>> dest=<<dest>>>\n</$diff-text>\n</$set>\n</$set>\n</td>\n</tr>\n</$list>\n</$set>\n</$set>\n</tbody>\n</table>\n\\end\n"
},
"$:/core/macros/dumpvariables": {
"title": "$:/core/macros/dumpvariables",
"tags": "$:/tags/Macro",
"text": "\\define dumpvariables()\n<ul>\n<$list filter=\"[variables[]]\" variable=\"varname\">\n<li>\n<strong><code><$text text=<<varname>>/></code></strong>:<br/>\n<$codeblock code={{{ [<varname>getvariable[]] }}}/>\n</li>\n</$list>\n</ul>\n\\end\n"
},
"$:/core/macros/export": {
"title": "$:/core/macros/export",
"tags": "$:/tags/Macro",
"text": "\\define exportButtonFilename(baseFilename)\n$baseFilename$$(extension)$\n\\end\n\n\\define exportButton(exportFilter:\"[!is[system]sort[title]]\",lingoBase,baseFilename:\"tiddlers\")\n<span class=\"tc-popup-keep\"><$button popup=<<qualify \"$:/state/popup/export\">> tooltip={{$lingoBase$Hint}} aria-label={{$lingoBase$Caption}} class=<<tv-config-toolbar-class>> selectedClass=\"tc-selected\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/export-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$lingoBase$Caption}}/></span>\n</$list>\n</$button></span><$reveal state=<<qualify \"$:/state/popup/export\">> type=\"popup\" position=\"below\" animate=\"yes\">\n<div class=\"tc-drop-down\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Exporter]]\">\n<$set name=\"extension\" value={{!!extension}}>\n<$button class=\"tc-btn-invisible\">\n<$action-sendmessage $message=\"tm-download-file\" $param=<<currentTiddler>> exportFilter=\"\"\"$exportFilter$\"\"\" filename=<<exportButtonFilename \"\"\"$baseFilename$\"\"\">>/>\n<$action-deletetiddler $tiddler=<<qualify \"$:/state/popup/export\">>/>\n<$transclude field=\"description\"/>\n</$button>\n</$set>\n</$list>\n</div>\n</$reveal>\n\\end\n"
},
"$:/core/macros/image-picker": {
"title": "$:/core/macros/image-picker",
"created": "20170715180840889",
"modified": "20170715180914005",
"tags": "$:/tags/Macro",
"type": "text/vnd.tiddlywiki",
"text": "\\define image-picker-thumbnail(actions)\n<$button tag=\"a\" tooltip=\"\"\"$(imageTitle)$\"\"\">\n$actions$\n<$transclude tiddler=<<imageTitle>>/>\n</$button>\n\\end\n\n\\define image-picker-list(filter,actions)\n<$list filter=\"\"\"$filter$\"\"\" variable=\"imageTitle\">\n<$macrocall $name=\"image-picker-thumbnail\" actions=\"\"\"$actions$\"\"\"/>\n</$list>\n\\end\n\n\\define image-picker(actions,filter:\"[all[shadows+tiddlers]is[image]] -[type[application/pdf]] +[!has[draft.of]$subfilter$sort[title]]\",subfilter:\"\")\n<div class=\"tc-image-chooser\">\n<$vars state-system=<<qualify \"$:/state/image-picker/system\">>>\n<$checkbox tiddler=<<state-system>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"hide\">\n{{$:/language/SystemTiddlers/Include/Prompt}}\n</$checkbox>\n<$reveal state=<<state-system>> type=\"match\" text=\"hide\" default=\"hide\" tag=\"div\">\n<$macrocall $name=\"image-picker-list\" filter=\"\"\"$filter$ +[!is[system]]\"\"\" actions=\"\"\"$actions$\"\"\"/>\n</$reveal>\n<$reveal state=<<state-system>> type=\"nomatch\" text=\"hide\" default=\"hide\" tag=\"div\">\n<$macrocall $name=\"image-picker-list\" filter=\"\"\"$filter$\"\"\" actions=\"\"\"$actions$\"\"\"/>\n</$reveal>\n</$vars>\n</div>\n\\end\n\n\\define image-picker-include-tagged-images(actions)\n<$macrocall $name=\"image-picker\" filter=\"[all[shadows+tiddlers]is[image]] [all[shadows+tiddlers]tag[$:/tags/Image]] -[type[application/pdf]] +[!has[draft.of]sort[title]]\" actions=\"\"\"$actions$\"\"\"/>\n\\end\n"
},
"$:/core/macros/lingo": {
"title": "$:/core/macros/lingo",
"tags": "$:/tags/Macro",
"text": "\\define lingo-base()\n$:/language/\n\\end\n\n\\define lingo(title)\n{{$(lingo-base)$$title$}}\n\\end\n"
},
"$:/core/macros/list": {
"title": "$:/core/macros/list",
"tags": "$:/tags/Macro",
"text": "\\define list-links(filter,type:\"ul\",subtype:\"li\",class:\"\",emptyMessage)\n\\whitespace trim\n<$type$ class=\"$class$\">\n<$list filter=\"$filter$\" emptyMessage=<<__emptyMessage__>>>\n<$subtype$>\n<$link to={{!!title}}>\n<$transclude field=\"caption\">\n<$view field=\"title\"/>\n</$transclude>\n</$link>\n</$subtype$>\n</$list>\n</$type$>\n\\end\n\n\\define list-links-draggable-drop-actions()\n<$action-listops $tiddler=<<targetTiddler>> $field=<<targetField>> $subfilter=\"+[insertbefore:currentTiddler<actionTiddler>]\"/>\n\\end\n\n\\define list-links-draggable(tiddler,field:\"list\",type:\"ul\",subtype:\"li\",class:\"\",itemTemplate)\n\\whitespace trim\n<span class=\"tc-links-draggable-list\">\n<$vars targetTiddler=\"\"\"$tiddler$\"\"\" targetField=\"\"\"$field$\"\"\">\n<$type$ class=\"$class$\">\n<$list filter=\"[list[$tiddler$!!$field$]]\">\n<$droppable actions=<<list-links-draggable-drop-actions>> tag=\"\"\"$subtype$\"\"\" enable=<<tv-enable-drag-and-drop>>>\n<div class=\"tc-droppable-placeholder\"/>\n<div>\n<$transclude tiddler=\"\"\"$itemTemplate$\"\"\">\n<$link to={{!!title}}>\n<$transclude field=\"caption\">\n<$view field=\"title\"/>\n</$transclude>\n</$link>\n</$transclude>\n</div>\n</$droppable>\n</$list>\n</$type$>\n<$tiddler tiddler=\"\">\n<$droppable actions=<<list-links-draggable-drop-actions>> tag=\"div\" enable=<<tv-enable-drag-and-drop>>>\n<div class=\"tc-droppable-placeholder\">\n \n</div>\n<div style=\"height:0.5em;\"/>\n</$droppable>\n</$tiddler>\n</$vars>\n</span>\n\\end\n\n\\define list-tagged-draggable-drop-actions(tag)\n<!-- Save the current ordering of the tiddlers with this tag -->\n<$set name=\"order\" filter=\"[<__tag__>tagging[]]\">\n<!-- Remove any list-after or list-before fields from the tiddlers with this tag -->\n<$list filter=\"[<__tag__>tagging[]]\">\n<$action-deletefield $field=\"list-before\"/>\n<$action-deletefield $field=\"list-after\"/>\n</$list>\n<!-- Save the new order to the Tag Tiddler -->\n<$action-listops $tiddler=<<__tag__>> $field=\"list\" $filter=\"+[enlist<order>] +[insertbefore:currentTiddler<actionTiddler>]\"/>\n<!-- Make sure the newly added item has the right tag -->\n<!-- Removing this line makes dragging tags within the dropdown work as intended -->\n<!--<$action-listops $tiddler=<<actionTiddler>> $tags=<<__tag__>>/>-->\n<!-- Using the following 5 lines as replacement makes dragging titles from outside into the dropdown apply the tag -->\n<$list filter=\"[<actionTiddler>!contains:tags<__tag__>]\">\n<$fieldmangler tiddler=<<actionTiddler>>>\n<$action-sendmessage $message=\"tm-add-tag\" $param=<<__tag__>>/>\n</$fieldmangler>\n</$list>\n</$set>\n\\end\n\n\\define list-tagged-draggable(tag,subFilter,emptyMessage,itemTemplate,elementTag:\"div\",storyview:\"\")\n\\whitespace trim\n<span class=\"tc-tagged-draggable-list\">\n<$set name=\"tag\" value=<<__tag__>>>\n<$list filter=\"[<__tag__>tagging[]$subFilter$]\" emptyMessage=<<__emptyMessage__>> storyview=<<__storyview__>>>\n<$elementTag$ class=\"tc-menu-list-item\">\n<$droppable actions=\"\"\"<$macrocall $name=\"list-tagged-draggable-drop-actions\" tag=<<__tag__>>/>\"\"\" enable=<<tv-enable-drag-and-drop>>>\n<$elementTag$ class=\"tc-droppable-placeholder\"/>\n<$elementTag$>\n<$transclude tiddler=\"\"\"$itemTemplate$\"\"\">\n<$link to={{!!title}}>\n<$view field=\"title\"/>\n</$link>\n</$transclude>\n</$elementTag$>\n</$droppable>\n</$elementTag$>\n</$list>\n<$tiddler tiddler=\"\">\n<$droppable actions=\"\"\"<$macrocall $name=\"list-tagged-draggable-drop-actions\" tag=<<__tag__>>/>\"\"\" enable=<<tv-enable-drag-and-drop>>>\n<$elementTag$ class=\"tc-droppable-placeholder\"/>\n<$elementTag$ style=\"height:0.5em;\">\n</$elementTag$>\n</$droppable>\n</$tiddler>\n</$set>\n</span>\n\\end\n"
},
"$:/core/macros/tabs": {
"title": "$:/core/macros/tabs",
"tags": "$:/tags/Macro",
"text": "\\define tabs(tabsList,default,state:\"$:/state/tab\",class,template,buttonTemplate,retain)\n<div class=\"tc-tab-set $class$\">\n<div class=\"tc-tab-buttons $class$\">\n<$list filter=\"$tabsList$\" variable=\"currentTab\" storyview=\"pop\"><$set name=\"save-currentTiddler\" value=<<currentTiddler>>><$tiddler tiddler=<<currentTab>>><$button set=<<qualify \"$state$\">> setTo=<<currentTab>> default=\"$default$\" selectedClass=\"tc-tab-selected\" tooltip={{!!tooltip}}>\n<$tiddler tiddler=<<save-currentTiddler>>>\n<$set name=\"tv-wikilinks\" value=\"no\">\n<$transclude tiddler=\"$buttonTemplate$\" mode=\"inline\">\n<$transclude tiddler=<<currentTab>> field=\"caption\">\n<$macrocall $name=\"currentTab\" $type=\"text/plain\" $output=\"text/plain\"/>\n</$transclude>\n</$transclude>\n</$set></$tiddler></$button></$tiddler></$set></$list>\n</div>\n<div class=\"tc-tab-divider $class$\"/>\n<div class=\"tc-tab-content $class$\">\n<$list filter=\"$tabsList$\" variable=\"currentTab\">\n\n<$reveal type=\"match\" state=<<qualify \"$state$\">> text=<<currentTab>> default=\"$default$\" retain=\"\"\"$retain$\"\"\">\n\n<$transclude tiddler=\"$template$\" mode=\"block\">\n\n<$transclude tiddler=<<currentTab>> mode=\"block\"/>\n\n</$transclude>\n\n</$reveal>\n\n</$list>\n</div>\n</div>\n\\end\n"
},
"$:/core/macros/tag-picker": {
"title": "$:/core/macros/tag-picker",
"tags": "$:/tags/Macro",
"text": "\\define add-tag-actions()\n<$action-sendmessage $message=\"tm-add-tag\" $param={{{ [<newTagNameTiddler>get[text]] }}}/>\n<$action-deletetiddler $tiddler=<<newTagNameTiddler>>/>\n\\end\n\n\\define tag-button()\n<$button class=\"tc-btn-invisible\" tag=\"a\" tooltip={{$:/language/EditTemplate/Tags/Add/Button/Hint}}>\n<$action-sendmessage $message=\"tm-add-tag\" $param=<<tag>>/>\n<$action-deletetiddler $tiddler=<<newTagNameTiddler>>/>\n<$macrocall $name=\"tag-pill\" tag=<<tag>>/>\n</$button>\n\\end\n\n\\define tag-picker-inner()\n\\whitespace trim\n<div class=\"tc-edit-add-tag\">\n<span class=\"tc-add-tag-name\">\n<$keyboard key=\"ENTER\" actions=<<add-tag-actions>>>\n<$edit-text tiddler=<<newTagNameTiddler>> tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Tags/Add/Placeholder}} focusPopup=<<qualify \"$:/state/popup/tags-auto-complete\">> class=\"tc-edit-texteditor tc-popup-handle\" tabindex=<<tabIndex>> focus={{{ [{$:/config/AutoFocus}match[tags]then[true]] ~[[false]] }}}/>\n</$keyboard>\n</span> <$button popup=<<qualify \"$:/state/popup/tags-auto-complete\">> class=\"tc-btn-invisible\" tooltip={{$:/language/EditTemplate/Tags/Dropdown/Hint}} aria-label={{$:/language/EditTemplate/Tags/Dropdown/Caption}}>{{$:/core/images/down-arrow}}</$button> <span class=\"tc-add-tag-button\">\n<$set name=\"tag\" value={{{ [<newTagNameTiddler>get[text]] }}}>\n<$button set=\"$:/temp/NewTagName\" setTo=\"\" class=\"\">\n<<add-tag-actions>>\n<$action-deletetiddler $tiddler=<<newTagNameTiddler>>/>\n{{$:/language/EditTemplate/Tags/Add/Button}}\n</$button>\n</$set>\n</span>\n</div>\n<div class=\"tc-block-dropdown-wrapper\">\n<$reveal state=<<qualify \"$:/state/popup/tags-auto-complete\">> type=\"nomatch\" text=\"\" default=\"\">\n<div class=\"tc-block-dropdown\">\n<$set name=\"newTagName\" value={{{ [<newTagNameTiddler>get[text]] }}}>\n<$list filter=\"[<newTagName>minlength{$:/config/Tags/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n<$list filter=\"[tags[]!is[system]search:title<newTagName>sort[]]\" variable=\"tag\">\n<<tag-button>>\n</$list></$list>\n<hr>\n<$list filter=\"[<newTagName>minlength{$:/config/Tags/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n<$list filter=\"[tags[]is[system]search:title<newTagName>sort[]]\" variable=\"tag\">\n<<tag-button>>\n</$list></$list>\n</$set>\n</div>\n</$reveal>\n</div>\n\\end\n\\define tag-picker()\n\\whitespace trim\n<$list filter=\"[<newTagNameTiddler>match[]]\" emptyMessage=<<tag-picker-inner>>>\n<$set name=\"newTagNameTiddler\" value=<<qualify \"$:/temp/NewTagName\">>>\n<<tag-picker-inner>>\n</$set>\n</$list>\n\\end\n"
},
"$:/core/macros/tag": {
"title": "$:/core/macros/tag",
"tags": "$:/tags/Macro",
"text": "\\define tag-pill-styles()\nbackground-color:$(backgroundColor)$;\nfill:$(foregroundColor)$;\ncolor:$(foregroundColor)$;\n\\end\n\n\\define tag-pill-inner(tag,icon,colour,fallbackTarget,colourA,colourB,element-tag,element-attributes,actions)\n<$vars foregroundColor=<<contrastcolour target:\"\"\"$colour$\"\"\" fallbackTarget:\"\"\"$fallbackTarget$\"\"\" colourA:\"\"\"$colourA$\"\"\" colourB:\"\"\"$colourB$\"\"\">> backgroundColor=\"\"\"$colour$\"\"\">\n<$element-tag$ $element-attributes$ class=\"tc-tag-label tc-btn-invisible\" style=<<tag-pill-styles>>>\n$actions$<$transclude tiddler=\"\"\"$icon$\"\"\"/><$view tiddler=<<__tag__>> field=\"title\" format=\"text\" />\n</$element-tag$>\n</$vars>\n\\end\n\n\\define tag-pill-body(tag,icon,colour,palette,element-tag,element-attributes,actions)\n<$macrocall $name=\"tag-pill-inner\" tag=<<__tag__>> icon=\"\"\"$icon$\"\"\" colour=\"\"\"$colour$\"\"\" fallbackTarget={{$palette$##tag-background}} colourA={{$palette$##foreground}} colourB={{$palette$##background}} element-tag=\"\"\"$element-tag$\"\"\" element-attributes=\"\"\"$element-attributes$\"\"\" actions=\"\"\"$actions$\"\"\"/>\n\\end\n\n\\define tag-pill(tag,element-tag:\"span\",element-attributes:\"\",actions:\"\")\n<span class=\"tc-tag-list-item\">\n<$macrocall $name=\"tag-pill-body\" tag=<<__tag__>> icon={{{ [<__tag__>get[icon]] }}} colour={{{ [<__tag__>get[color]] }}} palette={{$:/palette}} element-tag=\"\"\"$element-tag$\"\"\" element-attributes=\"\"\"$element-attributes$\"\"\" actions=\"\"\"$actions$\"\"\"/>\n</span>\n\\end\n\n\\define tag(tag)\n{{$tag$||$:/core/ui/TagTemplate}}\n\\end\n"
},
"$:/core/macros/thumbnails": {
"title": "$:/core/macros/thumbnails",
"tags": "$:/tags/Macro",
"text": "\\define thumbnail(link,icon,color,background-color,image,caption,width:\"280\",height:\"157\")\n<$link to=\"\"\"$link$\"\"\"><div class=\"tc-thumbnail-wrapper\">\n<div class=\"tc-thumbnail-image\" style=\"width:$width$px;height:$height$px;\"><$reveal type=\"nomatch\" text=\"\" default=\"\"\"$image$\"\"\" tag=\"div\" style=\"width:$width$px;height:$height$px;\">\n[img[$image$]]\n</$reveal><$reveal type=\"match\" text=\"\" default=\"\"\"$image$\"\"\" tag=\"div\" class=\"tc-thumbnail-background\" style=\"width:$width$px;height:$height$px;background-color:$background-color$;\"></$reveal></div><div class=\"tc-thumbnail-icon\" style=\"fill:$color$;color:$color$;\">\n$icon$\n</div><div class=\"tc-thumbnail-caption\">\n$caption$\n</div>\n</div></$link>\n\\end\n\n\\define thumbnail-right(link,icon,color,background-color,image,caption,width:\"280\",height:\"157\")\n<div class=\"tc-thumbnail-right-wrapper\"><<thumbnail \"\"\"$link$\"\"\" \"\"\"$icon$\"\"\" \"\"\"$color$\"\"\" \"\"\"$background-color$\"\"\" \"\"\"$image$\"\"\" \"\"\"$caption$\"\"\" \"\"\"$width$\"\"\" \"\"\"$height$\"\"\">></div>\n\\end\n\n\\define list-thumbnails(filter,width:\"280\",height:\"157\")\n<$list filter=\"\"\"$filter$\"\"\"><$macrocall $name=\"thumbnail\" link={{!!link}} icon={{!!icon}} color={{!!color}} background-color={{!!background-color}} image={{!!image}} caption={{!!caption}} width=\"\"\"$width$\"\"\" height=\"\"\"$height$\"\"\"/></$list>\n\\end\n"
},
"$:/core/macros/timeline": {
"title": "$:/core/macros/timeline",
"created": "20141212105914482",
"modified": "20141212110330815",
"tags": "$:/tags/Macro",
"text": "\\define timeline-title()\n\\whitespace trim\n<!-- Override this macro with a global macro \n of the same name if you need to change \n how titles are displayed on the timeline \n -->\n<$view field=\"title\"/>\n\\end\n\\define timeline(limit:\"100\",format:\"DDth MMM YYYY\",subfilter:\"\",dateField:\"modified\")\n<div class=\"tc-timeline\">\n<$list filter=\"[!is[system]$subfilter$has[$dateField$]!sort[$dateField$]limit[$limit$]eachday[$dateField$]]\">\n<div class=\"tc-menu-list-item\">\n<$view field=\"$dateField$\" format=\"date\" template=\"$format$\"/>\n<$list filter=\"[sameday:$dateField${!!$dateField$}!is[system]$subfilter$!sort[$dateField$]]\">\n<div class=\"tc-menu-list-subitem\">\n<$link to={{!!title}}><<timeline-title>></$link>\n</div>\n</$list>\n</div>\n</$list>\n</div>\n\\end\n"
},
"$:/core/macros/toc": {
"title": "$:/core/macros/toc",
"tags": "$:/tags/Macro",
"text": "\\define toc-caption()\n<$set name=\"tv-wikilinks\" value=\"no\">\n <$transclude field=\"caption\">\n <$view field=\"title\"/>\n </$transclude>\n</$set>\n\\end\n\n\\define toc-body(tag,sort:\"\",itemClassFilter,exclude,path)\n<ol class=\"tc-toc\">\n <$list filter=\"\"\"[all[shadows+tiddlers]tag<__tag__>!has[draft.of]$sort$] -[<__tag__>] -[enlist<__exclude__>]\"\"\">\n <$vars item=<<currentTiddler>> path={{{ [<__path__>addsuffix[/]addsuffix<__tag__>] }}}>\n <$set name=\"excluded\" filter=\"\"\"[enlist<__exclude__>] [<__tag__>]\"\"\">\n <$set name=\"toc-item-class\" filter=<<__itemClassFilter__>> emptyValue=\"toc-item-selected\" value=\"toc-item\">\n <li class=<<toc-item-class>>>\n <$list filter=\"[all[current]toc-link[no]]\" emptyMessage=\"<$link><$view field='caption'><$view field='title'/></$view></$link>\">\n <<toc-caption>>\n </$list>\n <$macrocall $name=\"toc-body\" tag=<<item>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<excluded>> path=<<path>>/>\n </li>\n </$set>\n </$set>\n </$vars>\n </$list>\n</ol>\n\\end\n\n\\define toc(tag,sort:\"\",itemClassFilter:\"\")\n<$macrocall $name=\"toc-body\" tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> />\n\\end\n\n\\define toc-linked-expandable-body(tag,sort:\"\",itemClassFilter,exclude,path)\n<!-- helper function -->\n<$qualify name=\"toc-state\" title={{{ [[$:/state/toc]addsuffix<__path__>addsuffix[-]addsuffix<currentTiddler>] }}}>\n <$set name=\"toc-item-class\" filter=<<__itemClassFilter__>> emptyValue=\"toc-item-selected\" value=\"toc-item\">\n <li class=<<toc-item-class>>>\n <$link>\n <$reveal type=\"nomatch\" stateTitle=<<toc-state>> text=\"open\">\n <$button setTitle=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible tc-popup-keep\">\n {{$:/core/images/right-arrow}}\n </$button>\n </$reveal>\n <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n <$button setTitle=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible tc-popup-keep\">\n {{$:/core/images/down-arrow}}\n </$button>\n </$reveal>\n <<toc-caption>>\n </$link>\n <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n <$macrocall $name=\"toc-expandable\" tag=<<currentTiddler>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<__exclude__>> path=<<__path__>>/>\n </$reveal>\n </li>\n </$set>\n</$qualify>\n\\end\n\n\\define toc-unlinked-expandable-body(tag,sort:\"\",itemClassFilter,exclude,path)\n<!-- helper function -->\n<$qualify name=\"toc-state\" title={{{ [[$:/state/toc]addsuffix<__path__>addsuffix[-]addsuffix<currentTiddler>] }}}>\n <$set name=\"toc-item-class\" filter=<<__itemClassFilter__>> emptyValue=\"toc-item-selected\" value=\"toc-item\">\n <li class=<<toc-item-class>>>\n <$reveal type=\"nomatch\" stateTitle=<<toc-state>> text=\"open\">\n <$button setTitle=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible tc-popup-keep\">\n {{$:/core/images/right-arrow}}\n <<toc-caption>>\n </$button>\n </$reveal>\n <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n <$button setTitle=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible tc-popup-keep\">\n {{$:/core/images/down-arrow}}\n <<toc-caption>>\n </$button>\n </$reveal>\n <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n <$macrocall $name=\"toc-expandable\" tag=<<currentTiddler>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<__exclude__>> path=<<__path__>>/>\n </$reveal>\n </li>\n </$set>\n</$qualify>\n\\end\n\n\\define toc-expandable-empty-message()\n<$macrocall $name=\"toc-linked-expandable-body\" tag=<<tag>> sort=<<sort>> itemClassFilter=<<itemClassFilter>> exclude=<<excluded>> path=<<path>>/>\n\\end\n\n\\define toc-expandable(tag,sort:\"\",itemClassFilter:\"\",exclude,path)\n<$vars tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> path={{{ [<__path__>addsuffix[/]addsuffix<__tag__>] }}}>\n <$set name=\"excluded\" filter=\"\"\"[enlist<__exclude__>] [<__tag__>]\"\"\">\n <ol class=\"tc-toc toc-expandable\">\n <$list filter=\"\"\"[all[shadows+tiddlers]tag<__tag__>!has[draft.of]$sort$] -[<__tag__>] -[enlist<__exclude__>]\"\"\">\n <$list filter=\"[all[current]toc-link[no]]\" emptyMessage=<<toc-expandable-empty-message>> >\n <$macrocall $name=\"toc-unlinked-expandable-body\" tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=\"\"\"itemClassFilter\"\"\" exclude=<<excluded>> path=<<path>> />\n </$list>\n </$list>\n </ol>\n </$set>\n</$vars>\n\\end\n\n\\define toc-linked-selective-expandable-body(tag,sort:\"\",itemClassFilter,exclude,path)\n<$qualify name=\"toc-state\" title={{{ [[$:/state/toc]addsuffix<__path__>addsuffix[-]addsuffix<currentTiddler>] }}}>\n <$set name=\"toc-item-class\" filter=<<__itemClassFilter__>> emptyValue=\"toc-item-selected\" value=\"toc-item\" >\n <li class=<<toc-item-class>>>\n <$link>\n <$list filter=\"[all[current]tagging[]$sort$limit[1]]\" variable=\"ignore\" emptyMessage=\"<$button class='tc-btn-invisible'>{{$:/core/images/blank}}</$button>\">\n <$reveal type=\"nomatch\" stateTitle=<<toc-state>> text=\"open\">\n <$button setTitle=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible tc-popup-keep\">\n {{$:/core/images/right-arrow}}\n </$button>\n </$reveal>\n <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n <$button setTitle=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible tc-popup-keep\">\n {{$:/core/images/down-arrow}}\n </$button>\n </$reveal>\n </$list>\n <<toc-caption>>\n </$link>\n <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n <$macrocall $name=\"toc-selective-expandable\" tag=<<currentTiddler>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<__exclude__>> path=<<__path__>>/>\n </$reveal>\n </li>\n </$set>\n</$qualify>\n\\end\n\n\\define toc-unlinked-selective-expandable-body(tag,sort:\"\",itemClassFilter,exclude,path)\n<$qualify name=\"toc-state\" title={{{ [[$:/state/toc]addsuffix<__path__>addsuffix[-]addsuffix<currentTiddler>] }}}>\n <$set name=\"toc-item-class\" filter=<<__itemClassFilter__>> emptyValue=\"toc-item-selected\" value=\"toc-item\">\n <li class=<<toc-item-class>>>\n <$list filter=\"[all[current]tagging[]$sort$limit[1]]\" variable=\"ignore\" emptyMessage=\"<$button class='tc-btn-invisible'>{{$:/core/images/blank}}</$button> <$view field='caption'><$view field='title'/></$view>\">\n <$reveal type=\"nomatch\" stateTitle=<<toc-state>> text=\"open\">\n <$button setTitle=<<toc-state>> setTo=\"open\" class=\"tc-btn-invisible tc-popup-keep\">\n {{$:/core/images/right-arrow}}\n <<toc-caption>>\n </$button>\n </$reveal>\n <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n <$button setTitle=<<toc-state>> setTo=\"close\" class=\"tc-btn-invisible tc-popup-keep\">\n {{$:/core/images/down-arrow}}\n <<toc-caption>>\n </$button>\n </$reveal>\n </$list>\n <$reveal type=\"match\" stateTitle=<<toc-state>> text=\"open\">\n <$macrocall $name=\"toc-selective-expandable\" tag=<<currentTiddler>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<__exclude__>> path=<<__path__>>/>\n </$reveal>\n </li>\n </$set>\n</$qualify>\n\\end\n\n\\define toc-selective-expandable-empty-message()\n<$macrocall $name=\"toc-linked-selective-expandable-body\" tag=<<tag>> sort=<<sort>> itemClassFilter=<<itemClassFilter>> exclude=<<excluded>> path=<<path>>/>\n\\end\n\n\\define toc-selective-expandable(tag,sort:\"\",itemClassFilter,exclude,path)\n<$vars tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> path={{{ [<__path__>addsuffix[/]addsuffix<__tag__>] }}}>\n <$set name=\"excluded\" filter=\"\"\"[enlist<__exclude__>] [<__tag__>]\"\"\">\n <ol class=\"tc-toc toc-selective-expandable\">\n <$list filter=\"\"\"[all[shadows+tiddlers]tag<__tag__>!has[draft.of]$sort$] -[<__tag__>] -[enlist<__exclude__>]\"\"\">\n <$list filter=\"[all[current]toc-link[no]]\" variable=\"ignore\" emptyMessage=<<toc-selective-expandable-empty-message>> >\n <$macrocall $name=\"toc-unlinked-selective-expandable-body\" tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=<<__itemClassFilter__>> exclude=<<excluded>> path=<<path>>/>\n </$list>\n </$list>\n </ol>\n </$set>\n</$vars>\n\\end\n\n\\define toc-tabbed-external-nav(tag,sort:\"\",selectedTiddler:\"$:/temp/toc/selectedTiddler\",unselectedText,missingText,template:\"\")\n<$tiddler tiddler={{{ [<__selectedTiddler__>get[text]] }}}>\n <div class=\"tc-tabbed-table-of-contents\">\n <$linkcatcher to=<<__selectedTiddler__>>>\n <div class=\"tc-table-of-contents\">\n <$macrocall $name=\"toc-selective-expandable\" tag=<<__tag__>> sort=<<__sort__>> itemClassFilter=\"[all[current]] -[<__selectedTiddler__>get[text]]\"/>\n </div>\n </$linkcatcher>\n <div class=\"tc-tabbed-table-of-contents-content\">\n <$reveal stateTitle=<<__selectedTiddler__>> type=\"nomatch\" text=\"\">\n <$transclude mode=\"block\" tiddler=<<__template__>>>\n <h1><<toc-caption>></h1>\n <$transclude mode=\"block\">$missingText$</$transclude>\n </$transclude>\n </$reveal>\n <$reveal stateTitle=<<__selectedTiddler__>> type=\"match\" text=\"\">\n $unselectedText$\n </$reveal>\n </div>\n </div>\n</$tiddler>\n\\end\n\n\\define toc-tabbed-internal-nav(tag,sort:\"\",selectedTiddler:\"$:/temp/toc/selectedTiddler\",unselectedText,missingText,template:\"\")\n<$linkcatcher to=<<__selectedTiddler__>>>\n <$macrocall $name=\"toc-tabbed-external-nav\" tag=<<__tag__>> sort=<<__sort__>> selectedTiddler=<<__selectedTiddler__>> unselectedText=<<__unselectedText__>> missingText=<<__missingText__>> template=<<__template__>>/>\n</$linkcatcher>\n\\end\n\n"
},
"$:/core/macros/translink": {
"title": "$:/core/macros/translink",
"tags": "$:/tags/Macro",
"text": "\\define translink(title,mode:\"block\")\n<div style=\"border:1px solid #ccc; padding: 0.5em; background: black; foreground; white;\">\n<$link to=\"\"\"$title$\"\"\">\n<$text text=\"\"\"$title$\"\"\"/>\n</$link>\n<div style=\"border:1px solid #ccc; padding: 0.5em; background: white; foreground; black;\">\n<$transclude tiddler=\"\"\"$title$\"\"\" mode=\"$mode$\">\n\"<$text text=\"\"\"$title$\"\"\"/>\" is missing\n</$transclude>\n</div>\n</div>\n\\end\n"
},
"$:/core/macros/tree": {
"title": "$:/core/macros/tree",
"tags": "$:/tags/Macro",
"text": "\\define leaf-link(full-title,chunk,separator: \"/\")\n<$link to=<<__full-title__>>><$text text=<<__chunk__>>/></$link>\n\\end\n\n\\define leaf-node(prefix,chunk)\n<li>\n<$list filter=\"[<__prefix__>addsuffix<__chunk__>is[shadow]] [<__prefix__>addsuffix<__chunk__>is[tiddler]]\" variable=\"full-title\">\n<$list filter=\"[<full-title>removeprefix<__prefix__>]\" variable=\"chunk\">\n<span>{{$:/core/images/file}}</span> <$macrocall $name=\"leaf-link\" full-title=<<full-title>> chunk=<<chunk>>/>\n</$list>\n</$list>\n</li>\n\\end\n\n\\define branch-node(prefix,chunk,separator: \"/\")\n<li>\n<$set name=\"reveal-state\" value={{{ [[$:/state/tree/]addsuffix<__prefix__>addsuffix<__chunk__>] }}}>\n<$reveal type=\"nomatch\" stateTitle=<<reveal-state>> text=\"show\">\n<$button setTitle=<<reveal-state>> setTo=\"show\" class=\"tc-btn-invisible\">\n{{$:/core/images/folder}} <$text text=<<__chunk__>>/>\n</$button>\n</$reveal>\n<$reveal type=\"match\" stateTitle=<<reveal-state>> text=\"show\">\n<$button setTitle=<<reveal-state>> setTo=\"hide\" class=\"tc-btn-invisible\">\n{{$:/core/images/folder}} <$text text=<<__chunk__>>/>\n</$button>\n</$reveal>\n<span>(<$count filter=\"[all[shadows+tiddlers]removeprefix<__prefix__>removeprefix<__chunk__>] -[<__prefix__>addsuffix<__chunk__>]\"/>)</span>\n<$reveal type=\"match\" stateTitle=<<reveal-state>> text=\"show\">\n<$macrocall $name=\"tree-node\" prefix={{{ [<__prefix__>addsuffix<__chunk__>] }}} separator=<<__separator__>>/>\n</$reveal>\n</$set>\n</li>\n\\end\n\n\\define tree-node(prefix,separator: \"/\")\n<ol>\n<$list filter=\"[all[shadows+tiddlers]removeprefix<__prefix__>splitbefore<__separator__>sort[]!suffix<__separator__>]\" variable=\"chunk\">\n<$macrocall $name=\"leaf-node\" prefix=<<__prefix__>> chunk=<<chunk>> separator=<<__separator__>>/>\n</$list>\n<$list filter=\"[all[shadows+tiddlers]removeprefix<__prefix__>splitbefore<__separator__>sort[]suffix<__separator__>]\" variable=\"chunk\">\n<$macrocall $name=\"branch-node\" prefix=<<__prefix__>> chunk=<<chunk>> separator=<<__separator__>>/>\n</$list>\n</ol>\n\\end\n\n\\define tree(prefix: \"$:/\",separator: \"/\")\n<div class=\"tc-tree\">\n<span><$text text=<<__prefix__>>/></span>\n<div>\n<$macrocall $name=\"tree-node\" prefix=<<__prefix__>> separator=<<__separator__>>/>\n</div>\n</div>\n\\end\n"
},
"$:/core/macros/utils": {
"title": "$:/core/macros/utils",
"text": "\\define colour(colour)\n$colour$\n\\end\n"
},
"$:/snippets/minifocusswitcher": {
"title": "$:/snippets/minifocusswitcher",
"text": "<$select tiddler=\"$:/config/AutoFocus\">\n<$list filter=\"title tags text type fields\">\n<option value=<<currentTiddler>>><<currentTiddler>></option>\n</$list>\n</$select>\n"
},
"$:/snippets/minilanguageswitcher": {
"title": "$:/snippets/minilanguageswitcher",
"text": "<$select tiddler=\"$:/language\">\n<$list filter=\"[[$:/languages/en-GB]] [plugin-type[language]sort[title]]\">\n<option value=<<currentTiddler>>><$view field=\"description\"><$view field=\"name\"><$view field=\"title\"/></$view></$view></option>\n</$list>\n</$select>"
},
"$:/snippets/minithemeswitcher": {
"title": "$:/snippets/minithemeswitcher",
"text": "\\define lingo-base() $:/language/ControlPanel/Theme/\n<<lingo Prompt>> <$select tiddler=\"$:/theme\">\n<$list filter=\"[plugin-type[theme]sort[title]]\">\n<option value=<<currentTiddler>>><$view field=\"name\"><$view field=\"title\"/></$view></option>\n</$list>\n</$select>"
},
"$:/snippets/modules": {
"title": "$:/snippets/modules",
"text": "\\define describeModuleType(type)\n{{$:/language/Docs/ModuleTypes/$type$}}\n\\end\n<$list filter=\"[moduletypes[]]\">\n\n!! <$macrocall $name=\"currentTiddler\" $type=\"text/plain\" $output=\"text/plain\"/>\n\n<$macrocall $name=\"describeModuleType\" type=<<currentTiddler>>/>\n\n<ul><$list filter=\"[all[current]modules[]]\"><li><$link><<currentTiddler>></$link>\n</li>\n</$list>\n</ul>\n</$list>\n"
},
"$:/palette": {
"title": "$:/palette",
"text": "$:/palettes/Vanilla"
},
"$:/snippets/paletteeditor": {
"title": "$:/snippets/paletteeditor",
"text": "<$transclude tiddler=\"$:/PaletteManager\"/>\n"
},
"$:/snippets/palettepreview": {
"title": "$:/snippets/palettepreview",
"text": "<$set name=\"currentTiddler\" value={{$:/palette}}>\n{{||$:/snippets/currpalettepreview}}\n</$set>\n"
},
"$:/snippets/paletteswitcher": {
"title": "$:/snippets/paletteswitcher",
"text": "<$linkcatcher to=\"$:/palette\">\n<div class=\"tc-chooser\"><$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Palette]sort[name]]\"><$set name=\"cls\" filter=\"[all[current]prefix{$:/palette}]\" value=\"tc-chooser-item tc-chosen\" emptyValue=\"tc-chooser-item\"><div class=<<cls>>><$link to={{!!title}}>''<$view field=\"name\" format=\"text\"/>'' - <$view field=\"description\" format=\"text\"/>{{||$:/snippets/currpalettepreview}}</$link>\n</div></$set>\n</$list>\n</div>\n</$linkcatcher>\n"
},
"$:/snippets/peek-stylesheets": {
"title": "$:/snippets/peek-stylesheets",
"text": "\\define expandable-stylesheets-list()\n<ol>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Stylesheet]!has[draft.of]]\">\n<$vars state=<<qualify \"$:/state/peek-stylesheets/open/\">>>\n<$set name=\"state\" value={{{ [<state>addsuffix<currentTiddler>] }}}>\n<li>\n<$reveal type=\"match\" state=<<state>> text=\"yes\" tag=\"span\">\n<$button set=<<state>> setTo=\"no\" class=\"tc-btn-invisible\">\n{{$:/core/images/down-arrow}}\n</$button>\n</$reveal>\n<$reveal type=\"nomatch\" state=<<state>> text=\"yes\" tag=\"span\">\n<$button set=<<state>> setTo=\"yes\" class=\"tc-btn-invisible\">\n{{$:/core/images/right-arrow}}\n</$button>\n</$reveal>\n<$link>\n<$view field=\"title\"/>\n</$link>\n<$reveal type=\"match\" state=<<state>> text=\"yes\" tag=\"div\">\n<$set name=\"source\" tiddler=<<currentTiddler>>>\n<$wikify name=\"styles\" text=<<source>>>\n<pre>\n<code>\n<$text text=<<styles>>/>\n</code>\n</pre>\n</$wikify>\n</$set>\n</$reveal>\n</li>\n</$set>\n</$vars>\n</$list>\n</ol>\n\\end\n\n\\define stylesheets-list()\n<ol>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Stylesheet]!has[draft.of]]\">\n<li>\n<$link>\n<$view field=\"title\"/>\n</$link>\n<$set name=\"source\" tiddler=<<currentTiddler>>>\n<$wikify name=\"styles\" text=<<source>>>\n<pre>\n<code>\n<$text text=<<styles>>/>\n</code>\n</pre>\n</$wikify>\n</$set>\n</li>\n</$list>\n</ol>\n\\end\n\n<$vars modeState=<<qualify \"$:/state/peek-stylesheets/mode/\">>>\n\n<$reveal type=\"nomatch\" state=<<modeState>> text=\"expanded\" tag=\"div\">\n<$button set=<<modeState>> setTo=\"expanded\" class=\"tc-btn-invisible\">{{$:/core/images/chevron-right}} {{$:/language/ControlPanel/Stylesheets/Expand/Caption}}</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<modeState>> text=\"expanded\" tag=\"div\">\n<$button set=<<modeState>> setTo=\"restored\" class=\"tc-btn-invisible\">{{$:/core/images/chevron-down}} {{$:/language/ControlPanel/Stylesheets/Restore/Caption}}</$button>\n</$reveal>\n\n<$reveal type=\"nomatch\" state=<<modeState>> text=\"expanded\" tag=\"div\">\n<<expandable-stylesheets-list>>\n</$reveal>\n<$reveal type=\"match\" state=<<modeState>> text=\"expanded\" tag=\"div\">\n<<stylesheets-list>>\n</$reveal>\n\n</$vars>\n"
},
"$:/temp/search": {
"title": "$:/temp/search",
"text": ""
},
"$:/tags/AdvancedSearch": {
"title": "$:/tags/AdvancedSearch",
"list": "[[$:/core/ui/AdvancedSearch/Standard]] [[$:/core/ui/AdvancedSearch/System]] [[$:/core/ui/AdvancedSearch/Shadows]] [[$:/core/ui/AdvancedSearch/Filter]]"
},
"$:/tags/AdvancedSearch/FilterButton": {
"title": "$:/tags/AdvancedSearch/FilterButton",
"list": "$:/core/ui/AdvancedSearch/Filter/FilterButtons/dropdown $:/core/ui/AdvancedSearch/Filter/FilterButtons/clear $:/core/ui/AdvancedSearch/Filter/FilterButtons/export $:/core/ui/AdvancedSearch/Filter/FilterButtons/delete"
},
"$:/tags/ControlPanel": {
"title": "$:/tags/ControlPanel",
"list": "$:/core/ui/ControlPanel/Info $:/core/ui/ControlPanel/Appearance $:/core/ui/ControlPanel/Settings $:/core/ui/ControlPanel/Saving $:/core/ui/ControlPanel/Plugins $:/core/ui/ControlPanel/Tools $:/core/ui/ControlPanel/Internals"
},
"$:/tags/ControlPanel/Info": {
"title": "$:/tags/ControlPanel/Info",
"list": "$:/core/ui/ControlPanel/Basics $:/core/ui/ControlPanel/Advanced"
},
"$:/tags/ControlPanel/Plugins": {
"title": "$:/tags/ControlPanel/Plugins",
"list": "[[$:/core/ui/ControlPanel/Plugins/Installed]] [[$:/core/ui/ControlPanel/Plugins/Add]]"
},
"$:/tags/EditTemplate": {
"title": "$:/tags/EditTemplate",
"list": "[[$:/core/ui/EditTemplate/controls]] [[$:/core/ui/EditTemplate/title]] [[$:/core/ui/EditTemplate/tags]] [[$:/core/ui/EditTemplate/shadow]] [[$:/core/ui/ViewTemplate/classic]] [[$:/core/ui/EditTemplate/body]] [[$:/core/ui/EditTemplate/type]] [[$:/core/ui/EditTemplate/fields]]"
},
"$:/tags/EditToolbar": {
"title": "$:/tags/EditToolbar",
"list": "[[$:/core/ui/Buttons/delete]] [[$:/core/ui/Buttons/cancel]] [[$:/core/ui/Buttons/save]]"
},
"$:/tags/EditorToolbar": {
"title": "$:/tags/EditorToolbar",
"list": "$:/core/ui/EditorToolbar/paint $:/core/ui/EditorToolbar/opacity $:/core/ui/EditorToolbar/line-width $:/core/ui/EditorToolbar/rotate-left $:/core/ui/EditorToolbar/clear $:/core/ui/EditorToolbar/bold $:/core/ui/EditorToolbar/italic $:/core/ui/EditorToolbar/strikethrough $:/core/ui/EditorToolbar/underline $:/core/ui/EditorToolbar/superscript $:/core/ui/EditorToolbar/subscript $:/core/ui/EditorToolbar/mono-line $:/core/ui/EditorToolbar/mono-block $:/core/ui/EditorToolbar/quote $:/core/ui/EditorToolbar/list-bullet $:/core/ui/EditorToolbar/list-number $:/core/ui/EditorToolbar/heading-1 $:/core/ui/EditorToolbar/heading-2 $:/core/ui/EditorToolbar/heading-3 $:/core/ui/EditorToolbar/heading-4 $:/core/ui/EditorToolbar/heading-5 $:/core/ui/EditorToolbar/heading-6 $:/core/ui/EditorToolbar/link $:/core/ui/EditorToolbar/excise $:/core/ui/EditorToolbar/picture $:/core/ui/EditorToolbar/stamp $:/core/ui/EditorToolbar/size $:/core/ui/EditorToolbar/editor-height $:/core/ui/EditorToolbar/more $:/core/ui/EditorToolbar/preview $:/core/ui/EditorToolbar/preview-type"
},
"$:/tags/Manager/ItemMain": {
"title": "$:/tags/Manager/ItemMain",
"list": "$:/Manager/ItemMain/WikifiedText $:/Manager/ItemMain/RawText $:/Manager/ItemMain/Fields"
},
"$:/tags/Manager/ItemSidebar": {
"title": "$:/tags/Manager/ItemSidebar",
"list": "$:/Manager/ItemSidebar/Tags $:/Manager/ItemSidebar/Colour $:/Manager/ItemSidebar/Icon $:/Manager/ItemSidebar/Tools"
},
"$:/tags/MoreSideBar": {
"title": "$:/tags/MoreSideBar",
"list": "[[$:/core/ui/MoreSideBar/All]] [[$:/core/ui/MoreSideBar/Recent]] [[$:/core/ui/MoreSideBar/Tags]] [[$:/core/ui/MoreSideBar/Missing]] [[$:/core/ui/MoreSideBar/Drafts]] [[$:/core/ui/MoreSideBar/Orphans]] [[$:/core/ui/MoreSideBar/Types]] [[$:/core/ui/MoreSideBar/System]] [[$:/core/ui/MoreSideBar/Shadows]] [[$:/core/ui/MoreSideBar/Explorer]] [[$:/core/ui/MoreSideBar/Plugins]]",
"text": ""
},
"$:/tags/PageControls": {
"title": "$:/tags/PageControls",
"list": "[[$:/core/ui/Buttons/home]] [[$:/core/ui/Buttons/close-all]] [[$:/core/ui/Buttons/fold-all]] [[$:/core/ui/Buttons/unfold-all]] [[$:/core/ui/Buttons/permaview]] [[$:/core/ui/Buttons/new-tiddler]] [[$:/core/ui/Buttons/new-journal]] [[$:/core/ui/Buttons/new-image]] [[$:/core/ui/Buttons/import]] [[$:/core/ui/Buttons/export-page]] [[$:/core/ui/Buttons/control-panel]] [[$:/core/ui/Buttons/advanced-search]] [[$:/core/ui/Buttons/manager]] [[$:/core/ui/Buttons/tag-manager]] [[$:/core/ui/Buttons/language]] [[$:/core/ui/Buttons/palette]] [[$:/core/ui/Buttons/theme]] [[$:/core/ui/Buttons/storyview]] [[$:/core/ui/Buttons/encryption]] [[$:/core/ui/Buttons/timestamp]] [[$:/core/ui/Buttons/full-screen]] [[$:/core/ui/Buttons/print]] [[$:/core/ui/Buttons/save-wiki]] [[$:/core/ui/Buttons/refresh]] [[$:/core/ui/Buttons/more-page-actions]]"
},
"$:/tags/PageTemplate": {
"title": "$:/tags/PageTemplate",
"list": "[[$:/core/ui/PageTemplate/topleftbar]] [[$:/core/ui/PageTemplate/toprightbar]] [[$:/core/ui/PageTemplate/sidebar]] [[$:/core/ui/PageTemplate/story]] [[$:/core/ui/PageTemplate/alerts]]",
"text": ""
},
"$:/tags/PluginLibrary": {
"title": "$:/tags/PluginLibrary",
"list": "$:/config/OfficialPluginLibrary"
},
"$:/tags/SideBar": {
"title": "$:/tags/SideBar",
"list": "[[$:/core/ui/SideBar/Open]] [[$:/core/ui/SideBar/Recent]] [[$:/core/ui/SideBar/Tools]] [[$:/core/ui/SideBar/More]]",
"text": ""
},
"$:/tags/SideBarSegment": {
"title": "$:/tags/SideBarSegment",
"list": "[[$:/core/ui/SideBarSegments/site-title]] [[$:/core/ui/SideBarSegments/site-subtitle]] [[$:/core/ui/SideBarSegments/page-controls]] [[$:/core/ui/SideBarSegments/search]] [[$:/core/ui/SideBarSegments/tabs]]"
},
"$:/tags/TiddlerInfo": {
"title": "$:/tags/TiddlerInfo",
"list": "[[$:/core/ui/TiddlerInfo/Tools]] [[$:/core/ui/TiddlerInfo/References]] [[$:/core/ui/TiddlerInfo/Tagging]] [[$:/core/ui/TiddlerInfo/List]] [[$:/core/ui/TiddlerInfo/Listed]] [[$:/core/ui/TiddlerInfo/Fields]]",
"text": ""
},
"$:/tags/TiddlerInfo/Advanced": {
"title": "$:/tags/TiddlerInfo/Advanced",
"list": "[[$:/core/ui/TiddlerInfo/Advanced/ShadowInfo]] [[$:/core/ui/TiddlerInfo/Advanced/PluginInfo]]"
},
"$:/tags/ViewTemplate": {
"title": "$:/tags/ViewTemplate",
"list": "[[$:/core/ui/ViewTemplate/title]] [[$:/core/ui/ViewTemplate/unfold]] [[$:/core/ui/ViewTemplate/subtitle]] [[$:/core/ui/ViewTemplate/tags]] [[$:/core/ui/ViewTemplate/classic]] [[$:/core/ui/ViewTemplate/body]]"
},
"$:/tags/ViewToolbar": {
"title": "$:/tags/ViewToolbar",
"list": "[[$:/core/ui/Buttons/more-tiddler-actions]] [[$:/core/ui/Buttons/info]] [[$:/core/ui/Buttons/new-here]] [[$:/core/ui/Buttons/new-journal-here]] [[$:/core/ui/Buttons/clone]] [[$:/core/ui/Buttons/export-tiddler]] [[$:/core/ui/Buttons/edit]] [[$:/core/ui/Buttons/delete]] [[$:/core/ui/Buttons/permalink]] [[$:/core/ui/Buttons/permaview]] [[$:/core/ui/Buttons/open-window]] [[$:/core/ui/Buttons/close-others]] [[$:/core/ui/Buttons/close]] [[$:/core/ui/Buttons/fold-others]] [[$:/core/ui/Buttons/fold]]"
},
"$:/snippets/themeswitcher": {
"title": "$:/snippets/themeswitcher",
"text": "<$linkcatcher to=\"$:/theme\">\n<div class=\"tc-chooser\"><$list filter=\"[plugin-type[theme]sort[title]]\"><$set name=\"cls\" filter=\"[all[current]field:title{$:/theme}] [[$:/theme]!has[text]addsuffix[s/tiddlywiki/vanilla]field:title<currentTiddler>] +[limit[1]]\" value=\"tc-chooser-item tc-chosen\" emptyValue=\"tc-chooser-item\"><div class=<<cls>>><$link to={{!!title}}>''<$view field=\"name\" format=\"text\"/>'' <$view field=\"description\" format=\"text\"/></$link></div>\n</$set>\n</$list>\n</div>\n</$linkcatcher>"
},
"$:/core/wiki/title": {
"title": "$:/core/wiki/title",
"text": "{{$:/SiteTitle}} --- {{$:/SiteSubtitle}}"
},
"$:/view": {
"title": "$:/view",
"text": "classic"
},
"$:/snippets/viewswitcher": {
"title": "$:/snippets/viewswitcher",
"text": "\\define icon()\n$:/core/images/storyview-$(storyview)$\n\\end\n<$linkcatcher to=\"$:/view\">\n<div class=\"tc-chooser tc-viewswitcher\">\n<$list filter=\"[storyviews[]]\" variable=\"storyview\">\n<$set name=\"cls\" filter=\"[<storyview>prefix{$:/view}]\" value=\"tc-chooser-item tc-chosen\" emptyValue=\"tc-chooser-item\"><div class=<<cls>>>\n<$link to=<<storyview>>><$transclude tiddler=<<icon>>/><$text text=<<storyview>>/></$link>\n</div>\n</$set>\n</$list>\n</div>\n</$linkcatcher>"
}
}
}
<$set name="saveTiddlerAndShadowsFilter" filter="[subfilter<saveTiddlerFilter>] [subfilter<saveTiddlerFilter>plugintiddlers[]]">
`<!doctype html>
`{{$:/core/templates/MOTW.html}}`<html lang="`<$text text={{{ [{$:/language}get[name]] }}}/>`">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<!--~~ Raw markup for the top of the head section ~~-->
`{{{ [<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkupWikified/TopHead]] ||$:/core/templates/raw-static-tiddler}}}`
<meta http-equiv="X-UA-Compatible" content="IE=Edge"/>
<meta name="application-name" content="TiddlyWiki" />
<meta name="generator" content="TiddlyWiki" />
<meta name="tiddlywiki-version" content="`{{$:/core/templates/version}}`" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
<meta name="mobile-web-app-capable" content="yes"/>
<meta name="format-detection" content="telephone=no" />
<meta name="copyright" content="`{{$:/core/copyright.txt}}`" />
<meta name="Dwebsite" content="bluelightav.eth.eth">
<link href="https://gateway.ipfs.io/ipfs/bafkreib4utaof4466wgvomefjakcz6vbfv2ucf4lq7uupuxtyassxdscum" rel="apple-touch-icon" sizes="180x180">
<link href="https://gateway.ipfs.io/ipfs/bafkreihi27cp35a6gyzwgi3qljmfhnpmio5ysyatpmvfaip7fd3lem7ksq" rel="icon" sizes="32x32" type="image/png">
<link href="https://gateway.ipfs.io/ipfs/bafkreie3w4fbd4u2u2hligtimgcgqfmzdqr4gfyyu7rxtmodjc5gqjsutq" rel="icon" sizes="16x16" type="image/png">
<link id="faviconLink" rel="icon" href="https://gateway.ipfs.io/ipfs/QmVFTC717mvmnyEMjdrdb62zjkBmdkZ1BqFSmaUa3mbGtF?filename=favicon.ico" type="image/x-icon">
<title>`{{$:/core/wiki/title}}`</title>
<!--~~ This is a Tiddlywiki file. The points of interest in the file are marked with this pattern ~~-->
<!--~~ Raw markup ~~-->
`{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/core/wiki/rawmarkup]] ||$:/core/templates/plain-text-tiddler}}}
{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkup]] ||$:/core/templates/plain-text-tiddler}}}
{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkupWikified]] ||$:/core/templates/raw-static-tiddler}}}`
</head>
<body class="tc-body">
<!--~~ Raw markup for the top of the body section ~~-->
`{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkupWikified/TopBody]] ||$:/core/templates/raw-static-tiddler}}}`
<!--~~ Static styles ~~-->
<div id="styleArea">
`{{$:/boot/boot.css||$:/core/templates/css-tiddler}}`
</div>
<!--~~ Static content for Google and browsers without JavaScript ~~-->
<noscript>
<div id="splashArea">
`{{$:/core/templates/static.area}}`
</div>
</noscript>
<!--~~ Ordinary tiddlers ~~-->
`{{$:/core/templates/store.area.template.html}}`
<!--~~ Library modules ~~-->
<div id="libraryModules" style="display:none;">
`{{{ [is[system]type[application/javascript]library[yes]] ||$:/core/templates/javascript-tiddler}}}`
</div>
<!--~~ Boot kernel prologue ~~-->
<div id="bootKernelPrefix" style="display:none;">
`{{ $:/boot/bootprefix.js ||$:/core/templates/javascript-tiddler}}`
</div>
<!--~~ Boot kernel ~~-->
<div id="bootKernel" style="display:none;">
`{{ $:/boot/boot.js ||$:/core/templates/javascript-tiddler}}`
</div>
<div id='reactApp'></div>
<!--~~ Raw markup for the bottom of the body section ~~-->
`{{{ [enlist<saveTiddlerAndShadowsFilter>tag[$:/tags/RawMarkupWikified/BottomBody]] ||$:/core/templates/raw-static-tiddler}}}`
</body>
</html>`
{{$:/SiteTitle}}
[[Welcome]] [[IPFS Documentation]]
no
Attachments
Table of Contents
$:/palettes/Blue
{
"tiddlers": {
"$:/plugins/bimlas/locator/README/CHANGELOG": {
"title": "$:/plugins/bimlas/locator/README/CHANGELOG",
"tags": "",
"type": "text/vnd.tiddlywiki",
"text": "Unreleased\n\n[[See GitLab for detailed change history of this release|https://gitlab.com/bimlas/tw5-locator/compare/master...dev]]\n\n!! 2.0.0\n\n[[See GitLab for detailed change history of this release|https://gitlab.com/bimlas/tw5-locator/compare/v1.5.0...v2.0.0]]\n\n''ALMOST COMPLETE REWRITING, BACKWARDS INCOMPATIBLE CHANGES ARE INTRODUCED''\n\n* ''It does not require the `kin` filter operator at all''\n* ''You can filter to any field besides the tags''\n* You can use the standard search from any `locator-view`\n* You can use any field to link tiddlers (as \"tags\")\n* You can also navigate through tiddler links\n* You can use arbitrary templates to display context items and field values\n* ''INCOMPATIBLE CHANGES''<br />//Before upgrading to the new version, make a backup (as before upgrading any plugin) and make the following changes.//\n** Renamed `locator-tags` to `locator-fields`<br />//Change the macro call in your tiddlers//\n** `locator-view` does not supporting `finalFilter` and `tagFilter`<br />//Remove them from your macrocalls//\n** Removed `filter-grandchildren` filter<br />//Because it can no longer be passed through parameters.//\n** The \"Open in Locator sidebar\" toolbar button is moved from `$:/plugins/bimlas/locator/viewtemplate/open-in-sidebar` to `$:/plugins/bimlas/locator/viewtemplate/open-in-sidebar` and its code is changed as well<br />//Compare the old tiddler with the shadow and note the changes if any. Transfer them to the new tiddler and delete the old tiddler.//\n\n!! 1.5.0\n\n[[See GitLab for detailed change history of this release|https://gitlab.com/bimlas/tw5-locator/compare/v1.4.0...v1.5.0]]\n\n* Move tiddler from current context to higher- or subtopic by drag-n-dropping in the Locator sidebar\n* Assign any tiddler to any of the titles in the Locator sidebar by drag-n-dropping\n* Show the (top-level) base tag to be able to move the tiddler titles there\n* Add button to open search results in advanced search\n* Show buttons using the Kin filter only when the filter operator is available\n* Fix related tag issue (not all of them were listed)\n* Fix whitespace issue\n* Refactor the code\n* Add tutorial to the demo\n\n!! 1.4.0\n\n[[See GitLab for detailed change history of this release|https://gitlab.com/bimlas/tw5-locator/compare/v1.3.1...v1.4.0]]\n\n* When there was a space in the search string and \"new tiddler\" button is used from search, the tiddler title was encapsulated (`[[title with spaces]]`)\n* When there was a space in any of the breadcrumbs in sidebar and \"new tiddler\" button is used from it, the tiddler got all of the breadcrumb tags, the title with spaces was encapsulated (literally `[[title with spaces]]` tag)\n* Add more tips to [[$:/plugins/bimlas/locator/README/TIPS]]\n* Add descriptive tooltip to buttons\n\n!! 1.3.1\n\n[[See GitLab for detailed change history of this release|https://gitlab.com/bimlas/tw5-locator/compare/v1.3.0...v1.3.1]]\n\n* Add base tag if there is no breadcrumbs when creating new tiddler in current context\n* Reword documentation\n\n!! 1.3.0\n\n[[See GitLab for detailed change history of this release|https://gitlab.com/bimlas/tw5-locator/compare/v1.2.0...v1.3.0]]\n\n* Create new tiddler from search text\n\n!! 1.2.0\n\n[[See GitLab for detailed change history of this release|https://gitlab.com/bimlas/tw5-locator/compare/v1.1.0...v1.2.0]]\n\n* Add button to create new tiddler in current context\n* Ability to use additional filter on tags\n\n!! 1.1.0\n\n[[See GitLab for detailed change history of this release|https://gitlab.com/bimlas/tw5-locator/compare/v1.0.0...v1.1.0]]\n\n* ''I realized that most functions work without the `kin` filter''\n* Use the same \"style\" for breadcrumb- and list items\n* Show real tags instead of tag pills\n* Turn off filter of direct tag in the breadcrumbs by its tag icon\n* Ancestor tags in breadcrumbs of search are operating like direct labels, they can be removed one by one\n\n!! 1.0.0\n\n* First public release\n"
},
"$:/plugins/bimlas/locator/README/README": {
"title": "$:/plugins/bimlas/locator/README/README",
"tags": "",
"type": "text/vnd.tiddlywiki",
"text": "! Locator\n\nLocator provides ''a universal interface for navigating between your tiddlers and searching, filtering them'' without the need to write [[filter expressions|https://tiddlywiki.com/#Filters]]. The plugin contains ''a table of contents widget and an enhanced search engine'' that contains a ''visual filter builder to filter results by tags and field values''. You can ''organize the tiddlers to any number of trees, even by custom fields or links in text''. Unlike [[classic Table of Contents|https://tiddlywiki.com/#Table-of-Contents%20Macros%20(Examples)]], [[standard search|$:/core/ui/AdvancedSearch/Standard]], [[filter search|$:/core/ui/AdvancedSearch/Filter]] and [[list of tags|$:/core/ui/MoreSideBar/Tags]], this plugin handles these functions organically.\n\n* https://bimlas.gitlab.io/tw5-locator (demo + install)\n* https://gitlab.com/bimlas/tw5-locator (main repository)\n* https://github.com/bimlas/tw5-locator (mirror, ''please star if you like the plugin'')\n\n! Benefits compared to built-in solutions\n\n* ''Shows field values''<br/>You can mark a tiddler with multiple tags and field values, but in the classic ToC you don't see them while browsing, in Locator you can apply them as filters.\n* ''Easy way to search for field values''<br/>Find tags, field values in the standard search based on part of their name or view the all fields of the search results at a glance.\n* ''Limit the scope of search''<br/>You don't have to store your recipes and family tree in a separate wiki just to make them easier to find: you can define the scope of your search with some clicks (without the need to write filters in [[$:/AdvancedSearch]]).\n* ''Reorder the hierarchy with drag-n-drop''<br />You can easily move tiddlers between topics by drag-n-dropping them.\n* ''Create mindmaps''<br />You can associate tiddlers with any field other than the tag, so you can create complex graphs that you can browse through text only user interface.\n* ''There is no need to include a table of contents in the main tiddler of each topic''<br/>Just press the \"Locator sidebar\" button on the tiddler's toolbar and you can browse it's children, links right away in the sidebar.\n* ''Create new tiddler in current scope''<br />The \"new tiddler\" button in Locator creates a new tiddler pre-filled with the currently selected field values and named by the search query (like a special \"new here\" button).\n* ''Phone friendlier''<br/>The width of the classic ToC is increasing and the size of the text is decrasing as we move down in the context, while Locator remains readable.\n\n! Usage\n\nSee the [[demo|https://bimlas.gitlab.io/tw5-locator]] for a complete tutorial\n\n! Installation instructions\n\n''The plugin consists of separate parts'', each of them can be used on its own, so ''it is possible to use only the parts you like'', but they can be used most effectively together because ''they interact with each other''.\n\nTo add the plugin to your own ~TiddlyWiki5, just drag this link to the browser window and ''create or drag the required tiddlers from the demo'':\n\n$:/plugins/bimlas/locator\n\nFor other installation options see the links above.\n\n//Select the next tab to continue.//\n"
},
"$:/plugins/bimlas/locator/README/TIPS": {
"title": "$:/plugins/bimlas/locator/README/TIPS",
"tags": "",
"type": "text/vnd.tiddlywiki",
"text": "! Tips\n\n!! Organic navigation\n\n* In `locator-fields`, look for a tag and apply it recursively; the `locator-search` only affects tiddlers associated with it at any depth\n* Click on the tag in `locator-fields` and open its tiddler, then click on the \"locator sidebar\" button; the `locator-view` sidebar will show it's hierarchy\n* Navigate in the hierarchy in `locator-view` sidebar then search for a term in `locator-search`; pressing the \"search in context\" button restricting the search to the context of `locator-view` sidebar\n* If you cannot find what you are searching for, then you may want to create a new tiddler, use the \"new tiddler\" button in one of the Locator macros\n\n!! Taking good habits\n\n''To get the least chance of writing the same note you wrote earlier, look for a new tiddler before creating a note. To force yourself'', hide the \"new tiddler\" button inside the Page Toolbar and ''use the \"new tiddler\" button inside the Locator search'', so if you want to create a new tiddler you must first look for it. If you are absolutely sure that there is no tiddler yet and you need to create a new tiddler, this solution is also useful because search text defines the default name of the new tiddler.\n\n!! Let the \"Locator sidebar\" button automatically focus to the Locator sidebar\n\nFor example, the More -> Tags sidebar is currently open when we use the \"Locator sidebar\" toolbar button on one of the tiddlers, but we do not see the effect because the Locator sidebar is not visible, thus we need to modify to let button automatically open the corresponding sidebar.\n\n* If we don't know exactly, look for the sidebar tiddler's title (used as `text` parameter in the code below)\n** Open the Advanced Search -> Filter and look for the sidebar name in the `caption` field, for example `[caption[Locator]]` will result [[Locator view]]\n* Find the state tiddler that contains the sidebar tiddler's title (used as `$tiddler` parameter in the code below)\n** Open the Advanced Search -> Filter and look for `[text[Locator view]]` for example\n** Switch between Locator sidebar and another sidebar to see which state tiddler is changing, this is what we are looking for ([[$:/state/tab/sidebar--595412856]] for example)\n* Use the name of the state tiddler and the title of the sidebar in the code below and add this line to [[$:/plugins/bimlas/locator/viewtemplate/open-in-sidebar]] tiddler\n\n```\n<!-- Original code of the button... -->\n...\n<$button tooltip=\"Browse hierarchy of tag in Locator sidebar\" aria-label=\"locator sidebar\" class=<<tv-config-toolbar-class>>>\n<!-- ADD THIS LINE -->\n<$action-setfield $tiddler=\"$:/state/tab/sidebar--595412856\" text=\"Locator view\"/>\n```\n\nIf you rename the sidebar, you must also update this change! See [[this thread on Google Groups|https://groups.google.com/d/msg/tiddlywiki/xAe_fvhzoCY/UoKZc7ZZDQAJ]] for details.\n\n!! Speed up (on phones)\n\n!!! Conditional view\n\nBecause we don't look at the table of contents and search results at the same time, we can ''hide the Locator while we are using the standard search''.\n\nTo achieve this, place the Locator view in the following condition:\n\n```\n<$reveal type=\"match\" default=\"\" text={{{ [prefix[$:/state/popup/search-dropdown]] }}}>\n <<locator-view baseTitle:\"TableOfContents\">>\n</$reveal>\n```\n\n''When you open TiddlyWiki'', the search entry is in focus by default, so ''the Locator sidebar is not visible''. To fix this, change the text of [[$:/config/Search/AutoFocus]] [[hidden setting|https://tiddlywiki.com/#Hidden%20Setting%3A%20Search%20AutoFocus]] to `false`.\n\n//Select the next tab to continue.//\n"
},
"$:/plugins/bimlas/locator/README/macros": {
"title": "$:/plugins/bimlas/locator/README/macros",
"tags": "",
"type": "text/vnd.tiddlywiki",
"text": "! Usage of the macros\n\n!! `locator-view`\n\nThis is ''a [[Table of Contents macro|https://tiddlywiki.com/#Table-of-Contents%20Macros%20(Examples)]] that lets you navigate the wiki'' just as you would with a file manager on the file system. The macro can be placed anywhere you want, for example put it in the sidebar.\n\n* Create a new tiddler\n* Add the [[$:/tags/SideBar]] tag\n* Add the `caption` field to change the title of the tab (\"Contents\" for example)\n* Call the macro by placing this text in the tiddler:\n\n```\n<<locator-view baseTitle:\"TableOfContents\">>\n```\n\nOptional parameters:\n\n; `fieldOfRelationship` (`tags` by default)\n: The default field which the tree is based on.\n\n; `templateOfContextItems` (`$:/plugins/bimlas/locator/field-templates/link` by default)\n: The default template to display the context items with.\n\n!! `locator-search` and `locator-fields`\n\nThe `locator-search` macro can be used in the same way as standard search, but ''you can narrow the scope of the search to the context by the fields filter'', in `locator-fields` you can `search for field values`.\n\n* Create a new tiddler\n* Add the [[$:/tags/SearchResults]] tag\n* Add the `caption` field to change the title of the tab (\"Locator\" for example)\n* Call the macro by placing this text in the tiddler:\n\n```\n<<locator-search>>\n```\n\nDo the same with `<<locator-fields>>` macro.\n\nIf you want to use `locator-fields` in the sidebar (like the sidebar -> More -> Tags tab) insted of standard search, you should also define the `searchTiddler` variable before the macro call:\n\n* Create a new tiddler\n* Add the [[$:/tags/SideBar]] tag\n* Add the `caption` field to change the title of the tab (\"Fields\" for example)\n* Call the macro by placing this text in the tiddler:\n\n```\n<$vars searchTiddler=\" \">\n <<locator-fields>>\n</$vars>\n```\n\n//Select the next tab to continue.//\n"
},
"$:/plugins/bimlas/locator/actions/add-field-value": {
"title": "$:/plugins/bimlas/locator/actions/add-field-value",
"tags": "$:/tags/Actions",
"type": "text/vnd.tiddlywiki",
"text": "\\define assign-value()\n <$action-setfield $tiddler=<<actionTiddler>> $field=<<currentField>> $value=<<currentTiddler>>/>\n\\end\n\n\\define assign-list-item()\n <$action-listops $tiddler=<<actionTiddler>> $field=<<currentField>> $subfilter=\"[all[current]]\"/>\n\\end\n\n<$list filter=\"[title<currentField>subfilter<filter-field-is-list>]\" emptyMessage=<<assign-value>> variable=\"null\">\n <<assign-list-item>>\n</$list>\n"
},
"$:/plugins/bimlas/locator/actions/add-to-history": {
"title": "$:/plugins/bimlas/locator/actions/add-to-history",
"tags": "$:/tags/Actions",
"type": "text/vnd.tiddlywiki",
"text": "<$action-listops $tiddler=<<contextState>> $field=\"history\" $subfilter=\"[all[current]]\"/>\n{{$:/plugins/bimlas/locator/actions/remove-filters}}\n"
},
"$:/plugins/bimlas/locator/actions/move-to-another-context": {
"title": "$:/plugins/bimlas/locator/actions/move-to-another-context",
"tags": "$:/tags/Actions",
"type": "text/vnd.tiddlywiki",
"text": "\\define add-action-tiddler-to-current-tiddler()\n <$tiddler tiddler={{{ [subfilter<filter-history>last[]] }}}>\n {{||$:/plugins/bimlas/locator/actions/remove-field-value}}\n </$tiddler>\n {{||$:/plugins/bimlas/locator/actions/add-field-value}}\n\\end\n\n\\define add-current-tiddler-to-action-tiddler()\n <$vars originalCurrentTiddler=<<currentTiddler>>>\n <$tiddler tiddler=<<actionTiddler>>>\n <$vars actionTiddler={{{ [subfilter<filter-history>last[]] }}}>\n {{||$:/plugins/bimlas/locator/actions/remove-field-value}}\n </$vars>\n <$vars actionTiddler=<<originalCurrentTiddler>>>\n {{||$:/plugins/bimlas/locator/actions/add-field-value}}\n </$vars>\n </$tiddler>\n </$vars>\n\\end\n\n<$list filter=\"[title<contextState>locator-direction-of-traverse<currentField>regexp[to]]\" emptyMessage=<<add-current-tiddler-to-action-tiddler>> variable=\"null\">\n <<add-action-tiddler-to-current-tiddler>>\n</$list>\n"
},
"$:/plugins/bimlas/locator/actions/remove-field-value": {
"title": "$:/plugins/bimlas/locator/actions/remove-field-value",
"tags": "$:/tags/Actions",
"type": "text/vnd.tiddlywiki",
"text": "\\define remove-value()\n <$action-setfield $tiddler=<<actionTiddler>> $field=<<currentField>> $value=\"\"/>\n\\end\n\n\\define remove-list-item()\n <$action-listops $tiddler=<<actionTiddler>> $field=<<currentField>> $subfilter=\"-[all[current]]\"/>\n\\end\n\n<$list filter=\"[title<currentField>subfilter<filter-field-is-list>]\" emptyMessage=<<remove-value>> variable=\"null\">\n <<remove-list-item>>\n</$list>\n"
},
"$:/plugins/bimlas/locator/actions/remove-filters": {
"title": "$:/plugins/bimlas/locator/actions/remove-filters",
"tags": "$:/tags/Actions",
"type": "text/vnd.tiddlywiki",
"text": "<$action-deletetiddler $tiddler=<<intersectionState>>/>\n<$action-deletetiddler $tiddler=<<differenceState>>/>\n<$action-setfield $tiddler=<<contextState>> opened-fields-filters=\"\"/>"
},
"$:/plugins/bimlas/locator/buttons/clear-search-input": {
"title": "$:/plugins/bimlas/locator/buttons/clear-search-input",
"tags": "",
"type": "text/vnd.tiddlywiki",
"text": "<$button tooltip=\"Clear search text, show all results\" class=<<link-button-class>>>\n <$action-setfield $tiddler=\"$:/temp/search\" text=\" \"/>\n {{$:/core/images/preview-open}}\n</$button>\n"
},
"$:/plugins/bimlas/locator/buttons/collapse-history": {
"title": "$:/plugins/bimlas/locator/buttons/collapse-history",
"tags": "",
"type": "text/vnd.tiddlywiki",
"text": "<$button tooltip=\"Collapse history\" class=<<link-button-class>>>\n <$action-listops $tiddler=<<contextState>> $field=\"history\" $filter=\"[title<contextState>each:list-item[history]last[]]\"/>\n {{$:/core/images/fold-button}}\n</$button>\n"
},
"$:/plugins/bimlas/locator/buttons/context-arrow": {
"title": "$:/plugins/bimlas/locator/buttons/context-arrow",
"tags": "",
"type": "text/vnd.tiddlywiki",
"text": "<$list filter=\"[title<contextState>field:invert-direction[yes]]\" emptyMessage={{$:/core/images/right-arrow}}>\n {{$:/core/images/left-arrow}}\n</$list>\n"
},
"$:/plugins/bimlas/locator/buttons/copy-filter-to-advanced-search": {
"title": "$:/plugins/bimlas/locator/buttons/copy-filter-to-advanced-search",
"tags": "",
"type": "text/vnd.tiddlywiki",
"text": "<!--\nSince the search term may contain characters that affect the filter, I\ndo not copy the search term, I just refer to the tiddler.\n-->\n<$wikify name=\"filter\" text=\"<<filter-search-context>> +[search{<<searchTiddler>>}]\">\n <$button tooltip=\"Continue filtering in advanced search\" class=<<link-button-class>>>\n <$action-setfield $tiddler=\"$:/temp/advancedsearch\" text=<<filter>>/>\n <$action-setfield $tiddler=\"$:/state/tab--1498284803\" text=\"$:/core/ui/AdvancedSearch/Filter\"/>\n <$action-navigate $to=\"$:/AdvancedSearch\"/>\n {{$:/core/images/advanced-search-button}}\n </$button>\n</$wikify>\n"
},
"$:/plugins/bimlas/locator/buttons/create-new-tiddler": {
"title": "$:/plugins/bimlas/locator/buttons/create-new-tiddler",
"tags": "",
"type": "text/vnd.tiddlywiki",
"text": "\\define add-as-list()\n <$action-listops $tiddler=\"$:/temp/bimlas/locator/new-tiddler\" $field=<<field>> $subfilter=<<__valueAsFilter__>>/>\n\\end\n\n\\define add-as-value()\n <$action-setfield $tiddler=\"$:/temp/bimlas/locator/new-tiddler\" $field=<<field>> $value={{{ [subfilter<__valueAsFilter__>] }}}/>\n\\end\n\n\\define add-field-value(valueAsFilter)\n <$list filter=\"[title<field>subfilter<filter-field-is-list>]\" emptyMessage=<<add-as-value>>>\n <<add-as-list>>\n </$list>\n\\end\n\n\\define add-filters-as-field-values()\n <$list filter=\"[title<intersectionState>indexes[]]\" variable=\"field\">\n <$list filter=\"[title<intersectionState>locator-selected-field-values<field>first[]]\">\n <<add-field-value \"[title<intersectionState>locator-selected-field-values<field>]\">>\n </$list>\n </$list>\n\\end\n\n\\define add-to-current-context()\n <$set name=\"field\" filter=<<filter-field-of-relationship>>>\n <<add-field-value \"[subfilter<filter-history>last[]]\">>\n </$set>\n\\end\n\n<$button tooltip=\"Create new tiddler in the current context\" class=<<link-button-class>>>\n <<add-filters-as-field-values>>\n <<add-to-current-context>>\n <$action-sendmessage $message=\"tm-new-tiddler\" $param=\"$:/temp/bimlas/locator/new-tiddler\" title={{{ [title<titleOfNewTiddler>] [title{$:/language/DefaultNewTiddlerTitle}] -[[]] +[first[]] }}}/>\n <$action-deletetiddler $tiddler=\"$:/temp/bimlas/locator/new-tiddler\"/>\n {{$:/core/images/new-button}}\n</$button>\n"
},
"$:/plugins/bimlas/locator/buttons/go-down-to-context": {
"title": "$:/plugins/bimlas/locator/buttons/go-down-to-context",
"tags": "",
"type": "text/vnd.tiddlywiki",
"text": "\\define node()\n <$button tooltip=\"Go to context, show chidlren of this tiddler\" class=<<link-button-class>> actions={{$:/plugins/bimlas/locator/actions/add-to-history}}>\n {{$:/plugins/bimlas/locator/buttons/context-arrow}}\n </$button>\n\\end\n\n\\define leaf()\n <$button class=<<link-button-class>>>\n {{$:/core/images/blank}}\n </$button>\n\\end\n\n\\define go-down-to-context()\n <!-- I have to use macro to use $(...)$ in filter expression -->\n <$list filter=\"[all[current]locator-enlist-children:$(currentField)$<contextState>] [title<contextState>field:allow-to-open-leaves[yes]] +[first[]]\" emptyMessage=<<leaf>> variable=\"null\"><<node>></$list>\n\\end\n\n<<go-down-to-context>>\n"
},
"$:/plugins/bimlas/locator/buttons/go-up-to-context": {
"title": "$:/plugins/bimlas/locator/buttons/go-up-to-context",
"tags": "",
"type": "text/vnd.tiddlywiki",
"text": "\\define actions()\n <$action-listops $tiddler=<<contextState>> $field=\"history\" $filter=\"[subfilter<filter-history>allbefore<currentTiddler>] [all[current]]\"/>\n {{$:/plugins/bimlas/locator/actions/remove-filters}}\n\\end\n\n<$button tooltip=\"Go to context, show chidlren of this tiddler\" class=<<link-button-class>> actions=<<actions>>>\n {{$:/plugins/bimlas/locator/buttons/context-arrow}}\n</$button>\n"
},
"$:/plugins/bimlas/locator/buttons/open-field-settings": {
"title": "$:/plugins/bimlas/locator/buttons/open-field-settings",
"tags": "",
"type": "text/vnd.tiddlywiki",
"text": "<$button\n to=\"$:/plugins/bimlas/locator/settings/settings\"\n tooltip=\"Open field settings\"\n class=<<link-button-class>>\n>\n {{$:/core/images/options-button}}<$list filter=\"[title<contextState>!regexp[^\\$:/state/bimlas/locator/search/]]\" variable=\"null\"> Open field settings</$list>\n</$button>"
},
"$:/plugins/bimlas/locator/buttons/remove-filters-of-current-field": {
"title": "$:/plugins/bimlas/locator/buttons/remove-filters-of-current-field",
"tags": "",
"type": "text/vnd.tiddlywiki",
"text": "\\define actions()\n <$action-setfield $tiddler=<<intersectionState>> $index=<<currentField>> $value=\"\"/>\n <$action-setfield $tiddler=<<differenceState>> $index=<<currentField>> $value=\"\"/>\n <$action-listops $tiddler=<<contextState>> $field=\"opened-fields-filters\" $subfilter=\"-[<currentField>]\"/>\n <$list filter=\"[<recursiveFilteringOfCurrentFieldAvailable>regexp[yes]]\" variable=\"null\">\n <$action-setfield $tiddler=\"$:/state/bimlas/locator/search/recursive-filters/\" $index=<<currentField>> $value=\"\"/>\n </$list>\n\\end\n\n<$list filter=\"[title<intersectionState>] [title<differenceState>] +[locator-selected-field-values<currentField>first[]]\" variable=\"null\">\n <$button tooltip=\"Remove field filters\" class=<<link-button-class>> actions=<<actions>>>\n {{$:/core/images/cancel-button}}\n </$button>\n</$list>"
},
"$:/plugins/bimlas/locator/buttons/remove-filters": {
"title": "$:/plugins/bimlas/locator/buttons/remove-filters",
"tags": "",
"type": "text/vnd.tiddlywiki",
"text": "<$list filter=\"[title<intersectionState>] [title<differenceState>] +[locator-selected-field-values[]first[]]\" variable=\"null\">\n <$button tooltip=\"Remove field filters\" class=<<link-button-class>> actions={{$:/plugins/bimlas/locator/actions/remove-filters}}>\n {{$:/core/images/cancel-button}}\n </$button>\n</$list>"
},
"$:/plugins/bimlas/locator/buttons/search-in-context": {
"title": "$:/plugins/bimlas/locator/buttons/search-in-context",
"tags": "",
"type": "text/vnd.tiddlywiki",
"text": "\\define copy-field(sourceTiddler destinationTiddler field)\n <$set name=\"value\" tiddler=<<__sourceTiddler__>> field=<<__field__>>>\n <$action-setfield $tiddler=<<__destinationTiddler__>> $field=<<__field__>> $value=<<value>>/>\n </$set>\n\\end\n\n\\define clear-data-tiddler(tiddler)\n <$action-deletetiddler $tiddler=<<__tiddler__>>/>\n <$action-setfield $tiddler=<<__tiddler__>> type=\"application/json\"/>\n\\end\n\n\\define search-in-current-context()\n <$action-listops $tiddler=\"$:/state/bimlas/locator/search/intersection/\" $index={{{ [subfilter<filter-field-of-relationship>] }}} $subfilter=\"[subfilter<filter-history>last[]]\"/>\n <$action-listops $tiddler=\"$:/state/bimlas/locator/search/recursive-filters/\" $index={{{ [subfilter<filter-field-of-relationship>] }}} $filter=\"[subfilter<filter-history>last[]]\"/>\n\\end\n\n\\define copy-filters()\n <$macrocall $name=\"copy-field\" sourceTiddler=<<intersectionState>> destinationTiddler=\"$:/state/bimlas/locator/search/intersection/\" field=\"text\"/>\n <$macrocall $name=\"copy-field\" sourceTiddler=<<differenceState>> destinationTiddler=\"$:/state/bimlas/locator/search/difference/\" field=\"text\"/>\n\\end\n\n\\define reset-search-context()\n <$action-deletetiddler $tiddler=\"$:/state/bimlas/locator/search/context/\"/>\n <$list filter=\"[<recursiveFilteringAvailable>regexp[yes]]\" variable=\"null\">\n <$macrocall $name=\"clear-data-tiddler\" tiddler=\"$:/state/bimlas/locator/search/recursive-filters/\"/>\n </$list>\n <$macrocall $name=\"clear-data-tiddler\" tiddler=\"$:/state/bimlas/locator/search/intersection/\"/>\n <$macrocall $name=\"clear-data-tiddler\" tiddler=\"$:/state/bimlas/locator/search/difference/\"/>\n\\end\n\n<$button tooltip=\"Restrict search to this context (in full depth)\" class=<<link-button-class>>>\n <<reset-search-context>>\n <<copy-filters>>\n <<search-in-current-context>>\n {{$:/core/images/advanced-search-button}}\n</$button>\n"
},
"$:/plugins/bimlas/locator/buttons/toggle-context-settings": {
"title": "$:/plugins/bimlas/locator/buttons/toggle-context-settings",
"tags": "",
"type": "text/vnd.tiddlywiki",
"text": "\\define opened()\n <$button tooltip=\"Toggle context settings\" class=<<link-button-class additionalClasses:\"active\">>>\n <$action-setfield $tiddler=<<contextState>> $field=\"context-settings-opened\" $value=\"\"/>\n {{$:/core/images/options-button}}\n </$button>\n\\end\n\n\\define closed()\n <$button tooltip=\"Toggle context settings\" class=<<link-button-class>>>\n <$action-setfield $tiddler=<<contextState>> $field=\"context-settings-opened\" $value=\"yes\"/>\n {{$:/core/images/options-button}}\n </$button>\n\\end\n\n<$list filter=\"[title<contextState>field:context-settings-opened[yes]]\" emptyMessage=<<closed>>><<opened>></$list>"
},
"$:/plugins/bimlas/locator/edit-template/locator-references": {
"title": "$:/plugins/bimlas/locator/edit-template/locator-references",
"list-after": "$:/core/ui/EditTemplate/title",
"tags": "$:/tags/EditTemplate",
"type": "text/vnd.tiddlywiki",
"text": "\\define prompt()\n The following references to this tiddler in //<<__field__>>// [[Locator field|$:/plugins/bimlas/locator/settings/settings]] will not be automatically updated:\n\\end\n\n\\define children-by-field(field)\n <$list filter=\"[title{!!draft.of}locator-enlist-children:$field$[]first[]]\" variable=\"null\">\n <$vars stateTiddler=<<qualify \"$:/state/bimlas/locator/edit/references/$field$\">> >\n\n <$reveal type=\"nomatch\" state=<<stateTiddler>> text=\"show\">\n <$button set=<<stateTiddler>> setTo=\"show\" class=\"tc-btn-invisible\">\n {{$:/core/images/right-arrow}}\n <<prompt>>\n </$button>\n </$reveal>\n <$reveal type=\"match\" state=<<stateTiddler>> text=\"show\">\n <$button set=<<stateTiddler>> setTo=\"hide\" class=\"tc-btn-invisible\">\n {{$:/core/images/down-arrow}}\n <<prompt>>\n </$button>\n </$reveal>\n\n <$reveal type=\"match\" state=<<stateTiddler>> text=\"show\">\n <$list filter=\"[title{!!draft.of}locator-enlist-children:$field$[]]\" template=\"$:/core/ui/ListItemTemplate\">\n <$link/>\n </$list>\n </$reveal>\n\n </$vars>\n </$list>\n\\end\n\n<$reveal state=\"!!draft.title\" type=\"nomatch\" text={{!!draft.of}} tag=\"div\">\n <$list filter=\"[locator-enlist-relationship-fields[]] -[[tags]] -[[list]] -[[LINKS-IN-TEXT]]\" variable=\"currentField\">\n <$macrocall $name=\"children-by-field\" field=<<currentField>>/>\n </$list>\n</$reveal>"
},
"$:/plugins/bimlas/locator/field-templates/color": {
"title": "$:/plugins/bimlas/locator/field-templates/color",
"caption": "Color",
"tags": "$:/tags/bimlas/locator/field-templates",
"type": "text/vnd.tiddlywiki",
"text": "<input type=\"color\" name=\"favcolor\" value=<<currentTiddler>> disabled> <$view field=\"title\"/>"
},
"$:/plugins/bimlas/locator/field-templates/edit-fields-plus-transclusion": {
"title": "$:/plugins/bimlas/locator/field-templates/edit-fields-plus-transclusion",
"caption": "Edit fields + Transclusion",
"tags": "$:/tags/bimlas/locator/context-item-templates",
"type": "text/vnd.tiddlywiki",
"text": "\\define frame-classes() tc-tiddler-frame tc-tiddler-edit-frame $(missingTiddlerClass)$ $(shadowTiddlerClass)$ $(systemTiddlerClass)$\n\n{{||$:/plugins/bimlas/locator/field-templates/link}}\n<div class=<<frame-classes>> data-tiddler-title=<<currentTiddler>>>\n <$fieldmangler>\n {{||$:/core/ui/EditTemplate/tags}}\n {{||$:/core/ui/EditTemplate/fields}}\n </$fieldmangler>\n</div>\n<$transclude mode=\"block\"/>\n<hr style=\"border-top: double\"/>"
},
"$:/plugins/bimlas/locator/field-templates/edit-fields": {
"title": "$:/plugins/bimlas/locator/field-templates/edit-fields",
"caption": "Edit fields",
"tags": "$:/tags/bimlas/locator/context-item-templates",
"type": "text/vnd.tiddlywiki",
"text": "\\define frame-classes() tc-tiddler-frame tc-tiddler-edit-frame $(missingTiddlerClass)$ $(shadowTiddlerClass)$ $(systemTiddlerClass)$\n\n{{||$:/plugins/bimlas/locator/field-templates/link}}\n<div class=<<frame-classes>> data-tiddler-title=<<currentTiddler>>>\n <$fieldmangler>\n {{||$:/core/ui/EditTemplate/tags}}\n {{||$:/core/ui/EditTemplate/fields}}\n </$fieldmangler>\n</div>\n<hr style=\"border-top: double\"/>"
},
"$:/plugins/bimlas/locator/field-templates/fields-plus-transclusion": {
"title": "$:/plugins/bimlas/locator/field-templates/fields-plus-transclusion",
"caption": "Fields + Transclusion",
"tags": "$:/tags/bimlas/locator/context-item-templates",
"type": "text/vnd.tiddlywiki",
"text": "{{||$:/plugins/bimlas/locator/field-templates/link}}\n{{||$:/plugins/bimlas/locator/viewtemplate/field-list}}\n<$transclude mode=\"block\"/>\n<hr style=\"border-top: double\"/>"
},
"$:/plugins/bimlas/locator/field-templates/fields": {
"title": "$:/plugins/bimlas/locator/field-templates/fields",
"caption": "Fields",
"tags": "$:/tags/bimlas/locator/context-item-templates",
"type": "text/vnd.tiddlywiki",
"text": "{{||$:/plugins/bimlas/locator/field-templates/link}}\n{{||$:/plugins/bimlas/locator/viewtemplate/field-list}}\n<hr style=\"border-top: double\"/>"
},
"$:/plugins/bimlas/locator/field-templates/icon": {
"title": "$:/plugins/bimlas/locator/field-templates/icon",
"caption": "Icon",
"tags": "$:/tags/bimlas/locator/field-templates",
"type": "text/vnd.tiddlywiki",
"text": "<button class=\"tc-btn-invisible\" disabled><$transclude><<currentTiddler>></$transclude></button> {{||$:/plugins/bimlas/locator/field-templates/link}}"
},
"$:/plugins/bimlas/locator/field-templates/link": {
"title": "$:/plugins/bimlas/locator/field-templates/link",
"caption": "Link",
"tags": "$:/tags/bimlas/locator/field-templates $:/tags/bimlas/locator/context-item-templates",
"type": "text/vnd.tiddlywiki",
"text": "<$link to=<<currentTiddler>>>\n <$transclude field=\"caption\"><$view field=\"title\"/></$transclude>\n</$link>"
},
"$:/plugins/bimlas/locator/field-templates/tag": {
"title": "$:/plugins/bimlas/locator/field-templates/tag",
"caption": "Tag",
"tags": "$:/tags/bimlas/locator/field-templates",
"type": "text/vnd.tiddlywiki",
"text": "<<tag>>"
},
"$:/plugins/bimlas/locator/field-templates/text": {
"title": "$:/plugins/bimlas/locator/field-templates/text",
"caption": "Text",
"tags": "$:/tags/bimlas/locator/field-templates",
"type": "text/vnd.tiddlywiki",
"text": "<$view field=\"title\"/>"
},
"$:/plugins/bimlas/locator/field-templates/transclusion": {
"title": "$:/plugins/bimlas/locator/field-templates/transclusion",
"caption": "Transclusion",
"tags": "$:/tags/bimlas/locator/context-item-templates",
"type": "text/vnd.tiddlywiki",
"text": "{{||$:/plugins/bimlas/locator/field-templates/link}}\n<br/>\n<$transclude mode=\"block\"/>\n<hr style=\"border-top: double\"/>"
},
"$:/plugins/bimlas/locator/macros/locator-fields": {
"title": "$:/plugins/bimlas/locator/macros/locator-fields",
"tags": "$:/tags/Macro",
"type": "text/vnd.tiddlywiki",
"text": "\\define locator-fields()\n <!-- Hide internal macros, do not make them globally available -->\n <$importvariables filter=\"[all[tiddlers+shadows]prefix[$:/plugins/bimlas/locator/macros/]]\">\n <$vars\n contextState=\"$:/state/bimlas/locator/search/context/\"\n intersectionState=\"$:/state/bimlas/locator/search/intersection/\"\n differenceState=\"$:/state/bimlas/locator/search/difference/\"\n recursiveFilteringAvailable=\"yes\"\n >\n\n {{$:/plugins/bimlas/locator/templates/search-toolbar}} {{$:/plugins/bimlas/locator/buttons/remove-filters}}\n\n <p><$checkbox tiddler=<<contextState>> field=\"limit-to-fields-of-filtered-tiddlers\" checked=\"yes\" unchecked=\"no\" default=\"yes\"> Limit to fields of filtered tiddlers</$checkbox></p>\n\n <$list filter=\"[subfilter<filter-selected-field-values>first[]]\" emptyMessage=\"\"\"<$list filter=\"0\" variable=\"resultCount\" template=\"$:/language/Search/Matches\"/>\"\"\">\n <$list filter=\"[subfilter<filter-search-context>count[]]\" variable=\"resultCount\" template=\"$:/language/Search/Matches\"/>\n </$list>\n\n <!-- searchTiddler variable does not available in transcluded tiddlers by default -->\n <$set name=\"filterContextItems\" filter=\"[<contextState>field:limit-to-fields-of-filtered-tiddlers[no]]\" value=\"[!is[system]]\" emptyValue=<<filter-search-context>>>\n <$vars searchedFieldValue={{$(searchTiddler)$}}>\n {{$:/plugins/bimlas/locator/templates/field-names}}\n </$vars>\n </$set>\n\n <$list filter=\"[subfilter<filter-selected-field-values>first[]]\">\n <$list filter=\"[subfilter<filter-search-context>limit[250]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n </$list>\n\n </$vars>\n </$importvariables>\n\\end\n"
},
"$:/plugins/bimlas/locator/macros/locator-search": {
"title": "$:/plugins/bimlas/locator/macros/locator-search",
"tags": "$:/tags/Macro",
"type": "text/vnd.tiddlywiki",
"text": "\\define locator-search()\n <!-- Hide internal macros, do not make them globally available -->\n <$importvariables filter=\"[all[tiddlers+shadows]prefix[$:/plugins/bimlas/locator/macros/]]\">\n <$vars\n contextState=\"$:/state/bimlas/locator/search/context/\"\n intersectionState=\"$:/state/bimlas/locator/search/intersection/\"\n differenceState=\"$:/state/bimlas/locator/search/difference/\"\n filterContextItems=\"[subfilter<filter-search-context>search{$(searchTiddler)$}]\"\n recursiveFilteringAvailable=\"yes\"\n >\n\n {{$:/plugins/bimlas/locator/templates/search-toolbar}}\n\n <$list filter=\"[subfilter<filterContextItems>count[]]\" variable=\"resultCount\" template=\"$:/language/Search/Matches\"/>\n\n {{$:/plugins/bimlas/locator/templates/fields-filter}}\n\n //<small>{{$:/language/Search/Matches/Title}}</small>//\n\n <$list filter=\"[subfilter<filterContextItems>search:title{$(searchTiddler)$}limit[250]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n\n //<small>{{$:/language/Search/Matches/All}}</small>//\n\n <$list filter=\"[subfilter<filterContextItems>limit[250]]\" template=\"$:/core/ui/ListItemTemplate\"/>\n\n </$vars>\n </$importvariables>\n\\end\n"
},
"$:/plugins/bimlas/locator/macros/locator-view": {
"title": "$:/plugins/bimlas/locator/macros/locator-view",
"tags": "$:/tags/Macro",
"type": "text/vnd.tiddlywiki",
"text": "\\define locator-view(baseTitle fieldOfRelationship:\"tags\" templateOfContextItems:\"$:/plugins/bimlas/locator/field-templates/link\")\n <!-- Hide internal macros, do not make them globally available -->\n <$importvariables filter=\"[all[tiddlers+shadows]prefix[$:/plugins/bimlas/locator/macros/]]\">\n <$vars\n contextState=\"$:/state/bimlas/locator/view/context/$(currentTiddler)$\"\n intersectionState=\"$:/state/bimlas/locator/view/intersection/$(currentTiddler)$\"\n differenceState=\"$:/state/bimlas/locator/view/difference/$(currentTiddler)$\"\n defaultFieldOfRelationship=<<__fieldOfRelationship__>>\n >\n <!-- I have to create them nested because internal variables use external ones -->\n <$vars currentField={{{ [subfilter<filter-field-of-relationship>] }}}>\n <$vars filterContextItems=<<filter-view-context>>>\n <div class=\"tc-table-of-contents\">\n\n {{$:/plugins/bimlas/locator/templates/history}}\n\n ---\n\n {{$:/plugins/bimlas/locator/templates/context-settings}}\n <div class=\"bimlas-locator right\">\n {{||$:/plugins/bimlas/locator/templates/view-toolbar}}\n </div>\n {{$:/plugins/bimlas/locator/templates/fields-filter}}\n <ol class=\"bimlas-locator\">\n <$list filter=\"[subfilter<filter-field-of-relationship>regexp[^LINKS-IN-TEXT$]]\" emptyMessage={{$:/plugins/bimlas/locator/templates/list-of-context-items}}>\n {{||$:/plugins/bimlas/locator/templates/list-of-links-in-text}}\n </$list>\n </ol>\n\n </div>\n </$vars>\n </$vars>\n </$vars>\n </$importvariables>\n\\end\n"
},
"$:/plugins/bimlas/locator/macros/css-classes": {
"title": "$:/plugins/bimlas/locator/macros/css-classes",
"tags": "",
"type": "text/vnd.tiddlywiki",
"text": "\\define link-button-class(additionalClasses) tc-btn-invisible tc-tiddlylink bimlas-locator $additionalClasses$\n\\define menu-list-item-class() tc-menu-list-item bimlas-locator"
},
"$:/plugins/bimlas/locator/macros/filters": {
"title": "$:/plugins/bimlas/locator/macros/filters",
"tags": "",
"type": "text/vnd.tiddlywiki",
"text": "\\define filter-history() [<__baseTitle__>] [title<contextState>each:list-item[history]] -[[]]\n\\define filter-selected-field-values() [title<intersectionState>] [title<differenceState>] +[locator-selected-field-values<currentField>]\n\\define filter-field-is-list() [addprefix[$:/config/bimlas/locator/fields/]field:field-type[list]]\n\\define filter-unfiltered-view-context-items() [subfilter<filter-history>last[]locator-enlist-children:$(currentField)$<contextState>!has[draft.of]]\n\\define filter-view-context() [subfilter<filter-history>last[]locator-enlist-children:$(currentField)$<contextState>!has[draft.of]locator-fields-filter<intersectionState>!locator-fields-filter<differenceState>]\n\\define filter-search-context() [!is[system]locator-fields-filter:recursive[$(intersectionState)$]!locator-fields-filter:recursive[$(differenceState)$]]\n\\define filter-field-of-relationship() [title<contextState>get[field-of-relationship]] [<defaultFieldOfRelationship>] +[first[]]\n\n<!--\n I know that `filter-view-context` uses a code duplication of\n `filter-unfiltered-view-context-items`, but I have to do this way, becuse\n $(variable)$ works only with variables defined in direct parent macro, thus\n I cannot add another level to call chain\n-->"
},
"$:/plugins/bimlas/locator/macros/javascript-filters.js": {
"title": "$:/plugins/bimlas/locator/macros/javascript-filters.js",
"text": "/*\\\ntitle: $:/plugins/bimlas/locator/macros/javascript-filters.js\ntype: application/javascript\nmodule-type: filteroperator\n\nSpecial filters used by Locator\n\n\\*/\n(function() {\n\n\t/*jslint node: true, browser: true */\n\t/*global $tw: true */\n\t\"use strict\";\n\n\tfunction getFieldDefinition(options,field) {\n\t\tvar fieldOptionsTiddler = \"$:/config/bimlas/locator/fields/\" + field;\n\n\t\treturn options.wiki.getCacheForTiddler(fieldOptionsTiddler,\"fieldListingOperator\",function() {\n\t\t\tvar fieldOptions = options.wiki.getTiddler(fieldOptionsTiddler) || {fields: {}};\n\t\t\tvar filterOperators = options.wiki.getFilterOperators();\n\t\t\tvar fieldDefinitions = {\n\t\t\t\t\"value\": {\n\t\t\t\t\tfieldType: \"value\",\n\t\t\t\t\tdirection: fieldOptions.fields[\"field-direction\"],\n\t\t\t\t\tenlistChildren: {\n\t\t\t\t\t\t\"to\": function(title,input,prefix) {\n\t\t\t\t\t\t\treturn filterOperators[\"field\"](input,{operand: title,prefix: prefix,suffix: field},options);\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"from\": function(title,unusedInput,unusedPrefix) {\n\t\t\t\t\t\t\treturn (options.wiki.getTiddler(title) || {fields: {}}).fields[field] || []\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"list\": {\n\t\t\t\t\tfieldType: \"list\",\n\t\t\t\t\tdirection: fieldOptions.fields[\"field-direction\"],\n\t\t\t\t\tenlistChildren: {\n\t\t\t\t\t\t\"to\": function(title,input,prefix) {\n\t\t\t\t\t\t\treturn filterOperators[\"contains\"](input,{operand: title,prefix: prefix,suffix: field},options);\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"from\": function(title,unusedInput,unusedPrefix) {\n\t\t\t\t\t\t\treturn options.wiki.getTiddlerList(title,field) || [];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t\tvar linksInTextDefinition = {\n\t\t\t\tfieldType: \"value\",\n\t\t\t\tdirection: fieldOptions.fields[\"field-direction\"],\n\t\t\t\tenlistChildren: {\n\t\t\t\t\t\"to\": function(title,unusedInput,unusedPrefix) {\n\t\t\t\t\t\treturn options.wiki.getTiddlerBacklinks(title);\n\t\t\t\t\t},\n\t\t\t\t\t\"from\": function(title,unusedInput,unusedPrefix) {\n\t\t\t\t\t\treturn options.wiki.getTiddlerLinks(title);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\treturn field === \"LINKS-IN-TEXT\"\n\t\t\t\t? linksInTextDefinition\n\t\t\t\t: fieldDefinitions[fieldOptions.fields[\"field-type\"] || \"value\"];\n\t\t});\n\t}\n\n\tfunction getActiveFilters(options,filterState) {\n\t\treturn options.wiki.getCacheForTiddler(filterState,\"activeFilters\",function() {\n\t\t\tvar filteredFields = options.wiki.getTiddlerDataCached(filterState,{});\n\t\t\tvar results = {};\n\n\t\t\t$tw.utils.each(filteredFields,function(valuesAsString,field) {\n\t\t\t\tvar values = $tw.utils.parseStringArray(valuesAsString) || [];\n\t\t\t\tif(values.length) {\n\t\t\t\t\tresults[field] = values;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn results;\n\t\t});\n\t}\n\n\tfunction applyFieldsFilters(source,options,filterState,filterFunc,prefix) {\n\t\tvar activeFilters = getActiveFilters(options,filterState);\n\t\tvar results = source;\n\n\t\tif(!Object.keys(activeFilters).length) return results;\n\n\t\t$tw.utils.each(activeFilters,function(values,field) {\n\t\t\t$tw.utils.each(values,function(value) {\n\t\t\t\tif(value === \"ANY-VALUE\") {\n\t\t\t\t\tvar filterOperators = options.wiki.getFilterOperators();\n\t\t\t\t\tresults = filterOperators[\"has\"](results,{operand: field,prefix: prefix},options);\n\t\t\t\t} else {\n\t\t\t\t\tresults = filterFunc(results,field,value,prefix);\n\t\t\t\t}\n\t\t\t\tresults = options.wiki.makeTiddlerIterator(results);\n\t\t\t});\n\t\t});\n\n\t\treturn results;\n\t}\n\n\tfunction getDirectionOfTraverse(options,contextState,fieldOfRelationship) {\n\t\tvar direction = getFieldDefinition(options,fieldOfRelationship).direction;\n\n\t\tif(isDirectionInverted(options,contextState)) {\n\t\t\tdirection = invertDirection(direction);\n\t\t}\n\n\t\treturn direction;\n\t}\n\n\tfunction isDirectionInverted(options,contextState) {\n\t\tvar contextStateTiddler = options.wiki.getTiddler(contextState) || {fields: []};\n\t\treturn contextStateTiddler.fields[\"invert-direction\"] === \"yes\"\n\t}\n\n\tfunction invertDirection(direction) {\n\t\treturn [\"from\",\"to\"][(direction === \"from\") + 0];\n\t}\n\n\tfunction enlistChildren(options,parentTitle,fieldOfRelationship,directionOfTraverse) {\n\t\treturn options.wiki.getGlobalCache(\"bimlas-locator-enlist-children-\" + parentTitle + \"-\" + fieldOfRelationship + \"-\" + directionOfTraverse, function() {\n\t\t\tvar fieldDefinition = getFieldDefinition(options, fieldOfRelationship);\n\t\t\tvar allTiddlers = options.wiki.makeTiddlerIterator(options.wiki.getTiddlers());\n\t\t\treturn fieldDefinition.enlistChildren[directionOfTraverse](parentTitle,allTiddlers);\n\t\t});\n\t}\n\n\t/*\n\tFilter titles matching to Locator fields filter\n\n\tInput: list of tiddlers\n\tParam: filterState\n\tPrefix: \"!\" to exclude matching tiddlers\n\tSuffix: \"recusive\" enables recursive filtering\n\t*/\n\texports[\"locator-fields-filter\"] = function(source,operator,options) {\n\t\tvar results = source;\n\t\tvar activeRecursiveFilters = getActiveFilters(options,\"$:/state/bimlas/locator/search/recursive-filters/\");\n\n\t\tif(operator.suffix === \"recursive\") {\n\t\t\tresults = applyFieldsFilters(results,options,operator.operand,recursiveFilterFunc,operator.prefix);\n\t\t} else {\n\t\t\tresults = applyFieldsFilters(results,options,operator.operand,directFilterFunc,operator.prefix);\n\t\t}\n\n\t\treturn results;\n\n\t\tfunction directFilterFunc(input,field,value,prefix) {\n\t\t\tvar fieldDefinition = getFieldDefinition(options,field);\n\t\t\treturn fieldDefinition.enlistChildren[\"to\"](value,input,prefix);\n\t\t}\n\n\t\tfunction recursiveFilterFunc(input,field,fieldValue,prefix) {\n\t\t\tvar isRecursiveFilteringActive = $tw.utils.hop(activeRecursiveFilters,field) && (activeRecursiveFilters[field].indexOf(fieldValue) >= 0);\n\t\t\tif(!isRecursiveFilteringActive) {\n\t\t\t\treturn directFilterFunc(input,field,fieldValue,prefix);\n\t\t\t}\n\n\t\t\tvar fieldDirection = getFieldDefinition(options,field).direction;\n\t\t\tvar children = [];\n\t\t\tcollectChildrenRecursively(fieldValue);\n\t\t\tvar compareFunc = (prefix !== \"!\")\n\t\t\t\t? function(index) { return index >= 0 }\n\t\t\t\t: function(index) { return index < 0 };\n\t\t\tvar results = [];\n\n\t\t\tinput(function(tiddler,title) {\n\t\t\t\tif(compareFunc(children.indexOf(title))) {\n\t\t\t\t\tresults = $tw.utils.pushTop(results, title);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn results;\n\n\t\t\tfunction collectChildrenRecursively(parent) {\n\t\t\t\t$tw.utils.each(enlistChildren(options,parent,field,fieldDirection),function(child) {\n\t\t\t\t\tif(children.indexOf(child) < 0) {\n\t\t\t\t\t\t$tw.utils.pushTop(children, child);\n\t\t\t\t\t\t$tw.utils.pushTop(children, collectChildrenRecursively(child));\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t};\n\n\t/*\n\tFilter fields that are not disabled in Locator field options\n\n\tInput: list of fields\n\tParam (optional): if called from toggleable fields filter (`locator-view` and `locator-search`), set to \"nested\"\n\t*/\n\texports[\"locator-enabled-fields\"] = function(source,operator,options) {\n\t\tvar typeOfFieldsFilter = operator.operand || \"regular\";\n\t\tvar excludedFields = options.wiki.filterTiddlers(\"[all[tiddlers+shadows]field:hide-in-\" + typeOfFieldsFilter + \"-fields-filter[yes]removeprefix[$:/config/bimlas/locator/fields/]]\") || [];\n\t\tvar results = [];\n\n\t\tsource(function(tiddler,title) {\n\t\t\tif(excludedFields.indexOf(title) < 0) {\n\t\t\t\tresults.push(title);\n\t\t\t}\n\t\t});\n\n\t\treturn results;\n\t};\n\n\t/*\n\tList fields which can be used to build tree (\"tags\" for example)\n\n\tInput: none\n\tParam (optional): field to check if it's a relationship field\n\t*/\n\texports[\"locator-enlist-relationship-fields\"] = function(source,operator,options) {\n\t\tvar relationshipFields = options.wiki.getGlobalCache(\"bimlas-locator-enlist-relationship-fields\",function() {\n\t\t\treturn options.wiki.filterTiddlers(\"[all[tiddlers+shadows]prefix[$:/config/bimlas/locator/fields/]has[field-direction]removeprefix[$:/config/bimlas/locator/fields/]]\");\n\t\t});\n\n\t\tif(operator.operand) {\n\t\t\treturn relationshipFields.indexOf(operator.operand) >= 0\n\t\t\t\t? [operator.operand]\n\t\t\t\t: [];\n\t\t}\n\n\t\treturn relationshipFields;\n\t};\n\n\t/*\n\tList field values according to Locator field settings\n\n\tInput: list of tiddlers\n\tParam: field\n\t*/\n\texports[\"locator-enlist-field-values\"] = function(source,operator,options) {\n\t\tvar fieldDefinition = getFieldDefinition(options,operator.operand);\n\t\tvar results = [];\n\n\t\tsource(function(tiddler,title) {\n\t\t\tif(!tiddler) return;\n\n\t\t\tvar value = fieldDefinition.enlistChildren[\"from\"](title);\n\n\t\t\tif(!value) return;\n\n\t\t\tresults = $tw.utils.pushTop(results,value);\n\t\t});\n\n\t\treturn results;\n\t};\n\n\t/*\n\tList of active field filters\n\n\tInput: filterState\n\tParam (optional): field\n\t*/\n\texports[\"locator-selected-field-values\"] = function(source,operator,options) {\n\t\tvar activeFilters = {};\n\n\t\tsource(function(tiddler,title) {\n\t\t\t$tw.utils.each(getActiveFilters(options,title),function(value,key) {\n\t\t\t\tactiveFilters[key] = $tw.utils.pushTop(activeFilters[key] || [],value);\n\t\t\t});\n\t\t});\n\n\t\tif(!Object.keys(activeFilters).length) return [];\n\n\t\treturn operator.operand\n\t\t\t? activeFilters[operator.operand] || []\n\t\t\t: [\"TODO: Join active filter values (array of arrays)\"];\n\t};\n\n\t/*\n\tList of active field names\n\n\tInput: filterState\n\tParam (optional): none\n\t*/\n\texports[\"locator-selected-field-names\"] = function(source,operator,options) {\n\t\tvar fieldNames = [];\n\n\t\tsource(function(tiddler,title) {\n\t\t\tfieldNames = $tw.utils.pushTop(fieldNames,Object.keys(getActiveFilters(options,title)));\n\t\t});\n\n\t\treturn fieldNames;\n\t};\n\n\t/*\n\tList children of input elements based on selected relationship field\n\n\tInput: parent tiddlers\n\tParam (optional): contextState\n\tSuffix: field of relationship\n\t*/\n\texports[\"locator-enlist-children\"] = function(source,operator,options) {\n\t\tvar fieldOfRelationship = operator.suffix;\n\t\tvar directionOfTraverse = getDirectionOfTraverse(options,operator.operand,fieldOfRelationship);\n\t\tvar results = [];\n\n\t\tsource(function(tiddler,title) {\n\t\t\tresults = $tw.utils.pushTop(results, enlistChildren(options,title,fieldOfRelationship,directionOfTraverse));\n\t\t\tresults = options.wiki.sortByList(results,title);\n\t\t});\n\n\t\treturn results;\n\t};\n\n\t/*\n\tGet direction of traverse: field direction + optional invert direction\n\n\tInput: contextState\n\tParam: field of relationship\n\t*/\n\texports[\"locator-direction-of-traverse\"] = function(source,operator,options) {\n\t\tvar results = [];\n\n\t\tsource(function(tiddler,title) {\n\t\t\tresults = [getDirectionOfTraverse(options,title,operator.operand)];\n\t\t});\n\n\t\treturn results;\n\t};\n\n})();\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/plugins/bimlas/locator/macros/template-macros": {
"title": "$:/plugins/bimlas/locator/macros/template-macros",
"tags": "",
"type": "text/vnd.tiddlywiki",
"text": "\\define droppable-menu-list-item(content actions)\n <$droppable actions=<<__actions__>>>\n <div class=\"tc-droppable-placeholder\" style=\"display: block\">\n <<__content__>>\n </div>\n </$droppable>\n\\end"
},
"$:/config/bimlas/locator/fields/LINKS-IN-TEXT": {
"title": "$:/config/bimlas/locator/fields/LINKS-IN-TEXT",
"tags": "",
"type": "text/vnd.tiddlywiki",
"field-direction": "from",
"text": "$:/plugins/bimlas/locator/field-templates/link"
},
"$:/config/bimlas/locator/fields/bag": {
"title": "$:/config/bimlas/locator/fields/bag",
"tags": "",
"type": "text/vnd.tiddlywiki",
"hide-in-nested-fields-filter": "yes",
"hide-in-regular-fields-filter": "yes"
},
"$:/config/bimlas/locator/fields/caption": {
"title": "$:/config/bimlas/locator/fields/caption",
"tags": "",
"type": "text/vnd.tiddlywiki",
"hide-in-nested-fields-filter": "yes"
},
"$:/config/bimlas/locator/fields/color": {
"title": "$:/config/bimlas/locator/fields/color",
"tags": "",
"type": "text/vnd.tiddlywiki",
"text": "$:/plugins/bimlas/locator/field-templates/color"
},
"$:/config/bimlas/locator/fields/created": {
"title": "$:/config/bimlas/locator/fields/created",
"tags": "",
"type": "text/vnd.tiddlywiki",
"hide-in-nested-fields-filter": "yes",
"hide-in-regular-fields-filter": "yes"
},
"$:/config/bimlas/locator/fields/draft.of": {
"title": "$:/config/bimlas/locator/fields/draft.of",
"tags": "",
"type": "text/vnd.tiddlywiki",
"hide-in-nested-fields-filter": "yes",
"hide-in-regular-fields-filter": "yes"
},
"$:/config/bimlas/locator/fields/draft.title": {
"title": "$:/config/bimlas/locator/fields/draft.title",
"tags": "",
"type": "text/vnd.tiddlywiki",
"hide-in-nested-fields-filter": "yes",
"hide-in-regular-fields-filter": "yes"
},
"$:/config/bimlas/locator/fields/icon": {
"title": "$:/config/bimlas/locator/fields/icon",
"tags": "",
"type": "text/vnd.tiddlywiki",
"text": "$:/plugins/bimlas/locator/field-templates/icon"
},
"$:/config/bimlas/locator/fields/list-after": {
"title": "$:/config/bimlas/locator/fields/list-after",
"tags": "",
"type": "text/vnd.tiddlywiki",
"hide-in-nested-fields-filter": "yes",
"hide-in-regular-fields-filter": "yes",
"text": "$:/plugins/bimlas/locator/field-templates/link"
},
"$:/config/bimlas/locator/fields/list-before": {
"title": "$:/config/bimlas/locator/fields/list-before",
"tags": "",
"type": "text/vnd.tiddlywiki",
"hide-in-nested-fields-filter": "yes",
"hide-in-regular-fields-filter": "yes",
"text": "$:/plugins/bimlas/locator/field-templates/link"
},
"$:/config/bimlas/locator/fields/list": {
"title": "$:/config/bimlas/locator/fields/list",
"tags": "",
"type": "text/vnd.tiddlywiki",
"field-type": "list",
"hide-in-nested-fields-filter": "yes",
"hide-in-regular-fields-filter": "yes",
"text": "$:/plugins/bimlas/locator/field-templates/link"
},
"$:/config/bimlas/locator/fields/modified": {
"title": "$:/config/bimlas/locator/fields/modified",
"tags": "",
"type": "text/vnd.tiddlywiki",
"hide-in-nested-fields-filter": "yes",
"hide-in-regular-fields-filter": "yes"
},
"$:/config/bimlas/locator/fields/revision": {
"title": "$:/config/bimlas/locator/fields/revision",
"tags": "",
"type": "text/vnd.tiddlywiki",
"hide-in-nested-fields-filter": "yes",
"hide-in-regular-fields-filter": "yes"
},
"$:/config/bimlas/locator/fields/tags": {
"title": "$:/config/bimlas/locator/fields/tags",
"tags": "",
"type": "text/vnd.tiddlywiki",
"field-type": "list",
"field-direction": "to",
"text": "$:/plugins/bimlas/locator/field-templates/tag"
},
"$:/config/bimlas/locator/fields/text": {
"title": "$:/config/bimlas/locator/fields/text",
"tags": "",
"type": "text/vnd.tiddlywiki",
"hide-in-nested-fields-filter": "yes",
"hide-in-regular-fields-filter": "yes"
},
"$:/config/bimlas/locator/fields/title": {
"title": "$:/config/bimlas/locator/fields/title",
"tags": "",
"type": "text/vnd.tiddlywiki",
"hide-in-nested-fields-filter": "yes",
"hide-in-regular-fields-filter": "yes",
"text": "$:/plugins/bimlas/locator/field-templates/link"
},
"$:/config/bimlas/locator/fields/type": {
"title": "$:/config/bimlas/locator/fields/type",
"tags": "",
"type": "text/vnd.tiddlywiki",
"hide-in-nested-fields-filter": "yes"
},
"$:/plugins/bimlas/locator/settings/settings": {
"title": "$:/plugins/bimlas/locator/settings/settings",
"tags": "",
"type": "text/vnd.tiddlywiki",
"text": "\\define show-in-fields()\n <$select field=\"hide-in-nested-fields-filter\" default=\"\">\n <option value=\"\">Show</option>\n <option value=\"yes\">Hide</option>\n </$select> in nested filter (`locator-view`, `locator-search`)<br/>\n <$select field=\"hide-in-regular-fields-filter\" default=\"\">\n <option value=\"\">Show</option>\n <option value=\"yes\">Hide</option>\n </$select> in regular filter (`locator-fields` and tiddler info)\n\\end\n\n\\define field-type()\n <$select field=\"field-type\" default=\"\">\n <option value=\"\">Value</option>\n <option value=\"list\">List</option>\n </$select>\n\\end\n\n\\define field-direction()\n <$select field=\"field-direction\" default=\"\">\n <option value=\"\">No</option>\n <option value=\"to\">Yes</option>\n <!--\n I blocked it because a tree with children on top is difficult to handle:\n\n For example, there is a tiddler named \"Father\" which has \"Kid\" in the \"children\" field\n\n If you want to filter tiddlers by field values (for example, in the fields filter),\n \"Father\" will be listed among those tiddlers that have \"Kid\" in the \"children\" field.\n In fact, we wanted to children of \"Kid\".\n\n Filtering \"Kid\" in the \"Fields\" search tab will list the tiddlers that have \"Kid\" in\n their \"children\" field (for example, \"Father\"). If you turn on recursive filtering,\n it will list all tiddlers starting with \"Kid\" (so \"Father\" will not be listed).\n\n The \"Create tiddler in context\" button also has to be aware of the direction of the\n field, which also complicates the code.\n\n If you do make this option available, remember to tell the user that when renaming a\n tiddler, he must rewrite the field values that refer to the current tiddler. If you\n want to rewrite it automatically, make sure it works properly with the Relink plugin\n (does not adding the new name more than once to the field).\n -->\n <!-- <option value=\"from\">From</option> -->\n </$select>\n\\end\n\n\\define template()\n <$select field=\"text\" default=\"$:/plugins/bimlas/locator/field-templates/text\">\n <$list filter=\"[all[tiddlers+shadows]tag[$:/tags/bimlas/locator/field-templates]]\">\n <option value=<<currentTiddler>>><$transclude field=\"caption\"><$view field=\"title\"/></$transclude></option>\n </$list>\n </$select>\n <$transclude/>\n\\end\n\n\\define settings(field)\n <$importvariables filter=\"[all[tiddlers+shadows]prefix[$:/plugins/bimlas/locator/macros/]]\">\n\n <h3><$link to=\"$:/config/bimlas/locator/fields/$field$\"><$text text=<<__field__>>/></$link></h3>\n\n <div class=\"tc-control-panel\">\n <table>\n <tbody>\n <tr>\n <td>Description</td>\n <td>//{{$:/language/Docs/Fields/$field$}}//</td>\n </tr>\n <tr>\n <td>Show in fields filter</td>\n <td>\n <<show-in-fields>>\n </td>\n </tr>\n <tr>\n <td>Field type</td>\n <td>\n <<field-type>>\n <p>//Does the field contain a single value (for example `Franz Kafka`) or a list of values (`[[Franz Kafka]] [[Dostojevskij]]`)?//</p>\n </td>\n </tr>\n <tr>\n <td>Does the field represent a tree?</td>\n <td>\n <<field-direction>>\n <p>//If the field contains the title(s) of other tiddler(s) (like \"tags\"), set it to \"Yes\".//</p>\n </td>\n </tr>\n <tr>\n <td>Template</td>\n <td>\n <<template>>\n <p>//The template to display in the field filter.//</p>\n <p>//You can create your own field template tiddlers by adding the// <<tag \"$:/tags/bimlas/locator/field-templates\">> //tag to them (click on this tag pill for examples).//</p>\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n\n </$importvariables>\n\\end\n\n\\define option()\n <option value=<<currentTiddler>>>\n <$view field=\"title\"/>\n <$list filter=\"[subfilter<settingsTiddler>is[tiddler]] [subfilter<settingsTiddler>is[shadow]] +[first[]]\">~</$list>\n <$list filter=\"[subfilter<settingsTiddler>is[tiddler]]\">*</$list>\n </option>\n\\end\n\n\\define settingsTiddler() [title<currentTiddler>addprefix[$:/config/bimlas/locator/fields/]]\n\nSelect field to edit its settings:\n<$select tiddler=\"$:/temp/bimlas/locator/settings-of-field\">\n <optgroup label=\"Fields of regular tiddlers\">\n <$list filter=\"[!is[system]fields[]sort[]]\">\n <<option>>\n </$list>\n </optgroup>\n <optgroup label=\"Fields of system tiddlers\">\n <$list filter=\"[all[tiddlers+shadows]is[system]fields[]] -[!is[system]fields[]] +[sort[]]\">\n <<option>>\n </$list>\n </optgroup>\n</$select>\n\n* //`~`: Has custom settings//\n* //`*`: Settings modified by user//\n\nTo set up a new field, first add it to at least one tiddler.\n\n<p>//You can create your own context item template tiddlers by adding the// <<tag \"$:/tags/bimlas/locator/context-item-templates\">> //tag to them (click on this tag pill for examples).//</p>\n\n<$list filter=\"[title{$:/temp/bimlas/locator/settings-of-field}] -[[]]\">\n <$list filter=<<settingsTiddler>>>\n <$macrocall $name=\"settings\" field={{$:/temp/bimlas/locator/settings-of-field}}/>\n </$list>\n</$list>"
},
"$:/plugins/bimlas/locator/stylesheet": {
"title": "$:/plugins/bimlas/locator/stylesheet",
"tags": "$:/tags/Stylesheet",
"type": "text/vnd.tiddlywiki",
"text": ".tc-tiddler-frame.bimlas-locator-explanation {\n max-width: 400px;\n}\n.bimlas-locator-explanation svg {\n width: 1rem;\n height: 1rem;\n}\n.tc-drop-down button.bimlas-locator {\n width: auto;\n padding: 0;\n display: inline-block;\n background-color: inherit;\n}\nol.bimlas-locator {\n list-style-type: none;\n margin: 0;\n padding-left: 0;\n}\nol.bimlas-locator ol {\n margin-left: 0.75em;\n padding-left: 0.3em;\n border-left: 1px dashed;\n}\nli.toc-item.bimlas-locator, .tc-menu-list-item.bimlas-locator {\n margin-top: 3px;\n margin-bottom: 0;\n}\n.tc-menu-list-item.bimlas-locator > .tc-droppable {\n display: inline-block;\n}\n.tc-block-dropdown.tc-search-drop-down .bimlas-locator a {\n padding: 0;\n}\n.tc-block-dropdown.tc-search-drop-down .bimlas-locator a:hover {\n background-color: initial;\n}\nbutton.bimlas-locator svg {\n margin: 0 0.25em;\n}\nbutton.bimlas-locator.active svg {\n fill: <<colour dirty-indicator>>;\n}\n.bimlas-locator.right {\n float: right;\n margin-right: 1em;\n}\n.bimlas-locator.context-settings {\n border-width: 1px;\n border-style: dashed;\n padding: 0.5em;\n}"
},
"$:/plugins/bimlas/locator/templates/context-item": {
"title": "$:/plugins/bimlas/locator/templates/context-item",
"tags": "",
"type": "text/vnd.tiddlywiki",
"text": "<li class=\"toc-item\">\n {{||$:/plugins/bimlas/locator/buttons/go-down-to-context}}\n <$list filter=\"[title<contextState>get[template-of-context-items]] [title<__templateOfContextItems__>] -[[]] +[first[]]\" variable=\"template\">\n <$transclude tiddler=<<template>>/>\n </$list>\n</li>"
},
"$:/plugins/bimlas/locator/templates/context-settings": {
"title": "$:/plugins/bimlas/locator/templates/context-settings",
"tags": "",
"type": "text/vnd.tiddlywiki",
"text": "\\define field-of-relationship()\n Tree is based on field:<br/>\n <$select tiddler=<<contextState>> field=\"field-of-relationship\" default=<<defaultFieldOfRelationship>>>\n <$list filter=\"[locator-enlist-relationship-fields[]]\" variable=\"currentField\">\n <option value=<<currentField>>>\n <$list filter=\"[subfilter<filter-unfiltered-view-context-items>count[]]\" variable=\"count\">\n (<<count>>) <<currentField>>\n </$list>\n </option>\n </$list>\n </$select>\n\\end\n\n\\define template-of-context-items()\n Template of context items:<br/>\n <$select tiddler=<<contextState>> field=\"template-of-context-items\" default=<<__templateOfContextItems__>>>\n <$list filter=\"[all[tiddlers+shadows]tag[$:/tags/bimlas/locator/context-item-templates]]\">\n <option value=<<currentTiddler>>>\n <$transclude field=\"caption\"><$view field=\"title\"/></$transclude>\n </option>\n </$list>\n </$select>\n\\end\n\n<$list filter=\"[title<contextState>field:context-settings-opened[yes]]\">\n <div class=\"bimlas-locator context-settings\">\n <<field-of-relationship>><br/>\n <<template-of-context-items>><br/>\n <$checkbox\n tiddler=<<contextState>>\n field=\"invert-direction\"\n checked=\"yes\"\n unchecked=\"no\"\n default=\"no\"\n >\n Invert direction\n </$checkbox><br/>\n <$checkbox\n tiddler=<<contextState>>\n field=\"allow-to-open-leaves\"\n checked=\"yes\"\n unchecked=\"no\"\n default=\"no\"\n >\n Allow to open leaves\n </$checkbox><br/>\n {{$:/plugins/bimlas/locator/buttons/open-field-settings}}\n </div>\n</$list>\n"
},
"$:/plugins/bimlas/locator/templates/field-names": {
"title": "$:/plugins/bimlas/locator/templates/field-names",
"tags": "",
"type": "text/vnd.tiddlywiki",
"text": "\\define close-actions()\n <$action-listops $tiddler=<<contextState>> $field=\"opened-fields-filters\" $subfilter=\"-[<currentField>]\"/>\n\\end\n\n\\define open-actions()\n <$action-listops $tiddler=<<contextState>> $field=\"opened-fields-filters\" $subfilter=\"[<currentField>]\"/>\n\\end\n\n\\define closed()\n <$button class=<<fieldButtonClass>> actions=<<open-actions>>>\n {{$:/core/images/down-arrow}} <<currentField>>\n </$button>\n {{$:/plugins/bimlas/locator/buttons/remove-filters-of-current-field}}\n\\end\n\n\\define opened()\n <$button class=<<fieldButtonClass>> actions=<<close-actions>>>\n {{$:/core/images/up-arrow}} <<currentField>>\n </$button>\n {{$:/plugins/bimlas/locator/buttons/remove-filters-of-current-field}}\n {{$:/plugins/bimlas/locator/templates/field-values}}\n\\end\n\n\\define field-names() [title<intersectionState>] [title<differenceState>] +[locator-selected-field-names[]] [subfilter<filterContextItems>fields[]locator-enabled-fields<typeOfFieldsFilter>] +[sort[]]\n\\define has-field-value-to-list() [subfilter<filterContextItems>has<currentField>search:$(currentField)$<searchedFieldValue>] [subfilter<filter-selected-field-values>] +[first[]]\n\n<ol class=\"bimlas-locator\">\n <$list filter=<<field-names>> variable=\"currentField\">\n <$list filter=<<has-field-value-to-list>> variable=\"null\">\n <$set name=\"recursiveFilteringOfCurrentFieldAvailable\" filter=\"[<recursiveFilteringAvailable>regexp[yes]] [locator-enlist-relationship-fields<currentField>] +[count[]regexp[2]]\" value=\"yes\" emptyValue=\"no\">\n <$set name=\"fieldButtonClass\" filter=\"[subfilter<filter-selected-field-values>first[]]\" value=<<link-button-class additionalClasses:\"active\">> emptyValue=<<link-button-class>>>\n <li class=<<menu-list-item-class>>>\n <$list filter=\"[title<contextState>contains:opened-fields-filters<currentField>]\" emptyMessage=<<closed>>><<opened>></$list>\n </li>\n </$set>\n </$set>\n </$list>\n </$list>\n</ol>"
},
"$:/plugins/bimlas/locator/templates/field-value-template": {
"title": "$:/plugins/bimlas/locator/templates/field-value-template",
"tags": "",
"type": "text/vnd.tiddlywiki",
"text": "<$list filter=\"[[$:/config/bimlas/locator/fields/]addsuffix<currentField>get[text]]\" emptyMessage={{$:/plugins/bimlas/locator/field-templates/text}} variable=\"template\">\n <$transclude tiddler=<<template>>/>\n</$list>"
},
"$:/plugins/bimlas/locator/templates/field-values": {
"title": "$:/plugins/bimlas/locator/templates/field-values",
"tags": "",
"type": "text/vnd.tiddlywiki",
"text": "\\define remove-filtering-of-current-field()\n <$action-setfield $tiddler=<<intersectionState>> $index=<<currentField>> $value=\"\"/>\n <$action-setfield $tiddler=<<differenceState>> $index=<<currentField>> $value=\"\"/>\n <$list filter=\"[<recursiveFilteringOfCurrentFieldAvailable>regexp[yes]]\" variable=\"null\">\n <$action-setfield $tiddler=\"$:/state/bimlas/locator/search/recursive-filters/\" $index=<<currentField>> $value=\"\"/>\n </$list>\n\\end\n\n\\define remove-from-intersection-state()\n <$action-listops $tiddler=<<intersectionState>> $index=<<currentField>> $subfilter=\"-[all[current]]\"/>\n\\end\n\n\\define remove-from-difference-state()\n <$action-listops $tiddler=<<differenceState>> $index=<<currentField>> $subfilter=\"-[all[current]]\"/>\n\\end\n\n\\define activate-actions()\n <<__beforeActivateActions__>>\n <$action-listops $tiddler=<<__filterState__>> $index=<<currentField>> $subfilter=\"[all[current]]\"/>\n\\end\n\n\\define inactivate-actions()\n <$action-listops $tiddler=<<__filterState__>> $index=<<currentField>> $subfilter=\"-[all[current]]\"/>\n <$list filter=\"[<recursiveFilteringOfCurrentFieldAvailable>regexp[yes]]\" variable=\"null\">\n <$action-listops $tiddler=\"$:/state/bimlas/locator/search/recursive-filters/\" $index=<<currentField>> $subfilter=\"-[all[current]]\"/>\n </$list>\n\\end\n\n\\define button-inactive()\n <$button tooltip=<<__tooltip__>> class=<<link-button-class>> actions=<<activate-actions>>>\n <<__icon__>>\n </$button>\n\\end\n\n\\define button-active()\n <$button tooltip=<<__tooltip__>> class=<<link-button-class additionalClasses:\"active\">> actions=<<inactivate-actions>>>\n <<__icon__>>\n </$button>\n\\end\n\n\\define toggle-button(filterState icon beforeActivateActions tooltip)\n <$list filter=\"[title<__filterState__>locator-selected-field-values<currentField>is[current]]\" emptyMessage=<<button-inactive>>>\n <<button-active>>\n </$list>\n\\end\n\n\\define field-values-of-context-items() [subfilter<filterContextItems>locator-enlist-field-values<currentField>search:title<searchedFieldValue>] [subfilter<filter-selected-field-values>] +[sort[]]\n\n<ol class=\"bimlas-locator\">\n <li class=<<menu-list-item-class>>>\n <$tiddler tiddler=\"ANY-VALUE\">\n <$macrocall\n $name=\"toggle-button\"\n filterState=<<intersectionState>>\n icon={{$:/core/images/new-button}}\n beforeActivateActions=<<remove-filtering-of-current-field>>\n tooltip=\"Toggle filtering to any value\"\n />\n <$macrocall\n $name=\"toggle-button\"\n filterState=<<differenceState>>\n icon={{$:/core/images/close-button}}\n beforeActivateActions=<<remove-filtering-of-current-field>>\n tooltip=\"Toggle filtering to any value\"\n />\n __Any value__\n </$tiddler>\n </li>\n <$list filter=\"[subfilter<field-values-of-context-items>regexp[^ANY-VALUE$]count[]] -[[1]]\" variable=\"null\">\n <$list filter=<<field-values-of-context-items>>>\n <li class=<<menu-list-item-class>>>\n <$macrocall\n $name=\"toggle-button\"\n filterState=<<intersectionState>>\n icon={{$:/core/images/new-button}}\n beforeActivateActions=<<remove-from-difference-state>>\n tooltip=\"Toggle filtering to this value\"\n />\n <$macrocall\n $name=\"toggle-button\"\n filterState=<<differenceState>>\n icon={{$:/core/images/close-button}}\n beforeActivateActions=<<remove-from-intersection-state>>\n tooltip=\"Toggle filtering to this value\"\n />\n <$list filter=\"[<recursiveFilteringOfCurrentFieldAvailable>regexp[yes]]\" variable=\"null\">\n <$macrocall\n $name=\"toggle-button\"\n filterState=\"$:/state/bimlas/locator/search/recursive-filters/\"\n icon={{$:/core/images/link}}\n tooltip=\"Toggle recursive filtering to this value\"\n />\n </$list>\n <$macrocall\n $name=\"droppable-menu-list-item\"\n content={{$:/plugins/bimlas/locator/templates/field-value-template}}\n actions={{$:/plugins/bimlas/locator/actions/add-field-value}}\n />\n </li>\n </$list>\n </$list>\n</ol>\n"
},
"$:/plugins/bimlas/locator/templates/fields-filter": {
"title": "$:/plugins/bimlas/locator/templates/fields-filter",
"tags": "",
"type": "text/vnd.tiddlywiki",
"text": "\\define open-actions()\n <$action-listops $tiddler=<<contextState>> $field=\"opened-fields-filters\" $subfilter=\"[[FIELDS-FILTER]]\"/>\n\\end\n\n\\define close-actions()\n <$action-listops $tiddler=<<contextState>> $field=\"opened-fields-filters\" $subfilter=\"-[[FIELDS-FILTER]]\"/>\n\\end\n\n\\define opened()\n <$button class=<<fieldsFilterButtonClass>> actions=<<close-actions>>>\n {{$:/core/images/up-arrow}} __Filter by fields__\n </$button>\n {{$:/plugins/bimlas/locator/buttons/remove-filters}}\n <ol class=\"bimlas-locator\">\n {{$:/plugins/bimlas/locator/templates/field-names}}\n </ol>\n\\end\n\n\\define closed()\n <$button class=<<fieldsFilterButtonClass>> actions=<<open-actions>>>\n {{$:/core/images/down-arrow}} __Filter by fields__\n </$button>\n {{$:/plugins/bimlas/locator/buttons/remove-filters}}\n\\end\n\n<$set name=\"fieldsFilterButtonClass\" filter=\"[subfilter<filter-selected-field-values>first[]]\" value=<<link-button-class additionalClasses:\"active\">> emptyValue=<<link-button-class>>>\n <$vars typeOfFieldsFilter=\"nested\">\n <$list filter=\"[title<contextState>contains:opened-fields-filters[FIELDS-FILTER]]\" emptyMessage=<<closed>>><<opened>></$list>\n </$vars>\n</$set>"
},
"$:/plugins/bimlas/locator/templates/history-item": {
"title": "$:/plugins/bimlas/locator/templates/history-item",
"tags": "",
"type": "text/vnd.tiddlywiki",
"text": "{{||$:/plugins/bimlas/locator/buttons/go-up-to-context}}\n{{||$:/plugins/bimlas/locator/field-templates/link}}"
},
"$:/plugins/bimlas/locator/templates/history": {
"title": "$:/plugins/bimlas/locator/templates/history",
"tags": "",
"type": "text/vnd.tiddlywiki",
"text": "<$list filter=<<filter-history>>>\n <$macrocall $name=\"droppable-menu-list-item\" content={{$:/plugins/bimlas/locator/templates/history-item}} actions={{$:/plugins/bimlas/locator/actions/move-to-another-context}}/>\n</$list>\n"
},
"$:/plugins/bimlas/locator/templates/list-of-context-items": {
"title": "$:/plugins/bimlas/locator/templates/list-of-context-items",
"tags": "",
"type": "text/vnd.tiddlywiki",
"text": "<$list filter=<<filterContextItems>>>\n <$macrocall\n $name=\"droppable-menu-list-item\"\n content={{$:/plugins/bimlas/locator/templates/context-item}}\n actions={{$:/plugins/bimlas/locator/actions/move-to-another-context}}\n />\n</$list>"
},
"$:/plugins/bimlas/locator/templates/list-of-links-in-text": {
"title": "$:/plugins/bimlas/locator/templates/list-of-links-in-text",
"tags": "",
"type": "text/vnd.tiddlywiki",
"text": "<$list filter=\"[subfilter<filterContextItems>sort[]]\">\n {{||$:/plugins/bimlas/locator/templates/context-item}}\n</$list>"
},
"$:/plugins/bimlas/locator/templates/search-toolbar": {
"title": "$:/plugins/bimlas/locator/templates/search-toolbar",
"tags": "",
"type": "text/vnd.tiddlywiki",
"text": "<$vars\n titleOfNewTiddler={{$:/temp/search}}\n>\n {{$:/plugins/bimlas/locator/buttons/clear-search-input}}\n {{$:/plugins/bimlas/locator/buttons/copy-filter-to-advanced-search}}\n {{$:/plugins/bimlas/locator/buttons/create-new-tiddler}}\n {{$:/plugins/bimlas/locator/buttons/open-field-settings}}\n</$vars>\n"
},
"$:/plugins/bimlas/locator/templates/view-toolbar": {
"title": "$:/plugins/bimlas/locator/templates/view-toolbar",
"tags": "",
"type": "text/vnd.tiddlywiki",
"text": "<$list filter=\"[title<contextState>!field:invert-direction[yes]]\" variable=\"null\">\n <$list filter=\"[subfilter<filter-field-of-relationship>!regexp[^LINKS-IN-TEXT$]]\">\n {{||$:/plugins/bimlas/locator/buttons/create-new-tiddler}}\n </$list>\n {{$:/plugins/bimlas/locator/buttons/search-in-context}}\n</$list>\n{{$:/plugins/bimlas/locator/buttons/collapse-history}}\n{{$:/plugins/bimlas/locator/buttons/toggle-context-settings}}"
},
"$:/plugins/bimlas/locator/viewtemplate/field-list": {
"title": "$:/plugins/bimlas/locator/viewtemplate/field-list",
"tags": "",
"type": "text/vnd.tiddlywiki",
"text": "<table class=\"tc-view-field-table\">\n <tbody>\n <$list filter=\"[all[current]fields[]locator-enabled-fields[]sort[title]] -text\" variable=\"currentField\">\n <tr class=\"tc-view-field\">\n <td class=\"tc-view-field-name\">\n <$text text=<<currentField>>/>\n </td>\n <td class=\"tc-view-field-value\">\n <$list filter=\"[all[current]locator-enlist-field-values<currentField>]\">\n {{||$:/plugins/bimlas/locator/templates/field-value-template}}\n </$list>\n </td>\n </tr>\n </$list>\n </tbody>\n</table>"
},
"$:/plugins/bimlas/locator/viewtemplate/fields-info": {
"title": "$:/plugins/bimlas/locator/viewtemplate/fields-info",
"caption": "{{$:/language/TiddlerInfo/Fields/Caption}} (Locator)",
"list-after": "$:/core/ui/TiddlerInfo/Fields",
"tags": "$:/tags/TiddlerInfo",
"type": "text/vnd.tiddlywiki",
"text": "{{||$:/plugins/bimlas/locator/viewtemplate/field-list}}\n\n{{$:/plugins/bimlas/locator/buttons/open-field-settings}}"
},
"$:/plugins/bimlas/locator/viewtemplate/open-in-sidebar": {
"title": "$:/plugins/bimlas/locator/viewtemplate/open-in-sidebar",
"tags": "$:/tags/ViewToolbar",
"type": "text/vnd.tiddlywiki",
"caption": "{{$:/core/images/chevron-right}} locator sidebar",
"description": "Browse hierarchy of tag in Locator sidebar",
"list-before": "$:/core/ui/Buttons/open-window",
"text": "\\whitespace trim\n<$button tooltip=\"Browse hierarchy of tag in Locator sidebar\" aria-label=\"locator sidebar\" class=<<tv-config-toolbar-class>>>\n<$vars\n contextState=\"$:/state/bimlas/locator/view/context/\"\n intersectionState=\"$:/state/bimlas/locator/view/intersection/\"\n differenceState=\"$:/state/bimlas/locator/view/difference/\"\n>\n {{||$:/plugins/bimlas/locator/actions/add-to-history}}\n</$vars>\n<$list filter=\"[<tv-config-toolbar-icons>prefix[yes]]\" variable=\"listItem\">\n{{$:/core/images/chevron-right}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>prefix[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text=\"locator sidebar\"/>\n</span>\n</$list>\n</$button>\n"
}
}
}
{
"tiddlers": {
"$:/plugins/flibbles/relink/js/bulkops.js": {
"text": "/*\\\nmodule-type: startup\n\nReplaces the relinkTiddler defined in $:/core/modules/wiki-bulkops.js\n\nThis is a startup instead of a wikimethods module-type because it's the only\nway to ensure this runs after the old relinkTiddler method is applied.\n\n\\*/\n(function(){\n\n/*jslint node: false, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar language = require('$:/plugins/flibbles/relink/js/language.js');\n\nexports.name = \"redefine-relinkTiddler\";\nexports.synchronous = true;\n// load-modules is when wikimethods are applied in\n// ``$:/core/modules/startup/load-modules.js``\nexports.after = ['load-modules'];\n\nexports.startup = function() {\n\t$tw.Wiki.prototype.relinkTiddler = relinkTiddler;\n};\n\n/** Walks through all relinkable tiddlers and relinks them.\n * This replaces the existing function in core Tiddlywiki.\n */\nfunction relinkTiddler(fromTitle, toTitle, options) {\n\tvar self = this;\n\tvar failures = [];\n\tvar records = this.getRelinkReport(fromTitle, toTitle, options);\n\tfor (var title in records) {\n\t\tvar entries = records[title];\n\t\tvar changes = Object.create(null);\n\t\tvar update = false;\n\t\tfor (var field in entries) {\n\t\t\tvar entry = entries[field];\n\t\t\tlanguage.eachImpossible(entry, function() {\n\t\t\t\tfailures.push(title);\n\t\t\t});\n\t\t\tlanguage.logAll(entry, title, fromTitle, toTitle, options);\n\t\t\tif (entry && entry.output) {\n\t\t\t\tchanges[field] = entry.output;\n\t\t\t\tupdate = true;\n\t\t\t}\n\t\t}\n\t\t// If any fields changed, update tiddler\n\t\tif (update) {\n\t\t\tvar tiddler = this.getTiddler(title);\n\t\t\tvar newTiddler = new $tw.Tiddler(tiddler,changes,self.getModificationFields())\n\t\t\tnewTiddler = $tw.hooks.invokeHook(\"th-relinking-tiddler\",newTiddler,tiddler);\n\t\t\tself.addTiddler(newTiddler);\n\t\t}\n\t};\n\tif (failures.length > 0) {\n\t\tvar options = $tw.utils.extend(\n\t\t\t{ variables: {to: toTitle, from: fromTitle},\n\t\t\t wiki: this},\n\t\t\toptions );\n\t\tlanguage.reportFailures(failures, options);\n\t}\n};\n\n})();\n",
"module-type": "startup",
"title": "$:/plugins/flibbles/relink/js/bulkops.js",
"type": "application/javascript"
},
"$:/plugins/flibbles/relink/js/language.js": {
"text": "/*\\\nmodule-type: library\n\nThis handles all logging and alerts Relink emits.\n\n\\*/\n\nvar prettylink = require(\"$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/prettylink.js\");\nvar Placeholder = require(\"$:/plugins/flibbles/relink/js/utils/placeholder.js\");\n\nexports.eachImpossible = function(rootEntry, method) {\n\tif (rootEntry.eachChild) {\n\t\trootEntry.eachChild(function(child) {\n\t\t\texports.eachImpossible.call(this, child, method);\n\t\t});\n\t}\n\tif (rootEntry.impossible) {\n\t\tmethod(rootEntry);\n\t}\n};\n\nexports.logAll = function(entry, title, from, to, options) {\n\tvar raw = exports.log[entry.name];\n\tif (entry.impossible) {\n\t\treturn;\n\t}\n\tif (raw) {\n\t\texports.logRelink(raw, entry, title, from, to, options);\n\t\treturn;\n\t}\n\tif (entry.eachChild) {\n\t\tentry.eachChild(function(child) {\n\t\t\texports.logAll(child, title, from, to, options);\n\t\t});\n\t}\n};\n\nexports.logRelink = function(raw, args, title, from, to, options) {\n\traw = \"Renaming '\"+from+\"' to '\"+to+\"' in \" + raw + \" of tiddler '\"+title+\"'\";\n\t// This is cheap, but whatevs. To do a proper\n\t// rendering would require working through a wiki\n\t// object. Too heavy weight for log messages.\n\tvar msg = raw.replace(/<<([^<>]+)>>/g, function(match, key) {\n\t\tvar value = args[key];\n\t\tif (key === \"field\") {\n\t\t\tvalue = descriptor(value);\n\t\t};\n\t\treturn value || (\"<<\"+key+\">>\");\n\t});\n\tconsole.log(msg);\n};\n\n// This wraps alert so it can be monkeypatched during testing.\nexports.alert = function(message) {\n\talert(message);\n};\n\nexports.getString = function(title, options) {\n\ttitle = \"$:/plugins/flibbles/relink/language/\" + title;\n\treturn options.wiki.renderTiddler(\"text/plain\", title, options);\n};\n\nvar logger;\n\nexports.reportFailures = function(failureList, options) {\n\tif (!logger) {\n\t\tlogger = new $tw.utils.Logger(\"Relinker\");\n\t}\n\tvar alertString = this.getString(\"Error/ReportFailedRelinks\", options)\n\tvar placeholder = new Placeholder(options);\n\tvar phOptions = $tw.utils.extend({placeholder: placeholder}, options);\n\tvar alreadyReported = Object.create(null);\n\tvar reportList = [];\n\t$tw.utils.each(failureList, function(f) {\n\t\tif (!alreadyReported[f]) {\n\t\t\tif ($tw.browser) {\n\t\t\t\treportList.push(\"\\n* \" + prettylink.makeLink(f, undefined, phOptions));\n\t\t\t} else {\n\t\t\t\treportList.push(\"\\n* \" + f);\n\t\t\t}\n\t\t\talreadyReported[f] = true;\n\t\t}\n\t});\n\tlogger.alert(placeholder.getPreamble() + alertString + \"\\n\" + reportList.join(\"\"));\n};\n\nexports.log = {\n\t\"html\": \"<<<element>> /> element\",\n\t\"field\": \"<<field>>\",\n\t\"filteredtransclude\": \"filtered transclusion\",\n\t\"image\": \"image\",\n\t\"import\": \"\\\\import filter\",\n\t\"macrodef\": \"<<macro>> definition\",\n\t\"prettylink\": \"prettylink\",\n\t\"syslink\": \"syslink\",\n\t\"transclude\": \"transclusion\",\n\t\"wikilink\": \"CamelCase link\",\n};\n\nfunction descriptor(field) {\n\tif (field === \"tags\") {\n\t\treturn \"tags\";\n\t} else {\n\t\treturn field + \" field\" ;\n\t}\n};\n",
"module-type": "library",
"title": "$:/plugins/flibbles/relink/js/language.js",
"type": "application/javascript"
},
"$:/plugins/flibbles/relink/js/mangler.js": {
"text": "/*\\\nmodule-type: widget\n\nCreates a mangler widget for field validation. This isn't meant to be used\nby the user. It's only used in Relink configuration.\n\n\\*/\n\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\nvar language = require('$:/plugins/flibbles/relink/js/language.js');\nvar settings = require('$:/plugins/flibbles/relink/js/settings.js');\n\nvar RelinkManglerWidget = function(parseTreeNode,options) {\n\tthis.initialise(parseTreeNode,options);\n\tthis.addEventListeners([\n\t\t{type: \"relink-add-field\", handler: \"handleAddFieldEvent\"},\n\t\t{type: \"relink-add-operator\", handler: \"handleAddOperatorEvent\"},\n\t\t{type: \"relink-add-parameter\", handler: \"handleAddParameterEvent\"},\n\t\t{type: \"relink-add-attribute\", handler: \"handleAddAttributeEvent\"}\n\t]);\n};\n\nexports.relinkmangler = RelinkManglerWidget;\n\nRelinkManglerWidget.prototype = new Widget();\n\nRelinkManglerWidget.prototype.handleAddFieldEvent = function(event) {\n\tvar param = event.paramObject;\n\tif (typeof param !== \"object\" || !param.field) {\n\t\t// Can't handle it.\n\t\treturn true;\n\t}\n\tvar trimmedName = param.field.toLowerCase().trim();\n\tif (!trimmedName) {\n\t\t// Still can't handle it, but don't warn.\n\t\treturn true;\n\t}\n\tif(!$tw.utils.isValidFieldName(trimmedName)) {\n\t\tlanguage.alert($tw.language.getString(\n\t\t\t\"InvalidFieldName\",\n\t\t\t{variables:\n\t\t\t\t{fieldName: trimmedName}\n\t\t\t}\n\t\t));\n\t} else {\n\t\tadd(this.wiki, \"fields\", trimmedName);\n\t}\n\treturn true;\n};\n\n/**Not much validation, even though there are definitely illegal\n * operator names. If you input on, Relink won't relink it, but it\n * won't choke on it either. Tiddlywiki will...\n */\nRelinkManglerWidget.prototype.handleAddOperatorEvent = function(event) {\n\tvar param = event.paramObject;\n\tif (param) {\n\t\tadd(this.wiki, \"operators\", param.operator);\n\t}\n\treturn true;\n};\n\nRelinkManglerWidget.prototype.handleAddParameterEvent = function(event) {\n\tvar param = event.paramObject;\n\tif (param && param.macro && param.parameter) {\n\t\tif (/\\s/.test(param.macro.trim())) {\n\t\t\tlanguage.alert(language.getString(\n\t\t\t\t\"Error/InvalidMacroName\",\n\t\t\t\t{ variables: {macroName: param.macro},\n\t\t\t\t wiki: this.wiki\n\t\t\t\t}\n\t\t\t));\n\t\t} else if (/[ \\/]/.test(param.parameter.trim())) {\n\t\t\tlanguage.alert(language.getString(\n\t\t\t\t\"Error/InvalidParameterName\",\n\t\t\t\t{ variables: {parameterName: param.parameter},\n\t\t\t\t wiki: this.wiki\n\t\t\t\t}\n\t\t\t));\n\t\t} else {\n\t\t\tadd(this.wiki, \"macros\", param.macro, param.parameter);\n\t\t}\n\t}\n\treturn true;\n};\n\nRelinkManglerWidget.prototype.handleAddAttributeEvent = function(event) {\n\tvar param = event.paramObject;\n\tif (param && param.element && param.attribute) {\n\t\tif (/[ \\/]/.test(param.element.trim())) {\n\t\t\tlanguage.alert(language.getString(\n\t\t\t\t\"Error/InvalidElementName\",\n\t\t\t\t{ variables: {elementName: param.element},\n\t\t\t\t wiki: this.wiki\n\t\t\t\t}\n\t\t\t));\n\t\t} else if (/[ \\/]/.test(param.attribute.trim())) {\n\t\t\tlanguage.alert(language.getString(\n\t\t\t\t\"Error/InvalidAttributeName\",\n\t\t\t\t{ variables: {attributeName: param.attribute},\n\t\t\t\t wiki: this.wiki\n\t\t\t\t}\n\t\t\t));\n\t\t} else {\n\t\t\tadd(this.wiki, \"attributes\", param.element, param.attribute);\n\t\t}\n\t}\n\treturn true;\n};\n\nfunction add(wiki, category/*, path parts*/) {\n\tvar path = \"$:/config/flibbles/relink/\" + category;\n\tfor (var x = 2; x < arguments.length; x++) {\n\t\tvar part = arguments[x];\n\t\t// Abort if it's falsy, or only whitespace. Also, trim spaces\n\t\tif (!part || !(part = part.trim())) {\n\t\t\treturn;\n\t\t}\n\t\tpath = path + \"/\" + part;\n\t}\n\tvar def = settings.getDefaultType(wiki);\n\twiki.addTiddler({title: path, text: def});\n};\n",
"module-type": "widget",
"title": "$:/plugins/flibbles/relink/js/mangler.js",
"type": "application/javascript"
},
"$:/plugins/flibbles/relink/js/settings.js": {
"text": "/*\\\nmodule-type: library\n\nThis handles the fetching and distribution of relink settings.\n\n\\*/\n\nvar fieldTypes = Object.create(null);\nvar surveyors = [];\nvar prefix = \"$:/config/flibbles/relink/\";\n\n$tw.modules.forEachModuleOfType(\"relinkfieldtype\", function(title, exports) {\n\tfunction NewType() {};\n\tNewType.prototype = exports;\n\tNewType.typeName = exports.name;\n\tfieldTypes[exports.name] = NewType;\n\t// For legacy reasons, some of the field types can go by other names\n\tif (exports.aliases) {\n\t\t$tw.utils.each(exports.aliases, function(alias) {\n\t\t\tfieldTypes[alias] = NewType;\n\t\t});\n\t}\n});\n\n$tw.modules.forEachModuleOfType(\"relinksurveyor\", function(title, exports) {\n\tsurveyors.push(exports);\n});\n\nfunction Settings(wiki) {\n\tthis.settings = compileSettings(wiki);\n\tthis.wiki = wiki;\n};\n\nmodule.exports = Settings;\n\n/**Returns a specific relinker.\n * This is useful for wikitext rules which need to parse a filter or a list\n */\nSettings.getType = function(name) {\n\tvar Handler = fieldTypes[name];\n\treturn Handler ? new Handler() : undefined;\n};\n\nSettings.getTypes = function() {\n\t// We don't return fieldTypes, because we don't want it modified,\n\t// and we need to filter out legacy names.\n\tvar rtn = Object.create(null);\n\tfor (var type in fieldTypes) {\n\t\tvar typeObject = fieldTypes[type];\n\t\trtn[typeObject.typeName] = typeObject;\n\t}\n\treturn rtn;\n};\n\nSettings.getDefaultType = function(wiki) {\n\tvar tiddler = wiki.getTiddler(\"$:/config/flibbles/relink/settings/default-type\");\n\tvar defaultType = tiddler && tiddler.fields.text;\n\t// make sure the default actually exists, otherwise default\n\treturn fieldTypes[defaultType] ? defaultType : \"title\";\n};\n\nSettings.prototype.survey = function(text, fromTitle, options) {\n\tif (text) {\n\t\tfor (var i = 0; i < surveyors.length; i++) {\n\t\t\tif (surveyors[i].survey(text, fromTitle, options)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n};\n\nSettings.prototype.getAttribute = function(elementName) {\n\treturn this.settings.attributes[elementName];\n};\n\nSettings.prototype.getAttributes = function() {\n\treturn flatten(this.settings.attributes);\n};\n\n\nSettings.prototype.getFields = function() {\n\treturn this.settings.fields;\n};\n\nSettings.prototype.getOperators = function() {\n\treturn this.settings.operators;\n};\n\nSettings.prototype.getMacro = function(macroName) {\n\treturn this.settings.macros[macroName];\n};\n\nSettings.prototype.getMacros = function() {\n\treturn flatten(this.settings.macros);\n};\n\nSettings.prototype.refresh = function(changes) {\n\tfor (var title in changes) {\n\t\tif (title.substr(0, prefix.length) === prefix) {\n\t\t\tthis.settings = compileSettings(this.wiki);\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n};\n\n/**Factories define methods that create settings given config tiddlers.\n * for factory method 'example', it will be called once for each:\n * \"$:/config/flibbles/relink/example/...\" tiddler that exists.\n * the argument \"key\" will be set to the contents of \"...\"\n *\n * The reason I build relink settings in this convoluted way is to minimize\n * the number of times tiddlywiki has to run through EVERY tiddler looking\n * for relink config tiddlers.\n *\n * Also, by exporting \"factories\", anyone who extends relink can patch in\n * their own factory methods to create settings that are generated exactly\n * once per rename.\n */\nexports.factories = {\n\tattributes: function(attributes, data, key) {\n\t\tvar elem = root(key);\n\t\tvar attr = key.substr(elem.length+1);\n\t\tattributes[elem] = attributes[elem] || Object.create(null);\n\t\tattributes[elem][attr] = data;\n\t},\n\tfields: function(fields, data, name) {\n\t\tfields[name] = data;\n\t},\n\tmacros: function(macros, data, key) {\n\t\t// We take the last index, not the first, because macro\n\t\t// parameters can't have slashes, but macroNames can.\n\t\tvar name = dir(key);\n\t\tvar arg = key.substr(name.length+1);\n\t\tmacros[name] = macros[name] || Object.create(null);\n\t\tmacros[name][arg] = data;\n\t},\n\toperators: function(operators, data, name) {\n\t\toperators[name] = data;\n\t}\n};\n\nfunction compileSettings(wiki) {\n\tvar settings = Object.create(null);\n\tfor (var name in exports.factories) {\n\t\tsettings[name] = Object.create(null);\n\t}\n\twiki.eachShadowPlusTiddlers(function(tiddler, title) {\n\t\tif (title.substr(0, prefix.length) === prefix) {\n\t\t\tvar remainder = title.substr(prefix.length);\n\t\t\tvar category = root(remainder);\n\t\t\tvar factory = exports.factories[category];\n\t\t\tif (factory) {\n\t\t\t\tvar name = remainder.substr(category.length+1);\n\t\t\t\tvar Handler = fieldTypes[tiddler.fields.text];\n\t\t\t\tif (Handler) {\n\t\t\t\t\tvar data = new Handler();\n\t\t\t\t\tdata.source = title;\n\t\t\t\t\t// Secret feature. You can access a config tiddler's\n\t\t\t\t\t// fields from inside the fieldtype handler. Cool\n\t\t\t\t\t// tricks can be done with this.\n\t\t\t\t\tdata.fields = tiddler.fields;\n\t\t\t\t\tfactory(settings[category], data, name);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\treturn settings;\n};\n\n/* Returns first bit of a path. path/to/tiddler -> path\n */\nfunction root(string) {\n\tvar index = string.indexOf('/');\n\tif (index >= 0) {\n\t\treturn string.substr(0, index);\n\t}\n};\n\n/* Returns all but the last bit of a path. path/to/tiddler -> path/to\n */\nfunction dir(string) {\n\tvar index = string.lastIndexOf('/');\n\tif (index >= 0) {\n\t\treturn string.substr(0, index);\n\t}\n}\n\nfunction flatten(set) {\n\tvar signatures = Object.create(null);\n\tfor (var outerName in set) {\n\t\tvar setItem = set[outerName];\n\t\tfor (var innerName in setItem) {\n\t\t\tsignatures[outerName + \"/\" + innerName] = setItem[innerName];\n\t\t}\n\t}\n\treturn signatures;\n};\n",
"module-type": "library",
"title": "$:/plugins/flibbles/relink/js/settings.js",
"type": "application/javascript"
},
"$:/plugins/flibbles/relink/js/wikimethods.js": {
"text": "/*\\\nmodule-type: wikimethod\n\nIntroduces some utility methods used by Relink.\n\n\\*/\n\nvar MacroSettings = require('$:/plugins/flibbles/relink/js/utils/macroConfig.js');\nvar Settings = require(\"$:/plugins/flibbles/relink/js/settings.js\");\n\nvar relinkOperations = Object.create(null);\n$tw.modules.applyMethods('relinkoperator', relinkOperations);\n\n/** Returns a pair like this,\n * { title: {field: entry, ... }, ... }\n */\nexports.getRelinkReport = function(fromTitle, toTitle, options) {\n\tvar cache = this.getGlobalCache(\"relink-\"+fromTitle, function() {\n\t\treturn Object.create(null);\n\t});\n\tif (!cache[toTitle]) {\n\t\tcache[toTitle] = getFreshRelinkReport(this, fromTitle, toTitle, options);\n\t}\n\treturn cache[toTitle];\n};\n\nfunction getFreshRelinkReport(wiki, fromTitle, toTitle, options) {\n\toptions = options || {};\n\toptions.wiki = options.wiki || wiki;\n\toptions.settings = wiki.getRelinkConfig();\n\tfromTitle = (fromTitle || \"\").trim();\n\ttoTitle = (toTitle || \"\").trim();\n\tvar changeList = Object.create(null);\n\tif(fromTitle && toTitle) {\n\t\tvar tiddlerList = wiki.getRelinkableTitles();\n\t\tfor (var i = 0; i < tiddlerList.length; i++) {\n\t\t\tvar title = tiddlerList[i];\n\t\t\tvar tiddler = wiki.getTiddler(title);\n\t\t\t// Don't touch plugins or JavaScript modules\n\t\t\tif(tiddler\n\t\t\t&& !tiddler.fields[\"plugin-type\"]\n\t\t\t&& tiddler.fields.type !== \"application/javascript\") {\n\t\t\t\ttry {\n\t\t\t\t\tvar entries = Object.create(null);\n\t\t\t\t\tfor (var operation in relinkOperations) {\n\t\t\t\t\t\trelinkOperations[operation](tiddler, fromTitle, toTitle, entries, options);\n\t\t\t\t\t}\n\t\t\t\t\tfor (var field in entries) {\n\t\t\t\t\t\t// So long as there is one key,\n\t\t\t\t\t\t// add it to the change list.\n\t\t\t\t\t\tchangeList[title] = entries;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\t// Should we test for instanceof Error instead?: yes\n\t\t\t\t\t// Does that work in the testing environment?: no\n\t\t\t\t\tif (e.message) {\n\t\t\t\t\t\te.message = e.message + \"\\nWhen relinking '\" + title + \"'\";\n\t\t\t\t\t}\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn changeList;\n};\n\nexports.getRelinkableTitles = function() {\n\tvar toUpdate = \"$:/config/flibbles/relink/to-update\";\n\tvar self = this;\n\treturn this.getCacheForTiddler(toUpdate, \"relink-toUpdate\", function() {\n\t\tvar tiddler = self.getTiddler(toUpdate);\n\t\tif (tiddler) {\n\t\t\treturn self.compileFilter(tiddler.fields.text);\n\t\t} else {\n\t\t\treturn self.allTitles;\n\t\t}\n\t})();\n};\n\n\nexports.getRelinkConfig = function() {\n\tif (this._relinkConfig === undefined) {\n\t\tvar settings = new Settings(this);\n\t\tvar config = new MacroSettings(this, settings);\n\t\tconfig.import( \"[[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]\");\n\t\t// All this below is just wiki.addEventListener, only it\n\t\t// puts the event in front, because we need to refresh our\n\t\t// relink settings before updating tiddlers.\n\t\tthis.eventListeners = this.eventListeners || {};\n\t\tthis.eventListeners.change = this.eventListeners.change || [];\n\t\tthis.eventListeners.change.unshift(function(changes) {\n\t\t\tconfig.refresh(changes);\n\t\t});\n\t\tthis._relinkConfig = config;\n\t}\n\treturn this._relinkConfig;\n};\n",
"module-type": "wikimethod",
"title": "$:/plugins/flibbles/relink/js/wikimethods.js",
"type": "application/javascript"
},
"$:/plugins/flibbles/relink/js/filteroperators/all_relinkable.js": {
"text": "/*\\\nmodule-type: allfilteroperator\n\nFilter function for [all[relinkable]].\nReturns all tiddlers subject to relinking.\n\n\\*/\n\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.relinkable = function(source,prefix,options) {\n\treturn options.wiki.getRelinkableTitles();\n};\n\n})();\n",
"module-type": "allfilteroperator",
"title": "$:/plugins/flibbles/relink/js/filteroperators/all_relinkable.js",
"type": "application/javascript"
},
"$:/plugins/flibbles/relink/js/filteroperators/impossible.js": {
"text": "/*\\\nmodule-type: relinkfilteroperator\n\nThis filter is meant for internal Relink use only, thus it's\nundocumented and subject to change. Also, it's really not great.\n\nGiven an input of targets, (possibly just one), outputs all the tiddlers in\nwhich Relink would fail to update <<currentTiddler>> to the operand in ALL\ncases.\n\n`[all[tiddlers+system]relink:impossible<toTiddler>]`\n\n\\*/\n\nvar language = require(\"$:/plugins/flibbles/relink/js/language.js\");\n\nexports.impossible = function(source,operator,options) {\n\tvar from = options.widget && options.widget.getVariable(\"currentTiddler\");\n\tvar to = operator.operand,\n\t\tresults = [];\n\tif (from) {\n\t\tvar records = options.wiki.getRelinkReport(\n\t\t\tfrom, to, options);\n\t\tsource(function(tiddler, title) {\n\t\t\tvar fields = records[title];\n\t\t\tif (fields) {\n\t\t\t\tvar impossible = false;\n\t\t\t\tfor (var field in fields) {\n\t\t\t\t\tlanguage.eachImpossible(fields[field], function() {\n\t\t\t\t\t\timpossible = true;\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (impossible) {\n\t\t\t\t\tresults.push(title);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n",
"module-type": "relinkfilteroperator",
"title": "$:/plugins/flibbles/relink/js/filteroperators/impossible.js",
"type": "application/javascript"
},
"$:/plugins/flibbles/relink/js/filteroperators/references.js": {
"text": "/*\\\nmodule-type: relinkfilteroperator\n\nGiven a title as an operand, returns all non-shadow tiddlers that have any\nsort of updatable reference to it.\n\n\n`relink:references[fromTiddler]]`\n\nReturns all tiddlers that reference `fromTiddler` somewhere inside them.\n\nInput is ignored. Maybe it shouldn't do this.\nAlso, maybe it should properly recon, instead of fake replacing the title with\n`__relink_dummy__`\n\\*/\n\nexports.references = function(source,operator,options) {\n\tvar fromTitle = operator.operand,\n\t\tresults = [];\n\tif (fromTitle) {\n\t\tvar records = options.wiki.getRelinkReport(\n\t\t\tfromTitle, \"$:/plugins/flibbles/relink/dummy\", options);\n\t\tfor (var title in records) {\n\t\t\tresults.push(title);\n\t\t}\n\t}\n\treturn results;\n};\n",
"module-type": "relinkfilteroperator",
"title": "$:/plugins/flibbles/relink/js/filteroperators/references.js",
"type": "application/javascript"
},
"$:/plugins/flibbles/relink/js/filteroperators/relink.js": {
"text": "/*\\\nmodule-type: filteroperator\n\nThis filter acts as a namespace for several small, simple filters, such as\n\n`[relink:impossible[]]`\n\n\\*/\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar language = require('$:/plugins/flibbles/relink/js/language.js');\n\nvar relinkFilterOperators;\n\nfunction getRelinkFilterOperators() {\n\tif(!relinkFilterOperators) {\n\t\trelinkFilterOperators = {};\n\t\t$tw.modules.applyMethods(\"relinkfilteroperator\",\n\t\t relinkFilterOperators);\n\t}\n\treturn relinkFilterOperators;\n}\n\nexports.relink = function(source,operator,options) {\n\tvar suffixPair = parseSuffix(operator.suffix);\n\tvar relinkFilterOperator = getRelinkFilterOperators()[suffixPair[0]];\n\tif (relinkFilterOperator) {\n\t\tvar newOperator = $tw.utils.extend({}, operator);\n\t\tnewOperator.suffix = suffixPair[1];\n\t\treturn relinkFilterOperator(source, newOperator, options);\n\t} else {\n\t\treturn [language.getString(\"Error/RelinkFilterOperator\", options)];\n\t}\n};\n\nfunction parseSuffix(suffix) {\n\tvar index = suffix? suffix.indexOf(\":\"): -1;\n\tif (index >= 0) {\n\t\treturn [suffix.substr(0, index), suffix.substr(index+1)];\n\t} else {\n\t\treturn [suffix];\n\t}\n}\n",
"module-type": "filteroperator",
"title": "$:/plugins/flibbles/relink/js/filteroperators/relink.js",
"type": "application/javascript"
},
"$:/plugins/flibbles/relink/js/filteroperators/report.js": {
"text": "/*\\\nmodule-type: relinkfilteroperator\n\nGiven a title as an operand, returns a string for each occurrence of that title\nwithin each input title.\n\n[[title]] +[relink:report[fromTiddler]]`\n\nReturns string representation of fromTiddler occurrences in title.\n\\*/\n\nexports.report = function(source,operator,options) {\n\tvar fromTitle = operator.operand,\n\t\tresults = [],\n\t\trecords = options.wiki.getRelinkReport(\n\t\t\tfromTitle, fromTitle, options);\n\tif (fromTitle) {\n\t\tsource(function(tiddler, title) {\n\t\t\tvar affectedFields = records[title];\n\t\t\tif (affectedFields) {\n\t\t\t\tfor (var field in affectedFields) {\n\t\t\t\t\tvar entry = affectedFields[field];\n\t\t\t\t\tvar signatures = entry.report();\n\t\t\t\t\tresults = results.concat(signatures);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\treturn results;\n};\n",
"module-type": "relinkfilteroperator",
"title": "$:/plugins/flibbles/relink/js/filteroperators/report.js",
"type": "application/javascript"
},
"$:/plugins/flibbles/relink/js/filteroperators/signatures.js": {
"text": "/*\\\nmodule-type: relinkfilteroperator\n\nThis filter returns all input tiddlers which are a source of\nrelink configuration.\n\n`[all[tiddlers+system]relink:source[macros]]`\n\n\\*/\n\nvar settings = require('$:/plugins/flibbles/relink/js/settings.js');\n\nexports.signatures = function(source,operator,options) {\n\tvar plugin = operator.operand || null;\n\tvar set = getSet(options);\n\tif (plugin === \"$:/core\") {\n\t\t// Core doesn't actually have any settings. We mean Relink\n\t\tplugin = \"$:/plugins/flibbles/relink\";\n\t}\n\tvar signatures = [];\n\tfor (var signature in set) {\n\t\tvar source = set[signature].source;\n\t\tif (options.wiki.getShadowSource(source) === plugin) {\n\t\t\tsignatures.push(signature);\n\t\t}\n\t}\n\treturn signatures;\n};\n\nexports.type = function(source,operator,options) {\n\tvar results = [];\n\tvar set = getSet(options);\n\tsource(function(tiddler, signature) {\n\t\tif (set[signature]) {\n\t\t\tresults.push(set[signature].name);\n\t\t}\n\t});\n\treturn results;\n};\n\nexports.types = function(source,operator,options) {\n\tvar def = settings.getDefaultType(options.wiki);\n\tvar types = Object.keys(settings.getTypes());\n\ttypes.sort();\n\t// move default to front\n\ttypes.sort(function(x,y) { return x === def ? -1 : y === def ? 1 : 0; });\n\treturn types;\n};\n\nexports.source = function(source,operator,options) {\n\tvar results = [];\n\tvar category = operator.suffix;\n\tvar set = getSet(options);\n\tsource(function(tiddler, signature) {\n\t\tif (set[signature]) {\n\t\t\tresults.push(set[signature].source);\n\t\t}\n\t});\n\treturn results;\n};\n\nfunction getSet(options) {\n\treturn options.wiki.getGlobalCache(\"relink-signatures\", function() {\n\t\tvar config = options.wiki.getRelinkConfig();\n\t\tvar set = Object.create(null);\n\t\tvar categories = {\n\t\t\tattributes: config.getAttributes(),\n\t\t\tfields: config.getFields(),\n\t\t\tmacros: config.getMacros(),\n\t\t\toperators: config.getOperators()};\n\t\t$tw.utils.each(categories, function(list, category) {\n\t\t\t$tw.utils.each(list, function(item, key) {\n\t\t\t\tset[category + \"/\" + key] = item;\n\t\t\t});\n\t\t});\n\t\treturn set;\n\t});\n};\n",
"module-type": "relinkfilteroperator",
"title": "$:/plugins/flibbles/relink/js/filteroperators/signatures.js",
"type": "application/javascript"
},
"$:/plugins/flibbles/relink/js/filteroperators/splitafter.js": {
"text": "/*\\\ntitle: $:/core/modules/filters/splitbefore.js\ntype: application/javascript\nmodule-type: relinkfilteroperator\n\nFilter operator that splits each result on the last occurance of the specified separator and returns the last bit.\n\nWhat does this have to do with relink? Nothing. I need this so I can render\nthe configuration menu. I //could// use [splitregexp[]], but then I'd be\nlimited to Tiddlywiki v5.1.20 or later.\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nExport our filter function\n*/\nexports.splitafter = function(source,operator,options) {\n\tvar results = [];\n\tsource(function(tiddler,title) {\n\t\tvar index = title.lastIndexOf(operator.operand);\n\t\tif(index < 0) {\n\t\t\t$tw.utils.pushTop(results,title);\n\t\t} else {\n\t\t\t$tw.utils.pushTop(results,title.substr(index+1));\n\t\t}\n\t});\n\treturn results;\n};\n\n})();\n\n",
"title": "$:/plugins/flibbles/relink/js/filteroperators/splitafter.js",
"type": "application/javascript",
"module-type": "relinkfilteroperator"
},
"$:/plugins/flibbles/relink/js/fieldtypes/filter.js": {
"text": "/*\\\nThis specifies logic for updating filters to reflect title changes.\n\\*/\n\nvar refHandler = require(\"$:/plugins/flibbles/relink/js/fieldtypes/reference\");\nvar Rebuilder = require(\"$:/plugins/flibbles/relink/js/utils/rebuilder\");\nvar EntryNode = require('$:/plugins/flibbles/relink/js/utils/entry');\n\nexports.name = \"filter\";\n\nvar FilterEntry = EntryNode.newType(\"filter\");\n\nFilterEntry.prototype.report = function() {\n\treturn this.children.map(function(child) {\n\t\tif (!child.report) {\n\t\t\treturn \"\";\n\t\t}\n\t\treturn child.report();\n\t});\n};\n\nfunction OperatorEntry(operandEntry) { this.entry = operandEntry; };\nOperatorEntry.prototype.name = \"operator\";\n\nOperatorEntry.prototype.eachChild = function(method) { method(this.entry); }\n\nOperatorEntry.prototype.report = function() {\n\tvar operand = \"\";\n\tif (this.entry.report) {\n\t\toperand = this.entry.report();\n\t}\n\tvar op = this.operator;\n\tvar brackets = '[]';\n\tif (this.type === \"indirect\") {\n\t\toperand = \"{\" + operand + \"}\";\n\t} else {\n\t\toperand = \"[\" + operand + \"]\";\n\t}\n\tvar suffix = '';\n\tif (op.suffix) {\n\t\tsuffix = \":\" + op.suffix;\n\t}\n\treturn \"[\" + (op.prefix || '') + op.operator + suffix + operand + \"]\";\n};\n\n/**Returns undefined if no change was made.\n */\nexports.relink = function(filter, fromTitle, toTitle, options) {\n\tif (!options.settings.survey(filter, fromTitle, options)) {\n\t\treturn undefined;\n\t}\n\tvar filterEntry = new FilterEntry();\n\tvar relinker = new Rebuilder(filter);\n\tvar whitelist = options.settings.getOperators();\n\tvar p = 0, // Current position in the filter string\n\t\tmatch, noPrecedingWordBarrier,\n\t\twordBarrierRequired=false;\n\tvar whitespaceRegExp = /\\s+/mg,\n\t\toperandRegExp = /((?:\\+|\\-|~|=)?)(?:(\\[)|(?:\"([^\"]*)\")|(?:'([^']*)')|([^\\s\\[\\]]+))/mg;\n\twhile(p < filter.length) {\n\t\t// Skip any whitespace\n\t\twhitespaceRegExp.lastIndex = p;\n\t\tmatch = whitespaceRegExp.exec(filter);\n\t\tnoPrecedingWordBarrier = false;\n\t\tif(match && match.index === p) {\n\t\t\tp = p + match[0].length;\n\t\t} else if (p != 0) {\n\t\t\tif (wordBarrierRequired) {\n\t\t\t\trelinker.add(' ', p, p);\n\t\t\t\twordBarrierRequired = false;\n\t\t\t} else {\n\t\t\t\tnoPrecedingWordBarrier = true;\n\t\t\t}\n\t\t}\n\t\t// Match the start of the operation\n\t\tif(p < filter.length) {\n\t\t\tvar val;\n\t\t\toperandRegExp.lastIndex = p;\n\t\t\tmatch = operandRegExp.exec(filter);\n\t\t\tif(!match || match.index !== p) {\n\t\t\t\t// It's a bad filter\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tif(match[1]) { // prefix\n\t\t\t\tp++;\n\t\t\t}\n\t\t\tif(match[2]) { // Opening square bracket\n\t\t\t\t// We check if this is a standalone title,\n\t\t\t\t// like `[[MyTitle]]`. We treat those like\n\t\t\t\t// `\"MyTitle\"` or `MyTitle`. Not like a run.\n\t\t\t\tvar standaloneTitle = /\\[\\[([^\\]]+)\\]\\]/g;\n\t\t\t\tstandaloneTitle.lastIndex = p;\n\t\t\t\tvar alone = standaloneTitle.exec(filter);\n\t\t\t\tif (!alone || alone.index != p) {\n\t\t\t\t\t// It's a legit run\n\t\t\t\t\tp =parseFilterOperation(relinker,fromTitle,toTitle,filterEntry,filter,p,whitelist,options);\n\t\t\t\t\tif (p === undefined) {\n\t\t\t\t\t\t// The filter is malformed\n\t\t\t\t\t\t// We do nothing.\n\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tbracketTitle = alone[1];\n\t\t\t\toperandRegExp.lastIndex = standaloneTitle.lastIndex;\n\t\t\t\tval = alone[1];\n\t\t\t} else {\n\t\t\t\t// standalone Double quoted string, single\n\t\t\t\t// quoted string, or noquote ahead.\n\t\t\t\tval = match[3] || match[4] || match[5];\n\t\t\t}\n\t\t\t// From here on, we're dealing with a standalone title\n\t\t\t// expression. like `\"MyTitle\"` or `[[MyTitle]]`\n\t\t\t// We're much more flexible about relinking these.\n\t\t\tvar preference = undefined;\n\t\t\tif (match[3]) {\n\t\t\t\tpreference = '\"';\n\t\t\t} else if (match[4]) {\n\t\t\t\tpreference = \"'\";\n\t\t\t} else if (match[5]) {\n\t\t\t\tpreference = '';\n\t\t\t}\n\t\t\tif (val === fromTitle) {\n\t\t\t\tvar entry = {name: \"title\"};\n\t\t\t\tvar newVal = wrapTitle(toTitle, preference);\n\t\t\t\tif (newVal === undefined) {\n\t\t\t\t\tif (!options.placeholder) {\n\t\t\t\t\t\tentry.impossible = true;\n\t\t\t\t\t\tfilterEntry.add(entry);\n\t\t\t\t\t\tp = operandRegExp.lastIndex;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tnewVal = \"[<\"+options.placeholder.getPlaceholderFor(toTitle,undefined,options)+\">]\";\n\t\t\t\t}\n\t\t\t\tif (newVal[0] != '[') {\n\t\t\t\t\t// not bracket enclosed\n\t\t\t\t\t// this requires whitespace\n\t\t\t\t\t// arnound it\n\t\t\t\t\tif (noPrecedingWordBarrier && !match[1]) {\n\t\t\t\t\t\trelinker.add(' ', p, p);\n\t\t\t\t\t}\n\t\t\t\t\twordBarrierRequired = true;\n\t\t\t\t}\n\t\t\t\tentry.output = toTitle;\n\t\t\t\tentry.operator = {operator: \"title\"};\n\t\t\t\tentry.quotation = preference;\n\t\t\t\tfilterEntry.add(entry);\n\t\t\t\trelinker.add(newVal,p,operandRegExp.lastIndex);\n\t\t\t}\n\t\t\tp = operandRegExp.lastIndex;\n\t\t}\n\t}\n\tif (filterEntry.children.length > 0) {\n\t\tfilterEntry.output = relinker.results();\n\t\treturn filterEntry;\n\t}\n\treturn undefined;\n};\n\n/* Same as this.relink, except this has the added constraint that the return\n * value must be able to be wrapped in curly braces. (i.e. '{{{...}}}')\n */\nexports.relinkInBraces = function(filter, fromTitle, toTitle, options) {\n\tvar entry = this.relink(filter, fromTitle, toTitle, options);\n\tif (entry && entry.output && !canBeInBraces(entry.output)) {\n\t\t// Although I think we can actually do this one.\n\t\tdelete entry.output;\n\t\tentry.impossible = true;\n\t}\n\treturn entry;\n};\n\nfunction wrapTitle(value, preference) {\n\tvar choices = {\n\t\t\"\": function(v) {return !/[\\s\\[\\]]/.test(v); },\n\t\t\"[\": canBePrettyOperand,\n\t\t\"'\": function(v) {return v.indexOf(\"'\") < 0; },\n\t\t'\"': function(v) {return v.indexOf('\"') < 0; }\n\t};\n\tvar wrappers = {\n\t\t\"\": function(v) {return v; },\n\t\t\"[\": function(v) {return \"[[\"+v+\"]]\"; },\n\t\t\"'\": function(v) {return \"'\"+v+\"'\"; },\n\t\t'\"': function(v) {return '\"'+v+'\"'; }\n\t};\n\tif (choices[preference]) {\n\t\tif (choices[preference](value)) {\n\t\t\treturn wrappers[preference](value);\n\t\t}\n\t}\n\tfor (var quote in choices) {\n\t\tif (choices[quote](value)) {\n\t\t\treturn wrappers[quote](value);\n\t\t}\n\t}\n\t// No quotes will work on this\n\treturn undefined;\n}\n\nfunction parseFilterOperation(relinker, fromTitle, toTitle, logger, filterString, p, whitelist, options) {\n\tvar nextBracketPos, operator;\n\t// Skip the starting square bracket\n\tif(filterString.charAt(p++) !== \"[\") {\n\t\t// Missing [ in filter expression\n\t\treturn undefined;\n\t}\n\t// Process each operator in turn\n\tdo {\n\t\toperator = {};\n\t\t// Check for an operator prefix\n\t\tif(filterString.charAt(p) === \"!\") {\n\t\t\toperator.prefix = \"!\";\n\t\t\tp++;\n\t\t}\n\t\t// Get the operator name\n\t\tnextBracketPos = filterString.substring(p).search(/[\\[\\{<\\/]/);\n\t\tif(nextBracketPos === -1) {\n\t\t\t// Missing [ in filter expression\n\t\t\treturn undefined;\n\t\t}\n\t\tnextBracketPos += p;\n\t\tvar bracket = filterString.charAt(nextBracketPos);\n\t\toperator.operator = filterString.substring(p,nextBracketPos);\n\n\t\t// Any suffix?\n\t\tvar colon = operator.operator.indexOf(':');\n\t\tif(colon > -1) {\n\t\t\toperator.suffix = operator.operator.substring(colon + 1);\n\t\t\toperator.operator = operator.operator.substring(0,colon) || \"field\";\n\t\t}\n\t\t// Empty operator means: title\n\t\telse if(operator.operator === \"\") {\n\t\t\toperator.operator = \"title\";\n\t\t}\n\n\t\tvar entry, type;\n\n\t\tp = nextBracketPos + 1;\n\t\tswitch (bracket) {\n\t\t\tcase \"{\": // Curly brackets\n\t\t\t\ttype = \"indirect\";\n\t\t\t\tnextBracketPos = filterString.indexOf(\"}\",p);\n\t\t\t\tvar operand = filterString.substring(p,nextBracketPos);\n\t\t\t\tentry = refHandler.relinkInBraces(operand, fromTitle, toTitle, options);\n\t\t\t\tif (entry && entry.output) {\n\t\t\t\t\t// We don't check the whitelist.\n\t\t\t\t\t// All indirect operands convert.\n\t\t\t\t\trelinker.add(entry.output,p,nextBracketPos);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"[\": // Square brackets\n\t\t\t\ttype = \"string\";\n\t\t\t\tnextBracketPos = filterString.indexOf(\"]\",p);\n\t\t\t\tvar operand = filterString.substring(p,nextBracketPos);\n\t\t\t\t// Check if this is a relevant operator\n\t\t\t\tvar handler = fieldType(whitelist, operator);\n\t\t\t\tif (!handler) {\n\t\t\t\t\t// This operator isn't managed. Bye.\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tentry = handler.relink(operand, fromTitle, toTitle, options);\n\t\t\t\tif (!entry) {\n\t\t\t\t\t// The fromTitle wasn't in the operand.\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (!entry.output) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tvar wrapped;\n\t\t\t\tif (!canBePrettyOperand(entry.output)) {\n\t\t\t\t\tif (!options.placeholder) {\n\t\t\t\t\t\tdelete entry.output;\n\t\t\t\t\t\tentry.impossible = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tvar ph = options.placeholder.getPlaceholderFor(entry.output, handler.name, options);\n\t\t\t\t\twrapped = \"<\"+ph+\">\";\n\t\t\t\t} else {\n\t\t\t\t\twrapped = \"[\"+entry.output+\"]\";\n\t\t\t\t}\n\t\t\t\trelinker.add(wrapped, p-1, nextBracketPos+1);\n\t\t\t\tbreak;\n\t\t\tcase \"<\": // Angle brackets\n\t\t\t\tnextBracketPos = filterString.indexOf(\">\",p);\n\t\t\t\tbreak;\n\t\t\tcase \"/\": // regexp brackets\n\t\t\t\tvar rex = /^((?:[^\\\\\\/]*|\\\\.)*)\\/(?:\\(([mygi]+)\\))?/g,\n\t\t\t\t\trexMatch = rex.exec(filterString.substring(p));\n\t\t\t\tif(rexMatch) {\n\t\t\t\t\tnextBracketPos = p + rex.lastIndex - 1;\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// Unterminated regular expression\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t\tif (entry) {\n\t\t\tvar operatorEntry = new OperatorEntry(entry);\n\t\t\toperatorEntry.operator = operator;\n\t\t\toperatorEntry.type = type;\n\t\t\tlogger.add(operatorEntry);\n\t\t}\n\n\t\tif(nextBracketPos === -1) {\n\t\t\t// Missing closing bracket in filter expression\n\t\t\t// return undefined;\n\t\t}\n\t\tp = nextBracketPos + 1;\n\n\t} while(filterString.charAt(p) !== \"]\");\n\t// Skip the ending square bracket\n\tif(filterString.charAt(p++) !== \"]\") {\n\t\t// Missing ] in filter expression\n\t\treturn undefined;\n\t}\n\t// Return the parsing position\n\treturn p;\n}\n\n// Returns the relinker needed for a given operator, or returns undefined.\nfunction fieldType(whitelist, operator) {\n\treturn (operator.suffix &&\n\t whitelist[operator.operator + \":\" + operator.suffix]) ||\n\t whitelist[operator.operator];\n};\n\nfunction canBePrettyOperand(value) {\n\treturn value.indexOf(']') < 0;\n};\n\nfunction canBeInBraces(value) {\n\treturn value.indexOf(\"}}}\") < 0 && value.substr(value.length-2) !== '}}';\n};\n",
"module-type": "relinkfieldtype",
"title": "$:/plugins/flibbles/relink/js/fieldtypes/filter.js",
"type": "application/javascript"
},
"$:/plugins/flibbles/relink/js/fieldtypes/list.js": {
"text": "/*\\\nThis manages replacing titles that occur within stringLists, like,\n\nTiddlerA [[Tiddler with spaces]] [[Another Title]]\n\\*/\n\nexports.name = \"list\";\n\n/**Returns undefined if no change was made.\n * Parameter: value can literally be a list. This can happen for builtin\n * types 'list' and 'tag'. In those cases, we also return list.\n */\nexports.relink = function(value, fromTitle, toTitle, options) {\n\tvar isModified = false,\n\t\tactualList = false,\n\t\tlist;\n\tif (typeof value !== \"string\") {\n\t\t// Not a string. Must be a list.\n\t\t// clone it, since we may make changes to this possibly\n\t\t// frozen list.\n\t\tlist = (value || []).slice(0);\n\t\tactualList = true;\n\t} else {\n\t\tlist = $tw.utils.parseStringArray(value || \"\");\n\t}\n\t$tw.utils.each(list,function (title,index) {\n\t\tif(title === fromTitle) {\n\t\t\tlist[index] = toTitle;\n\t\t\tisModified = true;\n\t\t}\n\t});\n\tif (isModified) {\n\t\tvar entry = {name: \"list\"};\n\t\t// It doesn't parse correctly alone, it won't\n\t\t// parse correctly in any list.\n\t\tif (!canBeListItem(toTitle)) {\n\t\t\tentry.impossible = true;\n\t\t} else if (actualList) {\n\t\t\tentry.output = list;\n\t\t} else {\n\t\t\tentry.output = $tw.utils.stringifyList(list);\n\t\t}\n\t\treturn entry;\n\t}\n\treturn undefined;\n};\n\nfunction canBeListItem(value) {\n\tvar regexp = /\\]\\][^\\S\\xA0]/m;\n\treturn !regexp.test(value);\n};\n",
"module-type": "relinkfieldtype",
"title": "$:/plugins/flibbles/relink/js/fieldtypes/list.js",
"type": "application/javascript"
},
"$:/plugins/flibbles/relink/js/fieldtypes/reference.js": {
"text": "/*\\\nThis manages replacing titles that occur inside text references,\n\ntiddlerTitle\ntiddlerTitle!!field\n!!field\ntiddlerTitle##propertyIndex\n\\*/\n\nexports.name = \"reference\";\n\nfunction ReferenceEntry(reference) {\n\tthis.reference = reference;\n};\nReferenceEntry.prototype.name = \"reference\";\n\nReferenceEntry.prototype.report = function() {\n\tif (this.reference.field) {\n\t\treturn [\"!!\" + this.reference.field];\n\t}\n\tif (this.reference.index) {\n\t\treturn [\"##\" + this.reference.index];\n\t}\n\treturn [\"\"];\n};\n\nexports.relink = function(value, fromTitle, toTitle, options) {\n\tvar entry;\n\tif (value) {\n\t\tvar reference = $tw.utils.parseTextReference(value);\n\t\tif (reference.title === fromTitle) {\n\t\t\tentry = new ReferenceEntry(reference);\n\t\t\tif (!exports.canBePretty(toTitle)) {\n\t\t\t\tentry.impossible = true;\n\t\t\t} else {\n\t\t\t\treference.title = toTitle;\n\t\t\t\tentry.output = exports.toString(reference);\n\t\t\t}\n\t\t}\n\t}\n\treturn entry;\n};\n\n/* Same as this.relink, except this has the added constraint that the return\n * value must be able to be wrapped in curly braces.\n */\nexports.relinkInBraces = function(value, fromTitle, toTitle, options) {\n\tvar log = this.relink(value, fromTitle, toTitle, options);\n\tif (log && log.output && toTitle.indexOf(\"}\") >= 0) {\n\t\tdelete log.output;\n\t\tlog.impossible = true;\n\t}\n\treturn log;\n};\n\nexports.toString = function(textReference) {\n\tvar title = textReference.title || '';\n\tif (textReference.field) {\n\t\treturn title + \"!!\" + textReference.field;\n\t} else if (textReference.index) {\n\t\treturn title + \"##\" + textReference.index;\n\t}\n\treturn title;\n};\n\nexports.canBePretty = function(title) {\n\treturn !title || (title.indexOf(\"!!\") < 0 && title.indexOf(\"##\") < 0);\n};\n",
"module-type": "relinkfieldtype",
"title": "$:/plugins/flibbles/relink/js/fieldtypes/reference.js",
"type": "application/javascript"
},
"$:/plugins/flibbles/relink/js/fieldtypes/title.js": {
"text": "/*\\\nThis specifies logic for replacing a single-tiddler field. This is the\nsimplest kind of field type. One title swaps out for the other.\n\\*/\n\n// NOTE TO MODDERS: If you're making your own field types, the name must be\n// alpha characters only.\nexports.name = 'title';\n\n/**Returns undefined if no change was made.\n */\nexports.relink = function(value, fromTitle, toTitle, options) {\n\tif (value === fromTitle) {\n\t\treturn {name: \"title\", output: toTitle};\n\t}\n\treturn undefined;\n};\n\n// This is legacy support for when 'title' was known as 'field'\nexports.aliases = ['field', 'yes'];\n",
"module-type": "relinkfieldtype",
"title": "$:/plugins/flibbles/relink/js/fieldtypes/title.js",
"type": "application/javascript"
},
"$:/plugins/flibbles/relink/js/fieldtypes/wikitext.js": {
"text": "/*\\\nThis specifies logic for updating filters to reflect title changes.\n\\*/\n\nexports.name = \"wikitext\";\n\nvar type = 'text/vnd.tiddlywiki';\n\nvar WikiParser = require(\"$:/core/modules/parsers/wikiparser/wikiparser.js\")[type];\nvar Rebuilder = require(\"$:/plugins/flibbles/relink/js/utils/rebuilder.js\");\nvar EntryNode = require('$:/plugins/flibbles/relink/js/utils/entry');\n\nvar WikitextEntry = EntryNode.newType(\"wikitext\");\n\nfunction collectRules() {\n\tvar rules = Object.create(null);\n\t$tw.modules.forEachModuleOfType(\"relinkwikitextrule\", function(title, exports) {\n\t\tvar names = exports.name;\n\t\tif (typeof names === \"string\") {\n\t\t\tnames = [names];\n\t\t}\n\t\tfor (var i = 0; i < names.length; i++) {\n\t\t\trules[names[i]] = exports;\n\t\t}\n\t});\n\treturn rules;\n}\n\nfunction WikiRelinker(type, text, fromTitle, toTitle, options) {\n\tthis.entry = new WikitextEntry();\n\tthis.builder = new Rebuilder(text);\n\tthis.options = options;\n\tif (!this.relinkMethodsInjected) {\n\t\tvar rules = collectRules();\n\t\t$tw.utils.each([this.pragmaRuleClasses, this.blockRuleClasses, this.inlineRuleClasses], function(classList) {\n\t\t\tfor (var name in classList) {\n\t\t\t\tif (rules[name]) {\n\t\t\t\t\tdelete rules[name].name;\n\t\t\t\t\t$tw.utils.extend(classList[name].prototype, rules[name]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\tWikiRelinker.prototype.relinkMethodsInjected = true;\n\t}\n\tthis.fromTitle = fromTitle;\n\tthis.toTitle = toTitle;\n\tWikiParser.call(this, type, text, options);\n};\n\nWikiRelinker.prototype = Object.create(WikiParser.prototype);\n\nWikiRelinker.prototype.parsePragmas = function() {\n\twhile (true) {\n\t\tthis.skipWhitespace();\n\t\tif (this.pos >= this.sourceLength) {\n\t\t\tbreak;\n\t\t}\n\t\tvar nextMatch = this.findNextMatch(this.pragmaRules, this.pos);\n\t\tif (!nextMatch || nextMatch.matchIndex !== this.pos) {\n\t\t\tbreak;\n\t\t}\n\t\tthis.relinkRule(nextMatch);\n\t}\n\treturn [];\n};\n\nWikiRelinker.prototype.parseInlineRunUnterminated = function(options) {\n\tvar nextMatch = this.findNextMatch(this.inlineRules, this.pos);\n\twhile (this.pos < this.sourceLength && nextMatch) {\n\t\tif (nextMatch.matchIndex > this.pos) {\n\t\t\tthis.pos = nextMatch.matchIndex;\n\t\t}\n\t\tthis.relinkRule(nextMatch);\n\t\tnextMatch = this.findNextMatch(this.inlineRules, this.pos);\n\t}\n\tthis.pos = this.sourceLength;\n};\n\nWikiRelinker.prototype.parseInlineRunTerminated = function(terminatorRegExp,options) {\n\toptions = options || {};\n\tterminatorRegExp.lastIndex = this.pos;\n\tvar terminatorMatch = terminatorRegExp.exec(this.source);\n\tvar inlineRuleMatch = this.findNextMatch(this.inlineRules,this.pos);\n\twhile(this.pos < this.sourceLength && (terminatorMatch || inlineRuleMatch)) {\n\t\tif (terminatorMatch) {\n\t\t\tif (!inlineRuleMatch || inlineRuleMatch.matchIndex >= terminatorMatch.index) {\n\t\t\t\tthis.pos = terminatorMatch.index;\n\t\t\t\tif (options.eatTerminator) {\n\t\t\t\t\tthis.pos += terminatorMatch[0].length;\n\t\t\t\t}\n\t\t\t\treturn [];\n\t\t\t}\n\t\t}\n\t\tif (inlineRuleMatch) {\n\t\t\tif (inlineRuleMatch.matchIndex > this.pos) {\n\t\t\t\tthis.pos = inlineRuleMatch.matchIndex;\n\t\t\t}\n\t\t\tthis.relinkRule(inlineRuleMatch);\n\t\t\tinlineRuleMatch = this.findNextMatch(this.inlineRules, this.pos);\n\t\t\tterminatorRegExp.lastIndex = this.pos;\n\t\t\tterminatorMatch = terminatorRegExp.exec(this.source);\n\t\t}\n\t}\n\tthis.pos = this.sourceLength;\n\treturn [];\n\n};\n\nWikiRelinker.prototype.parseBlock = function(terminatorRegExp) {\n\tvar terminatorRegExp = /(\\r?\\n\\r?\\n)/mg;\n\tthis.skipWhitespace();\n\tif (this.pos >= this.sourceLength) {\n\t\treturn [];\n\t}\n\tvar nextMatch = this.findNextMatch(this.blockRules, this.pos);\n\tif(nextMatch && nextMatch.matchIndex === this.pos) {\n\t\treturn this.relinkRule(nextMatch);\n\t}\n\treturn this.parseInlineRun(terminatorRegExp);\n};\n\nWikiRelinker.prototype.relinkRule = function(ruleInfo) {\n\tif (ruleInfo.rule.relink) {\n\t\tvar newEntry = ruleInfo.rule.relink(this.source, this.fromTitle, this.toTitle, this.options);\n\t\tif (newEntry !== undefined) {\n\t\t\tthis.entry.add(newEntry);\n\t\t\tif (newEntry.output) {\n\t\t\t\tthis.builder.add(newEntry.output, ruleInfo.matchIndex, this.pos);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif (ruleInfo.rule.matchRegExp !== undefined) {\n\t\t\tthis.pos = ruleInfo.rule.matchRegExp.lastIndex;\n\t\t} else {\n\t\t\t// We can't easily determine the end of this\n\t\t\t// rule match. We'll \"parse\" it so that\n\t\t\t// parser.pos gets updated, but we throw away\n\t\t\t// the results.\n\t\t\truleInfo.rule.parse();\n\t\t}\n\t}\n};\n\nWikiRelinker.prototype.amendRules = function(type, names) {\n\tvar only;\n\tWikiParser.prototype.amendRules.call(this, type, names);\n\tif (type === \"only\") {\n\t\tonly = true;\n\t} else if (type === \"except\") {\n\t\tonly = false;\n\t} else {\n\t\treturn;\n\t}\n\tif (only !== (names.indexOf(\"macrodef\") >= 0)) {\n\t\tthis.options.placeholder = undefined\n\t}\n\tif (only !== (names.indexOf(\"html\") >= 0)) {\n\t\tthis.options.noWidgets = true;\n\t}\n\tif (only !== (names.indexOf(\"prettylink\") >= 0)) {\n\t\tthis.options.noPrettylinks = true;\n\t}\n};\n\nexports.relink = function(wikitext, fromTitle, toTitle, options) {\n\t// fromTitle doesn't even show up plaintext. No relinking to do.\n\tif (!options.settings.survey(wikitext, fromTitle, options)) {\n\t\treturn undefined;\n\t}\n\tvar matchingRule,\n\t\tnewOptions = $tw.utils.extend({}, options);\n\tnewOptions.settings = options.settings.createChildLibrary(options.currentTiddler);\n\tvar parser = new WikiRelinker(options.type, wikitext, fromTitle, toTitle, newOptions);\n\tif (parser.entry.children.length > 0) {\n\t\tparser.entry.output = parser.builder.results();\n\t\treturn parser.entry;\n\t}\n\treturn undefined;\n};\n",
"module-type": "relinkfieldtype",
"title": "$:/plugins/flibbles/relink/js/fieldtypes/wikitext.js",
"type": "application/javascript"
},
"$:/plugins/flibbles/relink/js/relinkoperations/fields.js": {
"text": "/*\\\n\nHandles all fields specified in the plugin configuration. Currently, this\nonly supports single-value fields.\n\n\\*/\n\n/*jslint node: false, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar settings = require('$:/plugins/flibbles/relink/js/settings.js');\nvar log = require('$:/plugins/flibbles/relink/js/language.js').logRelink;\nvar EntryNode = require('$:/plugins/flibbles/relink/js/utils/entry');\n\nvar FieldEntry = EntryNode.newType(\"field\");\n\nFieldEntry.prototype.report = function() {\n\tvar self = this;\n\tvar output = [];\n\t$tw.utils.each(this.children, function(child) {\n\t\tif (child.report) {\n\t\t\t$tw.utils.each(child.report(), function(report) {\n\t\t\t\tif (report) {\n\t\t\t\t\toutput.push(self.field + \": \" + report);\n\t\t\t\t} else {\n\t\t\t\t\toutput.push(self.field);\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\toutput.push(self.field);\n\t\t}\n\t});\n\treturn output;\n};\n\nexports['fields'] = function(tiddler, fromTitle, toTitle, changes, options) {\n\tvar fields = options.settings.getFields();\n\t$tw.utils.each(fields, function(handler, field) {\n\t\tvar input = tiddler.fields[field];\n\t\tvar entry = handler.relink(input, fromTitle, toTitle, options);\n\t\tif (entry !== undefined) {\n\t\t\tvar fieldEntry = new FieldEntry();\n\t\t\tfieldEntry.field = field;\n\t\t\tfieldEntry.output = entry.output;\n\t\t\tfieldEntry.add(entry);\n\t\t\tchanges[field] = fieldEntry;\n\t\t}\n\t});\n};\n",
"module-type": "relinkoperator",
"title": "$:/plugins/flibbles/relink/js/relinkoperations/fields.js",
"type": "application/javascript"
},
"$:/plugins/flibbles/relink/js/relinkoperations/text.js": {
"text": "/*\\\n\nDepending on the tiddler type, this will apply textOperators which may\nrelink titles within the body.\n\n\\*/\n\n/*jslint node: false, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar defaultOperator = \"text/vnd.tiddlywiki\";\n\nvar textOperators = Object.create(null);\n$tw.modules.applyMethods('relinktextoperator', textOperators);\n\n// $:/DefaultTiddlers is a tiddler which has type \"text/vnd.tiddlywiki\",\n// but it lies. It doesn't contain wikitext. It contains a filter, so\n// we pretend it has a filter type.\n// If you want to be able to add more exceptions for your plugin, let me know.\nvar exceptions = {\n\t\"$:/DefaultTiddlers\": \"text/x-tiddler-filter\"\n};\n\nexports['text'] = function(tiddler, fromTitle, toTitle, changes, options) {\n\tvar fields = tiddler.fields;\n\tif (fields.text) {\n\t\tvar type = exceptions[fields.title] || fields.type || defaultOperator;\n\t\tif (textOperators[type]) {\n\t\t\tvar entry = textOperators[type].call(this, tiddler, fromTitle, toTitle, options);\n\t\t\tif (entry) {\n\t\t\t\tchanges.text = entry;\n\t\t\t}\n\t\t}\n\t}\n};\n",
"module-type": "relinkoperator",
"title": "$:/plugins/flibbles/relink/js/relinkoperations/text.js",
"type": "application/javascript"
},
"$:/plugins/flibbles/relink/js/relinkoperations/text/filtertext.js": {
"text": "/*\\\n\nThis relinks tiddlers which contain filters in their body, as oppose to\nwikitext.\n\n\\*/\n\n/*jslint node: false, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar filterHandler = require(\"$:/plugins/flibbles/relink/js/settings\").getType('filter');\n\nexports['text/x-tiddler-filter'] = function(tiddler, fromTitle, toTitle, options) {\n\treturn filterHandler.relink(tiddler.fields.text, fromTitle, toTitle, options)\n};\n",
"module-type": "relinktextoperator",
"title": "$:/plugins/flibbles/relink/js/relinkoperations/text/filtertext.js",
"type": "application/javascript"
},
"$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext.js": {
"text": "/*\\\n\nChecks for fromTitle in a tiddler's text. If found, sees if it's relevant,\nand tries to swap it out if it is.\n\n\\*/\n\n/*jslint node: false, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar type = 'text/vnd.tiddlywiki';\nvar Placeholder = require(\"$:/plugins/flibbles/relink/js/utils/placeholder.js\");\nvar settings = require('$:/plugins/flibbles/relink/js/settings.js');\nvar wikitextHandler = settings.getType('wikitext');\n\nexports[type] = function(tiddler, fromTitle, toTitle, options) {\n\tvar placeholder = new Placeholder();\n\tvar currentOptions = $tw.utils.extend(\n\t\t{\n\t\t\tcurrentTiddler: tiddler.fields.title,\n\t\t\tplaceholder: placeholder\n\t\t}, options);\n\tvar entry = wikitextHandler.relink(tiddler.fields.text, fromTitle, toTitle, currentOptions);\n\tif (entry && entry.output) {\n\t\t// If there's output, we've also got to prepend any macros\n\t\t// that the placeholder defined.\n\t\tvar preamble = placeholder.getPreamble();\n\t\tentry.output = preamble + entry.output;\n\t}\n\treturn entry;\n}\n",
"module-type": "relinktextoperator",
"title": "$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext.js",
"type": "application/javascript"
},
"$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/code.js": {
"text": "/*\\\nmodule-type: relinkwikitextrule\n\nHandles code blocks. Or rather //doesn't// handle them, since we should\nignore their contents.\n\n\"`` [[Renamed Title]] ``\" will remain unchanged.\n\n\\*/\n\nexports.name = [\"codeinline\", \"codeblock\"];\n\nexports.relink = function(text, fromTitle, toTitle, options) {\n\tvar reEnd;\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// I'm lazy. This relink method works for both codeblock and codeinline\n\tif (this.match[0].length > 2) {\n\t\t// Must be a codeblock\n\t\treEnd = /\\r?\\n```$/mg;\n\t} else {\n\t\t// Must be a codeinline\n\t\treEnd = new RegExp(this.match[1], \"mg\");\n\t}\n\treEnd.lastIndex = this.parser.pos;\n\tvar match = reEnd.exec(text);\n\tif (match) {\n\t\tthis.parser.pos = match.index + match[0].length;\n\t} else {\n\t\tthis.parser.pos = this.parser.sourceLength;\n\t}\n\treturn undefined;\n};\n",
"module-type": "relinkwikitextrule",
"title": "$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/code.js",
"type": "application/javascript"
},
"$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/comment.js": {
"text": "/*\\\nmodule-type: relinkwikitextrule\n\nHandles comment blocks. Or rather //doesn't// handle them, since we should\nignore their contents.\n\n\"<!-- [[Renamed Title]] -->\" will remain unchanged.\n\n\\*/\n\nexports.name = [\"commentinline\", \"commentblock\"];\n\nexports.relink = function(text, fromTitle, toTitle, options) {\n\tthis.parser.pos = this.endMatchRegExp.lastIndex;\n\treturn undefined;\n};\n",
"module-type": "relinkwikitextrule",
"title": "$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/comment.js",
"type": "application/javascript"
},
"$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/filteredtransclude.js": {
"text": "/*\\\nmodule-type: relinkwikitextrule\n\nHandles replacement of filtered transclusions in wiki text like,\n\n{{{ [tag[docs]] }}}\n{{{ [tag[docs]] |tooltip}}}\n{{{ [tag[docs]] ||TemplateTitle}}}\n{{{ [tag[docs]] |tooltip||TemplateTitle}}}\n{{{ [tag[docs]] }}width:40;height:50;}.class.class\n\nThis renames both the list and the template field.\n\n\\*/\n\nexports.name = ['filteredtranscludeinline', 'filteredtranscludeblock'];\n\nvar filterHandler = require(\"$:/plugins/flibbles/relink/js/settings\").getType('filter');\nvar utils = require(\"./utils.js\");\nvar EntryNode = require('$:/plugins/flibbles/relink/js/utils/entry');\n\nvar FilteredTranscludeEntry = EntryNode.newType(\"filteredtransclude\");\n\nFilteredTranscludeEntry.prototype.report = function() {\n\tvar output = [];\n\tvar self = this;\n\t$tw.utils.each(this.children, function(child) {\n\t\tif (child.name === \"filter\") {\n\t\t\tvar append = \"}}}\";\n\t\t\tif (self.template) {\n\t\t\t\tappend = \"||\" + self.template + append;\n\t\t\t}\n\t\t\t$tw.utils.each(child.report(), function(report) {\n\t\t\t\toutput.push(\"{{{\" + report + append);\n\t\t\t});\n\t\t} else {\n\t\t\t// Must be the template\n\t\t\toutput.push(\"{{{\" + self.filter + \"||}}}\");\n\t\t}\n\t});\n\treturn output;\n};\n\nexports.relink = function(text, fromTitle, toTitle, options) {\n\tvar m = this.match;\n\t\tfilter = m[1],\n\t\ttooltip = m[2],\n\t\ttemplate = m[3],\n\t\tstyle = m[4],\n\t\tclasses = m[5],\n\t\tparser = this.parser,\n\t\tentry = new FilteredTranscludeEntry();\n\tparser.pos = this.matchRegExp.lastIndex;\n\tvar modified = false;\n\n\tvar filterEntry = filterHandler.relink(filter, fromTitle, toTitle, options);\n\tif (filterEntry !== undefined) {\n\t\tentry.add(filterEntry);\n\t\tif (filterEntry.output) {\n\t\t\tmodified = true;\n\t\t\tfilter = filterEntry.output;\n\t\t}\n\t}\n\n\tif ($tw.utils.trim(template) === fromTitle) {\n\t\t// preserves user-inputted whitespace\n\t\ttemplate = template.replace(fromTitle, toTitle);\n\t\tentry.add({name: \"title\", output: template});\n\t\tmodified = true;\n\t}\n\tif (!modified) {\n\t\tif (entry.children.length <= 0) {\n\t\t\treturn undefined;\n\t\t}\n\t} else {\n\t\tvar output = this.makeFilteredtransclude(filter, tooltip, template, style, classes, options);\n\t\tif (output === undefined) {\n\t\t\tentry.impossible = true;\n\t\t} else {\n\t\t\t// By copying over the ending newline of the original\n\t\t\t// text if present, thisrelink method thus works for\n\t\t\t// both the inline and block rule\n\t\t\tentry.output = output + utils.getEndingNewline(m[0]);\n\t\t}\n\t\tentry.filter = filter;\n\t}\n\tentry.template = template;\n\treturn entry;\n};\n\nexports.makeFilteredtransclude = function(filter, tooltip, template, style, classes, options) {\n\tif (canBePretty(filter) && canBePrettyTemplate(template)) {\n\t\treturn prettyList(filter, tooltip, template, style, classes);\n\t} else if (!options.noWidgets) {\n\t\treturn widget(filter, tooltip, template, style, classes, options);\n\t}\n\treturn undefined;\n};\n\nfunction prettyList(filter, tooltip, template, style, classes) {\n\tif (tooltip === undefined) {\n\t\ttooltip = '';\n\t} else {\n\t\ttooltip = \"|\" + tooltip;\n\t}\n\tif (template === undefined) {\n\t\ttemplate = '';\n\t} else {\n\t\ttemplate = \"||\" + template;\n\t}\n\tif (classes === undefined) {\n\t\tclasses = '';\n\t} else {\n\t\tclasses = \".\" + classes;\n\t}\n\tstyle = style || '';\n\treturn \"{{{\"+filter+tooltip+template+\"}}\"+style+\"}\"+classes;\n};\n\n/** Returns a filtered transclude as a string of a widget.\n */\nfunction widget(filter, tooltip, template, style, classes, options) {\n\tvar cannotDo = false;\n\tif (classes !== undefined) {\n\t\tclasses = classes.split('.').join(' ');\n\t}\n\tfunction wrap(name, value, treatAsTitle) {\n\t\tif (!value) {\n\t\t\treturn '';\n\t\t}\n\t\tvar wrappedValue = utils.wrapAttributeValue(value);\n\t\tif (wrappedValue === undefined) {\n\t\t\tif (!options.placeholder) {\n\t\t\t\tcannotDo = true;\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tvar category = treatAsTitle ? undefined : name;\n\t\t\twrappedValue = \"<<\"+options.placeholder.getPlaceholderFor(value,category,options)+\">>\";\n\t\t}\n\t\treturn \" \"+name+\"=\"+wrappedValue;\n\t};\n\tvar widget = [\n\t\t\"<$list\",\n\t\twrap(\"filter\", filter),\n\t\twrap(\"tooltip\", tooltip),\n\t\twrap(\"template\", template, true),\n\t\twrap(\"style\", style),\n\t\twrap(\"itemClass\", classes),\n\t\t\"/>\"\n\t];\n\tif (cannotDo) {\n\t\treturn undefined;\n\t}\n\treturn widget.join('');\n};\n\nfunction canBePretty(filter) {\n\treturn filter.indexOf('|') < 0 && filter.indexOf('}}') < 0;\n};\n\nfunction canBePrettyTemplate(template) {\n\treturn !template || (\n\t\ttemplate.indexOf('|') < 0\n\t\t&& template.indexOf('{') < 0\n\t\t&& template.indexOf('}') < 0);\n};\n",
"module-type": "relinkwikitextrule",
"title": "$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/filteredtransclude.js",
"type": "application/javascript"
},
"$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/html.js": {
"text": "/*\\\nmodule-type: relinkwikitextrule\n\nHandles replacement in attributes of widgets and html elements\nThis is configurable to select exactly which attributes of which elements\nshould be changed.\n\n<$link to=\"TiddlerTitle\" />\n\n\\*/\n\nvar utils = require(\"./utils.js\");\nvar Rebuilder = require(\"$:/plugins/flibbles/relink/js/utils/rebuilder\");\nvar settings = require('$:/plugins/flibbles/relink/js/settings.js');\nvar refHandler = settings.getType('reference');\nvar filterHandler = settings.getType('filter');\nvar macrocall = require(\"./macrocall.js\");\nvar EntryNode = require('$:/plugins/flibbles/relink/js/utils/entry');\n\nexports.name = \"html\";\n\nvar HtmlEntry = EntryNode.newCollection(\"html\");\n\nHtmlEntry.prototype.forEachChildReport = function(report, attribute, type) {\n\tvar rtn = attribute;\n\tif (type === \"filtered\") {\n\t\trtn += \"={{{\" + report + \"}}}\";\n\t} else if (type === \"indirect\") {\n\t\trtn += \"={{\" + report + \"}}\";\n\t} else if (type === \"macro\") {\n\t\trtn += \"=\"+report;\n\t} else{\n\t\t// must be string.\n\t\tif (report.length > 0) {\n\t\t\trtn += '=\"' + report + '\"';\n\t\t}\n\t}\n\treturn \"<\" + this.element + \" \" + rtn + \" />\";\n};\n\nexports.relink = function(text, fromTitle, toTitle, options) {\n\tvar managedElement = options.settings.getAttribute(this.nextTag.tag),\n\t\tbuilder = new Rebuilder(text, this.nextTag.start);\n\tvar importFilterAttr;\n\tvar widgetEntry = new HtmlEntry();\n\twidgetEntry.attributes = Object.create(null);\n\twidgetEntry.element = this.nextTag.tag;\n\tfor (var attributeName in this.nextTag.attributes) {\n\t\tvar attr = this.nextTag.attributes[attributeName];\n\t\tvar nextEql = text.indexOf('=', attr.start);\n\t\t// This is the rare case of changing tiddler\n\t\t// \"true\" to something else when \"true\" is\n\t\t// implicit, like <$link to /> We ignore those.\n\t\tif (nextEql < 0 || nextEql > attr.end) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (this.nextTag.tag === \"$importvariables\" && attributeName === \"filter\") {\n\t\t\timportFilterAttr = attr;\n\t\t}\n\t\tvar oldLength, quotedValue = undefined, entry;\n\t\tif (attr.type === \"string\") {\n\t\t\tvar handler = getAttributeHandler(this.nextTag, attributeName, options);\n\t\t\tif (!handler) {\n\t\t\t\t// We don't manage this attribute. Bye.\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tentry = handler.relink(attr.value, fromTitle, toTitle, options);\n\t\t\tif (entry === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (entry.output) {\n\t\t\t\tvar quote = utils.determineQuote(text, attr);\n\t\t\t\toldLength = attr.value.length + (quote.length * 2);\n\t\t\t\tquotedValue = utils.wrapAttributeValue(entry.output,quote);\n\t\t\t\tif (quotedValue === undefined) {\n\t\t\t\t\t// The value was unquotable. We need to make\n\t\t\t\t\t// a macro in order to replace it.\n\t\t\t\t\tif (!options.placeholder) {\n\t\t\t\t\t\t// but we can't...\n\t\t\t\t\t\tentry.impossible = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar value = options.placeholder.getPlaceholderFor(entry.output,handler.name,options)\n\t\t\t\t\t\tquotedValue = \"<<\"+value+\">>\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (attr.type === \"indirect\") {\n\t\t\tentry = refHandler.relinkInBraces(attr.textReference, fromTitle, toTitle, options);\n\t\t\tif (entry === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!entry.impossible) {\n\t\t\t\t// +4 for '{{' and '}}'\n\t\t\t\toldLength = attr.textReference.length + 4;\n\t\t\t\tquotedValue = \"{{\"+entry.output+\"}}\";\n\t\t\t}\n\t\t} else if (attr.type === \"filtered\") {\n\t\t\tentry = filterHandler.relinkInBraces(attr.filter, fromTitle, toTitle, options);\n\t\t\tif (entry === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!entry.impossible) {\n\t\t\t\t// +6 for '{{{' and '}}}'\n\t\t\t\toldLength = attr.filter.length + 6;\n\t\t\t\tquotedValue = \"{{{\"+ entry.output +\"}}}\";\n\t\t\t}\n\t\t} else if (attr.type === \"macro\") {\n\t\t\tvar macro = attr.value;\n\t\t\tentry = macrocall.relinkAttribute(macro, text, fromTitle, toTitle, options);\n\t\t\tif (entry === undefined) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!entry.impossible) {\n\t\t\t\t// already includes '<<' and '>>'\n\t\t\t\toldLength = macro.end-macro.start;\n\t\t\t\tquotedValue = entry.output;\n\t\t\t}\n\t\t}\n\t\twidgetEntry.addChild(entry, attributeName, attr.type);\n\t\tif (quotedValue === undefined) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (this.nextTag.tag === \"$importvariables\" && attributeName === \"filter\") {\n\t\t\t// If this is an import variable filter, we gotta\n\t\t\t// remember this new value when we import lower down.\n\t\t\timportFilterAttr = quotedValue;\n\t\t}\n\t\t// We count backwards from the end to preserve whitespace\n\t\tvar valueStart = attr.end - oldLength;\n\t\tbuilder.add(quotedValue, valueStart, attr.end);\n\t}\n\tif (importFilterAttr) {\n\t\tprocessImportFilter(importFilterAttr, options);\n\t}\n\tthis.parser.pos = this.nextTag.end;\n\tif (widgetEntry.hasChildren()) {\n\t\twidgetEntry.output = builder.results(this.nextTag.end);\n\t\treturn widgetEntry;\n\t}\n\treturn undefined;\n};\n\n/** Returns the field handler for the given attribute of the given widget.\n * If this returns undefined, it means we don't handle it. So skip.\n */\nfunction getAttributeHandler(widget, attributeName, options) {\n\tif (widget.tag === \"$macrocall\") {\n\t\tvar nameAttr = widget.attributes[\"$name\"];\n\t\tif (nameAttr) {\n\t\t\tvar macro = options.settings.getMacro(nameAttr.value);\n\t\t\tif (macro) {\n\t\t\t\treturn macro[attributeName];\n\t\t\t}\n\t\t}\n\t} else {\n\t\tvar element = options.settings.getAttribute(widget.tag);\n\t\tif (element) {\n\t\t\treturn element[attributeName];\n\t\t}\n\t}\n\treturn undefined;\n};\n\nfunction computeAttribute(attribute, options) {\n\tvar value;\n\tif(attribute.type === \"filtered\") {\n\t\tvar parentWidget = options.settings.getVariableWidget();\n\t\tvalue = options.wiki.filterTiddlers(attribute.filter,parentWidget)[0] || \"\";\n\t} else if(attribute.type === \"indirect\") {\n\t\tvar parentWidget = options.settings.getVariableWidget();\n\t\tvalue = options.wiki.getTextReference(attribute.textReference,\"\",parentWidget.variables.currentTiddler.value);\n\t} else if(attribute.type === \"macro\") {\n\t\tvar parentWidget = options.settings.getVariableWidget();\n\t\tvalue = parentWidget.getVariable(attribute.value.name,{params: attribute.value.params});\n\t} else { // String attribute\n\t\tvalue = attribute.value;\n\t}\n\treturn value;\n};\n\n// This processes a <$importvariables> filter attribute and adds any new\n// variables to our parser.\nfunction processImportFilter(importAttribute, options) {\n\tif (typeof importAttribute === \"string\") {\n\t\t// It was changed. Reparse it. It'll be a quoted\n\t\t// attribute value. Add a dummy attribute name.\n\t\timportAttribute = $tw.utils.parseAttribute(\"p=\"+importAttribute, 0)\n\t}\n\tvar importFilter = computeAttribute(importAttribute, options);\n\toptions.settings.import(importFilter);\n};\n",
"module-type": "relinkwikitextrule",
"title": "$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/html.js",
"type": "application/javascript"
},
"$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/image.js": {
"text": "/*\\\nmodule-type: relinkwikitextrule\n\nHandles replacement in wiki text inline rules, like,\n\n[img[tiddler.jpg]]\n\n[img width=23 height=24 [Description|tiddler.jpg]]\n\n\\*/\n\nvar Rebuilder = require(\"$:/plugins/flibbles/relink/js/utils/rebuilder\");\nvar refHandler = require(\"$:/plugins/flibbles/relink/js/fieldtypes/reference\");\nvar filterHandler = require(\"$:/plugins/flibbles/relink/js/settings\").getType('filter');\nvar macrocall = require(\"./macrocall.js\");\nvar utils = require(\"./utils.js\");\nvar EntryNode = require('$:/plugins/flibbles/relink/js/utils/entry');\n\nexports.name = \"image\";\n\nvar ImageEntry = EntryNode.newCollection(\"image\");\n\nImageEntry.prototype.forEachChildReport = function(report, attribute, type) {\n\tvar value;\n\tif (attribute === \"source\") {\n\t\tif (this.tooltip) {\n\t\t\tvalue = \"[img[\" + this.tooltip.value + \"]]\";\n\t\t} else {\n\t\t\tvalue = \"[img[]]\";\n\t\t}\n\t} else {\n\t\tif (type === \"indirect\") {\n\t\t\tvalue = \"{{\" + report + \"}}\";\n\t\t} else if (type === \"filtered\") {\n\t\t\tvalue = \"{{{\" + report + \"}}}\";\n\t\t} else if (type === \"macro\") {\n\t\t\t// angle brackets already added...\n\t\t\tvalue = report;\n\t\t}\n\t\tvalue = \"[img \" + attribute + \"=\"+ value + \"]\";\n\t}\n\treturn value;\n};\n\nexports.relink = function(text, fromTitle, toTitle, options) {\n\tvar ptr = this.nextImage.start;\n\tvar builder = new Rebuilder(text, ptr);\n\tvar makeWidget = false;\n\tvar skipSource = false;\n\tvar imageEntry = new ImageEntry();\n\timageEntry.attributes = Object.create(null);\n\tif (this.nextImage.attributes.source.value === fromTitle && !canBePretty(toTitle, this.nextImage.attributes.tooltip)) {\n\t\tif (!options.noWidgets && (utils.wrapAttributeValue(toTitle) || options.placeholder)) {\n\t\t\tmakeWidget = true;\n\t\t\tbuilder.add(\"<$image\", ptr, ptr+4);\n\t\t} else {\n\t\t\t// We won't be able to make a placeholder to replace\n\t\t\t// the source attribute. We check now so we don't\n\t\t\t// prematurely convert into a widget.\n\t\t\t// Keep going in case other attributes need replacing.\n\t\t\tskipSource = true;\n\t\t}\n\t}\n\tptr += 4; //[img\n\tvar inSource = false;\n\tfor (var attributeName in this.nextImage.attributes) {\n\t\tvar attr = this.nextImage.attributes[attributeName];\n\t\tif (attributeName === \"source\" || attributeName === \"tooltip\") {\n\t\t\tif (inSource) {\n\t\t\t\tptr = text.indexOf('|', ptr);\n\t\t\t} else {\n\t\t\t\tptr = text.indexOf('[', ptr);\n\t\t\t\tinSource = true;\n\t\t\t}\n\t\t\tif (makeWidget) {\n\t\t\t\tif (\" \\t\\n\".indexOf(text[ptr-1]) >= 0) {\n\t\t\t\t\tbuilder.add('', ptr, ptr+1);\n\t\t\t\t} else {\n\t\t\t\t\tbuilder.add(' ', ptr, ptr+1);\n\t\t\t\t}\n\t\t\t}\n\t\t\tptr += 1;\n\t\t}\n\t\tif (attributeName === \"source\") {\n\t\t\tptr = text.indexOf(attr.value, ptr);\n\t\t\tif (attr.value === fromTitle) {\n\t\t\t\tvar entry = {name: \"title\"};\n\t\t\t\tif (makeWidget) {\n\t\t\t\t\tvar quotedValue = utils.wrapAttributeValue(toTitle);\n\t\t\t\t\tif (quotedValue === undefined) {\n\t\t\t\t\t\tvar key = options.placeholder.getPlaceholderFor(toTitle, undefined, options);\n\t\t\t\t\t\tbuilder.add(\"source=<<\"+key+\">>\", ptr, ptr+fromTitle.length);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbuilder.add(\"source=\"+quotedValue, ptr, ptr+fromTitle.length);\n\t\t\t\t\t}\n\t\t\t\t} else if (!skipSource) {\n\t\t\t\t\tbuilder.add(toTitle, ptr, ptr+fromTitle.length);\n\t\t\t\t} else {\n\t\t\t\t\tentry.impossible = true;\n\t\t\t\t}\n\t\t\t\timageEntry.addChild(entry, attributeName, \"string\");\n\t\t\t}\n\t\t\tptr = text.indexOf(']]', ptr);\n\t\t\tif (makeWidget) {\n\t\t\t\tbuilder.add(\"/>\", ptr, ptr+2);\n\t\t\t}\n\t\t\tptr += 2;\n\t\t} else if (attributeName === \"tooltip\") {\n\t\t\tif (makeWidget) {\n\t\t\t\tptr = text.indexOf(attr.value, ptr);\n\t\t\t\tvar quotedValue = utils.wrapAttributeValue(attr.value);\n\t\t\t\tbuilder.add(\"tooltip=\"+quotedValue, ptr, ptr+attr.value.length);\n\t\t\t}\n\t\t\timageEntry.tooltip = this.nextImage.attributes.tooltip;\n\t\t} else {\n\t\t\tptr = relinkAttribute(attr, builder, fromTitle, toTitle, imageEntry, options);\n\t\t}\n\t}\n\tthis.parser.pos = ptr;\n\tif (imageEntry.hasChildren()) {\n\t\timageEntry.output = builder.results(ptr);\n\t\treturn imageEntry;\n\t}\n\treturn undefined;\n};\n\nfunction relinkAttribute(attribute, builder, fromTitle, toTitle, entry, options) {\n\tvar text = builder.text;\n\tvar ptr = text.indexOf(attribute.name, attribute.start);\n\tvar end;\n\tptr += attribute.name.length;\n\tptr = text.indexOf('=', ptr);\n\tif (attribute.type === \"string\") {\n\t\tptr = text.indexOf(attribute.value, ptr)\n\t\tvar quote = utils.determineQuote(text, attribute);\n\t\t// ignore first quote. We already passed it\n\t\tend = ptr + quote.length + attribute.value.length;\n\t} else if (attribute.type === \"indirect\") {\n\t\tptr = text.indexOf('{{', ptr);\n\t\tvar end = ptr + attribute.textReference.length + 4;\n\t\tvar ref = refHandler.relinkInBraces(attribute.textReference, fromTitle, toTitle, options);\n\t\tif (ref) {\n\t\t\tentry.addChild(ref, attribute.name, \"indirect\");\n\t\t\tif (ref.output) {\n\t\t\t\tbuilder.add(\"{{\"+ref.output+\"}}\", ptr, end);\n\t\t\t}\n\t\t}\n\t} else if (attribute.type === \"filtered\") {\n\t\tptr = text.indexOf('{{{', ptr);\n\t\tvar end = ptr + attribute.filter.length + 6;\n\t\tvar filter = filterHandler.relinkInBraces(attribute.filter, fromTitle, toTitle, options);\n\t\tif (filter !== undefined) {\n\t\t\tentry.addChild(filter, attribute.name, \"filtered\");\n\t\t\tif (filter.output) {\n\t\t\t\tvar quoted = \"{{{\"+filter.output+\"}}}\";\n\t\t\t\tbuilder.add(quoted, ptr, end);\n\t\t\t}\n\t\t}\n\t} else if (attribute.type === \"macro\") {\n\t\tptr = text.indexOf(\"<<\", ptr);\n\t\tvar end = attribute.value.end;\n\t\tvar macro = attribute.value;\n\t\toldValue = attribute.value;\n\t\tvar macroEntry = macrocall.relinkAttribute(macro, text, fromTitle, toTitle, options);\n\t\tif (macroEntry !== undefined) {\n\t\t\tentry.addChild(macroEntry, attribute.name, \"macro\");\n\t\t\tif (macroEntry.output) {\n\t\t\t\tbuilder.add(macroEntry.output, ptr, end);\n\t\t\t}\n\t\t}\n\t}\n\treturn end;\n};\n\nfunction canBePretty(title, tooltip) {\n\treturn title.indexOf(']') < 0 && (tooltip || title.indexOf('|') < 0);\n};\n",
"module-type": "relinkwikitextrule",
"title": "$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/image.js",
"type": "application/javascript"
},
"$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/import.js": {
"text": "/*\\\nmodule-type: relinkwikitextrule\n\nHandles import pragmas\n\n\\import [tag[MyTiddler]]\n\\*/\n\nvar settings = require(\"$:/plugins/flibbles/relink/js/settings.js\");\nvar filterRelinker = settings.getType('filter');\n\nexports.name = \"import\";\n\nfunction ImportEntry(filterEntry) {\n\tthis.filter = filterEntry;\n};\nImportEntry.prototype.name = \"import\";\nImportEntry.prototype.eachChild = function(block) { return block(this.filter);};\nImportEntry.prototype.report = function() {\n\treturn this.filter.report().map(function(report) {\n\t\tif (report.length > 0) {\n\t\t\treturn \"\\\\import \" + report;\n\t\t} else {\n\t\t\treturn \"\\\\import\";\n\t\t}\n\t});\n};\n\nexports.relink = function(text, fromTitle, toTitle, options) {\n\t// In this one case, I'll let the parser parse out the filter and move\n\t// the ptr.\n\tvar start = this.matchRegExp.lastIndex;\n\tvar parseTree = this.parse();\n\tvar filter = parseTree[0].attributes.filter.value;\n\tvar entry = undefined;\n\tvar filterEntry = filterRelinker.relink(filter, fromTitle, toTitle, options);\n\tif (filterEntry !== undefined) {\n\t\tentry = new ImportEntry(filterEntry);\n\t\tvar newline = text.substring(start+filter.length, this.parser.pos);\n\t\tif (filterEntry.output) {\n\t\t\tfilter = filterEntry.output;\n\t\t\tentry.output = \"\\\\import \" + filter + newline;\n\t\t}\n\t}\n\n\t// Before we go, we need to actually import the variables\n\t// it's calling for, and any /relink pragma\n\toptions.settings.import(filter);\n\n\treturn entry;\n};\n",
"module-type": "relinkwikitextrule",
"title": "$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/import.js",
"type": "application/javascript"
},
"$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/macrocall.js": {
"text": "/*\\\nmodule-type: relinkwikitextrule\n\nHandles macro calls.\n\n<<myMacro '[[MyFilter]]' 'myTitle'>>\n\n\\*/\n\nvar utils = require(\"./utils.js\");\nvar Rebuilder = require(\"$:/plugins/flibbles/relink/js/utils/rebuilder\");\nvar settings = require('$:/plugins/flibbles/relink/js/settings.js');\nvar EntryNode = require('$:/plugins/flibbles/relink/js/utils/entry');\n\nexports.name = [\"macrocallinline\", \"macrocallblock\"];\n\n// Error thrown when a macro's definition is needed, but can't be found.\nfunction CannotFindMacroDef() {};\nCannotFindMacroDef.prototype.impossible = true;\nCannotFindMacroDef.prototype.name = \"macroparam\";\n// Failed relinks due to missing definitions aren't reported for now.\n// I may want to do something special later on.\nCannotFindMacroDef.prototype.report = function() { return []; };\n\nvar MacrocallEntry = EntryNode.newCollection(\"macrocall\");\n\nMacrocallEntry.prototype.forEachChildReport = function(report, parameter, type) {\n\tvar rtn;\n\tif (report.length > 0) {\n\t\trtn = parameter + ': \"' + report + '\"';\n\t} else {\n\t\trtn = parameter;\n\t}\n\treturn \"<<\" + this.macro + \" \" + rtn + \">>\";\n};\n\n\nexports.relink = function(text, fromTitle, toTitle, options) {\n\t// Get all the details of the match\n\tvar macroName = this.match[1],\n\t\tparamString = this.match[2],\n\t\tmacroText = this.match[0];\n\t// Move past the macro call\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tif (!options.settings.survey(macroText, fromTitle, options)) {\n\t\treturn undefined;\n\t}\n\tvar start = this.matchRegExp.lastIndex - this.match[0].length;\n\tvar managedMacro = options.settings.getMacro(macroName);\n\tif (!managedMacro) {\n\t\t// We don't manage this macro. Bye.\n\t\treturn undefined;\n\t}\n\tvar offset = macroName.length+2;\n\toffset = $tw.utils.skipWhiteSpace(macroText, offset);\n\tvar params = parseParams(paramString, offset+start);\n\tvar macroInfo = {\n\t\tname: macroName,\n\t\tstart: start,\n\t\tend: this.matchRegExp.lastIndex,\n\t\tparams: params\n\t};\n\tvar mayBeWidget = !options.noWidgets;\n\tvar names = getParamNames(macroInfo.name, macroInfo.params, options);\n\tif (names === undefined) {\n\t\t// Needed the definition, and couldn't find it. So if a single\n\t\t// parameter needs to placeholder, just fail.\n\t\tmayBeWidget = false;\n\t}\n\tvar entry = relinkMacroInvocation(macroInfo, text, fromTitle, toTitle, mayBeWidget, options);\n\tif (entry && entry.output) {\n\t\tentry.output =macroToString(entry.output, text, names, options);\n\t}\n\treturn entry;\n};\n\n/** Relinks macros that occur as attributes, like <$element attr=<<...>> />\n * Processes the same, except it can't downgrade into a widget if the title\n * is complicated.\n */\nexports.relinkAttribute = function(macro, text, fromTitle, toTitle, options) {\n\tvar entry = relinkMacroInvocation(macro, text, fromTitle, toTitle, false, options);\n\tif (entry && entry.output) {\n\t\tentry.output = macroToStringMacro(entry.output, text, options);\n\t}\n\treturn entry;\n};\n\n/**Processes the given macro,\n * macro: {name:, params:, start:, end:}\n * each parameters: {name:, end:, value:}\n * Macro invocation returned is the same, but relinked, and may have new keys:\n * parameters: {type: macro, start:, newValue: (quoted replacement value)}\n * Output of the returned entry isn't a string, but a macro object. It needs\n * to be converted.\n */\nfunction relinkMacroInvocation(macro, text, fromTitle, toTitle, mayBeWidget, options) {\n\tvar managedMacro = options.settings.getMacro(macro.name);\n\tvar modified = false;\n\tif (!managedMacro) {\n\t\t// We don't manage this macro. Bye.\n\t\treturn undefined;\n\t}\n\tif (macro.params.every(function(p) {\n\t\treturn !options.settings.survey(p.value, fromTitle, options);\n\t})) {\n\t\t// We cut early if the fromTitle doesn't even appear\n\t\t// anywhere in the title. This is to avoid any headache\n\t\t// about finding macro definitions (and any resulting\n\t\t// exceptions if there isn't even a title to replace.\n\t\treturn undefined;\n\t}\n\tvar outMacro = $tw.utils.extend({}, macro);\n\tvar macroEntry = new MacrocallEntry();\n\tmacroEntry.parameters = Object.create(null);\n\toutMacro.params = macro.params.slice();\n\tfor (var managedArg in managedMacro) {\n\t\tvar index;\n\t\ttry {\n\t\t\tindex = getParamIndexWithinMacrocall(macro.name, managedArg, macro.params, options);\n\t\t} catch (e) {\n\t\t\tif (e instanceof CannotFindMacroDef) {\n\t\t\t\tmacroEntry.addChild(e);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t\tif (index < 0) {\n\t\t\t// this arg either was not supplied, or we can't find\n\t\t\t// the definition, so we can't tie it to an anonymous\n\t\t\t// argument. Either way, move on to the next.\n\t\t\tcontinue;\n\t\t}\n\t\tvar param = macro.params[index];\n\t\tvar handler = managedMacro[managedArg];\n\t\tvar entry = handler.relink(param.value, fromTitle, toTitle, options);\n\t\tif (entry === undefined) {\n\t\t\tcontinue;\n\t\t}\n\t\t// Macro parameters can only be string parameters, not\n\t\t// indirect, or macro, or filtered\n\t\tmacroEntry.addChild(entry, managedArg, \"string\");\n\t\tif (!entry.output) {\n\t\t\tcontinue;\n\t\t}\n\t\tvar quote = utils.determineQuote(text, param);\n\t\tvar quoted = utils.wrapParameterValue(entry.output, quote);\n\t\tvar newParam = $tw.utils.extend({}, param);\n\t\tif (quoted === undefined) {\n\t\t\tif (!mayBeWidget || !options.placeholder) {\n\t\t\t\tentry.impossible = true;\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tvar ph = options.placeholder.getPlaceholderFor(entry.output,handler.name, options);\n\t\t\tnewParam.newValue = \"<<\"+ph+\">>\";\n\t\t\tnewParam.type = \"macro\";\n\t\t} else {\n\t\t\tnewParam.start = newParam.end - (newParam.value.length + (quote.length*2));\n\t\t\tnewParam.value = entry.output;\n\t\t\tnewParam.newValue = quoted;\n\t\t}\n\t\toutMacro.params[index] = newParam;\n\t\tmodified = true;\n\t}\n\tif (macroEntry.hasChildren()) {\n\t\tmacroEntry.macro = macro.name;\n\t\tif (modified) {\n\t\t\tmacroEntry.output = outMacro;\n\t\t}\n\t\treturn macroEntry;\n\t}\n\treturn undefined;\n};\n\nfunction mustBeAWidget(macro) {\n\tfor (var i = 0; i < macro.params.length; i++) {\n\t\tif (macro.params[i].type === \"macro\") {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false\n};\n\n/**Given a macro object ({name:, params:, start: end:}), and the text where\n * it was parsed from, returns a new macro that maintains any syntactic\n * structuring.\n */\nfunction macroToString(macro, text, names, options) {\n\tif (mustBeAWidget(macro)) {\n\t\tvar attrs = [];\n\t\tfor (var i = 0; i < macro.params.length; i++) {\n\t\t\tvar p = macro.params[i];\n\t\t\tvar val;\n\t\t\tif (p.newValue) {\n\t\t\t\tval = p.newValue;\n\t\t\t} else {\n\t\t\t\tval = utils.wrapAttributeValue(p.value);\n\t\t\t}\n\t\t\tattrs.push(\" \"+names[i]+\"=\"+val);\n\t\t}\n\t\treturn \"<$macrocall $name=\"+utils.wrapAttributeValue(macro.name)+attrs.join('')+\"/>\";\n\t} else {\n\t\treturn macroToStringMacro(macro, text, options);\n\t}\n};\n\nfunction macroToStringMacro(macro, text, options) {\n\tvar builder = new Rebuilder(text, macro.start);\n\tfor (var i = 0; i < macro.params.length; i++) {\n\t\tvar param = macro.params[i];\n\t\tif (param.newValue) {\n\t\t\tbuilder.add(param.newValue, param.start, param.end);\n\t\t}\n\t}\n\treturn builder.results(macro.end);\n};\n\n/** Returns -1 if param definitely isn't in macrocall.\n */\nfunction getParamIndexWithinMacrocall(macroName, param, params, options) {\n\tvar index, i, anonsExist = false;\n\tfor (i = 0; i < params.length; i++) {\n\t\tvar name = params[i].name;\n\t\tif (name === param) {\n\t\t\treturn i;\n\t\t}\n\t\tif (name === undefined) {\n\t\t\tanonsExist = true;\n\t\t}\n\t}\n\tif (!anonsExist) {\n\t\t// If no anonymous parameters are present, and we didn't find\n\t\t// it among the named ones, it must not be there.\n\t\treturn -1;\n\t}\n\tvar expectedIndex = indexOfParameterDef(macroName, param, options);\n\t// We've got to skip over all the named parameter instances.\n\tif (expectedIndex >= 0) {\n\t\tvar anonI = 0;\n\t\tfor (i = 0; i < params.length; i++) {\n\t\t\tif (params[i].name === undefined) {\n\t\t\t\tif (anonI === expectedIndex) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t\tanonI++;\n\t\t\t} else {\n\t\t\t\tvar indexOfOther = indexOfParameterDef(macroName, params[i].name, options);\n\t\t\t\tif (indexOfOther < expectedIndex) {\n\t\t\t\t\tanonI++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn -1;\n};\n\n// Looks up the definition of a macro, and figures out what the expected index\n// is for the given parameter.\nfunction indexOfParameterDef(macroName, paramName, options) {\n\tvar def = options.settings.getMacroDefinition(macroName);\n\tif (def === undefined) {\n\t\tthrow new CannotFindMacroDef();\n\t}\n\tvar params = def.params || [];\n\tfor (var i = 0; i < params.length; i++) {\n\t\tif (params[i].name === paramName) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn -1;\n};\n\nfunction getParamNames(macroName, params, options) {\n\tvar used = Object.create(null);\n\tvar rtn = new Array(params.length);\n\tvar anonsExist = false;\n\tvar i;\n\tfor (i = 0; i < params.length; i++) {\n\t\tvar name = params[i].name;\n\t\tif (name) {\n\t\t\trtn[i] = name;\n\t\t\tused[name] = true;\n\t\t} else {\n\t\t\tanonsExist = true;\n\t\t}\n\t}\n\tif (anonsExist) {\n\t\tvar def = options.settings.getMacroDefinition(macroName);\n\t\tif (def === undefined) {\n\t\t\t// If there are anonymous parameters, and we can't\n\t\t\t// find the definition, then we can't hope to create\n\t\t\t// a widget.\n\t\t\treturn undefined;\n\t\t}\n\t\tvar defParams = def.params || [];\n\t\tvar defPtr = 0;\n\t\tfor (i = 0; i < params.length; i++) {\n\t\t\tif (rtn[i] === undefined) {\n\t\t\t\twhile(defPtr < defParams.length && used[defParams[defPtr].name]) {\n\t\t\t\t\tdefPtr++;\n\t\t\t\t}\n\t\t\t\tif (defPtr >= defParams.length) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\trtn[i] = defParams[defPtr].name;\n\t\t\t\tused[defParams[defPtr].name] = true;\n\t\t\t}\n\t\t}\n\t}\n\treturn rtn;\n};\n\nfunction parseParams(paramString, pos) {\n\tvar params = [],\n\t\treParam = /\\s*(?:([A-Za-z0-9\\-_]+)\\s*:)?(?:\\s*(?:\"\"\"([\\s\\S]*?)\"\"\"|\"([^\"]*)\"|'([^']*)'|\\[\\[([^\\]]*)\\]\\]|([^\"'\\s]+)))/mg,\n\t\tparamMatch = reParam.exec(paramString);\n\twhile(paramMatch) {\n\t\t// Process this parameter\n\t\tvar paramInfo = {\n\t\t\tvalue: paramMatch[2] || paramMatch[3] || paramMatch[4] || paramMatch[5] || paramMatch[6]\n\t\t};\n\t\tif(paramMatch[1]) {\n\t\t\tparamInfo.name = paramMatch[1];\n\t\t}\n\t\t//paramInfo.start = pos;\n\t\tparamInfo.end = reParam.lastIndex + pos;\n\t\tparams.push(paramInfo);\n\t\t// Find the next match\n\t\tparamMatch = reParam.exec(paramString);\n\t}\n\treturn params;\n};\n",
"module-type": "relinkwikitextrule",
"title": "$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/macrocall.js",
"type": "application/javascript"
},
"$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/macrodef.js": {
"text": "/*\\\nmodule-type: relinkwikitextrule\n\nHandles pragma macro definitions. Except we only update placeholder macros\nthat we may have previously install.\n\n\\define relink-?() Tough title\n\n\\*/\n\nvar settings = require(\"$:/plugins/flibbles/relink/js/settings\");\n\nexports.name = \"macrodef\";\n\nfunction MacrodefEntry(macroName, bodyEntry) {\n\tthis.macro = macroName;\n\tthis.body = bodyEntry;\n};\nMacrodefEntry.prototype.name = \"macrodef\";\nMacrodefEntry.prototype.eachChild = function(block) { return block(this.body);};\nMacrodefEntry.prototype.report = function() {\n\tvar macroStr = \"\\\\define \" + this.macro + \"()\";\n\tif (this.body.report) {\n\t\treturn this.body.report().map(function(report) {\n\t\t\treturn macroStr + \" \" + report;\n\t\t});\n\t} else {\n\t\treturn [macroStr];\n\t}\n};\n\nexports.relink = function(text, fromTitle, toTitle, options) {\n\tvar setParseTreeNode = this.parse(),\n\t\tmacroEntry,\n\t\tm = this.match,\n\t\twhitespace;\n\toptions.settings.addMacroDefinition(setParseTreeNode[0]);\n\t// Parse set the pos pointer, but we don't want to skip the macro body.\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\t// m[3] means it's a multiline macrodef\n\tif (m[3]) {\n\t\tvalueRegExp = /\\r?\\n\\\\end[^\\S\\n\\r]*(?:\\r?\\n|$)/mg;\n\t\twhitespace = '';\n\t} else {\n\t\tvar newPos = $tw.utils.skipWhiteSpace(text, this.parser.pos);\n\t\tvalueRegExp = /(?:\\r?\\n|$)/mg;\n\t\twhitespace = text.substring(this.parser.pos, newPos);\n\t\tthis.parser.pos = newPos;\n\t}\n\tvar valueRegExp;\n\tvalueRegExp.lastIndex = this.parser.pos;\n\tvar match = valueRegExp.exec(text);\n\tif (match) {\n\t\tvar value = text.substring(this.parser.pos, match.index),\n\t\t\tplaceholder = /^relink-(?:(\\w+)-)?(\\d+)$/.exec(m[1]),\n\t\t// normal macro or special placeholder?\n\t\t\ttype = (placeholder && m[2] === '')? placeholder[1] || 'title' : 'wikitext',\n\t\t\thandler = settings.getType(type);\n\t\tif (handler) {\n\t\t\tvar entry = handler.relink(value, fromTitle, toTitle, options);\n\t\t}\n\t\tif (entry !== undefined) {\n\t\t\tmacroEntry = new MacrodefEntry(m[1], entry);\n\t\t\tif (entry.output) {\n\t\t\t\tmacroEntry.output = m[0] + whitespace + entry.output + match[0];\n\t\t\t}\n\t\t}\n\t\tthis.parser.pos = match.index + match[0].length;\n\t}\n\treturn macroEntry;\n};\n",
"module-type": "relinkwikitextrule",
"title": "$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/macrodef.js",
"type": "application/javascript"
},
"$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/prettylink.js": {
"text": "/*\\\nmodule-type: relinkwikitextrule\n\nHandles replacement in wiki text inline rules, like,\n\n[[Introduction]]\n\n[[link description|TiddlerTitle]]\n\n\\*/\n\nvar utils = require(\"./utils.js\");\n\nfunction PrettyLinkEntry() {};\nPrettyLinkEntry.prototype.name = \"prettylink\";\nPrettyLinkEntry.prototype.report = function() {\n\treturn [\"[[\" + (this.caption || this.link) + \"]]\"];\n};\n\nexports.name = \"prettylink\";\n\nexports.relink = function(text, fromTitle, toTitle, options) {\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar caption, m = this.match;\n\tif (m[2] === fromTitle) {\n\t\t// format is [[caption|MyTiddler]]\n\t\tcaption = m[1];\n\t} else if (m[2] !== undefined || m[1] !== fromTitle) {\n\t\t// format is [[MyTiddler]], and it doesn't match\n\t\treturn undefined;\n\t}\n\tvar entry = new PrettyLinkEntry();\n\tentry.caption = caption;\n\tentry.link = toTitle;\n\tentry.output = this.makeLink(toTitle, caption, options);\n\tif (entry.output === undefined) {\n\t\tentry.impossible = true;\n\t}\n\treturn entry;\n};\n\nexports.makeLink = function(tiddler, caption, options) {\n\tvar output, quoted;\n\tif (!options.noPrettylinks && this.canBePretty(tiddler, !!caption)) {\n\t\toutput = prettyLink(tiddler, caption);\n\t} else if (options.noWidgets) {\n\t\t// We aren't allowed to make widgets. Gotta fail.\n\t\toutput = undefined;\n\t} else if (caption === undefined) {\n\t\tif (exports.shorthandSupported(options)) {\n\t\t\tquoted = utils.wrapAttributeValue(tiddler);\n\t\t\tif (!quoted) {\n\t\t\t\tif (!options.placeholder) {\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t\tquoted = \"<<\" + options.placeholder.getPlaceholderFor(tiddler,undefined,options) + \">>\";\n\t\t\t}\n\t\t\toutput = \"<$link to=\"+quoted+\"/>\";\n\t\t} else {\n\t\t\t// If we don't have a caption, we must resort to\n\t\t\t// placeholders anyway to prevent link/caption desync\n\t\t\t// from later relinks.\n\t\t\t// It doesn't matter whether the tiddler is quotable.\n\t\t\tif (options.placeholder) {\n\t\t\t\tvar ph = options.placeholder.getPlaceholderFor(tiddler, undefined, options);\n\t\t\t\toutput = \"<$link to=<<\"+ph+\">>><$text text=<<\"+ph+\">>/></$link>\";\n\t\t\t}\n\t\t}\n\t} else if (quoted = utils.wrapAttributeValue(tiddler)) {\n\t\tvar safeCaption = sanitizeCaption(caption, options);\n\t\tif (safeCaption !== undefined) {\n\t\t\toutput = \"<$link to=\"+quoted+\">\"+safeCaption+\"</$link>\";\n\t\t}\n\t} else if (options.placeholder) {\n\t\tvar ph = options.placeholder.getPlaceholderFor(tiddler, undefined, options);\n\t\t// We don't test if caption is undefined here, because it\n\t\t// never will be. options.placeholder exists.\n\t\tvar safeCaption = sanitizeCaption(caption, options);\n\t\toutput = \"<$link to=<<\"+ph+\">>>\"+safeCaption+\"</$link>\";\n\t}\n\treturn output;\n};\n\n/**Return true if value can be used inside a prettylink.\n */\nexports.canBePretty = function(value, customCaption) {\n\treturn value.indexOf(\"]]\") < 0 && value[value.length-1] !== ']' && (customCaption || value.indexOf('|') < 0);\n};\n\n/**In version 5.1.20, Tiddlywiki made it so <$link to\"something\" /> would\n * use \"something\" as a caption. This is preferable. However, Relink works\n * going back to 5.1.14, so we need to have different handling for both\n * cases.\n */\nvar _supported;\nexports.shorthandSupported = function(options) {\n\tif (_supported === undefined) {\n\t\tvar test = options.wiki.renderText(\"text/plain\", \"text/vnd.tiddlywiki\", \"<$link to=test/>\");\n\t\t_supported = (test === \"test\");\n\t}\n\treturn _supported;\n};\n\nfunction sanitizeCaption(caption, options) {\n\tvar plaintext = options.wiki.renderText(\"text/plain\", \"text/vnd.tiddlywiki\", caption);\n\tif (plaintext === caption && caption.indexOf(\"</$link>\") <= 0) {\n\t\treturn caption;\n\t} else {\n\t\tvar wrapped = utils.wrapAttributeValue(caption);\n\t\tif (wrapped) {\n\t\t\treturn \"<$text text=\"+wrapped+\"/>\";\n\t\t} else if (options.placeholder) {\n\t\t\tvar ph = options.placeholder.getPlaceholderFor(caption, \"caption\", options);\n\t\t\treturn \"<$text text=<<\"+ph+\">>/>\";\n\t\t} else {\n\t\t\treturn undefined;\n\t\t}\n\t}\n};\n\nfunction prettyLink(title, caption) {\n\tif (caption) {\n\t\treturn \"[[\" + caption + \"|\" + title + \"]]\";\n\t} else {\n\t\treturn \"[[\" + title + \"]]\";\n\t}\n};\n",
"module-type": "relinkwikitextrule",
"title": "$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/prettylink.js",
"type": "application/javascript"
},
"$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/relink.js": {
"text": "/*\\\nmodule-type: wikirule\n\nThis defines the \\relink inline pragma used to locally declare\nrelink rules for macros.\n\nIt takes care of providing its own relink and report rules.\n\n\\*/\n\nvar settings = require('$:/plugins/flibbles/relink/js/settings.js');\nvar language = require('$:/plugins/flibbles/relink/js/language.js');\n\nexports.name = \"relink\";\nexports.types = {pragma: true};\n\nexports.init = function(parser) {\n\tthis.parser = parser;\n\tthis.matchRegExp = /^\\\\relink[^\\S\\n]+([^(\\s]+)([^\\r\\n]*)(\\r?\\n)?/mg;\n};\n\n/**This makes the widget that the macro library will later parse to determine\n * new macro relink state.\n *\n * It's a <$set> widget so it can appear BEFORE \\define pragma and not\n * prevent that pragma from being scooped up by importvariables.\n * (importvariables stops scooping as soon as it sees something besides $set) */\nexports.parse = function() {\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar macroName;\n\tvar macroParams = Object.create(null);\n\tvar error = undefined;\n\tvar rtn = [];\n\tvar self = this;\n\tthis.interpretSettings(function(macro, parameter, type) {\n\t\tmacroName = macro;\n\t\tif (type && !settings.getType(type)) {\n\t\t\terror = language.getString(\"Error/UnrecognizedType\",\n\t\t\t\t{variables: {type: type}, wiki: self.parser.wiki});\n\t\t}\n\t\tmacroParams[parameter] = type;\n\t});\n\t// If no macroname. Return nothing, this rule will be ignored by parsers\n\tif (macroName) {\n\t\tvar relink = Object.create(null);\n\t\trelink[macroName] = macroParams;\n\t\trtn.push({\n\t\t\ttype: \"set\",\n\t\t\tattributes: {\n\t\t\t\tname: {type: \"string\", value: \"\"}\n\t\t\t},\n\t\t\tchildren: [],\n\t\t\tisMacroDefinition: true,\n\t\t\trelink: relink});\n\t}\n\tif (error) {\n\t\trtn.push({\n\t\t\ttype: \"element\", tag: \"span\", attributes: {\n\t\t\t\t\"class\": {\n\t\t\t\t\ttype: \"string\",\n\t\t\t\t\tvalue: \"tc-error tc-relink-error\"\n\t\t\t\t}\n\t\t\t}, children: [\n\t\t\t\t{type: \"text\", text: error}\n\t\t\t]});\n\t}\n\treturn rtn;\n};\n\nexports.relink = function(text, fromTitle, toTitle, options) {\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tvar self = this;\n\tthis.interpretSettings(function(macro, parameter, type) {\n\t\toptions.settings.addSetting(macro, parameter, type, options.currentTiddler);\n\t});\n\t// Return nothing, because this rule is ignored by the parser\n\treturn undefined;\n};\n\nexports.interpretSettings = function(block) {\n\tvar paramString = this.match[2];\n\tif (paramString !== \"\") {\n\t\tvar macro = this.match[1];\n\t\tvar reParam = /\\s*([A-Za-z0-9\\-_]+)(?:\\s*:\\s*([^\\s]+))?/mg;\n\t\tvar paramMatch = reParam.exec(paramString);\n\t\twhile (paramMatch) {\n\t\t\tvar parameter = paramMatch[1];\n\t\t\tvar type = paramMatch[2];\n\t\t\tblock(macro, parameter, type);\n\t\t\tparamMatch = reParam.exec(paramString);\n\t\t}\n\t}\n};\n",
"module-type": "wikirule",
"title": "$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/relink.js",
"type": "application/javascript"
},
"$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/rules.js": {
"text": "/*\\\nmodule-type: relinkwikitextrule\n\nParses and acknowledges any pragma rules a tiddler has.\n\n\\rules except html wikilink\n\n\\*/\n\nexports.name = \"rules\";\n\n/**This is all we have to do. The rules rule doesn't parse. It just amends\n * the rules, which is exactly what I want it to do too.\n * It also takes care of moving the pos pointer forward.\n */\nexports.relink = function() {\n\tthis.parse();\n\treturn undefined;\n};\n",
"module-type": "relinkwikitextrule",
"title": "$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/rules.js",
"type": "application/javascript"
},
"$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/syslink.js": {
"text": "/*\\\nmodule-type: relinkwikitextrule\n\nHandles sys links\n\n$:/sys/link\n\nbut not:\n\n~$:/sys/link\n\n\\*/\n\nvar utils = require(\"./utils.js\");\nvar prettylink = require('$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/prettylink.js');\n\nexports.name = \"syslink\";\n\nfunction SyslinkEntry() {};\nSyslinkEntry.prototype.name = \"syslink\";\nSyslinkEntry.prototype.report = function() {\n\treturn [\"~\" + this.link];\n};\n\nexports.relink = function(text, fromTitle, toTitle, options) {\n\tvar entry = undefined;\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tif (this.match[0] === fromTitle && this.match[0][0] !== \"~\") {\n\t\tentry = new SyslinkEntry();\n\t\tentry.link = fromTitle;\n\t\tentry.output = this.makeSyslink(toTitle, options);\n\t\tif (entry.output === undefined) {\n\t\t\tentry.impossible = true;\n\t\t}\n\t}\n\treturn entry;\n};\n\nexports.makeSyslink = function(title, options) {\n\tvar match = title.match(this.matchRegExp);\n\tif (match && match[0] === title && title[0] !== \"~\") {\n\t\treturn title;\n\t} else {\n\t\treturn prettylink.makeLink(title, undefined, options);\n\t}\n};\n",
"module-type": "relinkwikitextrule",
"title": "$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/syslink.js",
"type": "application/javascript"
},
"$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/transclude.js": {
"text": "/*\\\nmodule-type: relinkwikitextrule\n\nHandles replacement of transclusions in wiki text like,\n\n{{RenamedTiddler}}\n{{RenamedTiddler||TemplateTitle}}\n\nThis renames both the tiddler and the template field.\n\n\\*/\n\nvar refHandler = require(\"$:/plugins/flibbles/relink/js/fieldtypes/reference\");\nvar utils = require(\"./utils.js\");\n\nexports.name = ['transcludeinline', 'transcludeblock'];\n\nvar TranscludeEntry = function() {};\nTranscludeEntry.prototype.name = \"transclude\";\nTranscludeEntry.prototype.report = function() {\n\tvar ref = this.reference || {};\n\tvar output = [];\n\tif (this.referenceChanged) {\n\t\tvar suffix = \"\";\n\t\tif (ref.field) {\n\t\t\tsuffix = \"!!\" + ref.field;\n\t\t}\n\t\tif (ref.index) {\n\t\t\tsuffix = \"##\" + ref.index;\n\t\t}\n\t\tif (this.template) {\n\t\t\tsuffix = suffix + \"||\" + this.template;\n\t\t}\n\t\toutput.push(\"{{\" + suffix + \"}}\");\n\t}\n\tif (this.templateChanged) {\n\t\t// Must be template\n\t\tvar refString = refHandler.toString(ref);\n\t\toutput.push(\"{{\" + refString + \"||}}\");\n\t}\n\treturn output;\n};\n\nexports.relink = function(text, fromTitle, toTitle, options) {\n\tvar m = this.match,\n\t\treference = $tw.utils.parseTextReference(m[1]),\n\t\ttemplate = m[2],\n\t\tentry = new TranscludeEntry(),\n\t\tmodified = false;\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tif ($tw.utils.trim(reference.title) === fromTitle) {\n\t\t// preserve user's whitespace\n\t\treference.title = reference.title.replace(fromTitle, toTitle);\n\t\tmodified = true;\n\t\tentry.referenceChanged = true;\n\t}\n\tif ($tw.utils.trim(template) === fromTitle) {\n\t\ttemplate = template.replace(fromTitle, toTitle);\n\t\tmodified = true;\n\t\tentry.templateChanged = true;\n\t}\n\tif (modified) {\n\t\tentry.reference = reference;\n\t\tentry.template = template;\n\t\tvar output = this.makeTransclude(reference, template, options);\n\t\tif (output) {\n\t\t\t// Adding any newline that might have existed is\n\t\t\t// what allows this relink method to work for both\n\t\t\t// the block and inline filter wikitext rule.\n\t\t\toutput = output + utils.getEndingNewline(m[0]);\n\t\t\tentry.output = output;\n\t\t} else {\n\t\t\tentry.impossible = true;\n\t\t}\n\t\treturn entry;\n\t}\n\treturn undefined;\n};\n\n/** This converts a reference and a template into a string representation\n * of a transclude.\n */\nexports.makeTransclude = function(reference, template, options) {\n\tvar rtn;\n\tif (!canBePrettyTemplate(template)) {\n\t\tif (!options.noWidgets) {\n\t\t\tvar resultTemplate = wrap(template, options);\n\t\t\tif (resultTemplate !== undefined) {\n\t\t\t\tif (reference.title) {\n\t\t\t\t\tvar resultTitle = wrap(reference.title, options);\n\t\t\t\t\tvar attrs = transcludeAttributes(reference.field, reference.index, options);\n\t\t\t\t\tif (resultTitle !== undefined && attrs !== undefined) {\n\t\t\t\t\t\trtn = \"<$tiddler tiddler=\"+resultTitle+\"><$transclude tiddler=\"+resultTemplate+attrs+\"/></$tiddler>\";\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\trtn = \"<$transclude tiddler=\"+resultTemplate+\"/>\";\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else if (!canBePrettyTitle(reference.title)) {\n\t\tif (!options.noWidgets) {\n\t\t\t// This block and the next account for the 1%...\n\t\t\tvar resultTitle = wrap(reference.title, options);\n\t\t\tif (resultTitle !== undefined) {\n\t\t\t\tvar reducedRef = {field: reference.field, index: reference.index};\n\t\t\t\trtn = \"<$tiddler tiddler=\"+resultTitle+\">\"+prettyTransclude(reducedRef, template)+\"</$tiddler>\";\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// This block takes care of 99% of all cases\n\t\trtn = prettyTransclude(reference, template);\n\t}\n\treturn rtn;\n};\n\nfunction wrap(tiddler, options) {\n\ttiddler = $tw.utils.trim(tiddler);\n\tvar result = utils.wrapAttributeValue(tiddler);\n\tif (result === undefined) {\n\t\tif (options.placeholder) {\n\t\t\tresult = \"<<\" + options.placeholder.getPlaceholderFor(tiddler, undefined, options) + \">>\";\n\t\t}\n\t}\n\treturn result;\n};\n\nfunction canBePrettyTitle(value) {\n\treturn refHandler.canBePretty(value) && canBePrettyTemplate(value);\n};\n\nfunction canBePrettyTemplate(value) {\n\treturn !value || (value.indexOf('}') < 0 && value.indexOf('{') < 0 && value.indexOf('|') < 0);\n};\n\n/**Returns attributes for a transclude widget.\n * only field or index should be used, not both, but both will return\n * the intuitive (albeit useless) result.\n */\nfunction transcludeAttributes(field, index, options) {\n\tvar rtn = [\n\t\twrapAttribute(\"field\", field, options),\n\t\twrapAttribute(\"index\", index, options)\n\t];\n\tif (rtn[0] === undefined || rtn[1] === undefined) {\n\t\t// This can only happen if the transclude is using an\n\t\t// illegal key.\n\t\treturn undefined;\n\t}\n\treturn rtn.join('');\n};\n\nfunction wrapAttribute(name, value, options) {\n\tif (value) {\n\t\tvar wrappedValue = utils.wrapAttributeValue(value);\n\t\tif (wrappedValue === undefined) {\n\t\t\tif (!options.placeholder) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\twrappedValue = \"<<\"+options.placeholder.getPlaceholderFor(value, name, options)+\">>\";\n\t\t}\n\t\treturn \" \"+name+\"=\"+wrappedValue;\n\t}\n\treturn '';\n};\n\nfunction prettyTransclude(textReference, template) {\n\tif (typeof textReference !== \"string\") {\n\t\ttextReference = refHandler.toString(textReference);\n\t}\n\tif (!textReference) {\n\t\ttextReference = '';\n\t}\n\tif (template !== undefined) {\n\t\treturn \"{{\"+textReference+\"||\"+template+\"}}\";\n\t} else {\n\t\treturn \"{{\"+textReference+\"}}\";\n\t}\n};\n",
"module-type": "relinkwikitextrule",
"title": "$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/transclude.js",
"type": "application/javascript"
},
"$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/utils.js": {
"text": "/*\\\nmodule-type: library\n\nUtility methods for the wikitext relink rules.\n\n\\*/\n\n/**Finds an appropriate quote mark for a given value.\n *\n *Tiddlywiki doesn't have escape characters for attribute values. Instead,\n * we just have to find the type of quotes that'll work for the given title.\n * There exist titles that simply can't be quoted.\n * If it can stick with the preference, it will.\n *\n * return: Returns the wrapped value, or undefined if it's impossible to wrap\n */\nexports.wrapAttributeValue = function(value, preference) {\n\tvar whitelist = [\"\", \"'\", '\"', '\"\"\"'];\n\tvar choices = {\n\t\t\"\": function(v) {return !/([\\/\\s<>\"'=])/.test(v); },\n\t\t\"'\": function(v) {return v.indexOf(\"'\") < 0; },\n\t\t'\"': function(v) {return v.indexOf('\"') < 0; },\n\t\t'\"\"\"': function(v) {return v.indexOf('\"\"\"') < 0 && v[v.length-1] != '\"';}\n\t};\n\tif (choices[preference] && choices[preference](value)) {\n\t\treturn wrap(value, preference);\n\t}\n\tfor (var i = 0; i < whitelist.length; i++) {\n\t\tvar quote = whitelist[i];\n\t\tif (choices[quote](value)) {\n\t\t\treturn wrap(value, quote);\n\t\t}\n\t}\n\t// No quotes will work on this\n\treturn undefined;\n};\n\n/**Like wrapAttribute value, except for macro parameters, not attributes.\n *\n * These are more permissive. Allows brackets,\n * and slashes and '<' in unquoted values.\n */\nexports.wrapParameterValue = function(value, preference) {\n\tvar whitelist = [\"\", \"'\", '\"', '[[', '\"\"\"'];\n\tvar choices = {\n\t\t\"\": function(v) {return !/([\\s>\"'=])/.test(v); },\n\t\t\"'\": function(v) {return v.indexOf(\"'\") < 0; },\n\t\t'\"': function(v) {return v.indexOf('\"') < 0; },\n\t\t\"[[\": exports.canBePrettyOperand,\n\t\t'\"\"\"': function(v) {return v.indexOf('\"\"\"') < 0 && v[v.length-1] != '\"';}\n\t};\n\tif (choices[preference] && choices[preference](value)) {\n\t\treturn wrap(value, preference);\n\t}\n\tfor (var i = 0; i < whitelist.length; i++) {\n\t\tvar quote = whitelist[i];\n\t\tif (choices[quote](value)) {\n\t\t\treturn wrap(value, quote);\n\t\t}\n\t}\n\t// No quotes will work on this\n\treturn undefined;\n};\n\nfunction wrap(value, wrapper) {\n\tvar wrappers = {\n\t\t\"\": function(v) {return v; },\n\t\t\"'\": function(v) {return \"'\"+v+\"'\"; },\n\t\t'\"': function(v) {return '\"'+v+'\"'; },\n\t\t'\"\"\"': function(v) {return '\"\"\"'+v+'\"\"\"'; },\n\t\t\"[[\": function(v) {return \"[[\"+v+\"]]\"; }\n\t};\n\tvar chosen = wrappers[wrapper];\n\tif (chosen) {\n\t\treturn chosen(value);\n\t} else {\n\t\treturn undefined;\n\t}\n};\n\nexports.canBePrettyOperand = function(value) {\n\treturn value.indexOf(']') < 0;\n};\n\n/**Given some text, and a param or attribute within that text, this returns\n * what type of quotation that attribute is using.\n *\n * param: An object in the form {end:, ...}\n */\nexports.determineQuote = function(text, param) {\n\tvar pos = param.end-1;\n\tif (text[pos] === \"'\") {\n\t\treturn \"'\";\n\t}\n\tif (text[pos] === '\"') {\n\t\tif (text.substr(pos-2, 3) === '\"\"\"') {\n\t\t\treturn '\"\"\"';\n\t\t} else {\n\t\t\treturn '\"';\n\t\t}\n\t}\n\tif (text.substr(pos-1,2) === ']]' && text.substr((pos-param.value.length)-3, 2) === '[[') {\n\t\treturn \"[[\";\n\t}\n\treturn '';\n};\n\n// Finds the newline at the end of a string and returns it. Empty string if\n// none exists.\nexports.getEndingNewline = function(string) {\n\tvar l = string.length;\n\tif (string[l-1] === '\\n') {\n\t\treturn (string[l-2] === '\\r') ? \"\\r\\n\" : \"\\n\";\n\t}\n\treturn \"\";\n};\n",
"module-type": "library",
"title": "$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/utils.js",
"type": "application/javascript"
},
"$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/wikilink.js": {
"text": "/*\\\nmodule-type: relinkwikitextrule\n\nHandles CamelCase links\n\nWikiLink\n\nbut not:\n\n~WikiLink\n\n\\*/\n\nvar utils = require(\"./utils.js\");\nvar prettylink = require('$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/prettylink.js');\n\nexports.name = \"wikilink\";\n\nfunction WikilinkEntry() {};\nWikilinkEntry.prototype.name = \"wikilink\";\nWikilinkEntry.prototype.report = function() {\n\treturn [$tw.config.textPrimitives.unWikiLink + this.link];\n};\n\nexports.relink = function(text, fromTitle, toTitle, options) {\n\tvar entry = undefined;\n\tthis.parser.pos = this.matchRegExp.lastIndex;\n\tif (this.match[0] === fromTitle && this.match[0][0] !== $tw.config.textPrimitives.unWikiLink) {\n\t\tentry = new WikilinkEntry();\n\t\tentry.link = fromTitle;\n\t\tentry.output = this.makeWikilink(toTitle, options);\n\t\tif (entry.output === undefined) {\n\t\t\tentry.impossible = true;\n\t\t}\n\t}\n\treturn entry;\n};\n\nexports.makeWikilink = function(title, options) {\n\tif (title.match(this.matchRegExp) && title[0] !== $tw.config.textPrimitives.unWikiLink) {\n\t\treturn title;\n\t} else {\n\t\treturn prettylink.makeLink(title, undefined, options);\n\t}\n};\n",
"module-type": "relinkwikitextrule",
"title": "$:/plugins/flibbles/relink/js/relinkoperations/text/wikitext/wikilink.js",
"type": "application/javascript"
},
"$:/plugins/flibbles/relink/js/surveyors/raw.js": {
"text": "/*\\\n\nThis looks at text and sees if fromTitle is inside of it. That's all.\n\nSURVEYORS\n\nSurveyors are an optimization. They are way of quick-discarding text so it\ndoesn't have to be interpreted by the wikitext parser, the filter parser,\netc...\n\nThe reason I split this off into a module type is in case anyone wants to\nrelink patterns which might NOT contain the fromTitle in raw text.\n\nThey return false for \"no\", and true for \"maybe\". If any surveyor returns\n\"maybe\", the text in question is fully parsed.\n\nSee the documentation for more details.\n\n\\*/\n\nexports.survey = function(text, fromTitle, options) {\n\treturn text.indexOf(fromTitle) >= 0;\n};\n",
"module-type": "relinksurveyor",
"title": "$:/plugins/flibbles/relink/js/surveyors/raw.js",
"type": "application/javascript"
},
"$:/plugins/flibbles/relink/js/utils/entry.js": {
"text": "function EntryNode() {\n\tthis.children = [];\n};\n\nmodule.exports = EntryNode;\n\n/** PURE VIRTUAL\n * EntryNode.prototype.report = function() -> [\"string\", ...]\n */\n\nEntryNode.newType = function(name) {\n\tfunction NewEntry() {\n\t\tEntryNode.apply(this, arguments);\n\t};\n\tNewEntry.prototype = Object.create(EntryNode.prototype);\n\tNewEntry.prototype.name = name;\n\treturn NewEntry;\n};\n\nEntryNode.prototype.eachChild = function(method) {\n\tif (this.children) {\n\t\tfor (var i = 0; i < this.children.length; i++) {\n\t\t\tmethod(this.children[i]);\n\t\t}\n\t}\n};\n\nEntryNode.prototype.add = function(entry) {\n\tthis.children.push(entry);\n};\n\nEntryNode.prototype.report = function() {\n\tvar output = [];\n\t$tw.utils.each(this.children, function(child) {\n\t\t// All wikitext children should be able to report\n\t\t$tw.utils.each(child.report(), function(report) {\n\t\t\toutput.push(report);\n\t\t});\n\t});\n\treturn output;\n};\n\nfunction EntryCollection() {\n\tthis.children = Object.create(null);\n\tthis.types = Object.create(null);\n};\n\nEntryNode.newCollection = function(name) {\n\tfunction NewCollection() {\n\t\tEntryCollection.apply(this, arguments);\n\t};\n\tNewCollection.prototype = Object.create(EntryCollection.prototype);\n\tNewCollection.prototype.name = name;\n\treturn NewCollection;\n};\n\nEntryCollection.prototype.eachChild = function(method) {\n\tfor (var child in this.children) {\n\t\tmethod(this.children[child]);\n\t}\n};\n\nEntryCollection.prototype.addChild = function(child, name, type) {\n\tthis.children[name] = child;\n\tthis.types[name] = type;\n};\n\nEntryCollection.prototype.report = function() {\n\tvar output = [];\n\tfor (var name in this.children) {\n\t\tvar child = this.children[name];\n\t\tvar type = this.types[name];\n\t\tif (child.report) {\n\t\t\tvar reports = child.report();\n\t\t\tfor (var i = 0; i < reports.length; i++) {\n\t\t\t\toutput.push(this.forEachChildReport(reports[i], name, type));\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(this.forEachChildReport('', name, type));\n\n\t\t}\n\t}\n\treturn output;\n};\n\nEntryCollection.prototype.hasChildren = function() {\n\treturn Object.keys(this.children).length > 0;\n};\n",
"module-type": "library",
"title": "$:/plugins/flibbles/relink/js/utils/entry.js",
"type": "application/javascript"
},
"$:/plugins/flibbles/relink/js/utils/macroConfig.js": {
"text": "/*\\\nmodule-type: library\n\nThis handles the fetching and distribution of relink settings.\n\n\\*/\n\nvar settings = require('$:/plugins/flibbles/relink/js/settings.js');\nvar Widget = require(\"$:/core/modules/widgets/widget.js\").widget;\n\nfunction MacroConfig(wiki, parent, title) {\n\tthis.macros = Object.create(null);\n\tthis.parent = parent;\n\tthis.title = title;\n\tthis.wiki = wiki;\n\tthis.widgetList = [];\n\tthis.reservedmacroNames = Object.create(null);\n};\n\nmodule.exports = MacroConfig;\n\nMacroConfig.prototype.import = function(filter) {\n\tvar parentWidget;\n\tif (this.parent) {\n\t\tparentWidget = this.getVariableWidget();\n\t}\n\tvar importWidget = createImportWidget(filter, this.wiki, parentWidget);\n\tthis._compileList(importWidget.tiddlerList);\n\tthis.widgetList.push(importWidget);\n\t// This only works if only one filter is imported\n\tthis.addWidget(importWidget);\n};\n\nMacroConfig.prototype.refresh = function(changes) {\n\tthis.parent.refresh(changes);\n\tif (this.widget.refresh(changes)) {\n\t\tthis.macros = Object.create(null);\n\t\t// Recompile all our widgets in the same order\n\t\tfor (var i = 0; i < this.widgetList.length; i++) {\n\t\t\tthis._compileList(this.widgetList[i].tiddlerList );\n\t\t}\n\t\treturn true;\n\t}\n\treturn false;\n};\n\n// So fieldtypes can access settings through options.settings, instead of\n// including this file, which they can't, because that'd be cyclical dependency\nMacroConfig.prototype.getType = function(name) {\n\treturn settings.getType(name);\n};\n\n// This class does no special handling of fields, operators, or attributes.\n// we pass it along to the parent.\nMacroConfig.prototype.getFields = function() {\n\treturn this.parent.getFields();\n};\n\nMacroConfig.prototype.getOperators = function() {\n\treturn this.parent.getOperators();\n};\n\nMacroConfig.prototype.getAttributes = function() {\n\treturn this.parent.getAttributes();\n};\n\nMacroConfig.prototype.survey = function(text, fromTitle, options) {\n\treturn this.parent.survey(text, fromTitle, options);\n};\n\nMacroConfig.prototype.getAttribute = function(elementName) {\n\treturn this.parent.getAttribute(elementName);\n};\n\nMacroConfig.prototype.getMacros = function() {\n\tvar signatures = this.parent.getMacros();\n\tfor (var macroName in this.macros) {\n\t\tvar macro = this.macros[macroName];\n\t\tfor (var param in macro) {\n\t\t\tsignatures[macroName + \"/\" + param] = macro[param];\n\t\t}\n\t}\n\treturn signatures;\n};\n\n// But macro we handle differently.\nMacroConfig.prototype.getMacro = function(macroName) {\n\tvar theseSettings = this.macros[macroName];\n\tvar parentSettings;\n\tif (this.parent) {\n\t\tparentSettings = this.parent.getMacro(macroName);\n\t}\n\tif (theseSettings && parentSettings) {\n\t\t// gotta merge them without changing either. This is expensive,\n\t\t// but it'll happen rarely.\n\t\tvar rtnSettings = $tw.utils.extend(Object.create(null), theseSettings, parentSettings);\n\t\treturn rtnSettings;\n\t}\n\treturn theseSettings || parentSettings;\n};\n\nMacroConfig.prototype.addSetting = function(macroName, parameter, type, sourceTitle) {\n\tvar macro = this.macros[macroName];\n\ttype = type || settings.getDefaultType(this.wiki);\n\tif (macro === undefined) {\n\t\tmacro = this.macros[macroName] = Object.create(null);\n\t}\n\tvar handler = settings.getType(type);\n\tif (handler) {\n\t\thandler.source = sourceTitle;\n\t\t// We attach the fields of the defining tiddler for the benefit\n\t\t// of any 3rd party field types that want access to them.\n\t\tvar tiddler = this.wiki.getTiddler(sourceTitle);\n\t\thandler.fields = tiddler.fields;\n\t\tmacro[parameter] = handler;\n\t}\n};\n\nMacroConfig.prototype.createChildLibrary = function(title) {\n\treturn new MacroConfig(this.wiki, this, title);\n};\n\nMacroConfig.prototype.addWidget = function(widget) {\n\tthis.widget = widget;\n\twhile (this.widget.children.length > 0) {\n\t\tthis.widget = this.widget.children[0];\n\t}\n};\n\nMacroConfig.prototype.getVariableWidget = function() {\n\tif (!this.widget) {\n\t\tvar varWidget = this.parent && this.parent.widget;\n\t\tvar parentWidget = new Widget({}, {parentWidget: varWidget});\n\t\tparentWidget.setVariable(\"currentTiddler\", this.title);\n\t\tvar widget = new Widget({}, {parentWidget: parentWidget});\n\t\tthis.addWidget(widget);\n\t}\n\treturn this.widget;\n};\n\n/**This takes macros, specifically relink placeholders, and remembers them\n * It creates a dummy object for them, since we'll never need the definition\n */\nMacroConfig.prototype.reserveMacroName = function(variableName) {\n\tthis.reservedmacroNames[variableName] = {\n\t\tvalue: \"\",\n\t\tparams: []};\n};\n\nMacroConfig.prototype.addMacroDefinition = function(setParseTreeNode) {\n\tvar bottomWidget = this.getVariableWidget();\n\tvar setWidget = bottomWidget.makeChildWidget(setParseTreeNode);\n\tsetWidget.computeAttributes();\n\tsetWidget.execute();\n\tthis.addWidget(setWidget);\n};\n\nMacroConfig.prototype.getMacroDefinition = function(variableName) {\n\treturn this.getVariableWidget().variables[variableName] || $tw.macros[variableName] || this.reservedmacroNames[variableName];\n};\n\nfunction createImportWidget(filter, wiki, parent) {\n\tvar widget = wiki.makeWidget( { tree: [{\n\t\ttype: \"importvariables\",\n\t\tattributes: {\n\t\t\t\"filter\": {\n\t\t\t\ttype: \"string\",\n\t\t\t\tvalue: filter\n\t\t\t}\n\t\t}\n\t}] }, { parentWidget: parent} );\n\twidget.execute();\n\twidget.renderChildren();\n\tvar importWidget = widget.children[0];\n\treturn importWidget;\n};\n\nMacroConfig.prototype._compileList = function(titleList) {\n\tfor (var i = 0; i < titleList.length; i++) {\n\t\tvar parser = this.wiki.parseTiddler(titleList[i]);\n\t\tif (parser) {\n\t\t\tvar parseTreeNode = parser.tree[0];\n\t\t\twhile (parseTreeNode && parseTreeNode.type === \"set\") {\n\t\t\t\tif (parseTreeNode.relink) {\n\t\t\t\t\tfor (var macroName in parseTreeNode.relink) {\n\t\t\t\t\t\tvar parameters = parseTreeNode.relink[macroName];\n\t\t\t\t\t\tfor (paramName in parameters) {\n\t\t\t\t\t\t\tthis.addSetting(macroName, paramName, parameters[paramName], titleList[i]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tparseTreeNode = parseTreeNode.children && parseTreeNode.children[0];\n\t\t\t}\n\t\t}\n\t}\n};\n",
"module-type": "library",
"title": "$:/plugins/flibbles/relink/js/utils/macroConfig.js",
"type": "application/javascript"
},
"$:/plugins/flibbles/relink/js/utils/placeholder.js": {
"text": "/*\\\n\nA method which doles out placeholders when requested, and constructs\nthe necessary supporting pragma when requested.\n\n\\*/\n\nfunction Placeholder() {\n\tthis.placeholders = Object.create(null);\n\tthis.reverseMap = Object.create(null);\n};\n\nmodule.exports = Placeholder;\n\nPlaceholder.prototype.getPlaceholderFor = function(value, category, options) {\n\tvar placeholder = this.reverseMap[value];\n\tvar config = options.settings || options.wiki.getRelinkConfig();\n\tif (placeholder) {\n\t\treturn placeholder;\n\t}\n\tvar number = 0;\n\tvar prefix = \"relink-\"\n\tif (category && category !== \"title\") {\n\t\t// I don't like \"relink-title-1\". \"relink-1\" should be for\n\t\t// titles. lists, and filters can have descriptors though.\n\t\tprefix += category + \"-\";\n\t}\n\tdo {\n\t\tnumber += 1;\n\t\tplaceholder = prefix + number;\n\t} while (config.getMacroDefinition(placeholder));\n\tconfig.reserveMacroName(placeholder);\n\tthis.placeholders[placeholder] = value;\n\tthis.reverseMap[value] = placeholder;\n\treturn placeholder;\n};\n\nPlaceholder.prototype.getPreamble = function() {\n\tvar results = [];\n\tfor (var name in this.placeholders) {\n\t\tvar val = this.placeholders[name];\n\t\tresults.push(\"\\\\define \"+name+\"() \"+val+\"\\n\");\n\t}\n\treturn results.join('');\n};\n\n",
"module-type": "library",
"title": "$:/plugins/flibbles/relink/js/utils/placeholder.js",
"type": "application/javascript"
},
"$:/plugins/flibbles/relink/js/utils/rebuilder.js": {
"text": "/*\\\n\nThis helper class aids in reconstructing an existing string with new parts.\n\n\\*/\n\nfunction Rebuilder(text, start) {\n\tthis.text = text;\n\tthis.index = start || 0;\n\tthis.pieces = [];\n};\n\nmodule.exports = Rebuilder;\n\n/**Pieces must be added consecutively.\n * Start and end are the indices in the old string specifying where to graft\n * in the new piece.\n */\nRebuilder.prototype.add = function(value, start, end) {\n\tthis.pieces.push(this.text.substring(this.index, start), value);\n\tthis.index = end;\n};\n\nRebuilder.prototype.changed = function() {\n\treturn this.pieces.length > 0;\n};\n\nRebuilder.prototype.results = function(end) {\n\tif (this.changed()) {\n\t\tthis.pieces.push(this.text.substring(this.index, end));\n\t\treturn this.pieces.join('');\n\t}\n\treturn undefined;\n};\n",
"module-type": "library",
"title": "$:/plugins/flibbles/relink/js/utils/rebuilder.js",
"type": "application/javascript"
},
"$:/config/flibbles/relink/attributes/$button/set": {
"title": "$:/config/flibbles/relink/attributes/$button/set",
"text": "reference"
},
"$:/config/flibbles/relink/attributes/$button/setTo": {
"title": "$:/config/flibbles/relink/attributes/$button/setTo",
"text": "title"
},
"$:/config/flibbles/relink/attributes/$button/to": {
"title": "$:/config/flibbles/relink/attributes/$button/to",
"text": "title"
},
"$:/config/flibbles/relink/attributes/$checkbox/tiddler": {
"title": "$:/config/flibbles/relink/attributes/$checkbox/tiddler",
"text": "title"
},
"$:/config/flibbles/relink/attributes/$checkbox/tag": {
"title": "$:/config/flibbles/relink/attributes/$checkbox/tag",
"text": "title"
},
"$:/config/flibbles/relink/attributes/$count/filter": {
"title": "$:/config/flibbles/relink/attributes/$count/filter",
"text": "filter"
},
"$:/config/flibbles/relink/attributes/$draggable/tiddler": {
"title": "$:/config/flibbles/relink/attributes/$draggable/tiddler",
"text": "title"
},
"$:/config/flibbles/relink/attributes/$draggable/filter": {
"title": "$:/config/flibbles/relink/attributes/$draggable/filter",
"text": "filter"
},
"$:/config/flibbles/relink/attributes/$edit-bitmap/tiddler": {
"title": "$:/config/flibbles/relink/attributes/$edit-bitmap/tiddler",
"text": "title"
},
"$:/config/flibbles/relink/attributes/$edit-text/tiddler": {
"title": "$:/config/flibbles/relink/attributes/$edit-text/tiddler",
"text": "title"
},
"$:/config/flibbles/relink/attributes/$edit/tiddler": {
"title": "$:/config/flibbles/relink/attributes/$edit/tiddler",
"text": "title"
},
"$:/config/flibbles/relink/attributes/$encrypt/filter": {
"title": "$:/config/flibbles/relink/attributes/$encrypt/filter",
"text": "filter"
},
"$:/config/flibbles/relink/attributes/$fieldmangler/tiddler": {
"title": "$:/config/flibbles/relink/attributes/$fieldmangler/tiddler",
"text": "title"
},
"$:/config/flibbles/relink/attributes/$fields/tiddler": {
"title": "$:/config/flibbles/relink/attributes/$fields/tiddler",
"text": "title"
},
"$:/config/flibbles/relink/attributes/$image/source": {
"title": "$:/config/flibbles/relink/attributes/$image/source",
"text": "title"
},
"$:/config/flibbles/relink/attributes/$importvariables/filter": {
"title": "$:/config/flibbles/relink/attributes/$importvariables/filter",
"text": "filter"
},
"$:/config/flibbles/relink/attributes/$linkcatcher/to": {
"title": "$:/config/flibbles/relink/attributes/$linkcatcher/to",
"text": "title"
},
"$:/config/flibbles/relink/attributes/$linkcatcher/set": {
"title": "$:/config/flibbles/relink/attributes/$linkcatcher/set",
"text": "title"
},
"$:/config/flibbles/relink/attributes/$link/to": {
"title": "$:/config/flibbles/relink/attributes/$link/to",
"text": "title"
},
"$:/config/flibbles/relink/attributes/$list/filter": {
"title": "$:/config/flibbles/relink/attributes/$list/filter",
"text": "filter"
},
"$:/config/flibbles/relink/attributes/$list/template": {
"title": "$:/config/flibbles/relink/attributes/$list/template",
"text": "title"
},
"$:/config/flibbles/relink/attributes/$list/editTemplate": {
"title": "$:/config/flibbles/relink/attributes/$list/editTemplate",
"text": "title"
},
"$:/config/flibbles/relink/attributes/$list/history": {
"title": "$:/config/flibbles/relink/attributes/$list/history",
"text": "title"
},
"$:/config/flibbles/relink/attributes/$navigator/story": {
"title": "$:/config/flibbles/relink/attributes/$navigator/story",
"text": "title"
},
"$:/config/flibbles/relink/attributes/$navigator/history": {
"title": "$:/config/flibbles/relink/attributes/$navigator/history",
"text": "title"
},
"$:/config/flibbles/relink/attributes/$radio/tiddler": {
"title": "$:/config/flibbles/relink/attributes/$radio/tiddler",
"text": "title"
},
"$:/config/flibbles/relink/attributes/$range/tiddler": {
"title": "$:/config/flibbles/relink/attributes/$range/tiddler",
"text": "title"
},
"$:/config/flibbles/relink/attributes/$reveal/stateTitle": {
"title": "$:/config/flibbles/relink/attributes/$reveal/stateTitle",
"text": "title"
},
"$:/config/flibbles/relink/attributes/$select/tiddler": {
"title": "$:/config/flibbles/relink/attributes/$select/tiddler",
"text": "title"
},
"$:/config/flibbles/relink/attributes/$setvariable/tiddler": {
"title": "$:/config/flibbles/relink/attributes/$setvariable/tiddler",
"text": "title"
},
"$:/config/flibbles/relink/attributes/$setvariable/subtiddler": {
"title": "$:/config/flibbles/relink/attributes/$setvariable/subtiddler",
"text": "title"
},
"$:/config/flibbles/relink/attributes/$setvariable/filter": {
"title": "$:/config/flibbles/relink/attributes/$setvariable/filter",
"text": "filter"
},
"$:/config/flibbles/relink/attributes/$set/tiddler": {
"title": "$:/config/flibbles/relink/attributes/$set/tiddler",
"text": "title"
},
"$:/config/flibbles/relink/attributes/$set/subtiddler": {
"title": "$:/config/flibbles/relink/attributes/$set/subtiddler",
"text": "title"
},
"$:/config/flibbles/relink/attributes/$set/filter": {
"title": "$:/config/flibbles/relink/attributes/$set/filter",
"text": "filter"
},
"$:/config/flibbles/relink/attributes/$tiddler/tiddler": {
"title": "$:/config/flibbles/relink/attributes/$tiddler/tiddler",
"text": "title"
},
"$:/config/flibbles/relink/attributes/$transclude/tiddler": {
"title": "$:/config/flibbles/relink/attributes/$transclude/tiddler",
"text": "title"
},
"$:/config/flibbles/relink/attributes/$transclude/subtiddler": {
"title": "$:/config/flibbles/relink/attributes/$transclude/subtiddler",
"text": "title"
},
"$:/config/flibbles/relink/attributes/$view/tiddler": {
"title": "$:/config/flibbles/relink/attributes/$view/tiddler",
"text": "title"
},
"$:/config/flibbles/relink/attributes/$view/subtiddler": {
"title": "$:/config/flibbles/relink/attributes/$view/subtiddler",
"text": "title"
},
"$:/plugins/flibbles/relink/configuration": {
"title": "$:/plugins/flibbles/relink/configuration",
"text": "<div class=\"tc-control-panel\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/flibbles/relink/Configuration]!has[draft.of]]\" \"$:/plugins/flibbles/relink/ui/configuration/Fields\">>\n</div>\n"
},
"$:/config/flibbles/relink/fields/caption": {
"title": "$:/config/flibbles/relink/fields/caption",
"text": "wikitext"
},
"$:/config/flibbles/relink/fields/filter": {
"title": "$:/config/flibbles/relink/fields/filter",
"text": "filter"
},
"$:/config/flibbles/relink/fields/list": {
"title": "$:/config/flibbles/relink/fields/list",
"text": "list"
},
"$:/config/flibbles/relink/fields/list-after": {
"title": "$:/config/flibbles/relink/fields/list-after",
"text": "title"
},
"$:/config/flibbles/relink/fields/list-before": {
"title": "$:/config/flibbles/relink/fields/list-before",
"text": "title"
},
"$:/config/flibbles/relink/fields/tags": {
"title": "$:/config/flibbles/relink/fields/tags",
"text": "list"
},
"$:/plugins/flibbles/relink/language/PluginLibrary": {
"title": "$:/plugins/flibbles/relink/language/PluginLibrary",
"text": "//Relink// Library"
},
"$:/plugins/flibbles/relink/language/PluginLibrary/Hint": {
"title": "$:/plugins/flibbles/relink/language/PluginLibrary/Hint",
"text": "The //Relink// library contains //Relink// as well as its supplemental plugins. It is maintained by Flibbles. See the <a href={{$:/plugins/flibbles/relink!!source}}>github page</a> for more information."
},
"$:/plugins/flibbles/relink/language/Buttons/Delete/Hint": {
"title": "$:/plugins/flibbles/relink/language/Buttons/Delete/Hint",
"text": "delete"
},
"$:/plugins/flibbles/relink/language/Buttons/LinkToInline/Hint": {
"title": "$:/plugins/flibbles/relink/language/Buttons/LinkToInline/Hint",
"text": "go to defining tiddler"
},
"$:/plugins/flibbles/relink/language/Buttons/NewAttribute/Hint": {
"title": "$:/plugins/flibbles/relink/language/Buttons/NewAttribute/Hint",
"text": "Specify a new widget/element attribute to be updated whenever a tiddler is renamed"
},
"$:/plugins/flibbles/relink/language/Buttons/NewAttribute/Caption": {
"title": "$:/plugins/flibbles/relink/language/Buttons/NewAttribute/Caption",
"text": "add"
},
"$:/plugins/flibbles/relink/language/Buttons/NewField/Hint": {
"title": "$:/plugins/flibbles/relink/language/Buttons/NewField/Hint",
"text": "Specify a new field to be updated whenever a tiddler is renamed"
},
"$:/plugins/flibbles/relink/language/Buttons/NewField/Caption": {
"title": "$:/plugins/flibbles/relink/language/Buttons/NewField/Caption",
"text": "add"
},
"$:/plugins/flibbles/relink/language/Buttons/NewOperator/Hint": {
"title": "$:/plugins/flibbles/relink/language/Buttons/NewOperator/Hint",
"text": "Specify a new filter operator to be considered whenever a tiddler is renamed"
},
"$:/plugins/flibbles/relink/language/Buttons/NewOperator/Caption": {
"title": "$:/plugins/flibbles/relink/language/Buttons/NewOperator/Caption",
"text": "add"
},
"$:/plugins/flibbles/relink/language/Buttons/NewParameter/Hint": {
"title": "$:/plugins/flibbles/relink/language/Buttons/NewParameter/Hint",
"text": "Specify a new macro parameter to be updated whenever a tiddler is renamed"
},
"$:/plugins/flibbles/relink/language/Buttons/NewParameter/Caption": {
"title": "$:/plugins/flibbles/relink/language/Buttons/NewParameter/Caption",
"text": "add"
},
"$:/plugins/flibbles/relink/language/Error/InvalidAttributeName": {
"title": "$:/plugins/flibbles/relink/language/Error/InvalidAttributeName",
"text": "Illegal characters in attribute name \"<$text text=<<attributeName>>/>\". Attributes cannot contain slashes ('/'), closing angle or square brackets ('>' or ']'), quotes or apostrophes ('\"' or \"'\"), equals ('='), or whitespace"
},
"$:/plugins/flibbles/relink/language/Error/InvalidElementName": {
"title": "$:/plugins/flibbles/relink/language/Error/InvalidElementName",
"text": "Illegal characters in element/widget name \"<$text text=<<elementName>>/>\". Element tags can only contain letters and the characters hyphen (`-`) and dollar sign (`$`)"
},
"$:/plugins/flibbles/relink/language/Error/InvalidMacroName": {
"title": "$:/plugins/flibbles/relink/language/Error/InvalidMacroName",
"text": "Illegal characters in macro name \"<$text text=<<macroName>>/>\". Macros cannot contain whitespace"
},
"$:/plugins/flibbles/relink/language/Error/InvalidParameterName": {
"title": "$:/plugins/flibbles/relink/language/Error/InvalidParameterName",
"text": "Illegal characters in parameter name \"<$text text=<<parameterName>>/>\". Parameters can only contain letters, digits, and the characters underscore (`_`) and hyphen (`-`)"
},
"$:/plugins/flibbles/relink/language/Error/RelinkFilterOperator": {
"title": "$:/plugins/flibbles/relink/language/Error/RelinkFilterOperator",
"text": "Filter Error: Unknown suffix for the 'relink' filter operator"
},
"$:/plugins/flibbles/relink/language/Error/ReportFailedRelinks": {
"title": "$:/plugins/flibbles/relink/language/Error/ReportFailedRelinks",
"text": "Relink could not update '<<from>>' to '<<to>>' inside the following tiddlers:"
},
"$:/plugins/flibbles/relink/language/Error/UnrecognizedType": {
"title": "$:/plugins/flibbles/relink/language/Error/UnrecognizedType",
"text": "Relink parse error: Unrecognized field type '<<type>>'"
},
"$:/plugins/flibbles/relink/language/Help/Attributes": {
"title": "$:/plugins/flibbles/relink/language/Help/Attributes",
"text": "See the <a href={{{[{$:/plugins/flibbles/relink!!demo}addsuffix[#Attributes]]}}}>Attributes documentation page</a> for details."
},
"$:/plugins/flibbles/relink/language/Help/Fields": {
"title": "$:/plugins/flibbles/relink/language/Help/Fields",
"text": "See the <a href={{{[{$:/plugins/flibbles/relink!!demo}addsuffix[#Fields]]}}}>Fields documentation page</a> for details."
},
"$:/plugins/flibbles/relink/language/Help/Macros": {
"title": "$:/plugins/flibbles/relink/language/Help/Macros",
"text": "See the <a href={{{[{$:/plugins/flibbles/relink!!demo}addsuffix[#Macros]]}}}>Macros documentation page</a> for details."
},
"$:/plugins/flibbles/relink/language/Help/Operators": {
"title": "$:/plugins/flibbles/relink/language/Help/Operators",
"text": "See the <a href={{{[{$:/plugins/flibbles/relink!!demo}addsuffix[#Operators]]}}}>Operators documentation page</a> for details."
},
"$:/plugins/flibbles/relink/language/TiddlerInfo/References/Empty": {
"title": "$:/plugins/flibbles/relink/language/TiddlerInfo/References/Empty",
"text": "No tiddlers contain any fields, links, macros, transclusions, or widgets referencing this one"
},
"$:/plugins/flibbles/relink/language/TiddlerInfo/References/Description": {
"title": "$:/plugins/flibbles/relink/language/TiddlerInfo/References/Description",
"text": "The following tiddlers contain fields, links, macros, transclusions, or widgets referencing this one:"
},
"$:/plugins/flibbles/relink/language/TiddlerInfo/References/Caption": {
"title": "$:/plugins/flibbles/relink/language/TiddlerInfo/References/Caption",
"text": "//Relink// References"
},
"$:/plugins/flibbles/relink/language/ui/Attributes/Caption": {
"title": "$:/plugins/flibbles/relink/language/ui/Attributes/Caption",
"text": "Attributes"
},
"$:/plugins/flibbles/relink/language/ui/Fields/Caption": {
"title": "$:/plugins/flibbles/relink/language/ui/Fields/Caption",
"text": "Fields"
},
"$:/plugins/flibbles/relink/language/ui/Macros/Caption": {
"title": "$:/plugins/flibbles/relink/language/ui/Macros/Caption",
"text": "Macros"
},
"$:/plugins/flibbles/relink/language/ui/Operators/Caption": {
"title": "$:/plugins/flibbles/relink/language/ui/Operators/Caption",
"text": "Operators"
},
"$:/config/flibbles/relink/macros/csvtiddlers/filter": {
"title": "$:/config/flibbles/relink/macros/csvtiddlers/filter",
"text": "filter"
},
"$:/config/flibbles/relink/macros/datauri/title": {
"title": "$:/config/flibbles/relink/macros/datauri/title",
"text": "title"
},
"$:/config/flibbles/relink/macros/jsontiddler/title": {
"title": "$:/config/flibbles/relink/macros/jsontiddler/title",
"text": "title"
},
"$:/config/flibbles/relink/macros/jsontiddlers/filter": {
"title": "$:/config/flibbles/relink/macros/jsontiddlers/filter",
"text": "filter"
},
"$:/config/flibbles/relink/macros/list-links/filter": {
"title": "$:/config/flibbles/relink/macros/list-links/filter",
"text": "filter"
},
"$:/config/flibbles/relink/macros/list-links-draggable/tiddler": {
"title": "$:/config/flibbles/relink/macros/list-links-draggable/tiddler",
"text": "title"
},
"$:/config/flibbles/relink/macros/list-links-draggable/itemTemplate": {
"title": "$:/config/flibbles/relink/macros/list-links-draggable/itemTemplate",
"text": "title"
},
"$:/config/flibbles/relink/macros/list-tagged-draggable/tag": {
"title": "$:/config/flibbles/relink/macros/list-tagged-draggable/tag",
"text": "title"
},
"$:/config/flibbles/relink/macros/list-tagged-draggable/itemTemplate": {
"title": "$:/config/flibbles/relink/macros/list-tagged-draggable/itemTemplate",
"text": "title"
},
"$:/config/flibbles/relink/macros/tabs/buttonTemplate": {
"title": "$:/config/flibbles/relink/macros/tabs/buttonTemplate",
"text": "title"
},
"$:/config/flibbles/relink/macros/tabs/default": {
"title": "$:/config/flibbles/relink/macros/tabs/default",
"text": "title"
},
"$:/config/flibbles/relink/macros/tabs/tabsList": {
"title": "$:/config/flibbles/relink/macros/tabs/tabsList",
"text": "filter"
},
"$:/config/flibbles/relink/macros/tabs/template": {
"title": "$:/config/flibbles/relink/macros/tabs/template",
"text": "title"
},
"$:/config/flibbles/relink/macros/tag/tag": {
"title": "$:/config/flibbles/relink/macros/tag/tag",
"text": "title"
},
"$:/config/flibbles/relink/macros/tag-pill/tag": {
"title": "$:/config/flibbles/relink/macros/tag-pill/tag",
"text": "title"
},
"$:/config/flibbles/relink/macros/timeline/subfilter": {
"title": "$:/config/flibbles/relink/macros/timeline/subfilter",
"text": "filter"
},
"$:/config/flibbles/relink/macros/toc/tag": {
"title": "$:/config/flibbles/relink/macros/toc/tag",
"text": "title"
},
"$:/config/flibbles/relink/macros/toc/itemClassFilter": {
"title": "$:/config/flibbles/relink/macros/toc/itemClassFilter",
"text": "filter"
},
"$:/config/flibbles/relink/macros/toc-expandable/tag": {
"title": "$:/config/flibbles/relink/macros/toc-expandable/tag",
"text": "title"
},
"$:/config/flibbles/relink/macros/toc-expandable/itemClassFilter": {
"title": "$:/config/flibbles/relink/macros/toc-expandable/itemClassFilter",
"text": "filter"
},
"$:/config/flibbles/relink/macros/toc-expandable/exclude": {
"title": "$:/config/flibbles/relink/macros/toc-expandable/exclude",
"text": "list"
},
"$:/config/flibbles/relink/macros/toc-selective-expandable/tag": {
"title": "$:/config/flibbles/relink/macros/toc-selective-expandable/tag",
"text": "title"
},
"$:/config/flibbles/relink/macros/toc-selective-expandable/itemClassFilter": {
"title": "$:/config/flibbles/relink/macros/toc-selective-expandable/itemClassFilter",
"text": "filter"
},
"$:/config/flibbles/relink/macros/toc-selective-expandable/exclude": {
"title": "$:/config/flibbles/relink/macros/toc-selective-expandable/exclude",
"text": "list"
},
"$:/config/flibbles/relink/macros/toc-tabbed-external-nav/tag": {
"title": "$:/config/flibbles/relink/macros/toc-tabbed-external-nav/tag",
"text": "title"
},
"$:/config/flibbles/relink/macros/toc-tabbed-external-nav/selectedTiddler": {
"title": "$:/config/flibbles/relink/macros/toc-tabbed-external-nav/selectedTiddler",
"text": "title"
},
"$:/config/flibbles/relink/macros/toc-tabbed-external-nav/unselectedText": {
"title": "$:/config/flibbles/relink/macros/toc-tabbed-external-nav/unselectedText",
"text": "wikitext"
},
"$:/config/flibbles/relink/macros/toc-tabbed-external-nav/missingText": {
"title": "$:/config/flibbles/relink/macros/toc-tabbed-external-nav/missingText",
"text": "wikitext"
},
"$:/config/flibbles/relink/macros/toc-tabbed-external-nav/template": {
"title": "$:/config/flibbles/relink/macros/toc-tabbed-external-nav/template",
"text": "title"
},
"$:/config/flibbles/relink/macros/toc-tabbed-internal-nav/tag": {
"title": "$:/config/flibbles/relink/macros/toc-tabbed-internal-nav/tag",
"text": "title"
},
"$:/config/flibbles/relink/macros/toc-tabbed-internal-nav/selectedTiddler": {
"title": "$:/config/flibbles/relink/macros/toc-tabbed-internal-nav/selectedTiddler",
"text": "title"
},
"$:/config/flibbles/relink/macros/toc-tabbed-internal-nav/unselectedText": {
"title": "$:/config/flibbles/relink/macros/toc-tabbed-internal-nav/unselectedText",
"text": "wikitext"
},
"$:/config/flibbles/relink/macros/toc-tabbed-internal-nav/missingText": {
"title": "$:/config/flibbles/relink/macros/toc-tabbed-internal-nav/missingText",
"text": "wikitext"
},
"$:/config/flibbles/relink/macros/toc-tabbed-internal-nav/template": {
"title": "$:/config/flibbles/relink/macros/toc-tabbed-internal-nav/template",
"text": "title"
},
"$:/config/flibbles/relink/operators/list": {
"title": "$:/config/flibbles/relink/operators/list",
"text": "reference"
},
"$:/config/flibbles/relink/operators/tag": {
"title": "$:/config/flibbles/relink/operators/tag",
"text": "title"
},
"$:/config/flibbles/relink/operators/title": {
"title": "$:/config/flibbles/relink/operators/title",
"text": "title"
},
"$:/config/flibbles/relink/operators/field:title": {
"title": "$:/config/flibbles/relink/operators/field:title",
"text": "title"
},
"$:/language/EditTemplate/Title/Impossibles/Prompt": {
"title": "$:/language/EditTemplate/Title/Impossibles/Prompt",
"text": "''Warning:'' Not all references in the following tiddlers can be updated by //Relink// due to the complexity of the new title:"
},
"$:/language/EditTemplate/Title/References/Prompt": {
"title": "$:/language/EditTemplate/Title/References/Prompt",
"text": "The following tiddlers will be updated if relinking:"
},
"$:/language/EditTemplate/Title/Relink/Prompt": {
"title": "$:/language/EditTemplate/Title/Relink/Prompt",
"text": "Use //Relink// to update ''<$text text=<<fromTitle>>/>'' to ''<$text text=<<toTitle>>/>'' across all other tiddlers"
},
"$:/core/ui/EditTemplate/title": {
"title": "$:/core/ui/EditTemplate/title",
"tags": "$:/tags/EditTemplate",
"text": "<$edit-text field=\"draft.title\" class=\"tc-titlebar tc-edit-texteditor\" focus=\"true\" tabindex={{$:/config/EditTabIndex}}/>\n\n<$reveal state=\"!!draft.title\" type=\"nomatch\" text={{!!draft.of}} tag=\"div\">\n\n<$list filter=\"[{!!draft.title}!is[missing]]\" variable=\"listItem\">\n\n<div class=\"tc-message-box\">\n\n{{$:/core/images/warning}} {{$:/language/EditTemplate/Title/Exists/Prompt}}\n\n</div>\n\n</$list>\n\n<$list filter=\"[{!!draft.of}!is[missing]]\" variable=\"listItem\">\n\n<$vars fromTitle={{!!draft.of}} toTitle={{!!draft.title}}>\n\n<$checkbox tiddler=\"$:/config/RelinkOnRename\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"> {{$:/language/EditTemplate/Title/Relink/Prompt}}</$checkbox>\n\n<$list filter=\"[all[relinkable]relink:references<fromTitle>limit[1]]\" variable=\"listItem\">\n\n<$vars stateTiddler=<<qualify \"$:/state/edit/references\">> >\n\n<$tiddler tiddler=<<fromTitle>> >\n\n<$set\n\tname=\"prompt\"\n\tfilter=\"[all[relinkable]relink:impossible<toTitle>]\"\n\tvalue=\"EditTemplate/Title/Impossibles/Prompt\"\n\temptyValue=\"EditTemplate/Title/References/Prompt\" >\n<$reveal type=\"nomatch\" state=<<stateTiddler>> text=\"show\">\n<$button set=<<stateTiddler>> setTo=\"show\" class=\"tc-btn-invisible\">{{$:/core/images/right-arrow}}\n<$macrocall $name=lingo title=<<prompt>> />\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<stateTiddler>> text=\"show\">\n<$button set=<<stateTiddler>> setTo=\"hide\" class=\"tc-btn-invisible\">{{$:/core/images/down-arrow}}\n<$macrocall $name=lingo title=<<prompt>> />\n</$button>\n</$reveal>\n</$set>\n\n<$reveal type=\"match\" state=<<stateTiddler>> text=\"show\">\n<$list variable=\"listItem\" filter=\"[all[relinkable]!title[$:/StoryList]relink:references<fromTitle>sort[title]]\" template=\"$:/plugins/flibbles/relink/ui/ListItemTemplate\">\n</$list>\n</$reveal>\n</$tiddler>\n\n</$vars>\n\n</$list>\n\n</$vars>\n\n</$list>\n\n</$reveal>\n"
},
"$:/config/flibbles/relink/PluginLibrary": {
"title": "$:/config/flibbles/relink/PluginLibrary",
"caption": "{{$:/plugins/flibbles/relink/language/PluginLibrary}}",
"url": "https://flibbles.github.io/tw5-relink/library/index.html",
"tags": "$:/tags/PluginLibrary",
"text": "{{$:/plugins/flibbles/relink/language/PluginLibrary/Hint}}\n"
},
"$:/plugins/flibbles/relink/readme": {
"title": "$:/plugins/flibbles/relink/readme",
"type": "text/vnd.tiddlywiki",
"text": "When renaming a tiddler, Relink can update the fields, filters, and widgets\nof all other tiddlers. However, it works through whitelisting.\n\nIt's already configured to update tiddler titles for all core widgets, filters,\nand fields, but the whitelists can be customized for each of this in the\nconfiguration panel.\n\nSee <a href={{$:/plugins/flibbles/relink!!source}}>the tw5-relink website</a> for more details and examples.\n"
},
"$:/config/flibbles/relink/settings/default-type": {
"title": "$:/config/flibbles/relink/settings/default-type",
"text": "title"
},
"$:/plugins/flibbles/relink/ui/ListItemTemplate": {
"title": "$:/plugins/flibbles/relink/ui/ListItemTemplate",
"text": "<$set\n\tname=\"classes\"\n\tfilter=\"[<listItem>relink:impossible<toTitle>]\"\n\tvalue=\"tc-menu-list-item tc-relink-impossible\"\n\temptyValue=\"tc-menu-list-item\">\n<div class=<<classes>>>\n<$link to=<<listItem>>><$text text=<<listItem>> /></$link>\n</div>\n</$set>\n"
},
"$:/plugins/flibbles/relink/ui/TiddlerInfo/References": {
"title": "$:/plugins/flibbles/relink/ui/TiddlerInfo/References",
"caption": "{{$:/plugins/flibbles/relink/language/TiddlerInfo/References/Caption}}",
"tags": "$:/tags/TiddlerInfo",
"text": "\\define lingo-base() $:/plugins/flibbles/relink/language/TiddlerInfo/\n\\define filter() [relink:references<currentTiddler>!title[$:/StoryList]!prefix[$:/temp/]sort[title]]\n<$list filter=\"[subfilter<filter>first[]]\">\n\n<<lingo References/Description>>\n</$list>\n\n<table class=\"tc-relink-references-table\">\n<tbody>\n<$list filter=<<filter>> emptyMessage=<<lingo References/Empty>> variable=\"listItem\" template=\"$:/plugins/flibbles/relink/ui/TiddlerInfo/ReferencesTemplate\" />\n</tbody>\n</table>\n"
},
"$:/plugins/flibbles/relink/ui/TiddlerInfo/ReferencesTemplate": {
"title": "$:/plugins/flibbles/relink/ui/TiddlerInfo/ReferencesTemplate",
"text": "<tr class=\"tc-relink-references\">\n<td class=\"tc-relink-references-title\">\n<$link to=<<listItem>>/>\n</td>\n<td class=\"tc-relink-references-report\">\n<$list filter=\"[<listItem>relink:report<currentTiddler>]\">\n\n<$text text=<<currentTiddler>> />\n</$list>\n\n</td>\n</tr>\n"
},
"$:/plugins/flibbles/relink/ui/components/button-delete": {
"title": "$:/plugins/flibbles/relink/ui/components/button-delete",
"text": "\\define lingo-base() $:/plugins/flibbles/relink/language/Buttons/\n\\define prefix() $:/config/flibbles/relink/\n\n<$list filter=\"[all[current]prefix<prefix>]\" >\n<$button class=\"tc-btn-invisible\" tooltip={{$:/plugins/flibbles/relink/language/Buttons/Delete/Hint}}><$list filter=\"[all[current]is[tiddler]]\">\n<$action-deletetiddler $tiddler=<<currentTiddler>> />\n</$list><$list filter=\"[all[current]is[shadow]]\">\n<$action-setfield $tiddler=<<tiddlerName>> text=\"\" />\n</$list>\n{{$:/core/images/delete-button}}\n</$button>\n</$list><$list filter=\"[all[current]!prefix<prefix>]\">\n<$link><$button class=\"tc-btn-invisible\" tooltip={{$:/plugins/flibbles/relink/language/Buttons/LinkToInline/Hint}}>{{$:/core/images/link}}</$button></$link>\n</$list>\n"
},
"$:/plugins/flibbles/relink/ui/components/select-fieldtype": {
"title": "$:/plugins/flibbles/relink/ui/components/select-fieldtype",
"text": "\\define prefix() $:/config/flibbles/relink/\n\n<$vars type={{{ [<signature>relink:type[]] }}} >\n<$list filter=\"[all[current]prefix<prefix>]\" >\n<$select tiddler=<<currentTiddler>> >\n<$list variable=\"option\" filter=\"[relink:types[]]\">\n<option><$text text=<<option>> /></option>\n</$list>\n</$select>\n</$list><$list filter=\"[all[current]!prefix<prefix>]\">\n<$text text=<<type>> />\n</$list>\n</$vars>\n"
},
"$:/plugins/flibbles/relink/ui/components/tables": {
"title": "$:/plugins/flibbles/relink/ui/components/tables",
"text": "\\define .make-table(title, plugin, default-table-state:yes)\n\n<$list variable=\"render\" filter=\"[relink:signatures<__plugin__>prefix<__category__>first[]]\">\n<$set name=\"table-state\" value=<<qualify \"\"\"$:/state/flibbles/relink/tables/$title$\"\"\">>>\n<tr><th class=\"tc-relink-header-plugin\" colspan=<<column-count>> >\n<$reveal type=\"nomatch\" state=<<table-state>> text=\"yes\" default=\"\"\"$default-table-state$\"\"\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<table-state>> setTo=\"yes\">\n{{$:/core/images/right-arrow}} ''$title$''\n</$button>\n</$reveal>\n<$reveal type=\"match\" state=<<table-state>> text=\"yes\" default=\"\"\"$default-table-state$\"\"\">\n<$button class=\"tc-btn-invisible tc-btn-dropdown\" set=<<table-state>> setTo=\"no\">\n{{$:/core/images/down-arrow}} ''$title$''\n</$button>\n</$reveal>\n</th></tr>\n<$list\n\tvariable=\"signature\"\n\tfilter=\"[relink:signatures<__plugin__>prefix<__category__>sort[]]\">\n<$vars key={{{ [<signature>removeprefix<__category__>removeprefix[/]] }}} >\n<$tiddler tiddler={{{[<signature>relink:source[]]}}} >\n<$reveal tag=\"tr\" type=\"match\" state=<<table-state>> text=\"yes\" default=\"\"\"$default-table-state$\"\"\">\n<$macrocall $name=<<__list-row-macro__>> signature=<<signature>> />\n<td class=\"tc-relink-column-type\">{{||$:/plugins/flibbles/relink/ui/components/select-fieldtype}}</td>\n<td class=\"tc-relink-column-delete\">{{||$:/plugins/flibbles/relink/ui/components/button-delete}}</td>\n</$reveal>\n</$tiddler>\n</$vars>\n</$list>\n</$set>\n</$list>\n\\end\n\n\\define tables(category, list-row-macro, header-list)\n<$vars\n\tcolumn-count={{{[enlist<__header-list__>] [[DeleteColumn]] +[count[]]}}}>\n\n<table class=\"tc-relink-whitelist\"><tbody>\n<tr>\n<$list variable=\"header\" filter=\"[enlist<__header-list__>butlast[]]\"><th><<header>></th></$list>\n<!-- We have the last column extend into the delete/link column, which is unlabeled. -->\n<th colspan=2><$text text={{{ [enlist<__header-list__>last[]] }}} /></th>\n</tr>\n\n<<.make-table Custom \"\" yes>>\n\n<$list\n\tfilter=\"[plugin-type[plugin]![$:/core]![$:/plugins/flibbles/relink]]\">\n<$set name=\"subtitle\" value={{!!description}} emptyValue={{!!title}} >\n<$macrocall $name=\".make-table\" title=<<subtitle>> plugin=<<currentTiddler>> />\n</$set>\n</$list>\n\n<<.make-table Core \"$:/plugins/flibbles/relink\">>\n\n</tbody></table>\n</$vars>\n\\end\n"
},
"$:/plugins/flibbles/relink/ui/configuration/Attributes": {
"title": "$:/plugins/flibbles/relink/ui/configuration/Attributes",
"caption": "{{$:/plugins/flibbles/relink/language/ui/Attributes/Caption}}",
"tags": "$:/tags/flibbles/relink/Configuration",
"text": "\\import $:/plugins/flibbles/relink/ui/components/tables\n\\define prefix-attr() $:/config/flibbles/relink/attributes/\n\\define lingo-base() $:/plugins/flibbles/relink/language/Buttons/\n\\define element-name-tiddler() $:/state/flibbles/relink/element-name\n\\define attribute-name-tiddler() $:/state/flibbles/relink/attribute-name\n\n\\define row()\n<$set name=\"element\"\n filter=\"[<key>splitbefore[/]removesuffix[/]]\">\n<$set name=\"attribute\"\n filter=\"[<key>removeprefix<element>removeprefix[/]]\">\n<td><$text text=<<element>> /></td>\n<td><$text text=<<attribute>> /></td>\n</$set></$set>\n\\end\n\\define body()\n\n{{$:/plugins/flibbles/relink/language/Help/Attributes}}\n\n<em class=\"tc-edit\">Add a new attribute:</em>\n<$edit-text\n\ttiddler=<<element-name-tiddler>>\n\ttag=\"input\"\n\tdefault=\"\"\n\tplaceholder=\"widget/element\" />\n<$edit-text\n\ttiddler=<<attribute-name-tiddler>>\n\ttag=\"input\"\n\tdefault=\"\"\n\tplaceholder=\"attribute\" />\n<$reveal type=\"nomatch\" text=\"\" state=<<element-name-tiddler>> >\n<$reveal type=\"nomatch\" text=\"\" state=<<attribute-name-tiddler>> >\n<$relinkmangler>\n<$button\n\ttooltip={{$(lingo-base)$NewAttribute/Hint}}\n\taria-label={{$(lingo-base)$NewAttribute/Caption}}>\n<$action-sendmessage\n\t$message=\"relink-add-attribute\"\n\telement={{$(element-name-tiddler)$}}\n\tattribute={{$(attribute-name-tiddler)$}} />\n<$action-deletetiddler $tiddler=<<attribute-name-tiddler>> />\n<$action-deletetiddler $tiddler=<<element-name-tiddler>> />\n<$text text={{$(lingo-base)$NewAttribute/Caption}}/>\n</$button>\n</$relinkmangler>\n</$reveal>\n<$reveal type=\"match\" text=\"\" state=<<attribute-name-tiddler>> >\n<$button>\n<$text text={{$(lingo-base)$NewAttribute/Caption}}/>\n</$button>\n</$reveal>\n</$reveal>\n<$reveal type=\"match\" text=\"\" state=<<element-name-tiddler>> >\n<$button>\n<$text text={{$(lingo-base)$NewAttribute/Caption}}/>\n</$button>\n</$reveal>\n\n<$macrocall\n\t$name=tables\n\tcategory=\"attributes\"\n\theader-list=\"[[Widget/HTML Element]] Attribute Type\"\n\tlist-row-macro=\"row\" />\n\\end\n\n<<body>>\n"
},
"$:/plugins/flibbles/relink/ui/configuration/Fields": {
"title": "$:/plugins/flibbles/relink/ui/configuration/Fields",
"caption": "{{$:/plugins/flibbles/relink/language/ui/Fields/Caption}}",
"tags": "$:/tags/flibbles/relink/Configuration",
"text": "\\import $:/plugins/flibbles/relink/ui/components/tables\n\\define lingo-base() $:/plugins/flibbles/relink/language/Buttons/\n\\define field-name-tiddler() $:/state/flibbles/relink/field-name\n\n\\define row()\n<td><$text text=<<key>> /></td>\n\\end\n\\define body()\n\n{{$:/plugins/flibbles/relink/language/Help/Fields}}\n\n<em class=\"tc-edit\">Add a new field:</em>\n<$edit-text\n\ttiddler=<<field-name-tiddler>>\n\ttag=\"input\"\n\tdefault=\"\"\n\tplaceholder=\"field name\" />\n<$reveal type=\"nomatch\" text=\"\" state=<<field-name-tiddler>> >\n<$relinkmangler>\n<$button\n\ttooltip={{$(lingo-base)$NewField/Hint}}\n\taria-label={{$(lingo-base)$NewField/Caption}}>\n<$action-sendmessage\n\t$message=\"relink-add-field\"\n\tfield={{$(field-name-tiddler)$}} />\n<$action-deletetiddler $tiddler=<<field-name-tiddler>> />\n<$text text={{$(lingo-base)$NewField/Caption}}/>\n</$button>\n</$relinkmangler>\n</$reveal>\n<$reveal type=\"match\" text=\"\" state=<<field-name-tiddler>> >\n<$button>\n<$text text={{$(lingo-base)$NewField/Caption}}/>\n</$button>\n</$reveal>\n\n\n<$macrocall\n\t$name=tables\n\tcategory=\"fields\"\n\theader-list=\"[[Field Name]] [[Field Type]]\"\n\tlist-row-macro=\"row\" />\n\\end\n\n<<body>>\n"
},
"$:/plugins/flibbles/relink/ui/configuration/Macros": {
"title": "$:/plugins/flibbles/relink/ui/configuration/Macros",
"caption": "{{$:/plugins/flibbles/relink/language/ui/Macros/Caption}}",
"tags": "$:/tags/flibbles/relink/Configuration",
"text": "\\import $:/plugins/flibbles/relink/ui/components/tables\n\\define prefix-macro() $:/config/flibbles/relink/macros/\n\\define lingo-base() $:/plugins/flibbles/relink/language/Buttons/\n\\define macro-name-tiddler() $:/state/flibbles/relink/macro-name\n\\define parameter-name-tiddler() $:/state/flibbles/relink/parameter-name\n\n\\define row()\n<$set name=\"parameter\"\n filter=\"[<key>relink:splitafter[/]]\">\n<$set name=\"macro\"\n filter=\"[<key>removesuffix<parameter>removesuffix[/]]\">\n<td><$text text=<<macro>> /></td>\n<td><$text text=<<parameter>> /></td>\n</$set></$set>\n\\end\n\\define body()\n\n{{$:/plugins/flibbles/relink/language/Help/Macros}}\n\n<em class=\"tc-edit\">Add a new macro parameter:</em>\n<$edit-text\n\ttiddler=<<macro-name-tiddler>>\n\ttag=\"input\"\n\tdefault=\"\"\n\tplaceholder=\"macro\" />\n<$edit-text\n\ttiddler=<<parameter-name-tiddler>>\n\ttag=\"input\"\n\tdefault=\"\"\n\tplaceholder=\"parameter\" />\n<$reveal type=\"nomatch\" text=\"\" state=<<macro-name-tiddler>> >\n<$reveal type=\"nomatch\" text=\"\" state=<<parameter-name-tiddler>> >\n<$relinkmangler>\n<$button\n\ttooltip={{$(lingo-base)$NewParameter/Hint}}\n\taria-label={{$(lingo-base)$NewParameter/Caption}}>\n<$action-sendmessage\n\t$message=\"relink-add-parameter\"\n\tmacro={{$(macro-name-tiddler)$}}\n\tparameter={{$(parameter-name-tiddler)$}} />\n<$action-deletetiddler $tiddler=<<parameter-name-tiddler>> />\n<$action-deletetiddler $tiddler=<<macro-name-tiddler>> />\n<$text text={{$(lingo-base)$NewParameter/Caption}}/>\n</$button>\n</$relinkmangler>\n</$reveal>\n<$reveal type=\"match\" text=\"\" state=<<parameter-name-tiddler>> >\n<$button>\n<$text text={{$(lingo-base)$NewParameter/Caption}}/>\n</$button>\n</$reveal>\n</$reveal>\n<$reveal type=\"match\" text=\"\" state=<<macro-name-tiddler>> >\n<$button>\n<$text text={{$(lingo-base)$NewParameter/Caption}}/>\n</$button>\n</$reveal>\n\n\n<$macrocall\n\t$name=tables\n\tcategory=\"macros\"\n\theader-list=\"Macro Parameter Type\"\n\tlist-row-macro=\"row\" />\n\\end\n\n<<body>>\n"
},
"$:/plugins/flibbles/relink/ui/configuration/Operators": {
"title": "$:/plugins/flibbles/relink/ui/configuration/Operators",
"caption": "{{$:/plugins/flibbles/relink/language/ui/Operators/Caption}}",
"tags": "$:/tags/flibbles/relink/Configuration",
"text": "\\import $:/plugins/flibbles/relink/ui/components/tables\n\\define lingo-base() $:/plugins/flibbles/relink/language/Buttons/\n\\define operator-name-tiddler() $:/state/flibbles/relink/operator-name\n\n\\define row()\n<td><$text text=<<key>> /></td>\n\\end\n\\define body()\n\n{{$:/plugins/flibbles/relink/language/Help/Operators}}\n\n<em class=\"tc-edit\">Add a new filter operator:</em>\n<$edit-text\n\ttiddler=<<operator-name-tiddler>>\n\ttag=\"input\"\n\tdefault=\"\"\n\tplaceholder=\"operator name\" />\n<$reveal type=\"nomatch\" text=\"\" state=<<operator-name-tiddler>>>\n<$relinkmangler>\n<$button\n\ttooltip={{$(lingo-base)$NewOperator/Hint}}\n\taria-label={{$(lingo-base)$NewOperator/Caption}}>\n<$action-sendmessage\n\t$message=\"relink-add-operator\"\n\toperator={{$(operator-name-tiddler)$}} />\n<$action-deletetiddler $tiddler=<<operator-name-tiddler>> />\n<$text text={{$(lingo-base)$NewOperator/Caption}}/>\n</$button>\n</$relinkmangler>\n</$reveal>\n<$reveal type=\"match\" text=\"\" state=<<operator-name-tiddler>>>\n<$button>\n<$text text={{$(lingo-base)$NewOperator/Caption}}/>\n</$button>\n</$reveal>\n\n<$macrocall\n\t$name=tables\n\tcategory=\"operators\"\n\theader-list=\"[[Filter Operator]] [[Operand Type]]\"\n\tlist-row-macro=\"row\" />\n\\end\n\n<<body>>\n"
},
"$:/plugins/flibbles/relink/ui/stylesheet.css": {
"title": "$:/plugins/flibbles/relink/ui/stylesheet.css",
"text": ".tc-relink-references {\n}\n\n.tc-relink-references-table {\n\twidth: 100%;\n\tborder: none;\n}\n\n.tc-relink-references-table td {\n\tborder-left: none;\n}\n\n.tc-relink-references-table tr:first-child td {\n\tborder-top: none;\n}\n\n.tc-relink-references-title {\n\ttext-align: left;\n\tvertical-align: top;\n}\n\n.tc-relink-references-occurrence {\n\tfont-style: italic;\n\ttext-align: left;\n\tfont-weight: 200;\n\tpadding-left: 25px;\n\tvertical-align: top;\n}\n\n.tc-relink-header-plugin {\n\ttext-align: left;\n}\n\n.tc-relink-header-plugin button {\n\twidth: 100%\n}\n\n.tc-relink-column-type {\n\twidth: 8em;\n}\n\n.tc-relink-column-type select {\n\twidth: 100%;\n}\n\n.tc-relink-column-delete {\n\tborder-left: none;\n\ttext-align: left;\n}\n\n.tc-relink-column-delete button {\n\tpadding-left: 1em;\n}\n\n.tc-relink-impossible a.tc-tiddlylink {\n\tcolor: red;\n}\n",
"tags": "$:/tags/Stylesheet",
"type": "text/css"
}
}
}
{
"tiddlers": {
"$:/images/fa5/solid/user-cog": {
"title": "$:/images/fa5/solid/user-cog",
"caption": "user-cog (Solid)",
"modified": "20200606040451692",
"tags": "$:/tags/Image [[Font Awesome 5]] Solid $:/ipfs/documentation $:/isAttachment $:/isEmbedded",
"source": "http://fa5-free-svg.tiddlyspot.com/",
"original": "https://fontawesome.com/",
"license": "https://creativecommons.org/licenses/by/4.0",
"text": "\n<svg class=\"tc-image-user-cog tc-image-button\" width=\"22pt\" height=\"22pt\" viewBox=\"0 0 640 512\">\n <path d=\"M610.5 373.3c2.6-14.1 2.6-28.5 0-42.6l25.8-14.9c3-1.7 4.3-5.2 3.3-8.5-6.7-21.6-18.2-41.2-33.2-57.4-2.3-2.5-6-3.1-9-1.4l-25.8 14.9c-10.9-9.3-23.4-16.5-36.9-21.3v-29.8c0-3.4-2.4-6.4-5.7-7.1-22.3-5-45-4.8-66.2 0-3.3.7-5.7 3.7-5.7 7.1v29.8c-13.5 4.8-26 12-36.9 21.3l-25.8-14.9c-2.9-1.7-6.7-1.1-9 1.4-15 16.2-26.5 35.8-33.2 57.4-1 3.3.4 6.8 3.3 8.5l25.8 14.9c-2.6 14.1-2.6 28.5 0 42.6l-25.8 14.9c-3 1.7-4.3 5.2-3.3 8.5 6.7 21.6 18.2 41.1 33.2 57.4 2.3 2.5 6 3.1 9 1.4l25.8-14.9c10.9 9.3 23.4 16.5 36.9 21.3v29.8c0 3.4 2.4 6.4 5.7 7.1 22.3 5 45 4.8 66.2 0 3.3-.7 5.7-3.7 5.7-7.1v-29.8c13.5-4.8 26-12 36.9-21.3l25.8 14.9c2.9 1.7 6.7 1.1 9-1.4 15-16.2 26.5-35.8 33.2-57.4 1-3.3-.4-6.8-3.3-8.5l-25.8-14.9zM496 400.5c-26.8 0-48.5-21.8-48.5-48.5s21.8-48.5 48.5-48.5 48.5 21.8 48.5 48.5-21.7 48.5-48.5 48.5zM224 256c70.7 0 128-57.3 128-128S294.7 0 224 0 96 57.3 96 128s57.3 128 128 128zm201.2 226.5c-2.3-1.2-4.6-2.6-6.8-3.9l-7.9 4.6c-6 3.4-12.8 5.3-19.6 5.3-10.9 0-21.4-4.6-28.9-12.6-18.3-19.8-32.3-43.9-40.2-69.6-5.5-17.7 1.9-36.4 17.9-45.7l7.9-4.6c-.1-2.6-.1-5.2 0-7.8l-7.9-4.6c-16-9.2-23.4-28-17.9-45.7.9-2.9 2.2-5.8 3.2-8.7-3.8-.3-7.5-1.2-11.4-1.2h-16.7c-22.2 10.2-46.9 16-72.9 16s-50.6-5.8-72.9-16h-16.7C60.2 288 0 348.2 0 422.4V464c0 26.5 21.5 48 48 48h352c10.1 0 19.5-3.2 27.2-8.5-1.2-3.8-2-7.7-2-11.8v-9.2z\"/>\n</svg>"
},
"$:/ipfs/image/bluelight": {
"title": "$:/ipfs/image/bluelight",
"_canonical_uri": "/ipfs/bafybeibi5ldguonidlwomjxwjehodpmypgex5qd2fe6f6yuka4dqvbzvpq",
"_import_uri": "/ipfs/bafybeiejplubmcgpkaqwjc23ebo6vorv2p4cwlr7kkhm4cakgtneefjuc4",
"modified": "20200526065100279",
"tags": "$:/ipfs/documentation $:/isAttachment $:/isIpfs",
"type": "image/jpg",
"text": ""
},
"$:/core/images/ens": {
"title": "$:/core/images/ens",
"modified": "20200528044634920",
"source": "https://github.com/ensdomains/ens-app/blob/dev/public/safari-pinned-tab.svg",
"license": "https://github.com/ensdomains/ens-app/blob/dev/LICENSE",
"tags": "$:/tags/Image $:/ipfs/core $:/isAttachment $:/isEmbedded",
"type": "image/svg+xml",
"text": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<svg\n xmlns:dc=\"http://purl.org/dc/elements/1.1/\"\n xmlns:cc=\"http://creativecommons.org/ns#\"\n xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"\n xmlns:svg=\"http://www.w3.org/2000/svg\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:sodipodi=\"http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd\"\n xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\"\n version=\"1.0\"\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 128 128\"\n class=\"tc-image-button\"\n preserveAspectRatio=\"xMidYMid meet\"\n id=\"svg14\"\n sodipodi:docname=\"ens-small.svg\"\n inkscape:version=\"0.92.4 (5da689c313, 2019-01-14)\"\n>\n <defs\n id=\"defs18\" />\n <sodipodi:namedview\n pagecolor=\"#ffffff\"\n bordercolor=\"#666666\"\n borderopacity=\"1\"\n objecttolerance=\"10\"\n gridtolerance=\"10\"\n guidetolerance=\"10\"\n inkscape:pageopacity=\"0\"\n inkscape:pageshadow=\"2\"\n inkscape:window-width=\"1920\"\n inkscape:window-height=\"1020\"\n id=\"namedview16\"\n showgrid=\"false\"\n inkscape:zoom=\"12.361274\"\n inkscape:cx=\"41.295086\"\n inkscape:cy=\"21.734019\"\n inkscape:window-x=\"0\"\n inkscape:window-y=\"31\"\n inkscape:window-maximized=\"1\"\n inkscape:current-layer=\"svg14\" />\n <metadata\n id=\"metadata2\">\nCreated by potrace 1.11, written by Peter Selinger 2001-2013\n<rdf:RDF>\n <cc:Work\n rdf:about=\"\">\n <dc:format>image/svg+xml</dc:format>\n <dc:type\n rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\" />\n <dc:title></dc:title>\n </cc:Work>\n</rdf:RDF>\n</metadata>\n <g\n transform=\"matrix(0.08837363,0,0,-0.07925696,-8.0787259,127.6037)\"\n id=\"g12\"\n style=\"fill:#000000;stroke:none\">\n <path\n d=\"m 640,1519 c -69,-48 -173,-122 -231,-163 -94,-65 -110,-82 -134,-129 -30,-63 -37,-155 -15,-222 15,-49 61,-135 71,-135 6,0 437,704 447,731 7,19 -17,4 -138,-82 z\"\n id=\"path4\"\n inkscape:connector-curvature=\"0\" />\n <path\n d=\"m 856,1598 c 4,-7 44,-67 89,-133 118,-175 286,-437 393,-615 93,-154 122,-224 125,-300 2,-55 17,-35 52,75 26,80 28,92 22,217 -7,185 -45,284 -149,387 -35,36 -520,381 -534,381 -3,0 -2,-6 2,-12 z\"\n id=\"path6\"\n inkscape:connector-curvature=\"0\" />\n <path\n d=\"M 141,1068 C 97,969 87,913 93,776 98,649 106,607 146,523 163,485 224,403 254,378 291,346 772,9 776,12 c 2,2 -57,95 -131,206 -132,199 -320,496 -404,639 -48,81 -70,145 -73,210 -1,23 -3,43 -4,43 -2,0 -12,-19 -23,-42 z\"\n id=\"path8\"\n inkscape:connector-curvature=\"0\" />\n <path\n d=\"M 1079,398 C 962,204 859,34 851,20 l -16,-25 30,21 c 306,211 436,304 461,331 51,53 72,165 49,254 -14,51 -63,149 -76,149 -4,0 -103,-159 -220,-352 z\"\n id=\"path10\"\n inkscape:connector-curvature=\"0\" />\n </g>\n</svg>"
},
"$:/ipfs/logo/vector/ice/text": {
"title": "$:/ipfs/logo/vector/ice/text",
"modified": "20200528040053586",
"source": "https://github.com/ipfs/logo/blob/master/vector/ipfs-logo-vector-ice-text.svg",
"license": "https://github.com/ipfs/logo/blob/master/LICENSE",
"tags": "$:/isAttachment $:/isEmbedded",
"type": "image/svg+xml",
"text": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<svg\n xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"\n style=\"enable-background:new\" xmlns=\"http://www.w3.org/2000/svg\"\n height=\"512\"\n width=\"512\"\n version=\"1.1\"\n xmlns:cc=\"http://creativecommons.org/ns#\"\n xmlns:dc=\"http://purl.org/dc/elements/1.1/\"\n viewBox=\"0 0 512 512\"\n>\n <defs>\n <linearGradient id=\"c\" y2=\"771.51\" gradientUnits=\"userSpaceOnUse\" y1=\"771.51\" x2=\"527.72\" x1=\"84.315\">\n <stop stop-color=\"#4a9ea1\" offset=\"0\"/>\n </linearGradient>\n <linearGradient id=\"d\" y2=\"771.48\" gradientUnits=\"userSpaceOnUse\" y1=\"771.48\" x2=\"512.36\" x1=\"99.675\">\n <stop stop-color=\"#63d3d7\" offset=\"0\"/>\n </linearGradient>\n </defs>\n <g>\n <g style=\"enable-background:new\" transform=\"translate(-50.017,-515.51)\">\n <path fill=\"url(#c)\" d=\"m84.315 899.51 221.7 128 221.7-128v-256l-221.7-127.99-221.7 128z\"/>\n <path fill=\"url(#d)\" d=\"m283.13 546.35-160.74 92.806c0.32126 2.8543 0.32125 5.7352 0 8.5894l160.75 92.806c13.554-10.001 32.043-10.001 45.597 0l160.75-92.807c-0.32126-2.8543-0.32293-5.7338-0.001-8.588l-160.74-92.806c-13.554 10.001-32.044 10.001-45.599 0zm221.79 127.03-160.92 93.84c1.884 16.739-7.3611 32.751-22.799 39.489l0.18062 184.58c2.6325 1.1489 5.1267 2.5886 7.438 4.294l160.75-92.805c-1.884-16.739 7.3611-32.752 22.799-39.49v-185.61c-2.6325-1.1489-5.1281-2.5886-7.4394-4.294zm-397.81 1.0315c-2.3112 1.7054-4.8054 3.1465-7.438 4.2954v185.61c15.438 6.7378 24.683 22.75 22.799 39.489l160.74 92.806c2.3112-1.7054 4.8069-3.1465 7.4394-4.2954v-185.61c-15.438-6.7378-24.683-22.75-22.799-39.489l-160.74-92.81z\"/>\n </g>\n <g style=\"enable-background:new\" transform=\"translate(0,-196.66)\">\n <path fill-opacity=\".25098\" d=\"m256 708.66 221.7-128v-256l-221.7 128v256z\"/>\n <path fill-opacity=\".039216\" d=\"m256 708.66v-256l-221.7-128v256l221.7 128z\"/>\n <path fill-opacity=\".13018\" d=\"m34.298 324.66 221.7 128 221.7-128-221.7-128-221.7 128z\"/>\n </g>\n </g>\n <g style=\"enable-background:new\" fill=\"#fff\">\n <path d=\"m103.09 186h-29.2v141.2h29.2v-141.2z\"/>\n <path d=\"m153.97 327.2v-51.8c7.2 0.6 14.4 0.6 20.4 0.6 41.6 0 53.6-20.6 53.6-46 0-30.8-22-44-56-44h-47.2v141.2h29.2zm15.8-71.8c-5.4 0-13.4 0-15.8-0.2v-48h18.2c17.6 0 27.6 8.4 27.6 23.8v0.4c0 12-4.4 24-30 24z\"/>\n <path d=\"m327.95 186h-88.6v141.2h29.2v-62.2h55.4v-21.2h-55.6v-36.4h57.6l2-21.4z\"/>\n <path d=\"m423.51 213.6 7.6-19.6c-11.4-8.2-26.8-11.2-46.2-11.2-28.2 0-51.4 13.2-51.4 40.2 0 24.2 17.8 33.8 35.6 39.6l17.8 6c12.2 4.2 22.2 8.2 22.2 21.4 0 12-10.4 16.8-26.2 16.8-16 0-33.2-4.8-43-11l-7.6 21.2c12.8 8.2 29 12.2 50.8 12.2 31 0 55-13.6 55-42.6 0-27-20.6-35.6-41.4-42.6l-19.4-6.4c-8.4-2.8-14.8-6.6-14.8-17.4 0-11 9-15.4 22.4-15.4 16.4 0 29.2 3 38.6 8.8z\"/>\n </g>\n</svg>"
},
"$:/core/images/ipfs": {
"title": "$:/core/images/ipfs",
"modified": "20200528044634920",
"source": "https://github.com/ipfs/logo/blob/master/vector/ipfs-logo-vector-black.svg",
"license": "https://github.com/ipfs/logo/blob/master/LICENSE",
"tags": "$:/tags/Image $:/ipfs/core $:/isAttachment $:/isEmbedded",
"type": "image/svg+xml",
"text": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<svg\n xmlns:dc=\"http://purl.org/dc/elements/1.1/\"\n xmlns:cc=\"http://creativecommons.org/ns#\"\n xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"\n xmlns:svg=\"http://www.w3.org/2000/svg\"\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:sodipodi=\"http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd\"\n xmlns:inkscape=\"http://www.inkscape.org/namespaces/inkscape\"\n style=\"enable-background:new\"\n height=\"22\"\n width=\"22\"\n version=\"1.1\"\n viewBox=\"0 0 128 128\"\n class=\"tc-image-button\"\n id=\"svg24\"\n sodipodi:docname=\"ipfs-small.svg\"\n inkscape:version=\"0.92.4 (5da689c313, 2019-01-14)\"\n>\n <metadata\n id=\"metadata28\">\n <rdf:RDF>\n <cc:Work\n rdf:about=\"\">\n <dc:format>image/svg+xml</dc:format>\n <dc:type\n rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\" />\n <dc:title></dc:title>\n </cc:Work>\n </rdf:RDF>\n </metadata>\n <sodipodi:namedview\n pagecolor=\"#ffffff\"\n bordercolor=\"#666666\"\n borderopacity=\"1\"\n objecttolerance=\"10\"\n gridtolerance=\"10\"\n guidetolerance=\"10\"\n inkscape:pageopacity=\"0\"\n inkscape:pageshadow=\"2\"\n inkscape:window-width=\"1920\"\n inkscape:window-height=\"1020\"\n id=\"namedview26\"\n showgrid=\"false\"\n units=\"pt\"\n inkscape:zoom=\"5.2149125\"\n inkscape:cx=\"133.61143\"\n inkscape:cy=\"41.576599\"\n inkscape:window-x=\"0\"\n inkscape:window-y=\"31\"\n inkscape:window-maximized=\"1\"\n inkscape:current-layer=\"svg24\" />\n <defs\n id=\"defs8\">\n <linearGradient\n id=\"b\"\n y2=\"771.51001\"\n gradientUnits=\"userSpaceOnUse\"\n x2=\"527.71997\"\n y1=\"771.51001\"\n x1=\"84.315002\">\n <stop\n offset=\"0\"\n id=\"stop2\" />\n </linearGradient>\n <linearGradient\n id=\"a\"\n y2=\"771.47998\"\n gradientUnits=\"userSpaceOnUse\"\n x2=\"512.35999\"\n y1=\"771.47998\"\n x1=\"99.675003\">\n <stop\n stop-color=\"#d8d8d8\"\n offset=\"0\"\n id=\"stop5\" />\n </linearGradient>\n </defs>\n <g\n transform=\"matrix(0.28867709,0,0,0.24999998,-24.339808,-128.87748)\"\n id=\"g14\">\n <path\n d=\"m 84.315,899.51 221.7,128 221.7,-128 v -256 l -221.7,-127.99 -221.7,128 z\"\n id=\"path10\"\n style=\"fill:url(#b)\"\n inkscape:connector-curvature=\"0\" />\n <path\n d=\"m 283.13,546.35 -160.74,92.806 c 0.32126,2.8543 0.32125,5.7352 0,8.5894 l 160.75,92.806 c 13.554,-10.001 32.043,-10.001 45.597,0 l 160.75,-92.807 c -0.32126,-2.8543 -0.32293,-5.7338 -0.001,-8.588 l -160.74,-92.806 c -13.554,10.001 -32.044,10.001 -45.599,0 z M 504.92,673.38 344,767.22 c 1.884,16.739 -7.3611,32.751 -22.799,39.489 l 0.18062,184.58 c 2.6325,1.1489 5.1267,2.5886 7.438,4.294 l 160.75,-92.805 c -1.884,-16.739 7.3611,-32.752 22.799,-39.49 v -185.61 c -2.6325,-1.1489 -5.1281,-2.5886 -7.4394,-4.294 z m -397.81,1.0315 c -2.3112,1.7054 -4.8054,3.1465 -7.438,4.2954 v 185.61 c 15.438,6.7378 24.683,22.75 22.799,39.489 l 160.74,92.806 c 2.3112,-1.7054 4.8069,-3.1465 7.4394,-4.2954 v -185.61 c -15.438,-6.7378 -24.683,-22.75 -22.799,-39.489 l -160.74,-92.81 z\"\n id=\"path12\"\n style=\"fill:url(#a)\"\n inkscape:connector-curvature=\"0\" />\n </g>\n <g\n transform=\"matrix(0.28867709,0,0,0.24999998,-9.9010468,-49.164992)\"\n id=\"g22\">\n <path\n d=\"m 256,708.66 221.7,-128 v -256 l -221.7,128 z\"\n id=\"path16\"\n inkscape:connector-curvature=\"0\"\n style=\"fill-opacity:0.25097997\" />\n <path\n d=\"m 256,708.66 v -256 l -221.7,-128 v 256 z\"\n id=\"path18\"\n inkscape:connector-curvature=\"0\"\n style=\"fill-opacity:0.03921599\" />\n <path\n d=\"m 34.298,324.66 221.7,128 221.7,-128 -221.7,-128 z\"\n id=\"path20\"\n inkscape:connector-curvature=\"0\"\n style=\"fill-opacity:0.13018003\" />\n </g>\n</svg>"
},
"$:/core/images/bluelight": {
"title": "$:/core/images/bluelight",
"modified": "20200528045157536",
"tags": "$:/tags/Image $:/ipfs/core $:/isAttachment $:/isEmbedded",
"type": "image/png",
"text": "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Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iCiAgICB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIgogICAgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiCiAgICB4bWxuczpwbHVzPSJodHRwOi8vbnMudXNlcGx1cy5vcmcvbGRmL3htcC8xLjAvIgogICAgeG1sbnM6R0lNUD0iaHR0cDovL3d3dy5naW1wLm9yZy94bXAvIgogICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkUyRjFBQzkzNzUzNTExRTQ4QTkwRTdFRDUwRTU1MTZBIgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmMzMGY2MGJkLTBlYTAtNDU4YS1iZjVkLTUzYzIzNTFhY2UwMCIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjllMzlkYmZlLTA5ZGEtNDYyNi04ZmUzLTRjZGVkNzIzY2M3OSIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTGludXgiCiAgIEdJTVA6VGltZVN0YW1wPSIxNTg4NDg0NDExOTg4ODc5IgogICBHSU1QOlZlcnNpb249IjIuMTAuOCIKICAgZGM6Rm9ybWF0PSJpbWFnZS9wbmciCiAgIHhtcDpDcmVhdG9yVG9vbD0iR0lNUCAyLjEwIj4KICAgPGlwdGNFeHQ6TG9jYXRpb25DcmVhdGVkPgogICAgPHJkZjpCYWcvPgogICA8L2lwdGNFeHQ6TG9jYXRpb25DcmVhdGVkPgogICA8aXB0Y0V4dDpMb2NhdGlvblNob3duPgogICAgPHJkZjpCYWcvPgogICA8L2lwdGNFeHQ6TG9jYXRpb25TaG93bj4KICAgPGlwdGNFeHQ6QXJ0d29ya09yT2JqZWN0PgogICAgPHJkZjpCYWcvPgogICA8L2lwdGNFeHQ6QXJ0d29ya09yT2JqZWN0PgogICA8aXB0Y0V4dDpSZWdpc3RyeUlkPgogICAgPHJkZjpCYWcvPgogICA8L2lwdGNFeHQ6UmVnaXN0cnlJZD4KICAgPHhtcE1NOkhpc3Rvcnk+CiAgICA8cmRmOlNlcT4KICAgICA8cmRmOmxpCiAgICAgIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiCiAgICAgIHN0RXZ0OmNoYW5nZWQ9Ii8iCiAgICAgIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6Y2U5MDE2NGYtZGMzYS00ZDg2LWFiNDMtMzQ2ODk4NDExMmI1IgogICAgICBzdEV2dDpzb2Z0d2FyZUFnZW50PSJHaW1wIDIuMTAgKExpbnV4KSIKICAgICAgc3RFdnQ6d2hlbj0iKzA1OjMwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICAgPHhtcE1NOkRlcml2ZWRGcm9tCiAgICBzdFJlZjpkb2N1bWVudElEPSI2OUJCODkzQzc1RTJBODMyMDU4MTA4OTg4OEU1MTAxRSIKICAgIHN0UmVmOmluc3RhbmNlSUQ9IjY5QkI4OTNDNzVFMkE4MzIwNTgxMDg5ODg4RTUxMDFFIi8+CiAgIDxwbHVzOkltYWdlU3VwcGxpZXI+CiAgICA8cmRmOlNlcS8+CiAgIDwvcGx1czpJbWFnZVN1cHBsaWVyPgogICA8cGx1czpJbWFnZUNyZWF0b3I+CiAgICA8cmRmOlNlcS8+CiAgIDwvcGx1czpJbWFnZUNyZWF0b3I+CiAgIDxwbHVzOkNvcHlyaWdodE93bmVyPgogICAgPHJkZjpTZXEvPgogICA8L3BsdXM6Q29weXJpZ2h0T3duZXI+CiAgIDxwbHVzOkxpY2Vuc29yPgogICAgPHJkZjpTZXEvPgogICA8L3BsdXM6TGljZW5zb3I+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg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"
},
"$:/ipfs/image/tiddlywiki": {
"title": "$:/ipfs/image/tiddlywiki",
"_canonical_uri": "/ipfs/bafkreihzzc42nwumjeaz4d6kxsbxa6vy5llnsvqtz3xjjwnjrhwkjy5loq",
"modified": "20200528080350311",
"tags": "$:/ipfs/documentation $:/isAttachment $:/isIpfs",
"type": "image/svg+xml"
},
"$:/ipfs/saver/api": {
"title": "$:/ipfs/saver/api",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "$:/ipfs/saver/api/https/ipfs.infura.io/5001"
},
"$:/ipfs/saver/ens/domain": {
"title": "$:/ipfs/saver/ens/domain",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": ""
},
"$:/ipfs/saver/export": {
"title": "$:/ipfs/saver/export",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "json"
},
"$:/ipfs/saver/gateway": {
"title": "$:/ipfs/saver/gateway",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "$:/ipfs/saver/gateway/https/ipfs.infura.io"
},
"$:/ipfs/saver/ipns/key": {
"title": "$:/ipfs/saver/ipns/key",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": ""
},
"$:/ipfs/saver/ipns/name": {
"title": "$:/ipfs/saver/ipns/name",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": ""
},
"$:/ipfs/saver/policy": {
"title": "$:/ipfs/saver/policy",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "gateway"
},
"$:/config/PreferredSaver": {
"title": "$:/config/PreferredSaver",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "$:/plugins/ipfs/ipfs-saver.js"
},
"$:/ipfs/saver/protocol": {
"title": "$:/ipfs/saver/protocol",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "ipfs"
},
"$:/ipfs/saver/provider": {
"title": "$:/ipfs/saver/provider",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "http"
},
"$:/ipfs/saver/unpin": {
"title": "$:/ipfs/saver/unpin",
"modified": "20200528094915385",
"tags": "bluelightav.eth",
"text": "no"
},
"$:/ipfs/saver/verbose": {
"title": "$:/ipfs/saver/verbose",
"modified": "20200528094915385",
"tags": "bluelightav.eth",
"text": "yes"
},
"$:/plugins/ipfs/modules/parsers/audioparser.js": {
"title": "$:/plugins/ipfs/modules/parsers/audioparser.js",
"text": "/*\\\ntitle: $:/plugins/ipfs/modules/parsers/audioparser.js\ntype: application/javascript\ntags: $:/ipfs/core\nmodule-type: parser\n\nThe audio parser parses an audio tiddler into an embeddable HTML element\n\n\\*/\n\n/**\n * TiddlyWiki created by Jeremy Ruston, (jeremy [at] jermolene [dot] com)\n *\n * Copyright (c) 2004-2007, Jeremy Ruston\n * Copyright (c) 2007-2018, UnaMesa Association\n * Copyright (c) 2019-2020, Blue Light\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * * Neither the name of the copyright holder nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n var name = 'ipfs-audioparser'\n\n var AudioParser = function (type, text, options) {\n var self = this\n var value = 'data:' + type + ';base64,'\n var element = {\n type: 'element',\n tag: 'audio',\n attributes: {\n controls: { type: 'string', value: 'controls' },\n style: { type: 'string', value: 'width: 100%; object-fit: contain' }\n }\n }\n if (\n $tw.browser &&\n options.tiddler !== undefined &&\n options.tiddler !== null\n ) {\n var canonicalUri = options.tiddler.fields._canonical_uri\n canonicalUri =\n canonicalUri === undefined ||\n canonicalUri == null ||\n canonicalUri.trim() === ''\n ? null\n : canonicalUri.trim()\n if (canonicalUri !== null) {\n $tw.ipfs\n .resolveUrl(false, true, canonicalUri)\n .then(data => {\n var { normalizedUrl, resolvedUrl } = data\n var url =\n resolvedUrl !== null\n ? resolvedUrl.toString()\n : normalizedUrl !== null\n ? normalizedUrl.toString()\n : null\n if (url !== null) {\n $tw.ipfs\n .loadToBase64(url)\n .then(loaded => {\n element.attributes.src = {\n type: 'string',\n value: value + loaded.data\n }\n var parsedTiddler = $tw.utils.getChangedTiddler(\n options.tiddler\n )\n $tw.rootWidget.refresh(parsedTiddler)\n })\n .catch(error => {\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n }\n })\n .catch(error => {\n self.getLogger().error(error)\n })\n } else if (text) {\n element.attributes.src = { type: 'string', value: value + text }\n }\n }\n // Return the parsed tree\n this.tree = [element]\n }\n\n AudioParser.prototype.getLogger = function () {\n if (window.log) {\n return window.log.getLogger(name)\n }\n return console\n }\n\n exports['audio/ogg'] = AudioParser\n exports['audio/mpeg'] = AudioParser\n exports['audio/mp3'] = AudioParser\n exports['audio/mp4'] = AudioParser\n})()\n",
"type": "application/javascript",
"tags": "$:/ipfs/core",
"module-type": "parser"
},
"$:/plugins/ipfs/modules/parsers/binaryparser.js": {
"title": "$:/plugins/ipfs/modules/parsers/binaryparser.js",
"text": "/*\\\ntitle: $:/plugins/ipfs/modules/parsers/binaryparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe binary parser parses a binary tiddler into a warning message and download link\n\n\\*/\n\n/**\n * TiddlyWiki created by Jeremy Ruston, (jeremy [at] jermolene [dot] com)\n *\n * Copyright (c) 2004-2007, Jeremy Ruston\n * Copyright (c) 2007-2018, UnaMesa Association\n * Copyright (c) 2019-2020, Blue Light\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * * Neither the name of the copyright holder nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n const name = 'ipfs-binaryparser'\n\n var BINARY_WARNING_MESSAGE = '$:/core/ui/BinaryWarning'\n var EXPORT_BUTTON_IMAGE = '$:/core/images/export-button'\n\n var BinaryParser = function (type, text, options) {\n var self = this\n // Transclude the binary data tiddler warning message\n var warn = {\n type: 'element',\n tag: 'p',\n children: [\n {\n type: 'transclude',\n attributes: {\n tiddler: { type: 'string', value: BINARY_WARNING_MESSAGE }\n }\n }\n ]\n }\n // Create download link based on binary tiddler title\n var link = {\n type: 'element',\n tag: 'a',\n attributes: {\n title: { type: 'indirect', textReference: '!!title' },\n download: { type: 'indirect', textReference: '!!title' }\n },\n children: [\n {\n type: 'transclude',\n attributes: {\n tiddler: { type: 'string', value: EXPORT_BUTTON_IMAGE }\n }\n }\n ]\n }\n if (\n $tw.browser &&\n options.tiddler !== undefined &&\n options.tiddler !== null\n ) {\n var canonicalUri = options.tiddler.fields._canonical_uri\n canonicalUri =\n canonicalUri === undefined ||\n canonicalUri == null ||\n canonicalUri.trim() === ''\n ? null\n : canonicalUri.trim()\n if (canonicalUri !== null) {\n $tw.ipfs\n .resolveUrl(false, true, canonicalUri)\n .then(data => {\n var { normalizedUrl, resolvedUrl } = data\n var url =\n resolvedUrl !== null\n ? resolvedUrl.toString()\n : normalizedUrl !== null\n ? normalizedUrl.toString()\n : null\n if (url !== null) {\n link.attributes.href = {\n type: 'string',\n value: url\n }\n var parsedTiddler = $tw.utils.getChangedTiddler(options.tiddler)\n $tw.rootWidget.refresh(parsedTiddler)\n }\n })\n .catch(error => {\n self.getLogger().error(error)\n })\n } else if (text) {\n link.attributes.href = {\n type: 'string',\n value: 'data:' + type + ';base64,' + text\n }\n }\n }\n // Combine warning message and download link in a div\n var element = {\n type: 'element',\n tag: 'div',\n attributes: {\n class: { type: 'string', value: 'tc-binary-warning' }\n },\n children: [warn, link]\n }\n this.tree = [element]\n }\n\n BinaryParser.prototype.getLogger = function () {\n if (window.log) {\n return window.log.getLogger(name)\n }\n return console\n }\n\n exports['application/octet-stream'] = BinaryParser\n})()\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/plugins/ipfs/modules/parsers/htmlparser.js": {
"title": "$:/plugins/ipfs/modules/parsers/htmlparser.js",
"text": "/*\\\ntitle: $:/plugins/ipfs/modules/parsers/htmlparser.js\ntype: application/javascript\nmodule-type: parser\n\nThe HTML parser displays text as raw HTML\n\n\\*/\n\n/**\n * TiddlyWiki created by Jeremy Ruston, (jeremy [at] jermolene [dot] com)\n *\n * Copyright (c) 2004-2007, Jeremy Ruston\n * Copyright (c) 2007-2018, UnaMesa Association\n * Copyright (c) 2019-2020, Blue Light\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * * Neither the name of the copyright holder nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n const name = 'ipfs-binaryparser'\n\n var HtmlParser = function (type, text, options) {\n var self = this\n var value = 'data:text/html;charset=utf-8,'\n var src\n if (\n $tw.browser &&\n options.tiddler !== undefined &&\n options.tiddler !== null\n ) {\n var canonicalUri = options.tiddler.fields._canonical_uri\n canonicalUri =\n canonicalUri === undefined ||\n canonicalUri == null ||\n canonicalUri.trim() === ''\n ? null\n : canonicalUri.trim()\n if (canonicalUri !== null) {\n $tw.ipfs\n .resolveUrl(false, true, canonicalUri)\n .then(data => {\n var { normalizedUrl, resolvedUrl } = data\n var url =\n resolvedUrl !== null\n ? resolvedUrl.toString()\n : normalizedUrl !== null\n ? normalizedUrl.toString()\n : null\n if (url !== null) {\n src = url\n var parsedTiddler = $tw.utils.getChangedTiddler(options.tiddler)\n $tw.rootWidget.refresh(parsedTiddler)\n }\n })\n .catch(error => {\n self.getLogger().error(error)\n })\n } else if (text) {\n src = value + encodeURIComponent(text)\n }\n }\n this.tree = [\n {\n type: 'element',\n tag: 'iframe',\n attributes: {\n src: { type: 'string', value: src },\n sandbox: { type: 'string', value: '' }\n }\n }\n ]\n }\n\n HtmlParser.prototype.getLogger = function () {\n if (window.log) {\n return window.log.getLogger(name)\n }\n return console\n }\n\n exports['text/html'] = HtmlParser\n})()\n",
"type": "application/javascript",
"module-type": "parser"
},
"$:/plugins/ipfs/modules/parsers/imageparser.js": {
"title": "$:/plugins/ipfs/modules/parsers/imageparser.js",
"text": "/*\\\ntitle: $:/plugins/ipfs/modules/parsers/imageparser.js\ntype: application/javascript\ntags: $:/ipfs/core\nmodule-type: parser\n\nThe image parser parses an image into an embeddable HTML element\n\n\\*/\n\n/**\n * TiddlyWiki created by Jeremy Ruston, (jeremy [at] jermolene [dot] com)\n *\n * Copyright (c) 2004-2007, Jeremy Ruston\n * Copyright (c) 2007-2018, UnaMesa Association\n * Copyright (c) 2019-2020, Blue Light\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * * Neither the name of the copyright holder nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n var name = 'ipfs-imageparser'\n\n var ImageParser = function (type, text, options) {\n var self = this\n var value = 'data:' + type + ';base64,'\n var element = {\n type: 'element',\n tag: 'img',\n attributes: {}\n }\n if (\n $tw.browser &&\n options.tiddler !== undefined &&\n options.tiddler !== null\n ) {\n var canonicalUri = options.tiddler.fields._canonical_uri\n canonicalUri =\n canonicalUri === undefined ||\n canonicalUri == null ||\n canonicalUri.trim() === ''\n ? null\n : canonicalUri.trim()\n if (canonicalUri !== null) {\n $tw.ipfs\n .resolveUrl(false, true, canonicalUri)\n .then(data => {\n var { normalizedUrl, resolvedUrl } = data\n var url =\n resolvedUrl !== null\n ? resolvedUrl.toString()\n : normalizedUrl !== null\n ? normalizedUrl.toString()\n : null\n if (url !== null) {\n $tw.ipfs\n .loadToBase64(url)\n .then(loaded => {\n element.attributes.src = {\n type: 'string',\n value: value + loaded.data\n }\n var parsedTiddler = $tw.utils.getChangedTiddler(\n options.tiddler\n )\n $tw.rootWidget.refresh(parsedTiddler)\n })\n .catch(error => {\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n }\n })\n .catch(error => {\n self.getLogger().error(error)\n })\n } else if (text) {\n element.attributes.src = { type: 'string', value: value + text }\n }\n }\n // Return the parsed tree\n this.tree = [element]\n }\n\n ImageParser.prototype.getLogger = function () {\n if (window.log) {\n return window.log.getLogger(name)\n }\n return console\n }\n\n exports['image/jpg'] = ImageParser\n exports['image/jpeg'] = ImageParser\n exports['image/png'] = ImageParser\n exports['image/gif'] = ImageParser\n exports['image/webp'] = ImageParser\n exports['image/heic'] = ImageParser\n exports['image/heif'] = ImageParser\n exports['image/x-icon'] = ImageParser\n})()\n",
"type": "application/javascript",
"tags": "$:/ipfs/core",
"module-type": "parser"
},
"$:/plugins/ipfs/modules/parsers/pdfparser.js": {
"title": "$:/plugins/ipfs/modules/parsers/pdfparser.js",
"text": "/*\\\ntitle: $:/plugins/ipfs/modules/parsers/pdfparser.js\ntype: application/javascript\ntags: $:/ipfs/core\nmodule-type: parser\n\nThe PDF parser embeds a PDF viewer\n\n\\*/\n\n/**\n * TiddlyWiki created by Jeremy Ruston, (jeremy [at] jermolene [dot] com)\n *\n * Copyright (c) 2004-2007, Jeremy Ruston\n * Copyright (c) 2007-2018, UnaMesa Association\n * Copyright (c) 2019-2020, Blue Light\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * * Neither the name of the copyright holder nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n const name = 'ipfs-pdfparser'\n\n var PdfParser = function (type, text, options) {\n var self = this\n var value = 'data:application/pdf;base64,'\n var element = {\n type: 'element',\n tag: 'embed',\n attributes: {}\n }\n if (\n $tw.browser &&\n options.tiddler !== undefined &&\n options.tiddler !== null\n ) {\n var canonicalUri = options.tiddler.fields._canonical_uri\n canonicalUri =\n canonicalUri === undefined ||\n canonicalUri == null ||\n canonicalUri.trim() === ''\n ? null\n : canonicalUri.trim()\n if (canonicalUri !== null) {\n $tw.ipfs\n .resolveUrl(false, true, canonicalUri)\n .then(data => {\n var { normalizedUrl, resolvedUrl } = data\n var url =\n resolvedUrl !== null\n ? resolvedUrl.toString()\n : normalizedUrl !== null\n ? normalizedUrl.toString()\n : null\n if (url !== null) {\n $tw.ipfs\n .loadToBase64(url)\n .then(loaded => {\n element.attributes.src = {\n type: 'string',\n value: value + loaded.data\n }\n var parsedTiddler = $tw.utils.getChangedTiddler(\n options.tiddler\n )\n $tw.rootWidget.refresh(parsedTiddler)\n })\n .catch(error => {\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n }\n })\n .catch(error => {\n self.getLogger().error(error)\n })\n } else if (text) {\n element.attributes.src = { type: 'string', value: value + text }\n }\n }\n // Return the parsed tree\n this.tree = [element]\n }\n\n PdfParser.prototype.getLogger = function () {\n if (window.log) {\n return window.log.getLogger(name)\n }\n return console\n }\n\n exports['application/pdf'] = PdfParser\n})()\n",
"type": "application/javascript",
"tags": "$:/ipfs/core",
"module-type": "parser"
},
"$:/plugins/ipfs/modules/parsers/svgparser.js": {
"title": "$:/plugins/ipfs/modules/parsers/svgparser.js",
"text": "/*\\\ntitle: $:/plugins/ipfs/modules/parsers/svgparser.js\ntype: application/javascript\ntags: $:/ipfs/core\nmodule-type: parser\n\nThe image parser parses an image into an embeddable HTML element\n\n\\*/\n\n/**\n * TiddlyWiki created by Jeremy Ruston, (jeremy [at] jermolene [dot] com)\n *\n * Copyright (c) 2004-2007, Jeremy Ruston\n * Copyright (c) 2007-2018, UnaMesa Association\n * Copyright (c) 2019-2020, Blue Light\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * * Neither the name of the copyright holder nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n const name = 'ipfs-svgparser'\n\n var SvgParser = function (type, text, options) {\n var self = this\n var value = 'data:image/svg+xml,'\n var element = {\n type: 'element',\n tag: 'img',\n attributes: {}\n }\n if (\n $tw.browser &&\n options.tiddler !== undefined &&\n options.tiddler !== null\n ) {\n var canonicalUri = options.tiddler.fields._canonical_uri\n canonicalUri =\n canonicalUri === undefined ||\n canonicalUri == null ||\n canonicalUri.trim() === ''\n ? null\n : canonicalUri.trim()\n if (canonicalUri !== null) {\n $tw.ipfs\n .resolveUrl(false, true, canonicalUri)\n .then(data => {\n var { normalizedUrl, resolvedUrl } = data\n var url =\n resolvedUrl !== null\n ? resolvedUrl.toString()\n : normalizedUrl !== null\n ? normalizedUrl.toString()\n : null\n if (url !== null) {\n $tw.ipfs\n .loadToUtf8(url)\n .then(loaded => {\n element.attributes.src = {\n type: 'string',\n value: value + encodeURIComponent(loaded.data)\n }\n var parsedTiddler = $tw.utils.getChangedTiddler(\n options.tiddler\n )\n $tw.rootWidget.refresh(parsedTiddler)\n })\n .catch(error => {\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n }\n })\n .catch(error => {\n self.getLogger().error(error)\n })\n } else {\n element.attributes.src = {\n type: 'string',\n value: value + encodeURIComponent(text)\n }\n }\n }\n // Return the parsed tree\n this.tree = [element]\n }\n\n SvgParser.prototype.getLogger = function () {\n if (window.log) {\n return window.log.getLogger(name)\n }\n return console\n }\n\n exports['image/svg+xml'] = SvgParser\n exports['.svg'] = SvgParser\n})()\n",
"type": "application/javascript",
"tags": "$:/ipfs/core",
"module-type": "parser"
},
"$:/plugins/ipfs/modules/parsers/videoparser.js": {
"title": "$:/plugins/ipfs/modules/parsers/videoparser.js",
"text": "/*\\\ntitle: $:/plugins/ipfs/modules/parsers/videoparser.js\ntype: application/javascript\ntags: $:/ipfs/core\nmodule-type: parser\n\nThe video parser parses a video tiddler into an embeddable HTML element\n\n\\*/\n\n/**\n * TiddlyWiki created by Jeremy Ruston, (jeremy [at] jermolene [dot] com)\n *\n * Copyright (c) 2004-2007, Jeremy Ruston\n * Copyright (c) 2007-2018, UnaMesa Association\n * Copyright (c) 2019-2020, Blue Light\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * * Neither the name of the copyright holder nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n const name = 'ipfs-videoparser'\n\n var VideoParser = function (type, text, options) {\n var self = this\n var value = 'data:' + type + ';base64,'\n var element = {\n type: 'element',\n tag: 'video',\n attributes: {\n controls: { type: 'string', value: 'controls' },\n style: { type: 'string', value: 'width: 100%; object-fit: contain' }\n }\n }\n if (\n $tw.browser &&\n options.tiddler !== undefined &&\n options.tiddler !== null\n ) {\n var canonicalUri = options.tiddler.fields._canonical_uri\n canonicalUri =\n canonicalUri === undefined ||\n canonicalUri == null ||\n canonicalUri.trim() === ''\n ? null\n : canonicalUri.trim()\n if (canonicalUri !== null) {\n $tw.ipfs\n .resolveUrl(false, true, canonicalUri)\n .then(data => {\n var { normalizedUrl, resolvedUrl } = data\n var url =\n resolvedUrl !== null\n ? resolvedUrl.toString()\n : normalizedUrl !== null\n ? normalizedUrl.toString()\n : null\n if (url !== null) {\n $tw.ipfs\n .loadToBase64(url)\n .then(loaded => {\n element.attributes.src = {\n type: 'string',\n value: value + loaded.data\n }\n var parsedTiddler = $tw.utils.getChangedTiddler(\n options.tiddler\n )\n $tw.rootWidget.refresh(parsedTiddler)\n })\n .catch(error => {\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n }\n })\n .catch(error => {\n self.getLogger().error(error)\n })\n } else if (text) {\n element.attributes.src = { type: 'string', value: value + text }\n }\n }\n // Return the parsed tree\n this.tree = [element]\n }\n\n VideoParser.prototype.getLogger = function () {\n if (window.log) {\n return window.log.getLogger(name)\n }\n return console\n }\n\n exports['video/ogg'] = VideoParser\n exports['video/webm'] = VideoParser\n exports['video/mp4'] = VideoParser\n exports['video/quicktime'] = VideoParser\n})()\n",
"type": "application/javascript",
"tags": "$:/ipfs/core",
"module-type": "parser"
},
"$:/plugins/ipfs/modules/parsers/wikiparser/wikiparser.js": {
"title": "$:/plugins/ipfs/modules/parsers/wikiparser/wikiparser.js",
"text": "/*\\\ntitle: $:/plugins/ipfs/modules/parsers/wikiparser/wikiparser.js\ntype: application/javascript\ntags: $:/ipfs/core\nmodule-type: parser\n\nwikiparser\n\n\\*/\n\n/**\n * TiddlyWiki created by Jeremy Ruston, (jeremy [at] jermolene [dot] com)\n *\n * Copyright (c) 2004-2007, Jeremy Ruston\n * Copyright (c) 2007-2020, UnaMesa Association\n * Copyright (c) 2019-2020, Blue Light\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * * Neither the name of the copyright holder nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n const IpfsImport = require('$:/plugins/ipfs/ipfs-import.js').IpfsImport\n\n var name = 'ipfs-wikiparser'\n\n var WikiParser = function (type, text, options) {\n var self = this\n this.wiki = options.wiki\n // Check for an externally linked tiddler\n if (\n $tw.browser &&\n (text || '') === '' &&\n options.tiddler !== undefined &&\n options.tiddler !== null\n ) {\n var canonicalUri = options.tiddler.fields._canonical_uri\n canonicalUri =\n canonicalUri === undefined ||\n canonicalUri == null ||\n canonicalUri.trim() === ''\n ? null\n : canonicalUri.trim()\n var importUri = options.tiddler.fields._import_uri\n importUri =\n importUri === undefined || importUri == null || importUri.trim() === ''\n ? null\n : importUri.trim()\n if (canonicalUri !== null || importUri !== null) {\n var ipfsImport = new IpfsImport()\n ipfsImport\n .import(canonicalUri, importUri, options.tiddler)\n .catch(error => {\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n text = $tw.language.getRawString('LazyLoadingWarning')\n }\n }\n // Initialise the classes if we don't have them already\n if (!this.pragmaRuleClasses) {\n WikiParser.prototype.pragmaRuleClasses = $tw.modules.createClassesFromModules(\n 'wikirule',\n 'pragma',\n $tw.WikiRuleBase\n )\n this.setupRules(\n WikiParser.prototype.pragmaRuleClasses,\n '$:/config/WikiParserRules/Pragmas/'\n )\n }\n if (!this.blockRuleClasses) {\n WikiParser.prototype.blockRuleClasses = $tw.modules.createClassesFromModules(\n 'wikirule',\n 'block',\n $tw.WikiRuleBase\n )\n this.setupRules(\n WikiParser.prototype.blockRuleClasses,\n '$:/config/WikiParserRules/Block/'\n )\n }\n if (!this.inlineRuleClasses) {\n WikiParser.prototype.inlineRuleClasses = $tw.modules.createClassesFromModules(\n 'wikirule',\n 'inline',\n $tw.WikiRuleBase\n )\n this.setupRules(\n WikiParser.prototype.inlineRuleClasses,\n '$:/config/WikiParserRules/Inline/'\n )\n }\n // Save the parse text\n this.type = type || 'text/vnd.tiddlywiki'\n this.source = text || ''\n this.sourceLength = this.source.length\n // Flag for ignoring whitespace\n this.configTrimWhiteSpace = false\n // Set current parse position\n this.pos = 0\n // Instantiate the pragma parse rules\n this.pragmaRules = this.instantiateRules(\n this.pragmaRuleClasses,\n 'pragma',\n 0\n )\n // Instantiate the parser block and inline rules\n this.blockRules = this.instantiateRules(this.blockRuleClasses, 'block', 0)\n this.inlineRules = this.instantiateRules(\n this.inlineRuleClasses,\n 'inline',\n 0\n )\n // Parse any pragmas\n this.tree = []\n var topBranch = this.parsePragmas()\n // Parse the text into inline runs or blocks\n if (options.parseAsInline) {\n topBranch.push.apply(topBranch, this.parseInlineRun())\n } else {\n topBranch.push.apply(topBranch, this.parseBlocks())\n }\n // Return the parsed tree\n }\n\n WikiParser.prototype.getLogger = function () {\n if (window.log) {\n return window.log.getLogger(name)\n }\n return console\n }\n\n /*\n */\n WikiParser.prototype.setupRules = function (proto, configPrefix) {\n var self = this\n if (!$tw.safemode) {\n $tw.utils.each(proto, function (object, name) {\n if (\n self.wiki.getTiddlerText(configPrefix + name, 'enable') !== 'enable'\n ) {\n delete proto[name]\n }\n })\n }\n }\n\n /*\nInstantiate an array of parse rules\n*/\n WikiParser.prototype.instantiateRules = function (classes, type, startPos) {\n var rulesInfo = []\n var self = this\n $tw.utils.each(classes, function (RuleClass) {\n // Instantiate the rule\n var rule = new RuleClass(self)\n rule.is = {}\n rule.is[type] = true\n rule.init(self)\n var matchIndex = rule.findNextMatch(startPos)\n if (matchIndex !== undefined) {\n rulesInfo.push({\n rule: rule,\n matchIndex: matchIndex\n })\n }\n })\n return rulesInfo\n }\n\n /*\nSkip any whitespace at the current position. Options are:\n treatNewlinesAsNonWhitespace: true if newlines are NOT to be treated as whitespace\n*/\n WikiParser.prototype.skipWhitespace = function (options) {\n options = options || {}\n var whitespaceRegExp = options.treatNewlinesAsNonWhitespace\n ? /([^\\S\\n]+)/gm\n : /(\\s+)/gm\n whitespaceRegExp.lastIndex = this.pos\n var whitespaceMatch = whitespaceRegExp.exec(this.source)\n if (whitespaceMatch && whitespaceMatch.index === this.pos) {\n this.pos = whitespaceRegExp.lastIndex\n }\n }\n\n /*\nGet the next match out of an array of parse rule instances\n*/\n WikiParser.prototype.findNextMatch = function (rules, startPos) {\n // Find the best matching rule by finding the closest match position\n var matchingRule\n var matchingRulePos = this.sourceLength\n // Step through each rule\n for (var t = 0; t < rules.length; t++) {\n var ruleInfo = rules[t]\n // Ask the rule to get the next match if we've moved past the current one\n if (ruleInfo.matchIndex !== undefined && ruleInfo.matchIndex < startPos) {\n ruleInfo.matchIndex = ruleInfo.rule.findNextMatch(startPos)\n }\n // Adopt this match if it's closer than the current best match\n if (\n ruleInfo.matchIndex !== undefined &&\n ruleInfo.matchIndex <= matchingRulePos\n ) {\n matchingRule = ruleInfo\n matchingRulePos = ruleInfo.matchIndex\n }\n }\n return matchingRule\n }\n\n /*\nParse any pragmas at the beginning of a block of parse text\n*/\n WikiParser.prototype.parsePragmas = function () {\n var currentTreeBranch = this.tree\n while (true) {\n // Skip whitespace\n this.skipWhitespace()\n // Check for the end of the text\n if (this.pos >= this.sourceLength) {\n break\n }\n // Check if we've arrived at a pragma rule match\n var nextMatch = this.findNextMatch(this.pragmaRules, this.pos)\n // If not, just exit\n if (!nextMatch || nextMatch.matchIndex !== this.pos) {\n break\n }\n // Process the pragma rule\n var subTree = nextMatch.rule.parse()\n if (subTree.length > 0) {\n // Quick hack; we only cope with a single parse tree node being returned, which is true at the moment\n currentTreeBranch.push.apply(currentTreeBranch, subTree)\n subTree[0].children = []\n currentTreeBranch = subTree[0].children\n }\n }\n return currentTreeBranch\n }\n\n /*\nParse a block from the current position\n terminatorRegExpString: optional regular expression string that identifies the end of plain paragraphs. Must not include capturing parenthesis\n*/\n WikiParser.prototype.parseBlock = function (terminatorRegExpString) {\n var terminatorRegExp = terminatorRegExpString\n ? new RegExp('(' + terminatorRegExpString + '|\\\\r?\\\\n\\\\r?\\\\n)', 'gm')\n : /(\\r?\\n\\r?\\n)/gm\n this.skipWhitespace()\n if (this.pos >= this.sourceLength) {\n return []\n }\n // Look for a block rule that applies at the current position\n var nextMatch = this.findNextMatch(this.blockRules, this.pos)\n if (nextMatch && nextMatch.matchIndex === this.pos) {\n return nextMatch.rule.parse()\n }\n // Treat it as a paragraph if we didn't find a block rule\n return [\n {\n type: 'element',\n tag: 'p',\n children: this.parseInlineRun(terminatorRegExp)\n }\n ]\n }\n\n /*\nParse a series of blocks of text until a terminating regexp is encountered or the end of the text\n terminatorRegExpString: terminating regular expression\n*/\n WikiParser.prototype.parseBlocks = function (terminatorRegExpString) {\n if (terminatorRegExpString) {\n return this.parseBlocksTerminated(terminatorRegExpString)\n } else {\n return this.parseBlocksUnterminated()\n }\n }\n\n /*\nParse a block from the current position to the end of the text\n*/\n WikiParser.prototype.parseBlocksUnterminated = function () {\n var tree = []\n while (this.pos < this.sourceLength) {\n tree.push.apply(tree, this.parseBlock())\n }\n return tree\n }\n\n /*\nParse blocks of text until a terminating regexp is encountered\n*/\n WikiParser.prototype.parseBlocksTerminated = function (\n terminatorRegExpString\n ) {\n var terminatorRegExp = new RegExp('(' + terminatorRegExpString + ')', 'gm')\n var tree = []\n // Skip any whitespace\n this.skipWhitespace()\n // Check if we've got the end marker\n terminatorRegExp.lastIndex = this.pos\n var match = terminatorRegExp.exec(this.source)\n // Parse the text into blocks\n while (\n this.pos < this.sourceLength &&\n !(match && match.index === this.pos)\n ) {\n var blocks = this.parseBlock(terminatorRegExpString)\n tree.push.apply(tree, blocks)\n // Skip any whitespace\n this.skipWhitespace()\n // Check if we've got the end marker\n terminatorRegExp.lastIndex = this.pos\n match = terminatorRegExp.exec(this.source)\n }\n if (match && match.index === this.pos) {\n this.pos = match.index + match[0].length\n }\n return tree\n }\n\n /*\nParse a run of text at the current position\n terminatorRegExp: a regexp at which to stop the run\n options: see below\nOptions available:\n eatTerminator: move the parse position past any encountered terminator (default false)\n*/\n WikiParser.prototype.parseInlineRun = function (terminatorRegExp, options) {\n if (terminatorRegExp) {\n return this.parseInlineRunTerminated(terminatorRegExp, options)\n } else {\n return this.parseInlineRunUnterminated(options)\n }\n }\n\n WikiParser.prototype.parseInlineRunUnterminated = function (options) {\n var tree = []\n // Find the next occurrence of an inline rule\n var nextMatch = this.findNextMatch(this.inlineRules, this.pos)\n // Loop around the matches until we've reached the end of the text\n while (this.pos < this.sourceLength && nextMatch) {\n // Process the text preceding the run rule\n if (nextMatch.matchIndex > this.pos) {\n this.pushTextWidget(\n tree,\n this.source.substring(this.pos, nextMatch.matchIndex)\n )\n this.pos = nextMatch.matchIndex\n }\n // Process the run rule\n tree.push.apply(tree, nextMatch.rule.parse())\n // Look for the next run rule\n nextMatch = this.findNextMatch(this.inlineRules, this.pos)\n }\n // Process the remaining text\n if (this.pos < this.sourceLength) {\n this.pushTextWidget(tree, this.source.substr(this.pos))\n }\n this.pos = this.sourceLength\n return tree\n }\n\n WikiParser.prototype.parseInlineRunTerminated = function (\n terminatorRegExp,\n options\n ) {\n options = options || {}\n var tree = []\n // Find the next occurrence of the terminator\n terminatorRegExp.lastIndex = this.pos\n var terminatorMatch = terminatorRegExp.exec(this.source)\n // Find the next occurrence of a inlinerule\n var inlineRuleMatch = this.findNextMatch(this.inlineRules, this.pos)\n // Loop around until we've reached the end of the text\n while (\n this.pos < this.sourceLength &&\n (terminatorMatch || inlineRuleMatch)\n ) {\n // Return if we've found the terminator, and it precedes any inline rule match\n if (terminatorMatch) {\n if (\n !inlineRuleMatch ||\n inlineRuleMatch.matchIndex >= terminatorMatch.index\n ) {\n if (terminatorMatch.index > this.pos) {\n this.pushTextWidget(\n tree,\n this.source.substring(this.pos, terminatorMatch.index)\n )\n }\n this.pos = terminatorMatch.index\n if (options.eatTerminator) {\n this.pos += terminatorMatch[0].length\n }\n return tree\n }\n }\n // Process any inline rule, along with the text preceding it\n if (inlineRuleMatch) {\n // Preceding text\n if (inlineRuleMatch.matchIndex > this.pos) {\n this.pushTextWidget(\n tree,\n this.source.substring(this.pos, inlineRuleMatch.matchIndex)\n )\n this.pos = inlineRuleMatch.matchIndex\n }\n // Process the inline rule\n tree.push.apply(tree, inlineRuleMatch.rule.parse())\n // Look for the next inline rule\n inlineRuleMatch = this.findNextMatch(this.inlineRules, this.pos)\n // Look for the next terminator match\n terminatorRegExp.lastIndex = this.pos\n terminatorMatch = terminatorRegExp.exec(this.source)\n }\n }\n // Process the remaining text\n if (this.pos < this.sourceLength) {\n this.pushTextWidget(tree, this.source.substr(this.pos))\n }\n this.pos = this.sourceLength\n return tree\n }\n\n /*\nPush a text widget onto an array, respecting the configTrimWhiteSpace setting\n*/\n WikiParser.prototype.pushTextWidget = function (array, text) {\n if (this.configTrimWhiteSpace) {\n text = $tw.utils.trim(text)\n }\n if (text) {\n array.push({ type: 'text', text: text })\n }\n }\n\n /*\nParse zero or more class specifiers `.classname`\n*/\n /*eslint no-useless-escape: \"off\"*/\n WikiParser.prototype.parseClasses = function () {\n var classRegExp = /\\.([^\\s\\.]+)/gm\n var classNames = []\n classRegExp.lastIndex = this.pos\n var match = classRegExp.exec(this.source)\n while (match && match.index === this.pos) {\n this.pos = match.index + match[0].length\n classNames.push(match[1])\n match = classRegExp.exec(this.source)\n }\n return classNames\n }\n\n /*\nAmend the rules used by this instance of the parser\n type: `only` keeps just the named rules, `except` keeps all but the named rules\n names: array of rule names\n*/\n WikiParser.prototype.amendRules = function (type, names) {\n names = names || []\n // Define the filter function\n var keepFilter\n if (type === 'only') {\n keepFilter = function (name) {\n return names.indexOf(name) !== -1\n }\n } else if (type === 'except') {\n keepFilter = function (name) {\n return names.indexOf(name) === -1\n }\n } else {\n return\n }\n // Define a function to process each of our rule arrays\n var processRuleArray = function (ruleArray) {\n for (var t = ruleArray.length - 1; t >= 0; t--) {\n if (!keepFilter(ruleArray[t].rule.name)) {\n ruleArray.splice(t, 1)\n }\n }\n }\n // Process each rule array\n processRuleArray(this.pragmaRules)\n processRuleArray(this.blockRules)\n processRuleArray(this.inlineRules)\n }\n\n exports['text/vnd.tiddlywiki'] = WikiParser\n})()\n",
"type": "application/javascript",
"tags": "$:/ipfs/core",
"module-type": "parser"
},
"$:/core/modules/saver-handler.js": {
"title": "$:/core/modules/saver-handler.js",
"text": "/*\\\ntitle: $:/core/modules/saver-handler.js\ntype: application/javascript\nmodule-type: global\n\nThe saver handler tracks changes to the store and handles saving the entire wiki via saver modules.\n\n\\*/\n\n/**\n * TiddlyWiki created by Jeremy Ruston, (jeremy [at] jermolene [dot] com)\n *\n * Copyright (c) 2004-2007, Jeremy Ruston\n * Copyright (c) 2007-2018, UnaMesa Association\n * Copyright (c) 2019-2020, Blue Light\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * * Neither the name of the copyright holder nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n /*\nInstantiate the saver handler with the following options:\nwiki: wiki to be synced\ndirtyTracking: true if dirty tracking should be performed\n*/\n function SaverHandler (options) {\n var self = this\n this.wiki = options.wiki\n this.dirtyTracking = options.dirtyTracking\n this.preloadDirty = options.preloadDirty || []\n this.pendingAutoSave = false\n // Make a logger\n this.logger = new $tw.utils.Logger('saver-handler')\n // Initialise our savers\n if ($tw.browser) {\n this.initSavers()\n }\n // Only do dirty tracking if required\n if ($tw.browser && this.dirtyTracking) {\n // Compile the dirty tiddler filter\n this.filterFn = this.wiki.compileFilter(\n this.wiki.getTiddlerText(this.titleSyncFilter)\n )\n // Count of changes that have not yet been saved\n var filteredChanges = self.filterFn.call(self.wiki, function (iterator) {\n $tw.utils.each(self.preloadDirty, function (title) {\n var tiddler = self.wiki.getTiddler(title)\n iterator(tiddler, title)\n })\n })\n this.numChanges = filteredChanges.length\n // Listen out for changes to tiddlers\n this.wiki.addEventListener('change', async function (changes) {\n // Filter the changes so that we only count changes to tiddlers that we care about\n var filteredChanges = self.filterFn.call(self.wiki, function (\n iterator\n ) {\n $tw.utils.each(changes, function (change, title) {\n var tiddler = self.wiki.getTiddler(title)\n iterator(tiddler, title)\n })\n })\n // Adjust the number of changes\n self.numChanges += filteredChanges.length\n self.updateDirtyStatus()\n // Do any autosave if one is pending and there's no more change events\n if (\n self.pendingAutoSave &&\n self.wiki.getSizeOfTiddlerEventQueue() === 0\n ) {\n // Check if we're dirty\n if (self.numChanges > 0) {\n await self.saveWiki({\n method: 'autosave',\n downloadType: 'text/plain'\n })\n }\n self.pendingAutoSave = false\n }\n })\n // Listen for the autosave event\n $tw.rootWidget.addEventListener('tm-auto-save-wiki', async function (\n event\n ) {\n // Do the autosave unless there are outstanding tiddler change events\n if (self.wiki.getSizeOfTiddlerEventQueue() === 0) {\n // Check if we're dirty\n if (self.numChanges > 0) {\n await self.saveWiki({\n method: 'autosave',\n downloadType: 'text/plain'\n })\n }\n } else {\n // Otherwise put ourselves in the \"pending autosave\" state and wait for the change event before we do the autosave\n self.pendingAutoSave = true\n }\n })\n // Set up our beforeunload handler\n $tw.addUnloadTask(function (event) {\n var confirmationMessage\n if (self.isDirty()) {\n confirmationMessage = $tw.language.getString('UnsavedChangesWarning')\n event.returnValue = confirmationMessage // Gecko\n }\n return confirmationMessage\n })\n }\n // Install the save action handlers\n if ($tw.browser) {\n $tw.rootWidget.addEventListener('tm-save-wiki', async function (event) {\n await self.saveWiki({\n template: event.param,\n downloadType: 'text/plain',\n variables: event.paramObject\n })\n })\n $tw.rootWidget.addEventListener('tm-download-file', async function (\n event\n ) {\n await self.saveWiki({\n method: 'download',\n template: event.param,\n downloadType: 'text/plain',\n variables: event.paramObject\n })\n })\n }\n }\n\n SaverHandler.prototype.titleSyncFilter = '$:/config/SaverFilter'\n SaverHandler.prototype.titleAutoSave = '$:/config/AutoSave'\n SaverHandler.prototype.titleSavedNotification =\n '$:/language/Notifications/Save/Done'\n\n /*\nSelect the appropriate saver modules and set them up\n*/\n SaverHandler.prototype.initSavers = function (moduleType) {\n moduleType = moduleType || 'saver'\n // Instantiate the available savers\n this.savers = []\n var self = this\n $tw.modules.forEachModuleOfType(moduleType, function (title, module) {\n if (module.canSave(self)) {\n self.savers.push({ title: title, module: module.create(self.wiki) })\n }\n })\n // Sort savers\n this.sortSavers()\n }\n\n /*\n * Sort the savers into priority order\n */\n SaverHandler.prototype.sortSavers = function () {\n this.savers.sort(function (a, b) {\n if (a.module.info.priority < b.module.info.priority) {\n return -1\n } else {\n if (a.module.info.priority > b.module.info.priority) {\n return +1\n } else {\n return 0\n }\n }\n })\n }\n\n /*\nSave the wiki contents. Options are:\nmethod: \"save\", \"autosave\" or \"download\"\ntemplate: the tiddler containing the template to save\ndownloadType: the content type for the saved file\n*/\n SaverHandler.prototype.saveWiki = async function (options) {\n options = options || {}\n var self = this\n var method = options.method || 'save'\n // Ignore autosave if disabled\n if (\n method === 'autosave' &&\n this.wiki.getTiddlerText(this.titleAutoSave, 'yes') !== 'yes'\n ) {\n return false\n }\n var variables = options.variables || {}\n var template = options.template || '$:/core/save/all'\n var downloadType = options.downloadType || 'text/plain'\n var text = this.wiki.renderTiddler(downloadType, template, options)\n var callback = function (err) {\n if (err) {\n alert($tw.language.getString('Error/WhileSaving') + ':\\n\\n' + err)\n } else {\n // Clear the task queue if we're saving (rather than downloading)\n if (method !== 'download') {\n self.numChanges = 0\n self.updateDirtyStatus()\n }\n $tw.notifier.display(self.titleSavedNotification)\n if (options.callback) {\n options.callback()\n }\n }\n }\n // Process preferred if any\n var ignorePreferred = null\n var preferredSaver = $tw.wiki.getTiddler('$:/config/PreferredSaver')\n if (preferredSaver !== null && preferredSaver !== undefined) {\n var title = preferredSaver.getFieldString('text')\n title =\n title === undefined || title == null || title.trim() === ''\n ? null\n : title.trim()\n if (title !== null) {\n ignorePreferred = title\n // Process preferred saver\n if (\n await this.save(\n this.getSaver(title).module,\n method,\n variables,\n text,\n callback\n )\n ) {\n return true\n }\n }\n }\n\n // Call the highest priority saver that supports this method\n for (var t = this.savers.length - 1; t >= 0; t--) {\n // Ignore failed preferred if any\n if (this.savers[t].title === ignorePreferred) {\n continue\n }\n // Process\n if (\n await this.save(\n this.savers[t].module,\n method,\n variables,\n text,\n callback\n )\n ) {\n return true\n }\n }\n return false\n }\n\n SaverHandler.prototype.getSaver = function (title) {\n // Locate saver\n var saver = null\n for (var i = 0; i < this.savers.length; i++) {\n var current = this.savers[i]\n if (current.title === title) {\n saver = current\n break\n }\n }\n return saver\n }\n\n SaverHandler.prototype.save = async function (\n saver,\n method,\n variables,\n text,\n callback\n ) {\n if (saver.info.capabilities.indexOf(method) !== -1) {\n var saved = await saver.save(text, method, callback, {\n variables: { filename: variables.filename }\n })\n if (saved) {\n this.logger.log(\n 'Saved wiki with method',\n method,\n 'through saver',\n saver.info.name\n )\n return true\n }\n }\n return false\n }\n\n /*\nChecks whether the wiki is dirty (ie the window shouldn't be closed)\n*/\n SaverHandler.prototype.isDirty = function () {\n return this.numChanges > 0\n }\n\n /*\nUpdate the document body with the class \"tc-dirty\" if the wiki has unsaved/unsynced changes\n*/\n SaverHandler.prototype.updateDirtyStatus = function () {\n if ($tw.browser) {\n $tw.utils.toggleClass(document.body, 'tc-dirty', this.isDirty())\n }\n }\n\n exports.SaverHandler = SaverHandler\n})()\n",
"type": "application/javascript",
"module-type": "global"
},
"$:/plugins/ipfs/modules/widgets/image.js": {
"title": "$:/plugins/ipfs/modules/widgets/image.js",
"text": "/*\\\ntitle: $:/plugins/ipfs/modules/widgets/image.js\ntype: application/javascript\nmodule-type: widget\n\nThe image widget displays an image referenced with an external URI or with a local tiddler title.\n\n```\n<$image src=\"TiddlerTitle\" width=\"320\" height=\"400\" class=\"classnames\">\n```\n\nThe image source can be the title of an existing tiddler or the URL of an external image.\n\nExternal images always generate an HTML `<img>` tag.\n\nTiddlers that have a _canonical_uri field generate an HTML `<img>` tag with the src attribute containing the URI.\n\nTiddlers that contain image data generate an HTML `<img>` tag with the src attribute containing a base64 representation of the image.\n\nTiddlers that contain wikitext could be rendered to a DIV of the usual size of a tiddler, and then transformed to the size requested.\n\nThe width and height attributes are interpreted as a number of pixels, and do not need to include the \"px\" suffix.\n\n\\*/\n\n/**\n * TiddlyWiki created by Jeremy Ruston, (jeremy [at] jermolene [dot] com)\n *\n * Copyright (c) 2004-2007, Jeremy Ruston\n * Copyright (c) 2007-2018, UnaMesa Association\n * Copyright (c) 2019-2020, Blue Light\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * * Neither the name of the copyright holder nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n var Widget = require('$:/core/modules/widgets/widget.js').widget\n\n var name = 'ipfs-image'\n\n var ImageWidget = function (parseTreeNode, options) {\n this.initialise(parseTreeNode, options)\n }\n\n /*\nInherit from the base widget class\n*/\n ImageWidget.prototype = new Widget()\n\n ImageWidget.prototype.getLogger = function () {\n if (window.log) {\n return window.log.getLogger(name)\n }\n return console\n }\n\n /*\nRender this widget into the DOM\n*/\n ImageWidget.prototype.render = function (parent, nextSibling) {\n this.parentDomNode = parent\n this.computeAttributes()\n this.execute()\n var self = this\n // Create element\n // Determine what type of image it is\n var tiddler = this.wiki.getTiddler(this.imageSource)\n // Create default element\n var domNode = this.document.createElement('img')\n if (!tiddler) {\n // The source isn't the title of a tiddler, so we'll assume it's a URL\n domNode.setAttribute(\n 'src',\n this.getVariable('tv-get-export-image-link', {\n params: [{ name: 'src', value: this.imageSource }],\n defaultValue: this.imageSource\n })\n )\n } else {\n // Check if it is an image tiddler\n if (this.wiki.isImageTiddler(this.imageSource)) {\n var type = tiddler.fields.type\n var text = tiddler.fields.text\n var canonicalUri = tiddler.fields._canonical_uri\n canonicalUri =\n canonicalUri === undefined ||\n canonicalUri == null ||\n canonicalUri.trim() === ''\n ? null\n : canonicalUri.trim()\n // If the tiddler has body text then it doesn't need to be lazily loaded\n if (text) {\n // Render the appropriate element for the image type\n switch (type) {\n case 'application/pdf':\n domNode = this.document.createElement('embed')\n domNode.setAttribute('src', 'data:application/pdf;base64,' + text)\n break\n case 'image/svg+xml':\n domNode.setAttribute(\n 'src',\n 'data:image/svg+xml,' + encodeURIComponent(text)\n )\n break\n default:\n domNode.setAttribute('src', 'data:' + type + ';base64,' + text)\n break\n }\n } else if (canonicalUri) {\n $tw.ipfs\n .resolveUrl(false, true, canonicalUri)\n .then(data => {\n var { normalizedUrl, resolvedUrl } = data\n var url =\n resolvedUrl !== null\n ? resolvedUrl.toString()\n : normalizedUrl !== null\n ? normalizedUrl.toString()\n : null\n if (url !== null) {\n switch (type) {\n case 'application/pdf':\n domNode = this.document.createElement('embed')\n $tw.ipfs\n .loadToBase64(url)\n .then(loaded => {\n if (\n loaded !== undefined &&\n loaded !== null &&\n loaded.data !== undefined &&\n loaded.data !== null\n ) {\n domNode.setAttribute(\n 'src',\n 'data:application/pdf;base64,' + loaded.data\n )\n }\n })\n .catch(error => {\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n break\n case 'image/svg+xml':\n $tw.ipfs\n .loadToUtf8(url)\n .then(loaded => {\n if (\n loaded !== undefined &&\n loaded !== null &&\n loaded.data !== undefined &&\n loaded.data !== null\n ) {\n domNode.setAttribute(\n 'src',\n 'data:image/svg+xml,' +\n encodeURIComponent(loaded.data)\n )\n }\n })\n .catch(error => {\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n break\n default:\n $tw.ipfs\n .loadToBase64(url)\n .then(loaded => {\n if (\n loaded !== undefined &&\n loaded !== null &&\n loaded.data !== undefined &&\n loaded.data !== null\n ) {\n domNode.setAttribute(\n 'src',\n 'data:' + type + ';base64,' + loaded.data\n )\n }\n })\n .catch(error => {\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n break\n }\n }\n })\n .catch(error => {\n self.getLogger().error(error)\n })\n } else {\n // Just trigger loading of the tiddler\n this.wiki.getTiddlerText(this.imageSource)\n domNode.setAttribute('src', '')\n }\n }\n }\n // Assign the attributes\n if (this.imageClass) {\n domNode.setAttribute('class', this.imageClass)\n }\n if (this.imageWidth) {\n domNode.setAttribute('width', this.imageWidth)\n }\n if (this.imageHeight) {\n domNode.setAttribute('height', this.imageHeight)\n }\n if (this.imageTooltip) {\n domNode.setAttribute('title', this.imageTooltip)\n }\n if (this.imageAlt) {\n domNode.setAttribute('alt', this.imageAlt)\n }\n // Insert element\n parent.insertBefore(domNode, nextSibling)\n this.domNodes.push(domNode)\n }\n\n /*\nCompute the internal state of the widget\n*/\n ImageWidget.prototype.execute = function () {\n // Get our parameters\n this.imageSource = this.getAttribute('source')\n this.imageWidth = this.getAttribute('width')\n this.imageHeight = this.getAttribute('height')\n this.imageClass = this.getAttribute('class')\n this.imageTooltip = this.getAttribute('tooltip')\n this.imageAlt = this.getAttribute('alt')\n }\n\n /*\nSelectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n*/\n ImageWidget.prototype.refresh = function (changedTiddlers) {\n var changedAttributes = this.computeAttributes()\n if (\n changedAttributes.source ||\n changedAttributes.width ||\n changedAttributes.height ||\n changedAttributes.class ||\n changedAttributes.tooltip ||\n changedTiddlers[this.imageSource]\n ) {\n this.refreshSelf()\n return true\n } else {\n return false\n }\n }\n\n exports.image = ImageWidget\n})()\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/plugins/ipfs/ipfs-wiki.js": {
"title": "$:/plugins/ipfs/ipfs-wiki.js",
"text": "/*\\\ntitle: $:/plugins/ipfs/ipfs-wiki.js\ntype: application/javascript\ntags: $:/ipfs/core\nmodule-type: wikimethod\n\nwikimethod\n\n\\*/\n\n/**\n * TiddlyWiki created by Jeremy Ruston, (jeremy [at] jermolene [dot] com)\n *\n * Copyright (c) 2004-2007, Jeremy Ruston\n * Copyright (c) 2007-2018, UnaMesa Association\n * Copyright (c) 2019-2020, Blue Light\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * * Neither the name of the copyright holder nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n /*\n * Parse a block of text of a specified MIME type\n * type: content type of text to be parsed\n * text: text\n * options: see below\n * Options include:\n * parseAsInline: if true, the text of the tiddler will be parsed as an inline run\n * _canonical_uri: optional string of the canonical URI of this content\n */\n exports.parseText = function (type, text, options) {\n text = text || ''\n options = options || {}\n // Select a parser\n var Parser = $tw.Wiki.parsers[type]\n if (!Parser && $tw.utils.getFileExtensionInfo(type)) {\n Parser = $tw.Wiki.parsers[$tw.utils.getFileExtensionInfo(type).type]\n }\n if (!Parser) {\n Parser = $tw.Wiki.parsers[options.defaultType || 'text/vnd.tiddlywiki']\n }\n if (!Parser) {\n return null\n }\n // Return the parser instance\n return new Parser(type, text, {\n parseAsInline: options.parseAsInline,\n wiki: this,\n _canonical_uri: options._canonical_uri,\n tiddler: options.tiddler\n })\n }\n\n /*\n * Parse a tiddler according to its MIME type\n */\n exports.parseTiddler = function (title, options) {\n options = $tw.utils.extend({}, options)\n var cacheType = options.parseAsInline ? 'inlineParseTree' : 'blockParseTree'\n var tiddler = this.getTiddler(title)\n var self = this\n return tiddler\n ? this.getCacheForTiddler(title, cacheType, function () {\n if (tiddler.hasField('_canonical_uri')) {\n options._canonical_uri = tiddler.fields._canonical_uri\n }\n options.tiddler = tiddler\n return self.parseText(\n tiddler.fields.type,\n tiddler.fields.text,\n options\n )\n })\n : null\n }\n})()\n",
"type": "application/javascript",
"tags": "$:/ipfs/core",
"module-type": "wikimethod"
},
"$:/core/ui/ControlPanel/Saving/General": {
"title": "$:/core/ui/ControlPanel/Saving/General",
"modified": "20200528094915385",
"tags": "$:/tags/ControlPanel/Saving",
"caption": "{{$:/language/ControlPanel/Saving/General/Caption}}",
"list-before": "",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/\n\n\\define ipfs-saver()\n<$text text=<<ipfs-info-saver \"$(currentTiddler)$\">>/>\n\\end\n\n{{$:/language/ControlPanel/Saving/General/Hint}}\n\n!! <$link to=\"$:/config/PreferredSaver\"><<lingo PreferredSaver/Caption>></$link>\n\n<$select tiddler=\"$:/config/PreferredSaver\">\n<$list filter=\"[savers[]]\">\n<option value=<<currentTiddler>>><<ipfs-saver>></option>\n</$list>\n</$select>\n\n!! <$link to=\"$:/config/AutoSave\"><<lingo AutoSave/Caption>></$link>\n\n<<lingo AutoSave/Hint>>\n\n<$radio tiddler=\"$:/config/AutoSave\" value=\"yes\"> <<lingo AutoSave/Enabled/Description>> </$radio>\n\n<$radio tiddler=\"$:/config/AutoSave\" value=\"no\"> <<lingo AutoSave/Disabled/Description>> </$radio>\n"
},
"$:/core/ui/ControlPanel/Toolbars/ItemTemplate": {
"title": "$:/core/ui/ControlPanel/Toolbars/ItemTemplate",
"modified": "20200528094915385",
"text": "\\define config-title()\n$(config-base)$$(currentTiddler)$\n\\end\n\n<$draggable tiddler=<<currentTiddler>>>\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <span class=\"tc-icon-wrapper tc-icon-ipfs-wrapper\"> <$transclude field=\"caption\"/> <i class=\"tc-muted\">-- <$transclude field=\"description\"/></i></span>\n</$draggable>\n"
},
"$:/core/ui/EditTemplate/body": {
"title": "$:/core/ui/EditTemplate/body",
"modified": "20200528094915385",
"tags": "$:/tags/EditTemplate",
"text": "\\define lingo-base() $:/language/EditTemplate/Body/\n\\define config-visibility-title()\n$:/config/EditorToolbarButtons/Visibility/$(currentTiddler)$\n\\end\n\n<$list filter=\"[all[current]has[_canonical_uri]]\">\n <div class=\"tc-message-box\">\n <<lingo External/Hint>>\n <p><$ipfslink field=\"_canonical_uri\" tiddler=<<currentTiddler>>/></p>\n </div>\n</$list>\n\n<$list filter=\"[all[current]!has[_canonical_uri]]\">\n <$reveal state=\"$:/state/showeditpreview\" type=\"match\" text=\"yes\">\n <div class=\"tc-tiddler-preview\">\n <$transclude tiddler=\"$:/core/ui/EditTemplate/body/editor\" mode=\"inline\"/>\n <div class=\"tc-tiddler-preview-preview\">\n <$transclude tiddler={{$:/state/editpreviewtype}} mode=\"inline\">\n <$transclude tiddler=\"$:/core/ui/EditTemplate/body/preview/output\" mode=\"inline\"/>\n </$transclude>\n </div>\n </div>\n </$reveal>\n <$reveal state=\"$:/state/showeditpreview\" type=\"nomatch\" text=\"yes\">\n <$transclude tiddler=\"$:/core/ui/EditTemplate/body/editor\" mode=\"inline\"/>\n </$reveal>\n</$list>"
},
"$:/core/ui/EditTemplate/fields": {
"title": "$:/core/ui/EditTemplate/fields",
"modified": "20200528094915385",
"tags": "$:/tags/EditTemplate",
"text": "\\define lingo-base() $:/language/EditTemplate/\n\\define config-title()\n$:/config/EditTemplateFields/Visibility/$(currentField)$\n\\end\n\n\\define config-filter()\n[[hide]] -[title{$(config-title)$}]\n\\end\n\n\\define current-tiddler-new-field-selector()\n[data-tiddler-title=\"$(currentTiddlerCSSescaped)$\"] .tc-edit-field-add-name input\n\\end\n\n\\define new-field-actions()\n<$action-sendmessage $message=\"tm-add-field\" $name={{{ [<newFieldNameTiddler>get[text]] }}} $value={{{ [<newFieldValueTiddler>get[text]] }}}/>\n<$action-deletetiddler $tiddler=<<newFieldNameTiddler>>/>\n<$action-deletetiddler $tiddler=<<newFieldValueTiddler>>/>\n<$action-sendmessage $message=\"tm-focus-selector\" $param=<<current-tiddler-new-field-selector>>/>\n\\end\n\n\\define new-field()\n<$vars name={{{ [<newFieldNameTiddler>get[text]] }}}>\n<$reveal type=\"nomatch\" text=\"\" default=<<name>>>\n<$button tooltip=<<lingo Fields/Add/Button/Hint>>>\n<$action-sendmessage $message=\"tm-add-field\"\n$name=<<name>>\n$value={{{ [<newFieldValueTiddler>get[text]] }}}/>\n<$action-deletetiddler $tiddler=<<newFieldNameTiddler>>/>\n<$action-deletetiddler $tiddler=<<newFieldValueTiddler>>/>\n<<lingo Fields/Add/Button>>\n</$button>\n</$reveal>\n<$reveal type=\"match\" text=\"\" default=<<name>>>\n<$button>\n<<lingo Fields/Add/Button>>\n</$button>\n</$reveal>\n</$vars>\n\\end\n\\whitespace trim\n\n<div class=\"tc-edit-fields\">\n<table class=\"tc-edit-fields\">\n<tbody>\n<$list filter=\"[all[current]fields[]] +[sort[title]]\" variable=\"currentField\" storyview=\"pop\">\n<$list filter=<<config-filter>> variable=\"temp\">\n<tr class=\"tc-edit-field\">\n<td class=\"tc-edit-field-name\">\n<$ipfslink value=<<currentField>> field=<<currentField>> tiddler=<<currentTiddler>>/>\n</td>\n<td class=\"tc-edit-field-value\">\n<$edit-text tiddler=<<currentTiddler>> field=<<currentField>> placeholder={{$:/language/EditTemplate/Fields/Add/Value/Placeholder}} tabindex={{$:/config/EditTabIndex}}/>\n</td>\n<td class=\"tc-edit-field-remove\">\n<$button class=\"tc-btn-invisible\" tooltip={{$:/language/EditTemplate/Field/Remove/Hint}} aria-label={{$:/language/EditTemplate/Field/Remove/Caption}}>\n<$action-deletefield $field=<<currentField>>/>\n{{$:/core/images/delete-button}}\n</$button>\n</td>\n</tr>\n</$list>\n</$list>\n</tbody>\n</table>\n</div>\n\n<$fieldmangler>\n<div class=\"tc-edit-field-add\">\n<em class=\"tc-edit\">\n<<lingo Fields/Add/Prompt>> \n</em>\n<span class=\"tc-edit-field-add-name\">\n<$edit-text tiddler=<<newFieldNameTiddler>> tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Fields/Add/Name/Placeholder}} focusPopup=<<qualify \"$:/state/popup/field-dropdown\">> class=\"tc-edit-texteditor tc-popup-handle\" tabindex={{$:/config/EditTabIndex}} focus={{{ [{$:/config/AutoFocus}match[fields]then[true]] ~[[false]] }}}/>\n</span> \n<$button popup=<<qualify \"$:/state/popup/field-dropdown\">> class=\"tc-btn-invisible tc-btn-dropdown\" tooltip={{$:/language/EditTemplate/Field/Dropdown/Hint}} aria-label={{$:/language/EditTemplate/Field/Dropdown/Caption}}>{{$:/core/images/down-arrow}}</$button> \n<$reveal state=<<qualify \"$:/state/popup/field-dropdown\">> type=\"nomatch\" text=\"\" default=\"\">\n<div class=\"tc-block-dropdown tc-edit-type-dropdown\">\n<$set name=\"tv-show-missing-links\" value=\"yes\">\n<$linkcatcher to=<<newFieldNameTiddler>>>\n<div class=\"tc-dropdown-item\">\n<<lingo Fields/Add/Dropdown/User>>\n</div>\n<$set name=\"newFieldName\" value={{{ [<newFieldNameTiddler>get[text]] }}}>\n<$list filter=\"[!is[shadow]!is[system]fields[]search:title<newFieldName>sort[]] -created -creator -draft.of -draft.title -modified -modifier -tags -text -title -type\" variable=\"currentField\">\n<$link to=<<currentField>>>\n<$text text=<<currentField>>/>\n</$link>\n</$list>\n<div class=\"tc-dropdown-item\">\n<<lingo Fields/Add/Dropdown/System>>\n</div>\n<$list filter=\"[fields[]search:title<newFieldName>sort[]] -[!is[shadow]!is[system]fields[]]\" variable=\"currentField\">\n<$link to=<<currentField>>>\n<$text text=<<currentField>>/>\n</$link>\n</$list>\n</$set>\n</$linkcatcher>\n</$set>\n</div>\n</$reveal>\n<span class=\"tc-edit-field-add-value\">\n<$set name=\"currentTiddlerCSSescaped\" value={{{ [<currentTiddler>escapecss[]] }}}>\n<$keyboard key=\"((add-field))\" actions=<<new-field-actions>>>\n<$edit-text tiddler=<<newFieldValueTiddler>> tag=\"input\" default=\"\" placeholder={{$:/language/EditTemplate/Fields/Add/Value/Placeholder}} class=\"tc-edit-texteditor\" tabindex={{$:/config/EditTabIndex}}/>\n</$keyboard>\n</$set>\n</span> \n<span class=\"tc-edit-field-add-button\">\n<$macrocall $name=\"new-field\"/>\n</span>\n</div>\n</$fieldmangler>"
},
"$:/core/ui/EditTemplate": {
"title": "$:/core/ui/EditTemplate",
"modified": "20200528094915385",
"text": "\\define save-tiddler-actions()\n<$action-sendmessage $message=\"tm-add-tag\" $param={{{ [<newTagNameTiddler>get[text]] }}}/>\n<$action-deletetiddler $tiddler=<<newTagNameTiddler>>/>\n<$action-sendmessage $message=\"tm-add-field\" $name={{{ [<newFieldNameTiddler>get[text]] }}} $value={{{ [<newFieldValueTiddler>get[text]] }}}/>\n<$action-deletetiddler $tiddler=<<newFieldNameTiddler>>/>\n<$action-deletetiddler $tiddler=<<newFieldValueTiddler>>/>\n<$action-sendmessage $message=\"tm-save-tiddler\"/>\n\\end\n<div data-tiddler-title=<<currentTiddler>> data-tags={{!!tags}} class={{{ tc-tiddler-frame tc-tiddler-edit-frame [<currentTiddler>is[tiddler]then[tc-tiddler-exists]] [<currentTiddler>is[missing]!is[shadow]then[tc-tiddler-missing]] [<currentTiddler>is[shadow]then[tc-tiddler-exists tc-tiddler-shadow]] [<currentTiddler>is[system]then[tc-tiddler-system]] [{!!class}] [<currentTiddler>tags[]encodeuricomponent[]addprefix[tc-tagged-]] +[join[ ]] }}}>\n<$fieldmangler>\n<$vars storyTiddler=<<currentTiddler>> newTagNameTiddler=<<qualify \"$:/temp/NewTagName\">> newFieldNameTiddler=<<qualify \"$:/temp/NewFieldName\">> newFieldValueTiddler=<<qualify \"$:/temp/NewFieldValue\">>>\n<$keyboard key=\"((cancel-edit-tiddler))\" message=\"tm-cancel-tiddler\">\n<$keyboard key=\"((save-tiddler))\" actions=<<save-tiddler-actions>>>\n<$list filter=\"[all[shadows+tiddlers]list[$:/tags/EditTemplate]!has[draft.of]]\" variable=\"listItem\">\n<$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\">\n<$transclude tiddler=<<listItem>>/>\n</$set>\n</$list>\n</$keyboard>\n</$keyboard>\n</$vars>\n</$fieldmangler>\n</div>"
},
"$:/core/ui/SideBar/Tools": {
"title": "$:/core/ui/SideBar/Tools",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/tags/SideBar",
"caption": "{{$:/language/SideBar/Tools/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/\n\\define config-title()\n$:/config/PageControlButtons/Visibility/$(listItem)$\n\\end\n\n<<lingo Basics/Version/Prompt>> <b><<version>></b>, <<lingo Ipfs/Version/Prompt>> <b><<ipfs-plugin-version>></b>\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-class\" value=\"\">\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]\" variable=\"listItem\">\n\n<div style=\"position:relative;\" class={{{ [<listItem>encodeuricomponent[]addprefix[tc-btn-]] }}}>\n\n<$checkbox tiddler=<<config-title>> field=\"text\" checked=\"show\" unchecked=\"hide\" default=\"show\"/> <$transclude tiddler=<<listItem>>/> <i class=\"tc-muted\"><$transclude tiddler=<<listItem>> field=\"description\"/></i>\n\n</div>\n\n</$list>\n\n</$set>\n\n</$set>\n\n</$set>"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/3box/profile": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/3box/profile",
"modified": "20200529094915385",
"tags": "$:/ipfs/core",
"text": "show"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/encryption": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/encryption",
"modified": "20200529094915385",
"tags": "$:/ipfs/core",
"text": "show"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/home": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/home",
"modified": "20200529094915385",
"tags": "$:/ipfs/core",
"text": "show"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/ipfs/pin": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/ipfs/pin",
"modified": "20200529094915385",
"tags": "$:/ipfs/core",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/ipfs/unpin": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/ipfs/unpin",
"modified": "20200529094915385",
"tags": "$:/ipfs/core",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/ipfs/console/mobile": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/ipfs/console/mobile",
"modified": "20200529094915385",
"tags": "$:/ipfs/core",
"text": "show"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/more-page-actions": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/more-page-actions",
"modified": "20200529094915385",
"tags": "$:/ipfs/core",
"text": "show"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/ens/publish": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/ens/publish",
"modified": "20200529094915385",
"tags": "$:/ipfs/core",
"text": "hide"
},
"$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/ipns/publish": {
"title": "$:/config/PageControlButtons/Visibility/$:/core/ui/Buttons/ipns/publish",
"modified": "20200529094915385",
"tags": "$:/ipfs/core",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/ipfs/export": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/ipfs/export",
"modified": "20200529094915385",
"tags": "$:/ipfs/core",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/ipfs/export/content": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/ipfs/export/content",
"modified": "20200529094915385",
"tags": "$:/ipfs/core",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/ipfs/export/attachment": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/ipfs/export/attachment",
"modified": "20200529094915385",
"tags": "$:/ipfs/core",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/ipfs/refresh": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/ipfs/refresh",
"modified": "20200529094915385",
"tags": "$:/ipfs/core",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/ipfs/tiddler/pin": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/ipfs/tiddler/pin",
"modified": "20200529094915385",
"tags": "$:/ipfs/core",
"text": "hide"
},
"$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/ipfs/tiddler/unpin": {
"title": "$:/config/ViewToolbarButtons/Visibility/$:/core/ui/Buttons/ipfs/tiddler/unpin",
"modified": "20200529094915385",
"tags": "$:/ipfs/core",
"text": "hide"
},
"$:/plugins/ipfs/ens-action.js": {
"title": "$:/plugins/ipfs/ens-action.js",
"text": "/*\\\ntitle: $:/plugins/ipfs/ens-action.js\ntype: application/javascript\ntags: $:/ipfs/core\nmodule-type: library\n\nENS Action\n\n\\*/\n\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n const fileProtocol = 'file:'\n\n const name = 'ens-action'\n\n var EnsAction = function () {\n this.once = false\n }\n\n EnsAction.prototype.getLogger = function () {\n return window.log.getLogger(name)\n }\n\n EnsAction.prototype.init = function () {\n // Init once\n if (this.once) {\n return\n }\n const self = this\n $tw.rootWidget.addEventListener('tm-ens-manager-open', function (event) {\n return self.handleOpenEnsManager(event)\n })\n $tw.rootWidget.addEventListener('tm-ens-resolve-and-open', async function (\n event\n ) {\n return await self.handleResolveEnsAndOpen(event)\n })\n $tw.rootWidget.addEventListener('tm-ens-publish', async function (event) {\n return await self.handlePublishToEns(event)\n })\n // Init once\n this.once = true\n }\n\n EnsAction.prototype.handleOpenEnsManager = function (event) {\n // Retrieve ENS domain\n const ensDomain = $tw.utils.getIpfsEnsDomain()\n // Check\n if (ensDomain == null) {\n window.open('https://app.ens.domains', '_blank', 'noopener,noreferrer')\n } else {\n window.open(\n `https://app.ens.domains/name/${ensDomain}`,\n '_blank',\n 'noopener,noreferrer'\n )\n }\n return true\n }\n\n EnsAction.prototype.handleResolveEnsAndOpen = async function (event) {\n const ensDomain = $tw.utils.getIpfsEnsDomain()\n if (ensDomain == null) {\n $tw.utils.alert(name, 'Undefined ENS domain...')\n return false\n }\n try {\n this.getLogger().info(`ENS domain: ${ensDomain}`)\n const { resolvedUrl } = await $tw.ipfs.resolveEns(ensDomain)\n if (resolvedUrl !== null) {\n window.open(resolvedUrl.toString(), '_blank', 'noopener,noreferrer')\n }\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n return false\n }\n return true\n }\n\n EnsAction.prototype.handlePublishToEns = async function (event) {\n const self = this\n const wiki = $tw.ipfs.getDocumentUrl()\n if (wiki.protocol === fileProtocol) {\n $tw.utils.alert(name, 'Undefined IPFS identifier...')\n return false\n }\n if (wiki.pathname === '/') {\n $tw.utils.alert(name, 'Unknown IPFS identifier...')\n return false\n }\n var cid = null\n var ensCid = null\n var ensResolvedUrl = null\n var ipnsKey = null\n try {\n var { cid, ipnsKey } = await $tw.ipfs.resolveUrl(true, false, wiki)\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n return false\n }\n const ensDomain = $tw.utils.getIpfsEnsDomain()\n if (ensDomain == null) {\n $tw.utils.alert(name, 'Undefined ENS domain...')\n return false\n }\n if (cid == null && ipnsKey !== null) {\n $tw.utils.alert(name, 'Nothing to publish to ENS...')\n return false\n }\n try {\n var {\n cid: ensCid,\n resolvedUrl: ensResolvedUrl\n } = await $tw.ipfs.resolveUrl(false, true, ensDomain)\n if (cid !== null && ensCid !== null && cid === ensCid) {\n $tw.utils.alert(\n name,\n 'The current resolved ENS domain content is up to date...'\n )\n return false\n }\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n return false\n }\n if (cid !== null) {\n $tw.utils.alert(name, `Publishing to ENS: ${ensDomain}`)\n $tw.ipfs\n .requestToUnpin(ensCid)\n .then(data => {\n if (data) {\n $tw.ipfs.removeFromPinUnpin(ensCid, ensResolvedUrl)\n }\n $tw.ipfs\n .setEns(ensDomain, cid)\n .then(data => {\n $tw.utils.alert(name, 'Successfully published to ENS...')\n })\n .catch(error => {\n $tw.ipfs.requestToPin(ensCid)\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n })\n .catch(error => {\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n } else if (ipnsKey !== null) {\n $tw.utils.alert(name, `Publishing to ENS: ${ensDomain}`)\n $tw.ipfs\n .resolveUrl(true, false, wiki)\n .then(data => {\n const { cid: ipnsCid } = data\n $tw.ipfs\n .requestToUnpin(ensCid)\n .then(data => {\n if (data) {\n $tw.ipfs.removeFromPinUnpin(ensCid, ensResolvedUrl)\n }\n $tw.ipfs\n .setEns(ensDomain, ipnsCid)\n .then(data => {\n $tw.utils.alert(name, 'Successfully Published to ENS...')\n })\n .catch(error => {\n $tw.ipfs.requestToPin(ensCid)\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n })\n .catch(error => {\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n })\n .catch(error => {\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n }\n return true\n }\n\n exports.EnsAction = EnsAction\n})()\n",
"type": "application/javascript",
"tags": "$:/ipfs/core",
"module-type": "library"
},
"$:/plugins/ipfs/ens-wrapper.js": {
"title": "$:/plugins/ipfs/ens-wrapper.js",
"text": "/*\\\ntitle: $:/plugins/ipfs/ens-wrapper.js\ntype: application/javascript\ntags: $:/ipfs/core\nmodule-type: library\n\nENS Wrapper\n\n\\*/\n\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n /**\n * https://github.com/purposeindustries/window-or-global\n * The MIT License (MIT) Copyright (c) Purpose Industries\n * version: 1.0.1\n */\n const root =\n (typeof self === 'object' && self.self === self && self) ||\n (typeof global === 'object' && global.global === global && global) ||\n this\n\n const name = 'ens-wrapper'\n\n var EnsWrapper = function (ipfsBundle) {\n this.account = null\n this.chainId = null\n this.ethereum = null\n this.provider = null\n this.web3 = null\n this.ipfsBundle = ipfsBundle\n this.boxLibrary = ipfsBundle.boxLibrary\n this.ensLibrary = ipfsBundle.ensLibrary\n }\n\n EnsWrapper.prototype.getLogger = function () {\n return root.log.getLogger(name)\n }\n\n EnsWrapper.prototype.load3BoxProfile = async function () {\n const { account } = await this.getEnabledWeb3Provider()\n return await this.boxLibrary.load3BoxProfile(\n this.getEthereumProvider(),\n account\n )\n }\n\n EnsWrapper.prototype.getChainId = function () {\n return this.chainId\n }\n\n EnsWrapper.prototype.getEthereumProvider = function () {\n if (this.ethereum == null) {\n const self = this\n this.ethereum = this.ensLibrary.getProvider()\n // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1193.md\n this.ethereum.on('accountsChanged', function accountChanged (accounts) {\n self.accountChanged(accounts)\n })\n this.ethereum.on('chainChanged', function networkChanged (chainId) {\n self.networkChanged(chainId)\n })\n this.ethereum.on('close', function closeProvider (code, reason) {\n self.closeConnection(code, reason)\n })\n this.ethereum.on('networkChanged', function networkChanged (chainId) {\n self.networkChanged(chainId)\n })\n }\n return this.ethereum\n }\n\n EnsWrapper.prototype.accountChanged = async function (accounts) {\n if (\n accounts === undefined ||\n accounts == null ||\n Array.isArray(accounts) === false ||\n accounts.length === 0\n ) {\n this.web3 = null\n this.chainId = null\n this.account = null\n this.getLogger().info('Closing Ethereum connection...')\n } else if (this.account !== accounts[0]) {\n try {\n if (this.web3 == null && this.chainId == null) {\n const { web3, chainId } = await this.getWeb3Provider()\n this.web3 = web3\n this.chainId = chainId\n }\n this.account = accounts[0]\n const etherscan = this.getEtherscanRegistry()\n this.getLogger().info(\n `Current Ethereum account:\\n ${etherscan[this.chainId]}/address/${\n this.account\n }`\n )\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n }\n }\n }\n\n EnsWrapper.prototype.closeConnection = function (code, reason) {\n this.web3 = null\n this.chainId = null\n this.account = null\n this.getLogger().info(\n `Closing Ethereum Connection:\\n Reason: ${reason}\\n Code: ${code}`\n )\n }\n\n EnsWrapper.prototype.networkChanged = function (chainId) {\n if (this.chainId !== chainId) {\n const network = this.getNetwork()\n try {\n this.web3 = null\n this.chainId = chainId\n this.account = null\n this.getLogger().info(`Current Ethereum network:\\n ${network[chainId]}`)\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n }\n }\n }\n\n EnsWrapper.prototype.getEnabledWeb3Provider = async function () {\n var web3 = null\n var chainId = null\n var account = null\n const provider = this.getEthereumProvider()\n const network = this.getNetwork()\n const etherscan = this.getEtherscanRegistry()\n var msg = 'Reuse Web3 provider:'\n if (this.account == null) {\n try {\n var {\n web3,\n chainId,\n account\n } = await this.ensLibrary.getEnabledWeb3Provider(provider)\n } catch (error) {\n this.getLogger().error(error)\n throw new Error('Unable to retrieve an enabled Ethereum provider...')\n }\n this.web3 = web3\n this.chainId = chainId\n this.account = account\n msg = 'New Web3 provider:'\n }\n // Log\n this.getLogger().info(\n `${msg}\\n network: ${network[this.chainId]}\\n account: ${\n etherscan[this.chainId]\n }/address/${this.account}`\n )\n return {\n web3: this.web3,\n chainId: this.chainId,\n account: this.account\n }\n }\n\n EnsWrapper.prototype.getWeb3Provider = async function () {\n var web3 = null\n var chainId = null\n const provider = this.getEthereumProvider()\n const network = this.getNetwork()\n var info = 'Reuse Web3 provider:'\n if (this.web3 == null) {\n try {\n var { web3, chainId } = await this.ensLibrary.getWeb3Provider(provider)\n } catch (error) {\n this.getLogger().error(error)\n throw new Error('Unable to retrieve an Ethereum provider...')\n }\n this.web3 = web3\n this.chainId = chainId\n info = 'New Web3 provider:'\n }\n // Log\n this.getLogger().info(`${info}\\n network: ${network[this.chainId]}`)\n return {\n web3: this.web3,\n chainId: this.chainId\n }\n }\n\n EnsWrapper.prototype.getContentHash = async function (domain, web3) {\n try {\n var { content, protocol } = await this.ensLibrary.getContentHash(\n domain,\n web3\n )\n if (content !== null && protocol !== null) {\n // Convert CidV0 to CidV1\n content = this.ipfsBundle.cidV0ToCidV1(content)\n // Success\n return {\n content: content,\n protocol: protocol\n }\n }\n $tw.utils.alert(name, 'Unassigned ENS domain content...')\n return {\n content: null,\n protocol: null\n }\n } catch (error) {\n this.getLogger().error(error)\n throw new Error('Unable to fetch ENS domain content...')\n }\n }\n\n EnsWrapper.prototype.setContentHash = async function (\n domain,\n cid,\n web3,\n account\n ) {\n try {\n const isOwner = await this.ensLibrary.isOwner(domain, web3, account)\n if (isOwner === false) {\n const error = new Error(\n 'Unauthorized Owner. Unable to set ENS domain content...'\n )\n error.name = 'OwnerError'\n throw error\n }\n const cidV0 = this.ipfsBundle.cidV1ToCidV0(cid)\n await this.ensLibrary.setContentHash(domain, cidV0, web3, account)\n return {\n cidV0: cidV0\n }\n } catch (error) {\n if (error.name === 'OwnerError') {\n throw error\n }\n this.getLogger().error(error)\n throw new Error('Unable to set ENS domain content...')\n }\n }\n\n EnsWrapper.prototype.getEtherscanRegistry = function () {\n return this.ensLibrary.getEtherscanRegistry()\n }\n\n EnsWrapper.prototype.getNetwork = function () {\n return this.ensLibrary.getNetwork()\n }\n\n EnsWrapper.prototype.getENSRegistry = function () {\n return this.ensLibrary.getENSRegistry()\n }\n\n exports.EnsWrapper = EnsWrapper\n})()\n",
"type": "application/javascript",
"tags": "$:/ipfs/core",
"module-type": "library"
},
"$:/plugins/ipfs/loglevel/loglevel.js": {
"text": "/*\n* loglevel - https://github.com/pimterry/loglevel\n*\n* Copyright (c) 2013 Tim Perry\n* Licensed under the MIT license.\n*/\n(function (root, definition) {\n \"use strict\";\n if (typeof define === 'function' && define.amd) {\n define(definition);\n } else if (typeof module === 'object' && module.exports) {\n module.exports = definition();\n } else {\n root.log = definition();\n }\n}(this, function () {\n \"use strict\";\n\n // Slightly dubious tricks to cut down minimized file size\n var noop = function() {};\n var undefinedType = \"undefined\";\n var isIE = (typeof window !== undefinedType) && (typeof window.navigator !== undefinedType) && (\n /Trident\\/|MSIE /.test(window.navigator.userAgent)\n );\n\n var logMethods = [\n \"trace\",\n \"debug\",\n \"info\",\n \"warn\",\n \"error\"\n ];\n\n // Cross-browser bind equivalent that works at least back to IE6\n function bindMethod(obj, methodName) {\n var method = obj[methodName];\n if (typeof method.bind === 'function') {\n return method.bind(obj);\n } else {\n try {\n return Function.prototype.bind.call(method, obj);\n } catch (e) {\n // Missing bind shim or IE8 + Modernizr, fallback to wrapping\n return function() {\n return Function.prototype.apply.apply(method, [obj, arguments]);\n };\n }\n }\n }\n\n // Trace() doesn't print the message in IE, so for that case we need to wrap it\n function traceForIE() {\n if (console.log) {\n if (console.log.apply) {\n console.log.apply(console, arguments);\n } else {\n // In old IE, native console methods themselves don't have apply().\n Function.prototype.apply.apply(console.log, [console, arguments]);\n }\n }\n if (console.trace) console.trace();\n }\n\n // Build the best logging method possible for this env\n // Wherever possible we want to bind, not wrap, to preserve stack traces\n function realMethod(methodName) {\n if (methodName === 'debug') {\n methodName = 'log';\n }\n\n if (typeof console === undefinedType) {\n return false; // No method possible, for now - fixed later by enableLoggingWhenConsoleArrives\n } else if (methodName === 'trace' && isIE) {\n return traceForIE;\n } else if (console[methodName] !== undefined) {\n return bindMethod(console, methodName);\n } else if (console.log !== undefined) {\n return bindMethod(console, 'log');\n } else {\n return noop;\n }\n }\n\n // These private functions always need `this` to be set properly\n\n function replaceLoggingMethods(level, loggerName) {\n /*jshint validthis:true */\n for (var i = 0; i < logMethods.length; i++) {\n var methodName = logMethods[i];\n this[methodName] = (i < level) ?\n noop :\n this.methodFactory(methodName, level, loggerName);\n }\n\n // Define log.log as an alias for log.debug\n this.log = this.debug;\n }\n\n // In old IE versions, the console isn't present until you first open it.\n // We build realMethod() replacements here that regenerate logging methods\n function enableLoggingWhenConsoleArrives(methodName, level, loggerName) {\n return function () {\n if (typeof console !== undefinedType) {\n replaceLoggingMethods.call(this, level, loggerName);\n this[methodName].apply(this, arguments);\n }\n };\n }\n\n // By default, we use closely bound real methods wherever possible, and\n // otherwise we wait for a console to appear, and then try again.\n function defaultMethodFactory(methodName, level, loggerName) {\n /*jshint validthis:true */\n return realMethod(methodName) ||\n enableLoggingWhenConsoleArrives.apply(this, arguments);\n }\n\n function Logger(name, defaultLevel, factory) {\n var self = this;\n var currentLevel;\n var storageKey = \"loglevel\";\n if (name) {\n storageKey += \":\" + name;\n }\n\n function persistLevelIfPossible(levelNum) {\n var levelName = (logMethods[levelNum] || 'silent').toUpperCase();\n\n if (typeof window === undefinedType) return;\n\n // Use localStorage if available\n try {\n window.localStorage[storageKey] = levelName;\n return;\n } catch (ignore) {}\n\n // Use session cookie as fallback\n try {\n window.document.cookie =\n encodeURIComponent(storageKey) + \"=\" + levelName + \";\";\n } catch (ignore) {}\n }\n\n function getPersistedLevel() {\n var storedLevel;\n\n if (typeof window === undefinedType) return;\n\n try {\n storedLevel = window.localStorage[storageKey];\n } catch (ignore) {}\n\n // Fallback to cookies if local storage gives us nothing\n if (typeof storedLevel === undefinedType) {\n try {\n var cookie = window.document.cookie;\n var location = cookie.indexOf(\n encodeURIComponent(storageKey) + \"=\");\n if (location !== -1) {\n storedLevel = /^([^;]+)/.exec(cookie.slice(location))[1];\n }\n } catch (ignore) {}\n }\n\n // If the stored level is not valid, treat it as if nothing was stored.\n if (self.levels[storedLevel] === undefined) {\n storedLevel = undefined;\n }\n\n return storedLevel;\n }\n\n /*\n *\n * Public logger API - see https://github.com/pimterry/loglevel for details\n *\n */\n\n self.name = name;\n\n self.levels = { \"TRACE\": 0, \"DEBUG\": 1, \"INFO\": 2, \"WARN\": 3,\n \"ERROR\": 4, \"SILENT\": 5};\n\n self.methodFactory = factory || defaultMethodFactory;\n\n self.getLevel = function () {\n return currentLevel;\n };\n\n self.setLevel = function (level, persist) {\n if (typeof level === \"string\" && self.levels[level.toUpperCase()] !== undefined) {\n level = self.levels[level.toUpperCase()];\n }\n if (typeof level === \"number\" && level >= 0 && level <= self.levels.SILENT) {\n currentLevel = level;\n if (persist !== false) { // defaults to true\n persistLevelIfPossible(level);\n }\n replaceLoggingMethods.call(self, level, name);\n if (typeof console === undefinedType && level < self.levels.SILENT) {\n return \"No console available for logging\";\n }\n } else {\n throw \"log.setLevel() called with invalid level: \" + level;\n }\n };\n\n self.setDefaultLevel = function (level) {\n if (!getPersistedLevel()) {\n self.setLevel(level, false);\n }\n };\n\n self.enableAll = function(persist) {\n self.setLevel(self.levels.TRACE, persist);\n };\n\n self.disableAll = function(persist) {\n self.setLevel(self.levels.SILENT, persist);\n };\n\n // Initialize with the right level\n var initialLevel = getPersistedLevel();\n if (initialLevel == null) {\n initialLevel = defaultLevel == null ? \"WARN\" : defaultLevel;\n }\n self.setLevel(initialLevel, false);\n }\n\n /*\n *\n * Top-level API\n *\n */\n\n var defaultLogger = new Logger();\n\n var _loggersByName = {};\n defaultLogger.getLogger = function getLogger(name) {\n if (typeof name !== \"string\" || name === \"\") {\n throw new TypeError(\"You must supply a name when creating a logger.\");\n }\n\n var logger = _loggersByName[name];\n if (!logger) {\n logger = _loggersByName[name] = new Logger(\n name, defaultLogger.getLevel(), defaultLogger.methodFactory);\n }\n return logger;\n };\n\n // Grab the current global log variable in case of overwrite\n var _log = (typeof window !== undefinedType) ? window.log : undefined;\n defaultLogger.noConflict = function() {\n if (typeof window !== undefinedType &&\n window.log === defaultLogger) {\n window.log = _log;\n }\n\n return defaultLogger;\n };\n\n defaultLogger.getLoggers = function getLoggers() {\n return _loggersByName;\n };\n\n return defaultLogger;\n}));\n",
"type": "application/javascript",
"title": "$:/plugins/ipfs/loglevel/loglevel.js",
"global-module": "true",
"module-type": "library"
},
"$:/plugins/ipfs/loglevel/license": {
"text": "Copyright (c) 2013 Tim Perry\r\n\r\nPermission is hereby granted, free of charge, to any person\r\nobtaining a copy of this software and associated documentation\r\nfiles (the \"Software\"), to deal in the Software without\r\nrestriction, including without limitation the rights to use,\r\ncopy, modify, merge, publish, distribute, sublicense, and/or sell\r\ncopies of the Software, and to permit persons to whom the\r\nSoftware is furnished to do so, subject to the following\r\nconditions:\r\n\r\nThe above copyright notice and this permission notice shall be\r\nincluded in all copies or substantial portions of the Software.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\r\nOF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\r\nHOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\r\nWHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\r\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\r\nOTHER DEALINGS IN THE SOFTWARE.\r\n",
"type": "text/plain",
"title": "$:/plugins/ipfs/loglevel/license"
},
"$:/plugins/ipfs/ipfs-action.js": {
"title": "$:/plugins/ipfs/ipfs-action.js",
"text": "/*\\\ntitle: $:/plugins/ipfs/ipfs-action.js\ntype: application/javascript\ntags: $:/ipfs/core\nmodule-type: library\n\nIPFS Action\n\n\\*/\n\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n const fileProtocol = 'file:'\n const ipfsKeyword = 'ipfs'\n const ipnsKeyword = 'ipns'\n\n const name = 'ipfs-action'\n\n var IpfsAction = function () {\n this.once = false\n this.console = false\n this.ipnsName = $tw.utils.getIpfsIpnsName()\n this.ipnsKey = $tw.utils.getIpfsIpnsKey()\n }\n\n IpfsAction.prototype.getLogger = function () {\n return window.log.getLogger(name)\n }\n\n IpfsAction.prototype.init = function () {\n // Init once\n if (this.once) {\n return\n }\n const self = this\n // Widget\n $tw.rootWidget.addEventListener('tm-3box-profile', async function (event) {\n return await self.handle3BoxProfile(event)\n })\n $tw.rootWidget.addEventListener('tm-ipfs-export', async function (event) {\n return await self.handleExportToIpfs(event, false)\n })\n $tw.rootWidget.addEventListener('tm-ipfs-export-content', async function (\n event\n ) {\n return await self.handleExportToIpfs(event, true)\n })\n $tw.rootWidget.addEventListener('tm-ipns-fetch', async function (event) {\n return await self.handleFetchIpnsKey(event)\n })\n $tw.rootWidget.addEventListener('tm-ipns-generate', async function (event) {\n return await self.handleGenerateIpnsKey(event)\n })\n $tw.rootWidget.addEventListener('tm-console-mobile', async function (\n event\n ) {\n return await self.handleMobileConsole(event)\n })\n $tw.rootWidget.addEventListener(\n 'tm-ipfs-export-attachment',\n async function (event) {\n return await self.handleExportAttachmentToIpfs(event)\n }\n )\n $tw.rootWidget.addEventListener('tm-ipns-publish', async function (event) {\n return await self.handlePublishToIpns(event)\n })\n $tw.rootWidget.addEventListener('tm-ipns-remove', async function (event) {\n return await self.handleRemoveIpnsKey(event)\n })\n $tw.rootWidget.addEventListener('tm-ipns-rename', async function (event) {\n return await self.handleRenameIpnsName(event)\n })\n $tw.rootWidget.addEventListener('tm-ipns-resolve-and-open', async function (\n event\n ) {\n return await self.handleResolveIpnsKeyAndOpen(event)\n })\n // Init once\n this.once = true\n }\n\n IpfsAction.prototype.handle3BoxProfile = async function (event) {\n try {\n await $tw.ipfs.load3BoxProfile()\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n return false\n }\n return true\n }\n\n IpfsAction.prototype.handleExportToIpfs = async function (event, child) {\n var cid = null\n var ipnsKey = null\n var ipnsName = null\n var normalizedUrl = null\n var added = null\n var fields = []\n const self = this\n const title = event.tiddlerTitle\n var tiddler = $tw.wiki.getTiddler(title)\n var exportUri = tiddler.getFieldString('_export_uri')\n try {\n var { cid, ipnsKey, ipnsName, normalizedUrl } = await $tw.ipfs.resolveUrl(\n true,\n true,\n exportUri\n )\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n return false\n }\n // Retrieve content\n const content = await this.exportTiddler(child, exportUri, tiddler)\n // Check\n if (content == null) {\n return false\n }\n this.getLogger().info(`Uploading Tiddler: ${content.length} bytes`)\n try {\n var { added } = await $tw.ipfs.addToIpfs(content)\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n return false\n }\n // Prepare New value\n fields.push({ key: '_export_uri', value: `/${ipfsKeyword}/${added}` })\n var tiddler = $tw.wiki.getTiddler(title)\n var updatedTiddler = $tw.utils.updateTiddler({\n tiddler: tiddler,\n addTags: ['$:/isExported', '$:/isIpfs'],\n fields: fields\n })\n $tw.wiki.addTiddler(updatedTiddler)\n if (ipnsKey !== null) {\n $tw.utils.alert(name, `Publishing IPNS name: ${ipnsName}`)\n $tw.ipfs\n .pinToIpfs(added)\n .then(data => {\n $tw.ipfs\n .publishIpnsName(added, ipnsKey, ipnsName)\n .then(data => {\n fields.push({ key: '_export_uri', value: exportUri })\n tiddler = $tw.utils.updateTiddler({\n tiddler: tiddler,\n addTags: ['$:/isExported', '$:/isIpfs'],\n fields: fields\n })\n $tw.wiki.addTiddler(tiddler)\n $tw.utils.alert(\n name,\n `Successfully Published IPNS name: ${ipnsName}`\n )\n if ($tw.utils.getIpfsUnpin()) {\n $tw.ipfs\n .unpinFromIpfs(cid)\n .then(data => {\n if (data !== undefined && data !== null) {\n $tw.ipfs.removeFromPinUnpin(cid, normalizedUrl)\n }\n })\n .catch(error => {\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n }\n })\n .catch(error => {\n $tw.ipfs.requestToUnpin(added)\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n })\n .catch(error => {\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n } else if (\n normalizedUrl !== null &&\n normalizedUrl.hostname.endsWith('.eth')\n ) {\n $tw.utils.alert(name, `Publishing to ENS: ${normalizedUrl.hostname}`)\n $tw.ipfs\n .pinToIpfs(added)\n .then(data => {\n $tw.ipfs\n .setEns(normalizedUrl.hostname, added)\n .then(data => {\n fields.push({ key: '_export_uri', value: exportUri })\n tiddler = $tw.utils.updateTiddler({\n tiddler: tiddler,\n addTags: ['$:/isExported', '$:/isIpfs'],\n fields: fields\n })\n $tw.wiki.addTiddler(tiddler)\n $tw.utils.alert(name, 'Successfully Published to ENS...')\n if ($tw.utils.getIpfsUnpin()) {\n $tw.ipfs\n .unpinFromIpfs(cid)\n .then(data => {\n if (data !== undefined && data !== null) {\n $tw.ipfs.removeFromPinUnpin(cid, normalizedUrl)\n }\n })\n .catch(error => {\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n }\n })\n .catch(error => {\n $tw.ipfs.requestToUnpin(added)\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n })\n .catch(error => {\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n }\n return true\n }\n\n IpfsAction.prototype.handleExportAttachmentToIpfs = async function (event) {\n const title = event.tiddlerTitle\n var tiddler = $tw.wiki.getTiddler(title)\n const { type, info } = $tw.utils.getContentType(title, tiddler.fields.type)\n var added = null\n if (info.encoding !== 'base64' && type !== 'image/svg+xml') {\n $tw.utils.alert(name, 'This Tiddler do not contain any Attachment...')\n return false\n }\n // Do not process if _canonical_uri is set and the text field is empty\n const canonicalUri = tiddler.getFieldString('_canonical_uri')\n if (\n canonicalUri !== undefined &&\n canonicalUri !== null &&\n canonicalUri.trim() !== ''\n ) {\n $tw.utils.alert(name, 'Attachment is already published...')\n return false\n }\n try {\n const content = this.getAttachmentContent(tiddler)\n if (content == null) {\n return false\n }\n this.getLogger().info(`Uploading attachment: ${content.length} bytes`)\n var { added } = await $tw.ipfs.addToIpfs(content)\n $tw.ipfs.requestToPin(added)\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n return false\n }\n var addTags = []\n var removeTags = []\n if ($tw.crypto.hasPassword()) {\n addTags = ['$:/isAttachment', '$:/isIpfs']\n removeTags = ['$:/isEmbedded']\n } else {\n addTags = ['$:/isAttachment', '$:/isIpfs']\n removeTags = ['$:/isEmbedded']\n }\n // Update\n tiddler = $tw.utils.updateTiddler({\n tiddler: tiddler,\n addTags: addTags,\n removeTags: removeTags,\n fields: [\n { key: 'text', value: '' },\n { key: '_canonical_uri', value: `/${ipfsKeyword}/${added}` }\n ]\n })\n $tw.wiki.addTiddler(tiddler)\n return true\n }\n\n IpfsAction.prototype.getAttachmentContent = function (tiddler) {\n const { type, info } = $tw.utils.getContentType(\n tiddler.fields.title,\n tiddler.fields.type\n )\n if (info.encoding !== 'base64' && type !== 'image/svg+xml') {\n $tw.utils.alert(name, 'Unsupported Tiddler Content-Type...')\n return null\n }\n var text = tiddler.getFieldString('text')\n if (text === undefined || text == null || text === '') {\n $tw.utils.alert(name, 'Empty attachment content...')\n return null\n }\n if ($tw.crypto.hasPassword()) {\n try {\n // https://github.com/xmaysonnave/tiddlywiki-ipfs/issues/9\n if (info.encoding === 'base64') {\n text = atob(text)\n }\n text = $tw.crypto.encrypt(text, $tw.crypto.currentPassword)\n text = $tw.ipfs.StringToUint8Array(text)\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(\n name,\n 'Failed to process encrypted Attachment content...'\n )\n return null\n }\n } else {\n try {\n if (info.encoding === 'base64') {\n text = $tw.ipfs.Base64ToUint8Array(text)\n } else {\n text = $tw.ipfs.StringToUint8Array(text)\n }\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, 'Failed to process Attachment content...')\n return null\n }\n }\n return text\n }\n\n IpfsAction.prototype.handleRenameIpnsName = async function (event) {\n var ipnsKey = null\n var ipnsName = $tw.utils.getIpfsIpnsName()\n ipnsName =\n ipnsName === undefined || ipnsName == null || ipnsName.trim() === ''\n ? null\n : ipnsName.trim()\n if (ipnsName == null) {\n $tw.utils.alert(name, 'Undefined IPNS name....')\n return false\n }\n if (this.ipnsName == null || this.ipnsName === ipnsName) {\n $tw.utils.alert(name, 'Nothing to rename....')\n return false\n }\n try {\n var { ipnsKey } = await $tw.ipfs.renameIpnsName(this.ipnsName, ipnsName)\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n return false\n }\n var tiddler = $tw.wiki.getTiddler('$:/ipfs/saver/ipns/key')\n if (tiddler !== undefined && this.ipnsKey !== ipnsKey) {\n tiddler = $tw.utils.updateTiddler({\n tiddler: tiddler,\n fields: [{ key: 'text', value: ipnsKey }]\n })\n $tw.wiki.addTiddler(tiddler)\n }\n this.ipnsKey = ipnsKey\n this.ipnsName = ipnsName\n return true\n }\n\n IpfsAction.prototype.handleGenerateIpnsKey = async function (event) {\n var ipnsKey = null\n var ipnsName = $tw.utils.getIpfsIpnsName()\n ipnsName =\n ipnsName === undefined || ipnsName == null || ipnsName.trim() === ''\n ? null\n : ipnsName.trim()\n if (ipnsName == null) {\n $tw.utils.alert(name, 'Undefined IPNS name....')\n return false\n }\n try {\n var ipnsKey = await $tw.ipfs.generateIpnsKey(ipnsName)\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n return false\n }\n var tiddler = $tw.wiki.getTiddler('$:/ipfs/saver/ipns/key')\n if (tiddler !== undefined && this.ipnsKey !== ipnsKey) {\n tiddler = $tw.utils.updateTiddler({\n tiddler: tiddler,\n fields: [{ key: 'text', value: ipnsKey }]\n })\n $tw.wiki.addTiddler(tiddler)\n }\n this.ipnsKey = ipnsKey\n this.ipnsName = ipnsName\n return true\n }\n\n IpfsAction.prototype.handleRemoveIpnsKey = async function (event) {\n var ipnsKey = null\n var normalizedUrl = null\n const self = this\n var ipnsName = $tw.utils.getIpfsIpnsName()\n ipnsName =\n ipnsName === undefined || ipnsName == null || ipnsName.trim() === ''\n ? null\n : ipnsName.trim()\n if (ipnsName == null) {\n $tw.utils.alert(name, 'Undefined IPNS name....')\n return false\n }\n try {\n var { ipnsKey, normalizedUrl } = await $tw.ipfs.getIpnsIdentifiers(\n ipnsName\n )\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n return false\n }\n // Async\n $tw.ipfs\n .requestToUnpin(null, ipnsKey, normalizedUrl)\n .then(data => {\n $tw.ipfs\n .removeIpnsKey(ipnsName)\n .then(data => {\n $tw.utils.alert(name, 'Succesfully removed Ipns key....')\n })\n .catch(error => {\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n })\n .catch(error => {\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n var tiddler = $tw.wiki.getTiddler('$:/ipfs/saver/ipns/name')\n if (tiddler !== undefined) {\n const updatedTiddler = $tw.utils.updateTiddler({\n tiddler: tiddler,\n fields: [{ key: 'text', value: '' }]\n })\n $tw.wiki.addTiddler(updatedTiddler)\n }\n tiddler = $tw.wiki.getTiddler('$:/ipfs/saver/ipns/key')\n if (tiddler !== undefined) {\n const updatedTiddler = $tw.utils.updateTiddler({\n tiddler: tiddler,\n fields: [{ key: 'text', value: '' }]\n })\n $tw.wiki.addTiddler(updatedTiddler)\n }\n this.ipnsName = null\n this.ipnsKey = null\n return true\n }\n\n IpfsAction.prototype.handleFetchIpnsKey = async function (event) {\n var ipnsKey = null\n var ipnsName = $tw.utils.getIpfsIpnsName()\n ipnsName =\n ipnsName === undefined || ipnsName == null || ipnsName.trim() === ''\n ? null\n : ipnsName.trim()\n if (ipnsName == null) {\n $tw.utils.alert(name, 'Undefined IPNS name....')\n return false\n }\n try {\n var { ipnsKey } = await $tw.ipfs.getIpnsIdentifiers(ipnsName)\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n return false\n }\n var tiddler = $tw.wiki.getTiddler('$:/ipfs/saver/ipns/key')\n if (tiddler !== undefined && this.ipnsKey !== ipnsKey) {\n tiddler = $tw.utils.updateTiddler({\n tiddler: tiddler,\n fields: [{ key: 'text', value: ipnsKey }]\n })\n $tw.wiki.addTiddler(tiddler)\n this.ipnsKey = ipnsKey\n }\n this.ipnsName = ipnsName\n return true\n }\n\n IpfsAction.prototype.handleResolveIpnsKeyAndOpen = async function (event) {\n var ipnsKey = null\n var resolvedUrl = null\n var ipnsName = $tw.utils.getIpfsIpnsName()\n ipnsName =\n ipnsName === undefined || ipnsName == null || ipnsName.trim() === ''\n ? null\n : ipnsName.trim()\n if (ipnsName == null) {\n $tw.utils.alert(name, 'Undefined IPNS name....')\n return false\n }\n try {\n var { ipnsKey, resolvedUrl } = await $tw.ipfs.resolveUrl(\n true,\n false,\n `/${ipnsKeyword}/${ipnsName}`\n )\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n return false\n }\n var tiddler = $tw.wiki.getTiddler('$:/ipfs/saver/ipns/key')\n if (tiddler !== undefined && this.ipnsKey !== ipnsKey) {\n tiddler = $tw.utils.updateTiddler({\n tiddler: tiddler,\n fields: [{ key: 'text', value: ipnsKey }]\n })\n this.ipnsKey = ipnsKey\n $tw.wiki.addTiddler(tiddler)\n }\n this.ipnsName = ipnsName\n window.open(resolvedUrl.toString(), '_blank', 'noopener,noreferrer')\n return true\n }\n\n IpfsAction.prototype.handleMobileConsole = async function (tiddler) {\n // Load mobile console if applicable\n if (typeof window.eruda === 'undefined') {\n try {\n // Load eruda\n await $tw.ipfs.ipfsBundle.ipfsLoader.loadErudaLibrary()\n } catch (error) {\n this.getLogger().error(error)\n throw new Error(error.message)\n }\n const erudaContainer = window.document.createElement('div')\n window.document.body.appendChild(erudaContainer)\n window.eruda.init({\n container: erudaContainer,\n tool: ['console'],\n useShadowDom: true,\n autoScale: true\n })\n // Inherit font\n erudaContainer.style.fontFamily = 'inherit'\n // Preserve user preference if any, default is 80\n if (window.eruda.get().config.get('displaySize') === 80) {\n window.eruda.get().config.set('displaySize', 40)\n }\n // Preserve user preference if any, default is 0.95\n if (window.eruda.get().config.get('transparency') === 0.95) {\n window.eruda.get().config.set('transparency', 1)\n }\n // Hide Eruda button\n if (window.eruda._shadowRoot !== undefined) {\n const btn = window.eruda._shadowRoot.querySelector('.eruda-entry-btn')\n if (btn !== undefined) {\n btn.style.display = 'none'\n }\n }\n // Console settings\n const console = window.eruda.get('console')\n console.config.set('asyncRender', true)\n console.config.set('catchGlobalErr', true)\n console.config.set('displayExtraInfo', false)\n console.config.set('displayGetterVal', true)\n console.config.set('displayUnenumerable', true)\n console.config.set('jsExecution', true)\n console.config.set('maxLogNum', 'infinite')\n console.config.set('overrideConsole', true)\n this.getLogger().info('Mobile console has been loaded...')\n }\n if (this.console === false) {\n window.eruda.show()\n window.eruda.show('console')\n this.console = true\n } else {\n window.eruda.hide()\n this.console = false\n }\n }\n\n IpfsAction.prototype.handlePublishToIpns = async function (event) {\n var cid = null\n var ipnsKey = null\n var wikiCid = null\n var wikiIpnsKey = null\n const self = this\n const wiki = $tw.ipfs.getDocumentUrl()\n if (wiki.protocol === fileProtocol) {\n $tw.utils.alert(name, 'Undefined IPFS identifier...')\n return false\n }\n if (wiki.pathname === '/') {\n $tw.utils.alert(name, 'Unknown IPFS identifier...')\n return false\n }\n var ipnsName = $tw.utils.getIpfsIpnsName()\n ipnsName =\n ipnsName === undefined || ipnsName == null || ipnsName.trim() === ''\n ? null\n : ipnsName.trim()\n if (ipnsName == null) {\n $tw.utils.alert(name, 'Undefined IPNS name....')\n return false\n }\n try {\n var { cid, ipnsKey } = await $tw.ipfs.resolveUrl(\n true,\n false,\n `/ipns/${ipnsName}`\n )\n var { cid: wikiCid, ipnsKey: wikiIpnsKey } = await $tw.ipfs.resolveUrl(\n true,\n true,\n wiki\n )\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n return false\n }\n if (wikiIpnsKey !== null && wikiIpnsKey === ipnsKey) {\n $tw.utils.alert(name, 'Default IPNS key matches current IPNS key....')\n return false\n }\n $tw.utils.alert(name, 'Publishing IPNS name: ' + ipnsName)\n $tw.ipfs\n .publishIpnsName(wikiCid, ipnsKey, ipnsName)\n .then(data => {\n $tw.ipfs.requestToUnpin(cid)\n $tw.utils.alert(name, 'Successfully Published IPNS name: ' + ipnsName)\n })\n .catch(error => {\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n return true\n }\n\n IpfsAction.prototype.exportTiddlersAsJson = async function (\n exportFilter,\n exportUri,\n spaces\n ) {\n var tiddlers = $tw.wiki.filterTiddlers(exportFilter)\n var spaces =\n spaces === undefined ? $tw.config.preferences.jsonSpaces : spaces\n var data = []\n // Process Tiddlers\n for (var t = 0; t < tiddlers.length; t++) {\n // Load Tiddler\n var tiddler = $tw.wiki.getTiddler(tiddlers[t])\n // Process\n var fields = {}\n // Process fields\n for (var field in tiddler.fields) {\n // Discard\n if (field === 'tags' || field === '_export_uri') {\n continue\n }\n var ipnsKey = null\n var fieldValue = tiddler.getFieldString(field)\n if (field === '_canonical_uri' && fieldValue === exportUri) {\n continue\n }\n if (field === '_import_uri' && fieldValue === exportUri) {\n continue\n }\n try {\n var { ipnsKey } = await $tw.ipfs.resolveUrl(false, false, fieldValue)\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n return null\n }\n // IPNS\n if (ipnsKey !== null) {\n fieldValue = `/${ipnsKeyword}/${ipnsKey}`\n }\n // Store field\n fields[field] = fieldValue\n }\n // Process tags\n var tags = tiddler.fields.tags\n if (tags !== undefined && tags !== null) {\n var tagValues = ''\n for (var i = 0; i < tags.length; i++) {\n const tag = tags[i]\n // Discard\n if (tag === '$:/isExported' || tag === '$:/isImported') {\n continue\n }\n tagValues =\n (tagValues.length === 0 ? '[[' : `${tagValues} [[`) + `${tag}]]`\n }\n // Store tags\n fields.tags = tagValues\n }\n // Store\n data.push(fields)\n }\n return JSON.stringify(data, null, spaces)\n }\n\n IpfsAction.prototype.exportTiddler = async function (\n child,\n exportUri,\n tiddler\n ) {\n // Check\n if (tiddler === undefined || tiddler == null) {\n const error = new Error('Unknown Tiddler...')\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n return null\n }\n // Title\n const title = tiddler.getFieldString('title')\n // Filter\n var exportFilter = `[[${tiddler.fields.title}]]`\n // Child filters\n if (child) {\n // Links\n const linked = $tw.wiki.getTiddlerLinks(title)\n this.getLogger().info(`Found ${linked.length} Tiddler link(s)...`)\n // Transcluded\n const transcluded = this.transcludeContent(title)\n this.getLogger().info(\n `Found ${transcluded.length} transcluded Tiddler reference(s)...`\n )\n const filtered = linked.concat(transcluded)\n // Process filtered content\n for (var i = 0; i < filtered.length; i++) {\n if (exportFilter.includes(`[[${filtered[i]}]]`) === false) {\n exportFilter = `${exportFilter} [[${filtered[i]}]]`\n }\n }\n }\n var content = null\n if (child || $tw.utils.getIpfsExport() === 'json') {\n content = await this.exportTiddlersAsJson(exportFilter, exportUri)\n } else if ($tw.utils.getIpfsExport() === 'static') {\n // Export Tiddler as Static River\n const options = {\n downloadType: 'text/plain',\n method: 'download',\n template: '$:/core/templates/exporters/StaticRiver',\n variables: {\n exportFilter: exportFilter\n }\n }\n content = $tw.wiki.renderTiddler(\n 'text/plain',\n '$:/core/templates/exporters/StaticRiver',\n options\n )\n } else {\n // Export Tiddler as tid\n const options = {\n downloadType: 'text/plain',\n method: 'download',\n template: '$:/core/templates/exporters/TidFile',\n variables: {\n exportFilter: exportFilter\n }\n }\n content = $tw.wiki.renderTiddler(\n 'text/plain',\n '$:/core/templates/exporters/TidFile',\n options\n )\n }\n if (content !== undefined && content !== null) {\n // Encrypt\n if ($tw.crypto.hasPassword()) {\n try {\n content = $tw.crypto.encrypt(content, $tw.crypto.currentPassword)\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, 'Failed to encrypt content...')\n return null\n }\n }\n try {\n content = $tw.ipfs.StringToUint8Array(content)\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, 'Failed to convert content...')\n return null\n }\n }\n return content\n }\n\n IpfsAction.prototype.transcludeContent = function (title) {\n var tiddlers = []\n // Build a transclude widget\n var transclude = $tw.wiki.makeTranscludeWidget(title)\n // Build a fake document element\n const container = $tw.fakeDocument.createElement('div')\n // Transclude\n transclude.render(container, null)\n // Process children\n this.locateTiddlers(transclude, tiddlers)\n // Return\n return tiddlers\n }\n\n IpfsAction.prototype.locateTiddlers = function (transclude, tiddlers) {\n // Children lookup\n for (var i = 0; i < transclude.children.length; i++) {\n // Current child\n const child = transclude.children[i]\n if (child.variables !== undefined && child.variables !== null) {\n // Locate Tiddler\n const currentTiddler = 'currentTiddler'\n const current = child.variables[currentTiddler]\n if (\n current !== undefined &&\n current !== null &&\n current.value !== undefined &&\n current.value !== null\n ) {\n if (tiddlers.indexOf(current.value) === -1) {\n tiddlers.push(current.value)\n }\n }\n }\n // Process children\n this.locateTiddlers(child, tiddlers)\n }\n }\n\n exports.IpfsAction = IpfsAction\n})()\n",
"type": "application/javascript",
"tags": "$:/ipfs/core",
"module-type": "library"
},
"$:/plugins/ipfs/ipfs-bundle.js": {
"title": "$:/plugins/ipfs/ipfs-bundle.js",
"text": "(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.IpfsBundle = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){\nfunction _asyncIterator(iterable) {\n var method;\n\n if (typeof Symbol !== \"undefined\") {\n if (Symbol.asyncIterator) {\n method = iterable[Symbol.asyncIterator];\n if (method != null) return method.call(iterable);\n }\n\n if (Symbol.iterator) {\n method = iterable[Symbol.iterator];\n if (method != null) return method.call(iterable);\n }\n }\n\n throw new TypeError(\"Object is not async iterable\");\n}\n\nmodule.exports = _asyncIterator;\n},{}],2:[function(require,module,exports){\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nfunction _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}\n\nmodule.exports = _asyncToGenerator;\n},{}],3:[function(require,module,exports){\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n \"default\": obj\n };\n}\n\nmodule.exports = _interopRequireDefault;\n},{}],4:[function(require,module,exports){\nfunction _objectDestructuringEmpty(obj) {\n if (obj == null) throw new TypeError(\"Cannot destructure undefined\");\n}\n\nmodule.exports = _objectDestructuringEmpty;\n},{}],5:[function(require,module,exports){\nmodule.exports = require(\"regenerator-runtime\");\n\n},{\"regenerator-runtime\":77}],6:[function(require,module,exports){\n'use strict'\n// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\n// @ts-ignore\nvar _Buffer = require('safe-buffer').Buffer\nfunction base (ALPHABET) {\n if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n var BASE_MAP = new Uint8Array(256)\n for (var j = 0; j < BASE_MAP.length; j++) {\n BASE_MAP[j] = 255\n }\n for (var i = 0; i < ALPHABET.length; i++) {\n var x = ALPHABET.charAt(i)\n var xc = x.charCodeAt(0)\n if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n BASE_MAP[xc] = i\n }\n var BASE = ALPHABET.length\n var LEADER = ALPHABET.charAt(0)\n var FACTOR = Math.log(BASE) / Math.log(256) // log(BASE) / log(256), rounded up\n var iFACTOR = Math.log(256) / Math.log(BASE) // log(256) / log(BASE), rounded up\n function encode (source) {\n if (Array.isArray(source) || source instanceof Uint8Array) { source = _Buffer.from(source) }\n if (!_Buffer.isBuffer(source)) { throw new TypeError('Expected Buffer') }\n if (source.length === 0) { return '' }\n // Skip & count leading zeroes.\n var zeroes = 0\n var length = 0\n var pbegin = 0\n var pend = source.length\n while (pbegin !== pend && source[pbegin] === 0) {\n pbegin++\n zeroes++\n }\n // Allocate enough space in big-endian base58 representation.\n var size = ((pend - pbegin) * iFACTOR + 1) >>> 0\n var b58 = new Uint8Array(size)\n // Process the bytes.\n while (pbegin !== pend) {\n var carry = source[pbegin]\n // Apply \"b58 = b58 * 256 + ch\".\n var i = 0\n for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n carry += (256 * b58[it1]) >>> 0\n b58[it1] = (carry % BASE) >>> 0\n carry = (carry / BASE) >>> 0\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i\n pbegin++\n }\n // Skip leading zeroes in base58 result.\n var it2 = size - length\n while (it2 !== size && b58[it2] === 0) {\n it2++\n }\n // Translate the result into a string.\n var str = LEADER.repeat(zeroes)\n for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]) }\n return str\n }\n function decodeUnsafe (source) {\n if (typeof source !== 'string') { throw new TypeError('Expected String') }\n if (source.length === 0) { return _Buffer.alloc(0) }\n var psz = 0\n // Skip leading spaces.\n if (source[psz] === ' ') { return }\n // Skip and count leading '1's.\n var zeroes = 0\n var length = 0\n while (source[psz] === LEADER) {\n zeroes++\n psz++\n }\n // Allocate enough space in big-endian base256 representation.\n var size = (((source.length - psz) * FACTOR) + 1) >>> 0 // log(58) / log(256), rounded up.\n var b256 = new Uint8Array(size)\n // Process the characters.\n while (source[psz]) {\n // Decode character\n var carry = BASE_MAP[source.charCodeAt(psz)]\n // Invalid character\n if (carry === 255) { return }\n var i = 0\n for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n carry += (BASE * b256[it3]) >>> 0\n b256[it3] = (carry % 256) >>> 0\n carry = (carry / 256) >>> 0\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i\n psz++\n }\n // Skip trailing spaces.\n if (source[psz] === ' ') { return }\n // Skip leading zeroes in b256.\n var it4 = size - length\n while (it4 !== size && b256[it4] === 0) {\n it4++\n }\n var vch = _Buffer.allocUnsafe(zeroes + (size - it4))\n vch.fill(0x00, 0, zeroes)\n var j = zeroes\n while (it4 !== size) {\n vch[j++] = b256[it4++]\n }\n return vch\n }\n function decode (string) {\n var buffer = decodeUnsafe(string)\n if (buffer) { return buffer }\n throw new Error('Non-base' + BASE + ' character')\n }\n return {\n encode: encode,\n decodeUnsafe: decodeUnsafe,\n decode: decode\n }\n}\nmodule.exports = base\n\n},{\"safe-buffer\":78}],7:[function(require,module,exports){\n'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(\n uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)\n ))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n\n},{}],8:[function(require,module,exports){\n(function (Buffer){\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <https://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nvar K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = { __proto__: Uint8Array.prototype, foo: function () { return 42 } }\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n var buf = new Uint8Array(length)\n buf.__proto__ = Buffer.prototype\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\n// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\nif (typeof Symbol !== 'undefined' && Symbol.species != null &&\n Buffer[Symbol.species] === Buffer) {\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true,\n enumerable: false,\n writable: false\n })\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayLike(value)\n }\n\n if (value == null) {\n throw TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n var valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n var b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(\n value[Symbol.toPrimitive]('string'), encodingOrOffset, length\n )\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nBuffer.prototype.__proto__ = Uint8Array.prototype\nBuffer.__proto__ = Uint8Array\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n var length = byteLength(string, encoding) | 0\n var buf = createBuffer(length)\n\n var actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n var buf = createBuffer(length)\n for (var i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n var buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n buf.__proto__ = Buffer.prototype\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n var buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n buf = Buffer.from(buf)\n }\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n var len = string.length\n var mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n var strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n newBuf.__proto__ = Buffer.prototype\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n var limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n var limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (var i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n var len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"base64-js\":7,\"buffer\":8,\"ieee754\":37}],9:[function(require,module,exports){\n'use strict'\n\nconst mh = require('multihashes')\nconst { Buffer } = require('buffer')\nvar CIDUtil = {\n /**\n * Test if the given input is a valid CID object.\n * Returns an error message if it is not.\n * Returns undefined if it is a valid CID.\n *\n * @param {any} other\n * @returns {string}\n */\n checkCIDComponents: function (other) {\n if (other == null) {\n return 'null values are not valid CIDs'\n }\n\n if (!(other.version === 0 || other.version === 1)) {\n return 'Invalid version, must be a number equal to 1 or 0'\n }\n\n if (typeof other.codec !== 'string') {\n return 'codec must be string'\n }\n\n if (other.version === 0) {\n if (other.codec !== 'dag-pb') {\n return \"codec must be 'dag-pb' for CIDv0\"\n }\n if (other.multibaseName !== 'base58btc') {\n return \"multibaseName must be 'base58btc' for CIDv0\"\n }\n }\n\n if (!Buffer.isBuffer(other.multihash)) {\n return 'multihash must be a Buffer'\n }\n\n try {\n mh.validate(other.multihash)\n } catch (err) {\n let errorMsg = err.message\n if (!errorMsg) { // Just in case mh.validate() throws an error with empty error message\n errorMsg = 'Multihash validation failed'\n }\n return errorMsg\n }\n }\n}\n\nmodule.exports = CIDUtil\n\n},{\"buffer\":8,\"multihashes\":65}],10:[function(require,module,exports){\n'use strict'\n\nconst { Buffer } = require('buffer')\nconst mh = require('multihashes')\nconst multibase = require('multibase')\nconst multicodec = require('multicodec')\nconst codecs = require('multicodec/src/base-table.json')\nconst CIDUtil = require('./cid-util')\nconst withIs = require('class-is')\n\n/**\n * @typedef {Object} SerializedCID\n * @param {string} codec\n * @param {number} version\n * @param {Buffer} multihash\n */\n\n/**\n * Test if the given input is a CID.\n * @function isCID\n * @memberof CID\n * @static\n * @param {any} other\n * @returns {bool}\n */\n\n/**\n * Class representing a CID `<mbase><version><mcodec><mhash>`\n * , as defined in [ipld/cid](https://github.com/multiformats/cid).\n * @class CID\n */\nclass CID {\n /**\n * Create a new CID.\n *\n * The algorithm for argument input is roughly:\n * ```\n * if (cid)\n * -> create a copy\n * else if (str)\n * if (1st char is on multibase table) -> CID String\n * else -> bs58 encoded multihash\n * else if (Buffer)\n * if (1st byte is 0 or 1) -> CID\n * else -> multihash\n * else if (Number)\n * -> construct CID by parts\n * ```\n *\n * @param {string|Buffer|CID} version\n * @param {string} [codec]\n * @param {Buffer} [multihash]\n * @param {string} [multibaseName]\n *\n * @example\n * new CID(<version>, <codec>, <multihash>, <multibaseName>)\n * new CID(<cidStr>)\n * new CID(<cid.buffer>)\n * new CID(<multihash>)\n * new CID(<bs58 encoded multihash>)\n * new CID(<cid>)\n */\n constructor (version, codec, multihash, multibaseName) {\n if (_CID.isCID(version)) {\n // version is an exising CID instance\n const cid = version\n this.version = cid.version\n this.codec = cid.codec\n this.multihash = Buffer.from(cid.multihash)\n // Default guard for when a CID < 0.7 is passed with no multibaseName\n this.multibaseName = cid.multibaseName || (cid.version === 0 ? 'base58btc' : 'base32')\n return\n }\n\n if (typeof version === 'string') {\n // e.g. 'base32' or false\n const baseName = multibase.isEncoded(version)\n if (baseName) {\n // version is a CID String encoded with multibase, so v1\n const cid = multibase.decode(version)\n this.version = parseInt(cid.slice(0, 1).toString('hex'), 16)\n this.codec = multicodec.getCodec(cid.slice(1))\n this.multihash = multicodec.rmPrefix(cid.slice(1))\n this.multibaseName = baseName\n } else {\n // version is a base58btc string multihash, so v0\n this.version = 0\n this.codec = 'dag-pb'\n this.multihash = mh.fromB58String(version)\n this.multibaseName = 'base58btc'\n }\n CID.validateCID(this)\n Object.defineProperty(this, 'string', { value: version })\n return\n }\n\n if (Buffer.isBuffer(version)) {\n const firstByte = version.slice(0, 1)\n const v = parseInt(firstByte.toString('hex'), 16)\n if (v === 1) {\n // version is a CID buffer\n const cid = version\n this.version = v\n this.codec = multicodec.getCodec(cid.slice(1))\n this.multihash = multicodec.rmPrefix(cid.slice(1))\n this.multibaseName = 'base32'\n } else {\n // version is a raw multihash buffer, so v0\n this.version = 0\n this.codec = 'dag-pb'\n this.multihash = version\n this.multibaseName = 'base58btc'\n }\n CID.validateCID(this)\n return\n }\n\n // otherwise, assemble the CID from the parameters\n\n /**\n * @type {number}\n */\n this.version = version\n\n /**\n * @type {string}\n */\n this.codec = codec\n\n /**\n * @type {Buffer}\n */\n this.multihash = multihash\n\n /**\n * @type {string}\n */\n this.multibaseName = multibaseName || (version === 0 ? 'base58btc' : 'base32')\n\n CID.validateCID(this)\n }\n\n /**\n * The CID as a `Buffer`\n *\n * @return {Buffer}\n * @readonly\n *\n * @memberOf CID\n */\n get buffer () {\n let buffer = this._buffer\n\n if (!buffer) {\n if (this.version === 0) {\n buffer = this.multihash\n } else if (this.version === 1) {\n buffer = Buffer.concat([\n Buffer.from('01', 'hex'),\n multicodec.getCodeVarint(this.codec),\n this.multihash\n ])\n } else {\n throw new Error('unsupported version')\n }\n\n // Cache this buffer so it doesn't have to be recreated\n Object.defineProperty(this, '_buffer', { value: buffer })\n }\n\n return buffer\n }\n\n /**\n * Get the prefix of the CID.\n *\n * @returns {Buffer}\n * @readonly\n */\n get prefix () {\n return Buffer.concat([\n Buffer.from(`0${this.version}`, 'hex'),\n multicodec.getCodeVarint(this.codec),\n mh.prefix(this.multihash)\n ])\n }\n\n /**\n * Convert to a CID of version `0`.\n *\n * @returns {CID}\n */\n toV0 () {\n if (this.codec !== 'dag-pb') {\n throw new Error('Cannot convert a non dag-pb CID to CIDv0')\n }\n\n const { name, length } = mh.decode(this.multihash)\n\n if (name !== 'sha2-256') {\n throw new Error('Cannot convert non sha2-256 multihash CID to CIDv0')\n }\n\n if (length !== 32) {\n throw new Error('Cannot convert non 32 byte multihash CID to CIDv0')\n }\n\n return new _CID(0, this.codec, this.multihash)\n }\n\n /**\n * Convert to a CID of version `1`.\n *\n * @returns {CID}\n */\n toV1 () {\n return new _CID(1, this.codec, this.multihash)\n }\n\n /**\n * Encode the CID into a string.\n *\n * @param {string} [base=this.multibaseName] - Base encoding to use.\n * @returns {string}\n */\n toBaseEncodedString (base = this.multibaseName) {\n if (this.string && base === this.multibaseName) {\n return this.string\n }\n let str = null\n if (this.version === 0) {\n if (base !== 'base58btc') {\n throw new Error('not supported with CIDv0, to support different bases, please migrate the instance do CIDv1, you can do that through cid.toV1()')\n }\n str = mh.toB58String(this.multihash)\n } else if (this.version === 1) {\n str = multibase.encode(base, this.buffer).toString()\n } else {\n throw new Error('unsupported version')\n }\n if (base === this.multibaseName) {\n // cache the string value\n Object.defineProperty(this, 'string', { value: str })\n }\n return str\n }\n\n /**\n * CID(QmdfTbBqBPQ7VNxZEYEj14VmRuZBkqFbiwReogJgS1zR1n)\n *\n * @returns {String}\n */\n [Symbol.for('nodejs.util.inspect.custom')] () {\n return 'CID(' + this.toString() + ')'\n }\n\n toString (base) {\n return this.toBaseEncodedString(base)\n }\n\n /**\n * Serialize to a plain object.\n *\n * @returns {SerializedCID}\n */\n toJSON () {\n return {\n codec: this.codec,\n version: this.version,\n hash: this.multihash\n }\n }\n\n /**\n * Compare equality with another CID.\n *\n * @param {CID} other\n * @returns {bool}\n */\n equals (other) {\n return this.codec === other.codec &&\n this.version === other.version &&\n this.multihash.equals(other.multihash)\n }\n\n /**\n * Test if the given input is a valid CID object.\n * Throws if it is not.\n *\n * @param {any} other\n * @returns {void}\n */\n static validateCID (other) {\n const errorMsg = CIDUtil.checkCIDComponents(other)\n if (errorMsg) {\n throw new Error(errorMsg)\n }\n }\n}\n\nconst _CID = withIs(CID, {\n className: 'CID',\n symbolName: '@ipld/js-cid/CID'\n})\n\n_CID.codecs = codecs\n\nmodule.exports = _CID\n\n},{\"./cid-util\":9,\"buffer\":8,\"class-is\":11,\"multibase\":56,\"multicodec\":59,\"multicodec/src/base-table.json\":57,\"multihashes\":65}],11:[function(require,module,exports){\n'use strict';\n\nfunction withIs(Class, { className, symbolName }) {\n const symbol = Symbol.for(symbolName);\n\n const ClassIsWrapper = {\n // The code below assigns the class wrapper to an object to trick\n // JavaScript engines to show the name of the extended class when\n // logging an instances.\n // We are assigning an anonymous class (class wrapper) to the object\n // with key `className` to keep the correct name.\n // If this is not supported it falls back to logging `ClassIsWrapper`.\n [className]: class extends Class {\n constructor(...args) {\n super(...args);\n Object.defineProperty(this, symbol, { value: true });\n }\n\n get [Symbol.toStringTag]() {\n return className;\n }\n },\n }[className];\n\n ClassIsWrapper[`is${className}`] = (obj) => !!(obj && obj[symbol]);\n\n return ClassIsWrapper;\n}\n\nfunction withIsProto(Class, { className, symbolName, withoutNew }) {\n const symbol = Symbol.for(symbolName);\n\n /* eslint-disable object-shorthand */\n const ClassIsWrapper = {\n [className]: function (...args) {\n if (withoutNew && !(this instanceof ClassIsWrapper)) {\n return new ClassIsWrapper(...args);\n }\n\n const _this = Class.call(this, ...args) || this;\n\n if (_this && !_this[symbol]) {\n Object.defineProperty(_this, symbol, { value: true });\n }\n\n return _this;\n },\n }[className];\n /* eslint-enable object-shorthand */\n\n ClassIsWrapper.prototype = Object.create(Class.prototype);\n ClassIsWrapper.prototype.constructor = ClassIsWrapper;\n\n Object.defineProperty(ClassIsWrapper.prototype, Symbol.toStringTag, {\n get() {\n return className;\n },\n });\n\n ClassIsWrapper[`is${className}`] = (obj) => !!(obj && obj[symbol]);\n\n return ClassIsWrapper;\n}\n\nmodule.exports = withIs;\nmodule.exports.proto = withIsProto;\n\n},{}],12:[function(require,module,exports){\nmodule.exports={\n \"identity\": 0,\n \"ip4\": 4,\n \"tcp\": 6,\n \"sha1\": 17,\n \"sha2-256\": 18,\n \"sha2-512\": 19,\n \"sha3-512\": 20,\n \"sha3-384\": 21,\n \"sha3-256\": 22,\n \"sha3-224\": 23,\n \"shake-128\": 24,\n \"shake-256\": 25,\n \"keccak-224\": 26,\n \"keccak-256\": 27,\n \"keccak-384\": 28,\n \"keccak-512\": 29,\n \"dccp\": 33,\n \"murmur3-128\": 34,\n \"murmur3-32\": 35,\n \"ip6\": 41,\n \"ip6zone\": 42,\n \"path\": 47,\n \"multicodec\": 48,\n \"multihash\": 49,\n \"multiaddr\": 50,\n \"multibase\": 51,\n \"dns\": 53,\n \"dns4\": 54,\n \"dns6\": 55,\n \"dnsaddr\": 56,\n \"protobuf\": 80,\n \"cbor\": 81,\n \"raw\": 85,\n \"dbl-sha2-256\": 86,\n \"rlp\": 96,\n \"bencode\": 99,\n \"dag-pb\": 112,\n \"dag-cbor\": 113,\n \"libp2p-key\": 114,\n \"git-raw\": 120,\n \"torrent-info\": 123,\n \"torrent-file\": 124,\n \"leofcoin-block\": 129,\n \"leofcoin-tx\": 130,\n \"leofcoin-pr\": 131,\n \"sctp\": 132,\n \"eth-block\": 144,\n \"eth-block-list\": 145,\n \"eth-tx-trie\": 146,\n \"eth-tx\": 147,\n \"eth-tx-receipt-trie\": 148,\n \"eth-tx-receipt\": 149,\n \"eth-state-trie\": 150,\n \"eth-account-snapshot\": 151,\n \"eth-storage-trie\": 152,\n \"bitcoin-block\": 176,\n \"bitcoin-tx\": 177,\n \"zcash-block\": 192,\n \"zcash-tx\": 193,\n \"stellar-block\": 208,\n \"stellar-tx\": 209,\n \"md4\": 212,\n \"md5\": 213,\n \"bmt\": 214,\n \"decred-block\": 224,\n \"decred-tx\": 225,\n \"ipld-ns\": 226,\n \"ipfs-ns\": 227,\n \"swarm-ns\": 228,\n \"ipns-ns\": 229,\n \"zeronet\": 230,\n \"ed25519-pub\": 237,\n \"dash-block\": 240,\n \"dash-tx\": 241,\n \"swarm-manifest\": 250,\n \"swarm-feed\": 251,\n \"udp\": 273,\n \"p2p-webrtc-star\": 275,\n \"p2p-webrtc-direct\": 276,\n \"p2p-stardust\": 277,\n \"p2p-circuit\": 290,\n \"dag-json\": 297,\n \"udt\": 301,\n \"utp\": 302,\n \"unix\": 400,\n \"p2p\": 421,\n \"ipfs\": 421,\n \"https\": 443,\n \"onion\": 444,\n \"onion3\": 445,\n \"garlic64\": 446,\n \"garlic32\": 447,\n \"tls\": 448,\n \"quic\": 460,\n \"ws\": 477,\n \"wss\": 478,\n \"p2p-websocket-star\": 479,\n \"http\": 480,\n \"json\": 512,\n \"messagepack\": 513,\n \"x11\": 4352,\n \"blake2b-8\": 45569,\n \"blake2b-16\": 45570,\n \"blake2b-24\": 45571,\n \"blake2b-32\": 45572,\n \"blake2b-40\": 45573,\n \"blake2b-48\": 45574,\n \"blake2b-56\": 45575,\n \"blake2b-64\": 45576,\n \"blake2b-72\": 45577,\n \"blake2b-80\": 45578,\n \"blake2b-88\": 45579,\n \"blake2b-96\": 45580,\n \"blake2b-104\": 45581,\n \"blake2b-112\": 45582,\n \"blake2b-120\": 45583,\n \"blake2b-128\": 45584,\n \"blake2b-136\": 45585,\n \"blake2b-144\": 45586,\n \"blake2b-152\": 45587,\n \"blake2b-160\": 45588,\n \"blake2b-168\": 45589,\n \"blake2b-176\": 45590,\n \"blake2b-184\": 45591,\n \"blake2b-192\": 45592,\n \"blake2b-200\": 45593,\n \"blake2b-208\": 45594,\n \"blake2b-216\": 45595,\n \"blake2b-224\": 45596,\n \"blake2b-232\": 45597,\n \"blake2b-240\": 45598,\n \"blake2b-248\": 45599,\n \"blake2b-256\": 45600,\n \"blake2b-264\": 45601,\n \"blake2b-272\": 45602,\n \"blake2b-280\": 45603,\n \"blake2b-288\": 45604,\n \"blake2b-296\": 45605,\n \"blake2b-304\": 45606,\n \"blake2b-312\": 45607,\n \"blake2b-320\": 45608,\n \"blake2b-328\": 45609,\n \"blake2b-336\": 45610,\n \"blake2b-344\": 45611,\n \"blake2b-352\": 45612,\n \"blake2b-360\": 45613,\n \"blake2b-368\": 45614,\n \"blake2b-376\": 45615,\n \"blake2b-384\": 45616,\n \"blake2b-392\": 45617,\n \"blake2b-400\": 45618,\n \"blake2b-408\": 45619,\n \"blake2b-416\": 45620,\n \"blake2b-424\": 45621,\n \"blake2b-432\": 45622,\n \"blake2b-440\": 45623,\n \"blake2b-448\": 45624,\n \"blake2b-456\": 45625,\n \"blake2b-464\": 45626,\n \"blake2b-472\": 45627,\n \"blake2b-480\": 45628,\n \"blake2b-488\": 45629,\n \"blake2b-496\": 45630,\n \"blake2b-504\": 45631,\n \"blake2b-512\": 45632,\n \"blake2s-8\": 45633,\n \"blake2s-16\": 45634,\n \"blake2s-24\": 45635,\n \"blake2s-32\": 45636,\n \"blake2s-40\": 45637,\n \"blake2s-48\": 45638,\n \"blake2s-56\": 45639,\n \"blake2s-64\": 45640,\n \"blake2s-72\": 45641,\n \"blake2s-80\": 45642,\n \"blake2s-88\": 45643,\n \"blake2s-96\": 45644,\n \"blake2s-104\": 45645,\n \"blake2s-112\": 45646,\n \"blake2s-120\": 45647,\n \"blake2s-128\": 45648,\n \"blake2s-136\": 45649,\n \"blake2s-144\": 45650,\n \"blake2s-152\": 45651,\n \"blake2s-160\": 45652,\n \"blake2s-168\": 45653,\n \"blake2s-176\": 45654,\n \"blake2s-184\": 45655,\n \"blake2s-192\": 45656,\n \"blake2s-200\": 45657,\n \"blake2s-208\": 45658,\n \"blake2s-216\": 45659,\n \"blake2s-224\": 45660,\n \"blake2s-232\": 45661,\n \"blake2s-240\": 45662,\n \"blake2s-248\": 45663,\n \"blake2s-256\": 45664,\n \"skein256-8\": 45825,\n \"skein256-16\": 45826,\n \"skein256-24\": 45827,\n \"skein256-32\": 45828,\n \"skein256-40\": 45829,\n \"skein256-48\": 45830,\n \"skein256-56\": 45831,\n \"skein256-64\": 45832,\n \"skein256-72\": 45833,\n \"skein256-80\": 45834,\n \"skein256-88\": 45835,\n \"skein256-96\": 45836,\n \"skein256-104\": 45837,\n \"skein256-112\": 45838,\n \"skein256-120\": 45839,\n \"skein256-128\": 45840,\n \"skein256-136\": 45841,\n \"skein256-144\": 45842,\n \"skein256-152\": 45843,\n \"skein256-160\": 45844,\n \"skein256-168\": 45845,\n \"skein256-176\": 45846,\n \"skein256-184\": 45847,\n \"skein256-192\": 45848,\n \"skein256-200\": 45849,\n \"skein256-208\": 45850,\n \"skein256-216\": 45851,\n \"skein256-224\": 45852,\n \"skein256-232\": 45853,\n \"skein256-240\": 45854,\n \"skein256-248\": 45855,\n \"skein256-256\": 45856,\n \"skein512-8\": 45857,\n \"skein512-16\": 45858,\n \"skein512-24\": 45859,\n \"skein512-32\": 45860,\n \"skein512-40\": 45861,\n \"skein512-48\": 45862,\n \"skein512-56\": 45863,\n \"skein512-64\": 45864,\n \"skein512-72\": 45865,\n \"skein512-80\": 45866,\n \"skein512-88\": 45867,\n \"skein512-96\": 45868,\n \"skein512-104\": 45869,\n \"skein512-112\": 45870,\n \"skein512-120\": 45871,\n \"skein512-128\": 45872,\n \"skein512-136\": 45873,\n \"skein512-144\": 45874,\n \"skein512-152\": 45875,\n \"skein512-160\": 45876,\n \"skein512-168\": 45877,\n \"skein512-176\": 45878,\n \"skein512-184\": 45879,\n \"skein512-192\": 45880,\n \"skein512-200\": 45881,\n \"skein512-208\": 45882,\n \"skein512-216\": 45883,\n \"skein512-224\": 45884,\n \"skein512-232\": 45885,\n \"skein512-240\": 45886,\n \"skein512-248\": 45887,\n \"skein512-256\": 45888,\n \"skein512-264\": 45889,\n \"skein512-272\": 45890,\n \"skein512-280\": 45891,\n \"skein512-288\": 45892,\n \"skein512-296\": 45893,\n \"skein512-304\": 45894,\n \"skein512-312\": 45895,\n \"skein512-320\": 45896,\n \"skein512-328\": 45897,\n \"skein512-336\": 45898,\n \"skein512-344\": 45899,\n \"skein512-352\": 45900,\n \"skein512-360\": 45901,\n \"skein512-368\": 45902,\n \"skein512-376\": 45903,\n \"skein512-384\": 45904,\n \"skein512-392\": 45905,\n \"skein512-400\": 45906,\n \"skein512-408\": 45907,\n \"skein512-416\": 45908,\n \"skein512-424\": 45909,\n \"skein512-432\": 45910,\n \"skein512-440\": 45911,\n \"skein512-448\": 45912,\n \"skein512-456\": 45913,\n \"skein512-464\": 45914,\n \"skein512-472\": 45915,\n \"skein512-480\": 45916,\n \"skein512-488\": 45917,\n \"skein512-496\": 45918,\n \"skein512-504\": 45919,\n \"skein512-512\": 45920,\n \"skein1024-8\": 45921,\n \"skein1024-16\": 45922,\n \"skein1024-24\": 45923,\n \"skein1024-32\": 45924,\n \"skein1024-40\": 45925,\n \"skein1024-48\": 45926,\n \"skein1024-56\": 45927,\n \"skein1024-64\": 45928,\n \"skein1024-72\": 45929,\n \"skein1024-80\": 45930,\n \"skein1024-88\": 45931,\n \"skein1024-96\": 45932,\n \"skein1024-104\": 45933,\n \"skein1024-112\": 45934,\n \"skein1024-120\": 45935,\n \"skein1024-128\": 45936,\n \"skein1024-136\": 45937,\n \"skein1024-144\": 45938,\n \"skein1024-152\": 45939,\n \"skein1024-160\": 45940,\n \"skein1024-168\": 45941,\n \"skein1024-176\": 45942,\n \"skein1024-184\": 45943,\n \"skein1024-192\": 45944,\n \"skein1024-200\": 45945,\n \"skein1024-208\": 45946,\n \"skein1024-216\": 45947,\n \"skein1024-224\": 45948,\n \"skein1024-232\": 45949,\n \"skein1024-240\": 45950,\n \"skein1024-248\": 45951,\n \"skein1024-256\": 45952,\n \"skein1024-264\": 45953,\n \"skein1024-272\": 45954,\n \"skein1024-280\": 45955,\n \"skein1024-288\": 45956,\n \"skein1024-296\": 45957,\n \"skein1024-304\": 45958,\n \"skein1024-312\": 45959,\n \"skein1024-320\": 45960,\n \"skein1024-328\": 45961,\n \"skein1024-336\": 45962,\n \"skein1024-344\": 45963,\n \"skein1024-352\": 45964,\n \"skein1024-360\": 45965,\n \"skein1024-368\": 45966,\n \"skein1024-376\": 45967,\n \"skein1024-384\": 45968,\n \"skein1024-392\": 45969,\n \"skein1024-400\": 45970,\n \"skein1024-408\": 45971,\n \"skein1024-416\": 45972,\n \"skein1024-424\": 45973,\n \"skein1024-432\": 45974,\n \"skein1024-440\": 45975,\n \"skein1024-448\": 45976,\n \"skein1024-456\": 45977,\n \"skein1024-464\": 45978,\n \"skein1024-472\": 45979,\n \"skein1024-480\": 45980,\n \"skein1024-488\": 45981,\n \"skein1024-496\": 45982,\n \"skein1024-504\": 45983,\n \"skein1024-512\": 45984,\n \"skein1024-520\": 45985,\n \"skein1024-528\": 45986,\n \"skein1024-536\": 45987,\n \"skein1024-544\": 45988,\n \"skein1024-552\": 45989,\n \"skein1024-560\": 45990,\n \"skein1024-568\": 45991,\n \"skein1024-576\": 45992,\n \"skein1024-584\": 45993,\n \"skein1024-592\": 45994,\n \"skein1024-600\": 45995,\n \"skein1024-608\": 45996,\n \"skein1024-616\": 45997,\n \"skein1024-624\": 45998,\n \"skein1024-632\": 45999,\n \"skein1024-640\": 46000,\n \"skein1024-648\": 46001,\n \"skein1024-656\": 46002,\n \"skein1024-664\": 46003,\n \"skein1024-672\": 46004,\n \"skein1024-680\": 46005,\n \"skein1024-688\": 46006,\n \"skein1024-696\": 46007,\n \"skein1024-704\": 46008,\n \"skein1024-712\": 46009,\n \"skein1024-720\": 46010,\n \"skein1024-728\": 46011,\n \"skein1024-736\": 46012,\n \"skein1024-744\": 46013,\n \"skein1024-752\": 46014,\n \"skein1024-760\": 46015,\n \"skein1024-768\": 46016,\n \"skein1024-776\": 46017,\n \"skein1024-784\": 46018,\n \"skein1024-792\": 46019,\n \"skein1024-800\": 46020,\n \"skein1024-808\": 46021,\n \"skein1024-816\": 46022,\n \"skein1024-824\": 46023,\n \"skein1024-832\": 46024,\n \"skein1024-840\": 46025,\n \"skein1024-848\": 46026,\n \"skein1024-856\": 46027,\n \"skein1024-864\": 46028,\n \"skein1024-872\": 46029,\n \"skein1024-880\": 46030,\n \"skein1024-888\": 46031,\n \"skein1024-896\": 46032,\n \"skein1024-904\": 46033,\n \"skein1024-912\": 46034,\n \"skein1024-920\": 46035,\n \"skein1024-928\": 46036,\n \"skein1024-936\": 46037,\n \"skein1024-944\": 46038,\n \"skein1024-952\": 46039,\n \"skein1024-960\": 46040,\n \"skein1024-968\": 46041,\n \"skein1024-976\": 46042,\n \"skein1024-984\": 46043,\n \"skein1024-992\": 46044,\n \"skein1024-1000\": 46045,\n \"skein1024-1008\": 46046,\n \"skein1024-1016\": 46047,\n \"skein1024-1024\": 46048,\n \"holochain-adr-v0\": 8417572,\n \"holochain-adr-v1\": 8483108,\n \"holochain-key-v0\": 9728292,\n \"holochain-key-v1\": 9793828,\n \"holochain-sig-v0\": 10645796,\n \"holochain-sig-v1\": 10711332\n}\n},{}],13:[function(require,module,exports){\n'use strict'\n\nconst table = require('./base-table.json')\n\n// map for codecConstant -> code\nconst constants = {}\n\nfor (const [name, code] of Object.entries(table)) {\n constants[name.toUpperCase().replace(/-/g, '_')] = code\n}\n\nmodule.exports = Object.freeze(constants)\n\n},{\"./base-table.json\":12}],14:[function(require,module,exports){\n/**\n * Implementation of the multicodec specification.\n *\n * @module multicodec\n * @example\n * const multicodec = require('multicodec')\n *\n * const prefixedProtobuf = multicodec.addPrefix('protobuf', protobufBuffer)\n * // prefixedProtobuf 0x50...\n *\n */\n'use strict'\n\nconst { Buffer } = require('buffer')\nconst varint = require('varint')\nconst intTable = require('./int-table')\nconst codecNameToCodeVarint = require('./varint-table')\nconst util = require('./util')\n\nexports = module.exports\n\n/**\n * Prefix a buffer with a multicodec-packed.\n *\n * @param {string|number} multicodecStrOrCode\n * @param {Buffer} data\n * @returns {Buffer}\n */\nexports.addPrefix = (multicodecStrOrCode, data) => {\n let prefix\n\n if (Buffer.isBuffer(multicodecStrOrCode)) {\n prefix = util.varintBufferEncode(multicodecStrOrCode)\n } else {\n if (codecNameToCodeVarint[multicodecStrOrCode]) {\n prefix = codecNameToCodeVarint[multicodecStrOrCode]\n } else {\n throw new Error('multicodec not recognized')\n }\n }\n return Buffer.concat([prefix, data])\n}\n\n/**\n * Decapsulate the multicodec-packed prefix from the data.\n *\n * @param {Buffer} data\n * @returns {Buffer}\n */\nexports.rmPrefix = (data) => {\n varint.decode(data)\n return data.slice(varint.decode.bytes)\n}\n\n/**\n * Get the codec of the prefixed data.\n * @param {Buffer} prefixedData\n * @returns {string}\n */\nexports.getCodec = (prefixedData) => {\n const code = varint.decode(prefixedData)\n const codecName = intTable.get(code)\n if (codecName === undefined) {\n throw new Error(`Code ${code} not found`)\n }\n return codecName\n}\n\n/**\n * Get the name of the codec.\n * @param {number} codec\n * @returns {string}\n */\nexports.getName = (codec) => {\n return intTable.get(codec)\n}\n\n/**\n * Get the code of the codec\n * @param {string} name\n * @returns {number}\n */\nexports.getNumber = (name) => {\n const code = codecNameToCodeVarint[name]\n if (code === undefined) {\n throw new Error('Codec `' + name + '` not found')\n }\n return util.varintBufferDecode(code)[0]\n}\n\n/**\n * Get the code of the prefixed data.\n * @param {Buffer} prefixedData\n * @returns {number}\n */\nexports.getCode = (prefixedData) => {\n return varint.decode(prefixedData)\n}\n\n/**\n * Get the code as varint of a codec name.\n * @param {string} codecName\n * @returns {Buffer}\n */\nexports.getCodeVarint = (codecName) => {\n const code = codecNameToCodeVarint[codecName]\n if (code === undefined) {\n throw new Error('Codec `' + codecName + '` not found')\n }\n return code\n}\n\n/**\n * Get the varint of a code.\n * @param {Number} code\n * @returns {Array.<number>}\n */\nexports.getVarint = (code) => {\n return varint.encode(code)\n}\n\n// Make the constants top-level constants\nconst constants = require('./constants')\nObject.assign(exports, constants)\n\n// Human friendly names for printing, e.g. in error messages\nexports.print = require('./print')\n\n},{\"./constants\":13,\"./int-table\":15,\"./print\":16,\"./util\":17,\"./varint-table\":18,\"buffer\":8,\"varint\":88}],15:[function(require,module,exports){\n'use strict'\nconst baseTable = require('./base-table.json')\n\n// map for hexString -> codecName\nconst nameTable = new Map()\n\nfor (const encodingName in baseTable) {\n const code = baseTable[encodingName]\n nameTable.set(code, encodingName)\n}\n\nmodule.exports = Object.freeze(nameTable)\n\n},{\"./base-table.json\":12}],16:[function(require,module,exports){\n'use strict'\n\nconst table = require('./base-table.json')\n\n// map for code -> print friendly name\nconst tableByCode = {}\n\nfor (const [name, code] of Object.entries(table)) {\n if (tableByCode[code] === undefined) tableByCode[code] = name\n}\n\nmodule.exports = Object.freeze(tableByCode)\n\n},{\"./base-table.json\":12}],17:[function(require,module,exports){\n'use strict'\nconst varint = require('varint')\nconst { Buffer } = require('buffer')\n\nmodule.exports = {\n numberToBuffer,\n bufferToNumber,\n varintBufferEncode,\n varintBufferDecode,\n varintEncode\n}\n\nfunction bufferToNumber (buf) {\n return parseInt(buf.toString('hex'), 16)\n}\n\nfunction numberToBuffer (num) {\n let hexString = num.toString(16)\n if (hexString.length % 2 === 1) {\n hexString = '0' + hexString\n }\n return Buffer.from(hexString, 'hex')\n}\n\nfunction varintBufferEncode (input) {\n return Buffer.from(varint.encode(bufferToNumber(input)))\n}\n\nfunction varintBufferDecode (input) {\n return numberToBuffer(varint.decode(input))\n}\n\nfunction varintEncode (num) {\n return Buffer.from(varint.encode(num))\n}\n\n},{\"buffer\":8,\"varint\":88}],18:[function(require,module,exports){\n'use strict'\n\nconst baseTable = require('./base-table.json')\nconst varintEncode = require('./util').varintEncode\n\n// map for codecName -> codeVarintBuffer\nconst varintTable = {}\n\nfor (const encodingName in baseTable) {\n const code = baseTable[encodingName]\n varintTable[encodingName] = varintEncode(code)\n}\n\nmodule.exports = Object.freeze(varintTable)\n\n},{\"./base-table.json\":12,\"./util\":17}],19:[function(require,module,exports){\narguments[4][9][0].apply(exports,arguments)\n},{\"buffer\":8,\"dup\":9,\"multihashes\":65}],20:[function(require,module,exports){\narguments[4][10][0].apply(exports,arguments)\n},{\"./cid-util\":19,\"buffer\":8,\"class-is\":11,\"dup\":10,\"multibase\":26,\"multicodec\":14,\"multicodec/src/base-table.json\":12,\"multihashes\":65}],21:[function(require,module,exports){\n'use strict'\n\nclass Base {\n constructor (name, code, implementation, alphabet) {\n this.name = name\n this.code = code\n this.alphabet = alphabet\n if (implementation && alphabet) {\n this.engine = implementation(alphabet)\n }\n }\n\n encode (stringOrBuffer) {\n return this.engine.encode(stringOrBuffer)\n }\n\n decode (stringOrBuffer) {\n return this.engine.decode(stringOrBuffer)\n }\n\n isImplemented () {\n return this.engine\n }\n}\n\nmodule.exports = Base\n\n},{}],22:[function(require,module,exports){\n'use strict'\nconst { Buffer } = require('buffer')\n\nmodule.exports = function base16 (alphabet) {\n return {\n encode (input) {\n if (typeof input === 'string') {\n return Buffer.from(input).toString('hex')\n }\n return input.toString('hex')\n },\n decode (input) {\n for (const char of input) {\n if (alphabet.indexOf(char) < 0) {\n throw new Error('invalid base16 character')\n }\n }\n return Buffer.from(input, 'hex')\n }\n }\n}\n\n},{\"buffer\":8}],23:[function(require,module,exports){\n'use strict'\n\nfunction decode (input, alphabet) {\n input = input.replace(new RegExp('=', 'g'), '')\n const length = input.length\n\n let bits = 0\n let value = 0\n\n let index = 0\n const output = new Uint8Array((length * 5 / 8) | 0)\n\n for (let i = 0; i < length; i++) {\n value = (value << 5) | alphabet.indexOf(input[i])\n bits += 5\n\n if (bits >= 8) {\n output[index++] = (value >>> (bits - 8)) & 255\n bits -= 8\n }\n }\n\n return output.buffer\n}\n\nfunction encode (buffer, alphabet) {\n const length = buffer.byteLength\n const view = new Uint8Array(buffer)\n const padding = alphabet.indexOf('=') === alphabet.length - 1\n\n if (padding) {\n alphabet = alphabet.substring(0, alphabet.length - 1)\n }\n\n let bits = 0\n let value = 0\n let output = ''\n\n for (let i = 0; i < length; i++) {\n value = (value << 8) | view[i]\n bits += 8\n\n while (bits >= 5) {\n output += alphabet[(value >>> (bits - 5)) & 31]\n bits -= 5\n }\n }\n\n if (bits > 0) {\n output += alphabet[(value << (5 - bits)) & 31]\n }\n\n if (padding) {\n while ((output.length % 8) !== 0) {\n output += '='\n }\n }\n\n return output\n}\n\nmodule.exports = function base32 (alphabet) {\n return {\n encode (input) {\n if (typeof input === 'string') {\n return encode(Uint8Array.from(input), alphabet)\n }\n\n return encode(input, alphabet)\n },\n decode (input) {\n for (const char of input) {\n if (alphabet.indexOf(char) < 0) {\n throw new Error('invalid base32 character')\n }\n }\n\n return decode(input, alphabet)\n }\n }\n}\n\n},{}],24:[function(require,module,exports){\n'use strict'\nconst { Buffer } = require('buffer')\n\nmodule.exports = function base64 (alphabet) {\n // The alphabet is only used to know:\n // 1. If padding is enabled (must contain '=')\n // 2. If the output must be url-safe (must contain '-' and '_')\n // 3. If the input of the output function is valid\n // The alphabets from RFC 4648 are always used.\n const padding = alphabet.indexOf('=') > -1\n const url = alphabet.indexOf('-') > -1 && alphabet.indexOf('_') > -1\n\n return {\n encode (input) {\n let output = ''\n\n if (typeof input === 'string') {\n output = Buffer.from(input).toString('base64')\n } else {\n output = input.toString('base64')\n }\n\n if (url) {\n output = output.replace(/\\+/g, '-').replace(/\\//g, '_')\n }\n\n const pad = output.indexOf('=')\n if (pad > 0 && !padding) {\n output = output.substring(0, pad)\n }\n\n return output\n },\n decode (input) {\n for (const char of input) {\n if (alphabet.indexOf(char) < 0) {\n throw new Error('invalid base64 character')\n }\n }\n\n return Buffer.from(input, 'base64')\n }\n }\n}\n\n},{\"buffer\":8}],25:[function(require,module,exports){\n'use strict'\n\nconst Base = require('./base.js')\nconst baseX = require('base-x')\nconst base16 = require('./base16')\nconst base32 = require('./base32')\nconst base64 = require('./base64')\n\n// name, code, implementation, alphabet\nconst constants = [\n ['base1', '1', '', '1'],\n ['base2', '0', baseX, '01'],\n ['base8', '7', baseX, '01234567'],\n ['base10', '9', baseX, '0123456789'],\n ['base16', 'f', base16, '0123456789abcdef'],\n ['base32', 'b', base32, 'abcdefghijklmnopqrstuvwxyz234567'],\n ['base32pad', 'c', base32, 'abcdefghijklmnopqrstuvwxyz234567='],\n ['base32hex', 'v', base32, '0123456789abcdefghijklmnopqrstuv'],\n ['base32hexpad', 't', base32, '0123456789abcdefghijklmnopqrstuv='],\n ['base32z', 'h', base32, 'ybndrfg8ejkmcpqxot1uwisza345h769'],\n ['base58flickr', 'Z', baseX, '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'],\n ['base58btc', 'z', baseX, '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'],\n ['base64', 'm', base64, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'],\n ['base64pad', 'M', base64, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='],\n ['base64url', 'u', base64, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'],\n ['base64urlpad', 'U', base64, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=']\n]\n\nconst names = constants.reduce((prev, tupple) => {\n prev[tupple[0]] = new Base(tupple[0], tupple[1], tupple[2], tupple[3])\n return prev\n}, {})\n\nconst codes = constants.reduce((prev, tupple) => {\n prev[tupple[1]] = names[tupple[0]]\n return prev\n}, {})\n\nmodule.exports = {\n names: names,\n codes: codes\n}\n\n},{\"./base.js\":21,\"./base16\":22,\"./base32\":23,\"./base64\":24,\"base-x\":6}],26:[function(require,module,exports){\n/**\n * Implementation of the [multibase](https://github.com/multiformats/multibase) specification.\n * @module Multibase\n */\n'use strict'\n\nconst { Buffer } = require('buffer')\nconst constants = require('./constants')\n\nexports = module.exports = multibase\nexports.encode = encode\nexports.decode = decode\nexports.isEncoded = isEncoded\nexports.names = Object.freeze(Object.keys(constants.names))\nexports.codes = Object.freeze(Object.keys(constants.codes))\n\nconst errNotSupported = new Error('Unsupported encoding')\n\n/**\n * Create a new buffer with the multibase varint+code.\n *\n * @param {string|number} nameOrCode - The multibase name or code number.\n * @param {Buffer} buf - The data to be prefixed with multibase.\n * @memberof Multibase\n * @returns {Buffer}\n */\nfunction multibase (nameOrCode, buf) {\n if (!buf) {\n throw new Error('requires an encoded buffer')\n }\n const base = getBase(nameOrCode)\n const codeBuf = Buffer.from(base.code)\n\n const name = base.name\n validEncode(name, buf)\n return Buffer.concat([codeBuf, buf])\n}\n\n/**\n * Encode data with the specified base and add the multibase prefix.\n *\n * @param {string|number} nameOrCode - The multibase name or code number.\n * @param {Buffer} buf - The data to be encoded.\n * @returns {Buffer}\n * @memberof Multibase\n */\nfunction encode (nameOrCode, buf) {\n const base = getBase(nameOrCode)\n const name = base.name\n\n return multibase(name, Buffer.from(base.encode(buf)))\n}\n\n/**\n * Takes a buffer or string encoded with multibase header, decodes it and\n * returns the decoded buffer\n *\n * @param {Buffer|string} bufOrString\n * @returns {Buffer}\n * @memberof Multibase\n *\n */\nfunction decode (bufOrString) {\n if (Buffer.isBuffer(bufOrString)) {\n bufOrString = bufOrString.toString()\n }\n\n const code = bufOrString.substring(0, 1)\n bufOrString = bufOrString.substring(1, bufOrString.length)\n\n if (typeof bufOrString === 'string') {\n bufOrString = Buffer.from(bufOrString)\n }\n\n const base = getBase(code)\n return Buffer.from(base.decode(bufOrString.toString()))\n}\n\n/**\n * Is the given data multibase encoded?\n *\n * @param {Buffer|string} bufOrString\n * @returns {boolean}\n * @memberof Multibase\n */\nfunction isEncoded (bufOrString) {\n if (Buffer.isBuffer(bufOrString)) {\n bufOrString = bufOrString.toString()\n }\n\n // Ensure bufOrString is a string\n if (Object.prototype.toString.call(bufOrString) !== '[object String]') {\n return false\n }\n\n const code = bufOrString.substring(0, 1)\n try {\n const base = getBase(code)\n return base.name\n } catch (err) {\n return false\n }\n}\n\n/**\n * @param {string} name\n * @param {Buffer} buf\n * @private\n * @returns {undefined}\n */\nfunction validEncode (name, buf) {\n const base = getBase(name)\n base.decode(buf.toString())\n}\n\nfunction getBase (nameOrCode) {\n let base\n\n if (constants.names[nameOrCode]) {\n base = constants.names[nameOrCode]\n } else if (constants.codes[nameOrCode]) {\n base = constants.codes[nameOrCode]\n } else {\n throw errNotSupported\n }\n\n if (!base.isImplemented()) {\n throw new Error('Base ' + nameOrCode + ' is not implemented yet')\n }\n\n return base\n}\n\n},{\"./constants\":25,\"buffer\":8}],27:[function(require,module,exports){\narguments[4][12][0].apply(exports,arguments)\n},{\"dup\":12}],28:[function(require,module,exports){\narguments[4][13][0].apply(exports,arguments)\n},{\"./base-table.json\":27,\"dup\":13}],29:[function(require,module,exports){\n(function (Buffer){\n/**\n * Implementation of the multicodec specification.\n *\n * @module multicodec\n * @example\n * const multicodec = require('multicodec')\n *\n * const prefixedProtobuf = multicodec.addPrefix('protobuf', protobufBuffer)\n * // prefixedProtobuf 0x50...\n *\n */\n'use strict'\n\nconst varint = require('varint')\nconst intTable = require('./int-table')\nconst codecNameToCodeVarint = require('./varint-table')\nconst util = require('./util')\n\nexports = module.exports\n\n/**\n * Prefix a buffer with a multicodec-packed.\n *\n * @param {string|number} multicodecStrOrCode\n * @param {Buffer} data\n * @returns {Buffer}\n */\nexports.addPrefix = (multicodecStrOrCode, data) => {\n let prefix\n\n if (Buffer.isBuffer(multicodecStrOrCode)) {\n prefix = util.varintBufferEncode(multicodecStrOrCode)\n } else {\n if (codecNameToCodeVarint[multicodecStrOrCode]) {\n prefix = codecNameToCodeVarint[multicodecStrOrCode]\n } else {\n throw new Error('multicodec not recognized')\n }\n }\n return Buffer.concat([prefix, data])\n}\n\n/**\n * Decapsulate the multicodec-packed prefix from the data.\n *\n * @param {Buffer} data\n * @returns {Buffer}\n */\nexports.rmPrefix = (data) => {\n varint.decode(data)\n return data.slice(varint.decode.bytes)\n}\n\n/**\n * Get the codec of the prefixed data.\n * @param {Buffer} prefixedData\n * @returns {string}\n */\nexports.getCodec = (prefixedData) => {\n const code = varint.decode(prefixedData)\n const codecName = intTable.get(code)\n if (codecName === undefined) {\n throw new Error(`Code ${code} not found`)\n }\n return codecName\n}\n\n/**\n * Get the name of the codec.\n * @param {number} codec\n * @returns {string}\n */\nexports.getName = (codec) => {\n return intTable.get(codec)\n}\n\n/**\n * Get the code of the codec\n * @param {string} name\n * @returns {number}\n */\nexports.getNumber = (name) => {\n const code = codecNameToCodeVarint[name]\n if (code === undefined) {\n throw new Error('Codec `' + name + '` not found')\n }\n return util.varintBufferDecode(code)[0]\n}\n\n/**\n * Get the code of the prefixed data.\n * @param {Buffer} prefixedData\n * @returns {number}\n */\nexports.getCode = (prefixedData) => {\n return varint.decode(prefixedData)\n}\n\n/**\n * Get the code as varint of a codec name.\n * @param {string} codecName\n * @returns {Buffer}\n */\nexports.getCodeVarint = (codecName) => {\n const code = codecNameToCodeVarint[codecName]\n if (code === undefined) {\n throw new Error('Codec `' + codecName + '` not found')\n }\n return code\n}\n\n/**\n * Get the varint of a code.\n * @param {Number} code\n * @returns {Array.<number>}\n */\nexports.getVarint = (code) => {\n return varint.encode(code)\n}\n\n// Make the constants top-level constants\nconst constants = require('./constants')\nObject.assign(exports, constants)\n\n// Human friendly names for printing, e.g. in error messages\nexports.print = require('./print')\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"./constants\":28,\"./int-table\":30,\"./print\":31,\"./util\":32,\"./varint-table\":33,\"buffer\":8,\"varint\":88}],30:[function(require,module,exports){\narguments[4][15][0].apply(exports,arguments)\n},{\"./base-table.json\":27,\"dup\":15}],31:[function(require,module,exports){\narguments[4][16][0].apply(exports,arguments)\n},{\"./base-table.json\":27,\"dup\":16}],32:[function(require,module,exports){\n(function (Buffer){\n'use strict'\nconst varint = require('varint')\n\nmodule.exports = {\n numberToBuffer,\n bufferToNumber,\n varintBufferEncode,\n varintBufferDecode,\n varintEncode\n}\n\nfunction bufferToNumber (buf) {\n return parseInt(buf.toString('hex'), 16)\n}\n\nfunction numberToBuffer (num) {\n let hexString = num.toString(16)\n if (hexString.length % 2 === 1) {\n hexString = '0' + hexString\n }\n return Buffer.from(hexString, 'hex')\n}\n\nfunction varintBufferEncode (input) {\n return Buffer.from(varint.encode(bufferToNumber(input)))\n}\n\nfunction varintBufferDecode (input) {\n return numberToBuffer(varint.decode(input))\n}\n\nfunction varintEncode (num) {\n return Buffer.from(varint.encode(num))\n}\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":8,\"varint\":88}],33:[function(require,module,exports){\narguments[4][18][0].apply(exports,arguments)\n},{\"./base-table.json\":27,\"./util\":32,\"dup\":18}],34:[function(require,module,exports){\n/*\r\n\tISC License\r\n\r\n\tCopyright (c) 2019, Pierre-Louis Despaigne\r\n\r\n\tPermission to use, copy, modify, and/or distribute this software for any\r\n\tpurpose with or without fee is hereby granted, provided that the above\r\n\tcopyright notice and this permission notice appear in all copies.\r\n\r\n\tTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\r\n\tWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\r\n\tMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\r\n\tANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\r\n\tWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\r\n\tACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\r\n\tOR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\r\n*/\r\n\r\nconst CID = require('cids');\r\n\r\n/**\r\n * Take any ipfsHash and convert it to a CID v1 encoded in base32.\r\n * @param {string} ipfsHash a regular ipfs hash either a cid v0 or v1 (v1 will remain unchanged)\r\n * @return {string} the resulting ipfs hash as a cid v1\r\n */\r\nconst cidV0ToV1Base32 = (ipfsHash) => {\r\n\tlet cid = new CID(ipfsHash);\r\n\tif (cid.version === 0) {\r\n\t\tcid = cid.toV1();\r\n\t}\r\n\treturn cid.toString('base32');\r\n}\r\n\r\nexports.cidV0ToV1Base32 = cidV0ToV1Base32;\r\n\n},{\"cids\":20}],35:[function(require,module,exports){\n/*\r\n\tISC License\r\n\r\n\tCopyright (c) 2019, Pierre-Louis Despaigne\r\n\r\n\tPermission to use, copy, modify, and/or distribute this software for any\r\n\tpurpose with or without fee is hereby granted, provided that the above\r\n\tcopyright notice and this permission notice appear in all copies.\r\n\r\n\tTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\r\n\tWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\r\n\tMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\r\n\tANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\r\n\tWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\r\n\tACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\r\n\tOR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\r\n*/\r\n\r\nconst multiC = require('multicodec');\r\n\r\nconst { hexStringToBuffer, profiles } = require('./profiles');\r\nconst { cidV0ToV1Base32 } = require('./helpers');\r\n\r\nmodule.exports = {\r\n\r\n\t//export some helpers functions\r\n\thelpers: {\r\n\t\tcidV0ToV1Base32,\r\n\t},\r\n\r\n\t/**\r\n\t* Decode a Content Hash.\r\n\t* @param {string} hash an hex string containing a content hash\r\n\t* @return {string} the decoded content\r\n\t*/\r\n\tdecode: function (contentHash) {\r\n\t\tconst buffer = hexStringToBuffer(contentHash);\r\n\t\tconst codec = multiC.getCodec(buffer);\r\n\t\tconst value = multiC.rmPrefix(buffer);\r\n\t\tlet profile = profiles[codec];\r\n\t\tif (!profile) profile = profiles['default'];\r\n\t\treturn profile.decode(value);\r\n\t},\r\n\r\n\t/**\r\n\t* Encode an IPFS address into a content hash\r\n\t* @param {string} ipfsHash string containing an IPFS address\r\n\t* @return {string} the resulting content hash\r\n\t*/\r\n\tfromIpfs: function (ipfsHash) {\r\n\t\treturn this.encode('ipfs-ns', ipfsHash);\r\n\t},\r\n\r\n\t/**\r\n\t* Encode a Swarm address into a content hash\r\n\t* @param {string} swarmHash string containing a Swarm address\r\n\t* @return {string} the resulting content hash\r\n\t*/\r\n\tfromSwarm: function (swarmHash) {\r\n\t\treturn this.encode('swarm-ns', swarmHash);\r\n\t},\r\n\r\n\t/**\r\n\t* General purpose encoding function\r\n * @param {string} codec \r\n * @param {string} value \r\n */\r\n\tencode: function (codec, value) {\r\n\t\tlet profile = profiles[codec];\r\n\t\tif (!profile) profile = profiles['default'];\r\n\t\tconst encodedValue = profile.encode(value);\r\n\t\treturn multiC.addPrefix(codec, encodedValue).toString('hex');\r\n\t},\r\n\r\n\t/**\r\n\t* Extract the codec of a content hash\r\n\t* @param {string} hash hex string containing a content hash\r\n\t* @return {string} the extracted codec\r\n\t*/\r\n\tgetCodec: function (hash) {\r\n\t\tlet buffer = hexStringToBuffer(hash);\r\n\t\treturn multiC.getCodec(buffer);\r\n\t},\r\n}\r\n\n},{\"./helpers\":34,\"./profiles\":36,\"multicodec\":29}],36:[function(require,module,exports){\n(function (Buffer){\n/*\r\n\tISC License\r\n\r\n\tCopyright (c) 2019, Pierre-Louis Despaigne\r\n\r\n\tPermission to use, copy, modify, and/or distribute this software for any\r\n\tpurpose with or without fee is hereby granted, provided that the above\r\n\tcopyright notice and this permission notice appear in all copies.\r\n\r\n\tTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\r\n\tWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\r\n\tMERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\r\n\tANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\r\n\tWHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\r\n\tACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\r\n\tOR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\r\n*/\r\n\r\nconst CID = require('cids');\r\nconst multiH = require('multihashes');\r\n\r\n/**\r\n * Convert an hexadecimal string to a Buffer, the string can start with or without '0x'\r\n * @param {string} hex an hexadecimal value\r\n * @return {Buffer} the resulting Buffer\r\n */\r\nconst hexStringToBuffer = (hex) => {\r\n\tlet prefix = hex.slice(0, 2);\r\n\tlet value = hex.slice(2);\r\n\tlet res = '';\r\n\tif (prefix === '0x') res = value;\r\n\telse res = hex;\r\n\treturn multiH.fromHexString(res);\r\n}\r\n\r\n/**\r\n* list of known encoding,\r\n* encoding should be a function that takes a `string` input,\r\n* and return a `Buffer` result\r\n*/\r\nconst encodes = {\r\n /**\r\n * @param {string} value\r\n * @return {Buffer}\r\n */\r\n swarm: (value) => {\r\n const multihash = multiH.encode(hexStringToBuffer(value), 'keccak-256');\r\n\t\treturn new CID(1, 'swarm-manifest', multihash).buffer;\r\n },\r\n /**\r\n * @param {string} value\r\n * @return {Buffer}\r\n */\r\n ipfs: (value) => {\r\n const multihash = multiH.fromB58String(value);\r\n return new CID(1, 'dag-pb', multihash).buffer;\r\n },\r\n /**\r\n * @param {string} value\r\n * @return {Buffer}\r\n */\r\n utf8: (value) => {\r\n return Buffer.from(value, 'utf8');\r\n },\r\n};\r\n\r\n/** \r\n* list of known decoding,\r\n* decoding should be a function that takes a `Buffer` input,\r\n* and return a `string` result\r\n*/\r\nconst decodes = {\r\n /**\r\n * @param {Buffer} value \r\n */\r\n hexMultiHash: (value) => {\r\n const cid = new CID(value);\r\n return multiH.decode(cid.multihash).digest.toString('hex');\r\n },\r\n /**\r\n * @param {Buffer} value \r\n */\r\n b58MultiHash: (value) => {\r\n const cid = new CID(value);\r\n return multiH.toB58String(cid.multihash);\r\n },\r\n /**\r\n * @param {Buffer} value \r\n */\r\n utf8: (value) => {\r\n return value.toString('utf8');\r\n },\r\n};\r\n\r\n/**\r\n* list of known encoding/decoding for a given codec,\r\n* `encode` should be chosen among the `encodes` functions\r\n* `decode` should be chosen among the `decodes` functions\r\n*/\r\nconst profiles = {\r\n 'swarm-ns': {\r\n encode: encodes.swarm,\r\n decode: decodes.hexMultiHash,\r\n },\r\n 'ipfs-ns': {\r\n encode: encodes.ipfs,\r\n decode: decodes.b58MultiHash,\r\n },\r\n 'ipns-ns': {\r\n encode: encodes.ipfs,\r\n decode: decodes.b58MultiHash,\r\n },\r\n 'default': {\r\n encode: encodes.utf8,\r\n decode: decodes.utf8,\r\n },\r\n};\r\n\r\nexports.hexStringToBuffer = hexStringToBuffer;\r\nexports.profiles = profiles;\n}).call(this,require(\"buffer\").Buffer)\n},{\"buffer\":8,\"cids\":20,\"multihashes\":65}],37:[function(require,module,exports){\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n\n},{}],38:[function(require,module,exports){\n'use strict'\n\nmodule.exports = {\n DEFAULT_HTTP_API: '/ip4/127.0.0.1/tcp/5001'\n}\n\n},{}],39:[function(require,module,exports){\n'use strict'\n\nmodule.exports = {\n httpClient: 'httpClient',\n windowIpfs: 'windowIpfs',\n jsIpfs: 'jsIpfs',\n webExt: 'webExt'\n}\n\n},{}],40:[function(require,module,exports){\n(function (global){\n'use strict'\n/* global self */\n\n// Establish the root object, `window` in the browser, `self` in Service Worker. or `global` on the server.\n// Credit: https://github.com/megawac/underscore/commit/365311c9a440438531ca1c6bfd49e3c7c5f46079\nmodule.exports = (typeof self === 'object' && self.self === self && self) ||\n (typeof global === 'object' && global.global === global && global) ||\n this\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],41:[function(require,module,exports){\n'use strict'\n\nconst root = require('./constants/root')\nconst mergeOptions = require('merge-options')\nconst tryWebExt = require('./providers/webext')\nconst tryWindow = require('./providers/window-ipfs')\nconst tryHttpClient = require('./providers/http-client')\nconst tryJsIpfs = require('./providers/js-ipfs')\n\nconst defaultGlobalOpts = {\n connectionTest: async (ipfs) => {\n // ipfs connection is working if we can fetch data via async iterator API\n const cid = 'QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn'\n for await (const file of ipfs.get(cid)) {\n return file.type === 'dir' && file.name === cid\n }\n }\n}\n\nconst makeProvider = (fn, defaults = {}) => {\n return (options = {}) => {\n return (globalOpts) => {\n options = mergeOptions(defaultGlobalOpts, defaults, globalOpts, options)\n return fn(options)\n }\n }\n}\n\nconst providers = {\n httpClient: makeProvider((options) => {\n return tryHttpClient({ root, ...options })\n }),\n windowIpfs: makeProvider(options => {\n return tryWindow({ root, ...options })\n }),\n jsIpfs: makeProvider(options => {\n return tryJsIpfs(options)\n }),\n webExt: makeProvider(options => {\n return tryWebExt({ root, ...options })\n })\n}\n\nconst defaultProviders = [\n providers.windowIpfs(),\n providers.httpClient()\n]\n\nasync function getIpfs ({ providers = defaultProviders, ...options } = {}) {\n for (const provider of providers) {\n try {\n const res = await provider(options)\n if (res) return res\n } catch (err) {\n // provider failed unexpectedly, log error and move to the next one\n console.error('[ipfs-provider]', err) // eslint-disable-line no-console\n }\n }\n}\n\nmodule.exports = {\n getIpfs,\n providers,\n makeProvider\n}\n\n},{\"./constants/root\":40,\"./providers/http-client\":42,\"./providers/js-ipfs\":43,\"./providers/webext\":44,\"./providers/window-ipfs\":45,\"merge-options\":50}],42:[function(require,module,exports){\n'use strict'\n\nconst { URL } = require('iso-url')\nconst PROVIDERS = require('../constants/providers')\nconst { DEFAULT_HTTP_API } = require('../constants/defaults')\n\n/*\n * This provider lazy-loads https://github.com/ipfs/js-ipfs-http-client\n * so it is not included as a dependency if not used.\n *\n * HTTP Client init fallback:\n * 1. Use constructor returned by loadHttpClientModule function\n * 2. Fallback to window.IpfsHttpClient\n *\n * API URL fallback order:\n * 1. Try user specified API address\n * 2. Try current origin\n * 3. Try DEFAULT_HTTP_API\n*/\nasync function tryHttpClient ({ loadHttpClientModule, apiAddress, root, connectionTest }) {\n // Find HTTP client\n let httpClient\n if (loadHttpClientModule) httpClient = await loadHttpClientModule()\n\n // Final fallback to window.IpfsHttpClient or error\n if (!httpClient) {\n if (root.IpfsHttpClient) {\n httpClient = root.IpfsHttpClient\n } else {\n throw new Error('ipfs-provider could not initialize js-ipfs-http-client: make sure its constructor is returned by loadHttpClientModule function or exposed at window.IpfsHttpClient')\n }\n }\n\n // Allow the use of `import` or `require` on `loadHttpClientModule` fn\n httpClient = httpClient.default || httpClient // TODO: create 'import' demo in examples/\n\n // Explicit custom apiAddress provided. Only try that.\n if (apiAddress) {\n return maybeApi({ apiAddress, connectionTest, httpClient })\n }\n\n // Current origin is not localhost:5001 so try with current origin info\n const { location } = root\n if (location && !(location.port === '5001' && location.hostname.match(/^127.0.0.1$|^localhost$/))) {\n const origin = new URL(location.origin)\n origin.pathname = '/'\n const res = await maybeApi({\n apiAddress: origin.toString(),\n connectionTest,\n httpClient\n })\n if (res) return res\n }\n\n // ...otherwise try /ip4/127.0.0.1/tcp/5001\n return maybeApi({ apiAddress: DEFAULT_HTTP_API, connectionTest, httpClient })\n}\n\n// Init and test an api client against provded API address.\n// Returns js-ipfs-http-client instance or null\nasync function maybeApi ({ apiAddress, connectionTest, httpClient }) {\n try {\n const ipfs = httpClient(apiAddress)\n await connectionTest(ipfs)\n return { ipfs, provider: PROVIDERS.httpClient, apiAddress }\n } catch (error) {\n // Failed to connect to ipfs-api in `apiAddress`\n // console.error('[ipfs-provider:httpClient]', error)\n return null\n }\n}\n\nmodule.exports = tryHttpClient\n\n},{\"../constants/defaults\":38,\"../constants/providers\":39,\"iso-url\":47}],43:[function(require,module,exports){\n'use strict'\n\nconst PROVIDERS = require('../constants/providers')\n\nfunction createIpfs (ipfsModule, opts) {\n // Allow the use of `import` or `require` on `getJsIpfs` fn\n ipfsModule = ipfsModule.default || ipfsModule\n return ipfsModule.create(opts)\n}\n\nasync function tryJsIpfs ({ connectionTest, loadJsIpfsModule, options, init = createIpfs }) {\n const ipfsModule = await loadJsIpfsModule()\n const ipfs = await init(ipfsModule, options)\n await connectionTest(ipfs)\n return { ipfs, provider: PROVIDERS.jsIpfs }\n}\n\nmodule.exports = tryJsIpfs\n\n},{\"../constants/providers\":39}],44:[function(require,module,exports){\n'use strict'\n\nconst PROVIDERS = require('../constants/providers')\n\nasync function tryWebExt ({ root, connectionTest }) {\n // Opportunistic optimizations when running inside of web extension (eg. ipfs-companion)\n if (typeof root.chrome === 'object' && root.chrome.extension && root.chrome.extension.getBackgroundPage) {\n // Note: under some vendors getBackgroundPage() will return null if window is in incognito mode\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1329304\n let bg = null\n try {\n bg = root.chrome.extension.getBackgroundPage()\n } catch (err) {\n // not in browser extension\n return null\n }\n // If extension is exposing IPFS API as `ipfs` on the background page\n // it can be used directly for the best performance\n if (bg && bg.ipfs) {\n const { ipfs } = bg\n await connectionTest(ipfs)\n return { ipfs, provider: PROVIDERS.webExt }\n }\n /* Other endpoints can be added here in the future.\n For example, Companion could provide API for other browser extensions:\n https://github.com/ipfs-shipyard/ipfs-companion/issues/307 */\n }\n}\n\nmodule.exports = tryWebExt\n\n},{\"../constants/providers\":39}],45:[function(require,module,exports){\n'use strict'\n\nconst PROVIDERS = require('../constants/providers')\n\nasync function tryWindow ({ root, permissions, connectionTest }) {\n if (root.ipfs) {\n // files.get is required for testing if API works, ensure we request it\n if (!(permissions && permissions.commands && permissions.commands.includes('files.get'))) {\n permissions = permissions || {}\n permissions = JSON.parse(JSON.stringify(permissions)) // deep copy to work with freezed objects\n permissions.commands = permissions.commands || []\n permissions.commands.push('files.get')\n }\n // try window.ipfs.enable first: https://github.com/ipfs-shipyard/ipfs-companion/issues/589\n const ipfs = typeof root.ipfs.enable === 'function'\n ? await root.ipfs.enable(permissions)\n : root.ipfs\n await connectionTest(ipfs)\n return { ipfs, provider: PROVIDERS.windowIpfs }\n }\n}\n\nmodule.exports = tryWindow\n\n},{\"../constants/providers\":39}],46:[function(require,module,exports){\n'use strict';\n\nmodule.exports = value => {\n\tif (Object.prototype.toString.call(value) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn prototype === null || prototype === Object.prototype;\n};\n\n},{}],47:[function(require,module,exports){\n'use strict';\n\nconst {\n URLWithLegacySupport,\n format,\n URLSearchParams,\n defaultBase\n} = require('./src/url');\nconst relative = require('./src/relative');\n\nmodule.exports = {\n URL: URLWithLegacySupport,\n URLSearchParams,\n format,\n relative,\n defaultBase\n};\n\n},{\"./src/relative\":48,\"./src/url\":49}],48:[function(require,module,exports){\n'use strict';\n\nconst { URLWithLegacySupport, format } = require('./url');\n\nmodule.exports = (url, location = {}, protocolMap = {}, defaultProtocol) => {\n let protocol = location.protocol ?\n location.protocol.replace(':', '') :\n 'http';\n\n // Check protocol map\n protocol = (protocolMap[protocol] || defaultProtocol || protocol) + ':';\n let urlParsed;\n\n try {\n urlParsed = new URLWithLegacySupport(url);\n } catch (err) {\n urlParsed = {};\n }\n\n const base = Object.assign({}, location, {\n protocol: protocol || urlParsed.protocol,\n host: location.host || urlParsed.host\n });\n\n return new URLWithLegacySupport(url, format(base)).toString();\n};\n\n},{\"./url\":49}],49:[function(require,module,exports){\n'use strict';\n\nconst defaultBase = self.location ?\n self.location.protocol + '//' + self.location.host :\n '';\nconst URL = self.URL;\n\nclass URLWithLegacySupport {\n constructor(url = '', base = defaultBase) {\n this.super = new URL(url, base);\n this.path = this.pathname + this.search;\n this.auth =\n this.username && this.password ?\n this.username + ':' + this.password :\n null;\n\n this.query =\n this.search && this.search.startsWith('?') ?\n this.search.slice(1) :\n null;\n }\n\n get hash() {\n return this.super.hash;\n }\n get host() {\n return this.super.host;\n }\n get hostname() {\n return this.super.hostname;\n }\n get href() {\n return this.super.href;\n }\n get origin() {\n return this.super.origin;\n }\n get password() {\n return this.super.password;\n }\n get pathname() {\n return this.super.pathname;\n }\n get port() {\n return this.super.port;\n }\n get protocol() {\n return this.super.protocol;\n }\n get search() {\n return this.super.search;\n }\n get searchParams() {\n return this.super.searchParams;\n }\n get username() {\n return this.super.username;\n }\n\n set hash(hash) {\n this.super.hash = hash;\n }\n set host(host) {\n this.super.host = host;\n }\n set hostname(hostname) {\n this.super.hostname = hostname;\n }\n set href(href) {\n this.super.href = href;\n }\n set origin(origin) {\n this.super.origin = origin;\n }\n set password(password) {\n this.super.password = password;\n }\n set pathname(pathname) {\n this.super.pathname = pathname;\n }\n set port(port) {\n this.super.port = port;\n }\n set protocol(protocol) {\n this.super.protocol = protocol;\n }\n set search(search) {\n this.super.search = search;\n }\n set searchParams(searchParams) {\n this.super.searchParams = searchParams;\n }\n set username(username) {\n this.super.username = username;\n }\n\n createObjectURL(o) {\n return this.super.createObjectURL(o);\n }\n revokeObjectURL(o) {\n this.super.revokeObjectURL(o);\n }\n toJSON() {\n return this.super.toJSON();\n }\n toString() {\n return this.super.toString();\n }\n format() {\n return this.toString();\n }\n}\n\nfunction format(obj) {\n if (typeof obj === 'string') {\n const url = new URL(obj);\n\n return url.toString();\n }\n\n if (!(obj instanceof URL)) {\n const userPass =\n obj.username && obj.password ?\n `${obj.username}:${obj.password}@` :\n '';\n const auth = obj.auth ? obj.auth + '@' : '';\n const port = obj.port ? ':' + obj.port : '';\n const protocol = obj.protocol ? obj.protocol + '//' : '';\n const host = obj.host || '';\n const hostname = obj.hostname || '';\n const search = obj.search || (obj.query ? '?' + obj.query : '');\n const hash = obj.hash || '';\n const pathname = obj.pathname || '';\n const path = obj.path || pathname + search;\n\n return `${protocol}${userPass || auth}${host ||\n hostname + port}${path}${hash}`;\n }\n}\n\nmodule.exports = {\n URLWithLegacySupport,\n URLSearchParams: self.URLSearchParams,\n defaultBase,\n format\n};\n\n},{}],50:[function(require,module,exports){\n'use strict';\nconst isOptionObject = require('is-plain-obj');\n\nconst {hasOwnProperty} = Object.prototype;\nconst {propertyIsEnumerable} = Object;\nconst defineProperty = (obj, name, value) => Object.defineProperty(obj, name, {\n\tvalue,\n\twritable: true,\n\tenumerable: true,\n\tconfigurable: true\n});\n\nconst globalThis = this;\nconst defaultMergeOpts = {\n\tconcatArrays: false,\n\tignoreUndefined: false\n};\n\nconst getEnumerableOwnPropertyKeys = value => {\n\tconst keys = [];\n\n\tfor (const key in value) {\n\t\tif (hasOwnProperty.call(value, key)) {\n\t\t\tkeys.push(key);\n\t\t}\n\t}\n\n\t/* istanbul ignore else */\n\tif (Object.getOwnPropertySymbols) {\n\t\tconst symbols = Object.getOwnPropertySymbols(value);\n\n\t\tfor (const symbol of symbols) {\n\t\t\tif (propertyIsEnumerable.call(value, symbol)) {\n\t\t\t\tkeys.push(symbol);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn keys;\n};\n\nfunction clone(value) {\n\tif (Array.isArray(value)) {\n\t\treturn cloneArray(value);\n\t}\n\n\tif (isOptionObject(value)) {\n\t\treturn cloneOptionObject(value);\n\t}\n\n\treturn value;\n}\n\nfunction cloneArray(array) {\n\tconst result = array.slice(0, 0);\n\n\tgetEnumerableOwnPropertyKeys(array).forEach(key => {\n\t\tdefineProperty(result, key, clone(array[key]));\n\t});\n\n\treturn result;\n}\n\nfunction cloneOptionObject(obj) {\n\tconst result = Object.getPrototypeOf(obj) === null ? Object.create(null) : {};\n\n\tgetEnumerableOwnPropertyKeys(obj).forEach(key => {\n\t\tdefineProperty(result, key, clone(obj[key]));\n\t});\n\n\treturn result;\n}\n\n/**\n * @param {*} merged already cloned\n * @param {*} source something to merge\n * @param {string[]} keys keys to merge\n * @param {Object} config Config Object\n * @returns {*} cloned Object\n */\nconst mergeKeys = (merged, source, keys, config) => {\n\tkeys.forEach(key => {\n\t\tif (typeof source[key] === 'undefined' && config.ignoreUndefined) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Do not recurse into prototype chain of merged\n\t\tif (key in merged && merged[key] !== Object.getPrototypeOf(merged)) {\n\t\t\tdefineProperty(merged, key, merge(merged[key], source[key], config));\n\t\t} else {\n\t\t\tdefineProperty(merged, key, clone(source[key]));\n\t\t}\n\t});\n\n\treturn merged;\n};\n\n/**\n * @param {*} merged already cloned\n * @param {*} source something to merge\n * @param {Object} config Config Object\n * @returns {*} cloned Object\n *\n * see [Array.prototype.concat ( ...arguments )](http://www.ecma-international.org/ecma-262/6.0/#sec-array.prototype.concat)\n */\nconst concatArrays = (merged, source, config) => {\n\tlet result = merged.slice(0, 0);\n\tlet resultIndex = 0;\n\n\t[merged, source].forEach(array => {\n\t\tconst indices = [];\n\n\t\t// `result.concat(array)` with cloning\n\t\tfor (let k = 0; k < array.length; k++) {\n\t\t\tif (!hasOwnProperty.call(array, k)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tindices.push(String(k));\n\n\t\t\tif (array === merged) {\n\t\t\t\t// Already cloned\n\t\t\t\tdefineProperty(result, resultIndex++, array[k]);\n\t\t\t} else {\n\t\t\t\tdefineProperty(result, resultIndex++, clone(array[k]));\n\t\t\t}\n\t\t}\n\n\t\t// Merge non-index keys\n\t\tresult = mergeKeys(result, array, getEnumerableOwnPropertyKeys(array).filter(key => !indices.includes(key)), config);\n\t});\n\n\treturn result;\n};\n\n/**\n * @param {*} merged already cloned\n * @param {*} source something to merge\n * @param {Object} config Config Object\n * @returns {*} cloned Object\n */\nfunction merge(merged, source, config) {\n\tif (config.concatArrays && Array.isArray(merged) && Array.isArray(source)) {\n\t\treturn concatArrays(merged, source, config);\n\t}\n\n\tif (!isOptionObject(source) || !isOptionObject(merged)) {\n\t\treturn clone(source);\n\t}\n\n\treturn mergeKeys(merged, source, getEnumerableOwnPropertyKeys(source), config);\n}\n\nmodule.exports = function (...options) {\n\tconst config = merge(clone(defaultMergeOpts), (this !== globalThis && this) || {}, defaultMergeOpts);\n\tlet merged = {_: {}};\n\n\tfor (const option of options) {\n\t\tif (option === undefined) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!isOptionObject(option)) {\n\t\t\tthrow new TypeError('`' + option + '` is not an Option Object');\n\t\t}\n\n\t\tmerged = merge(merged, {_: option}, config);\n\t}\n\n\treturn merged._;\n};\n\n},{\"is-plain-obj\":46}],51:[function(require,module,exports){\narguments[4][21][0].apply(exports,arguments)\n},{\"dup\":21}],52:[function(require,module,exports){\narguments[4][22][0].apply(exports,arguments)\n},{\"buffer\":8,\"dup\":22}],53:[function(require,module,exports){\narguments[4][23][0].apply(exports,arguments)\n},{\"dup\":23}],54:[function(require,module,exports){\narguments[4][24][0].apply(exports,arguments)\n},{\"buffer\":8,\"dup\":24}],55:[function(require,module,exports){\narguments[4][25][0].apply(exports,arguments)\n},{\"./base.js\":51,\"./base16\":52,\"./base32\":53,\"./base64\":54,\"base-x\":6,\"dup\":25}],56:[function(require,module,exports){\n/**\n * Implementation of the [multibase](https://github.com/multiformats/multibase) specification.\n * @module Multibase\n */\n'use strict'\n\nconst { Buffer } = require('buffer')\nconst constants = require('./constants')\n\nexports = module.exports = multibase\nexports.encode = encode\nexports.decode = decode\nexports.isEncoded = isEncoded\nexports.names = Object.freeze(Object.keys(constants.names))\nexports.codes = Object.freeze(Object.keys(constants.codes))\n\n/**\n * Create a new buffer with the multibase varint+code.\n *\n * @param {string|number} nameOrCode - The multibase name or code number.\n * @param {Buffer} buf - The data to be prefixed with multibase.\n * @memberof Multibase\n * @returns {Buffer}\n */\nfunction multibase (nameOrCode, buf) {\n if (!buf) {\n throw new Error('requires an encoded buffer')\n }\n const base = getBase(nameOrCode)\n const codeBuf = Buffer.from(base.code)\n\n const name = base.name\n validEncode(name, buf)\n return Buffer.concat([codeBuf, buf])\n}\n\n/**\n * Encode data with the specified base and add the multibase prefix.\n *\n * @param {string|number} nameOrCode - The multibase name or code number.\n * @param {Buffer} buf - The data to be encoded.\n * @returns {Buffer}\n * @memberof Multibase\n */\nfunction encode (nameOrCode, buf) {\n const base = getBase(nameOrCode)\n const name = base.name\n\n return multibase(name, Buffer.from(base.encode(buf)))\n}\n\n/**\n * Takes a buffer or string encoded with multibase header, decodes it and\n * returns the decoded buffer\n *\n * @param {Buffer|string} bufOrString\n * @returns {Buffer}\n * @memberof Multibase\n *\n */\nfunction decode (bufOrString) {\n if (Buffer.isBuffer(bufOrString)) {\n bufOrString = bufOrString.toString()\n }\n\n const code = bufOrString.substring(0, 1)\n bufOrString = bufOrString.substring(1, bufOrString.length)\n\n if (typeof bufOrString === 'string') {\n bufOrString = Buffer.from(bufOrString)\n }\n\n const base = getBase(code)\n return Buffer.from(base.decode(bufOrString.toString()))\n}\n\n/**\n * Is the given data multibase encoded?\n *\n * @param {Buffer|string} bufOrString\n * @returns {boolean}\n * @memberof Multibase\n */\nfunction isEncoded (bufOrString) {\n if (Buffer.isBuffer(bufOrString)) {\n bufOrString = bufOrString.toString()\n }\n\n // Ensure bufOrString is a string\n if (Object.prototype.toString.call(bufOrString) !== '[object String]') {\n return false\n }\n\n const code = bufOrString.substring(0, 1)\n try {\n const base = getBase(code)\n return base.name\n } catch (err) {\n return false\n }\n}\n\n/**\n * @param {string} name\n * @param {Buffer} buf\n * @private\n * @returns {undefined}\n */\nfunction validEncode (name, buf) {\n const base = getBase(name)\n base.decode(buf.toString())\n}\n\nfunction getBase (nameOrCode) {\n let base\n\n if (constants.names[nameOrCode]) {\n base = constants.names[nameOrCode]\n } else if (constants.codes[nameOrCode]) {\n base = constants.codes[nameOrCode]\n } else {\n throw new Error('Unsupported encoding')\n }\n\n if (!base.isImplemented()) {\n throw new Error('Base ' + nameOrCode + ' is not implemented yet')\n }\n\n return base\n}\n\n},{\"./constants\":55,\"buffer\":8}],57:[function(require,module,exports){\narguments[4][12][0].apply(exports,arguments)\n},{\"dup\":12}],58:[function(require,module,exports){\narguments[4][13][0].apply(exports,arguments)\n},{\"./base-table.json\":57,\"dup\":13}],59:[function(require,module,exports){\narguments[4][14][0].apply(exports,arguments)\n},{\"./constants\":58,\"./int-table\":60,\"./print\":61,\"./util\":62,\"./varint-table\":63,\"buffer\":8,\"dup\":14,\"varint\":88}],60:[function(require,module,exports){\narguments[4][15][0].apply(exports,arguments)\n},{\"./base-table.json\":57,\"dup\":15}],61:[function(require,module,exports){\narguments[4][16][0].apply(exports,arguments)\n},{\"./base-table.json\":57,\"dup\":16}],62:[function(require,module,exports){\narguments[4][17][0].apply(exports,arguments)\n},{\"buffer\":8,\"dup\":17,\"varint\":88}],63:[function(require,module,exports){\narguments[4][18][0].apply(exports,arguments)\n},{\"./base-table.json\":57,\"./util\":62,\"dup\":18}],64:[function(require,module,exports){\n/* eslint quote-props: off */\n/* eslint key-spacing: off */\n'use strict'\n\nexports.names = Object.freeze({\n 'identity': 0x0,\n 'sha1': 0x11,\n 'sha2-256': 0x12,\n 'sha2-512': 0x13,\n 'dbl-sha2-256': 0x56,\n 'sha3-224': 0x17,\n 'sha3-256': 0x16,\n 'sha3-384': 0x15,\n 'sha3-512': 0x14,\n 'shake-128': 0x18,\n 'shake-256': 0x19,\n 'keccak-224': 0x1A,\n 'keccak-256': 0x1B,\n 'keccak-384': 0x1C,\n 'keccak-512': 0x1D,\n 'murmur3-128': 0x22,\n 'murmur3-32': 0x23,\n 'md4': 0xd4,\n 'md5': 0xd5,\n 'blake2b-8': 0xb201,\n 'blake2b-16': 0xb202,\n 'blake2b-24': 0xb203,\n 'blake2b-32': 0xb204,\n 'blake2b-40': 0xb205,\n 'blake2b-48': 0xb206,\n 'blake2b-56': 0xb207,\n 'blake2b-64': 0xb208,\n 'blake2b-72': 0xb209,\n 'blake2b-80': 0xb20a,\n 'blake2b-88': 0xb20b,\n 'blake2b-96': 0xb20c,\n 'blake2b-104': 0xb20d,\n 'blake2b-112': 0xb20e,\n 'blake2b-120': 0xb20f,\n 'blake2b-128': 0xb210,\n 'blake2b-136': 0xb211,\n 'blake2b-144': 0xb212,\n 'blake2b-152': 0xb213,\n 'blake2b-160': 0xb214,\n 'blake2b-168': 0xb215,\n 'blake2b-176': 0xb216,\n 'blake2b-184': 0xb217,\n 'blake2b-192': 0xb218,\n 'blake2b-200': 0xb219,\n 'blake2b-208': 0xb21a,\n 'blake2b-216': 0xb21b,\n 'blake2b-224': 0xb21c,\n 'blake2b-232': 0xb21d,\n 'blake2b-240': 0xb21e,\n 'blake2b-248': 0xb21f,\n 'blake2b-256': 0xb220,\n 'blake2b-264': 0xb221,\n 'blake2b-272': 0xb222,\n 'blake2b-280': 0xb223,\n 'blake2b-288': 0xb224,\n 'blake2b-296': 0xb225,\n 'blake2b-304': 0xb226,\n 'blake2b-312': 0xb227,\n 'blake2b-320': 0xb228,\n 'blake2b-328': 0xb229,\n 'blake2b-336': 0xb22a,\n 'blake2b-344': 0xb22b,\n 'blake2b-352': 0xb22c,\n 'blake2b-360': 0xb22d,\n 'blake2b-368': 0xb22e,\n 'blake2b-376': 0xb22f,\n 'blake2b-384': 0xb230,\n 'blake2b-392': 0xb231,\n 'blake2b-400': 0xb232,\n 'blake2b-408': 0xb233,\n 'blake2b-416': 0xb234,\n 'blake2b-424': 0xb235,\n 'blake2b-432': 0xb236,\n 'blake2b-440': 0xb237,\n 'blake2b-448': 0xb238,\n 'blake2b-456': 0xb239,\n 'blake2b-464': 0xb23a,\n 'blake2b-472': 0xb23b,\n 'blake2b-480': 0xb23c,\n 'blake2b-488': 0xb23d,\n 'blake2b-496': 0xb23e,\n 'blake2b-504': 0xb23f,\n 'blake2b-512': 0xb240,\n 'blake2s-8': 0xb241,\n 'blake2s-16': 0xb242,\n 'blake2s-24': 0xb243,\n 'blake2s-32': 0xb244,\n 'blake2s-40': 0xb245,\n 'blake2s-48': 0xb246,\n 'blake2s-56': 0xb247,\n 'blake2s-64': 0xb248,\n 'blake2s-72': 0xb249,\n 'blake2s-80': 0xb24a,\n 'blake2s-88': 0xb24b,\n 'blake2s-96': 0xb24c,\n 'blake2s-104': 0xb24d,\n 'blake2s-112': 0xb24e,\n 'blake2s-120': 0xb24f,\n 'blake2s-128': 0xb250,\n 'blake2s-136': 0xb251,\n 'blake2s-144': 0xb252,\n 'blake2s-152': 0xb253,\n 'blake2s-160': 0xb254,\n 'blake2s-168': 0xb255,\n 'blake2s-176': 0xb256,\n 'blake2s-184': 0xb257,\n 'blake2s-192': 0xb258,\n 'blake2s-200': 0xb259,\n 'blake2s-208': 0xb25a,\n 'blake2s-216': 0xb25b,\n 'blake2s-224': 0xb25c,\n 'blake2s-232': 0xb25d,\n 'blake2s-240': 0xb25e,\n 'blake2s-248': 0xb25f,\n 'blake2s-256': 0xb260,\n 'Skein256-8': 0xb301,\n 'Skein256-16': 0xb302,\n 'Skein256-24': 0xb303,\n 'Skein256-32': 0xb304,\n 'Skein256-40': 0xb305,\n 'Skein256-48': 0xb306,\n 'Skein256-56': 0xb307,\n 'Skein256-64': 0xb308,\n 'Skein256-72': 0xb309,\n 'Skein256-80': 0xb30a,\n 'Skein256-88': 0xb30b,\n 'Skein256-96': 0xb30c,\n 'Skein256-104': 0xb30d,\n 'Skein256-112': 0xb30e,\n 'Skein256-120': 0xb30f,\n 'Skein256-128': 0xb310,\n 'Skein256-136': 0xb311,\n 'Skein256-144': 0xb312,\n 'Skein256-152': 0xb313,\n 'Skein256-160': 0xb314,\n 'Skein256-168': 0xb315,\n 'Skein256-176': 0xb316,\n 'Skein256-184': 0xb317,\n 'Skein256-192': 0xb318,\n 'Skein256-200': 0xb319,\n 'Skein256-208': 0xb31a,\n 'Skein256-216': 0xb31b,\n 'Skein256-224': 0xb31c,\n 'Skein256-232': 0xb31d,\n 'Skein256-240': 0xb31e,\n 'Skein256-248': 0xb31f,\n 'Skein256-256': 0xb320,\n 'Skein512-8': 0xb321,\n 'Skein512-16': 0xb322,\n 'Skein512-24': 0xb323,\n 'Skein512-32': 0xb324,\n 'Skein512-40': 0xb325,\n 'Skein512-48': 0xb326,\n 'Skein512-56': 0xb327,\n 'Skein512-64': 0xb328,\n 'Skein512-72': 0xb329,\n 'Skein512-80': 0xb32a,\n 'Skein512-88': 0xb32b,\n 'Skein512-96': 0xb32c,\n 'Skein512-104': 0xb32d,\n 'Skein512-112': 0xb32e,\n 'Skein512-120': 0xb32f,\n 'Skein512-128': 0xb330,\n 'Skein512-136': 0xb331,\n 'Skein512-144': 0xb332,\n 'Skein512-152': 0xb333,\n 'Skein512-160': 0xb334,\n 'Skein512-168': 0xb335,\n 'Skein512-176': 0xb336,\n 'Skein512-184': 0xb337,\n 'Skein512-192': 0xb338,\n 'Skein512-200': 0xb339,\n 'Skein512-208': 0xb33a,\n 'Skein512-216': 0xb33b,\n 'Skein512-224': 0xb33c,\n 'Skein512-232': 0xb33d,\n 'Skein512-240': 0xb33e,\n 'Skein512-248': 0xb33f,\n 'Skein512-256': 0xb340,\n 'Skein512-264': 0xb341,\n 'Skein512-272': 0xb342,\n 'Skein512-280': 0xb343,\n 'Skein512-288': 0xb344,\n 'Skein512-296': 0xb345,\n 'Skein512-304': 0xb346,\n 'Skein512-312': 0xb347,\n 'Skein512-320': 0xb348,\n 'Skein512-328': 0xb349,\n 'Skein512-336': 0xb34a,\n 'Skein512-344': 0xb34b,\n 'Skein512-352': 0xb34c,\n 'Skein512-360': 0xb34d,\n 'Skein512-368': 0xb34e,\n 'Skein512-376': 0xb34f,\n 'Skein512-384': 0xb350,\n 'Skein512-392': 0xb351,\n 'Skein512-400': 0xb352,\n 'Skein512-408': 0xb353,\n 'Skein512-416': 0xb354,\n 'Skein512-424': 0xb355,\n 'Skein512-432': 0xb356,\n 'Skein512-440': 0xb357,\n 'Skein512-448': 0xb358,\n 'Skein512-456': 0xb359,\n 'Skein512-464': 0xb35a,\n 'Skein512-472': 0xb35b,\n 'Skein512-480': 0xb35c,\n 'Skein512-488': 0xb35d,\n 'Skein512-496': 0xb35e,\n 'Skein512-504': 0xb35f,\n 'Skein512-512': 0xb360,\n 'Skein1024-8': 0xb361,\n 'Skein1024-16': 0xb362,\n 'Skein1024-24': 0xb363,\n 'Skein1024-32': 0xb364,\n 'Skein1024-40': 0xb365,\n 'Skein1024-48': 0xb366,\n 'Skein1024-56': 0xb367,\n 'Skein1024-64': 0xb368,\n 'Skein1024-72': 0xb369,\n 'Skein1024-80': 0xb36a,\n 'Skein1024-88': 0xb36b,\n 'Skein1024-96': 0xb36c,\n 'Skein1024-104': 0xb36d,\n 'Skein1024-112': 0xb36e,\n 'Skein1024-120': 0xb36f,\n 'Skein1024-128': 0xb370,\n 'Skein1024-136': 0xb371,\n 'Skein1024-144': 0xb372,\n 'Skein1024-152': 0xb373,\n 'Skein1024-160': 0xb374,\n 'Skein1024-168': 0xb375,\n 'Skein1024-176': 0xb376,\n 'Skein1024-184': 0xb377,\n 'Skein1024-192': 0xb378,\n 'Skein1024-200': 0xb379,\n 'Skein1024-208': 0xb37a,\n 'Skein1024-216': 0xb37b,\n 'Skein1024-224': 0xb37c,\n 'Skein1024-232': 0xb37d,\n 'Skein1024-240': 0xb37e,\n 'Skein1024-248': 0xb37f,\n 'Skein1024-256': 0xb380,\n 'Skein1024-264': 0xb381,\n 'Skein1024-272': 0xb382,\n 'Skein1024-280': 0xb383,\n 'Skein1024-288': 0xb384,\n 'Skein1024-296': 0xb385,\n 'Skein1024-304': 0xb386,\n 'Skein1024-312': 0xb387,\n 'Skein1024-320': 0xb388,\n 'Skein1024-328': 0xb389,\n 'Skein1024-336': 0xb38a,\n 'Skein1024-344': 0xb38b,\n 'Skein1024-352': 0xb38c,\n 'Skein1024-360': 0xb38d,\n 'Skein1024-368': 0xb38e,\n 'Skein1024-376': 0xb38f,\n 'Skein1024-384': 0xb390,\n 'Skein1024-392': 0xb391,\n 'Skein1024-400': 0xb392,\n 'Skein1024-408': 0xb393,\n 'Skein1024-416': 0xb394,\n 'Skein1024-424': 0xb395,\n 'Skein1024-432': 0xb396,\n 'Skein1024-440': 0xb397,\n 'Skein1024-448': 0xb398,\n 'Skein1024-456': 0xb399,\n 'Skein1024-464': 0xb39a,\n 'Skein1024-472': 0xb39b,\n 'Skein1024-480': 0xb39c,\n 'Skein1024-488': 0xb39d,\n 'Skein1024-496': 0xb39e,\n 'Skein1024-504': 0xb39f,\n 'Skein1024-512': 0xb3a0,\n 'Skein1024-520': 0xb3a1,\n 'Skein1024-528': 0xb3a2,\n 'Skein1024-536': 0xb3a3,\n 'Skein1024-544': 0xb3a4,\n 'Skein1024-552': 0xb3a5,\n 'Skein1024-560': 0xb3a6,\n 'Skein1024-568': 0xb3a7,\n 'Skein1024-576': 0xb3a8,\n 'Skein1024-584': 0xb3a9,\n 'Skein1024-592': 0xb3aa,\n 'Skein1024-600': 0xb3ab,\n 'Skein1024-608': 0xb3ac,\n 'Skein1024-616': 0xb3ad,\n 'Skein1024-624': 0xb3ae,\n 'Skein1024-632': 0xb3af,\n 'Skein1024-640': 0xb3b0,\n 'Skein1024-648': 0xb3b1,\n 'Skein1024-656': 0xb3b2,\n 'Skein1024-664': 0xb3b3,\n 'Skein1024-672': 0xb3b4,\n 'Skein1024-680': 0xb3b5,\n 'Skein1024-688': 0xb3b6,\n 'Skein1024-696': 0xb3b7,\n 'Skein1024-704': 0xb3b8,\n 'Skein1024-712': 0xb3b9,\n 'Skein1024-720': 0xb3ba,\n 'Skein1024-728': 0xb3bb,\n 'Skein1024-736': 0xb3bc,\n 'Skein1024-744': 0xb3bd,\n 'Skein1024-752': 0xb3be,\n 'Skein1024-760': 0xb3bf,\n 'Skein1024-768': 0xb3c0,\n 'Skein1024-776': 0xb3c1,\n 'Skein1024-784': 0xb3c2,\n 'Skein1024-792': 0xb3c3,\n 'Skein1024-800': 0xb3c4,\n 'Skein1024-808': 0xb3c5,\n 'Skein1024-816': 0xb3c6,\n 'Skein1024-824': 0xb3c7,\n 'Skein1024-832': 0xb3c8,\n 'Skein1024-840': 0xb3c9,\n 'Skein1024-848': 0xb3ca,\n 'Skein1024-856': 0xb3cb,\n 'Skein1024-864': 0xb3cc,\n 'Skein1024-872': 0xb3cd,\n 'Skein1024-880': 0xb3ce,\n 'Skein1024-888': 0xb3cf,\n 'Skein1024-896': 0xb3d0,\n 'Skein1024-904': 0xb3d1,\n 'Skein1024-912': 0xb3d2,\n 'Skein1024-920': 0xb3d3,\n 'Skein1024-928': 0xb3d4,\n 'Skein1024-936': 0xb3d5,\n 'Skein1024-944': 0xb3d6,\n 'Skein1024-952': 0xb3d7,\n 'Skein1024-960': 0xb3d8,\n 'Skein1024-968': 0xb3d9,\n 'Skein1024-976': 0xb3da,\n 'Skein1024-984': 0xb3db,\n 'Skein1024-992': 0xb3dc,\n 'Skein1024-1000': 0xb3dd,\n 'Skein1024-1008': 0xb3de,\n 'Skein1024-1016': 0xb3df,\n 'Skein1024-1024': 0xb3e0\n})\n\nexports.codes = Object.freeze({\n 0x0: 'identity',\n\n // sha family\n 0x11: 'sha1',\n 0x12: 'sha2-256',\n 0x13: 'sha2-512',\n 0x56: 'dbl-sha2-256',\n 0x17: 'sha3-224',\n 0x16: 'sha3-256',\n 0x15: 'sha3-384',\n 0x14: 'sha3-512',\n 0x18: 'shake-128',\n 0x19: 'shake-256',\n 0x1A: 'keccak-224',\n 0x1B: 'keccak-256',\n 0x1C: 'keccak-384',\n 0x1D: 'keccak-512',\n\n 0x22: 'murmur3-128',\n 0x23: 'murmur3-32',\n\n 0xd4: 'md4',\n 0xd5: 'md5',\n\n // blake2\n 0xb201: 'blake2b-8',\n 0xb202: 'blake2b-16',\n 0xb203: 'blake2b-24',\n 0xb204: 'blake2b-32',\n 0xb205: 'blake2b-40',\n 0xb206: 'blake2b-48',\n 0xb207: 'blake2b-56',\n 0xb208: 'blake2b-64',\n 0xb209: 'blake2b-72',\n 0xb20a: 'blake2b-80',\n 0xb20b: 'blake2b-88',\n 0xb20c: 'blake2b-96',\n 0xb20d: 'blake2b-104',\n 0xb20e: 'blake2b-112',\n 0xb20f: 'blake2b-120',\n 0xb210: 'blake2b-128',\n 0xb211: 'blake2b-136',\n 0xb212: 'blake2b-144',\n 0xb213: 'blake2b-152',\n 0xb214: 'blake2b-160',\n 0xb215: 'blake2b-168',\n 0xb216: 'blake2b-176',\n 0xb217: 'blake2b-184',\n 0xb218: 'blake2b-192',\n 0xb219: 'blake2b-200',\n 0xb21a: 'blake2b-208',\n 0xb21b: 'blake2b-216',\n 0xb21c: 'blake2b-224',\n 0xb21d: 'blake2b-232',\n 0xb21e: 'blake2b-240',\n 0xb21f: 'blake2b-248',\n 0xb220: 'blake2b-256',\n 0xb221: 'blake2b-264',\n 0xb222: 'blake2b-272',\n 0xb223: 'blake2b-280',\n 0xb224: 'blake2b-288',\n 0xb225: 'blake2b-296',\n 0xb226: 'blake2b-304',\n 0xb227: 'blake2b-312',\n 0xb228: 'blake2b-320',\n 0xb229: 'blake2b-328',\n 0xb22a: 'blake2b-336',\n 0xb22b: 'blake2b-344',\n 0xb22c: 'blake2b-352',\n 0xb22d: 'blake2b-360',\n 0xb22e: 'blake2b-368',\n 0xb22f: 'blake2b-376',\n 0xb230: 'blake2b-384',\n 0xb231: 'blake2b-392',\n 0xb232: 'blake2b-400',\n 0xb233: 'blake2b-408',\n 0xb234: 'blake2b-416',\n 0xb235: 'blake2b-424',\n 0xb236: 'blake2b-432',\n 0xb237: 'blake2b-440',\n 0xb238: 'blake2b-448',\n 0xb239: 'blake2b-456',\n 0xb23a: 'blake2b-464',\n 0xb23b: 'blake2b-472',\n 0xb23c: 'blake2b-480',\n 0xb23d: 'blake2b-488',\n 0xb23e: 'blake2b-496',\n 0xb23f: 'blake2b-504',\n 0xb240: 'blake2b-512',\n 0xb241: 'blake2s-8',\n 0xb242: 'blake2s-16',\n 0xb243: 'blake2s-24',\n 0xb244: 'blake2s-32',\n 0xb245: 'blake2s-40',\n 0xb246: 'blake2s-48',\n 0xb247: 'blake2s-56',\n 0xb248: 'blake2s-64',\n 0xb249: 'blake2s-72',\n 0xb24a: 'blake2s-80',\n 0xb24b: 'blake2s-88',\n 0xb24c: 'blake2s-96',\n 0xb24d: 'blake2s-104',\n 0xb24e: 'blake2s-112',\n 0xb24f: 'blake2s-120',\n 0xb250: 'blake2s-128',\n 0xb251: 'blake2s-136',\n 0xb252: 'blake2s-144',\n 0xb253: 'blake2s-152',\n 0xb254: 'blake2s-160',\n 0xb255: 'blake2s-168',\n 0xb256: 'blake2s-176',\n 0xb257: 'blake2s-184',\n 0xb258: 'blake2s-192',\n 0xb259: 'blake2s-200',\n 0xb25a: 'blake2s-208',\n 0xb25b: 'blake2s-216',\n 0xb25c: 'blake2s-224',\n 0xb25d: 'blake2s-232',\n 0xb25e: 'blake2s-240',\n 0xb25f: 'blake2s-248',\n 0xb260: 'blake2s-256',\n\n // skein\n 0xb301: 'Skein256-8',\n 0xb302: 'Skein256-16',\n 0xb303: 'Skein256-24',\n 0xb304: 'Skein256-32',\n 0xb305: 'Skein256-40',\n 0xb306: 'Skein256-48',\n 0xb307: 'Skein256-56',\n 0xb308: 'Skein256-64',\n 0xb309: 'Skein256-72',\n 0xb30a: 'Skein256-80',\n 0xb30b: 'Skein256-88',\n 0xb30c: 'Skein256-96',\n 0xb30d: 'Skein256-104',\n 0xb30e: 'Skein256-112',\n 0xb30f: 'Skein256-120',\n 0xb310: 'Skein256-128',\n 0xb311: 'Skein256-136',\n 0xb312: 'Skein256-144',\n 0xb313: 'Skein256-152',\n 0xb314: 'Skein256-160',\n 0xb315: 'Skein256-168',\n 0xb316: 'Skein256-176',\n 0xb317: 'Skein256-184',\n 0xb318: 'Skein256-192',\n 0xb319: 'Skein256-200',\n 0xb31a: 'Skein256-208',\n 0xb31b: 'Skein256-216',\n 0xb31c: 'Skein256-224',\n 0xb31d: 'Skein256-232',\n 0xb31e: 'Skein256-240',\n 0xb31f: 'Skein256-248',\n 0xb320: 'Skein256-256',\n 0xb321: 'Skein512-8',\n 0xb322: 'Skein512-16',\n 0xb323: 'Skein512-24',\n 0xb324: 'Skein512-32',\n 0xb325: 'Skein512-40',\n 0xb326: 'Skein512-48',\n 0xb327: 'Skein512-56',\n 0xb328: 'Skein512-64',\n 0xb329: 'Skein512-72',\n 0xb32a: 'Skein512-80',\n 0xb32b: 'Skein512-88',\n 0xb32c: 'Skein512-96',\n 0xb32d: 'Skein512-104',\n 0xb32e: 'Skein512-112',\n 0xb32f: 'Skein512-120',\n 0xb330: 'Skein512-128',\n 0xb331: 'Skein512-136',\n 0xb332: 'Skein512-144',\n 0xb333: 'Skein512-152',\n 0xb334: 'Skein512-160',\n 0xb335: 'Skein512-168',\n 0xb336: 'Skein512-176',\n 0xb337: 'Skein512-184',\n 0xb338: 'Skein512-192',\n 0xb339: 'Skein512-200',\n 0xb33a: 'Skein512-208',\n 0xb33b: 'Skein512-216',\n 0xb33c: 'Skein512-224',\n 0xb33d: 'Skein512-232',\n 0xb33e: 'Skein512-240',\n 0xb33f: 'Skein512-248',\n 0xb340: 'Skein512-256',\n 0xb341: 'Skein512-264',\n 0xb342: 'Skein512-272',\n 0xb343: 'Skein512-280',\n 0xb344: 'Skein512-288',\n 0xb345: 'Skein512-296',\n 0xb346: 'Skein512-304',\n 0xb347: 'Skein512-312',\n 0xb348: 'Skein512-320',\n 0xb349: 'Skein512-328',\n 0xb34a: 'Skein512-336',\n 0xb34b: 'Skein512-344',\n 0xb34c: 'Skein512-352',\n 0xb34d: 'Skein512-360',\n 0xb34e: 'Skein512-368',\n 0xb34f: 'Skein512-376',\n 0xb350: 'Skein512-384',\n 0xb351: 'Skein512-392',\n 0xb352: 'Skein512-400',\n 0xb353: 'Skein512-408',\n 0xb354: 'Skein512-416',\n 0xb355: 'Skein512-424',\n 0xb356: 'Skein512-432',\n 0xb357: 'Skein512-440',\n 0xb358: 'Skein512-448',\n 0xb359: 'Skein512-456',\n 0xb35a: 'Skein512-464',\n 0xb35b: 'Skein512-472',\n 0xb35c: 'Skein512-480',\n 0xb35d: 'Skein512-488',\n 0xb35e: 'Skein512-496',\n 0xb35f: 'Skein512-504',\n 0xb360: 'Skein512-512',\n 0xb361: 'Skein1024-8',\n 0xb362: 'Skein1024-16',\n 0xb363: 'Skein1024-24',\n 0xb364: 'Skein1024-32',\n 0xb365: 'Skein1024-40',\n 0xb366: 'Skein1024-48',\n 0xb367: 'Skein1024-56',\n 0xb368: 'Skein1024-64',\n 0xb369: 'Skein1024-72',\n 0xb36a: 'Skein1024-80',\n 0xb36b: 'Skein1024-88',\n 0xb36c: 'Skein1024-96',\n 0xb36d: 'Skein1024-104',\n 0xb36e: 'Skein1024-112',\n 0xb36f: 'Skein1024-120',\n 0xb370: 'Skein1024-128',\n 0xb371: 'Skein1024-136',\n 0xb372: 'Skein1024-144',\n 0xb373: 'Skein1024-152',\n 0xb374: 'Skein1024-160',\n 0xb375: 'Skein1024-168',\n 0xb376: 'Skein1024-176',\n 0xb377: 'Skein1024-184',\n 0xb378: 'Skein1024-192',\n 0xb379: 'Skein1024-200',\n 0xb37a: 'Skein1024-208',\n 0xb37b: 'Skein1024-216',\n 0xb37c: 'Skein1024-224',\n 0xb37d: 'Skein1024-232',\n 0xb37e: 'Skein1024-240',\n 0xb37f: 'Skein1024-248',\n 0xb380: 'Skein1024-256',\n 0xb381: 'Skein1024-264',\n 0xb382: 'Skein1024-272',\n 0xb383: 'Skein1024-280',\n 0xb384: 'Skein1024-288',\n 0xb385: 'Skein1024-296',\n 0xb386: 'Skein1024-304',\n 0xb387: 'Skein1024-312',\n 0xb388: 'Skein1024-320',\n 0xb389: 'Skein1024-328',\n 0xb38a: 'Skein1024-336',\n 0xb38b: 'Skein1024-344',\n 0xb38c: 'Skein1024-352',\n 0xb38d: 'Skein1024-360',\n 0xb38e: 'Skein1024-368',\n 0xb38f: 'Skein1024-376',\n 0xb390: 'Skein1024-384',\n 0xb391: 'Skein1024-392',\n 0xb392: 'Skein1024-400',\n 0xb393: 'Skein1024-408',\n 0xb394: 'Skein1024-416',\n 0xb395: 'Skein1024-424',\n 0xb396: 'Skein1024-432',\n 0xb397: 'Skein1024-440',\n 0xb398: 'Skein1024-448',\n 0xb399: 'Skein1024-456',\n 0xb39a: 'Skein1024-464',\n 0xb39b: 'Skein1024-472',\n 0xb39c: 'Skein1024-480',\n 0xb39d: 'Skein1024-488',\n 0xb39e: 'Skein1024-496',\n 0xb39f: 'Skein1024-504',\n 0xb3a0: 'Skein1024-512',\n 0xb3a1: 'Skein1024-520',\n 0xb3a2: 'Skein1024-528',\n 0xb3a3: 'Skein1024-536',\n 0xb3a4: 'Skein1024-544',\n 0xb3a5: 'Skein1024-552',\n 0xb3a6: 'Skein1024-560',\n 0xb3a7: 'Skein1024-568',\n 0xb3a8: 'Skein1024-576',\n 0xb3a9: 'Skein1024-584',\n 0xb3aa: 'Skein1024-592',\n 0xb3ab: 'Skein1024-600',\n 0xb3ac: 'Skein1024-608',\n 0xb3ad: 'Skein1024-616',\n 0xb3ae: 'Skein1024-624',\n 0xb3af: 'Skein1024-632',\n 0xb3b0: 'Skein1024-640',\n 0xb3b1: 'Skein1024-648',\n 0xb3b2: 'Skein1024-656',\n 0xb3b3: 'Skein1024-664',\n 0xb3b4: 'Skein1024-672',\n 0xb3b5: 'Skein1024-680',\n 0xb3b6: 'Skein1024-688',\n 0xb3b7: 'Skein1024-696',\n 0xb3b8: 'Skein1024-704',\n 0xb3b9: 'Skein1024-712',\n 0xb3ba: 'Skein1024-720',\n 0xb3bb: 'Skein1024-728',\n 0xb3bc: 'Skein1024-736',\n 0xb3bd: 'Skein1024-744',\n 0xb3be: 'Skein1024-752',\n 0xb3bf: 'Skein1024-760',\n 0xb3c0: 'Skein1024-768',\n 0xb3c1: 'Skein1024-776',\n 0xb3c2: 'Skein1024-784',\n 0xb3c3: 'Skein1024-792',\n 0xb3c4: 'Skein1024-800',\n 0xb3c5: 'Skein1024-808',\n 0xb3c6: 'Skein1024-816',\n 0xb3c7: 'Skein1024-824',\n 0xb3c8: 'Skein1024-832',\n 0xb3c9: 'Skein1024-840',\n 0xb3ca: 'Skein1024-848',\n 0xb3cb: 'Skein1024-856',\n 0xb3cc: 'Skein1024-864',\n 0xb3cd: 'Skein1024-872',\n 0xb3ce: 'Skein1024-880',\n 0xb3cf: 'Skein1024-888',\n 0xb3d0: 'Skein1024-896',\n 0xb3d1: 'Skein1024-904',\n 0xb3d2: 'Skein1024-912',\n 0xb3d3: 'Skein1024-920',\n 0xb3d4: 'Skein1024-928',\n 0xb3d5: 'Skein1024-936',\n 0xb3d6: 'Skein1024-944',\n 0xb3d7: 'Skein1024-952',\n 0xb3d8: 'Skein1024-960',\n 0xb3d9: 'Skein1024-968',\n 0xb3da: 'Skein1024-976',\n 0xb3db: 'Skein1024-984',\n 0xb3dc: 'Skein1024-992',\n 0xb3dd: 'Skein1024-1000',\n 0xb3de: 'Skein1024-1008',\n 0xb3df: 'Skein1024-1016',\n 0xb3e0: 'Skein1024-1024'\n})\n\nexports.defaultLengths = Object.freeze({\n 0x11: 20,\n 0x12: 32,\n 0x13: 64,\n 0x56: 32,\n 0x17: 28,\n 0x16: 32,\n 0x15: 48,\n 0x14: 64,\n 0x18: 32,\n 0x19: 64,\n 0x1A: 28,\n 0x1B: 32,\n 0x1C: 48,\n 0x1D: 64,\n 0x22: 32,\n\n 0xb201: 0x01,\n 0xb202: 0x02,\n 0xb203: 0x03,\n 0xb204: 0x04,\n 0xb205: 0x05,\n 0xb206: 0x06,\n 0xb207: 0x07,\n 0xb208: 0x08,\n 0xb209: 0x09,\n 0xb20a: 0x0a,\n 0xb20b: 0x0b,\n 0xb20c: 0x0c,\n 0xb20d: 0x0d,\n 0xb20e: 0x0e,\n 0xb20f: 0x0f,\n 0xb210: 0x10,\n 0xb211: 0x11,\n 0xb212: 0x12,\n 0xb213: 0x13,\n 0xb214: 0x14,\n 0xb215: 0x15,\n 0xb216: 0x16,\n 0xb217: 0x17,\n 0xb218: 0x18,\n 0xb219: 0x19,\n 0xb21a: 0x1a,\n 0xb21b: 0x1b,\n 0xb21c: 0x1c,\n 0xb21d: 0x1d,\n 0xb21e: 0x1e,\n 0xb21f: 0x1f,\n 0xb220: 0x20,\n 0xb221: 0x21,\n 0xb222: 0x22,\n 0xb223: 0x23,\n 0xb224: 0x24,\n 0xb225: 0x25,\n 0xb226: 0x26,\n 0xb227: 0x27,\n 0xb228: 0x28,\n 0xb229: 0x29,\n 0xb22a: 0x2a,\n 0xb22b: 0x2b,\n 0xb22c: 0x2c,\n 0xb22d: 0x2d,\n 0xb22e: 0x2e,\n 0xb22f: 0x2f,\n 0xb230: 0x30,\n 0xb231: 0x31,\n 0xb232: 0x32,\n 0xb233: 0x33,\n 0xb234: 0x34,\n 0xb235: 0x35,\n 0xb236: 0x36,\n 0xb237: 0x37,\n 0xb238: 0x38,\n 0xb239: 0x39,\n 0xb23a: 0x3a,\n 0xb23b: 0x3b,\n 0xb23c: 0x3c,\n 0xb23d: 0x3d,\n 0xb23e: 0x3e,\n 0xb23f: 0x3f,\n 0xb240: 0x40,\n 0xb241: 0x01,\n 0xb242: 0x02,\n 0xb243: 0x03,\n 0xb244: 0x04,\n 0xb245: 0x05,\n 0xb246: 0x06,\n 0xb247: 0x07,\n 0xb248: 0x08,\n 0xb249: 0x09,\n 0xb24a: 0x0a,\n 0xb24b: 0x0b,\n 0xb24c: 0x0c,\n 0xb24d: 0x0d,\n 0xb24e: 0x0e,\n 0xb24f: 0x0f,\n 0xb250: 0x10,\n 0xb251: 0x11,\n 0xb252: 0x12,\n 0xb253: 0x13,\n 0xb254: 0x14,\n 0xb255: 0x15,\n 0xb256: 0x16,\n 0xb257: 0x17,\n 0xb258: 0x18,\n 0xb259: 0x19,\n 0xb25a: 0x1a,\n 0xb25b: 0x1b,\n 0xb25c: 0x1c,\n 0xb25d: 0x1d,\n 0xb25e: 0x1e,\n 0xb25f: 0x1f,\n 0xb260: 0x20,\n 0xb301: 0x01,\n 0xb302: 0x02,\n 0xb303: 0x03,\n 0xb304: 0x04,\n 0xb305: 0x05,\n 0xb306: 0x06,\n 0xb307: 0x07,\n 0xb308: 0x08,\n 0xb309: 0x09,\n 0xb30a: 0x0a,\n 0xb30b: 0x0b,\n 0xb30c: 0x0c,\n 0xb30d: 0x0d,\n 0xb30e: 0x0e,\n 0xb30f: 0x0f,\n 0xb310: 0x10,\n 0xb311: 0x11,\n 0xb312: 0x12,\n 0xb313: 0x13,\n 0xb314: 0x14,\n 0xb315: 0x15,\n 0xb316: 0x16,\n 0xb317: 0x17,\n 0xb318: 0x18,\n 0xb319: 0x19,\n 0xb31a: 0x1a,\n 0xb31b: 0x1b,\n 0xb31c: 0x1c,\n 0xb31d: 0x1d,\n 0xb31e: 0x1e,\n 0xb31f: 0x1f,\n 0xb320: 0x20,\n 0xb321: 0x01,\n 0xb322: 0x02,\n 0xb323: 0x03,\n 0xb324: 0x04,\n 0xb325: 0x05,\n 0xb326: 0x06,\n 0xb327: 0x07,\n 0xb328: 0x08,\n 0xb329: 0x09,\n 0xb32a: 0x0a,\n 0xb32b: 0x0b,\n 0xb32c: 0x0c,\n 0xb32d: 0x0d,\n 0xb32e: 0x0e,\n 0xb32f: 0x0f,\n 0xb330: 0x10,\n 0xb331: 0x11,\n 0xb332: 0x12,\n 0xb333: 0x13,\n 0xb334: 0x14,\n 0xb335: 0x15,\n 0xb336: 0x16,\n 0xb337: 0x17,\n 0xb338: 0x18,\n 0xb339: 0x19,\n 0xb33a: 0x1a,\n 0xb33b: 0x1b,\n 0xb33c: 0x1c,\n 0xb33d: 0x1d,\n 0xb33e: 0x1e,\n 0xb33f: 0x1f,\n 0xb340: 0x20,\n 0xb341: 0x21,\n 0xb342: 0x22,\n 0xb343: 0x23,\n 0xb344: 0x24,\n 0xb345: 0x25,\n 0xb346: 0x26,\n 0xb347: 0x27,\n 0xb348: 0x28,\n 0xb349: 0x29,\n 0xb34a: 0x2a,\n 0xb34b: 0x2b,\n 0xb34c: 0x2c,\n 0xb34d: 0x2d,\n 0xb34e: 0x2e,\n 0xb34f: 0x2f,\n 0xb350: 0x30,\n 0xb351: 0x31,\n 0xb352: 0x32,\n 0xb353: 0x33,\n 0xb354: 0x34,\n 0xb355: 0x35,\n 0xb356: 0x36,\n 0xb357: 0x37,\n 0xb358: 0x38,\n 0xb359: 0x39,\n 0xb35a: 0x3a,\n 0xb35b: 0x3b,\n 0xb35c: 0x3c,\n 0xb35d: 0x3d,\n 0xb35e: 0x3e,\n 0xb35f: 0x3f,\n 0xb360: 0x40,\n 0xb361: 0x01,\n 0xb362: 0x02,\n 0xb363: 0x03,\n 0xb364: 0x04,\n 0xb365: 0x05,\n 0xb366: 0x06,\n 0xb367: 0x07,\n 0xb368: 0x08,\n 0xb369: 0x09,\n 0xb36a: 0x0a,\n 0xb36b: 0x0b,\n 0xb36c: 0x0c,\n 0xb36d: 0x0d,\n 0xb36e: 0x0e,\n 0xb36f: 0x0f,\n 0xb370: 0x10,\n 0xb371: 0x11,\n 0xb372: 0x12,\n 0xb373: 0x13,\n 0xb374: 0x14,\n 0xb375: 0x15,\n 0xb376: 0x16,\n 0xb377: 0x17,\n 0xb378: 0x18,\n 0xb379: 0x19,\n 0xb37a: 0x1a,\n 0xb37b: 0x1b,\n 0xb37c: 0x1c,\n 0xb37d: 0x1d,\n 0xb37e: 0x1e,\n 0xb37f: 0x1f,\n 0xb380: 0x20,\n 0xb381: 0x21,\n 0xb382: 0x22,\n 0xb383: 0x23,\n 0xb384: 0x24,\n 0xb385: 0x25,\n 0xb386: 0x26,\n 0xb387: 0x27,\n 0xb388: 0x28,\n 0xb389: 0x29,\n 0xb38a: 0x2a,\n 0xb38b: 0x2b,\n 0xb38c: 0x2c,\n 0xb38d: 0x2d,\n 0xb38e: 0x2e,\n 0xb38f: 0x2f,\n 0xb390: 0x30,\n 0xb391: 0x31,\n 0xb392: 0x32,\n 0xb393: 0x33,\n 0xb394: 0x34,\n 0xb395: 0x35,\n 0xb396: 0x36,\n 0xb397: 0x37,\n 0xb398: 0x38,\n 0xb399: 0x39,\n 0xb39a: 0x3a,\n 0xb39b: 0x3b,\n 0xb39c: 0x3c,\n 0xb39d: 0x3d,\n 0xb39e: 0x3e,\n 0xb39f: 0x3f,\n 0xb3a0: 0x40,\n 0xb3a1: 0x41,\n 0xb3a2: 0x42,\n 0xb3a3: 0x43,\n 0xb3a4: 0x44,\n 0xb3a5: 0x45,\n 0xb3a6: 0x46,\n 0xb3a7: 0x47,\n 0xb3a8: 0x48,\n 0xb3a9: 0x49,\n 0xb3aa: 0x4a,\n 0xb3ab: 0x4b,\n 0xb3ac: 0x4c,\n 0xb3ad: 0x4d,\n 0xb3ae: 0x4e,\n 0xb3af: 0x4f,\n 0xb3b0: 0x50,\n 0xb3b1: 0x51,\n 0xb3b2: 0x52,\n 0xb3b3: 0x53,\n 0xb3b4: 0x54,\n 0xb3b5: 0x55,\n 0xb3b6: 0x56,\n 0xb3b7: 0x57,\n 0xb3b8: 0x58,\n 0xb3b9: 0x59,\n 0xb3ba: 0x5a,\n 0xb3bb: 0x5b,\n 0xb3bc: 0x5c,\n 0xb3bd: 0x5d,\n 0xb3be: 0x5e,\n 0xb3bf: 0x5f,\n 0xb3c0: 0x60,\n 0xb3c1: 0x61,\n 0xb3c2: 0x62,\n 0xb3c3: 0x63,\n 0xb3c4: 0x64,\n 0xb3c5: 0x65,\n 0xb3c6: 0x66,\n 0xb3c7: 0x67,\n 0xb3c8: 0x68,\n 0xb3c9: 0x69,\n 0xb3ca: 0x6a,\n 0xb3cb: 0x6b,\n 0xb3cc: 0x6c,\n 0xb3cd: 0x6d,\n 0xb3ce: 0x6e,\n 0xb3cf: 0x6f,\n 0xb3d0: 0x70,\n 0xb3d1: 0x71,\n 0xb3d2: 0x72,\n 0xb3d3: 0x73,\n 0xb3d4: 0x74,\n 0xb3d5: 0x75,\n 0xb3d6: 0x76,\n 0xb3d7: 0x77,\n 0xb3d8: 0x78,\n 0xb3d9: 0x79,\n 0xb3da: 0x7a,\n 0xb3db: 0x7b,\n 0xb3dc: 0x7c,\n 0xb3dd: 0x7d,\n 0xb3de: 0x7e,\n 0xb3df: 0x7f,\n 0xb3e0: 0x80\n})\n\n},{}],65:[function(require,module,exports){\n/**\n * Multihash implementation in JavaScript.\n *\n * @module multihash\n */\n'use strict'\n\nconst { Buffer } = require('buffer')\nconst multibase = require('multibase')\nconst varint = require('varint')\nconst cs = require('./constants')\n\nexports.names = cs.names\nexports.codes = cs.codes\nexports.defaultLengths = cs.defaultLengths\n\n/**\n * Convert the given multihash to a hex encoded string.\n *\n * @param {Buffer} hash\n * @returns {string}\n */\nexports.toHexString = function toHexString (hash) {\n if (!Buffer.isBuffer(hash)) {\n throw new Error('must be passed a buffer')\n }\n\n return hash.toString('hex')\n}\n\n/**\n * Convert the given hex encoded string to a multihash.\n *\n * @param {string} hash\n * @returns {Buffer}\n */\nexports.fromHexString = function fromHexString (hash) {\n return Buffer.from(hash, 'hex')\n}\n\n/**\n * Convert the given multihash to a base58 encoded string.\n *\n * @param {Buffer} hash\n * @returns {string}\n */\nexports.toB58String = function toB58String (hash) {\n if (!Buffer.isBuffer(hash)) {\n throw new Error('must be passed a buffer')\n }\n\n return multibase.encode('base58btc', hash).toString().slice(1)\n}\n\n/**\n * Convert the given base58 encoded string to a multihash.\n *\n * @param {string|Buffer} hash\n * @returns {Buffer}\n */\nexports.fromB58String = function fromB58String (hash) {\n let encoded = hash\n if (Buffer.isBuffer(hash)) {\n encoded = hash.toString()\n }\n\n return multibase.decode('z' + encoded)\n}\n\n/**\n * Decode a hash from the given multihash.\n *\n * @param {Buffer} buf\n * @returns {{code: number, name: string, length: number, digest: Buffer}} result\n */\nexports.decode = function decode (buf) {\n if (!(Buffer.isBuffer(buf))) {\n throw new Error('multihash must be a Buffer')\n }\n\n if (buf.length < 2) {\n throw new Error('multihash too short. must be > 2 bytes.')\n }\n\n const code = varint.decode(buf)\n if (!exports.isValidCode(code)) {\n throw new Error(`multihash unknown function code: 0x${code.toString(16)}`)\n }\n buf = buf.slice(varint.decode.bytes)\n\n const len = varint.decode(buf)\n if (len < 0) {\n throw new Error(`multihash invalid length: ${len}`)\n }\n buf = buf.slice(varint.decode.bytes)\n\n if (buf.length !== len) {\n throw new Error(`multihash length inconsistent: 0x${buf.toString('hex')}`)\n }\n\n return {\n code: code,\n name: cs.codes[code],\n length: len,\n digest: buf\n }\n}\n\n/**\n * Encode a hash digest along with the specified function code.\n *\n * > **Note:** the length is derived from the length of the digest itself.\n *\n * @param {Buffer} digest\n * @param {string|number} code\n * @param {number} [length]\n * @returns {Buffer}\n */\nexports.encode = function encode (digest, code, length) {\n if (!digest || code === undefined) {\n throw new Error('multihash encode requires at least two args: digest, code')\n }\n\n // ensure it's a hashfunction code.\n const hashfn = exports.coerceCode(code)\n\n if (!(Buffer.isBuffer(digest))) {\n throw new Error('digest should be a Buffer')\n }\n\n if (length == null) {\n length = digest.length\n }\n\n if (length && digest.length !== length) {\n throw new Error('digest length should be equal to specified length.')\n }\n\n return Buffer.concat([\n Buffer.from(varint.encode(hashfn)),\n Buffer.from(varint.encode(length)),\n digest\n ])\n}\n\n/**\n * Converts a hash function name into the matching code.\n * If passed a number it will return the number if it's a valid code.\n * @param {string|number} name\n * @returns {number}\n */\nexports.coerceCode = function coerceCode (name) {\n let code = name\n\n if (typeof name === 'string') {\n if (cs.names[name] === undefined) {\n throw new Error(`Unrecognized hash function named: ${name}`)\n }\n code = cs.names[name]\n }\n\n if (typeof code !== 'number') {\n throw new Error(`Hash function code should be a number. Got: ${code}`)\n }\n\n if (cs.codes[code] === undefined && !exports.isAppCode(code)) {\n throw new Error(`Unrecognized function code: ${code}`)\n }\n\n return code\n}\n\n/**\n * Checks wether a code is part of the app range\n *\n * @param {number} code\n * @returns {boolean}\n */\nexports.isAppCode = function appCode (code) {\n return code > 0 && code < 0x10\n}\n\n/**\n * Checks whether a multihash code is valid.\n *\n * @param {number} code\n * @returns {boolean}\n */\nexports.isValidCode = function validCode (code) {\n if (exports.isAppCode(code)) {\n return true\n }\n\n if (cs.codes[code]) {\n return true\n }\n\n return false\n}\n\n/**\n * Check if the given buffer is a valid multihash. Throws an error if it is not valid.\n *\n * @param {Buffer} multihash\n * @returns {undefined}\n * @throws {Error}\n */\nfunction validate (multihash) {\n exports.decode(multihash) // throws if bad.\n}\nexports.validate = validate\n\n/**\n * Returns a prefix from a valid multihash. Throws an error if it is not valid.\n *\n * @param {Buffer} multihash\n * @returns {undefined}\n * @throws {Error}\n */\nexports.prefix = function prefix (multihash) {\n validate(multihash)\n\n return multihash.slice(0, 2)\n}\n\n},{\"./constants\":64,\"buffer\":8,\"multibase\":56,\"varint\":88}],66:[function(require,module,exports){\n/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n\n},{}],67:[function(require,module,exports){\n// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n},{}],68:[function(require,module,exports){\nmodule.exports =\n/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = \"./src/ProfileHover.jsx\");\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ \"./node_modules/3box/lib/api.js\":\n/*!**************************************!*\\\n !*** ./node_modules/3box/lib/api.js ***!\n \\**************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \\\"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\\\");\\n\\nvar _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ \\\"./node_modules/@babel/runtime/regenerator/index.js\\\"));\\n\\nvar _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \\\"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\\\"));\\n\\nvar _classCallCheck2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \\\"./node_modules/@babel/runtime/helpers/classCallCheck.js\\\"));\\n\\nvar _createClass2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/createClass */ \\\"./node_modules/@babel/runtime/helpers/createClass.js\\\"));\\n\\nvar graphQLRequest = __webpack_require__(/*! graphql-request */ \\\"./node_modules/graphql-request/dist/src/index.js\\\").request;\\n\\nvar utils = __webpack_require__(/*! ./utils/index */ \\\"./node_modules/3box/lib/utils/index.js\\\");\\n\\nvar verifier = __webpack_require__(/*! ./utils/verifier */ \\\"./node_modules/3box/lib/utils/verifier.js\\\");\\n\\nvar _require = __webpack_require__(/*! ./utils/id */ \\\"./node_modules/3box/lib/utils/id.js\\\"),\\n isSupportedDID = _require.isSupportedDID;\\n\\nvar config = __webpack_require__(/*! ./config.js */ \\\"./node_modules/3box/lib/config.js\\\");\\n\\nvar GRAPHQL_SERVER_URL = config.graphql_server_url;\\nvar PROFILE_SERVER_URL = config.profile_server_url;\\nvar ADDRESS_SERVER_URL = config.address_server_url;\\n/**\\n * @class\\n */\\n\\nvar BoxApi =\\n/*#__PURE__*/\\nfunction () {\\n function BoxApi() {\\n (0, _classCallCheck2[\\\"default\\\"])(this, BoxApi);\\n }\\n\\n (0, _createClass2[\\\"default\\\"])(BoxApi, null, [{\\n key: \\\"getRootStoreAddress\\\",\\n value: function () {\\n var _getRootStoreAddress = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee(identifier) {\\n var serverUrl,\\n res,\\n _args = arguments;\\n return _regenerator[\\\"default\\\"].wrap(function _callee$(_context) {\\n while (1) {\\n switch (_context.prev = _context.next) {\\n case 0:\\n serverUrl = _args.length > 1 && _args[1] !== undefined ? _args[1] : ADDRESS_SERVER_URL;\\n _context.next = 3;\\n return utils.fetchJson(serverUrl + '/odbAddress/' + identifier);\\n\\n case 3:\\n res = _context.sent;\\n return _context.abrupt(\\\"return\\\", res.data.rootStoreAddress);\\n\\n case 5:\\n case \\\"end\\\":\\n return _context.stop();\\n }\\n }\\n }, _callee);\\n }));\\n\\n function getRootStoreAddress(_x) {\\n return _getRootStoreAddress.apply(this, arguments);\\n }\\n\\n return getRootStoreAddress;\\n }()\\n /**\\n * Get the names of all spaces a user has\\n *\\n * @param {String} address An ethereum address\\n * @param {Object} opts Optional parameters\\n * @param {String} opts.profileServer URL of Profile API server\\n * @return {Object} an array with all spaces as strings\\n */\\n\\n }, {\\n key: \\\"listSpaces\\\",\\n value: function () {\\n var _listSpaces = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee2(address) {\\n var _ref,\\n profileServer,\\n serverUrl,\\n _args2 = arguments;\\n\\n return _regenerator[\\\"default\\\"].wrap(function _callee2$(_context2) {\\n while (1) {\\n switch (_context2.prev = _context2.next) {\\n case 0:\\n _ref = _args2.length > 1 && _args2[1] !== undefined ? _args2[1] : {}, profileServer = _ref.profileServer;\\n serverUrl = profileServer || PROFILE_SERVER_URL;\\n _context2.prev = 2;\\n\\n if (!isSupportedDID(address)) {\\n _context2.next = 9;\\n break;\\n }\\n\\n _context2.next = 6;\\n return utils.fetchJson(serverUrl + '/list-spaces?did=' + address);\\n\\n case 6:\\n return _context2.abrupt(\\\"return\\\", _context2.sent);\\n\\n case 9:\\n _context2.next = 11;\\n return utils.fetchJson(serverUrl + '/list-spaces?address=' + encodeURIComponent(address));\\n\\n case 11:\\n return _context2.abrupt(\\\"return\\\", _context2.sent);\\n\\n case 12:\\n _context2.next = 17;\\n break;\\n\\n case 14:\\n _context2.prev = 14;\\n _context2.t0 = _context2[\\\"catch\\\"](2);\\n return _context2.abrupt(\\\"return\\\", []);\\n\\n case 17:\\n case \\\"end\\\":\\n return _context2.stop();\\n }\\n }\\n }, _callee2, null, [[2, 14]]);\\n }));\\n\\n function listSpaces(_x2) {\\n return _listSpaces.apply(this, arguments);\\n }\\n\\n return listSpaces;\\n }()\\n /**\\n * Get the public data in a space of a given address with the given name\\n *\\n * @param {String} address An ethereum address\\n * @param {String} name A space name\\n * @param {Object} opts Optional parameters\\n * @param {Function} opts.blocklist A function that takes an address and returns true if the user has been blocked\\n * @param {String} opts.metadata flag to retrieve metadata\\n * @param {String} opts.profileServer URL of Profile API server\\n * @return {Object} a json object with the public space data\\n */\\n\\n }, {\\n key: \\\"getSpace\\\",\\n value: function () {\\n var _getSpace = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee3(address, name) {\\n var _ref2,\\n profileServer,\\n metadata,\\n blocklist,\\n serverUrl,\\n url,\\n _args3 = arguments;\\n\\n return _regenerator[\\\"default\\\"].wrap(function _callee3$(_context3) {\\n while (1) {\\n switch (_context3.prev = _context3.next) {\\n case 0:\\n _ref2 = _args3.length > 2 && _args3[2] !== undefined ? _args3[2] : {}, profileServer = _ref2.profileServer, metadata = _ref2.metadata, blocklist = _ref2.blocklist;\\n\\n if (!(blocklist && blocklist(address))) {\\n _context3.next = 3;\\n break;\\n }\\n\\n throw new Error(\\\"user with \\\".concat(address, \\\" is blocked\\\"));\\n\\n case 3:\\n serverUrl = profileServer || PROFILE_SERVER_URL;\\n url = \\\"\\\".concat(serverUrl, \\\"/space\\\");\\n _context3.prev = 5;\\n\\n // Add first parameter: address or did\\n if (isSupportedDID(address)) {\\n url = \\\"\\\".concat(url, \\\"?did=\\\").concat(address);\\n } else {\\n url = \\\"\\\".concat(url, \\\"?address=\\\").concat(encodeURIComponent(address.toLowerCase()));\\n } // Add name:\\n\\n\\n url = \\\"\\\".concat(url, \\\"&name=\\\").concat(encodeURIComponent(name)); // Add metadata:\\n\\n if (metadata) {\\n url = \\\"\\\".concat(url, \\\"&metadata=\\\").concat(encodeURIComponent(metadata));\\n } // Query:\\n // we await explicitly to make sure the error is catch'd in the correct scope\\n\\n\\n _context3.next = 11;\\n return utils.fetchJson(url);\\n\\n case 11:\\n return _context3.abrupt(\\\"return\\\", _context3.sent);\\n\\n case 14:\\n _context3.prev = 14;\\n _context3.t0 = _context3[\\\"catch\\\"](5);\\n return _context3.abrupt(\\\"return\\\", {});\\n\\n case 17:\\n case \\\"end\\\":\\n return _context3.stop();\\n }\\n }\\n }, _callee3, null, [[5, 14]]);\\n }));\\n\\n function getSpace(_x3, _x4) {\\n return _getSpace.apply(this, arguments);\\n }\\n\\n return getSpace;\\n }() // TODO consumes address now, could also give root DID to get space DID\\n\\n }, {\\n key: \\\"getSpaceDID\\\",\\n value: function () {\\n var _getSpaceDID = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee4(address, space) {\\n var opts,\\n conf,\\n _args4 = arguments;\\n return _regenerator[\\\"default\\\"].wrap(function _callee4$(_context4) {\\n while (1) {\\n switch (_context4.prev = _context4.next) {\\n case 0:\\n opts = _args4.length > 2 && _args4[2] !== undefined ? _args4[2] : {};\\n _context4.next = 3;\\n return BoxApi.getConfig(address, opts);\\n\\n case 3:\\n conf = _context4.sent;\\n\\n if (!(!conf.spaces[space] || !conf.spaces[space].DID)) {\\n _context4.next = 6;\\n break;\\n }\\n\\n throw new Error(\\\"Could not find appropriate DID for address \\\".concat(address));\\n\\n case 6:\\n return _context4.abrupt(\\\"return\\\", conf.spaces[space].DID);\\n\\n case 7:\\n case \\\"end\\\":\\n return _context4.stop();\\n }\\n }\\n }, _callee4);\\n }));\\n\\n function getSpaceDID(_x5, _x6) {\\n return _getSpaceDID.apply(this, arguments);\\n }\\n\\n return getSpaceDID;\\n }()\\n /**\\n * Get all posts that are made to a thread.\\n *\\n * @param {String} space The name of the space the thread is in\\n * @param {String} name The name of the thread\\n * @param {String} firstModerator The DID (or ethereum address) of the first moderator\\n * @param {Boolean} members True if only members are allowed to post\\n * @param {Object} opts Optional parameters\\n * @param {String} opts.profileServer URL of Profile API server\\n * @return {Array<Object>} An array of posts\\n */\\n\\n }, {\\n key: \\\"getThread\\\",\\n value: function () {\\n var _getThread = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee5(space, name, firstModerator, members) {\\n var opts,\\n serverUrl,\\n url,\\n _args5 = arguments;\\n return _regenerator[\\\"default\\\"].wrap(function _callee5$(_context5) {\\n while (1) {\\n switch (_context5.prev = _context5.next) {\\n case 0:\\n opts = _args5.length > 4 && _args5[4] !== undefined ? _args5[4] : {};\\n serverUrl = opts.profileServer || PROFILE_SERVER_URL;\\n\\n if (!firstModerator.startsWith('0x')) {\\n _context5.next = 6;\\n break;\\n }\\n\\n _context5.next = 5;\\n return BoxApi.getSpaceDID(firstModerator, space, opts);\\n\\n case 5:\\n firstModerator = _context5.sent;\\n\\n case 6:\\n _context5.prev = 6;\\n url = \\\"\\\".concat(serverUrl, \\\"/thread?space=\\\").concat(encodeURIComponent(space), \\\"&name=\\\").concat(encodeURIComponent(name));\\n url += \\\"&mod=\\\".concat(encodeURIComponent(firstModerator), \\\"&members=\\\").concat(encodeURIComponent(members));\\n _context5.next = 11;\\n return utils.fetchJson(url);\\n\\n case 11:\\n return _context5.abrupt(\\\"return\\\", _context5.sent);\\n\\n case 14:\\n _context5.prev = 14;\\n _context5.t0 = _context5[\\\"catch\\\"](6);\\n throw new Error(_context5.t0);\\n\\n case 17:\\n case \\\"end\\\":\\n return _context5.stop();\\n }\\n }\\n }, _callee5, null, [[6, 14]]);\\n }));\\n\\n function getThread(_x7, _x8, _x9, _x10) {\\n return _getThread.apply(this, arguments);\\n }\\n\\n return getThread;\\n }()\\n /**\\n * Get all posts that are made to a thread.\\n *\\n * @param {String} address The orbitdb-address of the thread\\n * @param {Object} opts Optional parameters\\n * @param {String} opts.profileServer URL of Profile API server\\n * @return {Array<Object>} An array of posts\\n */\\n\\n }, {\\n key: \\\"getThreadByAddress\\\",\\n value: function () {\\n var _getThreadByAddress = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee6(address) {\\n var opts,\\n serverUrl,\\n _args6 = arguments;\\n return _regenerator[\\\"default\\\"].wrap(function _callee6$(_context6) {\\n while (1) {\\n switch (_context6.prev = _context6.next) {\\n case 0:\\n opts = _args6.length > 1 && _args6[1] !== undefined ? _args6[1] : {};\\n serverUrl = opts.profileServer || PROFILE_SERVER_URL;\\n _context6.prev = 2;\\n _context6.next = 5;\\n return utils.fetchJson(\\\"\\\".concat(serverUrl, \\\"/thread?address=\\\").concat(encodeURIComponent(address)));\\n\\n case 5:\\n return _context6.abrupt(\\\"return\\\", _context6.sent);\\n\\n case 8:\\n _context6.prev = 8;\\n _context6.t0 = _context6[\\\"catch\\\"](2);\\n throw new Error(_context6.t0);\\n\\n case 11:\\n case \\\"end\\\":\\n return _context6.stop();\\n }\\n }\\n }, _callee6, null, [[2, 8]]);\\n }));\\n\\n function getThreadByAddress(_x11) {\\n return _getThreadByAddress.apply(this, arguments);\\n }\\n\\n return getThreadByAddress;\\n }()\\n /**\\n * Get the configuration of a users 3Box\\n *\\n * @param {String} address The ethereum address\\n * @param {Object} opts Optional parameters\\n * @param {String} opts.profileServer URL of Profile API server\\n * @return {Array<Object>} An array of posts\\n */\\n\\n }, {\\n key: \\\"getConfig\\\",\\n value: function () {\\n var _getConfig = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee7(address) {\\n var opts,\\n serverUrl,\\n isAddr,\\n _args7 = arguments;\\n return _regenerator[\\\"default\\\"].wrap(function _callee7$(_context7) {\\n while (1) {\\n switch (_context7.prev = _context7.next) {\\n case 0:\\n opts = _args7.length > 1 && _args7[1] !== undefined ? _args7[1] : {};\\n serverUrl = opts.profileServer || PROFILE_SERVER_URL;\\n isAddr = address.startsWith('0x'); // assume 3ID if not address\\n\\n _context7.prev = 3;\\n _context7.next = 6;\\n return utils.fetchJson(\\\"\\\".concat(serverUrl, \\\"/config?\\\").concat(isAddr ? 'address' : 'did', \\\"=\\\").concat(encodeURIComponent(address)));\\n\\n case 6:\\n return _context7.abrupt(\\\"return\\\", _context7.sent);\\n\\n case 9:\\n _context7.prev = 9;\\n _context7.t0 = _context7[\\\"catch\\\"](3);\\n throw new Error(_context7.t0);\\n\\n case 12:\\n case \\\"end\\\":\\n return _context7.stop();\\n }\\n }\\n }, _callee7, null, [[3, 9]]);\\n }));\\n\\n function getConfig(_x12) {\\n return _getConfig.apply(this, arguments);\\n }\\n\\n return getConfig;\\n }()\\n /**\\n * Get the public profile of a given address\\n *\\n * @param {String} address An ethereum address\\n * @param {Object} opts Optional parameters\\n * @param {Function} opts.blocklist A function that takes an address and returns true if the user has been blocked\\n * @param {String} opts.metadata flag to retrieve metadata\\n * @param {String} opts.profileServer URL of Profile API server\\n * @return {Object} a json object with the profile for the given address\\n */\\n\\n }, {\\n key: \\\"getProfile\\\",\\n value: function () {\\n var _getProfile = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee8(address) {\\n var _ref3,\\n profileServer,\\n metadata,\\n blocklist,\\n serverUrl,\\n url,\\n _args8 = arguments;\\n\\n return _regenerator[\\\"default\\\"].wrap(function _callee8$(_context8) {\\n while (1) {\\n switch (_context8.prev = _context8.next) {\\n case 0:\\n _ref3 = _args8.length > 1 && _args8[1] !== undefined ? _args8[1] : {}, profileServer = _ref3.profileServer, metadata = _ref3.metadata, blocklist = _ref3.blocklist;\\n\\n if (!(blocklist && blocklist(address))) {\\n _context8.next = 3;\\n break;\\n }\\n\\n throw new Error(\\\"user with \\\".concat(address, \\\" is blocked\\\"));\\n\\n case 3:\\n serverUrl = profileServer || PROFILE_SERVER_URL;\\n url = \\\"\\\".concat(serverUrl, \\\"/profile\\\");\\n _context8.prev = 5;\\n\\n // Add first parameter: address or did\\n if (isSupportedDID(address)) {\\n url = \\\"\\\".concat(url, \\\"?did=\\\").concat(address);\\n } else {\\n url = \\\"\\\".concat(url, \\\"?address=\\\").concat(encodeURIComponent(address.toLowerCase()));\\n } // Add metadata:\\n\\n\\n if (metadata) {\\n url = \\\"\\\".concat(url, \\\"&metadata=\\\").concat(encodeURIComponent(metadata));\\n } // Query:\\n // we await explicitly to make sure the error is catch'd in the correct scope\\n\\n\\n _context8.next = 10;\\n return utils.fetchJson(url);\\n\\n case 10:\\n return _context8.abrupt(\\\"return\\\", _context8.sent);\\n\\n case 13:\\n _context8.prev = 13;\\n _context8.t0 = _context8[\\\"catch\\\"](5);\\n return _context8.abrupt(\\\"return\\\", {});\\n\\n case 16:\\n case \\\"end\\\":\\n return _context8.stop();\\n }\\n }\\n }, _callee8, null, [[5, 13]]);\\n }));\\n\\n function getProfile(_x13) {\\n return _getProfile.apply(this, arguments);\\n }\\n\\n return getProfile;\\n }()\\n /**\\n * Get a list of public profiles for given addresses. This relies on 3Box profile API.\\n *\\n * @param {Array} address An array of ethereum addresses\\n * @param {Object} opts Optional parameters\\n * @param {String} opts.profileServer URL of Profile API server\\n * @return {Object} a json object with each key an address and value the profile\\n */\\n\\n }, {\\n key: \\\"getProfiles\\\",\\n value: function () {\\n var _getProfiles = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee9(addressArray) {\\n var opts,\\n req,\\n url,\\n _args9 = arguments;\\n return _regenerator[\\\"default\\\"].wrap(function _callee9$(_context9) {\\n while (1) {\\n switch (_context9.prev = _context9.next) {\\n case 0:\\n opts = _args9.length > 1 && _args9[1] !== undefined ? _args9[1] : {};\\n opts = Object.assign({\\n profileServer: PROFILE_SERVER_URL\\n }, opts);\\n req = {\\n addressList: [],\\n didList: []\\n }; // Split addresses on ethereum / dids\\n\\n addressArray.forEach(function (address) {\\n if (isSupportedDID(address)) {\\n req.didList.push(address);\\n } else {\\n req.addressList.push(address);\\n }\\n });\\n url = \\\"\\\".concat(opts.profileServer, \\\"/profileList\\\");\\n return _context9.abrupt(\\\"return\\\", utils.fetchJson(url, req));\\n\\n case 6:\\n case \\\"end\\\":\\n return _context9.stop();\\n }\\n }\\n }, _callee9);\\n }));\\n\\n function getProfiles(_x14) {\\n return _getProfiles.apply(this, arguments);\\n }\\n\\n return getProfiles;\\n }()\\n /**\\n * GraphQL for 3Box profile API\\n *\\n * @param {Object} query A graphQL query object.\\n * @param {Object} opts Optional parameters\\n * @param {String} opts.graphqlServer URL of graphQL 3Box profile service\\n * @return {Object} a json object with each key an address and value the profile\\n */\\n\\n }, {\\n key: \\\"profileGraphQL\\\",\\n value: function () {\\n var _profileGraphQL = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee10(query) {\\n var opts,\\n _args10 = arguments;\\n return _regenerator[\\\"default\\\"].wrap(function _callee10$(_context10) {\\n while (1) {\\n switch (_context10.prev = _context10.next) {\\n case 0:\\n opts = _args10.length > 1 && _args10[1] !== undefined ? _args10[1] : {};\\n opts = Object.assign({\\n graphqlServer: GRAPHQL_SERVER_URL\\n }, opts);\\n return _context10.abrupt(\\\"return\\\", graphQLRequest(opts.graphqlServer, query));\\n\\n case 3:\\n case \\\"end\\\":\\n return _context10.stop();\\n }\\n }\\n }, _callee10);\\n }));\\n\\n function profileGraphQL(_x15) {\\n return _profileGraphQL.apply(this, arguments);\\n }\\n\\n return profileGraphQL;\\n }()\\n /**\\n * Verifies the proofs of social accounts that is present in the profile.\\n *\\n * @param {Object} profile A user profile object, received from the `getProfile` function\\n * @return {Object} An object containing the accounts that have been verified\\n */\\n\\n }, {\\n key: \\\"getVerifiedAccounts\\\",\\n value: function () {\\n var _getVerifiedAccounts = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee11(profile) {\\n var verifs, didVerified, dids;\\n return _regenerator[\\\"default\\\"].wrap(function _callee11$(_context11) {\\n while (1) {\\n switch (_context11.prev = _context11.next) {\\n case 0:\\n verifs = {};\\n _context11.prev = 1;\\n _context11.next = 4;\\n return verifier.verifyDID(profile.proof_did);\\n\\n case 4:\\n didVerified = _context11.sent;\\n dids = [didVerified.did];\\n verifs.did = didVerified.did;\\n\\n if (didVerified.muport) {\\n verifs.muport = didVerified.muport;\\n dids.push(didVerified.muport);\\n }\\n\\n if (!profile.proof_github) {\\n _context11.next = 17;\\n break;\\n }\\n\\n _context11.prev = 9;\\n _context11.next = 12;\\n return verifier.verifyGithub(dids, profile.proof_github);\\n\\n case 12:\\n verifs.github = _context11.sent;\\n _context11.next = 17;\\n break;\\n\\n case 15:\\n _context11.prev = 15;\\n _context11.t0 = _context11[\\\"catch\\\"](9);\\n\\n case 17:\\n if (!profile.proof_twitter) {\\n _context11.next = 26;\\n break;\\n }\\n\\n _context11.prev = 18;\\n _context11.next = 21;\\n return verifier.verifyTwitter(dids, profile.proof_twitter);\\n\\n case 21:\\n verifs.twitter = _context11.sent;\\n _context11.next = 26;\\n break;\\n\\n case 24:\\n _context11.prev = 24;\\n _context11.t1 = _context11[\\\"catch\\\"](18);\\n\\n case 26:\\n if (!profile.ethereum_proof) {\\n _context11.next = 35;\\n break;\\n }\\n\\n _context11.prev = 27;\\n _context11.next = 30;\\n return verifier.verifyEthereum(profile.ethereum_proof, verifs.did);\\n\\n case 30:\\n verifs.ethereum = _context11.sent;\\n _context11.next = 35;\\n break;\\n\\n case 33:\\n _context11.prev = 33;\\n _context11.t2 = _context11[\\\"catch\\\"](27);\\n\\n case 35:\\n _context11.next = 39;\\n break;\\n\\n case 37:\\n _context11.prev = 37;\\n _context11.t3 = _context11[\\\"catch\\\"](1);\\n\\n case 39:\\n return _context11.abrupt(\\\"return\\\", verifs);\\n\\n case 40:\\n case \\\"end\\\":\\n return _context11.stop();\\n }\\n }\\n }, _callee11, null, [[1, 37], [9, 15], [18, 24], [27, 33]]);\\n }));\\n\\n function getVerifiedAccounts(_x16) {\\n return _getVerifiedAccounts.apply(this, arguments);\\n }\\n\\n return getVerifiedAccounts;\\n }()\\n }]);\\n return BoxApi;\\n}();\\n\\nmodule.exports = BoxApi;\\n\\n//# sourceURL=webpack:///./node_modules/3box/lib/api.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/3box/lib/config.js\":\n/*!*****************************************!*\\\n !*** ./node_modules/3box/lib/config.js ***!\n \\*****************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(process) {\\n\\nvar Log = __webpack_require__(/*! ipfs-log */ \\\"./node_modules/ipfs-log/src/log.js\\\");\\n\\nvar IFRAME_STORE_VERSION = '0.0.3';\\nvar RENDEZVOUS_DISABLE = !(!process.env.RENDEZVOUS_DISABLE || ['0', 'f', 'false', 'no', 'off'].includes(process.env.RENDEZVOUS_DISABLE.toLowerCase()));\\nmodule.exports = {\\n address_server_url: process.env.ADDRESS_SERVER_URL || 'https://beta.3box.io/address-server',\\n pinning_node: process.env.PINNING_NODE || '/dnsaddr/ipfs.3box.io/tcp/443/wss/ipfs/QmZvxEpiVNjmNbEKyQGvFzAY1BwmGuuvdUTmcTstQPhyVC',\\n pinning_room: process.env.PINNING_ROOM || '3box-pinning',\\n iframe_store_version: process.env.IFRAME_STORE_VERSION || IFRAME_STORE_VERSION,\\n iframe_store_url: process.env.IFRAME_STORE_URL || \\\"https://iframe.3box.io/\\\".concat(IFRAME_STORE_VERSION, \\\"/iframe.html\\\"),\\n ipfs_options: {\\n preload: {\\n enabled: false\\n },\\n config: {\\n Bootstrap: [],\\n Addresses: {\\n Swarm: RENDEZVOUS_DISABLE ? [] : [process.env.RENDEZVOUS_ADDRESS || '/dns4/p2p.3box.io/tcp/9090/wss/p2p-websocket-star/']\\n }\\n }\\n },\\n orbitdb_options: {\\n syncLocal: true,\\n sortFn: Log.Sorting.SortByEntryHash // this option is required now but will likely not be in the future.\\n\\n },\\n graphql_server_url: process.env.GRAPHQL_SERVER_URL || 'https://api.3box.io/graph/',\\n profile_server_url: process.env.PROFILE_SERVER_URL || 'https://ipfs.3box.io',\\n muport_ipfs_host: process.env.MUPORT_IPFS_HOST || 'ipfs.infura.io',\\n muport_ipfs_port: process.env.MUPORT_IPFS_PORT || 5001,\\n muport_ipfs_protocol: process.env.MUPORT_IPFS_PROTOCOL || 'https'\\n};\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../process/browser.js */ \\\"./node_modules/process/browser.js\\\")))\\n\\n//# sourceURL=webpack:///./node_modules/3box/lib/config.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/3box/lib/utils/id.js\":\n/*!*******************************************!*\\\n !*** ./node_modules/3box/lib/utils/id.js ***!\n \\*******************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \\\"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\\\");\\n\\nvar _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ \\\"./node_modules/@babel/runtime/regenerator/index.js\\\"));\\n\\nvar _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \\\"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\\\"));\\n\\n/**\\n * A module to verify & validate claims\\n *\\n * @name idUtils\\n * @memberof Box\\n */\\nvar didJWT = __webpack_require__(/*! did-jwt */ \\\"./node_modules/did-jwt/lib/index.js\\\");\\n\\nvar DID_MUPORT_PREFIX = 'did:muport:';\\nvar DID_3_PREFIX = 'did:3:';\\nmodule.exports = {\\n /**\\n * Check whether a string is a muport did or not\\n *\\n * @memberOf Box.idUtils\\n * @param {String} did A string containing a user did\\n * @return {*|boolean} Whether the did is a supported did or not\\n */\\n isSupportedDID: function isSupportedDID(did) {\\n return did.startsWith(DID_MUPORT_PREFIX) || did.startsWith(DID_3_PREFIX);\\n },\\n // for backwards compatibility\\n isMuportDID: function isMuportDID(did) {\\n return did.startsWith(DID_MUPORT_PREFIX);\\n },\\n\\n /**\\n * Check whether a string is a valid claim or not\\n *\\n * @memberOf Box.idUtils\\n * @param {String} claim\\n * @param {Object} opts Optional parameters\\n * @param {string} opts.audience The DID of the audience of the JWT\\n * @return {Promise<boolean>} whether the parameter is an actual claim\\n */\\n isClaim: function () {\\n var _isClaim = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee(claim) {\\n var opts,\\n _args = arguments;\\n return _regenerator[\\\"default\\\"].wrap(function _callee$(_context) {\\n while (1) {\\n switch (_context.prev = _context.next) {\\n case 0:\\n opts = _args.length > 1 && _args[1] !== undefined ? _args[1] : {};\\n _context.prev = 1;\\n _context.next = 4;\\n return didJWT.decodeJWT(claim, opts);\\n\\n case 4:\\n return _context.abrupt(\\\"return\\\", true);\\n\\n case 7:\\n _context.prev = 7;\\n _context.t0 = _context[\\\"catch\\\"](1);\\n return _context.abrupt(\\\"return\\\", false);\\n\\n case 10:\\n case \\\"end\\\":\\n return _context.stop();\\n }\\n }\\n }, _callee, null, [[1, 7]]);\\n }));\\n\\n function isClaim(_x) {\\n return _isClaim.apply(this, arguments);\\n }\\n\\n return isClaim;\\n }(),\\n\\n /**\\n * Verify a claim and return its content.\\n * See https://github.com/uport-project/did-jwt/ for more details.\\n *\\n * @memberOf Box.idUtils\\n * @param {String} claim\\n * @param {Object} opts Optional parameters\\n * @param {string} opts.audience The DID of the JWT's audience\\n * @return {Object} The validated claim\\n */\\n verifyClaim: didJWT.verifyJWT\\n};\\n\\n//# sourceURL=webpack:///./node_modules/3box/lib/utils/id.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/3box/lib/utils/index.js\":\n/*!**********************************************!*\\\n !*** ./node_modules/3box/lib/utils/index.js ***!\n \\**********************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {\\n\\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \\\"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\\\");\\n\\nvar _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ \\\"./node_modules/@babel/runtime/regenerator/index.js\\\"));\\n\\nvar _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \\\"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\\\"));\\n\\nvar fetch = typeof window !== 'undefined' ? window.fetch : __webpack_require__(/*! node-fetch */ \\\"./node_modules/node-fetch/browser.js\\\");\\n\\nvar Multihash = __webpack_require__(/*! multihashes */ \\\"./node_modules/multihashes/src/index.js\\\");\\n\\nvar sha256 = __webpack_require__(/*! js-sha256 */ \\\"./node_modules/js-sha256/src/sha256.js\\\").sha256;\\n\\nvar ENC_BLOCK_SIZE = 24;\\nvar MAGIC_ERC1271_VALUE = '0x20c13b0b';\\n\\nvar pad = function pad(val) {\\n var blockSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ENC_BLOCK_SIZE;\\n var blockDiff = (blockSize - val.length % blockSize) % blockSize;\\n return \\\"\\\".concat(val).concat('\\\\0'.repeat(blockDiff));\\n};\\n\\nvar unpad = function unpad(padded) {\\n return padded.replace(/\\\\0+$/, '');\\n};\\n\\nvar HTTPError = function HTTPError(status, message) {\\n var e = new Error(message);\\n e.statusCode = status;\\n return e;\\n};\\n\\nvar getMessageConsent = function getMessageConsent(did, timestamp) {\\n var msg = 'Create a new 3Box profile' + '\\\\n\\\\n' + '- \\\\n' + 'Your unique profile ID is ' + did;\\n if (timestamp) msg += ' \\\\n' + 'Timestamp: ' + timestamp;\\n return msg;\\n};\\n\\nvar safeSend = function safeSend(provider, data) {\\n var send = (Boolean(provider.sendAsync) ? provider.sendAsync : provider.send).bind(provider);\\n return new Promise(function (resolve, reject) {\\n send(data, function (err, result) {\\n if (err) reject(err);else if (result.error) reject(result.error);else resolve(result.result);\\n });\\n });\\n};\\n\\nvar encodeRpcCall = function encodeRpcCall(method, params, fromAddress) {\\n return {\\n jsonrpc: '2.0',\\n id: 1,\\n method: method,\\n params: params,\\n fromAddress: fromAddress\\n };\\n};\\n\\nvar callRpc =\\n/*#__PURE__*/\\nfunction () {\\n var _ref = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee(provider, method, params, fromAddress) {\\n return _regenerator[\\\"default\\\"].wrap(function _callee$(_context) {\\n while (1) {\\n switch (_context.prev = _context.next) {\\n case 0:\\n return _context.abrupt(\\\"return\\\", safeSend(provider, encodeRpcCall(method, params, fromAddress)));\\n\\n case 1:\\n case \\\"end\\\":\\n return _context.stop();\\n }\\n }\\n }, _callee);\\n }));\\n\\n return function callRpc(_x, _x2, _x3, _x4) {\\n return _ref.apply(this, arguments);\\n };\\n}();\\n\\nmodule.exports = {\\n getMessageConsent: getMessageConsent,\\n callRpc: callRpc,\\n openBoxConsent: function openBoxConsent(fromAddress, ethereum) {\\n var text = 'This app wants to view and update your 3Box profile.';\\n if (ethereum.isAuthereum) return ethereum.signMessageWithSigningKey(text);\\n var msg = '0x' + Buffer.from(text, 'utf8').toString('hex');\\n var params = [msg, fromAddress];\\n var method = 'personal_sign';\\n return callRpc(ethereum, method, params, fromAddress);\\n },\\n openSpaceConsent: function openSpaceConsent(fromAddress, ethereum, name) {\\n var text = \\\"Allow this app to open your \\\".concat(name, \\\" space.\\\");\\n if (ethereum.isAuthereum) return ethereum.signMessageWithSigningKey(text);\\n var msg = '0x' + Buffer.from(text, 'utf8').toString('hex');\\n var params = [msg, fromAddress];\\n var method = 'personal_sign';\\n return callRpc(ethereum, method, params, fromAddress);\\n },\\n fetchJson: function () {\\n var _fetchJson = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee2(url, body) {\\n var opts, r, res;\\n return _regenerator[\\\"default\\\"].wrap(function _callee2$(_context2) {\\n while (1) {\\n switch (_context2.prev = _context2.next) {\\n case 0:\\n if (body) {\\n opts = {\\n body: JSON.stringify(body),\\n method: 'POST',\\n headers: {\\n 'Content-Type': 'application/json'\\n }\\n };\\n }\\n\\n _context2.next = 3;\\n return fetch(url, opts);\\n\\n case 3:\\n r = _context2.sent;\\n\\n if (!r.ok) {\\n _context2.next = 11;\\n break;\\n }\\n\\n _context2.next = 7;\\n return r.json();\\n\\n case 7:\\n res = _context2.sent;\\n return _context2.abrupt(\\\"return\\\", res);\\n\\n case 11:\\n _context2.t0 = HTTPError;\\n _context2.t1 = r.status;\\n _context2.next = 15;\\n return r.json();\\n\\n case 15:\\n _context2.t2 = _context2.sent.message;\\n throw (0, _context2.t0)(_context2.t1, _context2.t2);\\n\\n case 17:\\n case \\\"end\\\":\\n return _context2.stop();\\n }\\n }\\n }, _callee2);\\n }));\\n\\n function fetchJson(_x5, _x6) {\\n return _fetchJson.apply(this, arguments);\\n }\\n\\n return fetchJson;\\n }(),\\n fetchText: function () {\\n var _fetchText = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee3(url, opts) {\\n var r;\\n return _regenerator[\\\"default\\\"].wrap(function _callee3$(_context3) {\\n while (1) {\\n switch (_context3.prev = _context3.next) {\\n case 0:\\n _context3.next = 2;\\n return fetch(url, opts);\\n\\n case 2:\\n r = _context3.sent;\\n\\n if (!r.ok) {\\n _context3.next = 7;\\n break;\\n }\\n\\n return _context3.abrupt(\\\"return\\\", r.text());\\n\\n case 7:\\n throw HTTPError(r.status, \\\"Invalid response (\\\".concat(r.status, \\\") for query at \\\").concat(url));\\n\\n case 8:\\n case \\\"end\\\":\\n return _context3.stop();\\n }\\n }\\n }, _callee3);\\n }));\\n\\n function fetchText(_x7, _x8) {\\n return _fetchText.apply(this, arguments);\\n }\\n\\n return fetchText;\\n }(),\\n throwIfUndefined: function throwIfUndefined(arg, name) {\\n if (arg === undefined || arg === null) {\\n throw new Error(\\\"\\\".concat(name, \\\" is a required argument\\\"));\\n }\\n },\\n throwIfNotEqualLenArrays: function throwIfNotEqualLenArrays(arr1, arr2) {\\n if (!Array.isArray(arr1) || !Array.isArray(arr2)) {\\n throw new Error('One or more arguments are not an array');\\n }\\n\\n if (arr1.length !== arr2.length) {\\n throw new Error('Arrays must be of the same length');\\n }\\n },\\n sha256Multihash: function sha256Multihash(str) {\\n var digest = Buffer.from(sha256.digest(str));\\n return Multihash.encode(digest, 'sha2-256').toString('hex');\\n },\\n randInt: function randInt(max) {\\n return Math.floor(Math.random() * max);\\n },\\n sha256: sha256,\\n pad: pad,\\n unpad: unpad\\n};\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/3box/lib/utils/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/3box/lib/utils/verifier.js\":\n/*!*************************************************!*\\\n !*** ./node_modules/3box/lib/utils/verifier.js ***!\n \\*************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \\\"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\\\");\\n\\nvar _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ \\\"./node_modules/@babel/runtime/regenerator/index.js\\\"));\\n\\nvar _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \\\"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\\\"));\\n\\nvar _require = __webpack_require__(/*! ./index */ \\\"./node_modules/3box/lib/utils/index.js\\\"),\\n fetchText = _require.fetchText,\\n getMessageConsent = _require.getMessageConsent;\\n\\nvar didJWT = __webpack_require__(/*! did-jwt */ \\\"./node_modules/did-jwt/lib/index.js\\\");\\n\\nvar _require2 = __webpack_require__(/*! @ethersproject/wallet */ \\\"./node_modules/@ethersproject/wallet/lib.esm/index.js\\\"),\\n verifyMessage = _require2.verifyMessage;\\n\\nvar config = __webpack_require__(/*! ../config.js */ \\\"./node_modules/3box/lib/config.js\\\");\\n\\nvar utils = __webpack_require__(/*! ./index */ \\\"./node_modules/3box/lib/utils/index.js\\\");\\n\\nvar registerResolver = __webpack_require__(/*! 3id-resolver */ \\\"./node_modules/3id-resolver/lib/register.js\\\");\\n\\n__webpack_require__(/*! https-did-resolver */ \\\"./node_modules/https-did-resolver/lib/register.js\\\")[\\\"default\\\"]();\\n\\n__webpack_require__(/*! muport-did-resolver */ \\\"./node_modules/muport-did-resolver/lib/register.js\\\")();\\n\\nvar PROFILE_SERVER_URL = config.profile_server_url; // Mocks ipfs obj for 3id resolve, to resolve through api, until ipfs instance is available\\n\\nvar ipfs = function ipfs(didServerUrl) {\\n return {\\n dag: {\\n get: function () {\\n var _get = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee(cid) {\\n var req;\\n return _regenerator[\\\"default\\\"].wrap(function _callee$(_context) {\\n while (1) {\\n switch (_context.prev = _context.next) {\\n case 0:\\n req = \\\"\\\".concat(didServerUrl, \\\"/did-doc?cid=\\\").concat(encodeURIComponent(cid));\\n return _context.abrupt(\\\"return\\\", utils.fetchJson(req));\\n\\n case 2:\\n case \\\"end\\\":\\n return _context.stop();\\n }\\n }\\n }, _callee);\\n }));\\n\\n function get(_x) {\\n return _get.apply(this, arguments);\\n }\\n\\n return get;\\n }()\\n }\\n };\\n};\\n\\nregisterResolver(ipfs(PROFILE_SERVER_URL), {\\n pin: false\\n});\\nmodule.exports = {\\n /**\\n * Verifies that the gist contains the given 3ID and returns the users github username.\\n * Throws an error otherwise.\\n *\\n * @param {String} did The 3ID of the user (or array of equivalent dids)\\n * @param {Object} gistUrl URL of the proof\\n * @return {Object} Object containing username, and proof\\n */\\n verifyGithub: function () {\\n var _verifyGithub = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee2(did, gistUrl) {\\n var dids, gistFileContent, includeDid, username;\\n return _regenerator[\\\"default\\\"].wrap(function _callee2$(_context2) {\\n while (1) {\\n switch (_context2.prev = _context2.next) {\\n case 0:\\n dids = typeof did === 'string' ? [did] : did;\\n\\n if (!(!gistUrl || gistUrl.trim() === '')) {\\n _context2.next = 3;\\n break;\\n }\\n\\n return _context2.abrupt(\\\"return\\\", null);\\n\\n case 3:\\n _context2.next = 5;\\n return fetchText(gistUrl);\\n\\n case 5:\\n gistFileContent = _context2.sent;\\n includeDid = dids.reduce(function (acc, val) {\\n return acc || gistFileContent.indexOf(val) !== -1;\\n }, false);\\n\\n if (includeDid) {\\n _context2.next = 9;\\n break;\\n }\\n\\n throw new Error('Gist File provided does not contain the correct DID of the user');\\n\\n case 9:\\n username = gistUrl.split('/')[3];\\n return _context2.abrupt(\\\"return\\\", {\\n username: username,\\n proof: gistUrl\\n });\\n\\n case 11:\\n case \\\"end\\\":\\n return _context2.stop();\\n }\\n }\\n }, _callee2);\\n }));\\n\\n function verifyGithub(_x2, _x3) {\\n return _verifyGithub.apply(this, arguments);\\n }\\n\\n return verifyGithub;\\n }(),\\n\\n /**\\n * Verifies that the tweet contains the given 3ID and returns the users twitter username.\\n * Throws an error otherwise.\\n *\\n * @param {String} did The 3ID of the user (or array of equivalent dids)\\n * @param {String} claim A did-JWT with claim\\n * @return {Object} Object containing username, proof, and the verifier\\n */\\n verifyTwitter: function () {\\n var _verifyTwitter = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee3(did, claim) {\\n var dids, verified, claimData;\\n return _regenerator[\\\"default\\\"].wrap(function _callee3$(_context3) {\\n while (1) {\\n switch (_context3.prev = _context3.next) {\\n case 0:\\n dids = typeof did === 'string' ? [did] : did;\\n\\n if (claim) {\\n _context3.next = 3;\\n break;\\n }\\n\\n return _context3.abrupt(\\\"return\\\", null);\\n\\n case 3:\\n _context3.next = 5;\\n return didJWT.verifyJWT(claim);\\n\\n case 5:\\n verified = _context3.sent;\\n\\n if (dids.includes(verified.payload.sub)) {\\n _context3.next = 8;\\n break;\\n }\\n\\n throw new Error('Verification not valid for given user');\\n\\n case 8:\\n claimData = verified.payload.claim;\\n\\n if (!(!claimData.twitter_handle || !claimData.twitter_proof)) {\\n _context3.next = 11;\\n break;\\n }\\n\\n throw new Error('The claim for your twitter is not correct');\\n\\n case 11:\\n return _context3.abrupt(\\\"return\\\", {\\n username: claimData.twitter_handle,\\n proof: claimData.twitter_proof,\\n verifiedBy: verified.payload.iss\\n });\\n\\n case 12:\\n case \\\"end\\\":\\n return _context3.stop();\\n }\\n }\\n }, _callee3);\\n }));\\n\\n function verifyTwitter(_x4, _x5) {\\n return _verifyTwitter.apply(this, arguments);\\n }\\n\\n return verifyTwitter;\\n }(),\\n\\n /**\\n * Verifies that the code entered by the user is the same one that was sent via email.\\n * Throws an error otherwise.\\n *\\n * @param {String} did The 3ID of the user (or array of equivalent dids)\\n * @param {String} claim A did-JWT with claim\\n * @return {Object} Object containing username, proof, and the verifier\\n */\\n verifyEmail: function () {\\n var _verifyEmail = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee4(did, claim) {\\n var dids, verified, claimData;\\n return _regenerator[\\\"default\\\"].wrap(function _callee4$(_context4) {\\n while (1) {\\n switch (_context4.prev = _context4.next) {\\n case 0:\\n dids = typeof did === 'string' ? [did] : did;\\n\\n if (claim) {\\n _context4.next = 3;\\n break;\\n }\\n\\n return _context4.abrupt(\\\"return\\\", null);\\n\\n case 3:\\n _context4.next = 5;\\n return didJWT.verifyJWT(claim);\\n\\n case 5:\\n verified = _context4.sent;\\n\\n if (dids.includes(verified.payload.sub)) {\\n _context4.next = 8;\\n break;\\n }\\n\\n throw new Error('Verification not valid for given user');\\n\\n case 8:\\n claimData = verified.payload.claim;\\n\\n if (claimData.email_address) {\\n _context4.next = 11;\\n break;\\n }\\n\\n throw new Error('The claim for your email address is not correct');\\n\\n case 11:\\n return _context4.abrupt(\\\"return\\\", {\\n email_address: claimData.email_address,\\n verifiedBy: verified.payload.iss\\n });\\n\\n case 12:\\n case \\\"end\\\":\\n return _context4.stop();\\n }\\n }\\n }, _callee4);\\n }));\\n\\n function verifyEmail(_x6, _x7) {\\n return _verifyEmail.apply(this, arguments);\\n }\\n\\n return verifyEmail;\\n }(),\\n\\n /**\\n * Verifies that the proof for a did is correct\\n *\\n * @param {String} claim A did-JWT with claim\\n * @return {String} The DID of the user\\n */\\n verifyDID: function () {\\n var _verifyDID = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee5(claim) {\\n var verified, muport, res, muportDID;\\n return _regenerator[\\\"default\\\"].wrap(function _callee5$(_context5) {\\n while (1) {\\n switch (_context5.prev = _context5.next) {\\n case 0:\\n _context5.next = 2;\\n return didJWT.verifyJWT(claim);\\n\\n case 2:\\n verified = _context5.sent;\\n muport = verified.payload.muport;\\n res = {};\\n\\n if (!muport) {\\n _context5.next = 10;\\n break;\\n }\\n\\n _context5.next = 8;\\n return didJWT.verifyJWT(muport);\\n\\n case 8:\\n muportDID = _context5.sent.payload.iss;\\n res.muport = muportDID;\\n\\n case 10:\\n res.did = verified.payload.iss;\\n return _context5.abrupt(\\\"return\\\", res);\\n\\n case 12:\\n case \\\"end\\\":\\n return _context5.stop();\\n }\\n }\\n }, _callee5);\\n }));\\n\\n function verifyDID(_x8) {\\n return _verifyDID.apply(this, arguments);\\n }\\n\\n return verifyDID;\\n }(),\\n\\n /**\\n * Verifies that the proof for an ethereum address is correct\\n *\\n * @param {Object} ethProof The claim generated by getLinkConsent\\n * @param {string} ethProof.consent_msg\\n * @param {string} ethProof.consent_signature\\n * @param {string} ethProof.linked_did\\n * @param {String} did The box' did\\n * @return {String} The ethereum address used to sign the message\\n */\\n verifyEthereum: function () {\\n var _verifyEthereum = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee6(ethProof, did) {\\n var dids, consentMsg, consentSig, expected;\\n return _regenerator[\\\"default\\\"].wrap(function _callee6$(_context6) {\\n while (1) {\\n switch (_context6.prev = _context6.next) {\\n case 0:\\n dids = typeof did === 'string' ? [did] : did; // TODO - is this function needed? Can it be removed in\\n // favour of proofs that are in the rootstore?\\n\\n consentMsg = ethProof.version ? ethProof.message : ethProof['consent_msg'];\\n consentSig = ethProof.version ? ethProof.signature : ethProof['consent_signature']; // Make sure the message matches our expectation\\n\\n expected = getMessageConsent(did);\\n\\n if (!(consentMsg !== expected)) {\\n _context6.next = 6;\\n break;\\n }\\n\\n throw new Error(\\\"Invalid consent message, got: \\\\\\\"\\\".concat(consentMsg, \\\"\\\\\\\", expected: \\\\\\\"\\\").concat(expected, \\\"\\\\\\\"\\\"));\\n\\n case 6:\\n return _context6.abrupt(\\\"return\\\", verifyMessage(consentMsg, consentSig));\\n\\n case 7:\\n case \\\"end\\\":\\n return _context6.stop();\\n }\\n }\\n }, _callee6);\\n }));\\n\\n function verifyEthereum(_x9, _x10) {\\n return _verifyEthereum.apply(this, arguments);\\n }\\n\\n return verifyEthereum;\\n }()\\n};\\n\\n//# sourceURL=webpack:///./node_modules/3box/lib/utils/verifier.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/3id-resolver/lib/register.js\":\n/*!***************************************************!*\\\n !*** ./node_modules/3id-resolver/lib/register.js ***!\n \\***************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \\\"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\\\");\\n\\nvar _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ \\\"./node_modules/@babel/runtime/regenerator/index.js\\\"));\\n\\nvar _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \\\"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\\\"));\\n\\nvar _didJwt = __webpack_require__(/*! did-jwt */ \\\"./node_modules/3id-resolver/node_modules/did-jwt/lib/index.js\\\");\\n\\nvar _ipfsDidDocument = _interopRequireDefault(__webpack_require__(/*! ipfs-did-document */ \\\"./node_modules/ipfs-did-document/index.js\\\"));\\n\\nvar _base64url = _interopRequireDefault(__webpack_require__(/*! base64url */ \\\"./node_modules/base64url/index.js\\\"));\\n\\nvar _didResolver = __webpack_require__(/*! did-resolver */ \\\"./node_modules/did-resolver/lib/resolver.js\\\");\\n\\nvar PUBKEY_IDS = ['signingKey', 'managementKey', 'encryptionKey'];\\nvar SUB_PUBKEY_IDS = ['subSigningKey', 'subEncryptionKey'];\\n\\nfunction register(ipfs) {\\n var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\\n (0, _didResolver.registerMethod)('3', function (_, _ref) {\\n var id = _ref.id;\\n return resolve(ipfs, id);\\n });\\n}\\n\\nfunction resolve(_x, _x2, _x3) {\\n return _resolve.apply(this, arguments);\\n}\\n\\nfunction _resolve() {\\n _resolve = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee(ipfs, cid, isRoot) {\\n var doc, rootDoc;\\n return _regenerator[\\\"default\\\"].wrap(function _callee$(_context) {\\n while (1) {\\n switch (_context.prev = _context.next) {\\n case 0:\\n _context.prev = 0;\\n _context.next = 3;\\n return _ipfsDidDocument[\\\"default\\\"].cidToDocument(ipfs, cid);\\n\\n case 3:\\n doc = _context.sent;\\n validateDoc(doc);\\n\\n if (!doc.root) {\\n _context.next = 14;\\n break;\\n }\\n\\n if (!isRoot) {\\n _context.next = 8;\\n break;\\n }\\n\\n throw new Error('Only one layer subDoc allowed');\\n\\n case 8:\\n _context.next = 10;\\n return resolve(ipfs, doc.root.split(':')[2], true);\\n\\n case 10:\\n rootDoc = _context.sent;\\n _context.next = 13;\\n return verifyProof(doc);\\n\\n case 13:\\n doc = mergeDocuments(rootDoc, doc);\\n\\n case 14:\\n _context.next = 26;\\n break;\\n\\n case 16:\\n _context.prev = 16;\\n _context.t0 = _context[\\\"catch\\\"](0);\\n _context.prev = 18;\\n _context.next = 21;\\n return ipfs.pin.rm(cid);\\n\\n case 21:\\n _context.next = 25;\\n break;\\n\\n case 23:\\n _context.prev = 23;\\n _context.t1 = _context[\\\"catch\\\"](18);\\n\\n case 25:\\n throw new Error('Invalid 3ID');\\n\\n case 26:\\n return _context.abrupt(\\\"return\\\", doc);\\n\\n case 27:\\n case \\\"end\\\":\\n return _context.stop();\\n }\\n }\\n }, _callee, null, [[0, 16], [18, 23]]);\\n }));\\n return _resolve.apply(this, arguments);\\n}\\n\\nfunction validateDoc(doc) {\\n var pubKeyIds = PUBKEY_IDS;\\n\\n if (!doc || !doc.publicKey || !doc.authentication) {\\n throw new Error('Not a valid 3ID');\\n }\\n\\n if (doc.root) {\\n pubKeyIds = SUB_PUBKEY_IDS;\\n if (!doc.space) throw new Error('Not a valid 3ID');\\n }\\n\\n doc.publicKey.map(function (entry) {\\n var id = entry.id.split('#')[1];\\n if (!pubKeyIds.includes(id)) throw new Error('Not a valid 3ID');\\n });\\n}\\n\\nfunction encodeSection(data) {\\n return _base64url[\\\"default\\\"].encode(JSON.stringify(data));\\n}\\n\\nfunction verifyProof(_x4) {\\n return _verifyProof.apply(this, arguments);\\n}\\n\\nfunction _verifyProof() {\\n _verifyProof = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee2(subDoc) {\\n var subSigningKey, subEncryptionKey, payload, header, jwt;\\n return _regenerator[\\\"default\\\"].wrap(function _callee2$(_context2) {\\n while (1) {\\n switch (_context2.prev = _context2.next) {\\n case 0:\\n subSigningKey = subDoc.publicKey.find(function (entry) {\\n return entry.id.includes(SUB_PUBKEY_IDS[0]);\\n }).publicKeyHex;\\n subEncryptionKey = subDoc.publicKey.find(function (entry) {\\n return entry.id.includes(SUB_PUBKEY_IDS[1]);\\n }).publicKeyBase64;\\n payload = encodeSection({\\n iat: null,\\n subSigningKey: subSigningKey,\\n subEncryptionKey: subEncryptionKey,\\n space: subDoc.space,\\n iss: subDoc.root\\n });\\n header = encodeSection({\\n typ: 'JWT',\\n alg: subDoc.proof.alg\\n });\\n jwt = \\\"\\\".concat(header, \\\".\\\").concat(payload, \\\".\\\").concat(subDoc.proof.signature);\\n _context2.next = 7;\\n return (0, _didJwt.verifyJWT)(jwt);\\n\\n case 7:\\n case \\\"end\\\":\\n return _context2.stop();\\n }\\n }\\n }, _callee2);\\n }));\\n return _verifyProof.apply(this, arguments);\\n}\\n\\nfunction mergeDocuments(doc, subDoc) {\\n subDoc.publicKey = doc.publicKey.concat(subDoc.publicKey);\\n return subDoc;\\n}\\n\\nmodule.exports = register;\\n\\n//# sourceURL=webpack:///./node_modules/3id-resolver/lib/register.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/3id-resolver/node_modules/did-jwt/lib/Digest.js\":\n/*!**********************************************************************!*\\\n !*** ./node_modules/3id-resolver/node_modules/did-jwt/lib/Digest.js ***!\n \\**********************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nObject.defineProperty(exports, \\\"__esModule\\\", {\\n value: true\\n});\\nexports.sha256 = sha256;\\nexports.keccak = keccak;\\nexports.toEthereumAddress = toEthereumAddress;\\n\\nvar _jsSha = __webpack_require__(/*! js-sha256 */ \\\"./node_modules/js-sha256/src/sha256.js\\\");\\n\\nvar _jsSha2 = __webpack_require__(/*! js-sha3 */ \\\"./node_modules/3id-resolver/node_modules/js-sha3/src/sha3.js\\\");\\n\\nvar _buffer = __webpack_require__(/*! buffer */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\");\\n\\n// eslint-disable-line\\nfunction sha256(payload) {\\n return _buffer.Buffer.from(_jsSha.sha256.arrayBuffer(payload));\\n}\\n\\nfunction keccak(data) {\\n return _buffer.Buffer.from(_jsSha2.keccak_256.buffer(data));\\n}\\n\\nfunction toEthereumAddress(hexPublicKey) {\\n return \\\"0x\\\".concat(keccak(_buffer.Buffer.from(hexPublicKey.slice(2), 'hex')).slice(-20).toString('hex'));\\n}\\n\\n//# sourceURL=webpack:///./node_modules/3id-resolver/node_modules/did-jwt/lib/Digest.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/3id-resolver/node_modules/did-jwt/lib/JWT.js\":\n/*!*******************************************************************!*\\\n !*** ./node_modules/3id-resolver/node_modules/did-jwt/lib/JWT.js ***!\n \\*******************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \\\"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\\\");\\n\\nObject.defineProperty(exports, \\\"__esModule\\\", {\\n value: true\\n});\\nexports.normalizeDID = normalizeDID;\\nexports.decodeJWT = decodeJWT;\\nexports.createJWT = createJWT;\\nexports.verifyJWT = verifyJWT;\\nexports.resolveAuthenticator = resolveAuthenticator;\\nexports.default = exports.IAT_SKEW = void 0;\\n\\nvar _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ \\\"./node_modules/@babel/runtime/regenerator/index.js\\\"));\\n\\nvar _objectSpread2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/objectSpread */ \\\"./node_modules/@babel/runtime/helpers/objectSpread.js\\\"));\\n\\nvar _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \\\"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\\\"));\\n\\nvar _VerifierAlgorithm = _interopRequireDefault(__webpack_require__(/*! ./VerifierAlgorithm */ \\\"./node_modules/3id-resolver/node_modules/did-jwt/lib/VerifierAlgorithm.js\\\"));\\n\\nvar _SignerAlgorithm = _interopRequireDefault(__webpack_require__(/*! ./SignerAlgorithm */ \\\"./node_modules/3id-resolver/node_modules/did-jwt/lib/SignerAlgorithm.js\\\"));\\n\\nvar _base64url = _interopRequireDefault(__webpack_require__(/*! base64url */ \\\"./node_modules/base64url/index.js\\\"));\\n\\nvar _didResolver = _interopRequireDefault(__webpack_require__(/*! did-resolver */ \\\"./node_modules/did-resolver/lib/resolver.js\\\"));\\n\\nvar SUPPORTED_PUBLIC_KEY_TYPES = {\\n ES256K: ['Secp256k1VerificationKey2018', 'Secp256k1SignatureVerificationKey2018', 'EcdsaPublicKeySecp256k1'],\\n 'ES256K-R': ['Secp256k1VerificationKey2018', 'Secp256k1SignatureVerificationKey2018', 'EcdsaPublicKeySecp256k1'],\\n 'Ed25519': ['ED25519SignatureVerification']\\n};\\nvar JOSE_HEADER = {\\n typ: 'JWT'\\n};\\nvar defaultAlg = 'ES256K';\\n\\nfunction encodeSection(data) {\\n return _base64url.default.encode(JSON.stringify(data));\\n}\\n\\nvar IAT_SKEW = 300;\\n/** @module did-jwt/JWT */\\n\\nexports.IAT_SKEW = IAT_SKEW;\\n\\nfunction isMNID(id) {\\n return id.match(/^[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+$/);\\n}\\n\\nfunction isDIDOrMNID(mnidOrDid) {\\n return mnidOrDid && (mnidOrDid.match(/^did:/) || isMNID(mnidOrDid));\\n}\\n\\nfunction normalizeDID(mnidOrDid) {\\n if (mnidOrDid.match(/^did:/)) return mnidOrDid; // Backwards compatibility\\n\\n if (isMNID(mnidOrDid)) return \\\"did:uport:\\\".concat(mnidOrDid);\\n throw new Error(\\\"Not a valid DID '\\\".concat(mnidOrDid, \\\"'\\\"));\\n}\\n/**\\n* Decodes a JWT and returns an object representing the payload\\n*\\n* @example\\n* decodeJWT('eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NksifQ.eyJpYXQiOjE1MjU5Mjc1MTcsImF1ZCI6ImRpZDp1cG9ydDoyb3NuZko0V3k3TEJBbTJuUEJYaXJlMVdmUW43NVJyVjZUcyIsImV4cCI6MTU1NzQ2MzQyMSwibmFtZSI6InVQb3J0IERldmVsb3BlciIsImlzcyI6ImRpZDp1cG9ydDoyb3NuZko0V3k3TEJBbTJuUEJYaXJlMVdmUW43NVJyVjZUcyJ9.R7owbvNZoL4ti5ec-Kpktb0datw9Y-FshHsF5R7cXuKaiGlQz1dcOOXbXTOb-wg7-30CDfchFERR6Yc8F61ymw')\\n*\\n* @param {String} jwt a JSON Web Token to verify\\n* @return {Object} a JS object representing the decoded JWT\\n*/\\n\\n\\nfunction decodeJWT(jwt) {\\n if (!jwt) throw new Error('no JWT passed into decodeJWT');\\n var parts = jwt.match(/^([a-zA-Z0-9_-]+)\\\\.([a-zA-Z0-9_-]+)\\\\.([a-zA-Z0-9_-]+)$/);\\n\\n if (parts) {\\n return {\\n header: JSON.parse(_base64url.default.decode(parts[1])),\\n payload: JSON.parse(_base64url.default.decode(parts[2])),\\n signature: parts[3],\\n data: \\\"\\\".concat(parts[1], \\\".\\\").concat(parts[2])\\n };\\n }\\n\\n throw new Error('Incorrect format JWT');\\n}\\n/**\\n* Creates a signed JWT given an address which becomes the issuer, a signer, and a payload for which the signature is over.\\n*\\n* @example\\n* const signer = SimpleSigner(process.env.PRIVATE_KEY)\\n* createJWT({address: '5A8bRWU3F7j3REx3vkJ...', signer}, {key1: 'value', key2: ..., ... }).then(jwt => {\\n* ...\\n* })\\n*\\n* @param {Object} payload payload object\\n* @param {Object} [options] an unsigned credential object\\n* @param {String} options.issuer The DID of the issuer (signer) of JWT\\n* @param {String} options.alg The JWT signing algorithm to use. Supports: [ES256K, ES256K-R, Ed25519], Defaults to: ES256K\\n* @param {SimpleSigner} options.signer a signer, reference our SimpleSigner.js\\n* @return {Promise<Object, Error>} a promise which resolves with a signed JSON Web Token or rejects with an error\\n*/\\n\\n\\nfunction createJWT(_x, _x2) {\\n return _createJWT.apply(this, arguments);\\n}\\n/**\\n* Verifies given JWT. If the JWT is valid, the promise returns an object including the JWT, the payload of the JWT,\\n* and the did doc of the issuer of the JWT.\\n*\\n* @example\\n* verifyJWT('did:uport:eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NksifQ.eyJyZXF1Z....', {audience: '5A8bRWU3F7j3REx3vkJ...', callbackUrl: 'https://...'}).then(obj => {\\n* const did = obj.did // DID of signer\\n* const payload = obj.payload\\n* const doc = obj.doc // DID Document of signer\\n* const jwt = obj.jwt\\n* const signerKeyId = obj.signerKeyId // ID of key in DID document that signed JWT\\n* ...\\n* })\\n*\\n* @param {String} jwt a JSON Web Token to verify\\n* @param {Object} [options] an unsigned credential object\\n* @param {Boolean} options.auth Require signer to be listed in the authentication section of the DID document (for Authentication purposes)\\n* @param {String} options.audience DID of the recipient of the JWT\\n* @param {String} options.callbackUrl callback url in JWT\\n* @return {Promise<Object, Error>} a promise which resolves with a response object or rejects with an error\\n*/\\n\\n\\nfunction _createJWT() {\\n _createJWT = (0, _asyncToGenerator2.default)(\\n /*#__PURE__*/\\n _regenerator.default.mark(function _callee(payload, _ref) {\\n var issuer, signer, alg, expiresIn, header, timestamps, signingInput, jwtSigner, signature;\\n return _regenerator.default.wrap(function _callee$(_context) {\\n while (1) {\\n switch (_context.prev = _context.next) {\\n case 0:\\n issuer = _ref.issuer, signer = _ref.signer, alg = _ref.alg, expiresIn = _ref.expiresIn;\\n\\n if (signer) {\\n _context.next = 3;\\n break;\\n }\\n\\n throw new Error('No Signer functionality has been configured');\\n\\n case 3:\\n if (issuer) {\\n _context.next = 5;\\n break;\\n }\\n\\n throw new Error('No issuing DID has been configured');\\n\\n case 5:\\n header = (0, _objectSpread2.default)({}, JOSE_HEADER, {\\n alg: alg || defaultAlg\\n });\\n timestamps = {\\n iat: Math.floor(Date.now() / 1000)\\n };\\n\\n if (!expiresIn) {\\n _context.next = 13;\\n break;\\n }\\n\\n if (!(typeof expiresIn === 'number')) {\\n _context.next = 12;\\n break;\\n }\\n\\n timestamps.exp = timestamps.iat + Math.floor(expiresIn);\\n _context.next = 13;\\n break;\\n\\n case 12:\\n throw new Error('JWT expiresIn is not a number');\\n\\n case 13:\\n signingInput = [encodeSection(header), encodeSection((0, _objectSpread2.default)({}, timestamps, payload, {\\n iss: issuer\\n }))].join('.');\\n jwtSigner = (0, _SignerAlgorithm.default)(header.alg);\\n _context.next = 17;\\n return jwtSigner(signingInput, signer);\\n\\n case 17:\\n signature = _context.sent;\\n return _context.abrupt(\\\"return\\\", [signingInput, signature].join('.'));\\n\\n case 19:\\n case \\\"end\\\":\\n return _context.stop();\\n }\\n }\\n }, _callee, this);\\n }));\\n return _createJWT.apply(this, arguments);\\n}\\n\\nfunction verifyJWT(_x3) {\\n return _verifyJWT.apply(this, arguments);\\n}\\n/**\\n* Resolves relevant public keys or other authenticating material used to verify signature from the DID document of provided DID\\n*\\n* @example\\n* resolveAuthenticator('ES256K', 'did:uport:2nQtiQG6Cgm1GYTBaaKAgr76uY7iSexUkqX').then(obj => {\\n* const payload = obj.payload\\n* const profile = obj.profile\\n* const jwt = obj.jwt\\n* ...\\n* })\\n*\\n* @param {String} alg a JWT algorithm\\n* @param {String} did a Decentralized IDentifier (DID) to lookup\\n* @param {Boolean} auth Restrict public keys to ones specifically listed in the 'authentication' section of DID document\\n* @return {Promise<Object, Error>} a promise which resolves with a response object containing an array of authenticators or if non exist rejects with an error\\n*/\\n\\n\\nfunction _verifyJWT() {\\n _verifyJWT = (0, _asyncToGenerator2.default)(\\n /*#__PURE__*/\\n _regenerator.default.mark(function _callee2(jwt) {\\n var options,\\n aud,\\n _decodeJWT,\\n payload,\\n header,\\n signature,\\n data,\\n _ref2,\\n doc,\\n authenticators,\\n issuer,\\n signer,\\n now,\\n _args2 = arguments;\\n\\n return _regenerator.default.wrap(function _callee2$(_context2) {\\n while (1) {\\n switch (_context2.prev = _context2.next) {\\n case 0:\\n options = _args2.length > 1 && _args2[1] !== undefined ? _args2[1] : {};\\n aud = options.audience ? normalizeDID(options.audience) : undefined;\\n _decodeJWT = decodeJWT(jwt), payload = _decodeJWT.payload, header = _decodeJWT.header, signature = _decodeJWT.signature, data = _decodeJWT.data;\\n _context2.next = 5;\\n return resolveAuthenticator(header.alg, payload.iss, options.auth);\\n\\n case 5:\\n _ref2 = _context2.sent;\\n doc = _ref2.doc;\\n authenticators = _ref2.authenticators;\\n issuer = _ref2.issuer;\\n signer = (0, _VerifierAlgorithm.default)(header.alg)(data, signature, authenticators);\\n now = Math.floor(Date.now() / 1000);\\n\\n if (!signer) {\\n _context2.next = 31;\\n break;\\n }\\n\\n if (!(payload.iat && payload.iat > now + IAT_SKEW)) {\\n _context2.next = 14;\\n break;\\n }\\n\\n throw new Error(\\\"JWT not valid yet (issued in the future): iat: \\\".concat(payload.iat, \\\" > now: \\\").concat(now));\\n\\n case 14:\\n if (!(payload.exp && payload.exp <= now - IAT_SKEW)) {\\n _context2.next = 16;\\n break;\\n }\\n\\n throw new Error(\\\"JWT has expired: exp: \\\".concat(payload.exp, \\\" < now: \\\").concat(now));\\n\\n case 16:\\n if (!payload.aud) {\\n _context2.next = 28;\\n break;\\n }\\n\\n if (!isDIDOrMNID(payload.aud)) {\\n _context2.next = 24;\\n break;\\n }\\n\\n if (aud) {\\n _context2.next = 20;\\n break;\\n }\\n\\n throw new Error('JWT audience is required but your app address has not been configured');\\n\\n case 20:\\n if (!(aud !== normalizeDID(payload.aud))) {\\n _context2.next = 22;\\n break;\\n }\\n\\n throw new Error(\\\"JWT audience does not match your DID: aud: \\\".concat(payload.aud, \\\" !== yours: \\\").concat(aud));\\n\\n case 22:\\n _context2.next = 28;\\n break;\\n\\n case 24:\\n if (options.callbackUrl) {\\n _context2.next = 26;\\n break;\\n }\\n\\n throw new Error('JWT audience matching your callback url is required but one wasn\\\\'t passed in');\\n\\n case 26:\\n if (!(payload.aud !== options.callbackUrl)) {\\n _context2.next = 28;\\n break;\\n }\\n\\n throw new Error(\\\"JWT audience does not match the callback url: aud: \\\".concat(payload.aud, \\\" !== url: \\\").concat(options.callbackUrl));\\n\\n case 28:\\n return _context2.abrupt(\\\"return\\\", {\\n payload: payload,\\n doc: doc,\\n issuer: issuer,\\n signer: signer,\\n jwt: jwt\\n });\\n\\n case 31:\\n case \\\"end\\\":\\n return _context2.stop();\\n }\\n }\\n }, _callee2, this);\\n }));\\n return _verifyJWT.apply(this, arguments);\\n}\\n\\nfunction resolveAuthenticator(_x4, _x5, _x6) {\\n return _resolveAuthenticator.apply(this, arguments);\\n}\\n\\nfunction _resolveAuthenticator() {\\n _resolveAuthenticator = (0, _asyncToGenerator2.default)(\\n /*#__PURE__*/\\n _regenerator.default.mark(function _callee3(alg, mnidOrDid, auth) {\\n var types, issuer, doc, authenticationKeys, authenticators;\\n return _regenerator.default.wrap(function _callee3$(_context3) {\\n while (1) {\\n switch (_context3.prev = _context3.next) {\\n case 0:\\n types = SUPPORTED_PUBLIC_KEY_TYPES[alg];\\n\\n if (!(!types || types.length === 0)) {\\n _context3.next = 3;\\n break;\\n }\\n\\n throw new Error(\\\"No supported signature types for algorithm \\\".concat(alg));\\n\\n case 3:\\n issuer = normalizeDID(mnidOrDid);\\n _context3.next = 6;\\n return (0, _didResolver.default)(issuer);\\n\\n case 6:\\n doc = _context3.sent;\\n\\n if (doc) {\\n _context3.next = 9;\\n break;\\n }\\n\\n throw new Error(\\\"Unable to resolve DID document for \\\".concat(issuer));\\n\\n case 9:\\n authenticationKeys = auth ? (doc.authentication || []).map(function (_ref3) {\\n var publicKey = _ref3.publicKey;\\n return publicKey;\\n }) : true;\\n authenticators = (doc.publicKey || []).filter(function (_ref4) {\\n var type = _ref4.type,\\n id = _ref4.id;\\n return types.find(function (supported) {\\n return supported === type && (!auth || authenticationKeys.indexOf(id) >= 0);\\n });\\n });\\n\\n if (!(auth && (!authenticators || authenticators.length === 0))) {\\n _context3.next = 13;\\n break;\\n }\\n\\n throw new Error(\\\"DID document for \\\".concat(issuer, \\\" does not have public keys suitable for authenticationg user\\\"));\\n\\n case 13:\\n if (!(!authenticators || authenticators.length === 0)) {\\n _context3.next = 15;\\n break;\\n }\\n\\n throw new Error(\\\"DID document for \\\".concat(issuer, \\\" does not have public keys for \\\").concat(alg));\\n\\n case 15:\\n return _context3.abrupt(\\\"return\\\", {\\n authenticators: authenticators,\\n issuer: issuer,\\n doc: doc\\n });\\n\\n case 16:\\n case \\\"end\\\":\\n return _context3.stop();\\n }\\n }\\n }, _callee3, this);\\n }));\\n return _resolveAuthenticator.apply(this, arguments);\\n}\\n\\nvar _default = {\\n decodeJWT: decodeJWT,\\n createJWT: createJWT,\\n verifyJWT: verifyJWT,\\n resolveAuthenticator: resolveAuthenticator\\n};\\nexports.default = _default;\\n\\n//# sourceURL=webpack:///./node_modules/3id-resolver/node_modules/did-jwt/lib/JWT.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/3id-resolver/node_modules/did-jwt/lib/NaclSigner.js\":\n/*!**************************************************************************!*\\\n !*** ./node_modules/3id-resolver/node_modules/did-jwt/lib/NaclSigner.js ***!\n \\**************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \\\"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\\\");\\n\\nvar _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ \\\"./node_modules/@babel/runtime/regenerator/index.js\\\"));\\n\\nvar _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \\\"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\\\"));\\n\\nvar _tweetnacl = _interopRequireDefault(__webpack_require__(/*! tweetnacl */ \\\"./node_modules/tweetnacl/nacl-fast.js\\\"));\\n\\nvar _tweetnaclUtil = _interopRequireDefault(__webpack_require__(/*! tweetnacl-util */ \\\"./node_modules/tweetnacl-util/nacl-util.js\\\"));\\n\\nfunction encodeBase64Url(data) {\\n return _tweetnaclUtil.default.encodeBase64(data).replace(/\\\\+/g, '-').replace(/\\\\//g, '_').replace(/=/g, '');\\n}\\n/**\\n* The NaclSigner returns a configured function for signing data using the Ed25519 algorithm. It also defines\\n* an interface that you can also implement yourself and use in our other modules.\\n*\\n* The signing function itself takes the data as a string parameter and returls a base64Url encoded signature\\n*\\n* @example\\n* const signer = NaclSigner(process.env.PRIVATE_KEY)\\n* signer(data, (err, signature) => {\\n* ...\\n* })\\n*\\n* @param {String} base64PrivateKey a 64 byte base64 encoded private key\\n* @return {Function} a configured signer function\\n*/\\n\\n\\nfunction NaclSigner(base64PrivateKey) {\\n var privateKey = _tweetnaclUtil.default.decodeBase64(base64PrivateKey);\\n\\n return (\\n /*#__PURE__*/\\n function () {\\n var _ref = (0, _asyncToGenerator2.default)(\\n /*#__PURE__*/\\n _regenerator.default.mark(function _callee(data) {\\n return _regenerator.default.wrap(function _callee$(_context) {\\n while (1) {\\n switch (_context.prev = _context.next) {\\n case 0:\\n return _context.abrupt(\\\"return\\\", encodeBase64Url(_tweetnacl.default.sign.detached(_tweetnaclUtil.default.decodeUTF8(data), privateKey)));\\n\\n case 1:\\n case \\\"end\\\":\\n return _context.stop();\\n }\\n }\\n }, _callee, this);\\n }));\\n\\n return function (_x) {\\n return _ref.apply(this, arguments);\\n };\\n }()\\n );\\n}\\n\\nmodule.exports = NaclSigner;\\n\\n//# sourceURL=webpack:///./node_modules/3id-resolver/node_modules/did-jwt/lib/NaclSigner.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/3id-resolver/node_modules/did-jwt/lib/SignerAlgorithm.js\":\n/*!*******************************************************************************!*\\\n !*** ./node_modules/3id-resolver/node_modules/did-jwt/lib/SignerAlgorithm.js ***!\n \\*******************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \\\"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\\\");\\n\\nObject.defineProperty(exports, \\\"__esModule\\\", {\\n value: true\\n});\\nexports.ES256KSigner = ES256KSigner;\\nexports.Ed25519Signer = Ed25519Signer;\\n\\nvar _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ \\\"./node_modules/@babel/runtime/regenerator/index.js\\\"));\\n\\nvar _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \\\"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\\\"));\\n\\nvar _base64url = _interopRequireDefault(__webpack_require__(/*! base64url */ \\\"./node_modules/base64url/index.js\\\"));\\n\\nvar _buffer = __webpack_require__(/*! buffer */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\");\\n\\nfunction ES256KSigner() {\\n var recoverable = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\\n\\n function toJose(_ref) {\\n var r = _ref.r,\\n s = _ref.s,\\n recoveryParam = _ref.recoveryParam;\\n\\n var jose = _buffer.Buffer.alloc(recoverable ? 65 : 64);\\n\\n _buffer.Buffer.from(r, 'hex').copy(jose, 0);\\n\\n _buffer.Buffer.from(s, 'hex').copy(jose, 32);\\n\\n if (recoverable) {\\n if (recoveryParam === undefined) throw new Error('Signer did not return a recoveryParam');\\n jose[64] = recoveryParam;\\n }\\n\\n return _base64url.default.encode(jose);\\n }\\n\\n return (\\n /*#__PURE__*/\\n function () {\\n var _sign = (0, _asyncToGenerator2.default)(\\n /*#__PURE__*/\\n _regenerator.default.mark(function _callee(payload, signer) {\\n var signature;\\n return _regenerator.default.wrap(function _callee$(_context) {\\n while (1) {\\n switch (_context.prev = _context.next) {\\n case 0:\\n _context.next = 2;\\n return signer(payload);\\n\\n case 2:\\n signature = _context.sent;\\n return _context.abrupt(\\\"return\\\", toJose(signature));\\n\\n case 4:\\n case \\\"end\\\":\\n return _context.stop();\\n }\\n }\\n }, _callee, this);\\n }));\\n\\n function sign(_x, _x2) {\\n return _sign.apply(this, arguments);\\n }\\n\\n return sign;\\n }()\\n );\\n}\\n\\nfunction Ed25519Signer() {\\n return (\\n /*#__PURE__*/\\n function () {\\n var _sign2 = (0, _asyncToGenerator2.default)(\\n /*#__PURE__*/\\n _regenerator.default.mark(function _callee2(payload, signer) {\\n return _regenerator.default.wrap(function _callee2$(_context2) {\\n while (1) {\\n switch (_context2.prev = _context2.next) {\\n case 0:\\n return _context2.abrupt(\\\"return\\\", signer(payload));\\n\\n case 1:\\n case \\\"end\\\":\\n return _context2.stop();\\n }\\n }\\n }, _callee2, this);\\n }));\\n\\n function sign(_x3, _x4) {\\n return _sign2.apply(this, arguments);\\n }\\n\\n return sign;\\n }()\\n );\\n}\\n\\nvar algorithms = {\\n ES256K: ES256KSigner(),\\n 'ES256K-R': ES256KSigner(true),\\n 'Ed25519': Ed25519Signer()\\n};\\n\\nfunction SignerAlgorithm(alg) {\\n var impl = algorithms[alg];\\n if (!impl) throw new Error(\\\"Unsupported algorithm \\\".concat(alg));\\n return impl;\\n}\\n\\nmodule.exports = SignerAlgorithm;\\n\\n//# sourceURL=webpack:///./node_modules/3id-resolver/node_modules/did-jwt/lib/SignerAlgorithm.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/3id-resolver/node_modules/did-jwt/lib/SimpleSigner.js\":\n/*!****************************************************************************!*\\\n !*** ./node_modules/3id-resolver/node_modules/did-jwt/lib/SimpleSigner.js ***!\n \\****************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \\\"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\\\");\\n\\nvar _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ \\\"./node_modules/@babel/runtime/regenerator/index.js\\\"));\\n\\nvar _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \\\"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\\\"));\\n\\nvar _elliptic = __webpack_require__(/*! elliptic */ \\\"./node_modules/elliptic/lib/elliptic.js\\\");\\n\\nvar _Digest = __webpack_require__(/*! ./Digest */ \\\"./node_modules/3id-resolver/node_modules/did-jwt/lib/Digest.js\\\");\\n\\nvar secp256k1 = new _elliptic.ec('secp256k1');\\n\\nfunction leftpad(data) {\\n var size = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 64;\\n if (data.length === size) return data;\\n return '0'.repeat(size - data.length) + data;\\n}\\n/**\\n* The SimpleSigner returns a configured function for signing data. It also defines\\n* an interface that you can also implement yourself and use in our other modules.\\n*\\n* @example\\n* const signer = SimpleSigner(process.env.PRIVATE_KEY)\\n* signer(data, (err, signature) => {\\n* ...\\n* })\\n*\\n* @param {String} hexPrivateKey a hex encoded private key\\n* @return {Function} a configured signer function\\n*/\\n\\n\\nfunction SimpleSigner(hexPrivateKey) {\\n var privateKey = secp256k1.keyFromPrivate(hexPrivateKey);\\n return (\\n /*#__PURE__*/\\n function () {\\n var _ref = (0, _asyncToGenerator2.default)(\\n /*#__PURE__*/\\n _regenerator.default.mark(function _callee(data) {\\n var _privateKey$sign, r, s, recoveryParam;\\n\\n return _regenerator.default.wrap(function _callee$(_context) {\\n while (1) {\\n switch (_context.prev = _context.next) {\\n case 0:\\n _privateKey$sign = privateKey.sign((0, _Digest.sha256)(data)), r = _privateKey$sign.r, s = _privateKey$sign.s, recoveryParam = _privateKey$sign.recoveryParam;\\n return _context.abrupt(\\\"return\\\", {\\n r: leftpad(r.toString('hex')),\\n s: leftpad(s.toString('hex')),\\n recoveryParam: recoveryParam\\n });\\n\\n case 2:\\n case \\\"end\\\":\\n return _context.stop();\\n }\\n }\\n }, _callee, this);\\n }));\\n\\n return function (_x) {\\n return _ref.apply(this, arguments);\\n };\\n }()\\n );\\n}\\n\\nmodule.exports = SimpleSigner;\\n\\n//# sourceURL=webpack:///./node_modules/3id-resolver/node_modules/did-jwt/lib/SimpleSigner.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/3id-resolver/node_modules/did-jwt/lib/VerifierAlgorithm.js\":\n/*!*********************************************************************************!*\\\n !*** ./node_modules/3id-resolver/node_modules/did-jwt/lib/VerifierAlgorithm.js ***!\n \\*********************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \\\"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\\\");\\n\\nObject.defineProperty(exports, \\\"__esModule\\\", {\\n value: true\\n});\\nexports.toSignatureObject = toSignatureObject;\\nexports.verifyES256K = verifyES256K;\\nexports.verifyRecoverableES256K = verifyRecoverableES256K;\\nexports.verifyEd25519 = verifyEd25519;\\n\\nvar _elliptic = __webpack_require__(/*! elliptic */ \\\"./node_modules/elliptic/lib/elliptic.js\\\");\\n\\nvar _Digest = __webpack_require__(/*! ./Digest */ \\\"./node_modules/3id-resolver/node_modules/did-jwt/lib/Digest.js\\\");\\n\\nvar _base64url = _interopRequireDefault(__webpack_require__(/*! base64url */ \\\"./node_modules/base64url/index.js\\\"));\\n\\nvar _tweetnacl = _interopRequireDefault(__webpack_require__(/*! tweetnacl */ \\\"./node_modules/tweetnacl/nacl-fast.js\\\"));\\n\\nvar _tweetnaclUtil = _interopRequireDefault(__webpack_require__(/*! tweetnacl-util */ \\\"./node_modules/tweetnacl-util/nacl-util.js\\\"));\\n\\nvar secp256k1 = new _elliptic.ec('secp256k1'); // converts a JOSE signature to it's components\\n\\nfunction toSignatureObject(signature) {\\n var recoverable = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\\n\\n var rawsig = _base64url.default.toBuffer(signature);\\n\\n if (rawsig.length !== (recoverable ? 65 : 64)) throw new Error('wrong signature length');\\n var r = rawsig.slice(0, 32).toString('hex');\\n var s = rawsig.slice(32, 64).toString('hex');\\n var sigObj = {\\n r: r,\\n s: s\\n };\\n\\n if (recoverable) {\\n sigObj.recoveryParam = rawsig[64];\\n }\\n\\n return sigObj;\\n}\\n\\nfunction verifyES256K(data, signature, authenticators) {\\n var hash = (0, _Digest.sha256)(data);\\n var sigObj = toSignatureObject(signature);\\n var signer = authenticators.find(function (_ref) {\\n var publicKeyHex = _ref.publicKeyHex;\\n return secp256k1.keyFromPublic(publicKeyHex, 'hex').verify(hash, sigObj);\\n });\\n if (!signer) throw new Error('Signature invalid for JWT');\\n return signer;\\n}\\n\\nfunction verifyRecoverableES256K(data, signature, authenticators) {\\n var sigObj = toSignatureObject(signature, true);\\n var hash = (0, _Digest.sha256)(data);\\n var recoveredKey = secp256k1.recoverPubKey(hash, sigObj, sigObj.recoveryParam);\\n var recoveredPublicKeyHex = recoveredKey.encode('hex');\\n var recoveredCompressedPublicKeyHex = recoveredKey.encode('hex', true);\\n var recoveredAddress = (0, _Digest.toEthereumAddress)(recoveredPublicKeyHex);\\n var signer = authenticators.find(function (_ref2) {\\n var publicKeyHex = _ref2.publicKeyHex,\\n ethereumAddress = _ref2.ethereumAddress;\\n return publicKeyHex === recoveredPublicKeyHex || publicKeyHex === recoveredCompressedPublicKeyHex || ethereumAddress === recoveredAddress;\\n });\\n if (!signer) throw new Error('Signature invalid for JWT');\\n return signer;\\n}\\n\\nfunction verifyEd25519(data, signature, authenticators) {\\n var clear = _tweetnaclUtil.default.decodeUTF8(data);\\n\\n var sig = _tweetnaclUtil.default.decodeBase64(_base64url.default.toBase64(signature));\\n\\n var signer = authenticators.find(function (_ref3) {\\n var publicKeyBase64 = _ref3.publicKeyBase64;\\n return _tweetnacl.default.sign.detached.verify(clear, sig, _tweetnaclUtil.default.decodeBase64(publicKeyBase64));\\n });\\n if (!signer) throw new Error('Signature invalid for JWT');\\n return signer;\\n}\\n\\nvar algorithms = {\\n ES256K: verifyES256K,\\n 'ES256K-R': verifyRecoverableES256K,\\n 'Ed25519': verifyEd25519\\n};\\n\\nfunction VerifierAlgorithm(alg) {\\n var impl = algorithms[alg];\\n if (!impl) throw new Error(\\\"Unsupported algorithm \\\".concat(alg));\\n return impl;\\n}\\n\\nVerifierAlgorithm.toSignatureObject = toSignatureObject;\\nmodule.exports = VerifierAlgorithm;\\n\\n//# sourceURL=webpack:///./node_modules/3id-resolver/node_modules/did-jwt/lib/VerifierAlgorithm.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/3id-resolver/node_modules/did-jwt/lib/index.js\":\n/*!*********************************************************************!*\\\n !*** ./node_modules/3id-resolver/node_modules/did-jwt/lib/index.js ***!\n \\*********************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \\\"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\\\");\\n\\nvar _SimpleSigner = _interopRequireDefault(__webpack_require__(/*! ./SimpleSigner */ \\\"./node_modules/3id-resolver/node_modules/did-jwt/lib/SimpleSigner.js\\\"));\\n\\nvar _NaclSigner = _interopRequireDefault(__webpack_require__(/*! ./NaclSigner */ \\\"./node_modules/3id-resolver/node_modules/did-jwt/lib/NaclSigner.js\\\"));\\n\\nvar _JWT = __webpack_require__(/*! ./JWT */ \\\"./node_modules/3id-resolver/node_modules/did-jwt/lib/JWT.js\\\");\\n\\nmodule.exports = {\\n SimpleSigner: _SimpleSigner.default,\\n NaclSigner: _NaclSigner.default,\\n verifyJWT: _JWT.verifyJWT,\\n createJWT: _JWT.createJWT,\\n decodeJWT: _JWT.decodeJWT\\n};\\n\\n//# sourceURL=webpack:///./node_modules/3id-resolver/node_modules/did-jwt/lib/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/3id-resolver/node_modules/js-sha3/src/sha3.js\":\n/*!********************************************************************!*\\\n !*** ./node_modules/3id-resolver/node_modules/js-sha3/src/sha3.js ***!\n \\********************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"/* WEBPACK VAR INJECTION */(function(process, global) {var __WEBPACK_AMD_DEFINE_RESULT__;/**\\n * [js-sha3]{@link https://github.com/emn178/js-sha3}\\n *\\n * @version 0.8.0\\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\\n * @copyright Chen, Yi-Cyuan 2015-2018\\n * @license MIT\\n */\\n/*jslint bitwise: true */\\n(function () {\\n 'use strict';\\n\\n var INPUT_ERROR = 'input is invalid type';\\n var FINALIZE_ERROR = 'finalize already called';\\n var WINDOW = typeof window === 'object';\\n var root = WINDOW ? window : {};\\n if (root.JS_SHA3_NO_WINDOW) {\\n WINDOW = false;\\n }\\n var WEB_WORKER = !WINDOW && typeof self === 'object';\\n var NODE_JS = !root.JS_SHA3_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\\n if (NODE_JS) {\\n root = global;\\n } else if (WEB_WORKER) {\\n root = self;\\n }\\n var COMMON_JS = !root.JS_SHA3_NO_COMMON_JS && typeof module === 'object' && module.exports;\\n var AMD = true && __webpack_require__(/*! !webpack amd options */ \\\"./node_modules/webpack/buildin/amd-options.js\\\");\\n var ARRAY_BUFFER = !root.JS_SHA3_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\\n var HEX_CHARS = '0123456789abcdef'.split('');\\n var SHAKE_PADDING = [31, 7936, 2031616, 520093696];\\n var CSHAKE_PADDING = [4, 1024, 262144, 67108864];\\n var KECCAK_PADDING = [1, 256, 65536, 16777216];\\n var PADDING = [6, 1536, 393216, 100663296];\\n var SHIFT = [0, 8, 16, 24];\\n var RC = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649,\\n 0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0,\\n 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771,\\n 2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648,\\n 2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648];\\n var BITS = [224, 256, 384, 512];\\n var SHAKE_BITS = [128, 256];\\n var OUTPUT_TYPES = ['hex', 'buffer', 'arrayBuffer', 'array', 'digest'];\\n var CSHAKE_BYTEPAD = {\\n '128': 168,\\n '256': 136\\n };\\n\\n if (root.JS_SHA3_NO_NODE_JS || !Array.isArray) {\\n Array.isArray = function (obj) {\\n return Object.prototype.toString.call(obj) === '[object Array]';\\n };\\n }\\n\\n if (ARRAY_BUFFER && (root.JS_SHA3_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {\\n ArrayBuffer.isView = function (obj) {\\n return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\\n };\\n }\\n\\n var createOutputMethod = function (bits, padding, outputType) {\\n return function (message) {\\n return new Keccak(bits, padding, bits).update(message)[outputType]();\\n };\\n };\\n\\n var createShakeOutputMethod = function (bits, padding, outputType) {\\n return function (message, outputBits) {\\n return new Keccak(bits, padding, outputBits).update(message)[outputType]();\\n };\\n };\\n\\n var createCshakeOutputMethod = function (bits, padding, outputType) {\\n return function (message, outputBits, n, s) {\\n return methods['cshake' + bits].update(message, outputBits, n, s)[outputType]();\\n };\\n };\\n\\n var createKmacOutputMethod = function (bits, padding, outputType) {\\n return function (key, message, outputBits, s) {\\n return methods['kmac' + bits].update(key, message, outputBits, s)[outputType]();\\n };\\n };\\n\\n var createOutputMethods = function (method, createMethod, bits, padding) {\\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\\n var type = OUTPUT_TYPES[i];\\n method[type] = createMethod(bits, padding, type);\\n }\\n return method;\\n };\\n\\n var createMethod = function (bits, padding) {\\n var method = createOutputMethod(bits, padding, 'hex');\\n method.create = function () {\\n return new Keccak(bits, padding, bits);\\n };\\n method.update = function (message) {\\n return method.create().update(message);\\n };\\n return createOutputMethods(method, createOutputMethod, bits, padding);\\n };\\n\\n var createShakeMethod = function (bits, padding) {\\n var method = createShakeOutputMethod(bits, padding, 'hex');\\n method.create = function (outputBits) {\\n return new Keccak(bits, padding, outputBits);\\n };\\n method.update = function (message, outputBits) {\\n return method.create(outputBits).update(message);\\n };\\n return createOutputMethods(method, createShakeOutputMethod, bits, padding);\\n };\\n\\n var createCshakeMethod = function (bits, padding) {\\n var w = CSHAKE_BYTEPAD[bits];\\n var method = createCshakeOutputMethod(bits, padding, 'hex');\\n method.create = function (outputBits, n, s) {\\n if (!n && !s) {\\n return methods['shake' + bits].create(outputBits);\\n } else {\\n return new Keccak(bits, padding, outputBits).bytepad([n, s], w);\\n }\\n };\\n method.update = function (message, outputBits, n, s) {\\n return method.create(outputBits, n, s).update(message);\\n };\\n return createOutputMethods(method, createCshakeOutputMethod, bits, padding);\\n };\\n\\n var createKmacMethod = function (bits, padding) {\\n var w = CSHAKE_BYTEPAD[bits];\\n var method = createKmacOutputMethod(bits, padding, 'hex');\\n method.create = function (key, outputBits, s) {\\n return new Kmac(bits, padding, outputBits).bytepad(['KMAC', s], w).bytepad([key], w);\\n };\\n method.update = function (key, message, outputBits, s) {\\n return method.create(key, outputBits, s).update(message);\\n };\\n return createOutputMethods(method, createKmacOutputMethod, bits, padding);\\n };\\n\\n var algorithms = [\\n { name: 'keccak', padding: KECCAK_PADDING, bits: BITS, createMethod: createMethod },\\n { name: 'sha3', padding: PADDING, bits: BITS, createMethod: createMethod },\\n { name: 'shake', padding: SHAKE_PADDING, bits: SHAKE_BITS, createMethod: createShakeMethod },\\n { name: 'cshake', padding: CSHAKE_PADDING, bits: SHAKE_BITS, createMethod: createCshakeMethod },\\n { name: 'kmac', padding: CSHAKE_PADDING, bits: SHAKE_BITS, createMethod: createKmacMethod }\\n ];\\n\\n var methods = {}, methodNames = [];\\n\\n for (var i = 0; i < algorithms.length; ++i) {\\n var algorithm = algorithms[i];\\n var bits = algorithm.bits;\\n for (var j = 0; j < bits.length; ++j) {\\n var methodName = algorithm.name + '_' + bits[j];\\n methodNames.push(methodName);\\n methods[methodName] = algorithm.createMethod(bits[j], algorithm.padding);\\n if (algorithm.name !== 'sha3') {\\n var newMethodName = algorithm.name + bits[j];\\n methodNames.push(newMethodName);\\n methods[newMethodName] = methods[methodName];\\n }\\n }\\n }\\n\\n function Keccak(bits, padding, outputBits) {\\n this.blocks = [];\\n this.s = [];\\n this.padding = padding;\\n this.outputBits = outputBits;\\n this.reset = true;\\n this.finalized = false;\\n this.block = 0;\\n this.start = 0;\\n this.blockCount = (1600 - (bits << 1)) >> 5;\\n this.byteCount = this.blockCount << 2;\\n this.outputBlocks = outputBits >> 5;\\n this.extraBytes = (outputBits & 31) >> 3;\\n\\n for (var i = 0; i < 50; ++i) {\\n this.s[i] = 0;\\n }\\n }\\n\\n Keccak.prototype.update = function (message) {\\n if (this.finalized) {\\n throw new Error(FINALIZE_ERROR);\\n }\\n var notString, type = typeof message;\\n if (type !== 'string') {\\n if (type === 'object') {\\n if (message === null) {\\n throw new Error(INPUT_ERROR);\\n } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\\n message = new Uint8Array(message);\\n } else if (!Array.isArray(message)) {\\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {\\n throw new Error(INPUT_ERROR);\\n }\\n }\\n } else {\\n throw new Error(INPUT_ERROR);\\n }\\n notString = true;\\n }\\n var blocks = this.blocks, byteCount = this.byteCount, length = message.length,\\n blockCount = this.blockCount, index = 0, s = this.s, i, code;\\n\\n while (index < length) {\\n if (this.reset) {\\n this.reset = false;\\n blocks[0] = this.block;\\n for (i = 1; i < blockCount + 1; ++i) {\\n blocks[i] = 0;\\n }\\n }\\n if (notString) {\\n for (i = this.start; index < length && i < byteCount; ++index) {\\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\\n }\\n } else {\\n for (i = this.start; index < length && i < byteCount; ++index) {\\n code = message.charCodeAt(index);\\n if (code < 0x80) {\\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\\n } else if (code < 0x800) {\\n blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\\n } else if (code < 0xd800 || code >= 0xe000) {\\n blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\\n } else {\\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\\n blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\\n blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\\n }\\n }\\n }\\n this.lastByteIndex = i;\\n if (i >= byteCount) {\\n this.start = i - byteCount;\\n this.block = blocks[blockCount];\\n for (i = 0; i < blockCount; ++i) {\\n s[i] ^= blocks[i];\\n }\\n f(s);\\n this.reset = true;\\n } else {\\n this.start = i;\\n }\\n }\\n return this;\\n };\\n\\n Keccak.prototype.encode = function (x, right) {\\n var o = x & 255, n = 1;\\n var bytes = [o];\\n x = x >> 8;\\n o = x & 255;\\n while (o > 0) {\\n bytes.unshift(o);\\n x = x >> 8;\\n o = x & 255;\\n ++n;\\n }\\n if (right) {\\n bytes.push(n);\\n } else {\\n bytes.unshift(n);\\n }\\n this.update(bytes);\\n return bytes.length;\\n };\\n\\n Keccak.prototype.encodeString = function (str) {\\n var notString, type = typeof str;\\n if (type !== 'string') {\\n if (type === 'object') {\\n if (str === null) {\\n throw new Error(INPUT_ERROR);\\n } else if (ARRAY_BUFFER && str.constructor === ArrayBuffer) {\\n str = new Uint8Array(str);\\n } else if (!Array.isArray(str)) {\\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(str)) {\\n throw new Error(INPUT_ERROR);\\n }\\n }\\n } else {\\n throw new Error(INPUT_ERROR);\\n }\\n notString = true;\\n }\\n var bytes = 0, length = str.length;\\n if (notString) {\\n bytes = length;\\n } else {\\n for (var i = 0; i < str.length; ++i) {\\n var code = str.charCodeAt(i);\\n if (code < 0x80) {\\n bytes += 1;\\n } else if (code < 0x800) {\\n bytes += 2;\\n } else if (code < 0xd800 || code >= 0xe000) {\\n bytes += 3;\\n } else {\\n code = 0x10000 + (((code & 0x3ff) << 10) | (str.charCodeAt(++i) & 0x3ff));\\n bytes += 4;\\n }\\n }\\n }\\n bytes += this.encode(bytes * 8);\\n this.update(str);\\n return bytes;\\n };\\n\\n Keccak.prototype.bytepad = function (strs, w) {\\n var bytes = this.encode(w);\\n for (var i = 0; i < strs.length; ++i) {\\n bytes += this.encodeString(strs[i]);\\n }\\n var paddingBytes = w - bytes % w;\\n var zeros = [];\\n zeros.length = paddingBytes;\\n this.update(zeros);\\n return this;\\n };\\n\\n Keccak.prototype.finalize = function () {\\n if (this.finalized) {\\n return;\\n }\\n this.finalized = true;\\n var blocks = this.blocks, i = this.lastByteIndex, blockCount = this.blockCount, s = this.s;\\n blocks[i >> 2] |= this.padding[i & 3];\\n if (this.lastByteIndex === this.byteCount) {\\n blocks[0] = blocks[blockCount];\\n for (i = 1; i < blockCount + 1; ++i) {\\n blocks[i] = 0;\\n }\\n }\\n blocks[blockCount - 1] |= 0x80000000;\\n for (i = 0; i < blockCount; ++i) {\\n s[i] ^= blocks[i];\\n }\\n f(s);\\n };\\n\\n Keccak.prototype.toString = Keccak.prototype.hex = function () {\\n this.finalize();\\n\\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\\n extraBytes = this.extraBytes, i = 0, j = 0;\\n var hex = '', block;\\n while (j < outputBlocks) {\\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\\n block = s[i];\\n hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F] +\\n HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F] +\\n HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F] +\\n HEX_CHARS[(block >> 28) & 0x0F] + HEX_CHARS[(block >> 24) & 0x0F];\\n }\\n if (j % blockCount === 0) {\\n f(s);\\n i = 0;\\n }\\n }\\n if (extraBytes) {\\n block = s[i];\\n hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F];\\n if (extraBytes > 1) {\\n hex += HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F];\\n }\\n if (extraBytes > 2) {\\n hex += HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F];\\n }\\n }\\n return hex;\\n };\\n\\n Keccak.prototype.arrayBuffer = function () {\\n this.finalize();\\n\\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\\n extraBytes = this.extraBytes, i = 0, j = 0;\\n var bytes = this.outputBits >> 3;\\n var buffer;\\n if (extraBytes) {\\n buffer = new ArrayBuffer((outputBlocks + 1) << 2);\\n } else {\\n buffer = new ArrayBuffer(bytes);\\n }\\n var array = new Uint32Array(buffer);\\n while (j < outputBlocks) {\\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\\n array[j] = s[i];\\n }\\n if (j % blockCount === 0) {\\n f(s);\\n }\\n }\\n if (extraBytes) {\\n array[i] = s[i];\\n buffer = buffer.slice(0, bytes);\\n }\\n return buffer;\\n };\\n\\n Keccak.prototype.buffer = Keccak.prototype.arrayBuffer;\\n\\n Keccak.prototype.digest = Keccak.prototype.array = function () {\\n this.finalize();\\n\\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\\n extraBytes = this.extraBytes, i = 0, j = 0;\\n var array = [], offset, block;\\n while (j < outputBlocks) {\\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\\n offset = j << 2;\\n block = s[i];\\n array[offset] = block & 0xFF;\\n array[offset + 1] = (block >> 8) & 0xFF;\\n array[offset + 2] = (block >> 16) & 0xFF;\\n array[offset + 3] = (block >> 24) & 0xFF;\\n }\\n if (j % blockCount === 0) {\\n f(s);\\n }\\n }\\n if (extraBytes) {\\n offset = j << 2;\\n block = s[i];\\n array[offset] = block & 0xFF;\\n if (extraBytes > 1) {\\n array[offset + 1] = (block >> 8) & 0xFF;\\n }\\n if (extraBytes > 2) {\\n array[offset + 2] = (block >> 16) & 0xFF;\\n }\\n }\\n return array;\\n };\\n\\n function Kmac(bits, padding, outputBits) {\\n Keccak.call(this, bits, padding, outputBits);\\n }\\n\\n Kmac.prototype = new Keccak();\\n\\n Kmac.prototype.finalize = function () {\\n this.encode(this.outputBits, true);\\n return Keccak.prototype.finalize.call(this);\\n };\\n\\n var f = function (s) {\\n var h, l, n, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9,\\n b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17,\\n b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33,\\n b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49;\\n for (n = 0; n < 48; n += 2) {\\n c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40];\\n c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41];\\n c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42];\\n c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43];\\n c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44];\\n c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45];\\n c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46];\\n c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47];\\n c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48];\\n c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49];\\n\\n h = c8 ^ ((c2 << 1) | (c3 >>> 31));\\n l = c9 ^ ((c3 << 1) | (c2 >>> 31));\\n s[0] ^= h;\\n s[1] ^= l;\\n s[10] ^= h;\\n s[11] ^= l;\\n s[20] ^= h;\\n s[21] ^= l;\\n s[30] ^= h;\\n s[31] ^= l;\\n s[40] ^= h;\\n s[41] ^= l;\\n h = c0 ^ ((c4 << 1) | (c5 >>> 31));\\n l = c1 ^ ((c5 << 1) | (c4 >>> 31));\\n s[2] ^= h;\\n s[3] ^= l;\\n s[12] ^= h;\\n s[13] ^= l;\\n s[22] ^= h;\\n s[23] ^= l;\\n s[32] ^= h;\\n s[33] ^= l;\\n s[42] ^= h;\\n s[43] ^= l;\\n h = c2 ^ ((c6 << 1) | (c7 >>> 31));\\n l = c3 ^ ((c7 << 1) | (c6 >>> 31));\\n s[4] ^= h;\\n s[5] ^= l;\\n s[14] ^= h;\\n s[15] ^= l;\\n s[24] ^= h;\\n s[25] ^= l;\\n s[34] ^= h;\\n s[35] ^= l;\\n s[44] ^= h;\\n s[45] ^= l;\\n h = c4 ^ ((c8 << 1) | (c9 >>> 31));\\n l = c5 ^ ((c9 << 1) | (c8 >>> 31));\\n s[6] ^= h;\\n s[7] ^= l;\\n s[16] ^= h;\\n s[17] ^= l;\\n s[26] ^= h;\\n s[27] ^= l;\\n s[36] ^= h;\\n s[37] ^= l;\\n s[46] ^= h;\\n s[47] ^= l;\\n h = c6 ^ ((c0 << 1) | (c1 >>> 31));\\n l = c7 ^ ((c1 << 1) | (c0 >>> 31));\\n s[8] ^= h;\\n s[9] ^= l;\\n s[18] ^= h;\\n s[19] ^= l;\\n s[28] ^= h;\\n s[29] ^= l;\\n s[38] ^= h;\\n s[39] ^= l;\\n s[48] ^= h;\\n s[49] ^= l;\\n\\n b0 = s[0];\\n b1 = s[1];\\n b32 = (s[11] << 4) | (s[10] >>> 28);\\n b33 = (s[10] << 4) | (s[11] >>> 28);\\n b14 = (s[20] << 3) | (s[21] >>> 29);\\n b15 = (s[21] << 3) | (s[20] >>> 29);\\n b46 = (s[31] << 9) | (s[30] >>> 23);\\n b47 = (s[30] << 9) | (s[31] >>> 23);\\n b28 = (s[40] << 18) | (s[41] >>> 14);\\n b29 = (s[41] << 18) | (s[40] >>> 14);\\n b20 = (s[2] << 1) | (s[3] >>> 31);\\n b21 = (s[3] << 1) | (s[2] >>> 31);\\n b2 = (s[13] << 12) | (s[12] >>> 20);\\n b3 = (s[12] << 12) | (s[13] >>> 20);\\n b34 = (s[22] << 10) | (s[23] >>> 22);\\n b35 = (s[23] << 10) | (s[22] >>> 22);\\n b16 = (s[33] << 13) | (s[32] >>> 19);\\n b17 = (s[32] << 13) | (s[33] >>> 19);\\n b48 = (s[42] << 2) | (s[43] >>> 30);\\n b49 = (s[43] << 2) | (s[42] >>> 30);\\n b40 = (s[5] << 30) | (s[4] >>> 2);\\n b41 = (s[4] << 30) | (s[5] >>> 2);\\n b22 = (s[14] << 6) | (s[15] >>> 26);\\n b23 = (s[15] << 6) | (s[14] >>> 26);\\n b4 = (s[25] << 11) | (s[24] >>> 21);\\n b5 = (s[24] << 11) | (s[25] >>> 21);\\n b36 = (s[34] << 15) | (s[35] >>> 17);\\n b37 = (s[35] << 15) | (s[34] >>> 17);\\n b18 = (s[45] << 29) | (s[44] >>> 3);\\n b19 = (s[44] << 29) | (s[45] >>> 3);\\n b10 = (s[6] << 28) | (s[7] >>> 4);\\n b11 = (s[7] << 28) | (s[6] >>> 4);\\n b42 = (s[17] << 23) | (s[16] >>> 9);\\n b43 = (s[16] << 23) | (s[17] >>> 9);\\n b24 = (s[26] << 25) | (s[27] >>> 7);\\n b25 = (s[27] << 25) | (s[26] >>> 7);\\n b6 = (s[36] << 21) | (s[37] >>> 11);\\n b7 = (s[37] << 21) | (s[36] >>> 11);\\n b38 = (s[47] << 24) | (s[46] >>> 8);\\n b39 = (s[46] << 24) | (s[47] >>> 8);\\n b30 = (s[8] << 27) | (s[9] >>> 5);\\n b31 = (s[9] << 27) | (s[8] >>> 5);\\n b12 = (s[18] << 20) | (s[19] >>> 12);\\n b13 = (s[19] << 20) | (s[18] >>> 12);\\n b44 = (s[29] << 7) | (s[28] >>> 25);\\n b45 = (s[28] << 7) | (s[29] >>> 25);\\n b26 = (s[38] << 8) | (s[39] >>> 24);\\n b27 = (s[39] << 8) | (s[38] >>> 24);\\n b8 = (s[48] << 14) | (s[49] >>> 18);\\n b9 = (s[49] << 14) | (s[48] >>> 18);\\n\\n s[0] = b0 ^ (~b2 & b4);\\n s[1] = b1 ^ (~b3 & b5);\\n s[10] = b10 ^ (~b12 & b14);\\n s[11] = b11 ^ (~b13 & b15);\\n s[20] = b20 ^ (~b22 & b24);\\n s[21] = b21 ^ (~b23 & b25);\\n s[30] = b30 ^ (~b32 & b34);\\n s[31] = b31 ^ (~b33 & b35);\\n s[40] = b40 ^ (~b42 & b44);\\n s[41] = b41 ^ (~b43 & b45);\\n s[2] = b2 ^ (~b4 & b6);\\n s[3] = b3 ^ (~b5 & b7);\\n s[12] = b12 ^ (~b14 & b16);\\n s[13] = b13 ^ (~b15 & b17);\\n s[22] = b22 ^ (~b24 & b26);\\n s[23] = b23 ^ (~b25 & b27);\\n s[32] = b32 ^ (~b34 & b36);\\n s[33] = b33 ^ (~b35 & b37);\\n s[42] = b42 ^ (~b44 & b46);\\n s[43] = b43 ^ (~b45 & b47);\\n s[4] = b4 ^ (~b6 & b8);\\n s[5] = b5 ^ (~b7 & b9);\\n s[14] = b14 ^ (~b16 & b18);\\n s[15] = b15 ^ (~b17 & b19);\\n s[24] = b24 ^ (~b26 & b28);\\n s[25] = b25 ^ (~b27 & b29);\\n s[34] = b34 ^ (~b36 & b38);\\n s[35] = b35 ^ (~b37 & b39);\\n s[44] = b44 ^ (~b46 & b48);\\n s[45] = b45 ^ (~b47 & b49);\\n s[6] = b6 ^ (~b8 & b0);\\n s[7] = b7 ^ (~b9 & b1);\\n s[16] = b16 ^ (~b18 & b10);\\n s[17] = b17 ^ (~b19 & b11);\\n s[26] = b26 ^ (~b28 & b20);\\n s[27] = b27 ^ (~b29 & b21);\\n s[36] = b36 ^ (~b38 & b30);\\n s[37] = b37 ^ (~b39 & b31);\\n s[46] = b46 ^ (~b48 & b40);\\n s[47] = b47 ^ (~b49 & b41);\\n s[8] = b8 ^ (~b0 & b2);\\n s[9] = b9 ^ (~b1 & b3);\\n s[18] = b18 ^ (~b10 & b12);\\n s[19] = b19 ^ (~b11 & b13);\\n s[28] = b28 ^ (~b20 & b22);\\n s[29] = b29 ^ (~b21 & b23);\\n s[38] = b38 ^ (~b30 & b32);\\n s[39] = b39 ^ (~b31 & b33);\\n s[48] = b48 ^ (~b40 & b42);\\n s[49] = b49 ^ (~b41 & b43);\\n\\n s[0] ^= RC[n];\\n s[1] ^= RC[n + 1];\\n }\\n };\\n\\n if (COMMON_JS) {\\n module.exports = methods;\\n } else {\\n for (i = 0; i < methodNames.length; ++i) {\\n root[methodNames[i]] = methods[methodNames[i]];\\n }\\n if (AMD) {\\n !(__WEBPACK_AMD_DEFINE_RESULT__ = (function () {\\n return methods;\\n }).call(exports, __webpack_require__, exports, module),\\n\\t\\t\\t\\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\\n }\\n }\\n})();\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../process/browser.js */ \\\"./node_modules/process/browser.js\\\"), __webpack_require__(/*! ./../../../../webpack/buildin/global.js */ \\\"./node_modules/webpack/buildin/global.js\\\")))\\n\\n//# sourceURL=webpack:///./node_modules/3id-resolver/node_modules/js-sha3/src/sha3.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@babel/runtime/helpers/assertThisInitialized.js\":\n/*!**********************************************************************!*\\\n !*** ./node_modules/@babel/runtime/helpers/assertThisInitialized.js ***!\n \\**********************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"function _assertThisInitialized(self) {\\n if (self === void 0) {\\n throw new ReferenceError(\\\"this hasn't been initialised - super() hasn't been called\\\");\\n }\\n\\n return self;\\n}\\n\\nmodule.exports = _assertThisInitialized;\\n\\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/assertThisInitialized.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\":\n/*!*****************************************************************!*\\\n !*** ./node_modules/@babel/runtime/helpers/asyncToGenerator.js ***!\n \\*****************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\\n try {\\n var info = gen[key](arg);\\n var value = info.value;\\n } catch (error) {\\n reject(error);\\n return;\\n }\\n\\n if (info.done) {\\n resolve(value);\\n } else {\\n Promise.resolve(value).then(_next, _throw);\\n }\\n}\\n\\nfunction _asyncToGenerator(fn) {\\n return function () {\\n var self = this,\\n args = arguments;\\n return new Promise(function (resolve, reject) {\\n var gen = fn.apply(self, args);\\n\\n function _next(value) {\\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \\\"next\\\", value);\\n }\\n\\n function _throw(err) {\\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \\\"throw\\\", err);\\n }\\n\\n _next(undefined);\\n });\\n };\\n}\\n\\nmodule.exports = _asyncToGenerator;\\n\\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/asyncToGenerator.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@babel/runtime/helpers/classCallCheck.js\":\n/*!***************************************************************!*\\\n !*** ./node_modules/@babel/runtime/helpers/classCallCheck.js ***!\n \\***************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"function _classCallCheck(instance, Constructor) {\\n if (!(instance instanceof Constructor)) {\\n throw new TypeError(\\\"Cannot call a class as a function\\\");\\n }\\n}\\n\\nmodule.exports = _classCallCheck;\\n\\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/classCallCheck.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@babel/runtime/helpers/createClass.js\":\n/*!************************************************************!*\\\n !*** ./node_modules/@babel/runtime/helpers/createClass.js ***!\n \\************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"function _defineProperties(target, props) {\\n for (var i = 0; i < props.length; i++) {\\n var descriptor = props[i];\\n descriptor.enumerable = descriptor.enumerable || false;\\n descriptor.configurable = true;\\n if (\\\"value\\\" in descriptor) descriptor.writable = true;\\n Object.defineProperty(target, descriptor.key, descriptor);\\n }\\n}\\n\\nfunction _createClass(Constructor, protoProps, staticProps) {\\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\\n if (staticProps) _defineProperties(Constructor, staticProps);\\n return Constructor;\\n}\\n\\nmodule.exports = _createClass;\\n\\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/createClass.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@babel/runtime/helpers/defineProperty.js\":\n/*!***************************************************************!*\\\n !*** ./node_modules/@babel/runtime/helpers/defineProperty.js ***!\n \\***************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"function _defineProperty(obj, key, value) {\\n if (key in obj) {\\n Object.defineProperty(obj, key, {\\n value: value,\\n enumerable: true,\\n configurable: true,\\n writable: true\\n });\\n } else {\\n obj[key] = value;\\n }\\n\\n return obj;\\n}\\n\\nmodule.exports = _defineProperty;\\n\\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/defineProperty.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\":\n/*!***************************************************************!*\\\n !*** ./node_modules/@babel/runtime/helpers/getPrototypeOf.js ***!\n \\***************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"function _getPrototypeOf(o) {\\n module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\\n return o.__proto__ || Object.getPrototypeOf(o);\\n };\\n return _getPrototypeOf(o);\\n}\\n\\nmodule.exports = _getPrototypeOf;\\n\\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/getPrototypeOf.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@babel/runtime/helpers/inherits.js\":\n/*!*********************************************************!*\\\n !*** ./node_modules/@babel/runtime/helpers/inherits.js ***!\n \\*********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"var setPrototypeOf = __webpack_require__(/*! ./setPrototypeOf */ \\\"./node_modules/@babel/runtime/helpers/setPrototypeOf.js\\\");\\n\\nfunction _inherits(subClass, superClass) {\\n if (typeof superClass !== \\\"function\\\" && superClass !== null) {\\n throw new TypeError(\\\"Super expression must either be null or a function\\\");\\n }\\n\\n subClass.prototype = Object.create(superClass && superClass.prototype, {\\n constructor: {\\n value: subClass,\\n writable: true,\\n configurable: true\\n }\\n });\\n if (superClass) setPrototypeOf(subClass, superClass);\\n}\\n\\nmodule.exports = _inherits;\\n\\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/inherits.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\":\n/*!**********************************************************************!*\\\n !*** ./node_modules/@babel/runtime/helpers/interopRequireDefault.js ***!\n \\**********************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"function _interopRequireDefault(obj) {\\n return obj && obj.__esModule ? obj : {\\n \\\"default\\\": obj\\n };\\n}\\n\\nmodule.exports = _interopRequireDefault;\\n\\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/interopRequireDefault.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@babel/runtime/helpers/objectSpread.js\":\n/*!*************************************************************!*\\\n !*** ./node_modules/@babel/runtime/helpers/objectSpread.js ***!\n \\*************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"var defineProperty = __webpack_require__(/*! ./defineProperty */ \\\"./node_modules/@babel/runtime/helpers/defineProperty.js\\\");\\n\\nfunction _objectSpread(target) {\\n for (var i = 1; i < arguments.length; i++) {\\n var source = arguments[i] != null ? Object(arguments[i]) : {};\\n var ownKeys = Object.keys(source);\\n\\n if (typeof Object.getOwnPropertySymbols === 'function') {\\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\\n }));\\n }\\n\\n ownKeys.forEach(function (key) {\\n defineProperty(target, key, source[key]);\\n });\\n }\\n\\n return target;\\n}\\n\\nmodule.exports = _objectSpread;\\n\\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/objectSpread.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\":\n/*!**************************************************************************!*\\\n !*** ./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js ***!\n \\**************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"var _typeof = __webpack_require__(/*! ../helpers/typeof */ \\\"./node_modules/@babel/runtime/helpers/typeof.js\\\");\\n\\nvar assertThisInitialized = __webpack_require__(/*! ./assertThisInitialized */ \\\"./node_modules/@babel/runtime/helpers/assertThisInitialized.js\\\");\\n\\nfunction _possibleConstructorReturn(self, call) {\\n if (call && (_typeof(call) === \\\"object\\\" || typeof call === \\\"function\\\")) {\\n return call;\\n }\\n\\n return assertThisInitialized(self);\\n}\\n\\nmodule.exports = _possibleConstructorReturn;\\n\\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@babel/runtime/helpers/setPrototypeOf.js\":\n/*!***************************************************************!*\\\n !*** ./node_modules/@babel/runtime/helpers/setPrototypeOf.js ***!\n \\***************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"function _setPrototypeOf(o, p) {\\n module.exports = _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\\n o.__proto__ = p;\\n return o;\\n };\\n\\n return _setPrototypeOf(o, p);\\n}\\n\\nmodule.exports = _setPrototypeOf;\\n\\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/setPrototypeOf.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@babel/runtime/helpers/typeof.js\":\n/*!*******************************************************!*\\\n !*** ./node_modules/@babel/runtime/helpers/typeof.js ***!\n \\*******************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"function _typeof(obj) {\\n \\\"@babel/helpers - typeof\\\";\\n\\n if (typeof Symbol === \\\"function\\\" && typeof Symbol.iterator === \\\"symbol\\\") {\\n module.exports = _typeof = function _typeof(obj) {\\n return typeof obj;\\n };\\n } else {\\n module.exports = _typeof = function _typeof(obj) {\\n return obj && typeof Symbol === \\\"function\\\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \\\"symbol\\\" : typeof obj;\\n };\\n }\\n\\n return _typeof(obj);\\n}\\n\\nmodule.exports = _typeof;\\n\\n//# sourceURL=webpack:///./node_modules/@babel/runtime/helpers/typeof.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@babel/runtime/regenerator/index.js\":\n/*!**********************************************************!*\\\n !*** ./node_modules/@babel/runtime/regenerator/index.js ***!\n \\**********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"module.exports = __webpack_require__(/*! regenerator-runtime */ \\\"./node_modules/regenerator-runtime/runtime.js\\\");\\n\\n\\n//# sourceURL=webpack:///./node_modules/@babel/runtime/regenerator/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/abstract-provider/lib.esm/_version.js\":\n/*!***************************************************************************!*\\\n !*** ./node_modules/@ethersproject/abstract-provider/lib.esm/_version.js ***!\n \\***************************************************************************/\n/*! exports provided: version */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"version\\\", function() { return version; });\\nconst version = \\\"abstract-provider/5.0.0-beta.138\\\";\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/abstract-provider/lib.esm/_version.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/abstract-provider/lib.esm/index.js\":\n/*!************************************************************************!*\\\n !*** ./node_modules/@ethersproject/abstract-provider/lib.esm/index.js ***!\n \\************************************************************************/\n/*! exports provided: ForkEvent, BlockForkEvent, TransactionForkEvent, TransactionOrderForkEvent, Provider */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"ForkEvent\\\", function() { return ForkEvent; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"BlockForkEvent\\\", function() { return BlockForkEvent; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"TransactionForkEvent\\\", function() { return TransactionForkEvent; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"TransactionOrderForkEvent\\\", function() { return TransactionOrderForkEvent; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"Provider\\\", function() { return Provider; });\\n/* harmony import */ var _ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @ethersproject/bytes */ \\\"./node_modules/@ethersproject/bytes/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_properties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @ethersproject/properties */ \\\"./node_modules/@ethersproject/properties/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_logger__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @ethersproject/logger */ \\\"./node_modules/@ethersproject/logger/lib.esm/index.js\\\");\\n/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./_version */ \\\"./node_modules/@ethersproject/abstract-provider/lib.esm/_version.js\\\");\\n\\n\\n\\n\\n\\nconst logger = new _ethersproject_logger__WEBPACK_IMPORTED_MODULE_2__[\\\"Logger\\\"](_version__WEBPACK_IMPORTED_MODULE_3__[\\\"version\\\"]);\\n;\\n;\\n//export type CallTransactionable = {\\n// call(transaction: TransactionRequest): Promise<TransactionResponse>;\\n//};\\nclass ForkEvent extends _ethersproject_properties__WEBPACK_IMPORTED_MODULE_1__[\\\"Description\\\"] {\\n static isForkEvent(value) {\\n return !!(value && value._isForkEvent);\\n }\\n}\\nclass BlockForkEvent extends ForkEvent {\\n constructor(blockhash, expiry) {\\n if (!Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__[\\\"isHexString\\\"])(blockhash, 32)) {\\n logger.throwArgumentError(\\\"invalid blockhash\\\", \\\"blockhash\\\", blockhash);\\n }\\n super({\\n _isForkEvent: true,\\n _isBlockForkEvent: true,\\n expiry: (expiry || 0),\\n blockHash: blockhash\\n });\\n }\\n}\\nclass TransactionForkEvent extends ForkEvent {\\n constructor(hash, expiry) {\\n if (!Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__[\\\"isHexString\\\"])(hash, 32)) {\\n logger.throwArgumentError(\\\"invalid transaction hash\\\", \\\"hash\\\", hash);\\n }\\n super({\\n _isForkEvent: true,\\n _isTransactionForkEvent: true,\\n expiry: (expiry || 0),\\n hash: hash\\n });\\n }\\n}\\nclass TransactionOrderForkEvent extends ForkEvent {\\n constructor(beforeHash, afterHash, expiry) {\\n if (!Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__[\\\"isHexString\\\"])(beforeHash, 32)) {\\n logger.throwArgumentError(\\\"invalid transaction hash\\\", \\\"beforeHash\\\", beforeHash);\\n }\\n if (!Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__[\\\"isHexString\\\"])(afterHash, 32)) {\\n logger.throwArgumentError(\\\"invalid transaction hash\\\", \\\"afterHash\\\", afterHash);\\n }\\n super({\\n _isForkEvent: true,\\n _isTransactionOrderForkEvent: true,\\n expiry: (expiry || 0),\\n beforeHash: beforeHash,\\n afterHash: afterHash\\n });\\n }\\n}\\n///////////////////////////////\\n// Exported Abstracts\\nclass Provider {\\n constructor() {\\n logger.checkAbstract(new.target, Provider);\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_1__[\\\"defineReadOnly\\\"])(this, \\\"_isProvider\\\", true);\\n }\\n // Alias for \\\"on\\\"\\n addListener(eventName, listener) {\\n return this.on(eventName, listener);\\n }\\n // Alias for \\\"off\\\"\\n removeListener(eventName, listener) {\\n return this.off(eventName, listener);\\n }\\n static isProvider(value) {\\n return !!(value && value._isProvider);\\n }\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/abstract-provider/lib.esm/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/abstract-signer/lib.esm/_version.js\":\n/*!*************************************************************************!*\\\n !*** ./node_modules/@ethersproject/abstract-signer/lib.esm/_version.js ***!\n \\*************************************************************************/\n/*! exports provided: version */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"version\\\", function() { return version; });\\nconst version = \\\"abstract-signer/5.0.0-beta.140\\\";\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/abstract-signer/lib.esm/_version.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/abstract-signer/lib.esm/index.js\":\n/*!**********************************************************************!*\\\n !*** ./node_modules/@ethersproject/abstract-signer/lib.esm/index.js ***!\n \\**********************************************************************/\n/*! exports provided: Signer, VoidSigner */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"Signer\\\", function() { return Signer; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"VoidSigner\\\", function() { return VoidSigner; });\\n/* harmony import */ var _ethersproject_properties__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @ethersproject/properties */ \\\"./node_modules/@ethersproject/properties/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @ethersproject/logger */ \\\"./node_modules/@ethersproject/logger/lib.esm/index.js\\\");\\n/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_version */ \\\"./node_modules/@ethersproject/abstract-signer/lib.esm/_version.js\\\");\\n\\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\\n return new (P || (P = Promise))(function (resolve, reject) {\\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\\n function rejected(value) { try { step(generator[\\\"throw\\\"](value)); } catch (e) { reject(e); } }\\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\\n step((generator = generator.apply(thisArg, _arguments || [])).next());\\n });\\n};\\n\\n\\n\\nconst logger = new _ethersproject_logger__WEBPACK_IMPORTED_MODULE_1__[\\\"Logger\\\"](_version__WEBPACK_IMPORTED_MODULE_2__[\\\"version\\\"]);\\nconst allowedTransactionKeys = [\\n \\\"chainId\\\", \\\"data\\\", \\\"from\\\", \\\"gasLimit\\\", \\\"gasPrice\\\", \\\"nonce\\\", \\\"to\\\", \\\"value\\\"\\n];\\n// Sub-Class Notes:\\n// - A Signer MUST always make sure, that if present, the \\\"from\\\" field\\n// matches the Signer, before sending or signing a transaction\\n// - A Signer SHOULD always wrap private information (such as a private\\n// key or mnemonic) in a function, so that console.log does not leak\\n// the data\\nclass Signer {\\n ///////////////////\\n // Sub-classes MUST call super\\n constructor() {\\n logger.checkAbstract(new.target, Signer);\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_0__[\\\"defineReadOnly\\\"])(this, \\\"_isSigner\\\", true);\\n }\\n ///////////////////\\n // Sub-classes MAY override these\\n getBalance(blockTag) {\\n this._checkProvider(\\\"getBalance\\\");\\n return this.provider.getBalance(this.getAddress(), blockTag);\\n }\\n getTransactionCount(blockTag) {\\n this._checkProvider(\\\"getTransactionCount\\\");\\n return this.provider.getTransactionCount(this.getAddress(), blockTag);\\n }\\n // Populates \\\"from\\\" if unspecified, and estimates the gas for the transation\\n estimateGas(transaction) {\\n this._checkProvider(\\\"estimateGas\\\");\\n return Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_0__[\\\"resolveProperties\\\"])(this.checkTransaction(transaction)).then((tx) => {\\n return this.provider.estimateGas(tx);\\n });\\n }\\n // Populates \\\"from\\\" if unspecified, and calls with the transation\\n call(transaction, blockTag) {\\n this._checkProvider(\\\"call\\\");\\n return Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_0__[\\\"resolveProperties\\\"])(this.checkTransaction(transaction)).then((tx) => {\\n return this.provider.call(tx);\\n });\\n }\\n // Populates all fields in a transaction, signs it and sends it to the network\\n sendTransaction(transaction) {\\n this._checkProvider(\\\"sendTransaction\\\");\\n return this.populateTransaction(transaction).then((tx) => {\\n return this.signTransaction(tx).then((signedTx) => {\\n return this.provider.sendTransaction(signedTx);\\n });\\n });\\n }\\n getChainId() {\\n this._checkProvider(\\\"getChainId\\\");\\n return this.provider.getNetwork().then((network) => network.chainId);\\n }\\n getGasPrice() {\\n this._checkProvider(\\\"getGasPrice\\\");\\n return this.provider.getGasPrice();\\n }\\n resolveName(name) {\\n this._checkProvider(\\\"resolveName\\\");\\n return this.provider.resolveName(name);\\n }\\n // Checks a transaction does not contain invalid keys and if\\n // no \\\"from\\\" is provided, populates it.\\n // - does NOT require a provider\\n // - adds \\\"from\\\" is not present\\n // - returns a COPY (safe to mutate the result)\\n // By default called from: (overriding these prevents it)\\n // - call\\n // - estimateGas\\n // - populateTransaction (and therefor sendTransaction)\\n checkTransaction(transaction) {\\n for (const key in transaction) {\\n if (allowedTransactionKeys.indexOf(key) === -1) {\\n logger.throwArgumentError(\\\"invalid transaction key: \\\" + key, \\\"transaction\\\", transaction);\\n }\\n }\\n const tx = Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_0__[\\\"shallowCopy\\\"])(transaction);\\n if (tx.from == null) {\\n tx.from = this.getAddress();\\n }\\n else {\\n // Make sure any provided address matches this signer\\n tx.from = Promise.all([\\n Promise.resolve(tx.from),\\n this.getAddress()\\n ]).then((result) => {\\n if (result[0] !== result[1]) {\\n logger.throwArgumentError(\\\"from address mismatch\\\", \\\"transaction\\\", transaction);\\n }\\n return result[0];\\n });\\n }\\n return tx;\\n }\\n // Populates ALL keys for a transaction and checks that \\\"from\\\" matches\\n // this Signer. Should be used by sendTransaction but NOT by signTransaction.\\n // By default called from: (overriding these prevents it)\\n // - sendTransaction\\n populateTransaction(transaction) {\\n return __awaiter(this, void 0, void 0, function* () {\\n const tx = yield Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_0__[\\\"resolveProperties\\\"])(this.checkTransaction(transaction));\\n if (tx.to != null) {\\n tx.to = Promise.resolve(tx.to).then((to) => this.resolveName(to));\\n }\\n if (tx.gasPrice == null) {\\n tx.gasPrice = this.getGasPrice();\\n }\\n if (tx.nonce == null) {\\n tx.nonce = this.getTransactionCount(\\\"pending\\\");\\n }\\n if (tx.gasLimit == null) {\\n tx.gasLimit = this.estimateGas(tx).catch((error) => {\\n return logger.throwError(\\\"cannot estimate gas; transaction may fail or may require manual gas limit\\\", _ethersproject_logger__WEBPACK_IMPORTED_MODULE_1__[\\\"Logger\\\"].errors.UNPREDICTABLE_GAS_LIMIT, {\\n tx: tx\\n });\\n });\\n }\\n if (tx.chainId == null) {\\n tx.chainId = this.getChainId();\\n }\\n else {\\n tx.chainId = Promise.all([\\n Promise.resolve(tx.chainId),\\n this.getChainId()\\n ]).then((results) => {\\n if (results[1] !== 0 && results[0] !== results[1]) {\\n logger.throwArgumentError(\\\"chainId address mismatch\\\", \\\"transaction\\\", transaction);\\n }\\n return results[0];\\n });\\n }\\n return yield Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_0__[\\\"resolveProperties\\\"])(tx);\\n });\\n }\\n ///////////////////\\n // Sub-classes SHOULD leave these alone\\n _checkProvider(operation) {\\n if (!this.provider) {\\n logger.throwError(\\\"missing provider\\\", _ethersproject_logger__WEBPACK_IMPORTED_MODULE_1__[\\\"Logger\\\"].errors.UNSUPPORTED_OPERATION, {\\n operation: (operation || \\\"_checkProvider\\\")\\n });\\n }\\n }\\n static isSigner(value) {\\n return !!(value && value._isSigner);\\n }\\n}\\nclass VoidSigner extends Signer {\\n constructor(address, provider) {\\n logger.checkNew(new.target, VoidSigner);\\n super();\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_0__[\\\"defineReadOnly\\\"])(this, \\\"address\\\", address);\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_0__[\\\"defineReadOnly\\\"])(this, \\\"provider\\\", provider || null);\\n }\\n getAddress() {\\n return Promise.resolve(this.address);\\n }\\n _fail(message, operation) {\\n return Promise.resolve().then(() => {\\n logger.throwError(message, _ethersproject_logger__WEBPACK_IMPORTED_MODULE_1__[\\\"Logger\\\"].errors.UNSUPPORTED_OPERATION, { operation: operation });\\n });\\n }\\n signMessage(message) {\\n return this._fail(\\\"VoidSigner cannot sign messages\\\", \\\"signMessage\\\");\\n }\\n signTransaction(transaction) {\\n return this._fail(\\\"VoidSigner cannot sign transactions\\\", \\\"signTransaction\\\");\\n }\\n connect(provider) {\\n return new VoidSigner(this.address, provider);\\n }\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/abstract-signer/lib.esm/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/address/lib.esm/_version.js\":\n/*!*****************************************************************!*\\\n !*** ./node_modules/@ethersproject/address/lib.esm/_version.js ***!\n \\*****************************************************************/\n/*! exports provided: version */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"version\\\", function() { return version; });\\nconst version = \\\"address/5.0.0-beta.134\\\";\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/address/lib.esm/_version.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/address/lib.esm/index.js\":\n/*!**************************************************************!*\\\n !*** ./node_modules/@ethersproject/address/lib.esm/index.js ***!\n \\**************************************************************/\n/*! exports provided: getAddress, isAddress, getIcapAddress, getContractAddress, getCreate2Address */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"getAddress\\\", function() { return getAddress; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"isAddress\\\", function() { return isAddress; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"getIcapAddress\\\", function() { return getIcapAddress; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"getContractAddress\\\", function() { return getContractAddress; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"getCreate2Address\\\", function() { return getCreate2Address; });\\n/* harmony import */ var bn_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! bn.js */ \\\"./node_modules/bn.js/lib/bn.js\\\");\\n/* harmony import */ var bn_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(bn_js__WEBPACK_IMPORTED_MODULE_0__);\\n/* harmony import */ var _ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @ethersproject/bytes */ \\\"./node_modules/@ethersproject/bytes/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_bignumber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @ethersproject/bignumber */ \\\"./node_modules/@ethersproject/bignumber/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_keccak256__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @ethersproject/keccak256 */ \\\"./node_modules/@ethersproject/keccak256/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_rlp__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @ethersproject/rlp */ \\\"./node_modules/@ethersproject/rlp/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_logger__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @ethersproject/logger */ \\\"./node_modules/@ethersproject/logger/lib.esm/index.js\\\");\\n/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./_version */ \\\"./node_modules/@ethersproject/address/lib.esm/_version.js\\\");\\n\\n// We use this for base 36 maths\\n\\n\\n\\n\\n\\n\\n\\nconst logger = new _ethersproject_logger__WEBPACK_IMPORTED_MODULE_5__[\\\"Logger\\\"](_version__WEBPACK_IMPORTED_MODULE_6__[\\\"version\\\"]);\\nfunction getChecksumAddress(address) {\\n if (!Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"isHexString\\\"])(address, 20)) {\\n logger.throwArgumentError(\\\"invalid address\\\", \\\"address\\\", address);\\n }\\n address = address.toLowerCase();\\n const chars = address.substring(2).split(\\\"\\\");\\n const expanded = new Uint8Array(40);\\n for (let i = 0; i < 40; i++) {\\n expanded[i] = chars[i].charCodeAt(0);\\n }\\n const hashed = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"arrayify\\\"])(Object(_ethersproject_keccak256__WEBPACK_IMPORTED_MODULE_3__[\\\"keccak256\\\"])(expanded));\\n for (let i = 0; i < 40; i += 2) {\\n if ((hashed[i >> 1] >> 4) >= 8) {\\n chars[i] = chars[i].toUpperCase();\\n }\\n if ((hashed[i >> 1] & 0x0f) >= 8) {\\n chars[i + 1] = chars[i + 1].toUpperCase();\\n }\\n }\\n return \\\"0x\\\" + chars.join(\\\"\\\");\\n}\\n// Shims for environments that are missing some required constants and functions\\nconst MAX_SAFE_INTEGER = 0x1fffffffffffff;\\nfunction log10(x) {\\n if (Math.log10) {\\n return Math.log10(x);\\n }\\n return Math.log(x) / Math.LN10;\\n}\\n// See: https://en.wikipedia.org/wiki/International_Bank_Account_Number\\n// Create lookup table\\nconst ibanLookup = {};\\nfor (let i = 0; i < 10; i++) {\\n ibanLookup[String(i)] = String(i);\\n}\\nfor (let i = 0; i < 26; i++) {\\n ibanLookup[String.fromCharCode(65 + i)] = String(10 + i);\\n}\\n// How many decimal digits can we process? (for 64-bit float, this is 15)\\nconst safeDigits = Math.floor(log10(MAX_SAFE_INTEGER));\\nfunction ibanChecksum(address) {\\n address = address.toUpperCase();\\n address = address.substring(4) + address.substring(0, 2) + \\\"00\\\";\\n let expanded = address.split(\\\"\\\").map((c) => { return ibanLookup[c]; }).join(\\\"\\\");\\n // Javascript can handle integers safely up to 15 (decimal) digits\\n while (expanded.length >= safeDigits) {\\n let block = expanded.substring(0, safeDigits);\\n expanded = parseInt(block, 10) % 97 + expanded.substring(block.length);\\n }\\n let checksum = String(98 - (parseInt(expanded, 10) % 97));\\n while (checksum.length < 2) {\\n checksum = \\\"0\\\" + checksum;\\n }\\n return checksum;\\n}\\n;\\nfunction getAddress(address) {\\n let result = null;\\n if (typeof (address) !== \\\"string\\\") {\\n logger.throwArgumentError(\\\"invalid address\\\", \\\"address\\\", address);\\n }\\n if (address.match(/^(0x)?[0-9a-fA-F]{40}$/)) {\\n // Missing the 0x prefix\\n if (address.substring(0, 2) !== \\\"0x\\\") {\\n address = \\\"0x\\\" + address;\\n }\\n result = getChecksumAddress(address);\\n // It is a checksummed address with a bad checksum\\n if (address.match(/([A-F].*[a-f])|([a-f].*[A-F])/) && result !== address) {\\n logger.throwArgumentError(\\\"bad address checksum\\\", \\\"address\\\", address);\\n }\\n // Maybe ICAP? (we only support direct mode)\\n }\\n else if (address.match(/^XE[0-9]{2}[0-9A-Za-z]{30,31}$/)) {\\n // It is an ICAP address with a bad checksum\\n if (address.substring(2, 4) !== ibanChecksum(address)) {\\n logger.throwArgumentError(\\\"bad icap checksum\\\", \\\"address\\\", address);\\n }\\n result = (new bn_js__WEBPACK_IMPORTED_MODULE_0__[\\\"BN\\\"](address.substring(4), 36)).toString(16);\\n while (result.length < 40) {\\n result = \\\"0\\\" + result;\\n }\\n result = getChecksumAddress(\\\"0x\\\" + result);\\n }\\n else {\\n logger.throwArgumentError(\\\"invalid address\\\", \\\"address\\\", address);\\n }\\n return result;\\n}\\nfunction isAddress(address) {\\n try {\\n getAddress(address);\\n return true;\\n }\\n catch (error) { }\\n return false;\\n}\\nfunction getIcapAddress(address) {\\n let base36 = (new bn_js__WEBPACK_IMPORTED_MODULE_0__[\\\"BN\\\"](getAddress(address).substring(2), 16)).toString(36).toUpperCase();\\n while (base36.length < 30) {\\n base36 = \\\"0\\\" + base36;\\n }\\n return \\\"XE\\\" + ibanChecksum(\\\"XE00\\\" + base36) + base36;\\n}\\n// http://ethereum.stackexchange.com/questions/760/how-is-the-address-of-an-ethereum-contract-computed\\nfunction getContractAddress(transaction) {\\n let from = null;\\n try {\\n from = getAddress(transaction.from);\\n }\\n catch (error) {\\n logger.throwArgumentError(\\\"missing from address\\\", \\\"transaction\\\", transaction);\\n }\\n const nonce = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"stripZeros\\\"])(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"arrayify\\\"])(_ethersproject_bignumber__WEBPACK_IMPORTED_MODULE_2__[\\\"BigNumber\\\"].from(transaction.nonce).toHexString()));\\n return getAddress(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexDataSlice\\\"])(Object(_ethersproject_keccak256__WEBPACK_IMPORTED_MODULE_3__[\\\"keccak256\\\"])(Object(_ethersproject_rlp__WEBPACK_IMPORTED_MODULE_4__[\\\"encode\\\"])([from, nonce])), 12));\\n}\\nfunction getCreate2Address(from, salt, initCodeHash) {\\n if (Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexDataLength\\\"])(salt) !== 32) {\\n logger.throwArgumentError(\\\"salt must be 32 bytes\\\", \\\"salt\\\", salt);\\n }\\n if (Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexDataLength\\\"])(initCodeHash) !== 32) {\\n logger.throwArgumentError(\\\"initCodeHash must be 32 bytes\\\", \\\"initCodeHash\\\", initCodeHash);\\n }\\n return getAddress(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexDataSlice\\\"])(Object(_ethersproject_keccak256__WEBPACK_IMPORTED_MODULE_3__[\\\"keccak256\\\"])(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"concat\\\"])([\\\"0xff\\\", getAddress(from), salt, initCodeHash])), 12));\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/address/lib.esm/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/basex/lib.esm/index.js\":\n/*!************************************************************!*\\\n !*** ./node_modules/@ethersproject/basex/lib.esm/index.js ***!\n \\************************************************************/\n/*! exports provided: BaseX, Base32, Base58 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"BaseX\\\", function() { return BaseX; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"Base32\\\", function() { return Base32; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"Base58\\\", function() { return Base58; });\\n/* harmony import */ var _ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @ethersproject/bytes */ \\\"./node_modules/@ethersproject/bytes/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_properties__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @ethersproject/properties */ \\\"./node_modules/@ethersproject/properties/lib.esm/index.js\\\");\\n/**\\n * var basex = require(\\\"base-x\\\");\\n *\\n * This implementation is heavily based on base-x. The main reason to\\n * deviate was to prevent the dependency of Buffer.\\n *\\n * Contributors:\\n *\\n * base-x encoding\\n * Forked from https://github.com/cryptocoinjs/bs58\\n * Originally written by Mike Hearn for BitcoinJ\\n * Copyright (c) 2011 Google Inc\\n * Ported to JavaScript by Stefan Thomas\\n * Merged Buffer refactorings from base58-native by Stephen Pair\\n * Copyright (c) 2013 BitPay Inc\\n *\\n * The MIT License (MIT)\\n *\\n * Copyright base-x contributors (c) 2016\\n *\\n * Permission is hereby granted, free of charge, to any person obtaining a\\n * copy of this software and associated documentation files (the \\\"Software\\\"),\\n * to deal in the Software without restriction, including without limitation\\n * the rights to use, copy, modify, merge, publish, distribute, sublicense,\\n * and/or sell copies of the Software, and to permit persons to whom the\\n * Software is furnished to do so, subject to the following conditions:\\n *\\n * The above copyright notice and this permission notice shall be included in\\n * all copies or substantial portions of the Software.\\n\\n * THE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\\n * IN THE SOFTWARE.\\n *\\n */\\n\\n\\nclass BaseX {\\n constructor(alphabet) {\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_1__[\\\"defineReadOnly\\\"])(this, \\\"alphabet\\\", alphabet);\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_1__[\\\"defineReadOnly\\\"])(this, \\\"base\\\", alphabet.length);\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_1__[\\\"defineReadOnly\\\"])(this, \\\"_alphabetMap\\\", {});\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_1__[\\\"defineReadOnly\\\"])(this, \\\"_leader\\\", alphabet.charAt(0));\\n // pre-compute lookup table\\n for (let i = 0; i < alphabet.length; i++) {\\n this._alphabetMap[alphabet.charAt(i)] = i;\\n }\\n }\\n encode(value) {\\n let source = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__[\\\"arrayify\\\"])(value);\\n if (source.length === 0) {\\n return \\\"\\\";\\n }\\n let digits = [0];\\n for (let i = 0; i < source.length; ++i) {\\n let carry = source[i];\\n for (let j = 0; j < digits.length; ++j) {\\n carry += digits[j] << 8;\\n digits[j] = carry % this.base;\\n carry = (carry / this.base) | 0;\\n }\\n while (carry > 0) {\\n digits.push(carry % this.base);\\n carry = (carry / this.base) | 0;\\n }\\n }\\n let string = \\\"\\\";\\n // deal with leading zeros\\n for (let k = 0; source[k] === 0 && k < source.length - 1; ++k) {\\n string += this._leader;\\n }\\n // convert digits to a string\\n for (let q = digits.length - 1; q >= 0; --q) {\\n string += this.alphabet[digits[q]];\\n }\\n return string;\\n }\\n decode(value) {\\n if (typeof (value) !== \\\"string\\\") {\\n throw new TypeError(\\\"Expected String\\\");\\n }\\n let bytes = [];\\n if (value.length === 0) {\\n return new Uint8Array(bytes);\\n }\\n bytes.push(0);\\n for (let i = 0; i < value.length; i++) {\\n let byte = this._alphabetMap[value[i]];\\n if (byte === undefined) {\\n throw new Error(\\\"Non-base\\\" + this.base + \\\" character\\\");\\n }\\n let carry = byte;\\n for (let j = 0; j < bytes.length; ++j) {\\n carry += bytes[j] * this.base;\\n bytes[j] = carry & 0xff;\\n carry >>= 8;\\n }\\n while (carry > 0) {\\n bytes.push(carry & 0xff);\\n carry >>= 8;\\n }\\n }\\n // deal with leading zeros\\n for (let k = 0; value[k] === this._leader && k < value.length - 1; ++k) {\\n bytes.push(0);\\n }\\n return Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__[\\\"arrayify\\\"])(new Uint8Array(bytes.reverse()));\\n }\\n}\\nconst Base32 = new BaseX(\\\"abcdefghijklmnopqrstuvwxyz234567\\\");\\nconst Base58 = new BaseX(\\\"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz\\\");\\n\\n//console.log(Base58.decode(\\\"Qmd2V777o5XvJbYMeMb8k2nU5f8d3ciUQ5YpYuWhzv8iDj\\\"))\\n//console.log(Base58.encode(Base58.decode(\\\"Qmd2V777o5XvJbYMeMb8k2nU5f8d3ciUQ5YpYuWhzv8iDj\\\")))\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/basex/lib.esm/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/bignumber/lib.esm/_version.js\":\n/*!*******************************************************************!*\\\n !*** ./node_modules/@ethersproject/bignumber/lib.esm/_version.js ***!\n \\*******************************************************************/\n/*! exports provided: version */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"version\\\", function() { return version; });\\nconst version = \\\"bignumber/5.0.0-beta.135\\\";\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/bignumber/lib.esm/_version.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/bignumber/lib.esm/bignumber.js\":\n/*!********************************************************************!*\\\n !*** ./node_modules/@ethersproject/bignumber/lib.esm/bignumber.js ***!\n \\********************************************************************/\n/*! exports provided: isBigNumberish, BigNumber */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"isBigNumberish\\\", function() { return isBigNumberish; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"BigNumber\\\", function() { return BigNumber; });\\n/* harmony import */ var bn_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! bn.js */ \\\"./node_modules/bn.js/lib/bn.js\\\");\\n/* harmony import */ var bn_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(bn_js__WEBPACK_IMPORTED_MODULE_0__);\\n/* harmony import */ var _ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @ethersproject/bytes */ \\\"./node_modules/@ethersproject/bytes/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_logger__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @ethersproject/logger */ \\\"./node_modules/@ethersproject/logger/lib.esm/index.js\\\");\\n/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./_version */ \\\"./node_modules/@ethersproject/bignumber/lib.esm/_version.js\\\");\\n\\n/**\\n * BigNumber\\n *\\n * A wrapper around the BN.js object. We use the BN.js library\\n * because it is used by elliptic, so it is required regardles.\\n *\\n */\\n\\n\\n\\n\\nconst logger = new _ethersproject_logger__WEBPACK_IMPORTED_MODULE_2__[\\\"Logger\\\"](_version__WEBPACK_IMPORTED_MODULE_3__[\\\"version\\\"]);\\nconst _constructorGuard = {};\\nconst MAX_SAFE = 0x1fffffffffffff;\\nfunction isBigNumberish(value) {\\n return (value != null) && (BigNumber.isBigNumber(value) ||\\n (typeof (value) === \\\"number\\\" && (value % 1) === 0) ||\\n (typeof (value) === \\\"string\\\" && !!value.match(/^-?[0-9]+$/)) ||\\n Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"isHexString\\\"])(value) ||\\n (typeof (value) === \\\"bigint\\\") ||\\n Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"isBytes\\\"])(value));\\n}\\nclass BigNumber {\\n constructor(constructorGuard, hex) {\\n logger.checkNew(new.target, BigNumber);\\n if (constructorGuard !== _constructorGuard) {\\n logger.throwError(\\\"cannot call consturtor directly; use BigNumber.from\\\", _ethersproject_logger__WEBPACK_IMPORTED_MODULE_2__[\\\"Logger\\\"].errors.UNSUPPORTED_OPERATION, {\\n operation: \\\"new (BigNumber)\\\"\\n });\\n }\\n this._hex = hex;\\n this._isBigNumber = true;\\n Object.freeze(this);\\n }\\n fromTwos(value) {\\n return toBigNumber(toBN(this).fromTwos(value));\\n }\\n toTwos(value) {\\n return toBigNumber(toBN(this).toTwos(value));\\n }\\n abs() {\\n if (this._hex[0] === \\\"-\\\") {\\n return BigNumber.from(this._hex.substring(1));\\n }\\n return this;\\n }\\n add(other) {\\n return toBigNumber(toBN(this).add(toBN(other)));\\n }\\n sub(other) {\\n return toBigNumber(toBN(this).sub(toBN(other)));\\n }\\n div(other) {\\n const o = BigNumber.from(other);\\n if (o.isZero()) {\\n throwFault(\\\"division by zero\\\", \\\"div\\\");\\n }\\n return toBigNumber(toBN(this).div(toBN(other)));\\n }\\n mul(other) {\\n return toBigNumber(toBN(this).mul(toBN(other)));\\n }\\n mod(other) {\\n return toBigNumber(toBN(this).mod(toBN(other)));\\n }\\n pow(other) {\\n return toBigNumber(toBN(this).pow(toBN(other)));\\n }\\n maskn(value) {\\n return toBigNumber(toBN(this).maskn(value));\\n }\\n eq(other) {\\n return toBN(this).eq(toBN(other));\\n }\\n lt(other) {\\n return toBN(this).lt(toBN(other));\\n }\\n lte(other) {\\n return toBN(this).lte(toBN(other));\\n }\\n gt(other) {\\n return toBN(this).gt(toBN(other));\\n }\\n gte(other) {\\n return toBN(this).gte(toBN(other));\\n }\\n isZero() {\\n return toBN(this).isZero();\\n }\\n toNumber() {\\n try {\\n return toBN(this).toNumber();\\n }\\n catch (error) {\\n throwFault(\\\"overflow\\\", \\\"toNumber\\\", this.toString());\\n }\\n return null;\\n }\\n toString() {\\n // Lots of people expect this, which we do not support, so check\\n if (arguments.length !== 0) {\\n logger.throwError(\\\"bigNumber.toString does not accept parameters\\\", _ethersproject_logger__WEBPACK_IMPORTED_MODULE_2__[\\\"Logger\\\"].errors.UNEXPECTED_ARGUMENT, {});\\n }\\n return toBN(this).toString(10);\\n }\\n toHexString() {\\n return this._hex;\\n }\\n static from(value) {\\n if (value instanceof BigNumber) {\\n return value;\\n }\\n if (typeof (value) === \\\"string\\\") {\\n if (value.match(/-?0x[0-9a-f]+/i)) {\\n return new BigNumber(_constructorGuard, toHex(value));\\n }\\n if (value.match(/^-?[0-9]+$/)) {\\n return new BigNumber(_constructorGuard, toHex(new bn_js__WEBPACK_IMPORTED_MODULE_0__[\\\"BN\\\"](value)));\\n }\\n return logger.throwArgumentError(\\\"invalid BigNumber string\\\", \\\"value\\\", value);\\n }\\n if (typeof (value) === \\\"number\\\") {\\n if (value % 1) {\\n throwFault(\\\"underflow\\\", \\\"BigNumber.from\\\", value);\\n }\\n if (value >= MAX_SAFE || value <= -MAX_SAFE) {\\n throwFault(\\\"overflow\\\", \\\"BigNumber.from\\\", value);\\n }\\n return BigNumber.from(String(value));\\n }\\n if (typeof (value) === \\\"bigint\\\") {\\n return BigNumber.from(value.toString());\\n }\\n if (Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"isBytes\\\"])(value)) {\\n return BigNumber.from(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexlify\\\"])(value));\\n }\\n if (value._hex && Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"isHexString\\\"])(value._hex)) {\\n return BigNumber.from(value._hex);\\n }\\n if (value.toHexString) {\\n value = value.toHexString();\\n if (typeof (value) === \\\"string\\\") {\\n return BigNumber.from(value);\\n }\\n }\\n return logger.throwArgumentError(\\\"invalid BigNumber value\\\", \\\"value\\\", value);\\n }\\n static isBigNumber(value) {\\n return !!(value && value._isBigNumber);\\n }\\n}\\n// Normalize the hex string\\nfunction toHex(value) {\\n // For BN, call on the hex string\\n if (typeof (value) !== \\\"string\\\") {\\n return toHex(value.toString(16));\\n }\\n // If negative, prepend the negative sign to the normalized positive value\\n if (value[0] === \\\"-\\\") {\\n // Strip off the negative sign\\n value = value.substring(1);\\n // Cannot have mulitple negative signs (e.g. \\\"--0x04\\\")\\n if (value[0] === \\\"-\\\") {\\n logger.throwArgumentError(\\\"invalid hex\\\", \\\"value\\\", value);\\n }\\n // Call toHex on the positive component\\n value = toHex(value);\\n // Do not allow \\\"-0x00\\\"\\n if (value === \\\"0x00\\\") {\\n return value;\\n }\\n // Negate the value\\n return \\\"-\\\" + value;\\n }\\n // Add a \\\"0x\\\" prefix if missing\\n if (value.substring(0, 2) !== \\\"0x\\\") {\\n value = \\\"0x\\\" + value;\\n }\\n // Normalize zero\\n if (value === \\\"0x\\\") {\\n return \\\"0x00\\\";\\n }\\n // Make the string even length\\n if (value.length % 2) {\\n value = \\\"0x0\\\" + value.substring(2);\\n }\\n // Trim to smallest even-length string\\n while (value.length > 4 && value.substring(0, 4) === \\\"0x00\\\") {\\n value = \\\"0x\\\" + value.substring(4);\\n }\\n return value;\\n}\\nfunction toBigNumber(value) {\\n return BigNumber.from(toHex(value));\\n}\\nfunction toBN(value) {\\n const hex = BigNumber.from(value).toHexString();\\n if (hex[0] === \\\"-\\\") {\\n return (new bn_js__WEBPACK_IMPORTED_MODULE_0__[\\\"BN\\\"](\\\"-\\\" + hex.substring(3), 16));\\n }\\n return new bn_js__WEBPACK_IMPORTED_MODULE_0__[\\\"BN\\\"](hex.substring(2), 16);\\n}\\nfunction throwFault(fault, operation, value) {\\n const params = { fault: fault, operation: operation };\\n if (value != null) {\\n params.value = value;\\n }\\n return logger.throwError(fault, _ethersproject_logger__WEBPACK_IMPORTED_MODULE_2__[\\\"Logger\\\"].errors.NUMERIC_FAULT, params);\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/bignumber/lib.esm/bignumber.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/bignumber/lib.esm/fixednumber.js\":\n/*!**********************************************************************!*\\\n !*** ./node_modules/@ethersproject/bignumber/lib.esm/fixednumber.js ***!\n \\**********************************************************************/\n/*! exports provided: formatFixed, parseFixed, FixedFormat, FixedNumber */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"formatFixed\\\", function() { return formatFixed; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"parseFixed\\\", function() { return parseFixed; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"FixedFormat\\\", function() { return FixedFormat; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"FixedNumber\\\", function() { return FixedNumber; });\\n/* harmony import */ var _ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @ethersproject/bytes */ \\\"./node_modules/@ethersproject/bytes/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @ethersproject/logger */ \\\"./node_modules/@ethersproject/logger/lib.esm/index.js\\\");\\n/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_version */ \\\"./node_modules/@ethersproject/bignumber/lib.esm/_version.js\\\");\\n/* harmony import */ var _bignumber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./bignumber */ \\\"./node_modules/@ethersproject/bignumber/lib.esm/bignumber.js\\\");\\n\\n\\n\\n\\nconst logger = new _ethersproject_logger__WEBPACK_IMPORTED_MODULE_1__[\\\"Logger\\\"](_version__WEBPACK_IMPORTED_MODULE_2__[\\\"version\\\"]);\\n\\nconst _constructorGuard = {};\\nconst Zero = _bignumber__WEBPACK_IMPORTED_MODULE_3__[\\\"BigNumber\\\"].from(0);\\nconst NegativeOne = _bignumber__WEBPACK_IMPORTED_MODULE_3__[\\\"BigNumber\\\"].from(-1);\\nfunction throwFault(message, fault, operation, value) {\\n const params = { fault: fault, operation: operation };\\n if (value !== undefined) {\\n params.value = value;\\n }\\n return logger.throwError(message, _ethersproject_logger__WEBPACK_IMPORTED_MODULE_1__[\\\"Logger\\\"].errors.NUMERIC_FAULT, params);\\n}\\n// Constant to pull zeros from for multipliers\\nlet zeros = \\\"0\\\";\\nwhile (zeros.length < 256) {\\n zeros += zeros;\\n}\\n// Returns a string \\\"1\\\" followed by decimal \\\"0\\\"s\\nfunction getMultiplier(decimals) {\\n if (typeof (decimals) !== \\\"number\\\") {\\n try {\\n decimals = _bignumber__WEBPACK_IMPORTED_MODULE_3__[\\\"BigNumber\\\"].from(decimals).toNumber();\\n }\\n catch (e) { }\\n }\\n if (typeof (decimals) === \\\"number\\\" && decimals >= 0 && decimals <= 256 && !(decimals % 1)) {\\n return (\\\"1\\\" + zeros.substring(0, decimals));\\n }\\n return logger.throwArgumentError(\\\"invalid decimal size\\\", \\\"decimals\\\", decimals);\\n}\\nfunction formatFixed(value, decimals) {\\n if (decimals == null) {\\n decimals = 0;\\n }\\n const multiplier = getMultiplier(decimals);\\n // Make sure wei is a big number (convert as necessary)\\n value = _bignumber__WEBPACK_IMPORTED_MODULE_3__[\\\"BigNumber\\\"].from(value);\\n const negative = value.lt(Zero);\\n if (negative) {\\n value = value.mul(NegativeOne);\\n }\\n let fraction = value.mod(multiplier).toString();\\n while (fraction.length < multiplier.length - 1) {\\n fraction = \\\"0\\\" + fraction;\\n }\\n // Strip training 0\\n fraction = fraction.match(/^([0-9]*[1-9]|0)(0*)/)[1];\\n const whole = value.div(multiplier).toString();\\n value = whole + \\\".\\\" + fraction;\\n if (negative) {\\n value = \\\"-\\\" + value;\\n }\\n return value;\\n}\\nfunction parseFixed(value, decimals) {\\n if (decimals == null) {\\n decimals = 0;\\n }\\n const multiplier = getMultiplier(decimals);\\n if (typeof (value) !== \\\"string\\\" || !value.match(/^-?[0-9.,]+$/)) {\\n logger.throwArgumentError(\\\"invalid decimal value\\\", \\\"value\\\", value);\\n }\\n if (multiplier.length - 1 === 0) {\\n return _bignumber__WEBPACK_IMPORTED_MODULE_3__[\\\"BigNumber\\\"].from(value);\\n }\\n // Is it negative?\\n const negative = (value.substring(0, 1) === \\\"-\\\");\\n if (negative) {\\n value = value.substring(1);\\n }\\n if (value === \\\".\\\") {\\n logger.throwArgumentError(\\\"missing value\\\", \\\"value\\\", value);\\n }\\n // Split it into a whole and fractional part\\n const comps = value.split(\\\".\\\");\\n if (comps.length > 2) {\\n logger.throwArgumentError(\\\"too many decimal points\\\", \\\"value\\\", value);\\n }\\n let whole = comps[0], fraction = comps[1];\\n if (!whole) {\\n whole = \\\"0\\\";\\n }\\n if (!fraction) {\\n fraction = \\\"0\\\";\\n }\\n // Prevent underflow\\n if (fraction.length > multiplier.length - 1) {\\n throwFault(\\\"fractional component exceeds decimals\\\", \\\"underflow\\\", \\\"parseFixed\\\");\\n }\\n // Fully pad the string with zeros to get to wei\\n while (fraction.length < multiplier.length - 1) {\\n fraction += \\\"0\\\";\\n }\\n const wholeValue = _bignumber__WEBPACK_IMPORTED_MODULE_3__[\\\"BigNumber\\\"].from(whole);\\n const fractionValue = _bignumber__WEBPACK_IMPORTED_MODULE_3__[\\\"BigNumber\\\"].from(fraction);\\n let wei = (wholeValue.mul(multiplier)).add(fractionValue);\\n if (negative) {\\n wei = wei.mul(NegativeOne);\\n }\\n return wei;\\n}\\nclass FixedFormat {\\n constructor(constructorGuard, signed, width, decimals) {\\n this.signed = signed;\\n this.width = width;\\n this.decimals = decimals;\\n this.name = (signed ? \\\"\\\" : \\\"u\\\") + \\\"fixed\\\" + String(width) + \\\"x\\\" + String(decimals);\\n this._multiplier = getMultiplier(decimals);\\n Object.freeze(this);\\n }\\n static from(value) {\\n if (value instanceof FixedFormat) {\\n return value;\\n }\\n let signed = true;\\n let width = 128;\\n let decimals = 18;\\n if (typeof (value) === \\\"string\\\") {\\n if (value === \\\"fixed\\\") {\\n // defaults...\\n }\\n else if (value === \\\"ufixed\\\") {\\n signed = false;\\n }\\n else if (value != null) {\\n const match = value.match(/^(u?)fixed([0-9]+)x([0-9]+)$/);\\n if (!match) {\\n logger.throwArgumentError(\\\"invalid fixed format\\\", \\\"format\\\", value);\\n }\\n signed = (match[1] !== \\\"u\\\");\\n width = parseInt(match[2]);\\n decimals = parseInt(match[3]);\\n }\\n }\\n else if (value) {\\n const check = (key, type, defaultValue) => {\\n if (value[key] == null) {\\n return defaultValue;\\n }\\n if (typeof (value[key]) !== type) {\\n logger.throwArgumentError(\\\"invalid fixed format (\\\" + key + \\\" not \\\" + type + \\\")\\\", \\\"format.\\\" + key, value[key]);\\n }\\n return value[key];\\n };\\n signed = check(\\\"signed\\\", \\\"boolean\\\", signed);\\n width = check(\\\"width\\\", \\\"number\\\", width);\\n decimals = check(\\\"decimals\\\", \\\"number\\\", decimals);\\n }\\n if (width % 8) {\\n logger.throwArgumentError(\\\"invalid fixed format width (not byte aligned)\\\", \\\"format.width\\\", width);\\n }\\n if (decimals > 80) {\\n logger.throwArgumentError(\\\"invalid fixed format (decimals too large)\\\", \\\"format.decimals\\\", decimals);\\n }\\n return new FixedFormat(_constructorGuard, signed, width, decimals);\\n }\\n}\\nclass FixedNumber {\\n constructor(constructorGuard, hex, value, format) {\\n logger.checkNew(new.target, FixedNumber);\\n this.format = format;\\n this._hex = hex;\\n this._value = value;\\n this._isFixedNumber = true;\\n Object.freeze(this);\\n }\\n _checkFormat(other) {\\n if (this.format.name !== other.format.name) {\\n logger.throwArgumentError(\\\"incompatible format; use fixedNumber.toFormat\\\", \\\"other\\\", other);\\n }\\n }\\n addUnsafe(other) {\\n this._checkFormat(other);\\n const a = parseFixed(this._value, this.format.decimals);\\n const b = parseFixed(other._value, other.format.decimals);\\n return FixedNumber.fromValue(a.add(b), this.format.decimals, this.format);\\n }\\n subUnsafe(other) {\\n this._checkFormat(other);\\n const a = parseFixed(this._value, this.format.decimals);\\n const b = parseFixed(other._value, other.format.decimals);\\n return FixedNumber.fromValue(a.sub(b), this.format.decimals, this.format);\\n }\\n mulUnsafe(other) {\\n this._checkFormat(other);\\n const a = parseFixed(this._value, this.format.decimals);\\n const b = parseFixed(other._value, other.format.decimals);\\n return FixedNumber.fromValue(a.mul(b).div(this.format._multiplier), this.format.decimals, this.format);\\n }\\n divUnsafe(other) {\\n this._checkFormat(other);\\n const a = parseFixed(this._value, this.format.decimals);\\n const b = parseFixed(other._value, other.format.decimals);\\n return FixedNumber.fromValue(a.mul(this.format._multiplier).div(b), this.format.decimals, this.format);\\n }\\n // @TODO: Support other rounding algorithms\\n round(decimals) {\\n if (decimals == null) {\\n decimals = 0;\\n }\\n if (decimals < 0 || decimals > 80 || (decimals % 1)) {\\n logger.throwArgumentError(\\\"invalid decimal cound\\\", \\\"decimals\\\", decimals);\\n }\\n // If we are already in range, we're done\\n let comps = this.toString().split(\\\".\\\");\\n if (comps[1].length <= decimals) {\\n return this;\\n }\\n // Bump the value up by the 0.00...0005\\n const bump = \\\"0.\\\" + zeros.substring(0, decimals) + \\\"5\\\";\\n comps = this.addUnsafe(FixedNumber.fromString(bump, this.format))._value.split(\\\".\\\");\\n // Now it is safe to truncate\\n return FixedNumber.fromString(comps[0] + \\\".\\\" + comps[1].substring(0, decimals));\\n }\\n toString() { return this._value; }\\n toHexString(width) {\\n if (width == null) {\\n return this._hex;\\n }\\n if (width % 8) {\\n logger.throwArgumentError(\\\"invalid byte width\\\", \\\"width\\\", width);\\n }\\n const hex = _bignumber__WEBPACK_IMPORTED_MODULE_3__[\\\"BigNumber\\\"].from(this._hex).fromTwos(this.format.width).toTwos(width).toHexString();\\n return Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__[\\\"hexZeroPad\\\"])(hex, width / 8);\\n }\\n toUnsafeFloat() { return parseFloat(this.toString()); }\\n toFormat(format) {\\n return FixedNumber.fromString(this._value, format);\\n }\\n static fromValue(value, decimals, format) {\\n // If decimals looks more like a format, and there is no format, shift the parameters\\n if (format == null && decimals != null && !Object(_bignumber__WEBPACK_IMPORTED_MODULE_3__[\\\"isBigNumberish\\\"])(decimals)) {\\n format = decimals;\\n decimals = null;\\n }\\n if (decimals == null) {\\n decimals = 0;\\n }\\n if (format == null) {\\n format = \\\"fixed\\\";\\n }\\n return FixedNumber.fromString(formatFixed(value, decimals), FixedFormat.from(format));\\n }\\n static fromString(value, format) {\\n if (format == null) {\\n format = \\\"fixed\\\";\\n }\\n const fixedFormat = FixedFormat.from(format);\\n const numeric = parseFixed(value, fixedFormat.decimals);\\n if (!fixedFormat.signed && numeric.lt(Zero)) {\\n throwFault(\\\"unsigned value cannot be negative\\\", \\\"overflow\\\", \\\"value\\\", value);\\n }\\n let hex = null;\\n if (fixedFormat.signed) {\\n hex = numeric.toTwos(fixedFormat.width).toHexString();\\n }\\n else {\\n hex = numeric.toHexString();\\n hex = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__[\\\"hexZeroPad\\\"])(hex, fixedFormat.width / 8);\\n }\\n const decimal = formatFixed(numeric, fixedFormat.decimals);\\n return new FixedNumber(_constructorGuard, hex, decimal, fixedFormat);\\n }\\n static fromBytes(value, format) {\\n if (format == null) {\\n format = \\\"fixed\\\";\\n }\\n const fixedFormat = FixedFormat.from(format);\\n if (Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__[\\\"arrayify\\\"])(value).length > fixedFormat.width / 8) {\\n throw new Error(\\\"overflow\\\");\\n }\\n let numeric = _bignumber__WEBPACK_IMPORTED_MODULE_3__[\\\"BigNumber\\\"].from(value);\\n if (fixedFormat.signed) {\\n numeric = numeric.fromTwos(fixedFormat.width);\\n }\\n const hex = numeric.toTwos((fixedFormat.signed ? 0 : 1) + fixedFormat.width).toHexString();\\n const decimal = formatFixed(numeric, fixedFormat.decimals);\\n return new FixedNumber(_constructorGuard, hex, decimal, fixedFormat);\\n }\\n static from(value, format) {\\n if (typeof (value) === \\\"string\\\") {\\n return FixedNumber.fromString(value, format);\\n }\\n if (Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__[\\\"isBytes\\\"])(value)) {\\n return FixedNumber.fromBytes(value, format);\\n }\\n try {\\n return FixedNumber.fromValue(value, 0, format);\\n }\\n catch (error) {\\n // Allow NUMERIC_FAULT to bubble up\\n if (error.code !== _ethersproject_logger__WEBPACK_IMPORTED_MODULE_1__[\\\"Logger\\\"].errors.INVALID_ARGUMENT) {\\n throw error;\\n }\\n }\\n return logger.throwArgumentError(\\\"invalid FixedNumber value\\\", \\\"value\\\", value);\\n }\\n static isFixedNumber(value) {\\n return !!(value && value._isFixedNumber);\\n }\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/bignumber/lib.esm/fixednumber.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/bignumber/lib.esm/index.js\":\n/*!****************************************************************!*\\\n !*** ./node_modules/@ethersproject/bignumber/lib.esm/index.js ***!\n \\****************************************************************/\n/*! exports provided: BigNumber, formatFixed, FixedFormat, FixedNumber, parseFixed */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony import */ var _bignumber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./bignumber */ \\\"./node_modules/@ethersproject/bignumber/lib.esm/bignumber.js\\\");\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"BigNumber\\\", function() { return _bignumber__WEBPACK_IMPORTED_MODULE_0__[\\\"BigNumber\\\"]; });\\n\\n/* harmony import */ var _fixednumber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./fixednumber */ \\\"./node_modules/@ethersproject/bignumber/lib.esm/fixednumber.js\\\");\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"formatFixed\\\", function() { return _fixednumber__WEBPACK_IMPORTED_MODULE_1__[\\\"formatFixed\\\"]; });\\n\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"FixedFormat\\\", function() { return _fixednumber__WEBPACK_IMPORTED_MODULE_1__[\\\"FixedFormat\\\"]; });\\n\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"FixedNumber\\\", function() { return _fixednumber__WEBPACK_IMPORTED_MODULE_1__[\\\"FixedNumber\\\"]; });\\n\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"parseFixed\\\", function() { return _fixednumber__WEBPACK_IMPORTED_MODULE_1__[\\\"parseFixed\\\"]; });\\n\\n\\n\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/bignumber/lib.esm/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/bytes/lib.esm/_version.js\":\n/*!***************************************************************!*\\\n !*** ./node_modules/@ethersproject/bytes/lib.esm/_version.js ***!\n \\***************************************************************/\n/*! exports provided: version */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"version\\\", function() { return version; });\\nconst version = \\\"bytes/5.0.0-beta.136\\\";\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/bytes/lib.esm/_version.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/bytes/lib.esm/index.js\":\n/*!************************************************************!*\\\n !*** ./node_modules/@ethersproject/bytes/lib.esm/index.js ***!\n \\************************************************************/\n/*! exports provided: isBytesLike, isBytes, arrayify, concat, stripZeros, zeroPad, isHexString, hexlify, hexDataLength, hexDataSlice, hexConcat, hexValue, hexStripZeros, hexZeroPad, splitSignature, joinSignature */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"isBytesLike\\\", function() { return isBytesLike; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"isBytes\\\", function() { return isBytes; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"arrayify\\\", function() { return arrayify; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"concat\\\", function() { return concat; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"stripZeros\\\", function() { return stripZeros; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"zeroPad\\\", function() { return zeroPad; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"isHexString\\\", function() { return isHexString; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"hexlify\\\", function() { return hexlify; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"hexDataLength\\\", function() { return hexDataLength; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"hexDataSlice\\\", function() { return hexDataSlice; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"hexConcat\\\", function() { return hexConcat; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"hexValue\\\", function() { return hexValue; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"hexStripZeros\\\", function() { return hexStripZeros; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"hexZeroPad\\\", function() { return hexZeroPad; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"splitSignature\\\", function() { return splitSignature; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"joinSignature\\\", function() { return joinSignature; });\\n/* harmony import */ var _ethersproject_logger__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @ethersproject/logger */ \\\"./node_modules/@ethersproject/logger/lib.esm/index.js\\\");\\n/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_version */ \\\"./node_modules/@ethersproject/bytes/lib.esm/_version.js\\\");\\n\\n\\n\\nconst logger = new _ethersproject_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"Logger\\\"](_version__WEBPACK_IMPORTED_MODULE_1__[\\\"version\\\"]);\\n///////////////////////////////\\nfunction isHexable(value) {\\n return !!(value.toHexString);\\n}\\nfunction addSlice(array) {\\n if (array.slice) {\\n return array;\\n }\\n array.slice = function () {\\n const args = Array.prototype.slice.call(arguments);\\n return addSlice(new Uint8Array(Array.prototype.slice.apply(array, args)));\\n };\\n return array;\\n}\\nfunction isBytesLike(value) {\\n return ((isHexString(value) && !(value.length % 2)) || isBytes(value));\\n}\\nfunction isBytes(value) {\\n if (value == null) {\\n return false;\\n }\\n if (value.constructor === Uint8Array) {\\n return true;\\n }\\n if (typeof (value) === \\\"string\\\") {\\n return false;\\n }\\n if (value.length == null) {\\n return false;\\n }\\n for (let i = 0; i < value.length; i++) {\\n const v = value[i];\\n if (v < 0 || v >= 256 || (v % 1)) {\\n return false;\\n }\\n }\\n return true;\\n}\\nfunction arrayify(value, options) {\\n if (!options) {\\n options = {};\\n }\\n if (typeof (value) === \\\"number\\\") {\\n logger.checkSafeUint53(value, \\\"invalid arrayify value\\\");\\n const result = [];\\n while (value) {\\n result.unshift(value & 0xff);\\n value /= 256;\\n }\\n if (result.length === 0) {\\n result.push(0);\\n }\\n return addSlice(new Uint8Array(result));\\n }\\n if (options.allowMissingPrefix && typeof (value) === \\\"string\\\" && value.substring(0, 2) !== \\\"0x\\\") {\\n value = \\\"0x\\\" + value;\\n }\\n if (isHexable(value)) {\\n value = value.toHexString();\\n }\\n if (isHexString(value)) {\\n let hex = value.substring(2);\\n if (hex.length % 2) {\\n if (options.hexPad === \\\"left\\\") {\\n hex = \\\"0x0\\\" + hex.substring(2);\\n }\\n else if (options.hexPad === \\\"right\\\") {\\n hex += \\\"0\\\";\\n }\\n else {\\n logger.throwArgumentError(\\\"hex data is odd-length\\\", \\\"value\\\", value);\\n }\\n }\\n const result = [];\\n for (let i = 0; i < hex.length; i += 2) {\\n result.push(parseInt(hex.substring(i, i + 2), 16));\\n }\\n return addSlice(new Uint8Array(result));\\n }\\n if (isBytes(value)) {\\n return addSlice(new Uint8Array(value));\\n }\\n return logger.throwArgumentError(\\\"invalid arrayify value\\\", \\\"value\\\", value);\\n}\\nfunction concat(items) {\\n const objects = items.map(item => arrayify(item));\\n const length = objects.reduce((accum, item) => (accum + item.length), 0);\\n const result = new Uint8Array(length);\\n objects.reduce((offset, object) => {\\n result.set(object, offset);\\n return offset + object.length;\\n }, 0);\\n return addSlice(result);\\n}\\nfunction stripZeros(value) {\\n let result = arrayify(value);\\n if (result.length === 0) {\\n return result;\\n }\\n // Find the first non-zero entry\\n let start = 0;\\n while (start < result.length && result[start] === 0) {\\n start++;\\n }\\n // If we started with zeros, strip them\\n if (start) {\\n result = result.slice(start);\\n }\\n return result;\\n}\\nfunction zeroPad(value, length) {\\n value = arrayify(value);\\n if (value.length > length) {\\n logger.throwArgumentError(\\\"value out of range\\\", \\\"value\\\", arguments[0]);\\n }\\n const result = new Uint8Array(length);\\n result.set(value, length - value.length);\\n return addSlice(result);\\n}\\nfunction isHexString(value, length) {\\n if (typeof (value) !== \\\"string\\\" || !value.match(/^0x[0-9A-Fa-f]*$/)) {\\n return false;\\n }\\n if (length && value.length !== 2 + 2 * length) {\\n return false;\\n }\\n return true;\\n}\\nconst HexCharacters = \\\"0123456789abcdef\\\";\\nfunction hexlify(value, options) {\\n if (!options) {\\n options = {};\\n }\\n if (typeof (value) === \\\"number\\\") {\\n logger.checkSafeUint53(value, \\\"invalid hexlify value\\\");\\n let hex = \\\"\\\";\\n while (value) {\\n hex = HexCharacters[value & 0x0f] + hex;\\n value = Math.floor(value / 16);\\n }\\n if (hex.length) {\\n if (hex.length % 2) {\\n hex = \\\"0\\\" + hex;\\n }\\n return \\\"0x\\\" + hex;\\n }\\n return \\\"0x00\\\";\\n }\\n if (options.allowMissingPrefix && typeof (value) === \\\"string\\\" && value.substring(0, 2) !== \\\"0x\\\") {\\n value = \\\"0x\\\" + value;\\n }\\n if (isHexable(value)) {\\n return value.toHexString();\\n }\\n if (isHexString(value)) {\\n if (value.length % 2) {\\n if (options.hexPad === \\\"left\\\") {\\n value = \\\"0x0\\\" + value.substring(2);\\n }\\n else if (options.hexPad === \\\"right\\\") {\\n value += \\\"0\\\";\\n }\\n else {\\n logger.throwArgumentError(\\\"hex data is odd-length\\\", \\\"value\\\", value);\\n }\\n }\\n return value.toLowerCase();\\n }\\n if (isBytes(value)) {\\n let result = \\\"0x\\\";\\n for (let i = 0; i < value.length; i++) {\\n let v = value[i];\\n result += HexCharacters[(v & 0xf0) >> 4] + HexCharacters[v & 0x0f];\\n }\\n return result;\\n }\\n return logger.throwArgumentError(\\\"invalid hexlify value\\\", \\\"value\\\", value);\\n}\\n/*\\nfunction unoddify(value: BytesLike | Hexable | number): BytesLike | Hexable | number {\\n if (typeof(value) === \\\"string\\\" && value.length % 2 && value.substring(0, 2) === \\\"0x\\\") {\\n return \\\"0x0\\\" + value.substring(2);\\n }\\n return value;\\n}\\n*/\\nfunction hexDataLength(data) {\\n if (typeof (data) !== \\\"string\\\") {\\n data = hexlify(data);\\n }\\n else if (!isHexString(data) || (data.length % 2)) {\\n return null;\\n }\\n return (data.length - 2) / 2;\\n}\\nfunction hexDataSlice(data, offset, endOffset) {\\n if (typeof (data) !== \\\"string\\\") {\\n data = hexlify(data);\\n }\\n else if (!isHexString(data) || (data.length % 2)) {\\n logger.throwArgumentError(\\\"invalid hexData\\\", \\\"value\\\", data);\\n }\\n offset = 2 + 2 * offset;\\n if (endOffset != null) {\\n return \\\"0x\\\" + data.substring(offset, 2 + 2 * endOffset);\\n }\\n return \\\"0x\\\" + data.substring(offset);\\n}\\nfunction hexConcat(items) {\\n let result = \\\"0x\\\";\\n items.forEach((item) => {\\n result += hexlify(item).substring(2);\\n });\\n return result;\\n}\\nfunction hexValue(value) {\\n const trimmed = hexStripZeros(hexlify(value, { hexPad: \\\"left\\\" }));\\n if (trimmed === \\\"0x\\\") {\\n return \\\"0x0\\\";\\n }\\n return trimmed;\\n}\\nfunction hexStripZeros(value) {\\n if (typeof (value) !== \\\"string\\\") {\\n value = hexlify(value);\\n }\\n if (!isHexString(value)) {\\n logger.throwArgumentError(\\\"invalid hex string\\\", \\\"value\\\", value);\\n }\\n value = value.substring(2);\\n let offset = 0;\\n while (offset < value.length && value[offset] === \\\"0\\\") {\\n offset++;\\n }\\n return \\\"0x\\\" + value.substring(offset);\\n}\\nfunction hexZeroPad(value, length) {\\n if (typeof (value) !== \\\"string\\\") {\\n value = hexlify(value);\\n }\\n else if (!isHexString(value)) {\\n logger.throwArgumentError(\\\"invalid hex string\\\", \\\"value\\\", value);\\n }\\n if (value.length > 2 * length + 2) {\\n logger.throwArgumentError(\\\"value out of range\\\", \\\"value\\\", arguments[1]);\\n }\\n while (value.length < 2 * length + 2) {\\n value = \\\"0x0\\\" + value.substring(2);\\n }\\n return value;\\n}\\nfunction splitSignature(signature) {\\n const result = {\\n r: \\\"0x\\\",\\n s: \\\"0x\\\",\\n _vs: \\\"0x\\\",\\n recoveryParam: 0,\\n v: 0\\n };\\n if (isBytesLike(signature)) {\\n const bytes = arrayify(signature);\\n if (bytes.length !== 65) {\\n logger.throwArgumentError(\\\"invalid signature string; must be 65 bytes\\\", \\\"signature\\\", signature);\\n }\\n // Get the r, s and v\\n result.r = hexlify(bytes.slice(0, 32));\\n result.s = hexlify(bytes.slice(32, 64));\\n result.v = bytes[64];\\n // Compute recoveryParam from v\\n result.recoveryParam = 1 - (result.v % 2);\\n // Allow a recid to be used as the v\\n if (result.v < 27) {\\n if (result.v === 0 || result.v === 1) {\\n result.v += 27;\\n }\\n else {\\n logger.throwArgumentError(\\\"signature invalid v byte\\\", \\\"signature\\\", signature);\\n }\\n }\\n // Compute _vs from recoveryParam and s\\n if (result.recoveryParam) {\\n bytes[32] |= 0x80;\\n }\\n result._vs = hexlify(bytes.slice(32, 64));\\n }\\n else {\\n result.r = signature.r;\\n result.s = signature.s;\\n result.v = signature.v;\\n result.recoveryParam = signature.recoveryParam;\\n result._vs = signature._vs;\\n // If the _vs is available, use it to populate missing s, v and recoveryParam\\n // and verify non-missing s, v and recoveryParam\\n if (result._vs != null) {\\n const vs = zeroPad(arrayify(result._vs), 32);\\n result._vs = hexlify(vs);\\n // Set or check the recid\\n const recoveryParam = ((vs[0] >= 128) ? 1 : 0);\\n if (result.recoveryParam == null) {\\n result.recoveryParam = recoveryParam;\\n }\\n else if (result.recoveryParam !== recoveryParam) {\\n logger.throwArgumentError(\\\"signature recoveryParam mismatch _vs\\\", \\\"signature\\\", signature);\\n }\\n // Set or check the s\\n vs[0] &= 0x7f;\\n const s = hexlify(vs);\\n if (result.s == null) {\\n result.s = s;\\n }\\n else if (result.s !== s) {\\n logger.throwArgumentError(\\\"signature v mismatch _vs\\\", \\\"signature\\\", signature);\\n }\\n }\\n // Use recid and v to populate each other\\n if (result.recoveryParam == null) {\\n if (result.v == null) {\\n logger.throwArgumentError(\\\"signature missing v and recoveryParam\\\", \\\"signature\\\", signature);\\n }\\n else {\\n result.recoveryParam = 1 - (result.v % 2);\\n }\\n }\\n else {\\n if (result.v == null) {\\n result.v = 27 + result.recoveryParam;\\n }\\n else if (result.recoveryParam !== (1 - (result.v % 2))) {\\n logger.throwArgumentError(\\\"signature recoveryParam mismatch v\\\", \\\"signature\\\", signature);\\n }\\n }\\n if (result.r == null || !isHexString(result.r)) {\\n logger.throwArgumentError(\\\"signature missing or invalid r\\\", \\\"signature\\\", signature);\\n }\\n else {\\n result.r = hexZeroPad(result.r, 32);\\n }\\n if (result.s == null || !isHexString(result.s)) {\\n logger.throwArgumentError(\\\"signature missing or invalid s\\\", \\\"signature\\\", signature);\\n }\\n else {\\n result.s = hexZeroPad(result.s, 32);\\n }\\n const vs = arrayify(result.s);\\n if (vs[0] >= 128) {\\n logger.throwArgumentError(\\\"signature s out of range\\\", \\\"signature\\\", signature);\\n }\\n if (result.recoveryParam) {\\n vs[0] |= 0x80;\\n }\\n const _vs = hexlify(vs);\\n if (result._vs) {\\n if (!isHexString(result._vs)) {\\n logger.throwArgumentError(\\\"signature invalid _vs\\\", \\\"signature\\\", signature);\\n }\\n result._vs = hexZeroPad(result._vs, 32);\\n }\\n // Set or check the _vs\\n if (result._vs == null) {\\n result._vs = _vs;\\n }\\n else if (result._vs !== _vs) {\\n logger.throwArgumentError(\\\"signature _vs mismatch v and s\\\", \\\"signature\\\", signature);\\n }\\n }\\n return result;\\n}\\nfunction joinSignature(signature) {\\n signature = splitSignature(signature);\\n return hexlify(concat([\\n signature.r,\\n signature.s,\\n (signature.recoveryParam ? \\\"0x1c\\\" : \\\"0x1b\\\")\\n ]));\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/bytes/lib.esm/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/constants/lib.esm/index.js\":\n/*!****************************************************************!*\\\n !*** ./node_modules/@ethersproject/constants/lib.esm/index.js ***!\n \\****************************************************************/\n/*! exports provided: AddressZero, HashZero, EtherSymbol, NegativeOne, Zero, One, Two, WeiPerEther, MaxUint256 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"AddressZero\\\", function() { return AddressZero; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"HashZero\\\", function() { return HashZero; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"EtherSymbol\\\", function() { return EtherSymbol; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"NegativeOne\\\", function() { return NegativeOne; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"Zero\\\", function() { return Zero; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"One\\\", function() { return One; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"Two\\\", function() { return Two; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"WeiPerEther\\\", function() { return WeiPerEther; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"MaxUint256\\\", function() { return MaxUint256; });\\n/* harmony import */ var _ethersproject_bignumber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @ethersproject/bignumber */ \\\"./node_modules/@ethersproject/bignumber/lib.esm/index.js\\\");\\n\\n\\nconst AddressZero = \\\"0x0000000000000000000000000000000000000000\\\";\\nconst HashZero = \\\"0x0000000000000000000000000000000000000000000000000000000000000000\\\";\\n// NFKC (composed) // (decomposed)\\nconst EtherSymbol = \\\"\\\\u039e\\\"; // \\\"\\\\uD835\\\\uDF63\\\";\\nconst NegativeOne = _ethersproject_bignumber__WEBPACK_IMPORTED_MODULE_0__[\\\"BigNumber\\\"].from(-1);\\nconst Zero = _ethersproject_bignumber__WEBPACK_IMPORTED_MODULE_0__[\\\"BigNumber\\\"].from(0);\\nconst One = _ethersproject_bignumber__WEBPACK_IMPORTED_MODULE_0__[\\\"BigNumber\\\"].from(1);\\nconst Two = _ethersproject_bignumber__WEBPACK_IMPORTED_MODULE_0__[\\\"BigNumber\\\"].from(2);\\nconst WeiPerEther = _ethersproject_bignumber__WEBPACK_IMPORTED_MODULE_0__[\\\"BigNumber\\\"].from(\\\"1000000000000000000\\\");\\nconst MaxUint256 = _ethersproject_bignumber__WEBPACK_IMPORTED_MODULE_0__[\\\"BigNumber\\\"].from(\\\"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\\\");\\n\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/constants/lib.esm/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/hash/lib.esm/_version.js\":\n/*!**************************************************************!*\\\n !*** ./node_modules/@ethersproject/hash/lib.esm/_version.js ***!\n \\**************************************************************/\n/*! exports provided: version */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"version\\\", function() { return version; });\\nconst version = \\\"hash/5.0.0-beta.133\\\";\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/hash/lib.esm/_version.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/hash/lib.esm/index.js\":\n/*!***********************************************************!*\\\n !*** ./node_modules/@ethersproject/hash/lib.esm/index.js ***!\n \\***********************************************************/\n/*! exports provided: isValidName, namehash, id, messagePrefix, hashMessage */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"isValidName\\\", function() { return isValidName; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"namehash\\\", function() { return namehash; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"id\\\", function() { return id; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"messagePrefix\\\", function() { return messagePrefix; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"hashMessage\\\", function() { return hashMessage; });\\n/* harmony import */ var _ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @ethersproject/bytes */ \\\"./node_modules/@ethersproject/bytes/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_strings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @ethersproject/strings */ \\\"./node_modules/@ethersproject/strings/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_keccak256__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @ethersproject/keccak256 */ \\\"./node_modules/@ethersproject/keccak256/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_logger__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @ethersproject/logger */ \\\"./node_modules/@ethersproject/logger/lib.esm/index.js\\\");\\n/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./_version */ \\\"./node_modules/@ethersproject/hash/lib.esm/_version.js\\\");\\n\\n\\n\\n\\n\\n\\nconst logger = new _ethersproject_logger__WEBPACK_IMPORTED_MODULE_3__[\\\"Logger\\\"](_version__WEBPACK_IMPORTED_MODULE_4__[\\\"version\\\"]);\\n///////////////////////////////\\nconst Zeros = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);\\nconst Partition = new RegExp(\\\"^((.*)\\\\\\\\.)?([^.]+)$\\\");\\nfunction isValidName(name) {\\n try {\\n const comps = name.split(\\\".\\\");\\n for (let i = 0; i < comps.length; i++) {\\n if (Object(_ethersproject_strings__WEBPACK_IMPORTED_MODULE_1__[\\\"nameprep\\\"])(comps[i]).length === 0) {\\n throw new Error(\\\"empty\\\");\\n }\\n }\\n return true;\\n }\\n catch (error) { }\\n return false;\\n}\\nfunction namehash(name) {\\n if (typeof (name) !== \\\"string\\\") {\\n logger.throwArgumentError(\\\"invalid address - \\\" + String(name), \\\"name\\\", name);\\n }\\n let result = Zeros;\\n while (name.length) {\\n const partition = name.match(Partition);\\n const label = Object(_ethersproject_strings__WEBPACK_IMPORTED_MODULE_1__[\\\"toUtf8Bytes\\\"])(Object(_ethersproject_strings__WEBPACK_IMPORTED_MODULE_1__[\\\"nameprep\\\"])(partition[3]));\\n result = Object(_ethersproject_keccak256__WEBPACK_IMPORTED_MODULE_2__[\\\"keccak256\\\"])(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__[\\\"concat\\\"])([result, Object(_ethersproject_keccak256__WEBPACK_IMPORTED_MODULE_2__[\\\"keccak256\\\"])(label)]));\\n name = partition[2] || \\\"\\\";\\n }\\n return Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__[\\\"hexlify\\\"])(result);\\n}\\nfunction id(text) {\\n return Object(_ethersproject_keccak256__WEBPACK_IMPORTED_MODULE_2__[\\\"keccak256\\\"])(Object(_ethersproject_strings__WEBPACK_IMPORTED_MODULE_1__[\\\"toUtf8Bytes\\\"])(text));\\n}\\nconst messagePrefix = \\\"\\\\x19Ethereum Signed Message:\\\\n\\\";\\nfunction hashMessage(message) {\\n if (typeof (message) === \\\"string\\\") {\\n message = Object(_ethersproject_strings__WEBPACK_IMPORTED_MODULE_1__[\\\"toUtf8Bytes\\\"])(message);\\n }\\n return Object(_ethersproject_keccak256__WEBPACK_IMPORTED_MODULE_2__[\\\"keccak256\\\"])(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__[\\\"concat\\\"])([\\n Object(_ethersproject_strings__WEBPACK_IMPORTED_MODULE_1__[\\\"toUtf8Bytes\\\"])(messagePrefix),\\n Object(_ethersproject_strings__WEBPACK_IMPORTED_MODULE_1__[\\\"toUtf8Bytes\\\"])(String(message.length)),\\n message\\n ]));\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/hash/lib.esm/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/hdnode/lib.esm/_version.js\":\n/*!****************************************************************!*\\\n !*** ./node_modules/@ethersproject/hdnode/lib.esm/_version.js ***!\n \\****************************************************************/\n/*! exports provided: version */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"version\\\", function() { return version; });\\nconst version = \\\"hdnode/5.0.0-beta.137\\\";\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/hdnode/lib.esm/_version.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/hdnode/lib.esm/index.js\":\n/*!*************************************************************!*\\\n !*** ./node_modules/@ethersproject/hdnode/lib.esm/index.js ***!\n \\*************************************************************/\n/*! exports provided: defaultPath, HDNode, mnemonicToSeed, mnemonicToEntropy, entropyToMnemonic, isValidMnemonic */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"defaultPath\\\", function() { return defaultPath; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"HDNode\\\", function() { return HDNode; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"mnemonicToSeed\\\", function() { return mnemonicToSeed; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"mnemonicToEntropy\\\", function() { return mnemonicToEntropy; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"entropyToMnemonic\\\", function() { return entropyToMnemonic; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"isValidMnemonic\\\", function() { return isValidMnemonic; });\\n/* harmony import */ var _ethersproject_basex__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @ethersproject/basex */ \\\"./node_modules/@ethersproject/basex/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @ethersproject/bytes */ \\\"./node_modules/@ethersproject/bytes/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_bignumber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @ethersproject/bignumber */ \\\"./node_modules/@ethersproject/bignumber/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_strings__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @ethersproject/strings */ \\\"./node_modules/@ethersproject/strings/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_pbkdf2__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @ethersproject/pbkdf2 */ \\\"./node_modules/@ethersproject/pbkdf2/lib/browser.js\\\");\\n/* harmony import */ var _ethersproject_pbkdf2__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_ethersproject_pbkdf2__WEBPACK_IMPORTED_MODULE_4__);\\n/* harmony import */ var _ethersproject_properties__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @ethersproject/properties */ \\\"./node_modules/@ethersproject/properties/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_signing_key__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @ethersproject/signing-key */ \\\"./node_modules/@ethersproject/signing-key/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_sha2__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @ethersproject/sha2 */ \\\"./node_modules/@ethersproject/sha2/lib/browser.js\\\");\\n/* harmony import */ var _ethersproject_sha2__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_ethersproject_sha2__WEBPACK_IMPORTED_MODULE_7__);\\n/* harmony import */ var _ethersproject_transactions__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @ethersproject/transactions */ \\\"./node_modules/@ethersproject/transactions/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_wordlists__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @ethersproject/wordlists */ \\\"./node_modules/@ethersproject/wordlists/lib/browser.js\\\");\\n/* harmony import */ var _ethersproject_wordlists__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_ethersproject_wordlists__WEBPACK_IMPORTED_MODULE_9__);\\n/* harmony import */ var _ethersproject_logger__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @ethersproject/logger */ \\\"./node_modules/@ethersproject/logger/lib.esm/index.js\\\");\\n/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./_version */ \\\"./node_modules/@ethersproject/hdnode/lib.esm/_version.js\\\");\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nconst logger = new _ethersproject_logger__WEBPACK_IMPORTED_MODULE_10__[\\\"Logger\\\"](_version__WEBPACK_IMPORTED_MODULE_11__[\\\"version\\\"]);\\nconst N = _ethersproject_bignumber__WEBPACK_IMPORTED_MODULE_2__[\\\"BigNumber\\\"].from(\\\"0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141\\\");\\n// \\\"Bitcoin seed\\\"\\nconst MasterSecret = Object(_ethersproject_strings__WEBPACK_IMPORTED_MODULE_3__[\\\"toUtf8Bytes\\\"])(\\\"Bitcoin seed\\\");\\nconst HardenedBit = 0x80000000;\\n// Returns a byte with the MSB bits set\\nfunction getUpperMask(bits) {\\n return ((1 << bits) - 1) << (8 - bits);\\n}\\n// Returns a byte with the LSB bits set\\nfunction getLowerMask(bits) {\\n return (1 << bits) - 1;\\n}\\nfunction bytes32(value) {\\n return Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexZeroPad\\\"])(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexlify\\\"])(value), 32);\\n}\\nfunction base58check(data) {\\n return _ethersproject_basex__WEBPACK_IMPORTED_MODULE_0__[\\\"Base58\\\"].encode(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"concat\\\"])([data, Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexDataSlice\\\"])(Object(_ethersproject_sha2__WEBPACK_IMPORTED_MODULE_7__[\\\"sha256\\\"])(Object(_ethersproject_sha2__WEBPACK_IMPORTED_MODULE_7__[\\\"sha256\\\"])(data)), 0, 4)]));\\n}\\nfunction getWordlist(wordlist) {\\n if (wordlist == null) {\\n return _ethersproject_wordlists__WEBPACK_IMPORTED_MODULE_9__[\\\"wordlists\\\"][\\\"en\\\"];\\n }\\n if (typeof (wordlist) === \\\"string\\\") {\\n const words = _ethersproject_wordlists__WEBPACK_IMPORTED_MODULE_9__[\\\"wordlists\\\"][wordlist];\\n if (words == null) {\\n logger.throwArgumentError(\\\"unknown locale\\\", \\\"wordlist\\\", wordlist);\\n }\\n return words;\\n }\\n return wordlist;\\n}\\nconst _constructorGuard = {};\\nconst defaultPath = \\\"m/44'/60'/0'/0/0\\\";\\n;\\nclass HDNode {\\n /**\\n * This constructor should not be called directly.\\n *\\n * Please use:\\n * - fromMnemonic\\n * - fromSeed\\n */\\n constructor(constructorGuard, privateKey, publicKey, parentFingerprint, chainCode, index, depth, mnemonicOrPath) {\\n logger.checkNew(new.target, HDNode);\\n if (constructorGuard !== _constructorGuard) {\\n throw new Error(\\\"HDNode constructor cannot be called directly\\\");\\n }\\n if (privateKey) {\\n const signingKey = new _ethersproject_signing_key__WEBPACK_IMPORTED_MODULE_6__[\\\"SigningKey\\\"](privateKey);\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_5__[\\\"defineReadOnly\\\"])(this, \\\"privateKey\\\", signingKey.privateKey);\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_5__[\\\"defineReadOnly\\\"])(this, \\\"publicKey\\\", signingKey.compressedPublicKey);\\n }\\n else {\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_5__[\\\"defineReadOnly\\\"])(this, \\\"privateKey\\\", null);\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_5__[\\\"defineReadOnly\\\"])(this, \\\"publicKey\\\", Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexlify\\\"])(publicKey));\\n }\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_5__[\\\"defineReadOnly\\\"])(this, \\\"parentFingerprint\\\", parentFingerprint);\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_5__[\\\"defineReadOnly\\\"])(this, \\\"fingerprint\\\", Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexDataSlice\\\"])(Object(_ethersproject_sha2__WEBPACK_IMPORTED_MODULE_7__[\\\"ripemd160\\\"])(Object(_ethersproject_sha2__WEBPACK_IMPORTED_MODULE_7__[\\\"sha256\\\"])(this.publicKey)), 0, 4));\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_5__[\\\"defineReadOnly\\\"])(this, \\\"address\\\", Object(_ethersproject_transactions__WEBPACK_IMPORTED_MODULE_8__[\\\"computeAddress\\\"])(this.publicKey));\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_5__[\\\"defineReadOnly\\\"])(this, \\\"chainCode\\\", chainCode);\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_5__[\\\"defineReadOnly\\\"])(this, \\\"index\\\", index);\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_5__[\\\"defineReadOnly\\\"])(this, \\\"depth\\\", depth);\\n if (mnemonicOrPath == null) {\\n // From a source that does not preserve the path (e.g. extended keys)\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_5__[\\\"defineReadOnly\\\"])(this, \\\"mnemonic\\\", null);\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_5__[\\\"defineReadOnly\\\"])(this, \\\"path\\\", null);\\n }\\n else if (typeof (mnemonicOrPath) === \\\"string\\\") {\\n // From a source that does not preserve the mnemonic (e.g. neutered)\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_5__[\\\"defineReadOnly\\\"])(this, \\\"mnemonic\\\", null);\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_5__[\\\"defineReadOnly\\\"])(this, \\\"path\\\", mnemonicOrPath);\\n }\\n else {\\n // From a fully qualified source\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_5__[\\\"defineReadOnly\\\"])(this, \\\"mnemonic\\\", mnemonicOrPath);\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_5__[\\\"defineReadOnly\\\"])(this, \\\"path\\\", mnemonicOrPath.path);\\n }\\n }\\n get extendedKey() {\\n // We only support the mainnet values for now, but if anyone needs\\n // testnet values, let me know. I believe current senitment is that\\n // we should always use mainnet, and use BIP-44 to derive the network\\n // - Mainnet: public=0x0488B21E, private=0x0488ADE4\\n // - Testnet: public=0x043587CF, private=0x04358394\\n if (this.depth >= 256) {\\n throw new Error(\\\"Depth too large!\\\");\\n }\\n return base58check(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"concat\\\"])([\\n ((this.privateKey != null) ? \\\"0x0488ADE4\\\" : \\\"0x0488B21E\\\"),\\n Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexlify\\\"])(this.depth),\\n this.parentFingerprint,\\n Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexZeroPad\\\"])(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexlify\\\"])(this.index), 4),\\n this.chainCode,\\n ((this.privateKey != null) ? Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"concat\\\"])([\\\"0x00\\\", this.privateKey]) : this.publicKey),\\n ]));\\n }\\n neuter() {\\n return new HDNode(_constructorGuard, null, this.publicKey, this.parentFingerprint, this.chainCode, this.index, this.depth, this.path);\\n }\\n _derive(index) {\\n if (index > 0xffffffff) {\\n throw new Error(\\\"invalid index - \\\" + String(index));\\n }\\n // Base path\\n let path = this.path;\\n if (path) {\\n path += \\\"/\\\" + (index & ~HardenedBit);\\n }\\n const data = new Uint8Array(37);\\n if (index & HardenedBit) {\\n if (!this.privateKey) {\\n throw new Error(\\\"cannot derive child of neutered node\\\");\\n }\\n // Data = 0x00 || ser_256(k_par)\\n data.set(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"arrayify\\\"])(this.privateKey), 1);\\n // Hardened path\\n if (path) {\\n path += \\\"'\\\";\\n }\\n }\\n else {\\n // Data = ser_p(point(k_par))\\n data.set(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"arrayify\\\"])(this.publicKey));\\n }\\n // Data += ser_32(i)\\n for (let i = 24; i >= 0; i -= 8) {\\n data[33 + (i >> 3)] = ((index >> (24 - i)) & 0xff);\\n }\\n const I = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"arrayify\\\"])(Object(_ethersproject_sha2__WEBPACK_IMPORTED_MODULE_7__[\\\"computeHmac\\\"])(_ethersproject_sha2__WEBPACK_IMPORTED_MODULE_7__[\\\"SupportedAlgorithm\\\"].sha512, this.chainCode, data));\\n const IL = I.slice(0, 32);\\n const IR = I.slice(32);\\n // The private key\\n let ki = null;\\n // The public key\\n let Ki = null;\\n if (this.privateKey) {\\n ki = bytes32(_ethersproject_bignumber__WEBPACK_IMPORTED_MODULE_2__[\\\"BigNumber\\\"].from(IL).add(this.privateKey).mod(N));\\n }\\n else {\\n const ek = new _ethersproject_signing_key__WEBPACK_IMPORTED_MODULE_6__[\\\"SigningKey\\\"](Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexlify\\\"])(IL));\\n Ki = ek._addPoint(this.publicKey);\\n }\\n let mnemonicOrPath = path;\\n const srcMnemonic = this.mnemonic;\\n if (srcMnemonic) {\\n mnemonicOrPath = Object.freeze({\\n phrase: srcMnemonic.phrase,\\n path: path,\\n locale: (srcMnemonic.locale || \\\"en\\\")\\n });\\n }\\n return new HDNode(_constructorGuard, ki, Ki, this.fingerprint, bytes32(IR), index, this.depth + 1, mnemonicOrPath);\\n }\\n derivePath(path) {\\n const components = path.split(\\\"/\\\");\\n if (components.length === 0 || (components[0] === \\\"m\\\" && this.depth !== 0)) {\\n throw new Error(\\\"invalid path - \\\" + path);\\n }\\n if (components[0] === \\\"m\\\") {\\n components.shift();\\n }\\n let result = this;\\n for (let i = 0; i < components.length; i++) {\\n const component = components[i];\\n if (component.match(/^[0-9]+'$/)) {\\n const index = parseInt(component.substring(0, component.length - 1));\\n if (index >= HardenedBit) {\\n throw new Error(\\\"invalid path index - \\\" + component);\\n }\\n result = result._derive(HardenedBit + index);\\n }\\n else if (component.match(/^[0-9]+$/)) {\\n const index = parseInt(component);\\n if (index >= HardenedBit) {\\n throw new Error(\\\"invalid path index - \\\" + component);\\n }\\n result = result._derive(index);\\n }\\n else {\\n throw new Error(\\\"invalid path component - \\\" + component);\\n }\\n }\\n return result;\\n }\\n static _fromSeed(seed, mnemonic) {\\n const seedArray = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"arrayify\\\"])(seed);\\n if (seedArray.length < 16 || seedArray.length > 64) {\\n throw new Error(\\\"invalid seed\\\");\\n }\\n const I = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"arrayify\\\"])(Object(_ethersproject_sha2__WEBPACK_IMPORTED_MODULE_7__[\\\"computeHmac\\\"])(_ethersproject_sha2__WEBPACK_IMPORTED_MODULE_7__[\\\"SupportedAlgorithm\\\"].sha512, MasterSecret, seedArray));\\n return new HDNode(_constructorGuard, bytes32(I.slice(0, 32)), null, \\\"0x00000000\\\", bytes32(I.slice(32)), 0, 0, mnemonic);\\n }\\n static fromMnemonic(mnemonic, password, wordlist) {\\n // If a locale name was passed in, find the associated wordlist\\n wordlist = getWordlist(wordlist);\\n // Normalize the case and spacing in the mnemonic (throws if the mnemonic is invalid)\\n mnemonic = entropyToMnemonic(mnemonicToEntropy(mnemonic, wordlist), wordlist);\\n return HDNode._fromSeed(mnemonicToSeed(mnemonic, password), {\\n phrase: mnemonic,\\n path: \\\"m\\\",\\n locale: wordlist.locale\\n });\\n }\\n static fromSeed(seed) {\\n return HDNode._fromSeed(seed, null);\\n }\\n static fromExtendedKey(extendedKey) {\\n const bytes = _ethersproject_basex__WEBPACK_IMPORTED_MODULE_0__[\\\"Base58\\\"].decode(extendedKey);\\n if (bytes.length !== 82 || base58check(bytes.slice(0, 78)) !== extendedKey) {\\n logger.throwArgumentError(\\\"invalid extended key\\\", \\\"extendedKey\\\", \\\"[REDACTED]\\\");\\n }\\n const depth = bytes[4];\\n const parentFingerprint = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexlify\\\"])(bytes.slice(5, 9));\\n const index = parseInt(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexlify\\\"])(bytes.slice(9, 13)).substring(2), 16);\\n const chainCode = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexlify\\\"])(bytes.slice(13, 45));\\n const key = bytes.slice(45, 78);\\n switch (Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexlify\\\"])(bytes.slice(0, 4))) {\\n // Public Key\\n case \\\"0x0488b21e\\\":\\n case \\\"0x043587cf\\\":\\n return new HDNode(_constructorGuard, null, Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexlify\\\"])(key), parentFingerprint, chainCode, index, depth, null);\\n // Private Key\\n case \\\"0x0488ade4\\\":\\n case \\\"0x04358394 \\\":\\n if (key[0] !== 0) {\\n break;\\n }\\n return new HDNode(_constructorGuard, Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexlify\\\"])(key.slice(1)), null, parentFingerprint, chainCode, index, depth, null);\\n }\\n return logger.throwError(\\\"invalid extended key\\\", \\\"extendedKey\\\", \\\"[REDACTED]\\\");\\n }\\n}\\nfunction mnemonicToSeed(mnemonic, password) {\\n if (!password) {\\n password = \\\"\\\";\\n }\\n const salt = Object(_ethersproject_strings__WEBPACK_IMPORTED_MODULE_3__[\\\"toUtf8Bytes\\\"])(\\\"mnemonic\\\" + password, _ethersproject_strings__WEBPACK_IMPORTED_MODULE_3__[\\\"UnicodeNormalizationForm\\\"].NFKD);\\n return Object(_ethersproject_pbkdf2__WEBPACK_IMPORTED_MODULE_4__[\\\"pbkdf2\\\"])(Object(_ethersproject_strings__WEBPACK_IMPORTED_MODULE_3__[\\\"toUtf8Bytes\\\"])(mnemonic, _ethersproject_strings__WEBPACK_IMPORTED_MODULE_3__[\\\"UnicodeNormalizationForm\\\"].NFKD), salt, 2048, 64, \\\"sha512\\\");\\n}\\nfunction mnemonicToEntropy(mnemonic, wordlist) {\\n wordlist = getWordlist(wordlist);\\n logger.checkNormalize();\\n const words = wordlist.split(mnemonic);\\n if ((words.length % 3) !== 0) {\\n throw new Error(\\\"invalid mnemonic\\\");\\n }\\n const entropy = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"arrayify\\\"])(new Uint8Array(Math.ceil(11 * words.length / 8)));\\n let offset = 0;\\n for (let i = 0; i < words.length; i++) {\\n let index = wordlist.getWordIndex(words[i].normalize(\\\"NFKD\\\"));\\n if (index === -1) {\\n throw new Error(\\\"invalid mnemonic\\\");\\n }\\n for (let bit = 0; bit < 11; bit++) {\\n if (index & (1 << (10 - bit))) {\\n entropy[offset >> 3] |= (1 << (7 - (offset % 8)));\\n }\\n offset++;\\n }\\n }\\n const entropyBits = 32 * words.length / 3;\\n const checksumBits = words.length / 3;\\n const checksumMask = getUpperMask(checksumBits);\\n const checksum = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"arrayify\\\"])(Object(_ethersproject_sha2__WEBPACK_IMPORTED_MODULE_7__[\\\"sha256\\\"])(entropy.slice(0, entropyBits / 8)))[0] & checksumMask;\\n if (checksum !== (entropy[entropy.length - 1] & checksumMask)) {\\n throw new Error(\\\"invalid checksum\\\");\\n }\\n return Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexlify\\\"])(entropy.slice(0, entropyBits / 8));\\n}\\nfunction entropyToMnemonic(entropy, wordlist) {\\n wordlist = getWordlist(wordlist);\\n entropy = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"arrayify\\\"])(entropy);\\n if ((entropy.length % 4) !== 0 || entropy.length < 16 || entropy.length > 32) {\\n throw new Error(\\\"invalid entropy\\\");\\n }\\n const indices = [0];\\n let remainingBits = 11;\\n for (let i = 0; i < entropy.length; i++) {\\n // Consume the whole byte (with still more to go)\\n if (remainingBits > 8) {\\n indices[indices.length - 1] <<= 8;\\n indices[indices.length - 1] |= entropy[i];\\n remainingBits -= 8;\\n // This byte will complete an 11-bit index\\n }\\n else {\\n indices[indices.length - 1] <<= remainingBits;\\n indices[indices.length - 1] |= entropy[i] >> (8 - remainingBits);\\n // Start the next word\\n indices.push(entropy[i] & getLowerMask(8 - remainingBits));\\n remainingBits += 3;\\n }\\n }\\n // Compute the checksum bits\\n const checksumBits = entropy.length / 4;\\n const checksum = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"arrayify\\\"])(Object(_ethersproject_sha2__WEBPACK_IMPORTED_MODULE_7__[\\\"sha256\\\"])(entropy))[0] & getUpperMask(checksumBits);\\n // Shift the checksum into the word indices\\n indices[indices.length - 1] <<= checksumBits;\\n indices[indices.length - 1] |= (checksum >> (8 - checksumBits));\\n return wordlist.join(indices.map((index) => wordlist.getWord(index)));\\n}\\nfunction isValidMnemonic(mnemonic, wordlist) {\\n try {\\n mnemonicToEntropy(mnemonic, wordlist);\\n return true;\\n }\\n catch (error) { }\\n return false;\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/hdnode/lib.esm/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/json-wallets/lib.esm/_version.js\":\n/*!**********************************************************************!*\\\n !*** ./node_modules/@ethersproject/json-wallets/lib.esm/_version.js ***!\n \\**********************************************************************/\n/*! exports provided: version */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"version\\\", function() { return version; });\\nconst version = \\\"json-wallets/5.0.0-beta.137\\\";\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/json-wallets/lib.esm/_version.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/json-wallets/lib.esm/crowdsale.js\":\n/*!***********************************************************************!*\\\n !*** ./node_modules/@ethersproject/json-wallets/lib.esm/crowdsale.js ***!\n \\***********************************************************************/\n/*! exports provided: CrowdsaleAccount, decrypt */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"CrowdsaleAccount\\\", function() { return CrowdsaleAccount; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"decrypt\\\", function() { return decrypt; });\\n/* harmony import */ var aes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! aes-js */ \\\"./node_modules/aes-js/index.js\\\");\\n/* harmony import */ var aes_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(aes_js__WEBPACK_IMPORTED_MODULE_0__);\\n/* harmony import */ var _ethersproject_address__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @ethersproject/address */ \\\"./node_modules/@ethersproject/address/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_bytes__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @ethersproject/bytes */ \\\"./node_modules/@ethersproject/bytes/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_keccak256__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @ethersproject/keccak256 */ \\\"./node_modules/@ethersproject/keccak256/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_pbkdf2__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @ethersproject/pbkdf2 */ \\\"./node_modules/@ethersproject/pbkdf2/lib/browser.js\\\");\\n/* harmony import */ var _ethersproject_pbkdf2__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_ethersproject_pbkdf2__WEBPACK_IMPORTED_MODULE_4__);\\n/* harmony import */ var _ethersproject_strings__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @ethersproject/strings */ \\\"./node_modules/@ethersproject/strings/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_properties__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @ethersproject/properties */ \\\"./node_modules/@ethersproject/properties/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_logger__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @ethersproject/logger */ \\\"./node_modules/@ethersproject/logger/lib.esm/index.js\\\");\\n/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./_version */ \\\"./node_modules/@ethersproject/json-wallets/lib.esm/_version.js\\\");\\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./utils */ \\\"./node_modules/@ethersproject/json-wallets/lib.esm/utils.js\\\");\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nconst logger = new _ethersproject_logger__WEBPACK_IMPORTED_MODULE_7__[\\\"Logger\\\"](_version__WEBPACK_IMPORTED_MODULE_8__[\\\"version\\\"]);\\n\\nclass CrowdsaleAccount extends _ethersproject_properties__WEBPACK_IMPORTED_MODULE_6__[\\\"Description\\\"] {\\n isCrowdsaleAccount(value) {\\n return !!(value && value._isCrowdsaleAccount);\\n }\\n}\\n// See: https://github.com/ethereum/pyethsaletool\\nfunction decrypt(json, password) {\\n const data = JSON.parse(json);\\n password = Object(_utils__WEBPACK_IMPORTED_MODULE_9__[\\\"getPassword\\\"])(password);\\n // Ethereum Address\\n const ethaddr = Object(_ethersproject_address__WEBPACK_IMPORTED_MODULE_1__[\\\"getAddress\\\"])(Object(_utils__WEBPACK_IMPORTED_MODULE_9__[\\\"searchPath\\\"])(data, \\\"ethaddr\\\"));\\n // Encrypted Seed\\n const encseed = Object(_utils__WEBPACK_IMPORTED_MODULE_9__[\\\"looseArrayify\\\"])(Object(_utils__WEBPACK_IMPORTED_MODULE_9__[\\\"searchPath\\\"])(data, \\\"encseed\\\"));\\n if (!encseed || (encseed.length % 16) !== 0) {\\n logger.throwArgumentError(\\\"invalid encseed\\\", \\\"json\\\", json);\\n }\\n const key = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_2__[\\\"arrayify\\\"])(Object(_ethersproject_pbkdf2__WEBPACK_IMPORTED_MODULE_4__[\\\"pbkdf2\\\"])(password, password, 2000, 32, \\\"sha256\\\")).slice(0, 16);\\n const iv = encseed.slice(0, 16);\\n const encryptedSeed = encseed.slice(16);\\n // Decrypt the seed\\n const aesCbc = new aes_js__WEBPACK_IMPORTED_MODULE_0___default.a.ModeOfOperation.cbc(key, iv);\\n const seed = aes_js__WEBPACK_IMPORTED_MODULE_0___default.a.padding.pkcs7.strip(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_2__[\\\"arrayify\\\"])(aesCbc.decrypt(encryptedSeed)));\\n // This wallet format is weird... Convert the binary encoded hex to a string.\\n let seedHex = \\\"\\\";\\n for (let i = 0; i < seed.length; i++) {\\n seedHex += String.fromCharCode(seed[i]);\\n }\\n const seedHexBytes = Object(_ethersproject_strings__WEBPACK_IMPORTED_MODULE_5__[\\\"toUtf8Bytes\\\"])(seedHex);\\n const privateKey = Object(_ethersproject_keccak256__WEBPACK_IMPORTED_MODULE_3__[\\\"keccak256\\\"])(seedHexBytes);\\n return new CrowdsaleAccount({\\n _isCrowdsaleAccount: true,\\n address: ethaddr,\\n privateKey: privateKey\\n });\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/json-wallets/lib.esm/crowdsale.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/json-wallets/lib.esm/index.js\":\n/*!*******************************************************************!*\\\n !*** ./node_modules/@ethersproject/json-wallets/lib.esm/index.js ***!\n \\*******************************************************************/\n/*! exports provided: decryptCrowdsale, decryptKeystore, decryptKeystoreSync, encryptKeystore, isCrowdsaleWallet, isKeystoreWallet, getJsonWalletAddress, decryptJsonWallet, decryptJsonWalletSync */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"decryptJsonWallet\\\", function() { return decryptJsonWallet; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"decryptJsonWalletSync\\\", function() { return decryptJsonWalletSync; });\\n/* harmony import */ var _crowdsale__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./crowdsale */ \\\"./node_modules/@ethersproject/json-wallets/lib.esm/crowdsale.js\\\");\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"decryptCrowdsale\\\", function() { return _crowdsale__WEBPACK_IMPORTED_MODULE_0__[\\\"decrypt\\\"]; });\\n\\n/* harmony import */ var _inspect__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./inspect */ \\\"./node_modules/@ethersproject/json-wallets/lib.esm/inspect.js\\\");\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"isCrowdsaleWallet\\\", function() { return _inspect__WEBPACK_IMPORTED_MODULE_1__[\\\"isCrowdsaleWallet\\\"]; });\\n\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"isKeystoreWallet\\\", function() { return _inspect__WEBPACK_IMPORTED_MODULE_1__[\\\"isKeystoreWallet\\\"]; });\\n\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"getJsonWalletAddress\\\", function() { return _inspect__WEBPACK_IMPORTED_MODULE_1__[\\\"getJsonWalletAddress\\\"]; });\\n\\n/* harmony import */ var _keystore__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./keystore */ \\\"./node_modules/@ethersproject/json-wallets/lib.esm/keystore.js\\\");\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"decryptKeystore\\\", function() { return _keystore__WEBPACK_IMPORTED_MODULE_2__[\\\"decrypt\\\"]; });\\n\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"decryptKeystoreSync\\\", function() { return _keystore__WEBPACK_IMPORTED_MODULE_2__[\\\"decryptSync\\\"]; });\\n\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"encryptKeystore\\\", function() { return _keystore__WEBPACK_IMPORTED_MODULE_2__[\\\"encrypt\\\"]; });\\n\\n\\n\\n\\n\\nfunction decryptJsonWallet(json, password, progressCallback) {\\n if (Object(_inspect__WEBPACK_IMPORTED_MODULE_1__[\\\"isCrowdsaleWallet\\\"])(json)) {\\n if (progressCallback) {\\n progressCallback(0);\\n }\\n const account = Object(_crowdsale__WEBPACK_IMPORTED_MODULE_0__[\\\"decrypt\\\"])(json, password);\\n if (progressCallback) {\\n progressCallback(1);\\n }\\n return Promise.resolve(account);\\n }\\n if (Object(_inspect__WEBPACK_IMPORTED_MODULE_1__[\\\"isKeystoreWallet\\\"])(json)) {\\n return Object(_keystore__WEBPACK_IMPORTED_MODULE_2__[\\\"decrypt\\\"])(json, password, progressCallback);\\n }\\n return Promise.reject(new Error(\\\"invalid JSON wallet\\\"));\\n}\\nfunction decryptJsonWalletSync(json, password) {\\n if (Object(_inspect__WEBPACK_IMPORTED_MODULE_1__[\\\"isCrowdsaleWallet\\\"])(json)) {\\n return Object(_crowdsale__WEBPACK_IMPORTED_MODULE_0__[\\\"decrypt\\\"])(json, password);\\n }\\n if (Object(_inspect__WEBPACK_IMPORTED_MODULE_1__[\\\"isKeystoreWallet\\\"])(json)) {\\n return Object(_keystore__WEBPACK_IMPORTED_MODULE_2__[\\\"decryptSync\\\"])(json, password);\\n }\\n throw new Error(\\\"invalid JSON wallet\\\");\\n}\\n\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/json-wallets/lib.esm/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/json-wallets/lib.esm/inspect.js\":\n/*!*********************************************************************!*\\\n !*** ./node_modules/@ethersproject/json-wallets/lib.esm/inspect.js ***!\n \\*********************************************************************/\n/*! exports provided: isCrowdsaleWallet, isKeystoreWallet, getJsonWalletAddress */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"isCrowdsaleWallet\\\", function() { return isCrowdsaleWallet; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"isKeystoreWallet\\\", function() { return isKeystoreWallet; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"getJsonWalletAddress\\\", function() { return getJsonWalletAddress; });\\n/* harmony import */ var _ethersproject_address__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @ethersproject/address */ \\\"./node_modules/@ethersproject/address/lib.esm/index.js\\\");\\n\\n\\nfunction isCrowdsaleWallet(json) {\\n let data = null;\\n try {\\n data = JSON.parse(json);\\n }\\n catch (error) {\\n return false;\\n }\\n return (data.encseed && data.ethaddr);\\n}\\nfunction isKeystoreWallet(json) {\\n let data = null;\\n try {\\n data = JSON.parse(json);\\n }\\n catch (error) {\\n return false;\\n }\\n if (!data.version || parseInt(data.version) !== data.version || parseInt(data.version) !== 3) {\\n return false;\\n }\\n // @TODO: Put more checks to make sure it has kdf, iv and all that good stuff\\n return true;\\n}\\n//export function isJsonWallet(json: string): boolean {\\n// return (isSecretStorageWallet(json) || isCrowdsaleWallet(json));\\n//}\\nfunction getJsonWalletAddress(json) {\\n if (isCrowdsaleWallet(json)) {\\n try {\\n return Object(_ethersproject_address__WEBPACK_IMPORTED_MODULE_0__[\\\"getAddress\\\"])(JSON.parse(json).ethaddr);\\n }\\n catch (error) {\\n return null;\\n }\\n }\\n if (isKeystoreWallet(json)) {\\n try {\\n return Object(_ethersproject_address__WEBPACK_IMPORTED_MODULE_0__[\\\"getAddress\\\"])(JSON.parse(json).address);\\n }\\n catch (error) {\\n return null;\\n }\\n }\\n return null;\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/json-wallets/lib.esm/inspect.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/json-wallets/lib.esm/keystore.js\":\n/*!**********************************************************************!*\\\n !*** ./node_modules/@ethersproject/json-wallets/lib.esm/keystore.js ***!\n \\**********************************************************************/\n/*! exports provided: KeystoreAccount, decryptSync, decrypt, encrypt */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"KeystoreAccount\\\", function() { return KeystoreAccount; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"decryptSync\\\", function() { return decryptSync; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"decrypt\\\", function() { return decrypt; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"encrypt\\\", function() { return encrypt; });\\n/* harmony import */ var aes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! aes-js */ \\\"./node_modules/aes-js/index.js\\\");\\n/* harmony import */ var aes_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(aes_js__WEBPACK_IMPORTED_MODULE_0__);\\n/* harmony import */ var scrypt_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! scrypt-js */ \\\"./node_modules/scrypt-js/scrypt.js\\\");\\n/* harmony import */ var scrypt_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(scrypt_js__WEBPACK_IMPORTED_MODULE_1__);\\n/* harmony import */ var uuid__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! uuid */ \\\"./node_modules/uuid/uuid.js\\\");\\n/* harmony import */ var uuid__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(uuid__WEBPACK_IMPORTED_MODULE_2__);\\n/* harmony import */ var _ethersproject_address__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @ethersproject/address */ \\\"./node_modules/@ethersproject/address/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_bytes__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @ethersproject/bytes */ \\\"./node_modules/@ethersproject/bytes/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_hdnode__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @ethersproject/hdnode */ \\\"./node_modules/@ethersproject/hdnode/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_keccak256__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @ethersproject/keccak256 */ \\\"./node_modules/@ethersproject/keccak256/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_pbkdf2__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @ethersproject/pbkdf2 */ \\\"./node_modules/@ethersproject/pbkdf2/lib/browser.js\\\");\\n/* harmony import */ var _ethersproject_pbkdf2__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_ethersproject_pbkdf2__WEBPACK_IMPORTED_MODULE_7__);\\n/* harmony import */ var _ethersproject_random__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @ethersproject/random */ \\\"./node_modules/@ethersproject/random/lib/browser.js\\\");\\n/* harmony import */ var _ethersproject_random__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_ethersproject_random__WEBPACK_IMPORTED_MODULE_8__);\\n/* harmony import */ var _ethersproject_properties__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @ethersproject/properties */ \\\"./node_modules/@ethersproject/properties/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_transactions__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @ethersproject/transactions */ \\\"./node_modules/@ethersproject/transactions/lib.esm/index.js\\\");\\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./utils */ \\\"./node_modules/@ethersproject/json-wallets/lib.esm/utils.js\\\");\\n/* harmony import */ var _ethersproject_logger__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @ethersproject/logger */ \\\"./node_modules/@ethersproject/logger/lib.esm/index.js\\\");\\n/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./_version */ \\\"./node_modules/@ethersproject/json-wallets/lib.esm/_version.js\\\");\\n\\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\\n return new (P || (P = Promise))(function (resolve, reject) {\\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\\n function rejected(value) { try { step(generator[\\\"throw\\\"](value)); } catch (e) { reject(e); } }\\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\\n step((generator = generator.apply(thisArg, _arguments || [])).next());\\n });\\n};\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nconst logger = new _ethersproject_logger__WEBPACK_IMPORTED_MODULE_12__[\\\"Logger\\\"](_version__WEBPACK_IMPORTED_MODULE_13__[\\\"version\\\"]);\\n// Exported Types\\nfunction hasMnemonic(value) {\\n return (value != null && value.mnemonic && value.mnemonic.phrase);\\n}\\nclass KeystoreAccount extends _ethersproject_properties__WEBPACK_IMPORTED_MODULE_9__[\\\"Description\\\"] {\\n isKeystoreAccount(value) {\\n return !!(value && value._isKeystoreAccount);\\n }\\n}\\nfunction _decrypt(data, key, ciphertext) {\\n const cipher = Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"searchPath\\\"])(data, \\\"crypto/cipher\\\");\\n if (cipher === \\\"aes-128-ctr\\\") {\\n const iv = Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"looseArrayify\\\"])(Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"searchPath\\\"])(data, \\\"crypto/cipherparams/iv\\\"));\\n const counter = new aes_js__WEBPACK_IMPORTED_MODULE_0___default.a.Counter(iv);\\n const aesCtr = new aes_js__WEBPACK_IMPORTED_MODULE_0___default.a.ModeOfOperation.ctr(key, counter);\\n return Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_4__[\\\"arrayify\\\"])(aesCtr.decrypt(ciphertext));\\n }\\n return null;\\n}\\nfunction _getAccount(data, key) {\\n const ciphertext = Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"looseArrayify\\\"])(Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"searchPath\\\"])(data, \\\"crypto/ciphertext\\\"));\\n const computedMAC = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_4__[\\\"hexlify\\\"])(Object(_ethersproject_keccak256__WEBPACK_IMPORTED_MODULE_6__[\\\"keccak256\\\"])(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_4__[\\\"concat\\\"])([key.slice(16, 32), ciphertext]))).substring(2);\\n if (computedMAC !== Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"searchPath\\\"])(data, \\\"crypto/mac\\\").toLowerCase()) {\\n throw new Error(\\\"invalid password\\\");\\n }\\n const privateKey = _decrypt(data, key.slice(0, 16), ciphertext);\\n if (!privateKey) {\\n logger.throwError(\\\"unsupported cipher\\\", _ethersproject_logger__WEBPACK_IMPORTED_MODULE_12__[\\\"Logger\\\"].errors.UNSUPPORTED_OPERATION, {\\n operation: \\\"decrypt\\\"\\n });\\n }\\n const mnemonicKey = key.slice(32, 64);\\n const address = Object(_ethersproject_transactions__WEBPACK_IMPORTED_MODULE_10__[\\\"computeAddress\\\"])(privateKey);\\n if (data.address) {\\n let check = data.address.toLowerCase();\\n if (check.substring(0, 2) !== \\\"0x\\\") {\\n check = \\\"0x\\\" + check;\\n }\\n if (Object(_ethersproject_address__WEBPACK_IMPORTED_MODULE_3__[\\\"getAddress\\\"])(check) !== address) {\\n throw new Error(\\\"address mismatch\\\");\\n }\\n }\\n const account = {\\n _isKeystoreAccount: true,\\n address: address,\\n privateKey: Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_4__[\\\"hexlify\\\"])(privateKey)\\n };\\n // Version 0.1 x-ethers metadata must contain an encrypted mnemonic phrase\\n if (Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"searchPath\\\"])(data, \\\"x-ethers/version\\\") === \\\"0.1\\\") {\\n const mnemonicCiphertext = Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"looseArrayify\\\"])(Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"searchPath\\\"])(data, \\\"x-ethers/mnemonicCiphertext\\\"));\\n const mnemonicIv = Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"looseArrayify\\\"])(Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"searchPath\\\"])(data, \\\"x-ethers/mnemonicCounter\\\"));\\n const mnemonicCounter = new aes_js__WEBPACK_IMPORTED_MODULE_0___default.a.Counter(mnemonicIv);\\n const mnemonicAesCtr = new aes_js__WEBPACK_IMPORTED_MODULE_0___default.a.ModeOfOperation.ctr(mnemonicKey, mnemonicCounter);\\n const path = Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"searchPath\\\"])(data, \\\"x-ethers/path\\\") || _ethersproject_hdnode__WEBPACK_IMPORTED_MODULE_5__[\\\"defaultPath\\\"];\\n const locale = Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"searchPath\\\"])(data, \\\"x-ethers/locale\\\") || \\\"en\\\";\\n const entropy = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_4__[\\\"arrayify\\\"])(mnemonicAesCtr.decrypt(mnemonicCiphertext));\\n try {\\n const mnemonic = Object(_ethersproject_hdnode__WEBPACK_IMPORTED_MODULE_5__[\\\"entropyToMnemonic\\\"])(entropy, locale);\\n const node = _ethersproject_hdnode__WEBPACK_IMPORTED_MODULE_5__[\\\"HDNode\\\"].fromMnemonic(mnemonic, null, locale).derivePath(path);\\n if (node.privateKey != account.privateKey) {\\n throw new Error(\\\"mnemonic mismatch\\\");\\n }\\n account.mnemonic = node.mnemonic;\\n }\\n catch (error) {\\n // If we don't have the locale wordlist installed to\\n // read this mnemonic, just bail and don't set the\\n // mnemonic\\n if (error.code !== _ethersproject_logger__WEBPACK_IMPORTED_MODULE_12__[\\\"Logger\\\"].errors.INVALID_ARGUMENT || error.argument !== \\\"wordlist\\\") {\\n throw error;\\n }\\n }\\n }\\n return new KeystoreAccount(account);\\n}\\nfunction pbkdf2Sync(passwordBytes, salt, count, dkLen, prfFunc) {\\n return Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_4__[\\\"arrayify\\\"])(Object(_ethersproject_pbkdf2__WEBPACK_IMPORTED_MODULE_7__[\\\"pbkdf2\\\"])(passwordBytes, salt, count, dkLen, prfFunc));\\n}\\nfunction pbkdf2(passwordBytes, salt, count, dkLen, prfFunc) {\\n return Promise.resolve(pbkdf2Sync(passwordBytes, salt, count, dkLen, prfFunc));\\n}\\nfunction _computeKdfKey(data, password, pbkdf2Func, scryptFunc, progressCallback) {\\n const passwordBytes = Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"getPassword\\\"])(password);\\n const kdf = Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"searchPath\\\"])(data, \\\"crypto/kdf\\\");\\n if (kdf && typeof (kdf) === \\\"string\\\") {\\n const throwError = function (name, value) {\\n return logger.throwArgumentError(\\\"invalid key-derivation function parameters\\\", name, value);\\n };\\n if (kdf.toLowerCase() === \\\"scrypt\\\") {\\n const salt = Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"looseArrayify\\\"])(Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"searchPath\\\"])(data, \\\"crypto/kdfparams/salt\\\"));\\n const N = parseInt(Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"searchPath\\\"])(data, \\\"crypto/kdfparams/n\\\"));\\n const r = parseInt(Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"searchPath\\\"])(data, \\\"crypto/kdfparams/r\\\"));\\n const p = parseInt(Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"searchPath\\\"])(data, \\\"crypto/kdfparams/p\\\"));\\n // Check for all required parameters\\n if (!N || !r || !p) {\\n throwError(\\\"kdf\\\", kdf);\\n }\\n // Make sure N is a power of 2\\n if ((N & (N - 1)) !== 0) {\\n throwError(\\\"N\\\", N);\\n }\\n const dkLen = parseInt(Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"searchPath\\\"])(data, \\\"crypto/kdfparams/dklen\\\"));\\n if (dkLen !== 32) {\\n throwError(\\\"dklen\\\", dkLen);\\n }\\n return scryptFunc(passwordBytes, salt, N, r, p, 64, progressCallback);\\n }\\n else if (kdf.toLowerCase() === \\\"pbkdf2\\\") {\\n const salt = Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"looseArrayify\\\"])(Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"searchPath\\\"])(data, \\\"crypto/kdfparams/salt\\\"));\\n let prfFunc = null;\\n const prf = Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"searchPath\\\"])(data, \\\"crypto/kdfparams/prf\\\");\\n if (prf === \\\"hmac-sha256\\\") {\\n prfFunc = \\\"sha256\\\";\\n }\\n else if (prf === \\\"hmac-sha512\\\") {\\n prfFunc = \\\"sha512\\\";\\n }\\n else {\\n throwError(\\\"prf\\\", prf);\\n }\\n const count = parseInt(Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"searchPath\\\"])(data, \\\"crypto/kdfparams/c\\\"));\\n const dkLen = parseInt(Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"searchPath\\\"])(data, \\\"crypto/kdfparams/dklen\\\"));\\n if (dkLen !== 32) {\\n throwError(\\\"dklen\\\", dkLen);\\n }\\n return pbkdf2Func(passwordBytes, salt, count, dkLen, prfFunc);\\n }\\n }\\n return logger.throwArgumentError(\\\"unsupported key-derivation function\\\", \\\"kdf\\\", kdf);\\n}\\nfunction decryptSync(json, password) {\\n const data = JSON.parse(json);\\n const key = _computeKdfKey(data, password, pbkdf2Sync, scrypt_js__WEBPACK_IMPORTED_MODULE_1__[\\\"syncScrypt\\\"]);\\n return _getAccount(data, key);\\n}\\nfunction decrypt(json, password, progressCallback) {\\n return __awaiter(this, void 0, void 0, function* () {\\n const data = JSON.parse(json);\\n const key = yield _computeKdfKey(data, password, pbkdf2, scrypt_js__WEBPACK_IMPORTED_MODULE_1__[\\\"scrypt\\\"], progressCallback);\\n return _getAccount(data, key);\\n });\\n}\\nfunction encrypt(account, password, options, progressCallback) {\\n try {\\n // Check the address matches the private key\\n if (Object(_ethersproject_address__WEBPACK_IMPORTED_MODULE_3__[\\\"getAddress\\\"])(account.address) !== Object(_ethersproject_transactions__WEBPACK_IMPORTED_MODULE_10__[\\\"computeAddress\\\"])(account.privateKey)) {\\n throw new Error(\\\"address/privateKey mismatch\\\");\\n }\\n // Check the mnemonic (if any) matches the private key\\n if (hasMnemonic(account)) {\\n const mnemonic = account.mnemonic;\\n const node = _ethersproject_hdnode__WEBPACK_IMPORTED_MODULE_5__[\\\"HDNode\\\"].fromMnemonic(mnemonic.phrase, null, mnemonic.locale).derivePath(mnemonic.path || _ethersproject_hdnode__WEBPACK_IMPORTED_MODULE_5__[\\\"defaultPath\\\"]);\\n if (node.privateKey != account.privateKey) {\\n throw new Error(\\\"mnemonic mismatch\\\");\\n }\\n }\\n }\\n catch (e) {\\n return Promise.reject(e);\\n }\\n // The options are optional, so adjust the call as needed\\n if (typeof (options) === \\\"function\\\" && !progressCallback) {\\n progressCallback = options;\\n options = {};\\n }\\n if (!options) {\\n options = {};\\n }\\n const privateKey = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_4__[\\\"arrayify\\\"])(account.privateKey);\\n const passwordBytes = Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"getPassword\\\"])(password);\\n let entropy = null;\\n let path = null;\\n let locale = null;\\n if (hasMnemonic(account)) {\\n const srcMnemonic = account.mnemonic;\\n entropy = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_4__[\\\"arrayify\\\"])(Object(_ethersproject_hdnode__WEBPACK_IMPORTED_MODULE_5__[\\\"mnemonicToEntropy\\\"])(srcMnemonic.phrase, srcMnemonic.locale || \\\"en\\\"));\\n path = srcMnemonic.path || _ethersproject_hdnode__WEBPACK_IMPORTED_MODULE_5__[\\\"defaultPath\\\"];\\n locale = srcMnemonic.locale || \\\"en\\\";\\n }\\n let client = options.client;\\n if (!client) {\\n client = \\\"ethers.js\\\";\\n }\\n // Check/generate the salt\\n let salt = null;\\n if (options.salt) {\\n salt = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_4__[\\\"arrayify\\\"])(options.salt);\\n }\\n else {\\n salt = Object(_ethersproject_random__WEBPACK_IMPORTED_MODULE_8__[\\\"randomBytes\\\"])(32);\\n ;\\n }\\n // Override initialization vector\\n let iv = null;\\n if (options.iv) {\\n iv = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_4__[\\\"arrayify\\\"])(options.iv);\\n if (iv.length !== 16) {\\n throw new Error(\\\"invalid iv\\\");\\n }\\n }\\n else {\\n iv = Object(_ethersproject_random__WEBPACK_IMPORTED_MODULE_8__[\\\"randomBytes\\\"])(16);\\n }\\n // Override the uuid\\n let uuidRandom = null;\\n if (options.uuid) {\\n uuidRandom = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_4__[\\\"arrayify\\\"])(options.uuid);\\n if (uuidRandom.length !== 16) {\\n throw new Error(\\\"invalid uuid\\\");\\n }\\n }\\n else {\\n uuidRandom = Object(_ethersproject_random__WEBPACK_IMPORTED_MODULE_8__[\\\"randomBytes\\\"])(16);\\n }\\n // Override the scrypt password-based key derivation function parameters\\n let N = (1 << 17), r = 8, p = 1;\\n if (options.scrypt) {\\n if (options.scrypt.N) {\\n N = options.scrypt.N;\\n }\\n if (options.scrypt.r) {\\n r = options.scrypt.r;\\n }\\n if (options.scrypt.p) {\\n p = options.scrypt.p;\\n }\\n }\\n // We take 64 bytes:\\n // - 32 bytes As normal for the Web3 secret storage (derivedKey, macPrefix)\\n // - 32 bytes AES key to encrypt mnemonic with (required here to be Ethers Wallet)\\n return scrypt_js__WEBPACK_IMPORTED_MODULE_1__[\\\"scrypt\\\"](passwordBytes, salt, N, r, p, 64, progressCallback).then((key) => {\\n key = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_4__[\\\"arrayify\\\"])(key);\\n // This will be used to encrypt the wallet (as per Web3 secret storage)\\n const derivedKey = key.slice(0, 16);\\n const macPrefix = key.slice(16, 32);\\n // This will be used to encrypt the mnemonic phrase (if any)\\n const mnemonicKey = key.slice(32, 64);\\n // Encrypt the private key\\n const counter = new aes_js__WEBPACK_IMPORTED_MODULE_0___default.a.Counter(iv);\\n const aesCtr = new aes_js__WEBPACK_IMPORTED_MODULE_0___default.a.ModeOfOperation.ctr(derivedKey, counter);\\n const ciphertext = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_4__[\\\"arrayify\\\"])(aesCtr.encrypt(privateKey));\\n // Compute the message authentication code, used to check the password\\n const mac = Object(_ethersproject_keccak256__WEBPACK_IMPORTED_MODULE_6__[\\\"keccak256\\\"])(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_4__[\\\"concat\\\"])([macPrefix, ciphertext]));\\n // See: https://github.com/ethereum/wiki/wiki/Web3-Secret-Storage-Definition\\n const data = {\\n address: account.address.substring(2).toLowerCase(),\\n id: uuid__WEBPACK_IMPORTED_MODULE_2___default.a.v4({ random: uuidRandom }),\\n version: 3,\\n Crypto: {\\n cipher: \\\"aes-128-ctr\\\",\\n cipherparams: {\\n iv: Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_4__[\\\"hexlify\\\"])(iv).substring(2),\\n },\\n ciphertext: Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_4__[\\\"hexlify\\\"])(ciphertext).substring(2),\\n kdf: \\\"scrypt\\\",\\n kdfparams: {\\n salt: Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_4__[\\\"hexlify\\\"])(salt).substring(2),\\n n: N,\\n dklen: 32,\\n p: p,\\n r: r\\n },\\n mac: mac.substring(2)\\n }\\n };\\n // If we have a mnemonic, encrypt it into the JSON wallet\\n if (entropy) {\\n const mnemonicIv = Object(_ethersproject_random__WEBPACK_IMPORTED_MODULE_8__[\\\"randomBytes\\\"])(16);\\n const mnemonicCounter = new aes_js__WEBPACK_IMPORTED_MODULE_0___default.a.Counter(mnemonicIv);\\n const mnemonicAesCtr = new aes_js__WEBPACK_IMPORTED_MODULE_0___default.a.ModeOfOperation.ctr(mnemonicKey, mnemonicCounter);\\n const mnemonicCiphertext = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_4__[\\\"arrayify\\\"])(mnemonicAesCtr.encrypt(entropy));\\n const now = new Date();\\n const timestamp = (now.getUTCFullYear() + \\\"-\\\" +\\n Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"zpad\\\"])(now.getUTCMonth() + 1, 2) + \\\"-\\\" +\\n Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"zpad\\\"])(now.getUTCDate(), 2) + \\\"T\\\" +\\n Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"zpad\\\"])(now.getUTCHours(), 2) + \\\"-\\\" +\\n Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"zpad\\\"])(now.getUTCMinutes(), 2) + \\\"-\\\" +\\n Object(_utils__WEBPACK_IMPORTED_MODULE_11__[\\\"zpad\\\"])(now.getUTCSeconds(), 2) + \\\".0Z\\\");\\n data[\\\"x-ethers\\\"] = {\\n client: client,\\n gethFilename: (\\\"UTC--\\\" + timestamp + \\\"--\\\" + data.address),\\n mnemonicCounter: Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_4__[\\\"hexlify\\\"])(mnemonicIv).substring(2),\\n mnemonicCiphertext: Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_4__[\\\"hexlify\\\"])(mnemonicCiphertext).substring(2),\\n path: path,\\n locale: locale,\\n version: \\\"0.1\\\"\\n };\\n }\\n return JSON.stringify(data);\\n });\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/json-wallets/lib.esm/keystore.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/json-wallets/lib.esm/utils.js\":\n/*!*******************************************************************!*\\\n !*** ./node_modules/@ethersproject/json-wallets/lib.esm/utils.js ***!\n \\*******************************************************************/\n/*! exports provided: looseArrayify, zpad, getPassword, searchPath */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"looseArrayify\\\", function() { return looseArrayify; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"zpad\\\", function() { return zpad; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"getPassword\\\", function() { return getPassword; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"searchPath\\\", function() { return searchPath; });\\n/* harmony import */ var _ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @ethersproject/bytes */ \\\"./node_modules/@ethersproject/bytes/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_strings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @ethersproject/strings */ \\\"./node_modules/@ethersproject/strings/lib.esm/index.js\\\");\\n\\n\\n\\nfunction looseArrayify(hexString) {\\n if (typeof (hexString) === 'string' && hexString.substring(0, 2) !== '0x') {\\n hexString = '0x' + hexString;\\n }\\n return Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__[\\\"arrayify\\\"])(hexString);\\n}\\nfunction zpad(value, length) {\\n value = String(value);\\n while (value.length < length) {\\n value = '0' + value;\\n }\\n return value;\\n}\\nfunction getPassword(password) {\\n if (typeof (password) === 'string') {\\n return Object(_ethersproject_strings__WEBPACK_IMPORTED_MODULE_1__[\\\"toUtf8Bytes\\\"])(password, _ethersproject_strings__WEBPACK_IMPORTED_MODULE_1__[\\\"UnicodeNormalizationForm\\\"].NFKC);\\n }\\n return Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__[\\\"arrayify\\\"])(password);\\n}\\nfunction searchPath(object, path) {\\n let currentChild = object;\\n const comps = path.toLowerCase().split('/');\\n for (let i = 0; i < comps.length; i++) {\\n // Search for a child object with a case-insensitive matching key\\n let matchingChild = null;\\n for (const key in currentChild) {\\n if (key.toLowerCase() === comps[i]) {\\n matchingChild = currentChild[key];\\n break;\\n }\\n }\\n // Didn't find one. :'(\\n if (matchingChild === null) {\\n return null;\\n }\\n // Now check this child...\\n currentChild = matchingChild;\\n }\\n return currentChild;\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/json-wallets/lib.esm/utils.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/keccak256/lib.esm/index.js\":\n/*!****************************************************************!*\\\n !*** ./node_modules/@ethersproject/keccak256/lib.esm/index.js ***!\n \\****************************************************************/\n/*! exports provided: keccak256 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"keccak256\\\", function() { return keccak256; });\\n/* harmony import */ var js_sha3__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! js-sha3 */ \\\"./node_modules/js-sha3/src/sha3.js\\\");\\n/* harmony import */ var js_sha3__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(js_sha3__WEBPACK_IMPORTED_MODULE_0__);\\n/* harmony import */ var _ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @ethersproject/bytes */ \\\"./node_modules/@ethersproject/bytes/lib.esm/index.js\\\");\\n\\n\\n\\nfunction keccak256(data) {\\n return '0x' + js_sha3__WEBPACK_IMPORTED_MODULE_0___default.a.keccak_256(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"arrayify\\\"])(data));\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/keccak256/lib.esm/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/logger/lib.esm/_version.js\":\n/*!****************************************************************!*\\\n !*** ./node_modules/@ethersproject/logger/lib.esm/_version.js ***!\n \\****************************************************************/\n/*! exports provided: version */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"version\\\", function() { return version; });\\nconst version = \\\"logger/5.0.0-beta.135\\\";\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/logger/lib.esm/_version.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/logger/lib.esm/index.js\":\n/*!*************************************************************!*\\\n !*** ./node_modules/@ethersproject/logger/lib.esm/index.js ***!\n \\*************************************************************/\n/*! exports provided: Logger */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"Logger\\\", function() { return Logger; });\\n/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./_version */ \\\"./node_modules/@ethersproject/logger/lib.esm/_version.js\\\");\\n\\nlet _permanentCensorErrors = false;\\nlet _censorErrors = false;\\nconst LogLevels = { debug: 1, \\\"default\\\": 2, info: 2, warn: 3, error: 4, off: 5 };\\nlet LogLevel = LogLevels[\\\"default\\\"];\\n\\nlet _globalLogger = null;\\nfunction _checkNormalize() {\\n try {\\n const missing = [];\\n // Make sure all forms of normalization are supported\\n [\\\"NFD\\\", \\\"NFC\\\", \\\"NFKD\\\", \\\"NFKC\\\"].forEach((form) => {\\n try {\\n if (\\\"test\\\".normalize(form) !== \\\"test\\\") {\\n throw new Error(\\\"bad normalize\\\");\\n }\\n ;\\n }\\n catch (error) {\\n missing.push(form);\\n }\\n });\\n if (missing.length) {\\n throw new Error(\\\"missing \\\" + missing.join(\\\", \\\"));\\n }\\n if (String.fromCharCode(0xe9).normalize(\\\"NFD\\\") !== String.fromCharCode(0x65, 0x0301)) {\\n throw new Error(\\\"broken implementation\\\");\\n }\\n }\\n catch (error) {\\n return error.message;\\n }\\n return null;\\n}\\nconst _normalizeError = _checkNormalize();\\nclass Logger {\\n constructor(version) {\\n Object.defineProperty(this, \\\"version\\\", {\\n enumerable: true,\\n value: version,\\n writable: false\\n });\\n }\\n _log(logLevel, args) {\\n if (LogLevel > LogLevels[logLevel]) {\\n return;\\n }\\n console.log.apply(console, args);\\n }\\n debug(...args) {\\n this._log(Logger.levels.DEBUG, args);\\n }\\n info(...args) {\\n this._log(Logger.levels.INFO, args);\\n }\\n warn(...args) {\\n this._log(Logger.levels.WARNING, args);\\n }\\n makeError(message, code, params) {\\n // Errors are being censored\\n if (_censorErrors) {\\n return this.makeError(\\\"censored error\\\", code, {});\\n }\\n if (!code) {\\n code = Logger.errors.UNKNOWN_ERROR;\\n }\\n if (!params) {\\n params = {};\\n }\\n const messageDetails = [];\\n Object.keys(params).forEach((key) => {\\n try {\\n messageDetails.push(key + \\\"=\\\" + JSON.stringify(params[key]));\\n }\\n catch (error) {\\n messageDetails.push(key + \\\"=\\\" + JSON.stringify(params[key].toString()));\\n }\\n });\\n messageDetails.push(`code=${code}`);\\n messageDetails.push(`version=${this.version}`);\\n const reason = message;\\n if (messageDetails.length) {\\n message += \\\" (\\\" + messageDetails.join(\\\", \\\") + \\\")\\\";\\n }\\n // @TODO: Any??\\n const error = new Error(message);\\n error.reason = reason;\\n error.code = code;\\n Object.keys(params).forEach(function (key) {\\n error[key] = params[key];\\n });\\n return error;\\n }\\n throwError(message, code, params) {\\n throw this.makeError(message, code, params);\\n }\\n throwArgumentError(message, name, value) {\\n return this.throwError(message, Logger.errors.INVALID_ARGUMENT, {\\n argument: name,\\n value: value\\n });\\n }\\n checkNormalize(message) {\\n if (message == null) {\\n message = \\\"platform missing String.prototype.normalize\\\";\\n }\\n if (_normalizeError) {\\n this.throwError(\\\"platform missing String.prototype.normalize\\\", Logger.errors.UNSUPPORTED_OPERATION, {\\n operation: \\\"String.prototype.normalize\\\", form: _normalizeError\\n });\\n }\\n }\\n checkSafeUint53(value, message) {\\n if (typeof (value) !== \\\"number\\\") {\\n return;\\n }\\n if (message == null) {\\n message = \\\"value not safe\\\";\\n }\\n if (value < 0 || value >= 0x1fffffffffffff) {\\n this.throwError(message, Logger.errors.NUMERIC_FAULT, {\\n operation: \\\"checkSafeInteger\\\",\\n fault: \\\"out-of-safe-range\\\",\\n value: value\\n });\\n }\\n if (value % 1) {\\n this.throwError(message, Logger.errors.NUMERIC_FAULT, {\\n operation: \\\"checkSafeInteger\\\",\\n fault: \\\"non-integer\\\",\\n value: value\\n });\\n }\\n }\\n checkArgumentCount(count, expectedCount, message) {\\n if (message) {\\n message = \\\": \\\" + message;\\n }\\n else {\\n message = \\\"\\\";\\n }\\n if (count < expectedCount) {\\n this.throwError(\\\"missing argument\\\" + message, Logger.errors.MISSING_ARGUMENT, {\\n count: count,\\n expectedCount: expectedCount\\n });\\n }\\n if (count > expectedCount) {\\n this.throwError(\\\"too many arguments\\\" + message, Logger.errors.UNEXPECTED_ARGUMENT, {\\n count: count,\\n expectedCount: expectedCount\\n });\\n }\\n }\\n checkNew(target, kind) {\\n if (target === Object || target == null) {\\n this.throwError(\\\"missing new\\\", Logger.errors.MISSING_NEW, { name: kind.name });\\n }\\n }\\n checkAbstract(target, kind) {\\n if (target === kind) {\\n this.throwError(\\\"cannot instantiate abstract class \\\" + JSON.stringify(kind.name) + \\\" directly; use a sub-class\\\", Logger.errors.UNSUPPORTED_OPERATION, { name: target.name, operation: \\\"new\\\" });\\n }\\n else if (target === Object || target == null) {\\n this.throwError(\\\"missing new\\\", Logger.errors.MISSING_NEW, { name: kind.name });\\n }\\n }\\n static globalLogger() {\\n if (!_globalLogger) {\\n _globalLogger = new Logger(_version__WEBPACK_IMPORTED_MODULE_0__[\\\"version\\\"]);\\n }\\n return _globalLogger;\\n }\\n static setCensorship(censorship, permanent) {\\n if (!censorship && permanent) {\\n this.globalLogger().throwError(\\\"cannot permanently disable censorship\\\", Logger.errors.UNSUPPORTED_OPERATION, {\\n operation: \\\"setCensorship\\\"\\n });\\n }\\n if (_permanentCensorErrors) {\\n if (!censorship) {\\n return;\\n }\\n this.globalLogger().throwError(\\\"error censorship permanent\\\", Logger.errors.UNSUPPORTED_OPERATION, {\\n operation: \\\"setCensorship\\\"\\n });\\n }\\n _censorErrors = !!censorship;\\n _permanentCensorErrors = !!permanent;\\n }\\n static setLogLevel(logLevel) {\\n const level = LogLevels[logLevel];\\n if (level == null) {\\n Logger.globalLogger().warn(\\\"invalid log level - \\\" + logLevel);\\n return;\\n }\\n LogLevel = level;\\n }\\n}\\nLogger.errors = {\\n ///////////////////\\n // Generic Errors\\n // Unknown Error\\n UNKNOWN_ERROR: \\\"UNKNOWN_ERROR\\\",\\n // Not Implemented\\n NOT_IMPLEMENTED: \\\"NOT_IMPLEMENTED\\\",\\n // Unsupported Operation\\n // - operation\\n UNSUPPORTED_OPERATION: \\\"UNSUPPORTED_OPERATION\\\",\\n // Network Error (i.e. Ethereum Network, such as an invalid chain ID)\\n NETWORK_ERROR: \\\"NETWORK_ERROR\\\",\\n // Some sort of bad response from the server\\n SERVER_ERROR: \\\"SERVER_ERROR\\\",\\n // Timeout\\n TIMEOUT: \\\"TIMEOUT\\\",\\n ///////////////////\\n // Operational Errors\\n // Buffer Overrun\\n BUFFER_OVERRUN: \\\"BUFFER_OVERRUN\\\",\\n // Numeric Fault\\n // - operation: the operation being executed\\n // - fault: the reason this faulted\\n NUMERIC_FAULT: \\\"NUMERIC_FAULT\\\",\\n ///////////////////\\n // Argument Errors\\n // Missing new operator to an object\\n // - name: The name of the class\\n MISSING_NEW: \\\"MISSING_NEW\\\",\\n // Invalid argument (e.g. value is incompatible with type) to a function:\\n // - argument: The argument name that was invalid\\n // - value: The value of the argument\\n INVALID_ARGUMENT: \\\"INVALID_ARGUMENT\\\",\\n // Missing argument to a function:\\n // - count: The number of arguments received\\n // - expectedCount: The number of arguments expected\\n MISSING_ARGUMENT: \\\"MISSING_ARGUMENT\\\",\\n // Too many arguments\\n // - count: The number of arguments received\\n // - expectedCount: The number of arguments expected\\n UNEXPECTED_ARGUMENT: \\\"UNEXPECTED_ARGUMENT\\\",\\n ///////////////////\\n // Blockchain Errors\\n // Call exception\\n // - transaction: the transaction\\n // - address?: the contract address\\n // - args?: The arguments passed into the function\\n // - method?: The Solidity method signature\\n // - errorSignature?: The EIP848 error signature\\n // - errorArgs?: The EIP848 error parameters\\n // - reason: The reason (only for EIP848 \\\"Error(string)\\\")\\n CALL_EXCEPTION: \\\"CALL_EXCEPTION\\\",\\n // Insufficien funds (< value + gasLimit * gasPrice)\\n // - transaction: the transaction attempted\\n INSUFFICIENT_FUNDS: \\\"INSUFFICIENT_FUNDS\\\",\\n // Nonce has already been used\\n // - transaction: the transaction attempted\\n NONCE_EXPIRED: \\\"NONCE_EXPIRED\\\",\\n // The replacement fee for the transaction is too low\\n // - transaction: the transaction attempted\\n REPLACEMENT_UNDERPRICED: \\\"REPLACEMENT_UNDERPRICED\\\",\\n // The gas limit could not be estimated\\n // - transaction: the transaction passed to estimateGas\\n UNPREDICTABLE_GAS_LIMIT: \\\"UNPREDICTABLE_GAS_LIMIT\\\",\\n};\\nLogger.levels = {\\n DEBUG: \\\"DEBUG\\\",\\n INFO: \\\"INFO\\\",\\n WARNING: \\\"WARNING\\\",\\n ERROR: \\\"ERROR\\\",\\n OFF: \\\"OFF\\\"\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/logger/lib.esm/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/pbkdf2/lib/browser.js\":\n/*!***********************************************************!*\\\n !*** ./node_modules/@ethersproject/pbkdf2/lib/browser.js ***!\n \\***********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, \\\"__esModule\\\", { value: true });\\nvar bytes_1 = __webpack_require__(/*! @ethersproject/bytes */ \\\"./node_modules/@ethersproject/bytes/lib.esm/index.js\\\");\\nvar sha2_1 = __webpack_require__(/*! @ethersproject/sha2 */ \\\"./node_modules/@ethersproject/sha2/lib/browser.js\\\");\\nfunction pbkdf2(password, salt, iterations, keylen, hashAlgorithm) {\\n password = bytes_1.arrayify(password);\\n salt = bytes_1.arrayify(salt);\\n var hLen;\\n var l = 1;\\n var DK = new Uint8Array(keylen);\\n var block1 = new Uint8Array(salt.length + 4);\\n block1.set(salt);\\n //salt.copy(block1, 0, 0, salt.length)\\n var r;\\n var T;\\n for (var i = 1; i <= l; i++) {\\n //block1.writeUInt32BE(i, salt.length)\\n block1[salt.length] = (i >> 24) & 0xff;\\n block1[salt.length + 1] = (i >> 16) & 0xff;\\n block1[salt.length + 2] = (i >> 8) & 0xff;\\n block1[salt.length + 3] = i & 0xff;\\n //let U = createHmac(password).update(block1).digest();\\n var U = bytes_1.arrayify(sha2_1.computeHmac(hashAlgorithm, password, block1));\\n if (!hLen) {\\n hLen = U.length;\\n T = new Uint8Array(hLen);\\n l = Math.ceil(keylen / hLen);\\n r = keylen - (l - 1) * hLen;\\n }\\n //U.copy(T, 0, 0, hLen)\\n T.set(U);\\n for (var j = 1; j < iterations; j++) {\\n //U = createHmac(password).update(U).digest();\\n U = bytes_1.arrayify(sha2_1.computeHmac(hashAlgorithm, password, U));\\n for (var k = 0; k < hLen; k++)\\n T[k] ^= U[k];\\n }\\n var destPos = (i - 1) * hLen;\\n var len = (i === l ? r : hLen);\\n //T.copy(DK, destPos, 0, len)\\n DK.set(bytes_1.arrayify(T).slice(0, len), destPos);\\n }\\n return bytes_1.hexlify(DK);\\n}\\nexports.pbkdf2 = pbkdf2;\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/pbkdf2/lib/browser.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/properties/lib.esm/_version.js\":\n/*!********************************************************************!*\\\n !*** ./node_modules/@ethersproject/properties/lib.esm/_version.js ***!\n \\********************************************************************/\n/*! exports provided: version */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"version\\\", function() { return version; });\\nconst version = \\\"properties/5.0.0-beta.137\\\";\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/properties/lib.esm/_version.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/properties/lib.esm/index.js\":\n/*!*****************************************************************!*\\\n !*** ./node_modules/@ethersproject/properties/lib.esm/index.js ***!\n \\*****************************************************************/\n/*! exports provided: defineReadOnly, getStatic, resolveProperties, checkProperties, shallowCopy, deepCopy, Description */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"defineReadOnly\\\", function() { return defineReadOnly; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"getStatic\\\", function() { return getStatic; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"resolveProperties\\\", function() { return resolveProperties; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"checkProperties\\\", function() { return checkProperties; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"shallowCopy\\\", function() { return shallowCopy; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"deepCopy\\\", function() { return deepCopy; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"Description\\\", function() { return Description; });\\n/* harmony import */ var _ethersproject_logger__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @ethersproject/logger */ \\\"./node_modules/@ethersproject/logger/lib.esm/index.js\\\");\\n/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./_version */ \\\"./node_modules/@ethersproject/properties/lib.esm/_version.js\\\");\\n\\n\\n\\nconst logger = new _ethersproject_logger__WEBPACK_IMPORTED_MODULE_0__[\\\"Logger\\\"](_version__WEBPACK_IMPORTED_MODULE_1__[\\\"version\\\"]);\\nfunction defineReadOnly(object, name, value) {\\n Object.defineProperty(object, name, {\\n enumerable: true,\\n value: value,\\n writable: false,\\n });\\n}\\n// Crawl up the constructor chain to find a static method\\nfunction getStatic(ctor, key) {\\n for (let i = 0; i < 32; i++) {\\n if (ctor[key]) {\\n return ctor[key];\\n }\\n if (!ctor.prototype || typeof (ctor.prototype) !== \\\"object\\\") {\\n break;\\n }\\n ctor = Object.getPrototypeOf(ctor.prototype).constructor;\\n }\\n return null;\\n}\\nfunction resolveProperties(object) {\\n const promises = Object.keys(object).map((key) => {\\n const value = object[key];\\n if (!(value instanceof Promise)) {\\n return Promise.resolve({ key: key, value: value });\\n }\\n return value.then((value) => {\\n return { key: key, value: value };\\n });\\n });\\n return Promise.all(promises).then((results) => {\\n const result = {};\\n return (results.reduce((accum, result) => {\\n accum[result.key] = result.value;\\n return accum;\\n }, result));\\n });\\n}\\nfunction checkProperties(object, properties) {\\n if (!object || typeof (object) !== \\\"object\\\") {\\n logger.throwArgumentError(\\\"invalid object\\\", \\\"object\\\", object);\\n }\\n Object.keys(object).forEach((key) => {\\n if (!properties[key]) {\\n logger.throwArgumentError(\\\"invalid object key - \\\" + key, \\\"transaction:\\\" + key, object);\\n }\\n });\\n}\\nfunction shallowCopy(object) {\\n const result = {};\\n for (const key in object) {\\n result[key] = object[key];\\n }\\n return result;\\n}\\nconst opaque = { bigint: true, boolean: true, number: true, string: true };\\n// Returns a new copy of object, such that no properties may be replaced.\\n// New properties may be added only to objects.\\nfunction _deepCopy(object) {\\n // Opaque objects are not mutable, so safe to copy by assignment\\n if (object === undefined || object === null || opaque[typeof (object)]) {\\n return object;\\n }\\n // Arrays are mutable, so we need to create a copy\\n if (Array.isArray(object)) {\\n return Object.freeze(object.map((item) => deepCopy(item)));\\n }\\n if (typeof (object) === \\\"object\\\") {\\n // Immutable objects are safe to just use\\n if (Object.isFrozen(object)) {\\n return object;\\n }\\n const result = {};\\n for (const key in object) {\\n const value = object[key];\\n if (value === undefined) {\\n continue;\\n }\\n defineReadOnly(result, key, deepCopy(value));\\n }\\n return result;\\n }\\n // The function type is also immutable, so safe to copy by assignment\\n if (typeof (object) === \\\"function\\\") {\\n return object;\\n }\\n logger.throwArgumentError(`Cannot deepCopy ${typeof (object)}`, \\\"object\\\", object);\\n}\\nfunction deepCopy(object) {\\n return _deepCopy(object);\\n}\\nclass Description {\\n constructor(info) {\\n for (const key in info) {\\n this[key] = deepCopy(info[key]);\\n }\\n }\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/properties/lib.esm/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/random/lib/_version.js\":\n/*!************************************************************!*\\\n !*** ./node_modules/@ethersproject/random/lib/_version.js ***!\n \\************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, \\\"__esModule\\\", { value: true });\\nexports.version = \\\"random/5.0.0-beta.134\\\";\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/random/lib/_version.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/random/lib/browser.js\":\n/*!***********************************************************!*\\\n !*** ./node_modules/@ethersproject/random/lib/browser.js ***!\n \\***********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(global) {\\nObject.defineProperty(exports, \\\"__esModule\\\", { value: true });\\nvar bytes_1 = __webpack_require__(/*! @ethersproject/bytes */ \\\"./node_modules/@ethersproject/bytes/lib.esm/index.js\\\");\\nvar logger_1 = __webpack_require__(/*! @ethersproject/logger */ \\\"./node_modules/@ethersproject/logger/lib.esm/index.js\\\");\\nvar _version_1 = __webpack_require__(/*! ./_version */ \\\"./node_modules/@ethersproject/random/lib/_version.js\\\");\\nvar logger = new logger_1.Logger(_version_1.version);\\nvar shuffle_1 = __webpack_require__(/*! ./shuffle */ \\\"./node_modules/@ethersproject/random/lib/shuffle.js\\\");\\nexports.shuffled = shuffle_1.shuffled;\\nvar crypto = global.crypto || global.msCrypto;\\nif (!crypto || !crypto.getRandomValues) {\\n logger.warn(\\\"WARNING: Missing strong random number source\\\");\\n crypto = {\\n getRandomValues: function (buffer) {\\n return logger.throwError(\\\"no secure random source avaialble\\\", logger_1.Logger.errors.UNSUPPORTED_OPERATION, {\\n operation: \\\"crypto.getRandomValues\\\"\\n });\\n }\\n };\\n}\\nfunction randomBytes(length) {\\n if (length <= 0 || length > 1024 || parseInt(String(length)) != length) {\\n logger.throwArgumentError(\\\"invalid length\\\", \\\"length\\\", length);\\n }\\n var result = new Uint8Array(length);\\n crypto.getRandomValues(result);\\n return bytes_1.arrayify(result);\\n}\\nexports.randomBytes = randomBytes;\\n;\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/global.js */ \\\"./node_modules/webpack/buildin/global.js\\\")))\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/random/lib/browser.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/random/lib/shuffle.js\":\n/*!***********************************************************!*\\\n !*** ./node_modules/@ethersproject/random/lib/shuffle.js ***!\n \\***********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, \\\"__esModule\\\", { value: true });\\nfunction shuffled(array) {\\n array = array.slice();\\n for (var i = array.length - 1; i > 0; i--) {\\n var j = Math.floor(Math.random() * (i + 1));\\n var tmp = array[i];\\n array[i] = array[j];\\n array[j] = tmp;\\n }\\n return array;\\n}\\nexports.shuffled = shuffled;\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/random/lib/shuffle.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/rlp/lib.esm/index.js\":\n/*!**********************************************************!*\\\n !*** ./node_modules/@ethersproject/rlp/lib.esm/index.js ***!\n \\**********************************************************/\n/*! exports provided: encode, decode */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"encode\\\", function() { return encode; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"decode\\\", function() { return decode; });\\n/* harmony import */ var _ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @ethersproject/bytes */ \\\"./node_modules/@ethersproject/bytes/lib.esm/index.js\\\");\\n\\n//See: https://github.com/ethereum/wiki/wiki/RLP\\n\\nfunction arrayifyInteger(value) {\\n const result = [];\\n while (value) {\\n result.unshift(value & 0xff);\\n value >>= 8;\\n }\\n return result;\\n}\\nfunction unarrayifyInteger(data, offset, length) {\\n let result = 0;\\n for (let i = 0; i < length; i++) {\\n result = (result * 256) + data[offset + i];\\n }\\n return result;\\n}\\nfunction _encode(object) {\\n if (Array.isArray(object)) {\\n let payload = [];\\n object.forEach(function (child) {\\n payload = payload.concat(_encode(child));\\n });\\n if (payload.length <= 55) {\\n payload.unshift(0xc0 + payload.length);\\n return payload;\\n }\\n const length = arrayifyInteger(payload.length);\\n length.unshift(0xf7 + length.length);\\n return length.concat(payload);\\n }\\n const data = Array.prototype.slice.call(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__[\\\"arrayify\\\"])(object));\\n if (data.length === 1 && data[0] <= 0x7f) {\\n return data;\\n }\\n else if (data.length <= 55) {\\n data.unshift(0x80 + data.length);\\n return data;\\n }\\n const length = arrayifyInteger(data.length);\\n length.unshift(0xb7 + length.length);\\n return length.concat(data);\\n}\\nfunction encode(object) {\\n return Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__[\\\"hexlify\\\"])(_encode(object));\\n}\\nfunction _decodeChildren(data, offset, childOffset, length) {\\n const result = [];\\n while (childOffset < offset + 1 + length) {\\n const decoded = _decode(data, childOffset);\\n result.push(decoded.result);\\n childOffset += decoded.consumed;\\n if (childOffset > offset + 1 + length) {\\n throw new Error(\\\"invalid rlp\\\");\\n }\\n }\\n return { consumed: (1 + length), result: result };\\n}\\n// returns { consumed: number, result: Object }\\nfunction _decode(data, offset) {\\n if (data.length === 0) {\\n throw new Error(\\\"invalid rlp data\\\");\\n }\\n // Array with extra length prefix\\n if (data[offset] >= 0xf8) {\\n const lengthLength = data[offset] - 0xf7;\\n if (offset + 1 + lengthLength > data.length) {\\n throw new Error(\\\"too short\\\");\\n }\\n const length = unarrayifyInteger(data, offset + 1, lengthLength);\\n if (offset + 1 + lengthLength + length > data.length) {\\n throw new Error(\\\"to short\\\");\\n }\\n return _decodeChildren(data, offset, offset + 1 + lengthLength, lengthLength + length);\\n }\\n else if (data[offset] >= 0xc0) {\\n const length = data[offset] - 0xc0;\\n if (offset + 1 + length > data.length) {\\n throw new Error(\\\"invalid rlp data\\\");\\n }\\n return _decodeChildren(data, offset, offset + 1, length);\\n }\\n else if (data[offset] >= 0xb8) {\\n const lengthLength = data[offset] - 0xb7;\\n if (offset + 1 + lengthLength > data.length) {\\n throw new Error(\\\"invalid rlp data\\\");\\n }\\n const length = unarrayifyInteger(data, offset + 1, lengthLength);\\n if (offset + 1 + lengthLength + length > data.length) {\\n throw new Error(\\\"invalid rlp data\\\");\\n }\\n const result = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__[\\\"hexlify\\\"])(data.slice(offset + 1 + lengthLength, offset + 1 + lengthLength + length));\\n return { consumed: (1 + lengthLength + length), result: result };\\n }\\n else if (data[offset] >= 0x80) {\\n const length = data[offset] - 0x80;\\n if (offset + 1 + length > data.length) {\\n throw new Error(\\\"invalid rlp data\\\");\\n }\\n const result = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__[\\\"hexlify\\\"])(data.slice(offset + 1, offset + 1 + length));\\n return { consumed: (1 + length), result: result };\\n }\\n return { consumed: 1, result: Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__[\\\"hexlify\\\"])(data[offset]) };\\n}\\nfunction decode(data) {\\n const bytes = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__[\\\"arrayify\\\"])(data);\\n const decoded = _decode(bytes, 0);\\n if (decoded.consumed !== bytes.length) {\\n throw new Error(\\\"invalid rlp data\\\");\\n }\\n return decoded.result;\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/rlp/lib.esm/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/sha2/lib/_version.js\":\n/*!**********************************************************!*\\\n !*** ./node_modules/@ethersproject/sha2/lib/_version.js ***!\n \\**********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, \\\"__esModule\\\", { value: true });\\nexports.version = \\\"sha2/5.0.0-beta.135\\\";\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/sha2/lib/_version.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/sha2/lib/browser.js\":\n/*!*********************************************************!*\\\n !*** ./node_modules/@ethersproject/sha2/lib/browser.js ***!\n \\*********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nvar __importStar = (this && this.__importStar) || function (mod) {\\n if (mod && mod.__esModule) return mod;\\n var result = {};\\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\\n result[\\\"default\\\"] = mod;\\n return result;\\n};\\nObject.defineProperty(exports, \\\"__esModule\\\", { value: true });\\nvar hash = __importStar(__webpack_require__(/*! hash.js */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash.js\\\"));\\nvar bytes_1 = __webpack_require__(/*! @ethersproject/bytes */ \\\"./node_modules/@ethersproject/bytes/lib.esm/index.js\\\");\\nvar logger_1 = __webpack_require__(/*! @ethersproject/logger */ \\\"./node_modules/@ethersproject/logger/lib.esm/index.js\\\");\\nvar _version_1 = __webpack_require__(/*! ./_version */ \\\"./node_modules/@ethersproject/sha2/lib/_version.js\\\");\\nvar logger = new logger_1.Logger(_version_1.version);\\nvar SupportedAlgorithm;\\n(function (SupportedAlgorithm) {\\n SupportedAlgorithm[\\\"sha256\\\"] = \\\"sha256\\\";\\n SupportedAlgorithm[\\\"sha512\\\"] = \\\"sha512\\\";\\n})(SupportedAlgorithm = exports.SupportedAlgorithm || (exports.SupportedAlgorithm = {}));\\n;\\nfunction ripemd160(data) {\\n return \\\"0x\\\" + (hash.ripemd160().update(bytes_1.arrayify(data)).digest(\\\"hex\\\"));\\n}\\nexports.ripemd160 = ripemd160;\\nfunction sha256(data) {\\n return \\\"0x\\\" + (hash.sha256().update(bytes_1.arrayify(data)).digest(\\\"hex\\\"));\\n}\\nexports.sha256 = sha256;\\nfunction sha512(data) {\\n return \\\"0x\\\" + (hash.sha512().update(bytes_1.arrayify(data)).digest(\\\"hex\\\"));\\n}\\nexports.sha512 = sha512;\\nfunction computeHmac(algorithm, key, data) {\\n if (!SupportedAlgorithm[algorithm]) {\\n logger.throwError(\\\"unsupported algorithm \\\" + algorithm, logger_1.Logger.errors.UNSUPPORTED_OPERATION, {\\n operation: \\\"hmac\\\",\\n algorithm: algorithm\\n });\\n }\\n return \\\"0x\\\" + hash.hmac(hash[algorithm], bytes_1.arrayify(key)).update(bytes_1.arrayify(data)).digest(\\\"hex\\\");\\n}\\nexports.computeHmac = computeHmac;\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/sha2/lib/browser.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash.js\":\n/*!***************************************************************************!*\\\n !*** ./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash.js ***!\n \\***************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"var hash = exports;\\n\\nhash.utils = __webpack_require__(/*! ./hash/utils */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/utils.js\\\");\\nhash.common = __webpack_require__(/*! ./hash/common */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/common.js\\\");\\nhash.sha = __webpack_require__(/*! ./hash/sha */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha.js\\\");\\nhash.ripemd = __webpack_require__(/*! ./hash/ripemd */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/ripemd.js\\\");\\nhash.hmac = __webpack_require__(/*! ./hash/hmac */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/hmac.js\\\");\\n\\n// Proxy hash functions to the main object\\nhash.sha1 = hash.sha.sha1;\\nhash.sha256 = hash.sha.sha256;\\nhash.sha224 = hash.sha.sha224;\\nhash.sha384 = hash.sha.sha384;\\nhash.sha512 = hash.sha.sha512;\\nhash.ripemd160 = hash.ripemd.ripemd160;\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/common.js\":\n/*!**********************************************************************************!*\\\n !*** ./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/common.js ***!\n \\**********************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar utils = __webpack_require__(/*! ./utils */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/utils.js\\\");\\nvar assert = __webpack_require__(/*! minimalistic-assert */ \\\"./node_modules/minimalistic-assert/index.js\\\");\\n\\nfunction BlockHash() {\\n this.pending = null;\\n this.pendingTotal = 0;\\n this.blockSize = this.constructor.blockSize;\\n this.outSize = this.constructor.outSize;\\n this.hmacStrength = this.constructor.hmacStrength;\\n this.padLength = this.constructor.padLength / 8;\\n this.endian = 'big';\\n\\n this._delta8 = this.blockSize / 8;\\n this._delta32 = this.blockSize / 32;\\n}\\nexports.BlockHash = BlockHash;\\n\\nBlockHash.prototype.update = function update(msg, enc) {\\n // Convert message to array, pad it, and join into 32bit blocks\\n msg = utils.toArray(msg, enc);\\n if (!this.pending)\\n this.pending = msg;\\n else\\n this.pending = this.pending.concat(msg);\\n this.pendingTotal += msg.length;\\n\\n // Enough data, try updating\\n if (this.pending.length >= this._delta8) {\\n msg = this.pending;\\n\\n // Process pending data in blocks\\n var r = msg.length % this._delta8;\\n this.pending = msg.slice(msg.length - r, msg.length);\\n if (this.pending.length === 0)\\n this.pending = null;\\n\\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\\n for (var i = 0; i < msg.length; i += this._delta32)\\n this._update(msg, i, i + this._delta32);\\n }\\n\\n return this;\\n};\\n\\nBlockHash.prototype.digest = function digest(enc) {\\n this.update(this._pad());\\n assert(this.pending === null);\\n\\n return this._digest(enc);\\n};\\n\\nBlockHash.prototype._pad = function pad() {\\n var len = this.pendingTotal;\\n var bytes = this._delta8;\\n var k = bytes - ((len + this.padLength) % bytes);\\n var res = new Array(k + this.padLength);\\n res[0] = 0x80;\\n for (var i = 1; i < k; i++)\\n res[i] = 0;\\n\\n // Append length\\n len <<= 3;\\n if (this.endian === 'big') {\\n for (var t = 8; t < this.padLength; t++)\\n res[i++] = 0;\\n\\n res[i++] = 0;\\n res[i++] = 0;\\n res[i++] = 0;\\n res[i++] = 0;\\n res[i++] = (len >>> 24) & 0xff;\\n res[i++] = (len >>> 16) & 0xff;\\n res[i++] = (len >>> 8) & 0xff;\\n res[i++] = len & 0xff;\\n } else {\\n res[i++] = len & 0xff;\\n res[i++] = (len >>> 8) & 0xff;\\n res[i++] = (len >>> 16) & 0xff;\\n res[i++] = (len >>> 24) & 0xff;\\n res[i++] = 0;\\n res[i++] = 0;\\n res[i++] = 0;\\n res[i++] = 0;\\n\\n for (t = 8; t < this.padLength; t++)\\n res[i++] = 0;\\n }\\n\\n return res;\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/common.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/hmac.js\":\n/*!********************************************************************************!*\\\n !*** ./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/hmac.js ***!\n \\********************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar utils = __webpack_require__(/*! ./utils */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/utils.js\\\");\\nvar assert = __webpack_require__(/*! minimalistic-assert */ \\\"./node_modules/minimalistic-assert/index.js\\\");\\n\\nfunction Hmac(hash, key, enc) {\\n if (!(this instanceof Hmac))\\n return new Hmac(hash, key, enc);\\n this.Hash = hash;\\n this.blockSize = hash.blockSize / 8;\\n this.outSize = hash.outSize / 8;\\n this.inner = null;\\n this.outer = null;\\n\\n this._init(utils.toArray(key, enc));\\n}\\nmodule.exports = Hmac;\\n\\nHmac.prototype._init = function init(key) {\\n // Shorten key, if needed\\n if (key.length > this.blockSize)\\n key = new this.Hash().update(key).digest();\\n assert(key.length <= this.blockSize);\\n\\n // Add padding to key\\n for (var i = key.length; i < this.blockSize; i++)\\n key.push(0);\\n\\n for (i = 0; i < key.length; i++)\\n key[i] ^= 0x36;\\n this.inner = new this.Hash().update(key);\\n\\n // 0x36 ^ 0x5c = 0x6a\\n for (i = 0; i < key.length; i++)\\n key[i] ^= 0x6a;\\n this.outer = new this.Hash().update(key);\\n};\\n\\nHmac.prototype.update = function update(msg, enc) {\\n this.inner.update(msg, enc);\\n return this;\\n};\\n\\nHmac.prototype.digest = function digest(enc) {\\n this.outer.update(this.inner.digest());\\n return this.outer.digest(enc);\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/hmac.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/ripemd.js\":\n/*!**********************************************************************************!*\\\n !*** ./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/ripemd.js ***!\n \\**********************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar utils = __webpack_require__(/*! ./utils */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/utils.js\\\");\\nvar common = __webpack_require__(/*! ./common */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/common.js\\\");\\n\\nvar rotl32 = utils.rotl32;\\nvar sum32 = utils.sum32;\\nvar sum32_3 = utils.sum32_3;\\nvar sum32_4 = utils.sum32_4;\\nvar BlockHash = common.BlockHash;\\n\\nfunction RIPEMD160() {\\n if (!(this instanceof RIPEMD160))\\n return new RIPEMD160();\\n\\n BlockHash.call(this);\\n\\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\\n this.endian = 'little';\\n}\\nutils.inherits(RIPEMD160, BlockHash);\\nexports.ripemd160 = RIPEMD160;\\n\\nRIPEMD160.blockSize = 512;\\nRIPEMD160.outSize = 160;\\nRIPEMD160.hmacStrength = 192;\\nRIPEMD160.padLength = 64;\\n\\nRIPEMD160.prototype._update = function update(msg, start) {\\n var A = this.h[0];\\n var B = this.h[1];\\n var C = this.h[2];\\n var D = this.h[3];\\n var E = this.h[4];\\n var Ah = A;\\n var Bh = B;\\n var Ch = C;\\n var Dh = D;\\n var Eh = E;\\n for (var j = 0; j < 80; j++) {\\n var T = sum32(\\n rotl32(\\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\\n s[j]),\\n E);\\n A = E;\\n E = D;\\n D = rotl32(C, 10);\\n C = B;\\n B = T;\\n T = sum32(\\n rotl32(\\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\\n sh[j]),\\n Eh);\\n Ah = Eh;\\n Eh = Dh;\\n Dh = rotl32(Ch, 10);\\n Ch = Bh;\\n Bh = T;\\n }\\n T = sum32_3(this.h[1], C, Dh);\\n this.h[1] = sum32_3(this.h[2], D, Eh);\\n this.h[2] = sum32_3(this.h[3], E, Ah);\\n this.h[3] = sum32_3(this.h[4], A, Bh);\\n this.h[4] = sum32_3(this.h[0], B, Ch);\\n this.h[0] = T;\\n};\\n\\nRIPEMD160.prototype._digest = function digest(enc) {\\n if (enc === 'hex')\\n return utils.toHex32(this.h, 'little');\\n else\\n return utils.split32(this.h, 'little');\\n};\\n\\nfunction f(j, x, y, z) {\\n if (j <= 15)\\n return x ^ y ^ z;\\n else if (j <= 31)\\n return (x & y) | ((~x) & z);\\n else if (j <= 47)\\n return (x | (~y)) ^ z;\\n else if (j <= 63)\\n return (x & z) | (y & (~z));\\n else\\n return x ^ (y | (~z));\\n}\\n\\nfunction K(j) {\\n if (j <= 15)\\n return 0x00000000;\\n else if (j <= 31)\\n return 0x5a827999;\\n else if (j <= 47)\\n return 0x6ed9eba1;\\n else if (j <= 63)\\n return 0x8f1bbcdc;\\n else\\n return 0xa953fd4e;\\n}\\n\\nfunction Kh(j) {\\n if (j <= 15)\\n return 0x50a28be6;\\n else if (j <= 31)\\n return 0x5c4dd124;\\n else if (j <= 47)\\n return 0x6d703ef3;\\n else if (j <= 63)\\n return 0x7a6d76e9;\\n else\\n return 0x00000000;\\n}\\n\\nvar r = [\\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\\n];\\n\\nvar rh = [\\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\\n];\\n\\nvar s = [\\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\\n];\\n\\nvar sh = [\\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\\n];\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/ripemd.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha.js\":\n/*!*******************************************************************************!*\\\n !*** ./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha.js ***!\n \\*******************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nexports.sha1 = __webpack_require__(/*! ./sha/1 */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/1.js\\\");\\nexports.sha224 = __webpack_require__(/*! ./sha/224 */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/224.js\\\");\\nexports.sha256 = __webpack_require__(/*! ./sha/256 */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/256.js\\\");\\nexports.sha384 = __webpack_require__(/*! ./sha/384 */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/384.js\\\");\\nexports.sha512 = __webpack_require__(/*! ./sha/512 */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/512.js\\\");\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/1.js\":\n/*!*********************************************************************************!*\\\n !*** ./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/1.js ***!\n \\*********************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar utils = __webpack_require__(/*! ../utils */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/utils.js\\\");\\nvar common = __webpack_require__(/*! ../common */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/common.js\\\");\\nvar shaCommon = __webpack_require__(/*! ./common */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/common.js\\\");\\n\\nvar rotl32 = utils.rotl32;\\nvar sum32 = utils.sum32;\\nvar sum32_5 = utils.sum32_5;\\nvar ft_1 = shaCommon.ft_1;\\nvar BlockHash = common.BlockHash;\\n\\nvar sha1_K = [\\n 0x5A827999, 0x6ED9EBA1,\\n 0x8F1BBCDC, 0xCA62C1D6\\n];\\n\\nfunction SHA1() {\\n if (!(this instanceof SHA1))\\n return new SHA1();\\n\\n BlockHash.call(this);\\n this.h = [\\n 0x67452301, 0xefcdab89, 0x98badcfe,\\n 0x10325476, 0xc3d2e1f0 ];\\n this.W = new Array(80);\\n}\\n\\nutils.inherits(SHA1, BlockHash);\\nmodule.exports = SHA1;\\n\\nSHA1.blockSize = 512;\\nSHA1.outSize = 160;\\nSHA1.hmacStrength = 80;\\nSHA1.padLength = 64;\\n\\nSHA1.prototype._update = function _update(msg, start) {\\n var W = this.W;\\n\\n for (var i = 0; i < 16; i++)\\n W[i] = msg[start + i];\\n\\n for(; i < W.length; i++)\\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\\n\\n var a = this.h[0];\\n var b = this.h[1];\\n var c = this.h[2];\\n var d = this.h[3];\\n var e = this.h[4];\\n\\n for (i = 0; i < W.length; i++) {\\n var s = ~~(i / 20);\\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\\n e = d;\\n d = c;\\n c = rotl32(b, 30);\\n b = a;\\n a = t;\\n }\\n\\n this.h[0] = sum32(this.h[0], a);\\n this.h[1] = sum32(this.h[1], b);\\n this.h[2] = sum32(this.h[2], c);\\n this.h[3] = sum32(this.h[3], d);\\n this.h[4] = sum32(this.h[4], e);\\n};\\n\\nSHA1.prototype._digest = function digest(enc) {\\n if (enc === 'hex')\\n return utils.toHex32(this.h, 'big');\\n else\\n return utils.split32(this.h, 'big');\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/1.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/224.js\":\n/*!***********************************************************************************!*\\\n !*** ./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/224.js ***!\n \\***********************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar utils = __webpack_require__(/*! ../utils */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/utils.js\\\");\\nvar SHA256 = __webpack_require__(/*! ./256 */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/256.js\\\");\\n\\nfunction SHA224() {\\n if (!(this instanceof SHA224))\\n return new SHA224();\\n\\n SHA256.call(this);\\n this.h = [\\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\\n}\\nutils.inherits(SHA224, SHA256);\\nmodule.exports = SHA224;\\n\\nSHA224.blockSize = 512;\\nSHA224.outSize = 224;\\nSHA224.hmacStrength = 192;\\nSHA224.padLength = 64;\\n\\nSHA224.prototype._digest = function digest(enc) {\\n // Just truncate output\\n if (enc === 'hex')\\n return utils.toHex32(this.h.slice(0, 7), 'big');\\n else\\n return utils.split32(this.h.slice(0, 7), 'big');\\n};\\n\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/224.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/256.js\":\n/*!***********************************************************************************!*\\\n !*** ./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/256.js ***!\n \\***********************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar utils = __webpack_require__(/*! ../utils */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/utils.js\\\");\\nvar common = __webpack_require__(/*! ../common */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/common.js\\\");\\nvar shaCommon = __webpack_require__(/*! ./common */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/common.js\\\");\\nvar assert = __webpack_require__(/*! minimalistic-assert */ \\\"./node_modules/minimalistic-assert/index.js\\\");\\n\\nvar sum32 = utils.sum32;\\nvar sum32_4 = utils.sum32_4;\\nvar sum32_5 = utils.sum32_5;\\nvar ch32 = shaCommon.ch32;\\nvar maj32 = shaCommon.maj32;\\nvar s0_256 = shaCommon.s0_256;\\nvar s1_256 = shaCommon.s1_256;\\nvar g0_256 = shaCommon.g0_256;\\nvar g1_256 = shaCommon.g1_256;\\n\\nvar BlockHash = common.BlockHash;\\n\\nvar sha256_K = [\\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\\n];\\n\\nfunction SHA256() {\\n if (!(this instanceof SHA256))\\n return new SHA256();\\n\\n BlockHash.call(this);\\n this.h = [\\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\\n ];\\n this.k = sha256_K;\\n this.W = new Array(64);\\n}\\nutils.inherits(SHA256, BlockHash);\\nmodule.exports = SHA256;\\n\\nSHA256.blockSize = 512;\\nSHA256.outSize = 256;\\nSHA256.hmacStrength = 192;\\nSHA256.padLength = 64;\\n\\nSHA256.prototype._update = function _update(msg, start) {\\n var W = this.W;\\n\\n for (var i = 0; i < 16; i++)\\n W[i] = msg[start + i];\\n for (; i < W.length; i++)\\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\\n\\n var a = this.h[0];\\n var b = this.h[1];\\n var c = this.h[2];\\n var d = this.h[3];\\n var e = this.h[4];\\n var f = this.h[5];\\n var g = this.h[6];\\n var h = this.h[7];\\n\\n assert(this.k.length === W.length);\\n for (i = 0; i < W.length; i++) {\\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\\n var T2 = sum32(s0_256(a), maj32(a, b, c));\\n h = g;\\n g = f;\\n f = e;\\n e = sum32(d, T1);\\n d = c;\\n c = b;\\n b = a;\\n a = sum32(T1, T2);\\n }\\n\\n this.h[0] = sum32(this.h[0], a);\\n this.h[1] = sum32(this.h[1], b);\\n this.h[2] = sum32(this.h[2], c);\\n this.h[3] = sum32(this.h[3], d);\\n this.h[4] = sum32(this.h[4], e);\\n this.h[5] = sum32(this.h[5], f);\\n this.h[6] = sum32(this.h[6], g);\\n this.h[7] = sum32(this.h[7], h);\\n};\\n\\nSHA256.prototype._digest = function digest(enc) {\\n if (enc === 'hex')\\n return utils.toHex32(this.h, 'big');\\n else\\n return utils.split32(this.h, 'big');\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/256.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/384.js\":\n/*!***********************************************************************************!*\\\n !*** ./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/384.js ***!\n \\***********************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar utils = __webpack_require__(/*! ../utils */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/utils.js\\\");\\n\\nvar SHA512 = __webpack_require__(/*! ./512 */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/512.js\\\");\\n\\nfunction SHA384() {\\n if (!(this instanceof SHA384))\\n return new SHA384();\\n\\n SHA512.call(this);\\n this.h = [\\n 0xcbbb9d5d, 0xc1059ed8,\\n 0x629a292a, 0x367cd507,\\n 0x9159015a, 0x3070dd17,\\n 0x152fecd8, 0xf70e5939,\\n 0x67332667, 0xffc00b31,\\n 0x8eb44a87, 0x68581511,\\n 0xdb0c2e0d, 0x64f98fa7,\\n 0x47b5481d, 0xbefa4fa4 ];\\n}\\nutils.inherits(SHA384, SHA512);\\nmodule.exports = SHA384;\\n\\nSHA384.blockSize = 1024;\\nSHA384.outSize = 384;\\nSHA384.hmacStrength = 192;\\nSHA384.padLength = 128;\\n\\nSHA384.prototype._digest = function digest(enc) {\\n if (enc === 'hex')\\n return utils.toHex32(this.h.slice(0, 12), 'big');\\n else\\n return utils.split32(this.h.slice(0, 12), 'big');\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/384.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/512.js\":\n/*!***********************************************************************************!*\\\n !*** ./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/512.js ***!\n \\***********************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar utils = __webpack_require__(/*! ../utils */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/utils.js\\\");\\nvar common = __webpack_require__(/*! ../common */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/common.js\\\");\\nvar assert = __webpack_require__(/*! minimalistic-assert */ \\\"./node_modules/minimalistic-assert/index.js\\\");\\n\\nvar rotr64_hi = utils.rotr64_hi;\\nvar rotr64_lo = utils.rotr64_lo;\\nvar shr64_hi = utils.shr64_hi;\\nvar shr64_lo = utils.shr64_lo;\\nvar sum64 = utils.sum64;\\nvar sum64_hi = utils.sum64_hi;\\nvar sum64_lo = utils.sum64_lo;\\nvar sum64_4_hi = utils.sum64_4_hi;\\nvar sum64_4_lo = utils.sum64_4_lo;\\nvar sum64_5_hi = utils.sum64_5_hi;\\nvar sum64_5_lo = utils.sum64_5_lo;\\n\\nvar BlockHash = common.BlockHash;\\n\\nvar sha512_K = [\\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\\n];\\n\\nfunction SHA512() {\\n if (!(this instanceof SHA512))\\n return new SHA512();\\n\\n BlockHash.call(this);\\n this.h = [\\n 0x6a09e667, 0xf3bcc908,\\n 0xbb67ae85, 0x84caa73b,\\n 0x3c6ef372, 0xfe94f82b,\\n 0xa54ff53a, 0x5f1d36f1,\\n 0x510e527f, 0xade682d1,\\n 0x9b05688c, 0x2b3e6c1f,\\n 0x1f83d9ab, 0xfb41bd6b,\\n 0x5be0cd19, 0x137e2179 ];\\n this.k = sha512_K;\\n this.W = new Array(160);\\n}\\nutils.inherits(SHA512, BlockHash);\\nmodule.exports = SHA512;\\n\\nSHA512.blockSize = 1024;\\nSHA512.outSize = 512;\\nSHA512.hmacStrength = 192;\\nSHA512.padLength = 128;\\n\\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\\n var W = this.W;\\n\\n // 32 x 32bit words\\n for (var i = 0; i < 32; i++)\\n W[i] = msg[start + i];\\n for (; i < W.length; i += 2) {\\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\\n var c1_hi = W[i - 14]; // i - 7\\n var c1_lo = W[i - 13];\\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\\n var c3_hi = W[i - 32]; // i - 16\\n var c3_lo = W[i - 31];\\n\\n W[i] = sum64_4_hi(\\n c0_hi, c0_lo,\\n c1_hi, c1_lo,\\n c2_hi, c2_lo,\\n c3_hi, c3_lo);\\n W[i + 1] = sum64_4_lo(\\n c0_hi, c0_lo,\\n c1_hi, c1_lo,\\n c2_hi, c2_lo,\\n c3_hi, c3_lo);\\n }\\n};\\n\\nSHA512.prototype._update = function _update(msg, start) {\\n this._prepareBlock(msg, start);\\n\\n var W = this.W;\\n\\n var ah = this.h[0];\\n var al = this.h[1];\\n var bh = this.h[2];\\n var bl = this.h[3];\\n var ch = this.h[4];\\n var cl = this.h[5];\\n var dh = this.h[6];\\n var dl = this.h[7];\\n var eh = this.h[8];\\n var el = this.h[9];\\n var fh = this.h[10];\\n var fl = this.h[11];\\n var gh = this.h[12];\\n var gl = this.h[13];\\n var hh = this.h[14];\\n var hl = this.h[15];\\n\\n assert(this.k.length === W.length);\\n for (var i = 0; i < W.length; i += 2) {\\n var c0_hi = hh;\\n var c0_lo = hl;\\n var c1_hi = s1_512_hi(eh, el);\\n var c1_lo = s1_512_lo(eh, el);\\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\\n var c3_hi = this.k[i];\\n var c3_lo = this.k[i + 1];\\n var c4_hi = W[i];\\n var c4_lo = W[i + 1];\\n\\n var T1_hi = sum64_5_hi(\\n c0_hi, c0_lo,\\n c1_hi, c1_lo,\\n c2_hi, c2_lo,\\n c3_hi, c3_lo,\\n c4_hi, c4_lo);\\n var T1_lo = sum64_5_lo(\\n c0_hi, c0_lo,\\n c1_hi, c1_lo,\\n c2_hi, c2_lo,\\n c3_hi, c3_lo,\\n c4_hi, c4_lo);\\n\\n c0_hi = s0_512_hi(ah, al);\\n c0_lo = s0_512_lo(ah, al);\\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\\n\\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\\n\\n hh = gh;\\n hl = gl;\\n\\n gh = fh;\\n gl = fl;\\n\\n fh = eh;\\n fl = el;\\n\\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\\n\\n dh = ch;\\n dl = cl;\\n\\n ch = bh;\\n cl = bl;\\n\\n bh = ah;\\n bl = al;\\n\\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\\n }\\n\\n sum64(this.h, 0, ah, al);\\n sum64(this.h, 2, bh, bl);\\n sum64(this.h, 4, ch, cl);\\n sum64(this.h, 6, dh, dl);\\n sum64(this.h, 8, eh, el);\\n sum64(this.h, 10, fh, fl);\\n sum64(this.h, 12, gh, gl);\\n sum64(this.h, 14, hh, hl);\\n};\\n\\nSHA512.prototype._digest = function digest(enc) {\\n if (enc === 'hex')\\n return utils.toHex32(this.h, 'big');\\n else\\n return utils.split32(this.h, 'big');\\n};\\n\\nfunction ch64_hi(xh, xl, yh, yl, zh) {\\n var r = (xh & yh) ^ ((~xh) & zh);\\n if (r < 0)\\n r += 0x100000000;\\n return r;\\n}\\n\\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\\n var r = (xl & yl) ^ ((~xl) & zl);\\n if (r < 0)\\n r += 0x100000000;\\n return r;\\n}\\n\\nfunction maj64_hi(xh, xl, yh, yl, zh) {\\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\\n if (r < 0)\\n r += 0x100000000;\\n return r;\\n}\\n\\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\\n if (r < 0)\\n r += 0x100000000;\\n return r;\\n}\\n\\nfunction s0_512_hi(xh, xl) {\\n var c0_hi = rotr64_hi(xh, xl, 28);\\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\\n\\n var r = c0_hi ^ c1_hi ^ c2_hi;\\n if (r < 0)\\n r += 0x100000000;\\n return r;\\n}\\n\\nfunction s0_512_lo(xh, xl) {\\n var c0_lo = rotr64_lo(xh, xl, 28);\\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\\n\\n var r = c0_lo ^ c1_lo ^ c2_lo;\\n if (r < 0)\\n r += 0x100000000;\\n return r;\\n}\\n\\nfunction s1_512_hi(xh, xl) {\\n var c0_hi = rotr64_hi(xh, xl, 14);\\n var c1_hi = rotr64_hi(xh, xl, 18);\\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\\n\\n var r = c0_hi ^ c1_hi ^ c2_hi;\\n if (r < 0)\\n r += 0x100000000;\\n return r;\\n}\\n\\nfunction s1_512_lo(xh, xl) {\\n var c0_lo = rotr64_lo(xh, xl, 14);\\n var c1_lo = rotr64_lo(xh, xl, 18);\\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\\n\\n var r = c0_lo ^ c1_lo ^ c2_lo;\\n if (r < 0)\\n r += 0x100000000;\\n return r;\\n}\\n\\nfunction g0_512_hi(xh, xl) {\\n var c0_hi = rotr64_hi(xh, xl, 1);\\n var c1_hi = rotr64_hi(xh, xl, 8);\\n var c2_hi = shr64_hi(xh, xl, 7);\\n\\n var r = c0_hi ^ c1_hi ^ c2_hi;\\n if (r < 0)\\n r += 0x100000000;\\n return r;\\n}\\n\\nfunction g0_512_lo(xh, xl) {\\n var c0_lo = rotr64_lo(xh, xl, 1);\\n var c1_lo = rotr64_lo(xh, xl, 8);\\n var c2_lo = shr64_lo(xh, xl, 7);\\n\\n var r = c0_lo ^ c1_lo ^ c2_lo;\\n if (r < 0)\\n r += 0x100000000;\\n return r;\\n}\\n\\nfunction g1_512_hi(xh, xl) {\\n var c0_hi = rotr64_hi(xh, xl, 19);\\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\\n var c2_hi = shr64_hi(xh, xl, 6);\\n\\n var r = c0_hi ^ c1_hi ^ c2_hi;\\n if (r < 0)\\n r += 0x100000000;\\n return r;\\n}\\n\\nfunction g1_512_lo(xh, xl) {\\n var c0_lo = rotr64_lo(xh, xl, 19);\\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\\n var c2_lo = shr64_lo(xh, xl, 6);\\n\\n var r = c0_lo ^ c1_lo ^ c2_lo;\\n if (r < 0)\\n r += 0x100000000;\\n return r;\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/512.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/common.js\":\n/*!**************************************************************************************!*\\\n !*** ./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/common.js ***!\n \\**************************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar utils = __webpack_require__(/*! ../utils */ \\\"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/utils.js\\\");\\nvar rotr32 = utils.rotr32;\\n\\nfunction ft_1(s, x, y, z) {\\n if (s === 0)\\n return ch32(x, y, z);\\n if (s === 1 || s === 3)\\n return p32(x, y, z);\\n if (s === 2)\\n return maj32(x, y, z);\\n}\\nexports.ft_1 = ft_1;\\n\\nfunction ch32(x, y, z) {\\n return (x & y) ^ ((~x) & z);\\n}\\nexports.ch32 = ch32;\\n\\nfunction maj32(x, y, z) {\\n return (x & y) ^ (x & z) ^ (y & z);\\n}\\nexports.maj32 = maj32;\\n\\nfunction p32(x, y, z) {\\n return x ^ y ^ z;\\n}\\nexports.p32 = p32;\\n\\nfunction s0_256(x) {\\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\\n}\\nexports.s0_256 = s0_256;\\n\\nfunction s1_256(x) {\\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\\n}\\nexports.s1_256 = s1_256;\\n\\nfunction g0_256(x) {\\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\\n}\\nexports.g0_256 = g0_256;\\n\\nfunction g1_256(x) {\\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\\n}\\nexports.g1_256 = g1_256;\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/sha/common.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/utils.js\":\n/*!*********************************************************************************!*\\\n !*** ./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/utils.js ***!\n \\*********************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar assert = __webpack_require__(/*! minimalistic-assert */ \\\"./node_modules/minimalistic-assert/index.js\\\");\\nvar inherits = __webpack_require__(/*! inherits */ \\\"./node_modules/inherits/inherits_browser.js\\\");\\n\\nexports.inherits = inherits;\\n\\nfunction toArray(msg, enc) {\\n if (Array.isArray(msg))\\n return msg.slice();\\n if (!msg)\\n return [];\\n var res = [];\\n if (typeof msg === 'string') {\\n if (!enc) {\\n for (var i = 0; i < msg.length; i++) {\\n var c = msg.charCodeAt(i);\\n var hi = c >> 8;\\n var lo = c & 0xff;\\n if (hi)\\n res.push(hi, lo);\\n else\\n res.push(lo);\\n }\\n } else if (enc === 'hex') {\\n msg = msg.replace(/[^a-z0-9]+/ig, '');\\n if (msg.length % 2 !== 0)\\n msg = '0' + msg;\\n for (i = 0; i < msg.length; i += 2)\\n res.push(parseInt(msg[i] + msg[i + 1], 16));\\n }\\n } else {\\n for (i = 0; i < msg.length; i++)\\n res[i] = msg[i] | 0;\\n }\\n return res;\\n}\\nexports.toArray = toArray;\\n\\nfunction toHex(msg) {\\n var res = '';\\n for (var i = 0; i < msg.length; i++)\\n res += zero2(msg[i].toString(16));\\n return res;\\n}\\nexports.toHex = toHex;\\n\\nfunction htonl(w) {\\n var res = (w >>> 24) |\\n ((w >>> 8) & 0xff00) |\\n ((w << 8) & 0xff0000) |\\n ((w & 0xff) << 24);\\n return res >>> 0;\\n}\\nexports.htonl = htonl;\\n\\nfunction toHex32(msg, endian) {\\n var res = '';\\n for (var i = 0; i < msg.length; i++) {\\n var w = msg[i];\\n if (endian === 'little')\\n w = htonl(w);\\n res += zero8(w.toString(16));\\n }\\n return res;\\n}\\nexports.toHex32 = toHex32;\\n\\nfunction zero2(word) {\\n if (word.length === 1)\\n return '0' + word;\\n else\\n return word;\\n}\\nexports.zero2 = zero2;\\n\\nfunction zero8(word) {\\n if (word.length === 7)\\n return '0' + word;\\n else if (word.length === 6)\\n return '00' + word;\\n else if (word.length === 5)\\n return '000' + word;\\n else if (word.length === 4)\\n return '0000' + word;\\n else if (word.length === 3)\\n return '00000' + word;\\n else if (word.length === 2)\\n return '000000' + word;\\n else if (word.length === 1)\\n return '0000000' + word;\\n else\\n return word;\\n}\\nexports.zero8 = zero8;\\n\\nfunction join32(msg, start, end, endian) {\\n var len = end - start;\\n assert(len % 4 === 0);\\n var res = new Array(len / 4);\\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\\n var w;\\n if (endian === 'big')\\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\\n else\\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\\n res[i] = w >>> 0;\\n }\\n return res;\\n}\\nexports.join32 = join32;\\n\\nfunction split32(msg, endian) {\\n var res = new Array(msg.length * 4);\\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\\n var m = msg[i];\\n if (endian === 'big') {\\n res[k] = m >>> 24;\\n res[k + 1] = (m >>> 16) & 0xff;\\n res[k + 2] = (m >>> 8) & 0xff;\\n res[k + 3] = m & 0xff;\\n } else {\\n res[k + 3] = m >>> 24;\\n res[k + 2] = (m >>> 16) & 0xff;\\n res[k + 1] = (m >>> 8) & 0xff;\\n res[k] = m & 0xff;\\n }\\n }\\n return res;\\n}\\nexports.split32 = split32;\\n\\nfunction rotr32(w, b) {\\n return (w >>> b) | (w << (32 - b));\\n}\\nexports.rotr32 = rotr32;\\n\\nfunction rotl32(w, b) {\\n return (w << b) | (w >>> (32 - b));\\n}\\nexports.rotl32 = rotl32;\\n\\nfunction sum32(a, b) {\\n return (a + b) >>> 0;\\n}\\nexports.sum32 = sum32;\\n\\nfunction sum32_3(a, b, c) {\\n return (a + b + c) >>> 0;\\n}\\nexports.sum32_3 = sum32_3;\\n\\nfunction sum32_4(a, b, c, d) {\\n return (a + b + c + d) >>> 0;\\n}\\nexports.sum32_4 = sum32_4;\\n\\nfunction sum32_5(a, b, c, d, e) {\\n return (a + b + c + d + e) >>> 0;\\n}\\nexports.sum32_5 = sum32_5;\\n\\nfunction sum64(buf, pos, ah, al) {\\n var bh = buf[pos];\\n var bl = buf[pos + 1];\\n\\n var lo = (al + bl) >>> 0;\\n var hi = (lo < al ? 1 : 0) + ah + bh;\\n buf[pos] = hi >>> 0;\\n buf[pos + 1] = lo;\\n}\\nexports.sum64 = sum64;\\n\\nfunction sum64_hi(ah, al, bh, bl) {\\n var lo = (al + bl) >>> 0;\\n var hi = (lo < al ? 1 : 0) + ah + bh;\\n return hi >>> 0;\\n}\\nexports.sum64_hi = sum64_hi;\\n\\nfunction sum64_lo(ah, al, bh, bl) {\\n var lo = al + bl;\\n return lo >>> 0;\\n}\\nexports.sum64_lo = sum64_lo;\\n\\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\\n var carry = 0;\\n var lo = al;\\n lo = (lo + bl) >>> 0;\\n carry += lo < al ? 1 : 0;\\n lo = (lo + cl) >>> 0;\\n carry += lo < cl ? 1 : 0;\\n lo = (lo + dl) >>> 0;\\n carry += lo < dl ? 1 : 0;\\n\\n var hi = ah + bh + ch + dh + carry;\\n return hi >>> 0;\\n}\\nexports.sum64_4_hi = sum64_4_hi;\\n\\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\\n var lo = al + bl + cl + dl;\\n return lo >>> 0;\\n}\\nexports.sum64_4_lo = sum64_4_lo;\\n\\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\\n var carry = 0;\\n var lo = al;\\n lo = (lo + bl) >>> 0;\\n carry += lo < al ? 1 : 0;\\n lo = (lo + cl) >>> 0;\\n carry += lo < cl ? 1 : 0;\\n lo = (lo + dl) >>> 0;\\n carry += lo < dl ? 1 : 0;\\n lo = (lo + el) >>> 0;\\n carry += lo < el ? 1 : 0;\\n\\n var hi = ah + bh + ch + dh + eh + carry;\\n return hi >>> 0;\\n}\\nexports.sum64_5_hi = sum64_5_hi;\\n\\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\\n var lo = al + bl + cl + dl + el;\\n\\n return lo >>> 0;\\n}\\nexports.sum64_5_lo = sum64_5_lo;\\n\\nfunction rotr64_hi(ah, al, num) {\\n var r = (al << (32 - num)) | (ah >>> num);\\n return r >>> 0;\\n}\\nexports.rotr64_hi = rotr64_hi;\\n\\nfunction rotr64_lo(ah, al, num) {\\n var r = (ah << (32 - num)) | (al >>> num);\\n return r >>> 0;\\n}\\nexports.rotr64_lo = rotr64_lo;\\n\\nfunction shr64_hi(ah, al, num) {\\n return ah >>> num;\\n}\\nexports.shr64_hi = shr64_hi;\\n\\nfunction shr64_lo(ah, al, num) {\\n var r = (ah << (32 - num)) | (al >>> num);\\n return r >>> 0;\\n}\\nexports.shr64_lo = shr64_lo;\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/sha2/node_modules/hash.js/lib/hash/utils.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/signing-key/lib.esm/_version.js\":\n/*!*********************************************************************!*\\\n !*** ./node_modules/@ethersproject/signing-key/lib.esm/_version.js ***!\n \\*********************************************************************/\n/*! exports provided: version */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"version\\\", function() { return version; });\\nconst version = \\\"signing-key/5.0.0-beta.135\\\";\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/signing-key/lib.esm/_version.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/signing-key/lib.esm/index.js\":\n/*!******************************************************************!*\\\n !*** ./node_modules/@ethersproject/signing-key/lib.esm/index.js ***!\n \\******************************************************************/\n/*! exports provided: SigningKey, recoverPublicKey, computePublicKey */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"SigningKey\\\", function() { return SigningKey; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"recoverPublicKey\\\", function() { return recoverPublicKey; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"computePublicKey\\\", function() { return computePublicKey; });\\n/* harmony import */ var elliptic__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! elliptic */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic.js\\\");\\n/* harmony import */ var elliptic__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(elliptic__WEBPACK_IMPORTED_MODULE_0__);\\n/* harmony import */ var _ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @ethersproject/bytes */ \\\"./node_modules/@ethersproject/bytes/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_properties__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @ethersproject/properties */ \\\"./node_modules/@ethersproject/properties/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_logger__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @ethersproject/logger */ \\\"./node_modules/@ethersproject/logger/lib.esm/index.js\\\");\\n/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./_version */ \\\"./node_modules/@ethersproject/signing-key/lib.esm/_version.js\\\");\\n\\n\\n\\n\\n\\n\\nconst logger = new _ethersproject_logger__WEBPACK_IMPORTED_MODULE_3__[\\\"Logger\\\"](_version__WEBPACK_IMPORTED_MODULE_4__[\\\"version\\\"]);\\nlet _curve = null;\\nfunction getCurve() {\\n if (!_curve) {\\n _curve = new elliptic__WEBPACK_IMPORTED_MODULE_0__[\\\"ec\\\"](\\\"secp256k1\\\");\\n }\\n return _curve;\\n}\\nclass SigningKey {\\n constructor(privateKey) {\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_2__[\\\"defineReadOnly\\\"])(this, \\\"curve\\\", \\\"secp256k1\\\");\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_2__[\\\"defineReadOnly\\\"])(this, \\\"privateKey\\\", Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexlify\\\"])(privateKey));\\n const keyPair = getCurve().keyFromPrivate(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"arrayify\\\"])(this.privateKey));\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_2__[\\\"defineReadOnly\\\"])(this, \\\"publicKey\\\", \\\"0x\\\" + keyPair.getPublic(false, \\\"hex\\\"));\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_2__[\\\"defineReadOnly\\\"])(this, \\\"compressedPublicKey\\\", \\\"0x\\\" + keyPair.getPublic(true, \\\"hex\\\"));\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_2__[\\\"defineReadOnly\\\"])(this, \\\"_isSigningKey\\\", true);\\n }\\n _addPoint(other) {\\n const p0 = getCurve().keyFromPublic(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"arrayify\\\"])(this.publicKey));\\n const p1 = getCurve().keyFromPublic(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"arrayify\\\"])(other));\\n return \\\"0x\\\" + p0.pub.add(p1.pub).encodeCompressed(\\\"hex\\\");\\n }\\n signDigest(digest) {\\n const keyPair = getCurve().keyFromPrivate(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"arrayify\\\"])(this.privateKey));\\n const signature = keyPair.sign(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"arrayify\\\"])(digest), { canonical: true });\\n return Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"splitSignature\\\"])({\\n recoveryParam: signature.recoveryParam,\\n r: Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexZeroPad\\\"])(\\\"0x\\\" + signature.r.toString(16), 32),\\n s: Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexZeroPad\\\"])(\\\"0x\\\" + signature.s.toString(16), 32),\\n });\\n }\\n computeSharedSecret(otherKey) {\\n const keyPair = getCurve().keyFromPrivate(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"arrayify\\\"])(this.privateKey));\\n const otherKeyPair = getCurve().keyFromPublic(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"arrayify\\\"])(computePublicKey(otherKey)));\\n return Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexZeroPad\\\"])(\\\"0x\\\" + keyPair.derive(otherKeyPair.getPublic()).toString(16), 32);\\n }\\n static isSigningKey(value) {\\n return !!(value && value._isSigningKey);\\n }\\n}\\nfunction recoverPublicKey(digest, signature) {\\n const sig = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"splitSignature\\\"])(signature);\\n const rs = { r: Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"arrayify\\\"])(sig.r), s: Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"arrayify\\\"])(sig.s) };\\n return \\\"0x\\\" + getCurve().recoverPubKey(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"arrayify\\\"])(digest), rs, sig.recoveryParam).encode(\\\"hex\\\", false);\\n}\\nfunction computePublicKey(key, compressed) {\\n const bytes = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"arrayify\\\"])(key);\\n if (bytes.length === 32) {\\n const signingKey = new SigningKey(bytes);\\n if (compressed) {\\n return \\\"0x\\\" + getCurve().keyFromPrivate(bytes).getPublic(true, \\\"hex\\\");\\n }\\n return signingKey.publicKey;\\n }\\n else if (bytes.length === 33) {\\n if (compressed) {\\n return Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexlify\\\"])(bytes);\\n }\\n return \\\"0x\\\" + getCurve().keyFromPublic(bytes).getPublic(false, \\\"hex\\\");\\n }\\n else if (bytes.length === 65) {\\n if (!compressed) {\\n return Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexlify\\\"])(bytes);\\n }\\n return \\\"0x\\\" + getCurve().keyFromPublic(bytes).getPublic(true, \\\"hex\\\");\\n }\\n return logger.throwArgumentError(\\\"invalid public or private key\\\", \\\"key\\\", \\\"[REDACTED]\\\");\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/signing-key/lib.esm/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic.js\":\n/*!***************************************************************************************!*\\\n !*** ./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic.js ***!\n \\***************************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar elliptic = exports;\\n\\nelliptic.version = __webpack_require__(/*! ../package.json */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/package.json\\\").version;\\nelliptic.utils = __webpack_require__(/*! ./elliptic/utils */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/utils.js\\\");\\nelliptic.rand = __webpack_require__(/*! brorand */ \\\"./node_modules/brorand/index.js\\\");\\nelliptic.curve = __webpack_require__(/*! ./elliptic/curve */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/index.js\\\");\\nelliptic.curves = __webpack_require__(/*! ./elliptic/curves */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curves.js\\\");\\n\\n// Protocols\\nelliptic.ec = __webpack_require__(/*! ./elliptic/ec */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/ec/index.js\\\");\\nelliptic.eddsa = __webpack_require__(/*! ./elliptic/eddsa */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/eddsa/index.js\\\");\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/base.js\":\n/*!**************************************************************************************************!*\\\n !*** ./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/base.js ***!\n \\**************************************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar BN = __webpack_require__(/*! bn.js */ \\\"./node_modules/bn.js/lib/bn.js\\\");\\nvar utils = __webpack_require__(/*! ../utils */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/utils.js\\\");\\nvar getNAF = utils.getNAF;\\nvar getJSF = utils.getJSF;\\nvar assert = utils.assert;\\n\\nfunction BaseCurve(type, conf) {\\n this.type = type;\\n this.p = new BN(conf.p, 16);\\n\\n // Use Montgomery, when there is no fast reduction for the prime\\n this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);\\n\\n // Useful for many curves\\n this.zero = new BN(0).toRed(this.red);\\n this.one = new BN(1).toRed(this.red);\\n this.two = new BN(2).toRed(this.red);\\n\\n // Curve configuration, optional\\n this.n = conf.n && new BN(conf.n, 16);\\n this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);\\n\\n // Temporary arrays\\n this._wnafT1 = new Array(4);\\n this._wnafT2 = new Array(4);\\n this._wnafT3 = new Array(4);\\n this._wnafT4 = new Array(4);\\n\\n this._bitLength = this.n ? this.n.bitLength() : 0;\\n\\n // Generalized Greg Maxwell's trick\\n var adjustCount = this.n && this.p.div(this.n);\\n if (!adjustCount || adjustCount.cmpn(100) > 0) {\\n this.redN = null;\\n } else {\\n this._maxwellTrick = true;\\n this.redN = this.n.toRed(this.red);\\n }\\n}\\nmodule.exports = BaseCurve;\\n\\nBaseCurve.prototype.point = function point() {\\n throw new Error('Not implemented');\\n};\\n\\nBaseCurve.prototype.validate = function validate() {\\n throw new Error('Not implemented');\\n};\\n\\nBaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {\\n assert(p.precomputed);\\n var doubles = p._getDoubles();\\n\\n var naf = getNAF(k, 1, this._bitLength);\\n var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);\\n I /= 3;\\n\\n // Translate into more windowed form\\n var repr = [];\\n for (var j = 0; j < naf.length; j += doubles.step) {\\n var nafW = 0;\\n for (var k = j + doubles.step - 1; k >= j; k--)\\n nafW = (nafW << 1) + naf[k];\\n repr.push(nafW);\\n }\\n\\n var a = this.jpoint(null, null, null);\\n var b = this.jpoint(null, null, null);\\n for (var i = I; i > 0; i--) {\\n for (var j = 0; j < repr.length; j++) {\\n var nafW = repr[j];\\n if (nafW === i)\\n b = b.mixedAdd(doubles.points[j]);\\n else if (nafW === -i)\\n b = b.mixedAdd(doubles.points[j].neg());\\n }\\n a = a.add(b);\\n }\\n return a.toP();\\n};\\n\\nBaseCurve.prototype._wnafMul = function _wnafMul(p, k) {\\n var w = 4;\\n\\n // Precompute window\\n var nafPoints = p._getNAFPoints(w);\\n w = nafPoints.wnd;\\n var wnd = nafPoints.points;\\n\\n // Get NAF form\\n var naf = getNAF(k, w, this._bitLength);\\n\\n // Add `this`*(N+1) for every w-NAF index\\n var acc = this.jpoint(null, null, null);\\n for (var i = naf.length - 1; i >= 0; i--) {\\n // Count zeroes\\n for (var k = 0; i >= 0 && naf[i] === 0; i--)\\n k++;\\n if (i >= 0)\\n k++;\\n acc = acc.dblp(k);\\n\\n if (i < 0)\\n break;\\n var z = naf[i];\\n assert(z !== 0);\\n if (p.type === 'affine') {\\n // J +- P\\n if (z > 0)\\n acc = acc.mixedAdd(wnd[(z - 1) >> 1]);\\n else\\n acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());\\n } else {\\n // J +- J\\n if (z > 0)\\n acc = acc.add(wnd[(z - 1) >> 1]);\\n else\\n acc = acc.add(wnd[(-z - 1) >> 1].neg());\\n }\\n }\\n return p.type === 'affine' ? acc.toP() : acc;\\n};\\n\\nBaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,\\n points,\\n coeffs,\\n len,\\n jacobianResult) {\\n var wndWidth = this._wnafT1;\\n var wnd = this._wnafT2;\\n var naf = this._wnafT3;\\n\\n // Fill all arrays\\n var max = 0;\\n for (var i = 0; i < len; i++) {\\n var p = points[i];\\n var nafPoints = p._getNAFPoints(defW);\\n wndWidth[i] = nafPoints.wnd;\\n wnd[i] = nafPoints.points;\\n }\\n\\n // Comb small window NAFs\\n for (var i = len - 1; i >= 1; i -= 2) {\\n var a = i - 1;\\n var b = i;\\n if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {\\n naf[a] = getNAF(coeffs[a], wndWidth[a], this._bitLength);\\n naf[b] = getNAF(coeffs[b], wndWidth[b], this._bitLength);\\n max = Math.max(naf[a].length, max);\\n max = Math.max(naf[b].length, max);\\n continue;\\n }\\n\\n var comb = [\\n points[a], /* 1 */\\n null, /* 3 */\\n null, /* 5 */\\n points[b] /* 7 */\\n ];\\n\\n // Try to avoid Projective points, if possible\\n if (points[a].y.cmp(points[b].y) === 0) {\\n comb[1] = points[a].add(points[b]);\\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\\n } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {\\n comb[1] = points[a].toJ().mixedAdd(points[b]);\\n comb[2] = points[a].add(points[b].neg());\\n } else {\\n comb[1] = points[a].toJ().mixedAdd(points[b]);\\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\\n }\\n\\n var index = [\\n -3, /* -1 -1 */\\n -1, /* -1 0 */\\n -5, /* -1 1 */\\n -7, /* 0 -1 */\\n 0, /* 0 0 */\\n 7, /* 0 1 */\\n 5, /* 1 -1 */\\n 1, /* 1 0 */\\n 3 /* 1 1 */\\n ];\\n\\n var jsf = getJSF(coeffs[a], coeffs[b]);\\n max = Math.max(jsf[0].length, max);\\n naf[a] = new Array(max);\\n naf[b] = new Array(max);\\n for (var j = 0; j < max; j++) {\\n var ja = jsf[0][j] | 0;\\n var jb = jsf[1][j] | 0;\\n\\n naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];\\n naf[b][j] = 0;\\n wnd[a] = comb;\\n }\\n }\\n\\n var acc = this.jpoint(null, null, null);\\n var tmp = this._wnafT4;\\n for (var i = max; i >= 0; i--) {\\n var k = 0;\\n\\n while (i >= 0) {\\n var zero = true;\\n for (var j = 0; j < len; j++) {\\n tmp[j] = naf[j][i] | 0;\\n if (tmp[j] !== 0)\\n zero = false;\\n }\\n if (!zero)\\n break;\\n k++;\\n i--;\\n }\\n if (i >= 0)\\n k++;\\n acc = acc.dblp(k);\\n if (i < 0)\\n break;\\n\\n for (var j = 0; j < len; j++) {\\n var z = tmp[j];\\n var p;\\n if (z === 0)\\n continue;\\n else if (z > 0)\\n p = wnd[j][(z - 1) >> 1];\\n else if (z < 0)\\n p = wnd[j][(-z - 1) >> 1].neg();\\n\\n if (p.type === 'affine')\\n acc = acc.mixedAdd(p);\\n else\\n acc = acc.add(p);\\n }\\n }\\n // Zeroify references\\n for (var i = 0; i < len; i++)\\n wnd[i] = null;\\n\\n if (jacobianResult)\\n return acc;\\n else\\n return acc.toP();\\n};\\n\\nfunction BasePoint(curve, type) {\\n this.curve = curve;\\n this.type = type;\\n this.precomputed = null;\\n}\\nBaseCurve.BasePoint = BasePoint;\\n\\nBasePoint.prototype.eq = function eq(/*other*/) {\\n throw new Error('Not implemented');\\n};\\n\\nBasePoint.prototype.validate = function validate() {\\n return this.curve.validate(this);\\n};\\n\\nBaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\\n bytes = utils.toArray(bytes, enc);\\n\\n var len = this.p.byteLength();\\n\\n // uncompressed, hybrid-odd, hybrid-even\\n if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&\\n bytes.length - 1 === 2 * len) {\\n if (bytes[0] === 0x06)\\n assert(bytes[bytes.length - 1] % 2 === 0);\\n else if (bytes[0] === 0x07)\\n assert(bytes[bytes.length - 1] % 2 === 1);\\n\\n var res = this.point(bytes.slice(1, 1 + len),\\n bytes.slice(1 + len, 1 + 2 * len));\\n\\n return res;\\n } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&\\n bytes.length - 1 === len) {\\n return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);\\n }\\n throw new Error('Unknown point format');\\n};\\n\\nBasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {\\n return this.encode(enc, true);\\n};\\n\\nBasePoint.prototype._encode = function _encode(compact) {\\n var len = this.curve.p.byteLength();\\n var x = this.getX().toArray('be', len);\\n\\n if (compact)\\n return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);\\n\\n return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;\\n};\\n\\nBasePoint.prototype.encode = function encode(enc, compact) {\\n return utils.encode(this._encode(compact), enc);\\n};\\n\\nBasePoint.prototype.precompute = function precompute(power) {\\n if (this.precomputed)\\n return this;\\n\\n var precomputed = {\\n doubles: null,\\n naf: null,\\n beta: null\\n };\\n precomputed.naf = this._getNAFPoints(8);\\n precomputed.doubles = this._getDoubles(4, power);\\n precomputed.beta = this._getBeta();\\n this.precomputed = precomputed;\\n\\n return this;\\n};\\n\\nBasePoint.prototype._hasDoubles = function _hasDoubles(k) {\\n if (!this.precomputed)\\n return false;\\n\\n var doubles = this.precomputed.doubles;\\n if (!doubles)\\n return false;\\n\\n return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);\\n};\\n\\nBasePoint.prototype._getDoubles = function _getDoubles(step, power) {\\n if (this.precomputed && this.precomputed.doubles)\\n return this.precomputed.doubles;\\n\\n var doubles = [ this ];\\n var acc = this;\\n for (var i = 0; i < power; i += step) {\\n for (var j = 0; j < step; j++)\\n acc = acc.dbl();\\n doubles.push(acc);\\n }\\n return {\\n step: step,\\n points: doubles\\n };\\n};\\n\\nBasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {\\n if (this.precomputed && this.precomputed.naf)\\n return this.precomputed.naf;\\n\\n var res = [ this ];\\n var max = (1 << wnd) - 1;\\n var dbl = max === 1 ? null : this.dbl();\\n for (var i = 1; i < max; i++)\\n res[i] = res[i - 1].add(dbl);\\n return {\\n wnd: wnd,\\n points: res\\n };\\n};\\n\\nBasePoint.prototype._getBeta = function _getBeta() {\\n return null;\\n};\\n\\nBasePoint.prototype.dblp = function dblp(k) {\\n var r = this;\\n for (var i = 0; i < k; i++)\\n r = r.dbl();\\n return r;\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/base.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/edwards.js\":\n/*!*****************************************************************************************************!*\\\n !*** ./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/edwards.js ***!\n \\*****************************************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar utils = __webpack_require__(/*! ../utils */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/utils.js\\\");\\nvar BN = __webpack_require__(/*! bn.js */ \\\"./node_modules/bn.js/lib/bn.js\\\");\\nvar inherits = __webpack_require__(/*! inherits */ \\\"./node_modules/inherits/inherits_browser.js\\\");\\nvar Base = __webpack_require__(/*! ./base */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/base.js\\\");\\n\\nvar assert = utils.assert;\\n\\nfunction EdwardsCurve(conf) {\\n // NOTE: Important as we are creating point in Base.call()\\n this.twisted = (conf.a | 0) !== 1;\\n this.mOneA = this.twisted && (conf.a | 0) === -1;\\n this.extended = this.mOneA;\\n\\n Base.call(this, 'edwards', conf);\\n\\n this.a = new BN(conf.a, 16).umod(this.red.m);\\n this.a = this.a.toRed(this.red);\\n this.c = new BN(conf.c, 16).toRed(this.red);\\n this.c2 = this.c.redSqr();\\n this.d = new BN(conf.d, 16).toRed(this.red);\\n this.dd = this.d.redAdd(this.d);\\n\\n assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);\\n this.oneC = (conf.c | 0) === 1;\\n}\\ninherits(EdwardsCurve, Base);\\nmodule.exports = EdwardsCurve;\\n\\nEdwardsCurve.prototype._mulA = function _mulA(num) {\\n if (this.mOneA)\\n return num.redNeg();\\n else\\n return this.a.redMul(num);\\n};\\n\\nEdwardsCurve.prototype._mulC = function _mulC(num) {\\n if (this.oneC)\\n return num;\\n else\\n return this.c.redMul(num);\\n};\\n\\n// Just for compatibility with Short curve\\nEdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {\\n return this.point(x, y, z, t);\\n};\\n\\nEdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {\\n x = new BN(x, 16);\\n if (!x.red)\\n x = x.toRed(this.red);\\n\\n var x2 = x.redSqr();\\n var rhs = this.c2.redSub(this.a.redMul(x2));\\n var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));\\n\\n var y2 = rhs.redMul(lhs.redInvm());\\n var y = y2.redSqrt();\\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\\n throw new Error('invalid point');\\n\\n var isOdd = y.fromRed().isOdd();\\n if (odd && !isOdd || !odd && isOdd)\\n y = y.redNeg();\\n\\n return this.point(x, y);\\n};\\n\\nEdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {\\n y = new BN(y, 16);\\n if (!y.red)\\n y = y.toRed(this.red);\\n\\n // x^2 = (y^2 - c^2) / (c^2 d y^2 - a)\\n var y2 = y.redSqr();\\n var lhs = y2.redSub(this.c2);\\n var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a);\\n var x2 = lhs.redMul(rhs.redInvm());\\n\\n if (x2.cmp(this.zero) === 0) {\\n if (odd)\\n throw new Error('invalid point');\\n else\\n return this.point(this.zero, y);\\n }\\n\\n var x = x2.redSqrt();\\n if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)\\n throw new Error('invalid point');\\n\\n if (x.fromRed().isOdd() !== odd)\\n x = x.redNeg();\\n\\n return this.point(x, y);\\n};\\n\\nEdwardsCurve.prototype.validate = function validate(point) {\\n if (point.isInfinity())\\n return true;\\n\\n // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)\\n point.normalize();\\n\\n var x2 = point.x.redSqr();\\n var y2 = point.y.redSqr();\\n var lhs = x2.redMul(this.a).redAdd(y2);\\n var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));\\n\\n return lhs.cmp(rhs) === 0;\\n};\\n\\nfunction Point(curve, x, y, z, t) {\\n Base.BasePoint.call(this, curve, 'projective');\\n if (x === null && y === null && z === null) {\\n this.x = this.curve.zero;\\n this.y = this.curve.one;\\n this.z = this.curve.one;\\n this.t = this.curve.zero;\\n this.zOne = true;\\n } else {\\n this.x = new BN(x, 16);\\n this.y = new BN(y, 16);\\n this.z = z ? new BN(z, 16) : this.curve.one;\\n this.t = t && new BN(t, 16);\\n if (!this.x.red)\\n this.x = this.x.toRed(this.curve.red);\\n if (!this.y.red)\\n this.y = this.y.toRed(this.curve.red);\\n if (!this.z.red)\\n this.z = this.z.toRed(this.curve.red);\\n if (this.t && !this.t.red)\\n this.t = this.t.toRed(this.curve.red);\\n this.zOne = this.z === this.curve.one;\\n\\n // Use extended coordinates\\n if (this.curve.extended && !this.t) {\\n this.t = this.x.redMul(this.y);\\n if (!this.zOne)\\n this.t = this.t.redMul(this.z.redInvm());\\n }\\n }\\n}\\ninherits(Point, Base.BasePoint);\\n\\nEdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\\n return Point.fromJSON(this, obj);\\n};\\n\\nEdwardsCurve.prototype.point = function point(x, y, z, t) {\\n return new Point(this, x, y, z, t);\\n};\\n\\nPoint.fromJSON = function fromJSON(curve, obj) {\\n return new Point(curve, obj[0], obj[1], obj[2]);\\n};\\n\\nPoint.prototype.inspect = function inspect() {\\n if (this.isInfinity())\\n return '<EC Point Infinity>';\\n return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\\n ' y: ' + this.y.fromRed().toString(16, 2) +\\n ' z: ' + this.z.fromRed().toString(16, 2) + '>';\\n};\\n\\nPoint.prototype.isInfinity = function isInfinity() {\\n // XXX This code assumes that zero is always zero in red\\n return this.x.cmpn(0) === 0 &&\\n (this.y.cmp(this.z) === 0 ||\\n (this.zOne && this.y.cmp(this.curve.c) === 0));\\n};\\n\\nPoint.prototype._extDbl = function _extDbl() {\\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\\n // #doubling-dbl-2008-hwcd\\n // 4M + 4S\\n\\n // A = X1^2\\n var a = this.x.redSqr();\\n // B = Y1^2\\n var b = this.y.redSqr();\\n // C = 2 * Z1^2\\n var c = this.z.redSqr();\\n c = c.redIAdd(c);\\n // D = a * A\\n var d = this.curve._mulA(a);\\n // E = (X1 + Y1)^2 - A - B\\n var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);\\n // G = D + B\\n var g = d.redAdd(b);\\n // F = G - C\\n var f = g.redSub(c);\\n // H = D - B\\n var h = d.redSub(b);\\n // X3 = E * F\\n var nx = e.redMul(f);\\n // Y3 = G * H\\n var ny = g.redMul(h);\\n // T3 = E * H\\n var nt = e.redMul(h);\\n // Z3 = F * G\\n var nz = f.redMul(g);\\n return this.curve.point(nx, ny, nz, nt);\\n};\\n\\nPoint.prototype._projDbl = function _projDbl() {\\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\\n // #doubling-dbl-2008-bbjlp\\n // #doubling-dbl-2007-bl\\n // and others\\n // Generally 3M + 4S or 2M + 4S\\n\\n // B = (X1 + Y1)^2\\n var b = this.x.redAdd(this.y).redSqr();\\n // C = X1^2\\n var c = this.x.redSqr();\\n // D = Y1^2\\n var d = this.y.redSqr();\\n\\n var nx;\\n var ny;\\n var nz;\\n if (this.curve.twisted) {\\n // E = a * C\\n var e = this.curve._mulA(c);\\n // F = E + D\\n var f = e.redAdd(d);\\n if (this.zOne) {\\n // X3 = (B - C - D) * (F - 2)\\n nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));\\n // Y3 = F * (E - D)\\n ny = f.redMul(e.redSub(d));\\n // Z3 = F^2 - 2 * F\\n nz = f.redSqr().redSub(f).redSub(f);\\n } else {\\n // H = Z1^2\\n var h = this.z.redSqr();\\n // J = F - 2 * H\\n var j = f.redSub(h).redISub(h);\\n // X3 = (B-C-D)*J\\n nx = b.redSub(c).redISub(d).redMul(j);\\n // Y3 = F * (E - D)\\n ny = f.redMul(e.redSub(d));\\n // Z3 = F * J\\n nz = f.redMul(j);\\n }\\n } else {\\n // E = C + D\\n var e = c.redAdd(d);\\n // H = (c * Z1)^2\\n var h = this.curve._mulC(this.z).redSqr();\\n // J = E - 2 * H\\n var j = e.redSub(h).redSub(h);\\n // X3 = c * (B - E) * J\\n nx = this.curve._mulC(b.redISub(e)).redMul(j);\\n // Y3 = c * E * (C - D)\\n ny = this.curve._mulC(e).redMul(c.redISub(d));\\n // Z3 = E * J\\n nz = e.redMul(j);\\n }\\n return this.curve.point(nx, ny, nz);\\n};\\n\\nPoint.prototype.dbl = function dbl() {\\n if (this.isInfinity())\\n return this;\\n\\n // Double in extended coordinates\\n if (this.curve.extended)\\n return this._extDbl();\\n else\\n return this._projDbl();\\n};\\n\\nPoint.prototype._extAdd = function _extAdd(p) {\\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\\n // #addition-add-2008-hwcd-3\\n // 8M\\n\\n // A = (Y1 - X1) * (Y2 - X2)\\n var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));\\n // B = (Y1 + X1) * (Y2 + X2)\\n var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));\\n // C = T1 * k * T2\\n var c = this.t.redMul(this.curve.dd).redMul(p.t);\\n // D = Z1 * 2 * Z2\\n var d = this.z.redMul(p.z.redAdd(p.z));\\n // E = B - A\\n var e = b.redSub(a);\\n // F = D - C\\n var f = d.redSub(c);\\n // G = D + C\\n var g = d.redAdd(c);\\n // H = B + A\\n var h = b.redAdd(a);\\n // X3 = E * F\\n var nx = e.redMul(f);\\n // Y3 = G * H\\n var ny = g.redMul(h);\\n // T3 = E * H\\n var nt = e.redMul(h);\\n // Z3 = F * G\\n var nz = f.redMul(g);\\n return this.curve.point(nx, ny, nz, nt);\\n};\\n\\nPoint.prototype._projAdd = function _projAdd(p) {\\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\\n // #addition-add-2008-bbjlp\\n // #addition-add-2007-bl\\n // 10M + 1S\\n\\n // A = Z1 * Z2\\n var a = this.z.redMul(p.z);\\n // B = A^2\\n var b = a.redSqr();\\n // C = X1 * X2\\n var c = this.x.redMul(p.x);\\n // D = Y1 * Y2\\n var d = this.y.redMul(p.y);\\n // E = d * C * D\\n var e = this.curve.d.redMul(c).redMul(d);\\n // F = B - E\\n var f = b.redSub(e);\\n // G = B + E\\n var g = b.redAdd(e);\\n // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)\\n var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);\\n var nx = a.redMul(f).redMul(tmp);\\n var ny;\\n var nz;\\n if (this.curve.twisted) {\\n // Y3 = A * G * (D - a * C)\\n ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));\\n // Z3 = F * G\\n nz = f.redMul(g);\\n } else {\\n // Y3 = A * G * (D - C)\\n ny = a.redMul(g).redMul(d.redSub(c));\\n // Z3 = c * F * G\\n nz = this.curve._mulC(f).redMul(g);\\n }\\n return this.curve.point(nx, ny, nz);\\n};\\n\\nPoint.prototype.add = function add(p) {\\n if (this.isInfinity())\\n return p;\\n if (p.isInfinity())\\n return this;\\n\\n if (this.curve.extended)\\n return this._extAdd(p);\\n else\\n return this._projAdd(p);\\n};\\n\\nPoint.prototype.mul = function mul(k) {\\n if (this._hasDoubles(k))\\n return this.curve._fixedNafMul(this, k);\\n else\\n return this.curve._wnafMul(this, k);\\n};\\n\\nPoint.prototype.mulAdd = function mulAdd(k1, p, k2) {\\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);\\n};\\n\\nPoint.prototype.jmulAdd = function jmulAdd(k1, p, k2) {\\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);\\n};\\n\\nPoint.prototype.normalize = function normalize() {\\n if (this.zOne)\\n return this;\\n\\n // Normalize coordinates\\n var zi = this.z.redInvm();\\n this.x = this.x.redMul(zi);\\n this.y = this.y.redMul(zi);\\n if (this.t)\\n this.t = this.t.redMul(zi);\\n this.z = this.curve.one;\\n this.zOne = true;\\n return this;\\n};\\n\\nPoint.prototype.neg = function neg() {\\n return this.curve.point(this.x.redNeg(),\\n this.y,\\n this.z,\\n this.t && this.t.redNeg());\\n};\\n\\nPoint.prototype.getX = function getX() {\\n this.normalize();\\n return this.x.fromRed();\\n};\\n\\nPoint.prototype.getY = function getY() {\\n this.normalize();\\n return this.y.fromRed();\\n};\\n\\nPoint.prototype.eq = function eq(other) {\\n return this === other ||\\n this.getX().cmp(other.getX()) === 0 &&\\n this.getY().cmp(other.getY()) === 0;\\n};\\n\\nPoint.prototype.eqXToP = function eqXToP(x) {\\n var rx = x.toRed(this.curve.red).redMul(this.z);\\n if (this.x.cmp(rx) === 0)\\n return true;\\n\\n var xc = x.clone();\\n var t = this.curve.redN.redMul(this.z);\\n for (;;) {\\n xc.iadd(this.curve.n);\\n if (xc.cmp(this.curve.p) >= 0)\\n return false;\\n\\n rx.redIAdd(t);\\n if (this.x.cmp(rx) === 0)\\n return true;\\n }\\n};\\n\\n// Compatibility with BaseCurve\\nPoint.prototype.toP = Point.prototype.normalize;\\nPoint.prototype.mixedAdd = Point.prototype.add;\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/edwards.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/index.js\":\n/*!***************************************************************************************************!*\\\n !*** ./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/index.js ***!\n \\***************************************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar curve = exports;\\n\\ncurve.base = __webpack_require__(/*! ./base */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/base.js\\\");\\ncurve.short = __webpack_require__(/*! ./short */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/short.js\\\");\\ncurve.mont = __webpack_require__(/*! ./mont */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/mont.js\\\");\\ncurve.edwards = __webpack_require__(/*! ./edwards */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/edwards.js\\\");\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/mont.js\":\n/*!**************************************************************************************************!*\\\n !*** ./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/mont.js ***!\n \\**************************************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar BN = __webpack_require__(/*! bn.js */ \\\"./node_modules/bn.js/lib/bn.js\\\");\\nvar inherits = __webpack_require__(/*! inherits */ \\\"./node_modules/inherits/inherits_browser.js\\\");\\nvar Base = __webpack_require__(/*! ./base */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/base.js\\\");\\n\\nvar utils = __webpack_require__(/*! ../utils */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/utils.js\\\");\\n\\nfunction MontCurve(conf) {\\n Base.call(this, 'mont', conf);\\n\\n this.a = new BN(conf.a, 16).toRed(this.red);\\n this.b = new BN(conf.b, 16).toRed(this.red);\\n this.i4 = new BN(4).toRed(this.red).redInvm();\\n this.two = new BN(2).toRed(this.red);\\n this.a24 = this.i4.redMul(this.a.redAdd(this.two));\\n}\\ninherits(MontCurve, Base);\\nmodule.exports = MontCurve;\\n\\nMontCurve.prototype.validate = function validate(point) {\\n var x = point.normalize().x;\\n var x2 = x.redSqr();\\n var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);\\n var y = rhs.redSqrt();\\n\\n return y.redSqr().cmp(rhs) === 0;\\n};\\n\\nfunction Point(curve, x, z) {\\n Base.BasePoint.call(this, curve, 'projective');\\n if (x === null && z === null) {\\n this.x = this.curve.one;\\n this.z = this.curve.zero;\\n } else {\\n this.x = new BN(x, 16);\\n this.z = new BN(z, 16);\\n if (!this.x.red)\\n this.x = this.x.toRed(this.curve.red);\\n if (!this.z.red)\\n this.z = this.z.toRed(this.curve.red);\\n }\\n}\\ninherits(Point, Base.BasePoint);\\n\\nMontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\\n return this.point(utils.toArray(bytes, enc), 1);\\n};\\n\\nMontCurve.prototype.point = function point(x, z) {\\n return new Point(this, x, z);\\n};\\n\\nMontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\\n return Point.fromJSON(this, obj);\\n};\\n\\nPoint.prototype.precompute = function precompute() {\\n // No-op\\n};\\n\\nPoint.prototype._encode = function _encode() {\\n return this.getX().toArray('be', this.curve.p.byteLength());\\n};\\n\\nPoint.fromJSON = function fromJSON(curve, obj) {\\n return new Point(curve, obj[0], obj[1] || curve.one);\\n};\\n\\nPoint.prototype.inspect = function inspect() {\\n if (this.isInfinity())\\n return '<EC Point Infinity>';\\n return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\\n ' z: ' + this.z.fromRed().toString(16, 2) + '>';\\n};\\n\\nPoint.prototype.isInfinity = function isInfinity() {\\n // XXX This code assumes that zero is always zero in red\\n return this.z.cmpn(0) === 0;\\n};\\n\\nPoint.prototype.dbl = function dbl() {\\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3\\n // 2M + 2S + 4A\\n\\n // A = X1 + Z1\\n var a = this.x.redAdd(this.z);\\n // AA = A^2\\n var aa = a.redSqr();\\n // B = X1 - Z1\\n var b = this.x.redSub(this.z);\\n // BB = B^2\\n var bb = b.redSqr();\\n // C = AA - BB\\n var c = aa.redSub(bb);\\n // X3 = AA * BB\\n var nx = aa.redMul(bb);\\n // Z3 = C * (BB + A24 * C)\\n var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));\\n return this.curve.point(nx, nz);\\n};\\n\\nPoint.prototype.add = function add() {\\n throw new Error('Not supported on Montgomery curve');\\n};\\n\\nPoint.prototype.diffAdd = function diffAdd(p, diff) {\\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3\\n // 4M + 2S + 6A\\n\\n // A = X2 + Z2\\n var a = this.x.redAdd(this.z);\\n // B = X2 - Z2\\n var b = this.x.redSub(this.z);\\n // C = X3 + Z3\\n var c = p.x.redAdd(p.z);\\n // D = X3 - Z3\\n var d = p.x.redSub(p.z);\\n // DA = D * A\\n var da = d.redMul(a);\\n // CB = C * B\\n var cb = c.redMul(b);\\n // X5 = Z1 * (DA + CB)^2\\n var nx = diff.z.redMul(da.redAdd(cb).redSqr());\\n // Z5 = X1 * (DA - CB)^2\\n var nz = diff.x.redMul(da.redISub(cb).redSqr());\\n return this.curve.point(nx, nz);\\n};\\n\\nPoint.prototype.mul = function mul(k) {\\n var t = k.clone();\\n var a = this; // (N / 2) * Q + Q\\n var b = this.curve.point(null, null); // (N / 2) * Q\\n var c = this; // Q\\n\\n for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))\\n bits.push(t.andln(1));\\n\\n for (var i = bits.length - 1; i >= 0; i--) {\\n if (bits[i] === 0) {\\n // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q\\n a = a.diffAdd(b, c);\\n // N * Q = 2 * ((N / 2) * Q + Q))\\n b = b.dbl();\\n } else {\\n // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)\\n b = a.diffAdd(b, c);\\n // N * Q + Q = 2 * ((N / 2) * Q + Q)\\n a = a.dbl();\\n }\\n }\\n return b;\\n};\\n\\nPoint.prototype.mulAdd = function mulAdd() {\\n throw new Error('Not supported on Montgomery curve');\\n};\\n\\nPoint.prototype.jumlAdd = function jumlAdd() {\\n throw new Error('Not supported on Montgomery curve');\\n};\\n\\nPoint.prototype.eq = function eq(other) {\\n return this.getX().cmp(other.getX()) === 0;\\n};\\n\\nPoint.prototype.normalize = function normalize() {\\n this.x = this.x.redMul(this.z.redInvm());\\n this.z = this.curve.one;\\n return this;\\n};\\n\\nPoint.prototype.getX = function getX() {\\n // Normalize coordinates\\n this.normalize();\\n\\n return this.x.fromRed();\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/mont.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/short.js\":\n/*!***************************************************************************************************!*\\\n !*** ./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/short.js ***!\n \\***************************************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar utils = __webpack_require__(/*! ../utils */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/utils.js\\\");\\nvar BN = __webpack_require__(/*! bn.js */ \\\"./node_modules/bn.js/lib/bn.js\\\");\\nvar inherits = __webpack_require__(/*! inherits */ \\\"./node_modules/inherits/inherits_browser.js\\\");\\nvar Base = __webpack_require__(/*! ./base */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/base.js\\\");\\n\\nvar assert = utils.assert;\\n\\nfunction ShortCurve(conf) {\\n Base.call(this, 'short', conf);\\n\\n this.a = new BN(conf.a, 16).toRed(this.red);\\n this.b = new BN(conf.b, 16).toRed(this.red);\\n this.tinv = this.two.redInvm();\\n\\n this.zeroA = this.a.fromRed().cmpn(0) === 0;\\n this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;\\n\\n // If the curve is endomorphic, precalculate beta and lambda\\n this.endo = this._getEndomorphism(conf);\\n this._endoWnafT1 = new Array(4);\\n this._endoWnafT2 = new Array(4);\\n}\\ninherits(ShortCurve, Base);\\nmodule.exports = ShortCurve;\\n\\nShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {\\n // No efficient endomorphism\\n if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)\\n return;\\n\\n // Compute beta and lambda, that lambda * P = (beta * Px; Py)\\n var beta;\\n var lambda;\\n if (conf.beta) {\\n beta = new BN(conf.beta, 16).toRed(this.red);\\n } else {\\n var betas = this._getEndoRoots(this.p);\\n // Choose the smallest beta\\n beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];\\n beta = beta.toRed(this.red);\\n }\\n if (conf.lambda) {\\n lambda = new BN(conf.lambda, 16);\\n } else {\\n // Choose the lambda that is matching selected beta\\n var lambdas = this._getEndoRoots(this.n);\\n if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {\\n lambda = lambdas[0];\\n } else {\\n lambda = lambdas[1];\\n assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);\\n }\\n }\\n\\n // Get basis vectors, used for balanced length-two representation\\n var basis;\\n if (conf.basis) {\\n basis = conf.basis.map(function(vec) {\\n return {\\n a: new BN(vec.a, 16),\\n b: new BN(vec.b, 16)\\n };\\n });\\n } else {\\n basis = this._getEndoBasis(lambda);\\n }\\n\\n return {\\n beta: beta,\\n lambda: lambda,\\n basis: basis\\n };\\n};\\n\\nShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {\\n // Find roots of for x^2 + x + 1 in F\\n // Root = (-1 +- Sqrt(-3)) / 2\\n //\\n var red = num === this.p ? this.red : BN.mont(num);\\n var tinv = new BN(2).toRed(red).redInvm();\\n var ntinv = tinv.redNeg();\\n\\n var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);\\n\\n var l1 = ntinv.redAdd(s).fromRed();\\n var l2 = ntinv.redSub(s).fromRed();\\n return [ l1, l2 ];\\n};\\n\\nShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {\\n // aprxSqrt >= sqrt(this.n)\\n var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));\\n\\n // 3.74\\n // Run EGCD, until r(L + 1) < aprxSqrt\\n var u = lambda;\\n var v = this.n.clone();\\n var x1 = new BN(1);\\n var y1 = new BN(0);\\n var x2 = new BN(0);\\n var y2 = new BN(1);\\n\\n // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)\\n var a0;\\n var b0;\\n // First vector\\n var a1;\\n var b1;\\n // Second vector\\n var a2;\\n var b2;\\n\\n var prevR;\\n var i = 0;\\n var r;\\n var x;\\n while (u.cmpn(0) !== 0) {\\n var q = v.div(u);\\n r = v.sub(q.mul(u));\\n x = x2.sub(q.mul(x1));\\n var y = y2.sub(q.mul(y1));\\n\\n if (!a1 && r.cmp(aprxSqrt) < 0) {\\n a0 = prevR.neg();\\n b0 = x1;\\n a1 = r.neg();\\n b1 = x;\\n } else if (a1 && ++i === 2) {\\n break;\\n }\\n prevR = r;\\n\\n v = u;\\n u = r;\\n x2 = x1;\\n x1 = x;\\n y2 = y1;\\n y1 = y;\\n }\\n a2 = r.neg();\\n b2 = x;\\n\\n var len1 = a1.sqr().add(b1.sqr());\\n var len2 = a2.sqr().add(b2.sqr());\\n if (len2.cmp(len1) >= 0) {\\n a2 = a0;\\n b2 = b0;\\n }\\n\\n // Normalize signs\\n if (a1.negative) {\\n a1 = a1.neg();\\n b1 = b1.neg();\\n }\\n if (a2.negative) {\\n a2 = a2.neg();\\n b2 = b2.neg();\\n }\\n\\n return [\\n { a: a1, b: b1 },\\n { a: a2, b: b2 }\\n ];\\n};\\n\\nShortCurve.prototype._endoSplit = function _endoSplit(k) {\\n var basis = this.endo.basis;\\n var v1 = basis[0];\\n var v2 = basis[1];\\n\\n var c1 = v2.b.mul(k).divRound(this.n);\\n var c2 = v1.b.neg().mul(k).divRound(this.n);\\n\\n var p1 = c1.mul(v1.a);\\n var p2 = c2.mul(v2.a);\\n var q1 = c1.mul(v1.b);\\n var q2 = c2.mul(v2.b);\\n\\n // Calculate answer\\n var k1 = k.sub(p1).sub(p2);\\n var k2 = q1.add(q2).neg();\\n return { k1: k1, k2: k2 };\\n};\\n\\nShortCurve.prototype.pointFromX = function pointFromX(x, odd) {\\n x = new BN(x, 16);\\n if (!x.red)\\n x = x.toRed(this.red);\\n\\n var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);\\n var y = y2.redSqrt();\\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\\n throw new Error('invalid point');\\n\\n // XXX Is there any way to tell if the number is odd without converting it\\n // to non-red form?\\n var isOdd = y.fromRed().isOdd();\\n if (odd && !isOdd || !odd && isOdd)\\n y = y.redNeg();\\n\\n return this.point(x, y);\\n};\\n\\nShortCurve.prototype.validate = function validate(point) {\\n if (point.inf)\\n return true;\\n\\n var x = point.x;\\n var y = point.y;\\n\\n var ax = this.a.redMul(x);\\n var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);\\n return y.redSqr().redISub(rhs).cmpn(0) === 0;\\n};\\n\\nShortCurve.prototype._endoWnafMulAdd =\\n function _endoWnafMulAdd(points, coeffs, jacobianResult) {\\n var npoints = this._endoWnafT1;\\n var ncoeffs = this._endoWnafT2;\\n for (var i = 0; i < points.length; i++) {\\n var split = this._endoSplit(coeffs[i]);\\n var p = points[i];\\n var beta = p._getBeta();\\n\\n if (split.k1.negative) {\\n split.k1.ineg();\\n p = p.neg(true);\\n }\\n if (split.k2.negative) {\\n split.k2.ineg();\\n beta = beta.neg(true);\\n }\\n\\n npoints[i * 2] = p;\\n npoints[i * 2 + 1] = beta;\\n ncoeffs[i * 2] = split.k1;\\n ncoeffs[i * 2 + 1] = split.k2;\\n }\\n var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);\\n\\n // Clean-up references to points and coefficients\\n for (var j = 0; j < i * 2; j++) {\\n npoints[j] = null;\\n ncoeffs[j] = null;\\n }\\n return res;\\n};\\n\\nfunction Point(curve, x, y, isRed) {\\n Base.BasePoint.call(this, curve, 'affine');\\n if (x === null && y === null) {\\n this.x = null;\\n this.y = null;\\n this.inf = true;\\n } else {\\n this.x = new BN(x, 16);\\n this.y = new BN(y, 16);\\n // Force redgomery representation when loading from JSON\\n if (isRed) {\\n this.x.forceRed(this.curve.red);\\n this.y.forceRed(this.curve.red);\\n }\\n if (!this.x.red)\\n this.x = this.x.toRed(this.curve.red);\\n if (!this.y.red)\\n this.y = this.y.toRed(this.curve.red);\\n this.inf = false;\\n }\\n}\\ninherits(Point, Base.BasePoint);\\n\\nShortCurve.prototype.point = function point(x, y, isRed) {\\n return new Point(this, x, y, isRed);\\n};\\n\\nShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {\\n return Point.fromJSON(this, obj, red);\\n};\\n\\nPoint.prototype._getBeta = function _getBeta() {\\n if (!this.curve.endo)\\n return;\\n\\n var pre = this.precomputed;\\n if (pre && pre.beta)\\n return pre.beta;\\n\\n var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);\\n if (pre) {\\n var curve = this.curve;\\n var endoMul = function(p) {\\n return curve.point(p.x.redMul(curve.endo.beta), p.y);\\n };\\n pre.beta = beta;\\n beta.precomputed = {\\n beta: null,\\n naf: pre.naf && {\\n wnd: pre.naf.wnd,\\n points: pre.naf.points.map(endoMul)\\n },\\n doubles: pre.doubles && {\\n step: pre.doubles.step,\\n points: pre.doubles.points.map(endoMul)\\n }\\n };\\n }\\n return beta;\\n};\\n\\nPoint.prototype.toJSON = function toJSON() {\\n if (!this.precomputed)\\n return [ this.x, this.y ];\\n\\n return [ this.x, this.y, this.precomputed && {\\n doubles: this.precomputed.doubles && {\\n step: this.precomputed.doubles.step,\\n points: this.precomputed.doubles.points.slice(1)\\n },\\n naf: this.precomputed.naf && {\\n wnd: this.precomputed.naf.wnd,\\n points: this.precomputed.naf.points.slice(1)\\n }\\n } ];\\n};\\n\\nPoint.fromJSON = function fromJSON(curve, obj, red) {\\n if (typeof obj === 'string')\\n obj = JSON.parse(obj);\\n var res = curve.point(obj[0], obj[1], red);\\n if (!obj[2])\\n return res;\\n\\n function obj2point(obj) {\\n return curve.point(obj[0], obj[1], red);\\n }\\n\\n var pre = obj[2];\\n res.precomputed = {\\n beta: null,\\n doubles: pre.doubles && {\\n step: pre.doubles.step,\\n points: [ res ].concat(pre.doubles.points.map(obj2point))\\n },\\n naf: pre.naf && {\\n wnd: pre.naf.wnd,\\n points: [ res ].concat(pre.naf.points.map(obj2point))\\n }\\n };\\n return res;\\n};\\n\\nPoint.prototype.inspect = function inspect() {\\n if (this.isInfinity())\\n return '<EC Point Infinity>';\\n return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\\n ' y: ' + this.y.fromRed().toString(16, 2) + '>';\\n};\\n\\nPoint.prototype.isInfinity = function isInfinity() {\\n return this.inf;\\n};\\n\\nPoint.prototype.add = function add(p) {\\n // O + P = P\\n if (this.inf)\\n return p;\\n\\n // P + O = P\\n if (p.inf)\\n return this;\\n\\n // P + P = 2P\\n if (this.eq(p))\\n return this.dbl();\\n\\n // P + (-P) = O\\n if (this.neg().eq(p))\\n return this.curve.point(null, null);\\n\\n // P + Q = O\\n if (this.x.cmp(p.x) === 0)\\n return this.curve.point(null, null);\\n\\n var c = this.y.redSub(p.y);\\n if (c.cmpn(0) !== 0)\\n c = c.redMul(this.x.redSub(p.x).redInvm());\\n var nx = c.redSqr().redISub(this.x).redISub(p.x);\\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\\n return this.curve.point(nx, ny);\\n};\\n\\nPoint.prototype.dbl = function dbl() {\\n if (this.inf)\\n return this;\\n\\n // 2P = O\\n var ys1 = this.y.redAdd(this.y);\\n if (ys1.cmpn(0) === 0)\\n return this.curve.point(null, null);\\n\\n var a = this.curve.a;\\n\\n var x2 = this.x.redSqr();\\n var dyinv = ys1.redInvm();\\n var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);\\n\\n var nx = c.redSqr().redISub(this.x.redAdd(this.x));\\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\\n return this.curve.point(nx, ny);\\n};\\n\\nPoint.prototype.getX = function getX() {\\n return this.x.fromRed();\\n};\\n\\nPoint.prototype.getY = function getY() {\\n return this.y.fromRed();\\n};\\n\\nPoint.prototype.mul = function mul(k) {\\n k = new BN(k, 16);\\n if (this.isInfinity())\\n return this;\\n else if (this._hasDoubles(k))\\n return this.curve._fixedNafMul(this, k);\\n else if (this.curve.endo)\\n return this.curve._endoWnafMulAdd([ this ], [ k ]);\\n else\\n return this.curve._wnafMul(this, k);\\n};\\n\\nPoint.prototype.mulAdd = function mulAdd(k1, p2, k2) {\\n var points = [ this, p2 ];\\n var coeffs = [ k1, k2 ];\\n if (this.curve.endo)\\n return this.curve._endoWnafMulAdd(points, coeffs);\\n else\\n return this.curve._wnafMulAdd(1, points, coeffs, 2);\\n};\\n\\nPoint.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {\\n var points = [ this, p2 ];\\n var coeffs = [ k1, k2 ];\\n if (this.curve.endo)\\n return this.curve._endoWnafMulAdd(points, coeffs, true);\\n else\\n return this.curve._wnafMulAdd(1, points, coeffs, 2, true);\\n};\\n\\nPoint.prototype.eq = function eq(p) {\\n return this === p ||\\n this.inf === p.inf &&\\n (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);\\n};\\n\\nPoint.prototype.neg = function neg(_precompute) {\\n if (this.inf)\\n return this;\\n\\n var res = this.curve.point(this.x, this.y.redNeg());\\n if (_precompute && this.precomputed) {\\n var pre = this.precomputed;\\n var negate = function(p) {\\n return p.neg();\\n };\\n res.precomputed = {\\n naf: pre.naf && {\\n wnd: pre.naf.wnd,\\n points: pre.naf.points.map(negate)\\n },\\n doubles: pre.doubles && {\\n step: pre.doubles.step,\\n points: pre.doubles.points.map(negate)\\n }\\n };\\n }\\n return res;\\n};\\n\\nPoint.prototype.toJ = function toJ() {\\n if (this.inf)\\n return this.curve.jpoint(null, null, null);\\n\\n var res = this.curve.jpoint(this.x, this.y, this.curve.one);\\n return res;\\n};\\n\\nfunction JPoint(curve, x, y, z) {\\n Base.BasePoint.call(this, curve, 'jacobian');\\n if (x === null && y === null && z === null) {\\n this.x = this.curve.one;\\n this.y = this.curve.one;\\n this.z = new BN(0);\\n } else {\\n this.x = new BN(x, 16);\\n this.y = new BN(y, 16);\\n this.z = new BN(z, 16);\\n }\\n if (!this.x.red)\\n this.x = this.x.toRed(this.curve.red);\\n if (!this.y.red)\\n this.y = this.y.toRed(this.curve.red);\\n if (!this.z.red)\\n this.z = this.z.toRed(this.curve.red);\\n\\n this.zOne = this.z === this.curve.one;\\n}\\ninherits(JPoint, Base.BasePoint);\\n\\nShortCurve.prototype.jpoint = function jpoint(x, y, z) {\\n return new JPoint(this, x, y, z);\\n};\\n\\nJPoint.prototype.toP = function toP() {\\n if (this.isInfinity())\\n return this.curve.point(null, null);\\n\\n var zinv = this.z.redInvm();\\n var zinv2 = zinv.redSqr();\\n var ax = this.x.redMul(zinv2);\\n var ay = this.y.redMul(zinv2).redMul(zinv);\\n\\n return this.curve.point(ax, ay);\\n};\\n\\nJPoint.prototype.neg = function neg() {\\n return this.curve.jpoint(this.x, this.y.redNeg(), this.z);\\n};\\n\\nJPoint.prototype.add = function add(p) {\\n // O + P = P\\n if (this.isInfinity())\\n return p;\\n\\n // P + O = P\\n if (p.isInfinity())\\n return this;\\n\\n // 12M + 4S + 7A\\n var pz2 = p.z.redSqr();\\n var z2 = this.z.redSqr();\\n var u1 = this.x.redMul(pz2);\\n var u2 = p.x.redMul(z2);\\n var s1 = this.y.redMul(pz2.redMul(p.z));\\n var s2 = p.y.redMul(z2.redMul(this.z));\\n\\n var h = u1.redSub(u2);\\n var r = s1.redSub(s2);\\n if (h.cmpn(0) === 0) {\\n if (r.cmpn(0) !== 0)\\n return this.curve.jpoint(null, null, null);\\n else\\n return this.dbl();\\n }\\n\\n var h2 = h.redSqr();\\n var h3 = h2.redMul(h);\\n var v = u1.redMul(h2);\\n\\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\\n var nz = this.z.redMul(p.z).redMul(h);\\n\\n return this.curve.jpoint(nx, ny, nz);\\n};\\n\\nJPoint.prototype.mixedAdd = function mixedAdd(p) {\\n // O + P = P\\n if (this.isInfinity())\\n return p.toJ();\\n\\n // P + O = P\\n if (p.isInfinity())\\n return this;\\n\\n // 8M + 3S + 7A\\n var z2 = this.z.redSqr();\\n var u1 = this.x;\\n var u2 = p.x.redMul(z2);\\n var s1 = this.y;\\n var s2 = p.y.redMul(z2).redMul(this.z);\\n\\n var h = u1.redSub(u2);\\n var r = s1.redSub(s2);\\n if (h.cmpn(0) === 0) {\\n if (r.cmpn(0) !== 0)\\n return this.curve.jpoint(null, null, null);\\n else\\n return this.dbl();\\n }\\n\\n var h2 = h.redSqr();\\n var h3 = h2.redMul(h);\\n var v = u1.redMul(h2);\\n\\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\\n var nz = this.z.redMul(h);\\n\\n return this.curve.jpoint(nx, ny, nz);\\n};\\n\\nJPoint.prototype.dblp = function dblp(pow) {\\n if (pow === 0)\\n return this;\\n if (this.isInfinity())\\n return this;\\n if (!pow)\\n return this.dbl();\\n\\n if (this.curve.zeroA || this.curve.threeA) {\\n var r = this;\\n for (var i = 0; i < pow; i++)\\n r = r.dbl();\\n return r;\\n }\\n\\n // 1M + 2S + 1A + N * (4S + 5M + 8A)\\n // N = 1 => 6M + 6S + 9A\\n var a = this.curve.a;\\n var tinv = this.curve.tinv;\\n\\n var jx = this.x;\\n var jy = this.y;\\n var jz = this.z;\\n var jz4 = jz.redSqr().redSqr();\\n\\n // Reuse results\\n var jyd = jy.redAdd(jy);\\n for (var i = 0; i < pow; i++) {\\n var jx2 = jx.redSqr();\\n var jyd2 = jyd.redSqr();\\n var jyd4 = jyd2.redSqr();\\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\\n\\n var t1 = jx.redMul(jyd2);\\n var nx = c.redSqr().redISub(t1.redAdd(t1));\\n var t2 = t1.redISub(nx);\\n var dny = c.redMul(t2);\\n dny = dny.redIAdd(dny).redISub(jyd4);\\n var nz = jyd.redMul(jz);\\n if (i + 1 < pow)\\n jz4 = jz4.redMul(jyd4);\\n\\n jx = nx;\\n jz = nz;\\n jyd = dny;\\n }\\n\\n return this.curve.jpoint(jx, jyd.redMul(tinv), jz);\\n};\\n\\nJPoint.prototype.dbl = function dbl() {\\n if (this.isInfinity())\\n return this;\\n\\n if (this.curve.zeroA)\\n return this._zeroDbl();\\n else if (this.curve.threeA)\\n return this._threeDbl();\\n else\\n return this._dbl();\\n};\\n\\nJPoint.prototype._zeroDbl = function _zeroDbl() {\\n var nx;\\n var ny;\\n var nz;\\n // Z = 1\\n if (this.zOne) {\\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\\n // #doubling-mdbl-2007-bl\\n // 1M + 5S + 14A\\n\\n // XX = X1^2\\n var xx = this.x.redSqr();\\n // YY = Y1^2\\n var yy = this.y.redSqr();\\n // YYYY = YY^2\\n var yyyy = yy.redSqr();\\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\\n s = s.redIAdd(s);\\n // M = 3 * XX + a; a = 0\\n var m = xx.redAdd(xx).redIAdd(xx);\\n // T = M ^ 2 - 2*S\\n var t = m.redSqr().redISub(s).redISub(s);\\n\\n // 8 * YYYY\\n var yyyy8 = yyyy.redIAdd(yyyy);\\n yyyy8 = yyyy8.redIAdd(yyyy8);\\n yyyy8 = yyyy8.redIAdd(yyyy8);\\n\\n // X3 = T\\n nx = t;\\n // Y3 = M * (S - T) - 8 * YYYY\\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\\n // Z3 = 2*Y1\\n nz = this.y.redAdd(this.y);\\n } else {\\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\\n // #doubling-dbl-2009-l\\n // 2M + 5S + 13A\\n\\n // A = X1^2\\n var a = this.x.redSqr();\\n // B = Y1^2\\n var b = this.y.redSqr();\\n // C = B^2\\n var c = b.redSqr();\\n // D = 2 * ((X1 + B)^2 - A - C)\\n var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);\\n d = d.redIAdd(d);\\n // E = 3 * A\\n var e = a.redAdd(a).redIAdd(a);\\n // F = E^2\\n var f = e.redSqr();\\n\\n // 8 * C\\n var c8 = c.redIAdd(c);\\n c8 = c8.redIAdd(c8);\\n c8 = c8.redIAdd(c8);\\n\\n // X3 = F - 2 * D\\n nx = f.redISub(d).redISub(d);\\n // Y3 = E * (D - X3) - 8 * C\\n ny = e.redMul(d.redISub(nx)).redISub(c8);\\n // Z3 = 2 * Y1 * Z1\\n nz = this.y.redMul(this.z);\\n nz = nz.redIAdd(nz);\\n }\\n\\n return this.curve.jpoint(nx, ny, nz);\\n};\\n\\nJPoint.prototype._threeDbl = function _threeDbl() {\\n var nx;\\n var ny;\\n var nz;\\n // Z = 1\\n if (this.zOne) {\\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html\\n // #doubling-mdbl-2007-bl\\n // 1M + 5S + 15A\\n\\n // XX = X1^2\\n var xx = this.x.redSqr();\\n // YY = Y1^2\\n var yy = this.y.redSqr();\\n // YYYY = YY^2\\n var yyyy = yy.redSqr();\\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\\n s = s.redIAdd(s);\\n // M = 3 * XX + a\\n var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);\\n // T = M^2 - 2 * S\\n var t = m.redSqr().redISub(s).redISub(s);\\n // X3 = T\\n nx = t;\\n // Y3 = M * (S - T) - 8 * YYYY\\n var yyyy8 = yyyy.redIAdd(yyyy);\\n yyyy8 = yyyy8.redIAdd(yyyy8);\\n yyyy8 = yyyy8.redIAdd(yyyy8);\\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\\n // Z3 = 2 * Y1\\n nz = this.y.redAdd(this.y);\\n } else {\\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b\\n // 3M + 5S\\n\\n // delta = Z1^2\\n var delta = this.z.redSqr();\\n // gamma = Y1^2\\n var gamma = this.y.redSqr();\\n // beta = X1 * gamma\\n var beta = this.x.redMul(gamma);\\n // alpha = 3 * (X1 - delta) * (X1 + delta)\\n var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));\\n alpha = alpha.redAdd(alpha).redIAdd(alpha);\\n // X3 = alpha^2 - 8 * beta\\n var beta4 = beta.redIAdd(beta);\\n beta4 = beta4.redIAdd(beta4);\\n var beta8 = beta4.redAdd(beta4);\\n nx = alpha.redSqr().redISub(beta8);\\n // Z3 = (Y1 + Z1)^2 - gamma - delta\\n nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);\\n // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2\\n var ggamma8 = gamma.redSqr();\\n ggamma8 = ggamma8.redIAdd(ggamma8);\\n ggamma8 = ggamma8.redIAdd(ggamma8);\\n ggamma8 = ggamma8.redIAdd(ggamma8);\\n ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);\\n }\\n\\n return this.curve.jpoint(nx, ny, nz);\\n};\\n\\nJPoint.prototype._dbl = function _dbl() {\\n var a = this.curve.a;\\n\\n // 4M + 6S + 10A\\n var jx = this.x;\\n var jy = this.y;\\n var jz = this.z;\\n var jz4 = jz.redSqr().redSqr();\\n\\n var jx2 = jx.redSqr();\\n var jy2 = jy.redSqr();\\n\\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\\n\\n var jxd4 = jx.redAdd(jx);\\n jxd4 = jxd4.redIAdd(jxd4);\\n var t1 = jxd4.redMul(jy2);\\n var nx = c.redSqr().redISub(t1.redAdd(t1));\\n var t2 = t1.redISub(nx);\\n\\n var jyd8 = jy2.redSqr();\\n jyd8 = jyd8.redIAdd(jyd8);\\n jyd8 = jyd8.redIAdd(jyd8);\\n jyd8 = jyd8.redIAdd(jyd8);\\n var ny = c.redMul(t2).redISub(jyd8);\\n var nz = jy.redAdd(jy).redMul(jz);\\n\\n return this.curve.jpoint(nx, ny, nz);\\n};\\n\\nJPoint.prototype.trpl = function trpl() {\\n if (!this.curve.zeroA)\\n return this.dbl().add(this);\\n\\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl\\n // 5M + 10S + ...\\n\\n // XX = X1^2\\n var xx = this.x.redSqr();\\n // YY = Y1^2\\n var yy = this.y.redSqr();\\n // ZZ = Z1^2\\n var zz = this.z.redSqr();\\n // YYYY = YY^2\\n var yyyy = yy.redSqr();\\n // M = 3 * XX + a * ZZ2; a = 0\\n var m = xx.redAdd(xx).redIAdd(xx);\\n // MM = M^2\\n var mm = m.redSqr();\\n // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM\\n var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\\n e = e.redIAdd(e);\\n e = e.redAdd(e).redIAdd(e);\\n e = e.redISub(mm);\\n // EE = E^2\\n var ee = e.redSqr();\\n // T = 16*YYYY\\n var t = yyyy.redIAdd(yyyy);\\n t = t.redIAdd(t);\\n t = t.redIAdd(t);\\n t = t.redIAdd(t);\\n // U = (M + E)^2 - MM - EE - T\\n var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);\\n // X3 = 4 * (X1 * EE - 4 * YY * U)\\n var yyu4 = yy.redMul(u);\\n yyu4 = yyu4.redIAdd(yyu4);\\n yyu4 = yyu4.redIAdd(yyu4);\\n var nx = this.x.redMul(ee).redISub(yyu4);\\n nx = nx.redIAdd(nx);\\n nx = nx.redIAdd(nx);\\n // Y3 = 8 * Y1 * (U * (T - U) - E * EE)\\n var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));\\n ny = ny.redIAdd(ny);\\n ny = ny.redIAdd(ny);\\n ny = ny.redIAdd(ny);\\n // Z3 = (Z1 + E)^2 - ZZ - EE\\n var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);\\n\\n return this.curve.jpoint(nx, ny, nz);\\n};\\n\\nJPoint.prototype.mul = function mul(k, kbase) {\\n k = new BN(k, kbase);\\n\\n return this.curve._wnafMul(this, k);\\n};\\n\\nJPoint.prototype.eq = function eq(p) {\\n if (p.type === 'affine')\\n return this.eq(p.toJ());\\n\\n if (this === p)\\n return true;\\n\\n // x1 * z2^2 == x2 * z1^2\\n var z2 = this.z.redSqr();\\n var pz2 = p.z.redSqr();\\n if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)\\n return false;\\n\\n // y1 * z2^3 == y2 * z1^3\\n var z3 = z2.redMul(this.z);\\n var pz3 = pz2.redMul(p.z);\\n return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;\\n};\\n\\nJPoint.prototype.eqXToP = function eqXToP(x) {\\n var zs = this.z.redSqr();\\n var rx = x.toRed(this.curve.red).redMul(zs);\\n if (this.x.cmp(rx) === 0)\\n return true;\\n\\n var xc = x.clone();\\n var t = this.curve.redN.redMul(zs);\\n for (;;) {\\n xc.iadd(this.curve.n);\\n if (xc.cmp(this.curve.p) >= 0)\\n return false;\\n\\n rx.redIAdd(t);\\n if (this.x.cmp(rx) === 0)\\n return true;\\n }\\n};\\n\\nJPoint.prototype.inspect = function inspect() {\\n if (this.isInfinity())\\n return '<EC JPoint Infinity>';\\n return '<EC JPoint x: ' + this.x.toString(16, 2) +\\n ' y: ' + this.y.toString(16, 2) +\\n ' z: ' + this.z.toString(16, 2) + '>';\\n};\\n\\nJPoint.prototype.isInfinity = function isInfinity() {\\n // XXX This code assumes that zero is always zero in red\\n return this.z.cmpn(0) === 0;\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/short.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curves.js\":\n/*!**********************************************************************************************!*\\\n !*** ./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curves.js ***!\n \\**********************************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar curves = exports;\\n\\nvar hash = __webpack_require__(/*! hash.js */ \\\"./node_modules/hash.js/lib/hash.js\\\");\\nvar curve = __webpack_require__(/*! ./curve */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curve/index.js\\\");\\nvar utils = __webpack_require__(/*! ./utils */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/utils.js\\\");\\n\\nvar assert = utils.assert;\\n\\nfunction PresetCurve(options) {\\n if (options.type === 'short')\\n this.curve = new curve.short(options);\\n else if (options.type === 'edwards')\\n this.curve = new curve.edwards(options);\\n else\\n this.curve = new curve.mont(options);\\n this.g = this.curve.g;\\n this.n = this.curve.n;\\n this.hash = options.hash;\\n\\n assert(this.g.validate(), 'Invalid curve');\\n assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');\\n}\\ncurves.PresetCurve = PresetCurve;\\n\\nfunction defineCurve(name, options) {\\n Object.defineProperty(curves, name, {\\n configurable: true,\\n enumerable: true,\\n get: function() {\\n var curve = new PresetCurve(options);\\n Object.defineProperty(curves, name, {\\n configurable: true,\\n enumerable: true,\\n value: curve\\n });\\n return curve;\\n }\\n });\\n}\\n\\ndefineCurve('p192', {\\n type: 'short',\\n prime: 'p192',\\n p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',\\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',\\n b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',\\n n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',\\n hash: hash.sha256,\\n gRed: false,\\n g: [\\n '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',\\n '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'\\n ]\\n});\\n\\ndefineCurve('p224', {\\n type: 'short',\\n prime: 'p224',\\n p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',\\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',\\n b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',\\n n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',\\n hash: hash.sha256,\\n gRed: false,\\n g: [\\n 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',\\n 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'\\n ]\\n});\\n\\ndefineCurve('p256', {\\n type: 'short',\\n prime: null,\\n p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',\\n a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',\\n b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',\\n n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',\\n hash: hash.sha256,\\n gRed: false,\\n g: [\\n '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',\\n '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'\\n ]\\n});\\n\\ndefineCurve('p384', {\\n type: 'short',\\n prime: null,\\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\\n 'fffffffe ffffffff 00000000 00000000 ffffffff',\\n a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\\n 'fffffffe ffffffff 00000000 00000000 fffffffc',\\n b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +\\n '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',\\n n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +\\n 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',\\n hash: hash.sha384,\\n gRed: false,\\n g: [\\n 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +\\n '5502f25d bf55296c 3a545e38 72760ab7',\\n '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +\\n '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'\\n ]\\n});\\n\\ndefineCurve('p521', {\\n type: 'short',\\n prime: null,\\n p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\\n 'ffffffff ffffffff ffffffff ffffffff ffffffff',\\n a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\\n 'ffffffff ffffffff ffffffff ffffffff fffffffc',\\n b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +\\n '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +\\n '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',\\n n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\\n 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +\\n 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',\\n hash: hash.sha512,\\n gRed: false,\\n g: [\\n '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +\\n '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +\\n 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',\\n '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +\\n '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +\\n '3fad0761 353c7086 a272c240 88be9476 9fd16650'\\n ]\\n});\\n\\ndefineCurve('curve25519', {\\n type: 'mont',\\n prime: 'p25519',\\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\\n a: '76d06',\\n b: '1',\\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\\n hash: hash.sha256,\\n gRed: false,\\n g: [\\n '9'\\n ]\\n});\\n\\ndefineCurve('ed25519', {\\n type: 'edwards',\\n prime: 'p25519',\\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\\n a: '-1',\\n c: '1',\\n // -121665 * (121666^(-1)) (mod P)\\n d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',\\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\\n hash: hash.sha256,\\n gRed: false,\\n g: [\\n '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',\\n\\n // 4/5\\n '6666666666666666666666666666666666666666666666666666666666666658'\\n ]\\n});\\n\\nvar pre;\\ntry {\\n pre = __webpack_require__(/*! ./precomputed/secp256k1 */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js\\\");\\n} catch (e) {\\n pre = undefined;\\n}\\n\\ndefineCurve('secp256k1', {\\n type: 'short',\\n prime: 'k256',\\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',\\n a: '0',\\n b: '7',\\n n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',\\n h: '1',\\n hash: hash.sha256,\\n\\n // Precomputed endomorphism\\n beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',\\n lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',\\n basis: [\\n {\\n a: '3086d221a7d46bcde86c90e49284eb15',\\n b: '-e4437ed6010e88286f547fa90abfe4c3'\\n },\\n {\\n a: '114ca50f7a8e2f3f657c1108d9d44cfd8',\\n b: '3086d221a7d46bcde86c90e49284eb15'\\n }\\n ],\\n\\n gRed: false,\\n g: [\\n '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',\\n '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',\\n pre\\n ]\\n});\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curves.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/ec/index.js\":\n/*!************************************************************************************************!*\\\n !*** ./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/ec/index.js ***!\n \\************************************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar BN = __webpack_require__(/*! bn.js */ \\\"./node_modules/bn.js/lib/bn.js\\\");\\nvar HmacDRBG = __webpack_require__(/*! hmac-drbg */ \\\"./node_modules/hmac-drbg/lib/hmac-drbg.js\\\");\\nvar utils = __webpack_require__(/*! ../utils */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/utils.js\\\");\\nvar curves = __webpack_require__(/*! ../curves */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curves.js\\\");\\nvar rand = __webpack_require__(/*! brorand */ \\\"./node_modules/brorand/index.js\\\");\\nvar assert = utils.assert;\\n\\nvar KeyPair = __webpack_require__(/*! ./key */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/ec/key.js\\\");\\nvar Signature = __webpack_require__(/*! ./signature */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/ec/signature.js\\\");\\n\\nfunction EC(options) {\\n if (!(this instanceof EC))\\n return new EC(options);\\n\\n // Shortcut `elliptic.ec(curve-name)`\\n if (typeof options === 'string') {\\n assert(curves.hasOwnProperty(options), 'Unknown curve ' + options);\\n\\n options = curves[options];\\n }\\n\\n // Shortcut for `elliptic.ec(elliptic.curves.curveName)`\\n if (options instanceof curves.PresetCurve)\\n options = { curve: options };\\n\\n this.curve = options.curve.curve;\\n this.n = this.curve.n;\\n this.nh = this.n.ushrn(1);\\n this.g = this.curve.g;\\n\\n // Point on curve\\n this.g = options.curve.g;\\n this.g.precompute(options.curve.n.bitLength() + 1);\\n\\n // Hash for function for DRBG\\n this.hash = options.hash || options.curve.hash;\\n}\\nmodule.exports = EC;\\n\\nEC.prototype.keyPair = function keyPair(options) {\\n return new KeyPair(this, options);\\n};\\n\\nEC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {\\n return KeyPair.fromPrivate(this, priv, enc);\\n};\\n\\nEC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {\\n return KeyPair.fromPublic(this, pub, enc);\\n};\\n\\nEC.prototype.genKeyPair = function genKeyPair(options) {\\n if (!options)\\n options = {};\\n\\n // Instantiate Hmac_DRBG\\n var drbg = new HmacDRBG({\\n hash: this.hash,\\n pers: options.pers,\\n persEnc: options.persEnc || 'utf8',\\n entropy: options.entropy || rand(this.hash.hmacStrength),\\n entropyEnc: options.entropy && options.entropyEnc || 'utf8',\\n nonce: this.n.toArray()\\n });\\n\\n var bytes = this.n.byteLength();\\n var ns2 = this.n.sub(new BN(2));\\n do {\\n var priv = new BN(drbg.generate(bytes));\\n if (priv.cmp(ns2) > 0)\\n continue;\\n\\n priv.iaddn(1);\\n return this.keyFromPrivate(priv);\\n } while (true);\\n};\\n\\nEC.prototype._truncateToN = function truncateToN(msg, truncOnly) {\\n var delta = msg.byteLength() * 8 - this.n.bitLength();\\n if (delta > 0)\\n msg = msg.ushrn(delta);\\n if (!truncOnly && msg.cmp(this.n) >= 0)\\n return msg.sub(this.n);\\n else\\n return msg;\\n};\\n\\nEC.prototype.sign = function sign(msg, key, enc, options) {\\n if (typeof enc === 'object') {\\n options = enc;\\n enc = null;\\n }\\n if (!options)\\n options = {};\\n\\n key = this.keyFromPrivate(key, enc);\\n msg = this._truncateToN(new BN(msg, 16));\\n\\n // Zero-extend key to provide enough entropy\\n var bytes = this.n.byteLength();\\n var bkey = key.getPrivate().toArray('be', bytes);\\n\\n // Zero-extend nonce to have the same byte size as N\\n var nonce = msg.toArray('be', bytes);\\n\\n // Instantiate Hmac_DRBG\\n var drbg = new HmacDRBG({\\n hash: this.hash,\\n entropy: bkey,\\n nonce: nonce,\\n pers: options.pers,\\n persEnc: options.persEnc || 'utf8'\\n });\\n\\n // Number of bytes to generate\\n var ns1 = this.n.sub(new BN(1));\\n\\n for (var iter = 0; true; iter++) {\\n var k = options.k ?\\n options.k(iter) :\\n new BN(drbg.generate(this.n.byteLength()));\\n k = this._truncateToN(k, true);\\n if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)\\n continue;\\n\\n var kp = this.g.mul(k);\\n if (kp.isInfinity())\\n continue;\\n\\n var kpX = kp.getX();\\n var r = kpX.umod(this.n);\\n if (r.cmpn(0) === 0)\\n continue;\\n\\n var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));\\n s = s.umod(this.n);\\n if (s.cmpn(0) === 0)\\n continue;\\n\\n var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |\\n (kpX.cmp(r) !== 0 ? 2 : 0);\\n\\n // Use complement of `s`, if it is > `n / 2`\\n if (options.canonical && s.cmp(this.nh) > 0) {\\n s = this.n.sub(s);\\n recoveryParam ^= 1;\\n }\\n\\n return new Signature({ r: r, s: s, recoveryParam: recoveryParam });\\n }\\n};\\n\\nEC.prototype.verify = function verify(msg, signature, key, enc) {\\n msg = this._truncateToN(new BN(msg, 16));\\n key = this.keyFromPublic(key, enc);\\n signature = new Signature(signature, 'hex');\\n\\n // Perform primitive values validation\\n var r = signature.r;\\n var s = signature.s;\\n if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)\\n return false;\\n if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)\\n return false;\\n\\n // Validate signature\\n var sinv = s.invm(this.n);\\n var u1 = sinv.mul(msg).umod(this.n);\\n var u2 = sinv.mul(r).umod(this.n);\\n\\n if (!this.curve._maxwellTrick) {\\n var p = this.g.mulAdd(u1, key.getPublic(), u2);\\n if (p.isInfinity())\\n return false;\\n\\n return p.getX().umod(this.n).cmp(r) === 0;\\n }\\n\\n // NOTE: Greg Maxwell's trick, inspired by:\\n // https://git.io/vad3K\\n\\n var p = this.g.jmulAdd(u1, key.getPublic(), u2);\\n if (p.isInfinity())\\n return false;\\n\\n // Compare `p.x` of Jacobian point with `r`,\\n // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the\\n // inverse of `p.z^2`\\n return p.eqXToP(r);\\n};\\n\\nEC.prototype.recoverPubKey = function(msg, signature, j, enc) {\\n assert((3 & j) === j, 'The recovery param is more than two bits');\\n signature = new Signature(signature, enc);\\n\\n var n = this.n;\\n var e = new BN(msg);\\n var r = signature.r;\\n var s = signature.s;\\n\\n // A set LSB signifies that the y-coordinate is odd\\n var isYOdd = j & 1;\\n var isSecondKey = j >> 1;\\n if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)\\n throw new Error('Unable to find sencond key candinate');\\n\\n // 1.1. Let x = r + jn.\\n if (isSecondKey)\\n r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);\\n else\\n r = this.curve.pointFromX(r, isYOdd);\\n\\n var rInv = signature.r.invm(n);\\n var s1 = n.sub(e).mul(rInv).umod(n);\\n var s2 = s.mul(rInv).umod(n);\\n\\n // 1.6.1 Compute Q = r^-1 (sR - eG)\\n // Q = r^-1 (sR + -eG)\\n return this.g.mulAdd(s1, r, s2);\\n};\\n\\nEC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {\\n signature = new Signature(signature, enc);\\n if (signature.recoveryParam !== null)\\n return signature.recoveryParam;\\n\\n for (var i = 0; i < 4; i++) {\\n var Qprime;\\n try {\\n Qprime = this.recoverPubKey(e, signature, i);\\n } catch (e) {\\n continue;\\n }\\n\\n if (Qprime.eq(Q))\\n return i;\\n }\\n throw new Error('Unable to find valid recovery factor');\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/ec/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/ec/key.js\":\n/*!**********************************************************************************************!*\\\n !*** ./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/ec/key.js ***!\n \\**********************************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar BN = __webpack_require__(/*! bn.js */ \\\"./node_modules/bn.js/lib/bn.js\\\");\\nvar utils = __webpack_require__(/*! ../utils */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/utils.js\\\");\\nvar assert = utils.assert;\\n\\nfunction KeyPair(ec, options) {\\n this.ec = ec;\\n this.priv = null;\\n this.pub = null;\\n\\n // KeyPair(ec, { priv: ..., pub: ... })\\n if (options.priv)\\n this._importPrivate(options.priv, options.privEnc);\\n if (options.pub)\\n this._importPublic(options.pub, options.pubEnc);\\n}\\nmodule.exports = KeyPair;\\n\\nKeyPair.fromPublic = function fromPublic(ec, pub, enc) {\\n if (pub instanceof KeyPair)\\n return pub;\\n\\n return new KeyPair(ec, {\\n pub: pub,\\n pubEnc: enc\\n });\\n};\\n\\nKeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {\\n if (priv instanceof KeyPair)\\n return priv;\\n\\n return new KeyPair(ec, {\\n priv: priv,\\n privEnc: enc\\n });\\n};\\n\\nKeyPair.prototype.validate = function validate() {\\n var pub = this.getPublic();\\n\\n if (pub.isInfinity())\\n return { result: false, reason: 'Invalid public key' };\\n if (!pub.validate())\\n return { result: false, reason: 'Public key is not a point' };\\n if (!pub.mul(this.ec.curve.n).isInfinity())\\n return { result: false, reason: 'Public key * N != O' };\\n\\n return { result: true, reason: null };\\n};\\n\\nKeyPair.prototype.getPublic = function getPublic(compact, enc) {\\n // compact is optional argument\\n if (typeof compact === 'string') {\\n enc = compact;\\n compact = null;\\n }\\n\\n if (!this.pub)\\n this.pub = this.ec.g.mul(this.priv);\\n\\n if (!enc)\\n return this.pub;\\n\\n return this.pub.encode(enc, compact);\\n};\\n\\nKeyPair.prototype.getPrivate = function getPrivate(enc) {\\n if (enc === 'hex')\\n return this.priv.toString(16, 2);\\n else\\n return this.priv;\\n};\\n\\nKeyPair.prototype._importPrivate = function _importPrivate(key, enc) {\\n this.priv = new BN(key, enc || 16);\\n\\n // Ensure that the priv won't be bigger than n, otherwise we may fail\\n // in fixed multiplication method\\n this.priv = this.priv.umod(this.ec.curve.n);\\n};\\n\\nKeyPair.prototype._importPublic = function _importPublic(key, enc) {\\n if (key.x || key.y) {\\n // Montgomery points only have an `x` coordinate.\\n // Weierstrass/Edwards points on the other hand have both `x` and\\n // `y` coordinates.\\n if (this.ec.curve.type === 'mont') {\\n assert(key.x, 'Need x coordinate');\\n } else if (this.ec.curve.type === 'short' ||\\n this.ec.curve.type === 'edwards') {\\n assert(key.x && key.y, 'Need both x and y coordinate');\\n }\\n this.pub = this.ec.curve.point(key.x, key.y);\\n return;\\n }\\n this.pub = this.ec.curve.decodePoint(key, enc);\\n};\\n\\n// ECDH\\nKeyPair.prototype.derive = function derive(pub) {\\n return pub.mul(this.priv).getX();\\n};\\n\\n// ECDSA\\nKeyPair.prototype.sign = function sign(msg, enc, options) {\\n return this.ec.sign(msg, this, enc, options);\\n};\\n\\nKeyPair.prototype.verify = function verify(msg, signature) {\\n return this.ec.verify(msg, signature, this);\\n};\\n\\nKeyPair.prototype.inspect = function inspect() {\\n return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +\\n ' pub: ' + (this.pub && this.pub.inspect()) + ' >';\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/ec/key.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/ec/signature.js\":\n/*!****************************************************************************************************!*\\\n !*** ./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/ec/signature.js ***!\n \\****************************************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar BN = __webpack_require__(/*! bn.js */ \\\"./node_modules/bn.js/lib/bn.js\\\");\\n\\nvar utils = __webpack_require__(/*! ../utils */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/utils.js\\\");\\nvar assert = utils.assert;\\n\\nfunction Signature(options, enc) {\\n if (options instanceof Signature)\\n return options;\\n\\n if (this._importDER(options, enc))\\n return;\\n\\n assert(options.r && options.s, 'Signature without r or s');\\n this.r = new BN(options.r, 16);\\n this.s = new BN(options.s, 16);\\n if (options.recoveryParam === undefined)\\n this.recoveryParam = null;\\n else\\n this.recoveryParam = options.recoveryParam;\\n}\\nmodule.exports = Signature;\\n\\nfunction Position() {\\n this.place = 0;\\n}\\n\\nfunction getLength(buf, p) {\\n var initial = buf[p.place++];\\n if (!(initial & 0x80)) {\\n return initial;\\n }\\n var octetLen = initial & 0xf;\\n var val = 0;\\n for (var i = 0, off = p.place; i < octetLen; i++, off++) {\\n val <<= 8;\\n val |= buf[off];\\n }\\n p.place = off;\\n return val;\\n}\\n\\nfunction rmPadding(buf) {\\n var i = 0;\\n var len = buf.length - 1;\\n while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {\\n i++;\\n }\\n if (i === 0) {\\n return buf;\\n }\\n return buf.slice(i);\\n}\\n\\nSignature.prototype._importDER = function _importDER(data, enc) {\\n data = utils.toArray(data, enc);\\n var p = new Position();\\n if (data[p.place++] !== 0x30) {\\n return false;\\n }\\n var len = getLength(data, p);\\n if ((len + p.place) !== data.length) {\\n return false;\\n }\\n if (data[p.place++] !== 0x02) {\\n return false;\\n }\\n var rlen = getLength(data, p);\\n var r = data.slice(p.place, rlen + p.place);\\n p.place += rlen;\\n if (data[p.place++] !== 0x02) {\\n return false;\\n }\\n var slen = getLength(data, p);\\n if (data.length !== slen + p.place) {\\n return false;\\n }\\n var s = data.slice(p.place, slen + p.place);\\n if (r[0] === 0 && (r[1] & 0x80)) {\\n r = r.slice(1);\\n }\\n if (s[0] === 0 && (s[1] & 0x80)) {\\n s = s.slice(1);\\n }\\n\\n this.r = new BN(r);\\n this.s = new BN(s);\\n this.recoveryParam = null;\\n\\n return true;\\n};\\n\\nfunction constructLength(arr, len) {\\n if (len < 0x80) {\\n arr.push(len);\\n return;\\n }\\n var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);\\n arr.push(octets | 0x80);\\n while (--octets) {\\n arr.push((len >>> (octets << 3)) & 0xff);\\n }\\n arr.push(len);\\n}\\n\\nSignature.prototype.toDER = function toDER(enc) {\\n var r = this.r.toArray();\\n var s = this.s.toArray();\\n\\n // Pad values\\n if (r[0] & 0x80)\\n r = [ 0 ].concat(r);\\n // Pad values\\n if (s[0] & 0x80)\\n s = [ 0 ].concat(s);\\n\\n r = rmPadding(r);\\n s = rmPadding(s);\\n\\n while (!s[0] && !(s[1] & 0x80)) {\\n s = s.slice(1);\\n }\\n var arr = [ 0x02 ];\\n constructLength(arr, r.length);\\n arr = arr.concat(r);\\n arr.push(0x02);\\n constructLength(arr, s.length);\\n var backHalf = arr.concat(s);\\n var res = [ 0x30 ];\\n constructLength(res, backHalf.length);\\n res = res.concat(backHalf);\\n return utils.encode(res, enc);\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/ec/signature.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/eddsa/index.js\":\n/*!***************************************************************************************************!*\\\n !*** ./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/eddsa/index.js ***!\n \\***************************************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar hash = __webpack_require__(/*! hash.js */ \\\"./node_modules/hash.js/lib/hash.js\\\");\\nvar curves = __webpack_require__(/*! ../curves */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/curves.js\\\");\\nvar utils = __webpack_require__(/*! ../utils */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/utils.js\\\");\\nvar assert = utils.assert;\\nvar parseBytes = utils.parseBytes;\\nvar KeyPair = __webpack_require__(/*! ./key */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/eddsa/key.js\\\");\\nvar Signature = __webpack_require__(/*! ./signature */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/eddsa/signature.js\\\");\\n\\nfunction EDDSA(curve) {\\n assert(curve === 'ed25519', 'only tested with ed25519 so far');\\n\\n if (!(this instanceof EDDSA))\\n return new EDDSA(curve);\\n\\n var curve = curves[curve].curve;\\n this.curve = curve;\\n this.g = curve.g;\\n this.g.precompute(curve.n.bitLength() + 1);\\n\\n this.pointClass = curve.point().constructor;\\n this.encodingLength = Math.ceil(curve.n.bitLength() / 8);\\n this.hash = hash.sha512;\\n}\\n\\nmodule.exports = EDDSA;\\n\\n/**\\n* @param {Array|String} message - message bytes\\n* @param {Array|String|KeyPair} secret - secret bytes or a keypair\\n* @returns {Signature} - signature\\n*/\\nEDDSA.prototype.sign = function sign(message, secret) {\\n message = parseBytes(message);\\n var key = this.keyFromSecret(secret);\\n var r = this.hashInt(key.messagePrefix(), message);\\n var R = this.g.mul(r);\\n var Rencoded = this.encodePoint(R);\\n var s_ = this.hashInt(Rencoded, key.pubBytes(), message)\\n .mul(key.priv());\\n var S = r.add(s_).umod(this.curve.n);\\n return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });\\n};\\n\\n/**\\n* @param {Array} message - message bytes\\n* @param {Array|String|Signature} sig - sig bytes\\n* @param {Array|String|Point|KeyPair} pub - public key\\n* @returns {Boolean} - true if public key matches sig of message\\n*/\\nEDDSA.prototype.verify = function verify(message, sig, pub) {\\n message = parseBytes(message);\\n sig = this.makeSignature(sig);\\n var key = this.keyFromPublic(pub);\\n var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);\\n var SG = this.g.mul(sig.S());\\n var RplusAh = sig.R().add(key.pub().mul(h));\\n return RplusAh.eq(SG);\\n};\\n\\nEDDSA.prototype.hashInt = function hashInt() {\\n var hash = this.hash();\\n for (var i = 0; i < arguments.length; i++)\\n hash.update(arguments[i]);\\n return utils.intFromLE(hash.digest()).umod(this.curve.n);\\n};\\n\\nEDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {\\n return KeyPair.fromPublic(this, pub);\\n};\\n\\nEDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {\\n return KeyPair.fromSecret(this, secret);\\n};\\n\\nEDDSA.prototype.makeSignature = function makeSignature(sig) {\\n if (sig instanceof Signature)\\n return sig;\\n return new Signature(this, sig);\\n};\\n\\n/**\\n* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2\\n*\\n* EDDSA defines methods for encoding and decoding points and integers. These are\\n* helper convenience methods, that pass along to utility functions implied\\n* parameters.\\n*\\n*/\\nEDDSA.prototype.encodePoint = function encodePoint(point) {\\n var enc = point.getY().toArray('le', this.encodingLength);\\n enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;\\n return enc;\\n};\\n\\nEDDSA.prototype.decodePoint = function decodePoint(bytes) {\\n bytes = utils.parseBytes(bytes);\\n\\n var lastIx = bytes.length - 1;\\n var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);\\n var xIsOdd = (bytes[lastIx] & 0x80) !== 0;\\n\\n var y = utils.intFromLE(normed);\\n return this.curve.pointFromY(y, xIsOdd);\\n};\\n\\nEDDSA.prototype.encodeInt = function encodeInt(num) {\\n return num.toArray('le', this.encodingLength);\\n};\\n\\nEDDSA.prototype.decodeInt = function decodeInt(bytes) {\\n return utils.intFromLE(bytes);\\n};\\n\\nEDDSA.prototype.isPoint = function isPoint(val) {\\n return val instanceof this.pointClass;\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/eddsa/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/eddsa/key.js\":\n/*!*************************************************************************************************!*\\\n !*** ./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/eddsa/key.js ***!\n \\*************************************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar utils = __webpack_require__(/*! ../utils */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/utils.js\\\");\\nvar assert = utils.assert;\\nvar parseBytes = utils.parseBytes;\\nvar cachedProperty = utils.cachedProperty;\\n\\n/**\\n* @param {EDDSA} eddsa - instance\\n* @param {Object} params - public/private key parameters\\n*\\n* @param {Array<Byte>} [params.secret] - secret seed bytes\\n* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)\\n* @param {Array<Byte>} [params.pub] - public key point encoded as bytes\\n*\\n*/\\nfunction KeyPair(eddsa, params) {\\n this.eddsa = eddsa;\\n this._secret = parseBytes(params.secret);\\n if (eddsa.isPoint(params.pub))\\n this._pub = params.pub;\\n else\\n this._pubBytes = parseBytes(params.pub);\\n}\\n\\nKeyPair.fromPublic = function fromPublic(eddsa, pub) {\\n if (pub instanceof KeyPair)\\n return pub;\\n return new KeyPair(eddsa, { pub: pub });\\n};\\n\\nKeyPair.fromSecret = function fromSecret(eddsa, secret) {\\n if (secret instanceof KeyPair)\\n return secret;\\n return new KeyPair(eddsa, { secret: secret });\\n};\\n\\nKeyPair.prototype.secret = function secret() {\\n return this._secret;\\n};\\n\\ncachedProperty(KeyPair, 'pubBytes', function pubBytes() {\\n return this.eddsa.encodePoint(this.pub());\\n});\\n\\ncachedProperty(KeyPair, 'pub', function pub() {\\n if (this._pubBytes)\\n return this.eddsa.decodePoint(this._pubBytes);\\n return this.eddsa.g.mul(this.priv());\\n});\\n\\ncachedProperty(KeyPair, 'privBytes', function privBytes() {\\n var eddsa = this.eddsa;\\n var hash = this.hash();\\n var lastIx = eddsa.encodingLength - 1;\\n\\n var a = hash.slice(0, eddsa.encodingLength);\\n a[0] &= 248;\\n a[lastIx] &= 127;\\n a[lastIx] |= 64;\\n\\n return a;\\n});\\n\\ncachedProperty(KeyPair, 'priv', function priv() {\\n return this.eddsa.decodeInt(this.privBytes());\\n});\\n\\ncachedProperty(KeyPair, 'hash', function hash() {\\n return this.eddsa.hash().update(this.secret()).digest();\\n});\\n\\ncachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {\\n return this.hash().slice(this.eddsa.encodingLength);\\n});\\n\\nKeyPair.prototype.sign = function sign(message) {\\n assert(this._secret, 'KeyPair can only verify');\\n return this.eddsa.sign(message, this);\\n};\\n\\nKeyPair.prototype.verify = function verify(message, sig) {\\n return this.eddsa.verify(message, sig, this);\\n};\\n\\nKeyPair.prototype.getSecret = function getSecret(enc) {\\n assert(this._secret, 'KeyPair is public only');\\n return utils.encode(this.secret(), enc);\\n};\\n\\nKeyPair.prototype.getPublic = function getPublic(enc) {\\n return utils.encode(this.pubBytes(), enc);\\n};\\n\\nmodule.exports = KeyPair;\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/eddsa/key.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/eddsa/signature.js\":\n/*!*******************************************************************************************************!*\\\n !*** ./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/eddsa/signature.js ***!\n \\*******************************************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar BN = __webpack_require__(/*! bn.js */ \\\"./node_modules/bn.js/lib/bn.js\\\");\\nvar utils = __webpack_require__(/*! ../utils */ \\\"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/utils.js\\\");\\nvar assert = utils.assert;\\nvar cachedProperty = utils.cachedProperty;\\nvar parseBytes = utils.parseBytes;\\n\\n/**\\n* @param {EDDSA} eddsa - eddsa instance\\n* @param {Array<Bytes>|Object} sig -\\n* @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes\\n* @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes\\n* @param {Array<Bytes>} [sig.Rencoded] - R point encoded\\n* @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded\\n*/\\nfunction Signature(eddsa, sig) {\\n this.eddsa = eddsa;\\n\\n if (typeof sig !== 'object')\\n sig = parseBytes(sig);\\n\\n if (Array.isArray(sig)) {\\n sig = {\\n R: sig.slice(0, eddsa.encodingLength),\\n S: sig.slice(eddsa.encodingLength)\\n };\\n }\\n\\n assert(sig.R && sig.S, 'Signature without R or S');\\n\\n if (eddsa.isPoint(sig.R))\\n this._R = sig.R;\\n if (sig.S instanceof BN)\\n this._S = sig.S;\\n\\n this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;\\n this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;\\n}\\n\\ncachedProperty(Signature, 'S', function S() {\\n return this.eddsa.decodeInt(this.Sencoded());\\n});\\n\\ncachedProperty(Signature, 'R', function R() {\\n return this.eddsa.decodePoint(this.Rencoded());\\n});\\n\\ncachedProperty(Signature, 'Rencoded', function Rencoded() {\\n return this.eddsa.encodePoint(this.R());\\n});\\n\\ncachedProperty(Signature, 'Sencoded', function Sencoded() {\\n return this.eddsa.encodeInt(this.S());\\n});\\n\\nSignature.prototype.toBytes = function toBytes() {\\n return this.Rencoded().concat(this.Sencoded());\\n};\\n\\nSignature.prototype.toHex = function toHex() {\\n return utils.encode(this.toBytes(), 'hex').toUpperCase();\\n};\\n\\nmodule.exports = Signature;\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/eddsa/signature.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js\":\n/*!*************************************************************************************************************!*\\\n !*** ./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js ***!\n \\*************************************************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"module.exports = {\\n doubles: {\\n step: 4,\\n points: [\\n [\\n 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',\\n 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'\\n ],\\n [\\n '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',\\n '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'\\n ],\\n [\\n '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',\\n 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'\\n ],\\n [\\n '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',\\n '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'\\n ],\\n [\\n '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',\\n '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'\\n ],\\n [\\n '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',\\n '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'\\n ],\\n [\\n 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',\\n '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'\\n ],\\n [\\n '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',\\n 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'\\n ],\\n [\\n 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',\\n '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'\\n ],\\n [\\n 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',\\n 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'\\n ],\\n [\\n 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',\\n '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'\\n ],\\n [\\n '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',\\n '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'\\n ],\\n [\\n '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',\\n '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'\\n ],\\n [\\n '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',\\n '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'\\n ],\\n [\\n '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',\\n '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'\\n ],\\n [\\n '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',\\n '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'\\n ],\\n [\\n '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',\\n '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'\\n ],\\n [\\n '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',\\n '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'\\n ],\\n [\\n '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',\\n 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'\\n ],\\n [\\n 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',\\n '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'\\n ],\\n [\\n 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',\\n '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'\\n ],\\n [\\n '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',\\n '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'\\n ],\\n [\\n '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',\\n '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'\\n ],\\n [\\n 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',\\n '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'\\n ],\\n [\\n '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',\\n 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'\\n ],\\n [\\n 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',\\n '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'\\n ],\\n [\\n 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',\\n 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'\\n ],\\n [\\n 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',\\n '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'\\n ],\\n [\\n 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',\\n 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'\\n ],\\n [\\n 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',\\n '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'\\n ],\\n [\\n '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',\\n 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'\\n ],\\n [\\n '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',\\n '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'\\n ],\\n [\\n 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',\\n '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'\\n ],\\n [\\n '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',\\n 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'\\n ],\\n [\\n 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',\\n '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'\\n ],\\n [\\n 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',\\n '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'\\n ],\\n [\\n 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',\\n 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'\\n ],\\n [\\n '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',\\n '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'\\n ],\\n [\\n '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',\\n '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'\\n ],\\n [\\n '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',\\n 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'\\n ],\\n [\\n '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',\\n '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'\\n ],\\n [\\n 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',\\n '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'\\n ],\\n [\\n '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',\\n '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'\\n ],\\n [\\n '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',\\n 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'\\n ],\\n [\\n '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',\\n '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'\\n ],\\n [\\n 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',\\n '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'\\n ],\\n [\\n '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',\\n 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'\\n ],\\n [\\n 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',\\n 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'\\n ],\\n [\\n 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',\\n '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'\\n ],\\n [\\n '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',\\n 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'\\n ],\\n [\\n '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',\\n 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'\\n ],\\n [\\n 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',\\n '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'\\n ],\\n [\\n 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',\\n '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'\\n ],\\n [\\n 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',\\n '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'\\n ],\\n [\\n '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',\\n 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'\\n ],\\n [\\n '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',\\n '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'\\n ],\\n [\\n 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',\\n 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'\\n ],\\n [\\n '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',\\n 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'\\n ],\\n [\\n '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',\\n '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'\\n ],\\n [\\n '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',\\n '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'\\n ],\\n [\\n 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',\\n 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'\\n ],\\n [\\n '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',\\n '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'\\n ],\\n [\\n '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',\\n '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'\\n ],\\n [\\n 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',\\n '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'\\n ],\\n [\\n 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',\\n 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'\\n ]\\n ]\\n },\\n naf: {\\n wnd: 7,\\n points: [\\n [\\n 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',\\n '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'\\n ],\\n [\\n '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',\\n 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'\\n ],\\n [\\n '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',\\n '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'\\n ],\\n [\\n 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',\\n 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'\\n ],\\n [\\n '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',\\n 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'\\n ],\\n [\\n 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',\\n 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'\\n ],\\n [\\n 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',\\n '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'\\n ],\\n [\\n 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',\\n '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'\\n ],\\n [\\n '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',\\n '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'\\n ],\\n [\\n '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',\\n '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'\\n ],\\n [\\n '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',\\n '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'\\n ],\\n [\\n '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',\\n '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'\\n ],\\n [\\n 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',\\n 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'\\n ],\\n [\\n 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',\\n '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'\\n ],\\n [\\n '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',\\n 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'\\n ],\\n [\\n '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',\\n 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'\\n ],\\n [\\n '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',\\n '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'\\n ],\\n [\\n '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',\\n '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'\\n ],\\n [\\n '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',\\n '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'\\n ],\\n [\\n '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',\\n 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'\\n ],\\n [\\n 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',\\n 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'\\n ],\\n [\\n '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',\\n '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'\\n ],\\n [\\n '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',\\n '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'\\n ],\\n [\\n 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',\\n 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'\\n ],\\n [\\n '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',\\n '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'\\n ],\\n [\\n 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',\\n 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'\\n ],\\n [\\n 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',\\n 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'\\n ],\\n [\\n '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',\\n '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'\\n ],\\n [\\n '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',\\n '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'\\n ],\\n [\\n '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',\\n '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'\\n ],\\n [\\n 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',\\n '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'\\n ],\\n [\\n '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',\\n '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'\\n ],\\n [\\n 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',\\n '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'\\n ],\\n [\\n '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',\\n 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'\\n ],\\n [\\n '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',\\n 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'\\n ],\\n [\\n 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',\\n 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'\\n ],\\n [\\n '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',\\n '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'\\n ],\\n [\\n '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',\\n 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'\\n ],\\n [\\n 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',\\n 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'\\n ],\\n [\\n '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',\\n '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'\\n ],\\n [\\n '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',\\n 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'\\n ],\\n [\\n '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',\\n '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'\\n ],\\n [\\n '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',\\n 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'\\n ],\\n [\\n 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',\\n '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'\\n ],\\n [\\n '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',\\n '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'\\n ],\\n [\\n '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',\\n 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'\\n ],\\n [\\n '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',\\n 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'\\n ],\\n [\\n 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',\\n 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'\\n ],\\n [\\n 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',\\n 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'\\n ],\\n [\\n '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',\\n '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'\\n ],\\n [\\n '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',\\n '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'\\n ],\\n [\\n 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',\\n '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'\\n ],\\n [\\n 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',\\n 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'\\n ],\\n [\\n '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',\\n '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'\\n ],\\n [\\n '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',\\n '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'\\n ],\\n [\\n 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',\\n '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'\\n ],\\n [\\n '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',\\n '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'\\n ],\\n [\\n 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',\\n 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'\\n ],\\n [\\n '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',\\n 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'\\n ],\\n [\\n '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',\\n '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'\\n ],\\n [\\n 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',\\n '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'\\n ],\\n [\\n 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',\\n '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'\\n ],\\n [\\n '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',\\n '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'\\n ],\\n [\\n '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',\\n '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'\\n ],\\n [\\n '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',\\n 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'\\n ],\\n [\\n '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',\\n 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'\\n ],\\n [\\n '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',\\n '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'\\n ],\\n [\\n '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',\\n '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'\\n ],\\n [\\n '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',\\n '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'\\n ],\\n [\\n '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',\\n 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'\\n ],\\n [\\n 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',\\n 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'\\n ],\\n [\\n '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',\\n 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'\\n ],\\n [\\n 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',\\n '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'\\n ],\\n [\\n 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',\\n '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'\\n ],\\n [\\n 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',\\n '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'\\n ],\\n [\\n 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',\\n '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'\\n ],\\n [\\n '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',\\n 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'\\n ],\\n [\\n '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',\\n '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'\\n ],\\n [\\n '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',\\n 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'\\n ],\\n [\\n 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',\\n 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'\\n ],\\n [\\n 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',\\n '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'\\n ],\\n [\\n 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',\\n 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'\\n ],\\n [\\n 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',\\n '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'\\n ],\\n [\\n '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',\\n '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'\\n ],\\n [\\n 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',\\n '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'\\n ],\\n [\\n 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',\\n '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'\\n ],\\n [\\n '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',\\n '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'\\n ],\\n [\\n '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',\\n 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'\\n ],\\n [\\n 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',\\n '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'\\n ],\\n [\\n 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',\\n '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'\\n ],\\n [\\n 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',\\n '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'\\n ],\\n [\\n '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',\\n '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'\\n ],\\n [\\n 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',\\n 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'\\n ],\\n [\\n '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',\\n 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'\\n ],\\n [\\n 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',\\n 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'\\n ],\\n [\\n 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',\\n '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'\\n ],\\n [\\n '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',\\n 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'\\n ],\\n [\\n 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',\\n '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'\\n ],\\n [\\n 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',\\n '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'\\n ],\\n [\\n 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',\\n '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'\\n ],\\n [\\n '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',\\n 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'\\n ],\\n [\\n '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',\\n 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'\\n ],\\n [\\n 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',\\n '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'\\n ],\\n [\\n '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',\\n 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'\\n ],\\n [\\n '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',\\n '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'\\n ],\\n [\\n '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',\\n 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'\\n ],\\n [\\n 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',\\n 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'\\n ],\\n [\\n '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',\\n 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'\\n ],\\n [\\n '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',\\n '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'\\n ],\\n [\\n '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',\\n 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'\\n ],\\n [\\n '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',\\n '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'\\n ],\\n [\\n 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',\\n 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'\\n ],\\n [\\n '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',\\n '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'\\n ],\\n [\\n 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',\\n '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'\\n ],\\n [\\n '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',\\n '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'\\n ],\\n [\\n 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',\\n 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'\\n ],\\n [\\n 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',\\n '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'\\n ],\\n [\\n 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',\\n 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'\\n ],\\n [\\n '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',\\n 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'\\n ],\\n [\\n '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',\\n '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'\\n ],\\n [\\n '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',\\n 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'\\n ],\\n [\\n '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',\\n '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'\\n ],\\n [\\n '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',\\n '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'\\n ],\\n [\\n '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',\\n 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'\\n ],\\n [\\n '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',\\n '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'\\n ],\\n [\\n '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',\\n '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'\\n ],\\n [\\n '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',\\n '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'\\n ]\\n ]\\n }\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/utils.js\":\n/*!*********************************************************************************************!*\\\n !*** ./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/utils.js ***!\n \\*********************************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar utils = exports;\\nvar BN = __webpack_require__(/*! bn.js */ \\\"./node_modules/bn.js/lib/bn.js\\\");\\nvar minAssert = __webpack_require__(/*! minimalistic-assert */ \\\"./node_modules/minimalistic-assert/index.js\\\");\\nvar minUtils = __webpack_require__(/*! minimalistic-crypto-utils */ \\\"./node_modules/minimalistic-crypto-utils/lib/utils.js\\\");\\n\\nutils.assert = minAssert;\\nutils.toArray = minUtils.toArray;\\nutils.zero2 = minUtils.zero2;\\nutils.toHex = minUtils.toHex;\\nutils.encode = minUtils.encode;\\n\\n// Represent num in a w-NAF form\\nfunction getNAF(num, w, bits) {\\n var naf = new Array(Math.max(num.bitLength(), bits) + 1);\\n naf.fill(0);\\n\\n var ws = 1 << (w + 1);\\n var k = num.clone();\\n\\n for (var i = 0; i < naf.length; i++) {\\n var z;\\n var mod = k.andln(ws - 1);\\n if (k.isOdd()) {\\n if (mod > (ws >> 1) - 1)\\n z = (ws >> 1) - mod;\\n else\\n z = mod;\\n k.isubn(z);\\n } else {\\n z = 0;\\n }\\n\\n naf[i] = z;\\n k.iushrn(1);\\n }\\n\\n return naf;\\n}\\nutils.getNAF = getNAF;\\n\\n// Represent k1, k2 in a Joint Sparse Form\\nfunction getJSF(k1, k2) {\\n var jsf = [\\n [],\\n []\\n ];\\n\\n k1 = k1.clone();\\n k2 = k2.clone();\\n var d1 = 0;\\n var d2 = 0;\\n while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {\\n\\n // First phase\\n var m14 = (k1.andln(3) + d1) & 3;\\n var m24 = (k2.andln(3) + d2) & 3;\\n if (m14 === 3)\\n m14 = -1;\\n if (m24 === 3)\\n m24 = -1;\\n var u1;\\n if ((m14 & 1) === 0) {\\n u1 = 0;\\n } else {\\n var m8 = (k1.andln(7) + d1) & 7;\\n if ((m8 === 3 || m8 === 5) && m24 === 2)\\n u1 = -m14;\\n else\\n u1 = m14;\\n }\\n jsf[0].push(u1);\\n\\n var u2;\\n if ((m24 & 1) === 0) {\\n u2 = 0;\\n } else {\\n var m8 = (k2.andln(7) + d2) & 7;\\n if ((m8 === 3 || m8 === 5) && m14 === 2)\\n u2 = -m24;\\n else\\n u2 = m24;\\n }\\n jsf[1].push(u2);\\n\\n // Second phase\\n if (2 * d1 === u1 + 1)\\n d1 = 1 - d1;\\n if (2 * d2 === u2 + 1)\\n d2 = 1 - d2;\\n k1.iushrn(1);\\n k2.iushrn(1);\\n }\\n\\n return jsf;\\n}\\nutils.getJSF = getJSF;\\n\\nfunction cachedProperty(obj, name, computer) {\\n var key = '_' + name;\\n obj.prototype[name] = function cachedProperty() {\\n return this[key] !== undefined ? this[key] :\\n this[key] = computer.call(this);\\n };\\n}\\nutils.cachedProperty = cachedProperty;\\n\\nfunction parseBytes(bytes) {\\n return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :\\n bytes;\\n}\\nutils.parseBytes = parseBytes;\\n\\nfunction intFromLE(bytes) {\\n return new BN(bytes, 'hex', 'le');\\n}\\nutils.intFromLE = intFromLE;\\n\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/signing-key/node_modules/elliptic/lib/elliptic/utils.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/signing-key/node_modules/elliptic/package.json\":\n/*!************************************************************************************!*\\\n !*** ./node_modules/@ethersproject/signing-key/node_modules/elliptic/package.json ***!\n \\************************************************************************************/\n/*! exports provided: _from, _id, _inBundle, _integrity, _location, _phantomChildren, _requested, _requiredBy, _resolved, _shasum, _spec, _where, author, bugs, bundleDependencies, dependencies, deprecated, description, devDependencies, files, homepage, keywords, license, main, name, repository, scripts, version, default */\n/***/ (function(module) {\n\neval(\"module.exports = {\\\"_from\\\":\\\"elliptic@6.5.2\\\",\\\"_id\\\":\\\"elliptic@6.5.2\\\",\\\"_inBundle\\\":false,\\\"_integrity\\\":\\\"sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==\\\",\\\"_location\\\":\\\"/@ethersproject/signing-key/elliptic\\\",\\\"_phantomChildren\\\":{},\\\"_requested\\\":{\\\"type\\\":\\\"version\\\",\\\"registry\\\":true,\\\"raw\\\":\\\"elliptic@6.5.2\\\",\\\"name\\\":\\\"elliptic\\\",\\\"escapedName\\\":\\\"elliptic\\\",\\\"rawSpec\\\":\\\"6.5.2\\\",\\\"saveSpec\\\":null,\\\"fetchSpec\\\":\\\"6.5.2\\\"},\\\"_requiredBy\\\":[\\\"/@ethersproject/signing-key\\\"],\\\"_resolved\\\":\\\"https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz\\\",\\\"_shasum\\\":\\\"05c5678d7173c049d8ca433552224a495d0e3762\\\",\\\"_spec\\\":\\\"elliptic@6.5.2\\\",\\\"_where\\\":\\\"/Users/kenzo/profile-hover/node_modules/@ethersproject/signing-key\\\",\\\"author\\\":{\\\"name\\\":\\\"Fedor Indutny\\\",\\\"email\\\":\\\"fedor@indutny.com\\\"},\\\"bugs\\\":{\\\"url\\\":\\\"https://github.com/indutny/elliptic/issues\\\"},\\\"bundleDependencies\\\":false,\\\"dependencies\\\":{\\\"bn.js\\\":\\\"^4.4.0\\\",\\\"brorand\\\":\\\"^1.0.1\\\",\\\"hash.js\\\":\\\"^1.0.0\\\",\\\"hmac-drbg\\\":\\\"^1.0.0\\\",\\\"inherits\\\":\\\"^2.0.1\\\",\\\"minimalistic-assert\\\":\\\"^1.0.0\\\",\\\"minimalistic-crypto-utils\\\":\\\"^1.0.0\\\"},\\\"deprecated\\\":false,\\\"description\\\":\\\"EC cryptography\\\",\\\"devDependencies\\\":{\\\"brfs\\\":\\\"^1.4.3\\\",\\\"coveralls\\\":\\\"^3.0.8\\\",\\\"grunt\\\":\\\"^1.0.4\\\",\\\"grunt-browserify\\\":\\\"^5.0.0\\\",\\\"grunt-cli\\\":\\\"^1.2.0\\\",\\\"grunt-contrib-connect\\\":\\\"^1.0.0\\\",\\\"grunt-contrib-copy\\\":\\\"^1.0.0\\\",\\\"grunt-contrib-uglify\\\":\\\"^1.0.1\\\",\\\"grunt-mocha-istanbul\\\":\\\"^3.0.1\\\",\\\"grunt-saucelabs\\\":\\\"^9.0.1\\\",\\\"istanbul\\\":\\\"^0.4.2\\\",\\\"jscs\\\":\\\"^3.0.7\\\",\\\"jshint\\\":\\\"^2.10.3\\\",\\\"mocha\\\":\\\"^6.2.2\\\"},\\\"files\\\":[\\\"lib\\\"],\\\"homepage\\\":\\\"https://github.com/indutny/elliptic\\\",\\\"keywords\\\":[\\\"EC\\\",\\\"Elliptic\\\",\\\"curve\\\",\\\"Cryptography\\\"],\\\"license\\\":\\\"MIT\\\",\\\"main\\\":\\\"lib/elliptic.js\\\",\\\"name\\\":\\\"elliptic\\\",\\\"repository\\\":{\\\"type\\\":\\\"git\\\",\\\"url\\\":\\\"git+ssh://git@github.com/indutny/elliptic.git\\\"},\\\"scripts\\\":{\\\"jscs\\\":\\\"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js\\\",\\\"jshint\\\":\\\"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js\\\",\\\"lint\\\":\\\"npm run jscs && npm run jshint\\\",\\\"test\\\":\\\"npm run lint && npm run unit\\\",\\\"unit\\\":\\\"istanbul test _mocha --reporter=spec test/index.js\\\",\\\"version\\\":\\\"grunt dist && git add dist/\\\"},\\\"version\\\":\\\"6.5.2\\\"};\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/signing-key/node_modules/elliptic/package.json?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/strings/lib.esm/_version.js\":\n/*!*****************************************************************!*\\\n !*** ./node_modules/@ethersproject/strings/lib.esm/_version.js ***!\n \\*****************************************************************/\n/*! exports provided: version */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"version\\\", function() { return version; });\\nconst version = \\\"strings/5.0.0-beta.136\\\";\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/strings/lib.esm/_version.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/strings/lib.esm/bytes32.js\":\n/*!****************************************************************!*\\\n !*** ./node_modules/@ethersproject/strings/lib.esm/bytes32.js ***!\n \\****************************************************************/\n/*! exports provided: formatBytes32String, parseBytes32String */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"formatBytes32String\\\", function() { return formatBytes32String; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"parseBytes32String\\\", function() { return parseBytes32String; });\\n/* harmony import */ var _ethersproject_constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @ethersproject/constants */ \\\"./node_modules/@ethersproject/constants/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @ethersproject/bytes */ \\\"./node_modules/@ethersproject/bytes/lib.esm/index.js\\\");\\n/* harmony import */ var _utf8__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utf8 */ \\\"./node_modules/@ethersproject/strings/lib.esm/utf8.js\\\");\\n\\n\\n\\n\\nfunction formatBytes32String(text) {\\n // Get the bytes\\n const bytes = Object(_utf8__WEBPACK_IMPORTED_MODULE_2__[\\\"toUtf8Bytes\\\"])(text);\\n // Check we have room for null-termination\\n if (bytes.length > 31) {\\n throw new Error(\\\"bytes32 string must be less than 32 bytes\\\");\\n }\\n // Zero-pad (implicitly null-terminates)\\n return Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"hexlify\\\"])(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"concat\\\"])([bytes, _ethersproject_constants__WEBPACK_IMPORTED_MODULE_0__[\\\"HashZero\\\"]]).slice(0, 32));\\n}\\nfunction parseBytes32String(bytes) {\\n const data = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_1__[\\\"arrayify\\\"])(bytes);\\n // Must be 32 bytes with a null-termination\\n if (data.length !== 32) {\\n throw new Error(\\\"invalid bytes32 - not 32 bytes long\\\");\\n }\\n if (data[31] !== 0) {\\n throw new Error(\\\"invalid bytes32 string - no null terminator\\\");\\n }\\n // Find the null termination\\n let length = 31;\\n while (data[length - 1] === 0) {\\n length--;\\n }\\n // Determine the string value\\n return Object(_utf8__WEBPACK_IMPORTED_MODULE_2__[\\\"toUtf8String\\\"])(data.slice(0, length));\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/strings/lib.esm/bytes32.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/strings/lib.esm/idna.js\":\n/*!*************************************************************!*\\\n !*** ./node_modules/@ethersproject/strings/lib.esm/idna.js ***!\n \\*************************************************************/\n/*! exports provided: _nameprepTableA1, _nameprepTableB2, _nameprepTableC, nameprep */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"_nameprepTableA1\\\", function() { return _nameprepTableA1; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"_nameprepTableB2\\\", function() { return _nameprepTableB2; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"_nameprepTableC\\\", function() { return _nameprepTableC; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"nameprep\\\", function() { return nameprep; });\\n/* harmony import */ var _utf8__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utf8 */ \\\"./node_modules/@ethersproject/strings/lib.esm/utf8.js\\\");\\n\\n\\nfunction bytes2(data) {\\n if ((data.length % 4) !== 0) {\\n throw new Error(\\\"bad data\\\");\\n }\\n let result = [];\\n for (let i = 0; i < data.length; i += 4) {\\n result.push(parseInt(data.substring(i, i + 4), 16));\\n }\\n return result;\\n}\\nfunction createTable(data, func) {\\n if (!func) {\\n func = function (value) { return [parseInt(value, 16)]; };\\n }\\n let lo = 0;\\n let result = {};\\n data.split(\\\",\\\").forEach((pair) => {\\n let comps = pair.split(\\\":\\\");\\n lo += parseInt(comps[0], 16);\\n result[lo] = func(comps[1]);\\n });\\n return result;\\n}\\nfunction createRangeTable(data) {\\n let hi = 0;\\n return data.split(\\\",\\\").map((v) => {\\n let comps = v.split(\\\"-\\\");\\n if (comps.length === 1) {\\n comps[1] = \\\"0\\\";\\n }\\n else if (comps[1] === \\\"\\\") {\\n comps[1] = \\\"1\\\";\\n }\\n let lo = hi + parseInt(comps[0], 16);\\n hi = parseInt(comps[1], 16);\\n return { l: lo, h: hi };\\n });\\n}\\nfunction matchMap(value, ranges) {\\n let lo = 0;\\n for (let i = 0; i < ranges.length; i++) {\\n let range = ranges[i];\\n lo += range.l;\\n if (value >= lo && value <= lo + range.h && ((value - lo) % (range.d || 1)) === 0) {\\n if (range.e && range.e.indexOf(value - lo) !== -1) {\\n continue;\\n }\\n return range;\\n }\\n }\\n return null;\\n}\\nconst Table_A_1_ranges = createRangeTable(\\\"221,13-1b,5f-,40-10,51-f,11-3,3-3,2-2,2-4,8,2,15,2d,28-8,88,48,27-,3-5,11-20,27-,8,28,3-5,12,18,b-a,1c-4,6-16,2-d,2-2,2,1b-4,17-9,8f-,10,f,1f-2,1c-34,33-14e,4,36-,13-,6-2,1a-f,4,9-,3-,17,8,2-2,5-,2,8-,3-,4-8,2-3,3,6-,16-6,2-,7-3,3-,17,8,3,3,3-,2,6-3,3-,4-a,5,2-6,10-b,4,8,2,4,17,8,3,6-,b,4,4-,2-e,2-4,b-10,4,9-,3-,17,8,3-,5-,9-2,3-,4-7,3-3,3,4-3,c-10,3,7-2,4,5-2,3,2,3-2,3-2,4-2,9,4-3,6-2,4,5-8,2-e,d-d,4,9,4,18,b,6-3,8,4,5-6,3-8,3-3,b-11,3,9,4,18,b,6-3,8,4,5-6,3-6,2,3-3,b-11,3,9,4,18,11-3,7-,4,5-8,2-7,3-3,b-11,3,13-2,19,a,2-,8-2,2-3,7,2,9-11,4-b,3b-3,1e-24,3,2-,3,2-,2-5,5,8,4,2,2-,3,e,4-,6,2,7-,b-,3-21,49,23-5,1c-3,9,25,10-,2-2f,23,6,3,8-2,5-5,1b-45,27-9,2a-,2-3,5b-4,45-4,53-5,8,40,2,5-,8,2,5-,28,2,5-,20,2,5-,8,2,5-,8,8,18,20,2,5-,8,28,14-5,1d-22,56-b,277-8,1e-2,52-e,e,8-a,18-8,15-b,e,4,3-b,5e-2,b-15,10,b-5,59-7,2b-555,9d-3,5b-5,17-,7-,27-,7-,9,2,2,2,20-,36,10,f-,7,14-,4,a,54-3,2-6,6-5,9-,1c-10,13-1d,1c-14,3c-,10-6,32-b,240-30,28-18,c-14,a0,115-,3,66-,b-76,5,5-,1d,24,2,5-2,2,8-,35-2,19,f-10,1d-3,311-37f,1b,5a-b,d7-19,d-3,41,57-,68-4,29-3,5f,29-37,2e-2,25-c,2c-2,4e-3,30,78-3,64-,20,19b7-49,51a7-59,48e-2,38-738,2ba5-5b,222f-,3c-94,8-b,6-4,1b,6,2,3,3,6d-20,16e-f,41-,37-7,2e-2,11-f,5-b,18-,b,14,5-3,6,88-,2,bf-2,7-,7-,7-,4-2,8,8-9,8-2ff,20,5-b,1c-b4,27-,27-cbb1,f7-9,28-2,b5-221,56,48,3-,2-,3-,5,d,2,5,3,42,5-,9,8,1d,5,6,2-2,8,153-3,123-3,33-27fd,a6da-5128,21f-5df,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3-fffd,3,2-1d,61-ff7d\\\");\\n// @TODO: Make this relative...\\nconst Table_B_1_flags = \\\"ad,34f,1806,180b,180c,180d,200b,200c,200d,2060,feff\\\".split(\\\",\\\").map((v) => parseInt(v, 16));\\nconst Table_B_2_ranges = [\\n { h: 25, s: 32, l: 65 },\\n { h: 30, s: 32, e: [23], l: 127 },\\n { h: 54, s: 1, e: [48], l: 64, d: 2 },\\n { h: 14, s: 1, l: 57, d: 2 },\\n { h: 44, s: 1, l: 17, d: 2 },\\n { h: 10, s: 1, e: [2, 6, 8], l: 61, d: 2 },\\n { h: 16, s: 1, l: 68, d: 2 },\\n { h: 84, s: 1, e: [18, 24, 66], l: 19, d: 2 },\\n { h: 26, s: 32, e: [17], l: 435 },\\n { h: 22, s: 1, l: 71, d: 2 },\\n { h: 15, s: 80, l: 40 },\\n { h: 31, s: 32, l: 16 },\\n { h: 32, s: 1, l: 80, d: 2 },\\n { h: 52, s: 1, l: 42, d: 2 },\\n { h: 12, s: 1, l: 55, d: 2 },\\n { h: 40, s: 1, e: [38], l: 15, d: 2 },\\n { h: 14, s: 1, l: 48, d: 2 },\\n { h: 37, s: 48, l: 49 },\\n { h: 148, s: 1, l: 6351, d: 2 },\\n { h: 88, s: 1, l: 160, d: 2 },\\n { h: 15, s: 16, l: 704 },\\n { h: 25, s: 26, l: 854 },\\n { h: 25, s: 32, l: 55915 },\\n { h: 37, s: 40, l: 1247 },\\n { h: 25, s: -119711, l: 53248 },\\n { h: 25, s: -119763, l: 52 },\\n { h: 25, s: -119815, l: 52 },\\n { h: 25, s: -119867, e: [1, 4, 5, 7, 8, 11, 12, 17], l: 52 },\\n { h: 25, s: -119919, l: 52 },\\n { h: 24, s: -119971, e: [2, 7, 8, 17], l: 52 },\\n { h: 24, s: -120023, e: [2, 7, 13, 15, 16, 17], l: 52 },\\n { h: 25, s: -120075, l: 52 },\\n { h: 25, s: -120127, l: 52 },\\n { h: 25, s: -120179, l: 52 },\\n { h: 25, s: -120231, l: 52 },\\n { h: 25, s: -120283, l: 52 },\\n { h: 25, s: -120335, l: 52 },\\n { h: 24, s: -119543, e: [17], l: 56 },\\n { h: 24, s: -119601, e: [17], l: 58 },\\n { h: 24, s: -119659, e: [17], l: 58 },\\n { h: 24, s: -119717, e: [17], l: 58 },\\n { h: 24, s: -119775, e: [17], l: 58 }\\n];\\nconst Table_B_2_lut_abs = createTable(\\\"b5:3bc,c3:ff,7:73,2:253,5:254,3:256,1:257,5:259,1:25b,3:260,1:263,2:269,1:268,5:26f,1:272,2:275,7:280,3:283,5:288,3:28a,1:28b,5:292,3f:195,1:1bf,29:19e,125:3b9,8b:3b2,1:3b8,1:3c5,3:3c6,1:3c0,1a:3ba,1:3c1,1:3c3,2:3b8,1:3b5,1bc9:3b9,1c:1f76,1:1f77,f:1f7a,1:1f7b,d:1f78,1:1f79,1:1f7c,1:1f7d,107:63,5:25b,4:68,1:68,1:68,3:69,1:69,1:6c,3:6e,4:70,1:71,1:72,1:72,1:72,7:7a,2:3c9,2:7a,2:6b,1:e5,1:62,1:63,3:65,1:66,2:6d,b:3b3,1:3c0,6:64,1b574:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3,20:3b8,1a:3c3\\\");\\nconst Table_B_2_lut_rel = createTable(\\\"179:1,2:1,2:1,5:1,2:1,a:4f,a:1,8:1,2:1,2:1,3:1,5:1,3:1,4:1,2:1,3:1,4:1,8:2,1:1,2:2,1:1,2:2,27:2,195:26,2:25,1:25,1:25,2:40,2:3f,1:3f,33:1,11:-6,1:-9,1ac7:-3a,6d:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,b:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,c:-8,2:-8,2:-8,2:-8,9:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,1:-8,49:-8,1:-8,1:-4a,1:-4a,d:-56,1:-56,1:-56,1:-56,d:-8,1:-8,f:-8,1:-8,3:-7\\\");\\nconst Table_B_2_complex = createTable(\\\"df:00730073,51:00690307,19:02BC006E,a7:006A030C,18a:002003B9,16:03B903080301,20:03C503080301,1d7:05650582,190f:00680331,1:00740308,1:0077030A,1:0079030A,1:006102BE,b6:03C50313,2:03C503130300,2:03C503130301,2:03C503130342,2a:1F0003B9,1:1F0103B9,1:1F0203B9,1:1F0303B9,1:1F0403B9,1:1F0503B9,1:1F0603B9,1:1F0703B9,1:1F0003B9,1:1F0103B9,1:1F0203B9,1:1F0303B9,1:1F0403B9,1:1F0503B9,1:1F0603B9,1:1F0703B9,1:1F2003B9,1:1F2103B9,1:1F2203B9,1:1F2303B9,1:1F2403B9,1:1F2503B9,1:1F2603B9,1:1F2703B9,1:1F2003B9,1:1F2103B9,1:1F2203B9,1:1F2303B9,1:1F2403B9,1:1F2503B9,1:1F2603B9,1:1F2703B9,1:1F6003B9,1:1F6103B9,1:1F6203B9,1:1F6303B9,1:1F6403B9,1:1F6503B9,1:1F6603B9,1:1F6703B9,1:1F6003B9,1:1F6103B9,1:1F6203B9,1:1F6303B9,1:1F6403B9,1:1F6503B9,1:1F6603B9,1:1F6703B9,3:1F7003B9,1:03B103B9,1:03AC03B9,2:03B10342,1:03B1034203B9,5:03B103B9,6:1F7403B9,1:03B703B9,1:03AE03B9,2:03B70342,1:03B7034203B9,5:03B703B9,6:03B903080300,1:03B903080301,3:03B90342,1:03B903080342,b:03C503080300,1:03C503080301,1:03C10313,2:03C50342,1:03C503080342,b:1F7C03B9,1:03C903B9,1:03CE03B9,2:03C90342,1:03C9034203B9,5:03C903B9,ac:00720073,5b:00B00063,6:00B00066,d:006E006F,a:0073006D,1:00740065006C,1:0074006D,124f:006800700061,2:00610075,2:006F0076,b:00700061,1:006E0061,1:03BC0061,1:006D0061,1:006B0061,1:006B0062,1:006D0062,1:00670062,3:00700066,1:006E0066,1:03BC0066,4:0068007A,1:006B0068007A,1:006D0068007A,1:00670068007A,1:00740068007A,15:00700061,1:006B00700061,1:006D00700061,1:006700700061,8:00700076,1:006E0076,1:03BC0076,1:006D0076,1:006B0076,1:006D0076,1:00700077,1:006E0077,1:03BC0077,1:006D0077,1:006B0077,1:006D0077,1:006B03C9,1:006D03C9,2:00620071,3:00632215006B0067,1:0063006F002E,1:00640062,1:00670079,2:00680070,2:006B006B,1:006B006D,9:00700068,2:00700070006D,1:00700072,2:00730076,1:00770062,c723:00660066,1:00660069,1:0066006C,1:006600660069,1:00660066006C,1:00730074,1:00730074,d:05740576,1:05740565,1:0574056B,1:057E0576,1:0574056D\\\", bytes2);\\nconst Table_C_ranges = createRangeTable(\\\"80-20,2a0-,39c,32,f71,18e,7f2-f,19-7,30-4,7-5,f81-b,5,a800-20ff,4d1-1f,110,fa-6,d174-7,2e84-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,ffff-,2,1f-5f,ff7f-20001\\\");\\nfunction flatten(values) {\\n return values.reduce((accum, value) => {\\n value.forEach((value) => { accum.push(value); });\\n return accum;\\n }, []);\\n}\\nfunction _nameprepTableA1(codepoint) {\\n return !!matchMap(codepoint, Table_A_1_ranges);\\n}\\nfunction _nameprepTableB2(codepoint) {\\n let range = matchMap(codepoint, Table_B_2_ranges);\\n if (range) {\\n return [codepoint + range.s];\\n }\\n let codes = Table_B_2_lut_abs[codepoint];\\n if (codes) {\\n return codes;\\n }\\n let shift = Table_B_2_lut_rel[codepoint];\\n if (shift) {\\n return [codepoint + shift[0]];\\n }\\n let complex = Table_B_2_complex[codepoint];\\n if (complex) {\\n return complex;\\n }\\n return null;\\n}\\nfunction _nameprepTableC(codepoint) {\\n return !!matchMap(codepoint, Table_C_ranges);\\n}\\nfunction nameprep(value) {\\n // This allows platforms with incomplete normalize to bypass\\n // it for very basic names which the built-in toLowerCase\\n // will certainly handle correctly\\n if (value.match(/^[a-z0-9-]*$/i) && value.length <= 59) {\\n return value.toLowerCase();\\n }\\n // Get the code points (keeping the current normalization)\\n let codes = Object(_utf8__WEBPACK_IMPORTED_MODULE_0__[\\\"toUtf8CodePoints\\\"])(value);\\n codes = flatten(codes.map((code) => {\\n // Substitute Table B.1 (Maps to Nothing)\\n if (Table_B_1_flags.indexOf(code) >= 0) {\\n return [];\\n }\\n if (code >= 0xfe00 && code <= 0xfe0f) {\\n return [];\\n }\\n // Substitute Table B.2 (Case Folding)\\n let codesTableB2 = _nameprepTableB2(code);\\n if (codesTableB2) {\\n return codesTableB2;\\n }\\n // No Substitution\\n return [code];\\n }));\\n // Normalize using form KC\\n codes = Object(_utf8__WEBPACK_IMPORTED_MODULE_0__[\\\"toUtf8CodePoints\\\"])(Object(_utf8__WEBPACK_IMPORTED_MODULE_0__[\\\"_toUtf8String\\\"])(codes), _utf8__WEBPACK_IMPORTED_MODULE_0__[\\\"UnicodeNormalizationForm\\\"].NFKC);\\n // Prohibit Tables C.1.2, C.2.2, C.3, C.4, C.5, C.6, C.7, C.8, C.9\\n codes.forEach((code) => {\\n if (_nameprepTableC(code)) {\\n throw new Error(\\\"STRINGPREP_CONTAINS_PROHIBITED\\\");\\n }\\n });\\n // Prohibit Unassigned Code Points (Table A.1)\\n codes.forEach((code) => {\\n if (_nameprepTableA1(code)) {\\n throw new Error(\\\"STRINGPREP_CONTAINS_UNASSIGNED\\\");\\n }\\n });\\n // IDNA extras\\n let name = Object(_utf8__WEBPACK_IMPORTED_MODULE_0__[\\\"_toUtf8String\\\"])(codes);\\n // IDNA: 4.2.3.1\\n if (name.substring(0, 1) === \\\"-\\\" || name.substring(2, 4) === \\\"--\\\" || name.substring(name.length - 1) === \\\"-\\\") {\\n throw new Error(\\\"invalid hyphen\\\");\\n }\\n // IDNA: 4.2.4\\n if (name.length > 63) {\\n throw new Error(\\\"too long\\\");\\n }\\n return name;\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/strings/lib.esm/idna.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/strings/lib.esm/index.js\":\n/*!**************************************************************!*\\\n !*** ./node_modules/@ethersproject/strings/lib.esm/index.js ***!\n \\**************************************************************/\n/*! exports provided: _toEscapedUtf8String, toUtf8Bytes, toUtf8CodePoints, toUtf8String, Utf8ErrorFuncs, Utf8ErrorReason, UnicodeNormalizationForm, formatBytes32String, parseBytes32String, nameprep */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony import */ var _bytes32__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./bytes32 */ \\\"./node_modules/@ethersproject/strings/lib.esm/bytes32.js\\\");\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"formatBytes32String\\\", function() { return _bytes32__WEBPACK_IMPORTED_MODULE_0__[\\\"formatBytes32String\\\"]; });\\n\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"parseBytes32String\\\", function() { return _bytes32__WEBPACK_IMPORTED_MODULE_0__[\\\"parseBytes32String\\\"]; });\\n\\n/* harmony import */ var _idna__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./idna */ \\\"./node_modules/@ethersproject/strings/lib.esm/idna.js\\\");\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"nameprep\\\", function() { return _idna__WEBPACK_IMPORTED_MODULE_1__[\\\"nameprep\\\"]; });\\n\\n/* harmony import */ var _utf8__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utf8 */ \\\"./node_modules/@ethersproject/strings/lib.esm/utf8.js\\\");\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"_toEscapedUtf8String\\\", function() { return _utf8__WEBPACK_IMPORTED_MODULE_2__[\\\"_toEscapedUtf8String\\\"]; });\\n\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"toUtf8Bytes\\\", function() { return _utf8__WEBPACK_IMPORTED_MODULE_2__[\\\"toUtf8Bytes\\\"]; });\\n\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"toUtf8CodePoints\\\", function() { return _utf8__WEBPACK_IMPORTED_MODULE_2__[\\\"toUtf8CodePoints\\\"]; });\\n\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"toUtf8String\\\", function() { return _utf8__WEBPACK_IMPORTED_MODULE_2__[\\\"toUtf8String\\\"]; });\\n\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"Utf8ErrorFuncs\\\", function() { return _utf8__WEBPACK_IMPORTED_MODULE_2__[\\\"Utf8ErrorFuncs\\\"]; });\\n\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"Utf8ErrorReason\\\", function() { return _utf8__WEBPACK_IMPORTED_MODULE_2__[\\\"Utf8ErrorReason\\\"]; });\\n\\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \\\"UnicodeNormalizationForm\\\", function() { return _utf8__WEBPACK_IMPORTED_MODULE_2__[\\\"UnicodeNormalizationForm\\\"]; });\\n\\n\\n\\n\\n\\n\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/strings/lib.esm/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/strings/lib.esm/utf8.js\":\n/*!*************************************************************!*\\\n !*** ./node_modules/@ethersproject/strings/lib.esm/utf8.js ***!\n \\*************************************************************/\n/*! exports provided: UnicodeNormalizationForm, Utf8ErrorReason, Utf8ErrorFuncs, toUtf8Bytes, _toEscapedUtf8String, _toUtf8String, toUtf8String, toUtf8CodePoints */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"UnicodeNormalizationForm\\\", function() { return UnicodeNormalizationForm; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"Utf8ErrorReason\\\", function() { return Utf8ErrorReason; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"Utf8ErrorFuncs\\\", function() { return Utf8ErrorFuncs; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"toUtf8Bytes\\\", function() { return toUtf8Bytes; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"_toEscapedUtf8String\\\", function() { return _toEscapedUtf8String; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"_toUtf8String\\\", function() { return _toUtf8String; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"toUtf8String\\\", function() { return toUtf8String; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"toUtf8CodePoints\\\", function() { return toUtf8CodePoints; });\\n/* harmony import */ var _ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @ethersproject/bytes */ \\\"./node_modules/@ethersproject/bytes/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @ethersproject/logger */ \\\"./node_modules/@ethersproject/logger/lib.esm/index.js\\\");\\n/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./_version */ \\\"./node_modules/@ethersproject/strings/lib.esm/_version.js\\\");\\n\\n\\n\\n\\nconst logger = new _ethersproject_logger__WEBPACK_IMPORTED_MODULE_1__[\\\"Logger\\\"](_version__WEBPACK_IMPORTED_MODULE_2__[\\\"version\\\"]);\\n///////////////////////////////\\nvar UnicodeNormalizationForm;\\n(function (UnicodeNormalizationForm) {\\n UnicodeNormalizationForm[\\\"current\\\"] = \\\"\\\";\\n UnicodeNormalizationForm[\\\"NFC\\\"] = \\\"NFC\\\";\\n UnicodeNormalizationForm[\\\"NFD\\\"] = \\\"NFD\\\";\\n UnicodeNormalizationForm[\\\"NFKC\\\"] = \\\"NFKC\\\";\\n UnicodeNormalizationForm[\\\"NFKD\\\"] = \\\"NFKD\\\";\\n})(UnicodeNormalizationForm || (UnicodeNormalizationForm = {}));\\n;\\nvar Utf8ErrorReason;\\n(function (Utf8ErrorReason) {\\n // A continuation byte was present where there was nothing to continue\\n // - offset = the index the codepoint began in\\n Utf8ErrorReason[\\\"UNEXPECTED_CONTINUE\\\"] = \\\"unexpected continuation byte\\\";\\n // An invalid (non-continuation) byte to start a UTF-8 codepoint was found\\n // - offset = the index the codepoint began in\\n Utf8ErrorReason[\\\"BAD_PREFIX\\\"] = \\\"bad codepoint prefix\\\";\\n // The string is too short to process the expected codepoint\\n // - offset = the index the codepoint began in\\n Utf8ErrorReason[\\\"OVERRUN\\\"] = \\\"string overrun\\\";\\n // A missing continuation byte was expected but not found\\n // - offset = the index the continuation byte was expected at\\n Utf8ErrorReason[\\\"MISSING_CONTINUE\\\"] = \\\"missing continuation byte\\\";\\n // The computed code point is outside the range for UTF-8\\n // - offset = start of this codepoint\\n // - badCodepoint = the computed codepoint; outside the UTF-8 range\\n Utf8ErrorReason[\\\"OUT_OF_RANGE\\\"] = \\\"out of UTF-8 range\\\";\\n // UTF-8 strings may not contain UTF-16 surrogate pairs\\n // - offset = start of this codepoint\\n // - badCodepoint = the computed codepoint; inside the UTF-16 surrogate range\\n Utf8ErrorReason[\\\"UTF16_SURROGATE\\\"] = \\\"UTF-16 surrogate\\\";\\n // The string is an overlong reperesentation\\n // - offset = start of this codepoint\\n // - badCodepoint = the computed codepoint; already bounds checked\\n Utf8ErrorReason[\\\"OVERLONG\\\"] = \\\"overlong representation\\\";\\n})(Utf8ErrorReason || (Utf8ErrorReason = {}));\\n;\\nfunction errorFunc(reason, offset, bytes, output, badCodepoint) {\\n return logger.throwArgumentError(`invalid codepoint at offset ${offset}; ${reason}`, \\\"bytes\\\", bytes);\\n}\\nfunction ignoreFunc(reason, offset, bytes, output, badCodepoint) {\\n // If there is an invalid prefix (including stray continuation), skip any additional continuation bytes\\n if (reason === Utf8ErrorReason.BAD_PREFIX || reason === Utf8ErrorReason.UNEXPECTED_CONTINUE) {\\n let i = 0;\\n for (let o = offset + 1; o < bytes.length; o++) {\\n if (bytes[o] >> 6 !== 0x02) {\\n break;\\n }\\n i++;\\n }\\n return i;\\n }\\n // This byte runs us past the end of the string, so just jump to the end\\n // (but the first byte was read already read and therefore skipped)\\n if (reason === Utf8ErrorReason.OVERRUN) {\\n return bytes.length - offset - 1;\\n }\\n // Nothing to skip\\n return 0;\\n}\\nfunction replaceFunc(reason, offset, bytes, output, badCodepoint) {\\n // Overlong representations are otherwise \\\"valid\\\" code points; just non-deistingtished\\n if (reason === Utf8ErrorReason.OVERLONG) {\\n output.push(badCodepoint);\\n return 0;\\n }\\n // Put the replacement character into the output\\n output.push(0xfffd);\\n // Otherwise, process as if ignoring errors\\n return ignoreFunc(reason, offset, bytes, output, badCodepoint);\\n}\\n// Common error handing strategies\\nconst Utf8ErrorFuncs = Object.freeze({\\n error: errorFunc,\\n ignore: ignoreFunc,\\n replace: replaceFunc\\n});\\n// http://stackoverflow.com/questions/13356493/decode-utf-8-with-javascript#13691499\\nfunction getUtf8CodePoints(bytes, onError) {\\n if (onError == null) {\\n onError = Utf8ErrorFuncs.error;\\n }\\n bytes = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__[\\\"arrayify\\\"])(bytes);\\n const result = [];\\n let i = 0;\\n // Invalid bytes are ignored\\n while (i < bytes.length) {\\n const c = bytes[i++];\\n // 0xxx xxxx\\n if (c >> 7 === 0) {\\n result.push(c);\\n continue;\\n }\\n // Multibyte; how many bytes left for this character?\\n let extraLength = null;\\n let overlongMask = null;\\n // 110x xxxx 10xx xxxx\\n if ((c & 0xe0) === 0xc0) {\\n extraLength = 1;\\n overlongMask = 0x7f;\\n // 1110 xxxx 10xx xxxx 10xx xxxx\\n }\\n else if ((c & 0xf0) === 0xe0) {\\n extraLength = 2;\\n overlongMask = 0x7ff;\\n // 1111 0xxx 10xx xxxx 10xx xxxx 10xx xxxx\\n }\\n else if ((c & 0xf8) === 0xf0) {\\n extraLength = 3;\\n overlongMask = 0xffff;\\n }\\n else {\\n if ((c & 0xc0) === 0x80) {\\n i += onError(Utf8ErrorReason.UNEXPECTED_CONTINUE, i - 1, bytes, result);\\n }\\n else {\\n i += onError(Utf8ErrorReason.BAD_PREFIX, i - 1, bytes, result);\\n }\\n continue;\\n }\\n // Do we have enough bytes in our data?\\n if (i - 1 + extraLength >= bytes.length) {\\n i += onError(Utf8ErrorReason.OVERRUN, i - 1, bytes, result);\\n continue;\\n }\\n // Remove the length prefix from the char\\n let res = c & ((1 << (8 - extraLength - 1)) - 1);\\n for (let j = 0; j < extraLength; j++) {\\n let nextChar = bytes[i];\\n // Invalid continuation byte\\n if ((nextChar & 0xc0) != 0x80) {\\n i += onError(Utf8ErrorReason.MISSING_CONTINUE, i, bytes, result);\\n res = null;\\n break;\\n }\\n ;\\n res = (res << 6) | (nextChar & 0x3f);\\n i++;\\n }\\n // See above loop for invalid contimuation byte\\n if (res === null) {\\n continue;\\n }\\n // Maximum code point\\n if (res > 0x10ffff) {\\n i += onError(Utf8ErrorReason.OUT_OF_RANGE, i - 1 - extraLength, bytes, result, res);\\n continue;\\n }\\n // Reserved for UTF-16 surrogate halves\\n if (res >= 0xd800 && res <= 0xdfff) {\\n i += onError(Utf8ErrorReason.UTF16_SURROGATE, i - 1 - extraLength, bytes, result, res);\\n continue;\\n }\\n // Check for overlong sequences (more bytes than needed)\\n if (res <= overlongMask) {\\n i += onError(Utf8ErrorReason.OVERLONG, i - 1 - extraLength, bytes, result, res);\\n continue;\\n }\\n result.push(res);\\n }\\n return result;\\n}\\n// http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array\\nfunction toUtf8Bytes(str, form = UnicodeNormalizationForm.current) {\\n if (form != UnicodeNormalizationForm.current) {\\n logger.checkNormalize();\\n str = str.normalize(form);\\n }\\n let result = [];\\n for (let i = 0; i < str.length; i++) {\\n const c = str.charCodeAt(i);\\n if (c < 0x80) {\\n result.push(c);\\n }\\n else if (c < 0x800) {\\n result.push((c >> 6) | 0xc0);\\n result.push((c & 0x3f) | 0x80);\\n }\\n else if ((c & 0xfc00) == 0xd800) {\\n i++;\\n const c2 = str.charCodeAt(i);\\n if (i >= str.length || (c2 & 0xfc00) !== 0xdc00) {\\n throw new Error(\\\"invalid utf-8 string\\\");\\n }\\n // Surrogate Pair\\n const pair = 0x10000 + ((c & 0x03ff) << 10) + (c2 & 0x03ff);\\n result.push((pair >> 18) | 0xf0);\\n result.push(((pair >> 12) & 0x3f) | 0x80);\\n result.push(((pair >> 6) & 0x3f) | 0x80);\\n result.push((pair & 0x3f) | 0x80);\\n }\\n else {\\n result.push((c >> 12) | 0xe0);\\n result.push(((c >> 6) & 0x3f) | 0x80);\\n result.push((c & 0x3f) | 0x80);\\n }\\n }\\n return Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_0__[\\\"arrayify\\\"])(result);\\n}\\n;\\nfunction escapeChar(value) {\\n const hex = (\\\"0000\\\" + value.toString(16));\\n return \\\"\\\\\\\\u\\\" + hex.substring(hex.length - 4);\\n}\\nfunction _toEscapedUtf8String(bytes, onError) {\\n return '\\\"' + getUtf8CodePoints(bytes, onError).map((codePoint) => {\\n if (codePoint < 256) {\\n switch (codePoint) {\\n case 8: return \\\"\\\\\\\\b\\\";\\n case 9: return \\\"\\\\\\\\t\\\";\\n case 10: return \\\"\\\\\\\\n\\\";\\n case 13: return \\\"\\\\\\\\r\\\";\\n case 34: return \\\"\\\\\\\\\\\\\\\"\\\";\\n case 92: return \\\"\\\\\\\\\\\\\\\\\\\";\\n }\\n if (codePoint >= 32 && codePoint < 127) {\\n return String.fromCharCode(codePoint);\\n }\\n }\\n if (codePoint <= 0xffff) {\\n return escapeChar(codePoint);\\n }\\n codePoint -= 0x10000;\\n return escapeChar(((codePoint >> 10) & 0x3ff) + 0xd800) + escapeChar((codePoint & 0x3ff) + 0xdc00);\\n }).join(\\\"\\\") + '\\\"';\\n}\\nfunction _toUtf8String(codePoints) {\\n return codePoints.map((codePoint) => {\\n if (codePoint <= 0xffff) {\\n return String.fromCharCode(codePoint);\\n }\\n codePoint -= 0x10000;\\n return String.fromCharCode((((codePoint >> 10) & 0x3ff) + 0xd800), ((codePoint & 0x3ff) + 0xdc00));\\n }).join(\\\"\\\");\\n}\\nfunction toUtf8String(bytes, onError) {\\n return _toUtf8String(getUtf8CodePoints(bytes, onError));\\n}\\nfunction toUtf8CodePoints(str, form = UnicodeNormalizationForm.current) {\\n return getUtf8CodePoints(toUtf8Bytes(str, form));\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/strings/lib.esm/utf8.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/transactions/lib.esm/_version.js\":\n/*!**********************************************************************!*\\\n !*** ./node_modules/@ethersproject/transactions/lib.esm/_version.js ***!\n \\**********************************************************************/\n/*! exports provided: version */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"version\\\", function() { return version; });\\nconst version = \\\"transactions/5.0.0-beta.134\\\";\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/transactions/lib.esm/_version.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/transactions/lib.esm/index.js\":\n/*!*******************************************************************!*\\\n !*** ./node_modules/@ethersproject/transactions/lib.esm/index.js ***!\n \\*******************************************************************/\n/*! exports provided: computeAddress, recoverAddress, serialize, parse */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"computeAddress\\\", function() { return computeAddress; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"recoverAddress\\\", function() { return recoverAddress; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"serialize\\\", function() { return serialize; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"parse\\\", function() { return parse; });\\n/* harmony import */ var _ethersproject_address__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @ethersproject/address */ \\\"./node_modules/@ethersproject/address/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_bignumber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @ethersproject/bignumber */ \\\"./node_modules/@ethersproject/bignumber/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_bytes__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @ethersproject/bytes */ \\\"./node_modules/@ethersproject/bytes/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_constants__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @ethersproject/constants */ \\\"./node_modules/@ethersproject/constants/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_keccak256__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @ethersproject/keccak256 */ \\\"./node_modules/@ethersproject/keccak256/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_properties__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @ethersproject/properties */ \\\"./node_modules/@ethersproject/properties/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_rlp__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @ethersproject/rlp */ \\\"./node_modules/@ethersproject/rlp/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_signing_key__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @ethersproject/signing-key */ \\\"./node_modules/@ethersproject/signing-key/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_logger__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @ethersproject/logger */ \\\"./node_modules/@ethersproject/logger/lib.esm/index.js\\\");\\n/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./_version */ \\\"./node_modules/@ethersproject/transactions/lib.esm/_version.js\\\");\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nconst logger = new _ethersproject_logger__WEBPACK_IMPORTED_MODULE_8__[\\\"Logger\\\"](_version__WEBPACK_IMPORTED_MODULE_9__[\\\"version\\\"]);\\n///////////////////////////////\\nfunction handleAddress(value) {\\n if (value === \\\"0x\\\") {\\n return null;\\n }\\n return Object(_ethersproject_address__WEBPACK_IMPORTED_MODULE_0__[\\\"getAddress\\\"])(value);\\n}\\nfunction handleNumber(value) {\\n if (value === \\\"0x\\\") {\\n return _ethersproject_constants__WEBPACK_IMPORTED_MODULE_3__[\\\"Zero\\\"];\\n }\\n return _ethersproject_bignumber__WEBPACK_IMPORTED_MODULE_1__[\\\"BigNumber\\\"].from(value);\\n}\\nconst transactionFields = [\\n { name: \\\"nonce\\\", maxLength: 32, numeric: true },\\n { name: \\\"gasPrice\\\", maxLength: 32, numeric: true },\\n { name: \\\"gasLimit\\\", maxLength: 32, numeric: true },\\n { name: \\\"to\\\", length: 20 },\\n { name: \\\"value\\\", maxLength: 32, numeric: true },\\n { name: \\\"data\\\" },\\n];\\nconst allowedTransactionKeys = {\\n chainId: true, data: true, gasLimit: true, gasPrice: true, nonce: true, to: true, value: true\\n};\\nfunction computeAddress(key) {\\n const publicKey = Object(_ethersproject_signing_key__WEBPACK_IMPORTED_MODULE_7__[\\\"computePublicKey\\\"])(key);\\n return Object(_ethersproject_address__WEBPACK_IMPORTED_MODULE_0__[\\\"getAddress\\\"])(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_2__[\\\"hexDataSlice\\\"])(Object(_ethersproject_keccak256__WEBPACK_IMPORTED_MODULE_4__[\\\"keccak256\\\"])(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_2__[\\\"hexDataSlice\\\"])(publicKey, 1)), 12));\\n}\\nfunction recoverAddress(digest, signature) {\\n return computeAddress(Object(_ethersproject_signing_key__WEBPACK_IMPORTED_MODULE_7__[\\\"recoverPublicKey\\\"])(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_2__[\\\"arrayify\\\"])(digest), signature));\\n}\\nfunction serialize(transaction, signature) {\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_5__[\\\"checkProperties\\\"])(transaction, allowedTransactionKeys);\\n const raw = [];\\n transactionFields.forEach(function (fieldInfo) {\\n let value = transaction[fieldInfo.name] || ([]);\\n const options = {};\\n if (fieldInfo.numeric) {\\n options.hexPad = \\\"left\\\";\\n }\\n value = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_2__[\\\"arrayify\\\"])(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_2__[\\\"hexlify\\\"])(value, options));\\n // Fixed-width field\\n if (fieldInfo.length && value.length !== fieldInfo.length && value.length > 0) {\\n logger.throwArgumentError(\\\"invalid length for \\\" + fieldInfo.name, (\\\"transaction:\\\" + fieldInfo.name), value);\\n }\\n // Variable-width (with a maximum)\\n if (fieldInfo.maxLength) {\\n value = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_2__[\\\"stripZeros\\\"])(value);\\n if (value.length > fieldInfo.maxLength) {\\n logger.throwArgumentError(\\\"invalid length for \\\" + fieldInfo.name, (\\\"transaction:\\\" + fieldInfo.name), value);\\n }\\n }\\n raw.push(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_2__[\\\"hexlify\\\"])(value));\\n });\\n let chainId = 0;\\n if (transaction.chainId != null) {\\n // A chainId was provided; if non-zero we'll use EIP-155\\n chainId = transaction.chainId;\\n if (typeof (chainId) !== \\\"number\\\") {\\n logger.throwArgumentError(\\\"invalid transaction.chainId\\\", \\\"transaction\\\", transaction);\\n }\\n }\\n else if (signature && !Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_2__[\\\"isBytesLike\\\"])(signature) && signature.v > 28) {\\n // No chainId provided, but the signature is signing with EIP-155; derive chainId\\n chainId = Math.floor((signature.v - 35) / 2);\\n }\\n // We have an EIP-155 transaction (chainId was specified and non-zero)\\n if (chainId !== 0) {\\n raw.push(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_2__[\\\"hexlify\\\"])(chainId));\\n raw.push(\\\"0x\\\");\\n raw.push(\\\"0x\\\");\\n }\\n // Requesting an unsigned transation\\n if (!signature) {\\n return _ethersproject_rlp__WEBPACK_IMPORTED_MODULE_6__[\\\"encode\\\"](raw);\\n }\\n // The splitSignature will ensure the transaction has a recoveryParam in the\\n // case that the signTransaction function only adds a v.\\n const sig = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_2__[\\\"splitSignature\\\"])(signature);\\n // We pushed a chainId and null r, s on for hashing only; remove those\\n let v = 27 + sig.recoveryParam;\\n if (chainId !== 0) {\\n raw.pop();\\n raw.pop();\\n raw.pop();\\n v += chainId * 2 + 8;\\n // If an EIP-155 v (directly or indirectly; maybe _vs) was provided, check it!\\n if (sig.v > 28 && sig.v !== v) {\\n logger.throwArgumentError(\\\"transaction.chainId/signature.v mismatch\\\", \\\"signature\\\", signature);\\n }\\n }\\n else if (sig.v !== v) {\\n logger.throwArgumentError(\\\"transaction.chainId/signature.v mismatch\\\", \\\"signature\\\", signature);\\n }\\n raw.push(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_2__[\\\"hexlify\\\"])(v));\\n raw.push(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_2__[\\\"stripZeros\\\"])(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_2__[\\\"arrayify\\\"])(sig.r)));\\n raw.push(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_2__[\\\"stripZeros\\\"])(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_2__[\\\"arrayify\\\"])(sig.s)));\\n return _ethersproject_rlp__WEBPACK_IMPORTED_MODULE_6__[\\\"encode\\\"](raw);\\n}\\nfunction parse(rawTransaction) {\\n const transaction = _ethersproject_rlp__WEBPACK_IMPORTED_MODULE_6__[\\\"decode\\\"](rawTransaction);\\n if (transaction.length !== 9 && transaction.length !== 6) {\\n logger.throwArgumentError(\\\"invalid raw transaction\\\", \\\"rawTransactin\\\", rawTransaction);\\n }\\n const tx = {\\n nonce: handleNumber(transaction[0]).toNumber(),\\n gasPrice: handleNumber(transaction[1]),\\n gasLimit: handleNumber(transaction[2]),\\n to: handleAddress(transaction[3]),\\n value: handleNumber(transaction[4]),\\n data: transaction[5],\\n chainId: 0\\n };\\n // Legacy unsigned transaction\\n if (transaction.length === 6) {\\n return tx;\\n }\\n try {\\n tx.v = _ethersproject_bignumber__WEBPACK_IMPORTED_MODULE_1__[\\\"BigNumber\\\"].from(transaction[6]).toNumber();\\n }\\n catch (error) {\\n console.log(error);\\n return tx;\\n }\\n tx.r = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_2__[\\\"hexZeroPad\\\"])(transaction[7], 32);\\n tx.s = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_2__[\\\"hexZeroPad\\\"])(transaction[8], 32);\\n if (_ethersproject_bignumber__WEBPACK_IMPORTED_MODULE_1__[\\\"BigNumber\\\"].from(tx.r).isZero() && _ethersproject_bignumber__WEBPACK_IMPORTED_MODULE_1__[\\\"BigNumber\\\"].from(tx.s).isZero()) {\\n // EIP-155 unsigned transaction\\n tx.chainId = tx.v;\\n tx.v = 0;\\n }\\n else {\\n // Signed Tranasaction\\n tx.chainId = Math.floor((tx.v - 35) / 2);\\n if (tx.chainId < 0) {\\n tx.chainId = 0;\\n }\\n let recoveryParam = tx.v - 27;\\n const raw = transaction.slice(0, 6);\\n if (tx.chainId !== 0) {\\n raw.push(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_2__[\\\"hexlify\\\"])(tx.chainId));\\n raw.push(\\\"0x\\\");\\n raw.push(\\\"0x\\\");\\n recoveryParam -= tx.chainId * 2 + 8;\\n }\\n const digest = Object(_ethersproject_keccak256__WEBPACK_IMPORTED_MODULE_4__[\\\"keccak256\\\"])(_ethersproject_rlp__WEBPACK_IMPORTED_MODULE_6__[\\\"encode\\\"](raw));\\n try {\\n tx.from = recoverAddress(digest, { r: Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_2__[\\\"hexlify\\\"])(tx.r), s: Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_2__[\\\"hexlify\\\"])(tx.s), recoveryParam: recoveryParam });\\n }\\n catch (error) {\\n console.log(error);\\n }\\n tx.hash = Object(_ethersproject_keccak256__WEBPACK_IMPORTED_MODULE_4__[\\\"keccak256\\\"])(rawTransaction);\\n }\\n return tx;\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/transactions/lib.esm/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/wallet/lib.esm/_version.js\":\n/*!****************************************************************!*\\\n !*** ./node_modules/@ethersproject/wallet/lib.esm/_version.js ***!\n \\****************************************************************/\n/*! exports provided: version */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"version\\\", function() { return version; });\\nconst version = \\\"wallet/5.0.0-beta.138\\\";\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/wallet/lib.esm/_version.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/wallet/lib.esm/index.js\":\n/*!*************************************************************!*\\\n !*** ./node_modules/@ethersproject/wallet/lib.esm/index.js ***!\n \\*************************************************************/\n/*! exports provided: Wallet, verifyMessage */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"Wallet\\\", function() { return Wallet; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"verifyMessage\\\", function() { return verifyMessage; });\\n/* harmony import */ var _ethersproject_address__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @ethersproject/address */ \\\"./node_modules/@ethersproject/address/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_abstract_provider__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @ethersproject/abstract-provider */ \\\"./node_modules/@ethersproject/abstract-provider/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_abstract_signer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @ethersproject/abstract-signer */ \\\"./node_modules/@ethersproject/abstract-signer/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_bytes__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @ethersproject/bytes */ \\\"./node_modules/@ethersproject/bytes/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_hash__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @ethersproject/hash */ \\\"./node_modules/@ethersproject/hash/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_hdnode__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @ethersproject/hdnode */ \\\"./node_modules/@ethersproject/hdnode/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_keccak256__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @ethersproject/keccak256 */ \\\"./node_modules/@ethersproject/keccak256/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_properties__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @ethersproject/properties */ \\\"./node_modules/@ethersproject/properties/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_random__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @ethersproject/random */ \\\"./node_modules/@ethersproject/random/lib/browser.js\\\");\\n/* harmony import */ var _ethersproject_random__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_ethersproject_random__WEBPACK_IMPORTED_MODULE_8__);\\n/* harmony import */ var _ethersproject_signing_key__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @ethersproject/signing-key */ \\\"./node_modules/@ethersproject/signing-key/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_json_wallets__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @ethersproject/json-wallets */ \\\"./node_modules/@ethersproject/json-wallets/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_transactions__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @ethersproject/transactions */ \\\"./node_modules/@ethersproject/transactions/lib.esm/index.js\\\");\\n/* harmony import */ var _ethersproject_logger__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @ethersproject/logger */ \\\"./node_modules/@ethersproject/logger/lib.esm/index.js\\\");\\n/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./_version */ \\\"./node_modules/@ethersproject/wallet/lib.esm/_version.js\\\");\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nconst logger = new _ethersproject_logger__WEBPACK_IMPORTED_MODULE_12__[\\\"Logger\\\"](_version__WEBPACK_IMPORTED_MODULE_13__[\\\"version\\\"]);\\nfunction isAccount(value) {\\n return (value != null && Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_3__[\\\"isHexString\\\"])(value.privateKey, 32) && value.address != null);\\n}\\nfunction hasMnemonic(value) {\\n const mnemonic = value.mnemonic;\\n return (mnemonic && mnemonic.phrase);\\n}\\nclass Wallet extends _ethersproject_abstract_signer__WEBPACK_IMPORTED_MODULE_2__[\\\"Signer\\\"] {\\n constructor(privateKey, provider) {\\n logger.checkNew(new.target, Wallet);\\n super();\\n if (isAccount(privateKey)) {\\n const signingKey = new _ethersproject_signing_key__WEBPACK_IMPORTED_MODULE_9__[\\\"SigningKey\\\"](privateKey.privateKey);\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_7__[\\\"defineReadOnly\\\"])(this, \\\"_signingKey\\\", () => signingKey);\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_7__[\\\"defineReadOnly\\\"])(this, \\\"address\\\", Object(_ethersproject_transactions__WEBPACK_IMPORTED_MODULE_11__[\\\"computeAddress\\\"])(this.publicKey));\\n if (this.address !== Object(_ethersproject_address__WEBPACK_IMPORTED_MODULE_0__[\\\"getAddress\\\"])(privateKey.address)) {\\n logger.throwArgumentError(\\\"privateKey/address mismatch\\\", \\\"privateKey\\\", \\\"[REDCACTED]\\\");\\n }\\n if (hasMnemonic(privateKey)) {\\n const srcMnemonic = privateKey.mnemonic;\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_7__[\\\"defineReadOnly\\\"])(this, \\\"_mnemonic\\\", () => ({\\n phrase: srcMnemonic.phrase,\\n path: srcMnemonic.path || _ethersproject_hdnode__WEBPACK_IMPORTED_MODULE_5__[\\\"defaultPath\\\"],\\n locale: srcMnemonic.locale || \\\"en\\\"\\n }));\\n const mnemonic = this.mnemonic;\\n const node = _ethersproject_hdnode__WEBPACK_IMPORTED_MODULE_5__[\\\"HDNode\\\"].fromMnemonic(mnemonic.phrase, null, mnemonic.locale).derivePath(mnemonic.path);\\n if (Object(_ethersproject_transactions__WEBPACK_IMPORTED_MODULE_11__[\\\"computeAddress\\\"])(node.privateKey) !== this.address) {\\n logger.throwArgumentError(\\\"mnemonic/address mismatch\\\", \\\"privateKey\\\", \\\"[REDCACTED]\\\");\\n }\\n }\\n else {\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_7__[\\\"defineReadOnly\\\"])(this, \\\"_mnemonic\\\", () => null);\\n }\\n }\\n else {\\n if (_ethersproject_signing_key__WEBPACK_IMPORTED_MODULE_9__[\\\"SigningKey\\\"].isSigningKey(privateKey)) {\\n if (privateKey.curve !== \\\"secp256k1\\\") {\\n logger.throwArgumentError(\\\"unsupported curve; must be secp256k1\\\", \\\"privateKey\\\", \\\"[REDACTED]\\\");\\n }\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_7__[\\\"defineReadOnly\\\"])(this, \\\"_signingKey\\\", () => privateKey);\\n }\\n else {\\n const signingKey = new _ethersproject_signing_key__WEBPACK_IMPORTED_MODULE_9__[\\\"SigningKey\\\"](privateKey);\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_7__[\\\"defineReadOnly\\\"])(this, \\\"_signingKey\\\", () => signingKey);\\n }\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_7__[\\\"defineReadOnly\\\"])(this, \\\"_mnemonic\\\", () => null);\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_7__[\\\"defineReadOnly\\\"])(this, \\\"address\\\", Object(_ethersproject_transactions__WEBPACK_IMPORTED_MODULE_11__[\\\"computeAddress\\\"])(this.publicKey));\\n }\\n if (provider && !_ethersproject_abstract_provider__WEBPACK_IMPORTED_MODULE_1__[\\\"Provider\\\"].isProvider(provider)) {\\n logger.throwArgumentError(\\\"invalid provider\\\", \\\"provider\\\", provider);\\n }\\n Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_7__[\\\"defineReadOnly\\\"])(this, \\\"provider\\\", provider || null);\\n }\\n get mnemonic() { return this._mnemonic(); }\\n get privateKey() { return this._signingKey().privateKey; }\\n get publicKey() { return this._signingKey().publicKey; }\\n getAddress() {\\n return Promise.resolve(this.address);\\n }\\n connect(provider) {\\n return new Wallet(this, provider);\\n }\\n signTransaction(transaction) {\\n return Object(_ethersproject_properties__WEBPACK_IMPORTED_MODULE_7__[\\\"resolveProperties\\\"])(transaction).then((tx) => {\\n if (tx.from != null) {\\n if (Object(_ethersproject_address__WEBPACK_IMPORTED_MODULE_0__[\\\"getAddress\\\"])(tx.from) !== this.address) {\\n throw new Error(\\\"transaction from address mismatch\\\");\\n }\\n delete tx.from;\\n }\\n const signature = this._signingKey().signDigest(Object(_ethersproject_keccak256__WEBPACK_IMPORTED_MODULE_6__[\\\"keccak256\\\"])(Object(_ethersproject_transactions__WEBPACK_IMPORTED_MODULE_11__[\\\"serialize\\\"])(tx)));\\n return Object(_ethersproject_transactions__WEBPACK_IMPORTED_MODULE_11__[\\\"serialize\\\"])(tx, signature);\\n });\\n }\\n signMessage(message) {\\n return Promise.resolve(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_3__[\\\"joinSignature\\\"])(this._signingKey().signDigest(Object(_ethersproject_hash__WEBPACK_IMPORTED_MODULE_4__[\\\"hashMessage\\\"])(message))));\\n }\\n encrypt(password, options, progressCallback) {\\n if (typeof (options) === \\\"function\\\" && !progressCallback) {\\n progressCallback = options;\\n options = {};\\n }\\n if (progressCallback && typeof (progressCallback) !== \\\"function\\\") {\\n throw new Error(\\\"invalid callback\\\");\\n }\\n if (!options) {\\n options = {};\\n }\\n return Object(_ethersproject_json_wallets__WEBPACK_IMPORTED_MODULE_10__[\\\"encryptKeystore\\\"])(this, password, options, progressCallback);\\n }\\n /**\\n * Static methods to create Wallet instances.\\n */\\n static createRandom(options) {\\n let entropy = Object(_ethersproject_random__WEBPACK_IMPORTED_MODULE_8__[\\\"randomBytes\\\"])(16);\\n if (!options) {\\n options = {};\\n }\\n if (options.extraEntropy) {\\n entropy = Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_3__[\\\"arrayify\\\"])(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_3__[\\\"hexDataSlice\\\"])(Object(_ethersproject_keccak256__WEBPACK_IMPORTED_MODULE_6__[\\\"keccak256\\\"])(Object(_ethersproject_bytes__WEBPACK_IMPORTED_MODULE_3__[\\\"concat\\\"])([entropy, options.extraEntropy])), 0, 16));\\n }\\n const mnemonic = Object(_ethersproject_hdnode__WEBPACK_IMPORTED_MODULE_5__[\\\"entropyToMnemonic\\\"])(entropy, options.locale);\\n return Wallet.fromMnemonic(mnemonic, options.path, options.locale);\\n }\\n static fromEncryptedJson(json, password, progressCallback) {\\n return Object(_ethersproject_json_wallets__WEBPACK_IMPORTED_MODULE_10__[\\\"decryptJsonWallet\\\"])(json, password, progressCallback).then((account) => {\\n return new Wallet(account);\\n });\\n }\\n static fromEncryptedJsonSync(json, password) {\\n return new Wallet(Object(_ethersproject_json_wallets__WEBPACK_IMPORTED_MODULE_10__[\\\"decryptJsonWalletSync\\\"])(json, password));\\n }\\n static fromMnemonic(mnemonic, path, wordlist) {\\n if (!path) {\\n path = _ethersproject_hdnode__WEBPACK_IMPORTED_MODULE_5__[\\\"defaultPath\\\"];\\n }\\n return new Wallet(_ethersproject_hdnode__WEBPACK_IMPORTED_MODULE_5__[\\\"HDNode\\\"].fromMnemonic(mnemonic, null, wordlist).derivePath(path));\\n }\\n}\\nfunction verifyMessage(message, signature) {\\n return Object(_ethersproject_transactions__WEBPACK_IMPORTED_MODULE_11__[\\\"recoverAddress\\\"])(Object(_ethersproject_hash__WEBPACK_IMPORTED_MODULE_4__[\\\"hashMessage\\\"])(message), signature);\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/wallet/lib.esm/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/wordlists/lib/_version.js\":\n/*!***************************************************************!*\\\n !*** ./node_modules/@ethersproject/wordlists/lib/_version.js ***!\n \\***************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, \\\"__esModule\\\", { value: true });\\nexports.version = \\\"wordlists/5.0.0-beta.135\\\";\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/wordlists/lib/_version.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/wordlists/lib/browser.js\":\n/*!**************************************************************!*\\\n !*** ./node_modules/@ethersproject/wordlists/lib/browser.js ***!\n \\**************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, \\\"__esModule\\\", { value: true });\\n// Wordlists\\n// See: https://github.com/bitcoin/bips/blob/master/bip-0039/bip-0039-wordlists.md\\nvar wordlist_1 = __webpack_require__(/*! ./wordlist */ \\\"./node_modules/@ethersproject/wordlists/lib/wordlist.js\\\");\\nexports.Wordlist = wordlist_1.Wordlist;\\nvar lang_en_1 = __webpack_require__(/*! ./lang-en */ \\\"./node_modules/@ethersproject/wordlists/lib/lang-en.js\\\");\\nvar wordlists = { en: lang_en_1.langEn };\\nexports.wordlists = wordlists;\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/wordlists/lib/browser.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/wordlists/lib/lang-en.js\":\n/*!**************************************************************!*\\\n !*** ./node_modules/@ethersproject/wordlists/lib/lang-en.js ***!\n \\**************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nvar __extends = (this && this.__extends) || (function () {\\n var extendStatics = function (d, b) {\\n extendStatics = Object.setPrototypeOf ||\\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\\n return extendStatics(d, b);\\n };\\n return function (d, b) {\\n extendStatics(d, b);\\n function __() { this.constructor = d; }\\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\\n };\\n})();\\nObject.defineProperty(exports, \\\"__esModule\\\", { value: true });\\nvar wordlist_1 = __webpack_require__(/*! ./wordlist */ \\\"./node_modules/@ethersproject/wordlists/lib/wordlist.js\\\");\\nvar words = \\\"AbandonAbilityAbleAboutAboveAbsentAbsorbAbstractAbsurdAbuseAccessAccidentAccountAccuseAchieveAcidAcousticAcquireAcrossActActionActorActressActualAdaptAddAddictAddressAdjustAdmitAdultAdvanceAdviceAerobicAffairAffordAfraidAgainAgeAgentAgreeAheadAimAirAirportAisleAlarmAlbumAlcoholAlertAlienAllAlleyAllowAlmostAloneAlphaAlreadyAlsoAlterAlwaysAmateurAmazingAmongAmountAmusedAnalystAnchorAncientAngerAngleAngryAnimalAnkleAnnounceAnnualAnotherAnswerAntennaAntiqueAnxietyAnyApartApologyAppearAppleApproveAprilArchArcticAreaArenaArgueArmArmedArmorArmyAroundArrangeArrestArriveArrowArtArtefactArtistArtworkAskAspectAssaultAssetAssistAssumeAsthmaAthleteAtomAttackAttendAttitudeAttractAuctionAuditAugustAuntAuthorAutoAutumnAverageAvocadoAvoidAwakeAwareAwayAwesomeAwfulAwkwardAxisBabyBachelorBaconBadgeBagBalanceBalconyBallBambooBananaBannerBarBarelyBargainBarrelBaseBasicBasketBattleBeachBeanBeautyBecauseBecomeBeefBeforeBeginBehaveBehindBelieveBelowBeltBenchBenefitBestBetrayBetterBetweenBeyondBicycleBidBikeBindBiologyBirdBirthBitterBlackBladeBlameBlanketBlastBleakBlessBlindBloodBlossomBlouseBlueBlurBlushBoardBoatBodyBoilBombBoneBonusBookBoostBorderBoringBorrowBossBottomBounceBoxBoyBracketBrainBrandBrassBraveBreadBreezeBrickBridgeBriefBrightBringBriskBroccoliBrokenBronzeBroomBrotherBrownBrushBubbleBuddyBudgetBuffaloBuildBulbBulkBulletBundleBunkerBurdenBurgerBurstBusBusinessBusyButterBuyerBuzzCabbageCabinCableCactusCageCakeCallCalmCameraCampCanCanalCancelCandyCannonCanoeCanvasCanyonCapableCapitalCaptainCarCarbonCardCargoCarpetCarryCartCaseCashCasinoCastleCasualCatCatalogCatchCategoryCattleCaughtCauseCautionCaveCeilingCeleryCementCensusCenturyCerealCertainChairChalkChampionChangeChaosChapterChargeChaseChatCheapCheckCheeseChefCherryChestChickenChiefChildChimneyChoiceChooseChronicChuckleChunkChurnCigarCinnamonCircleCitizenCityCivilClaimClapClarifyClawClayCleanClerkCleverClickClientCliffClimbClinicClipClockClogCloseClothCloudClownClubClumpClusterClutchCoachCoastCoconutCodeCoffeeCoilCoinCollectColorColumnCombineComeComfortComicCommonCompanyConcertConductConfirmCongressConnectConsiderControlConvinceCookCoolCopperCopyCoralCoreCornCorrectCostCottonCouchCountryCoupleCourseCousinCoverCoyoteCrackCradleCraftCramCraneCrashCraterCrawlCrazyCreamCreditCreekCrewCricketCrimeCrispCriticCropCrossCrouchCrowdCrucialCruelCruiseCrumbleCrunchCrushCryCrystalCubeCultureCupCupboardCuriousCurrentCurtainCurveCushionCustomCuteCycleDadDamageDampDanceDangerDaringDashDaughterDawnDayDealDebateDebrisDecadeDecemberDecideDeclineDecorateDecreaseDeerDefenseDefineDefyDegreeDelayDeliverDemandDemiseDenialDentistDenyDepartDependDepositDepthDeputyDeriveDescribeDesertDesignDeskDespairDestroyDetailDetectDevelopDeviceDevoteDiagramDialDiamondDiaryDiceDieselDietDifferDigitalDignityDilemmaDinnerDinosaurDirectDirtDisagreeDiscoverDiseaseDishDismissDisorderDisplayDistanceDivertDivideDivorceDizzyDoctorDocumentDogDollDolphinDomainDonateDonkeyDonorDoorDoseDoubleDoveDraftDragonDramaDrasticDrawDreamDressDriftDrillDrinkDripDriveDropDrumDryDuckDumbDuneDuringDustDutchDutyDwarfDynamicEagerEagleEarlyEarnEarthEasilyEastEasyEchoEcologyEconomyEdgeEditEducateEffortEggEightEitherElbowElderElectricElegantElementElephantElevatorEliteElseEmbarkEmbodyEmbraceEmergeEmotionEmployEmpowerEmptyEnableEnactEndEndlessEndorseEnemyEnergyEnforceEngageEngineEnhanceEnjoyEnlistEnoughEnrichEnrollEnsureEnterEntireEntryEnvelopeEpisodeEqualEquipEraEraseErodeErosionErrorEruptEscapeEssayEssenceEstateEternalEthicsEvidenceEvilEvokeEvolveExactExampleExcessExchangeExciteExcludeExcuseExecuteExerciseExhaustExhibitExileExistExitExoticExpandExpectExpireExplainExposeExpressExtendExtraEyeEyebrowFabricFaceFacultyFadeFaintFaithFallFalseFameFamilyFamousFanFancyFantasyFarmFashionFatFatalFatherFatigueFaultFavoriteFeatureFebruaryFederalFeeFeedFeelFemaleFenceFestivalFetchFeverFewFiberFictionFieldFigureFileFilmFilterFinalFindFineFingerFinishFireFirmFirstFiscalFishFitFitnessFixFlagFlameFlashFlatFlavorFleeFlightFlipFloatFlockFloorFlowerFluidFlushFlyFoamFocusFogFoilFoldFollowFoodFootForceForestForgetForkFortuneForumForwardFossilFosterFoundFoxFragileFrameFrequentFreshFriendFringeFrogFrontFrostFrownFrozenFruitFuelFunFunnyFurnaceFuryFutureGadgetGainGalaxyGalleryGameGapGarageGarbageGardenGarlicGarmentGasGaspGateGatherGaugeGazeGeneralGeniusGenreGentleGenuineGestureGhostGiantGiftGiggleGingerGiraffeGirlGiveGladGlanceGlareGlassGlideGlimpseGlobeGloomGloryGloveGlowGlueGoatGoddessGoldGoodGooseGorillaGospelGossipGovernGownGrabGraceGrainGrantGrapeGrassGravityGreatGreenGridGriefGritGroceryGroupGrowGruntGuardGuessGuideGuiltGuitarGunGymHabitHairHalfHammerHamsterHandHappyHarborHardHarshHarvestHatHaveHawkHazardHeadHealthHeartHeavyHedgehogHeightHelloHelmetHelpHenHeroHiddenHighHillHintHipHireHistoryHobbyHockeyHoldHoleHolidayHollowHomeHoneyHoodHopeHornHorrorHorseHospitalHostHotelHourHoverHubHugeHumanHumbleHumorHundredHungryHuntHurdleHurryHurtHusbandHybridIceIconIdeaIdentifyIdleIgnoreIllIllegalIllnessImageImitateImmenseImmuneImpactImposeImproveImpulseInchIncludeIncomeIncreaseIndexIndicateIndoorIndustryInfantInflictInformInhaleInheritInitialInjectInjuryInmateInnerInnocentInputInquiryInsaneInsectInsideInspireInstallIntactInterestIntoInvestInviteInvolveIronIslandIsolateIssueItemIvoryJacketJaguarJarJazzJealousJeansJellyJewelJobJoinJokeJourneyJoyJudgeJuiceJumpJungleJuniorJunkJustKangarooKeenKeepKetchupKeyKickKidKidneyKindKingdomKissKitKitchenKiteKittenKiwiKneeKnifeKnockKnowLabLabelLaborLadderLadyLakeLampLanguageLaptopLargeLaterLatinLaughLaundryLavaLawLawnLawsuitLayerLazyLeaderLeafLearnLeaveLectureLeftLegLegalLegendLeisureLemonLendLengthLensLeopardLessonLetterLevelLiarLibertyLibraryLicenseLifeLiftLightLikeLimbLimitLinkLionLiquidListLittleLiveLizardLoadLoanLobsterLocalLockLogicLonelyLongLoopLotteryLoudLoungeLoveLoyalLuckyLuggageLumberLunarLunchLuxuryLyricsMachineMadMagicMagnetMaidMailMainMajorMakeMammalManManageMandateMangoMansionManualMapleMarbleMarchMarginMarineMarketMarriageMaskMassMasterMatchMaterialMathMatrixMatterMaximumMazeMeadowMeanMeasureMeatMechanicMedalMediaMelodyMeltMemberMemoryMentionMenuMercyMergeMeritMerryMeshMessageMetalMethodMiddleMidnightMilkMillionMimicMindMinimumMinorMinuteMiracleMirrorMiseryMissMistakeMixMixedMixtureMobileModelModifyMomMomentMonitorMonkeyMonsterMonthMoonMoralMoreMorningMosquitoMotherMotionMotorMountainMouseMoveMovieMuchMuffinMuleMultiplyMuscleMuseumMushroomMusicMustMutualMyselfMysteryMythNaiveNameNapkinNarrowNastyNationNatureNearNeckNeedNegativeNeglectNeitherNephewNerveNestNetNetworkNeutralNeverNewsNextNiceNightNobleNoiseNomineeNoodleNormalNorthNoseNotableNoteNothingNoticeNovelNowNuclearNumberNurseNutOakObeyObjectObligeObscureObserveObtainObviousOccurOceanOctoberOdorOffOfferOfficeOftenOilOkayOldOliveOlympicOmitOnceOneOnionOnlineOnlyOpenOperaOpinionOpposeOptionOrangeOrbitOrchardOrderOrdinaryOrganOrientOriginalOrphanOstrichOtherOutdoorOuterOutputOutsideOvalOvenOverOwnOwnerOxygenOysterOzonePactPaddlePagePairPalacePalmPandaPanelPanicPantherPaperParadeParentParkParrotPartyPassPatchPathPatientPatrolPatternPausePavePaymentPeacePeanutPearPeasantPelicanPenPenaltyPencilPeoplePepperPerfectPermitPersonPetPhonePhotoPhrasePhysicalPianoPicnicPicturePiecePigPigeonPillPilotPinkPioneerPipePistolPitchPizzaPlacePlanetPlasticPlatePlayPleasePledgePluckPlugPlungePoemPoetPointPolarPolePolicePondPonyPoolPopularPortionPositionPossiblePostPotatoPotteryPovertyPowderPowerPracticePraisePredictPreferPreparePresentPrettyPreventPricePridePrimaryPrintPriorityPrisonPrivatePrizeProblemProcessProduceProfitProgramProjectPromoteProofPropertyProsperProtectProudProvidePublicPuddingPullPulpPulsePumpkinPunchPupilPuppyPurchasePurityPurposePursePushPutPuzzlePyramidQualityQuantumQuarterQuestionQuickQuitQuizQuoteRabbitRaccoonRaceRackRadarRadioRailRainRaiseRallyRampRanchRandomRangeRapidRareRateRatherRavenRawRazorReadyRealReasonRebelRebuildRecallReceiveRecipeRecordRecycleReduceReflectReformRefuseRegionRegretRegularRejectRelaxReleaseReliefRelyRemainRememberRemindRemoveRenderRenewRentReopenRepairRepeatReplaceReportRequireRescueResembleResistResourceResponseResultRetireRetreatReturnReunionRevealReviewRewardRhythmRibRibbonRiceRichRideRidgeRifleRightRigidRingRiotRippleRiskRitualRivalRiverRoadRoastRobotRobustRocketRomanceRoofRookieRoomRoseRotateRoughRoundRouteRoyalRubberRudeRugRuleRunRunwayRuralSadSaddleSadnessSafeSailSaladSalmonSalonSaltSaluteSameSampleSandSatisfySatoshiSauceSausageSaveSayScaleScanScareScatterSceneSchemeSchoolScienceScissorsScorpionScoutScrapScreenScriptScrubSeaSearchSeasonSeatSecondSecretSectionSecuritySeedSeekSegmentSelectSellSeminarSeniorSenseSentenceSeriesServiceSessionSettleSetupSevenShadowShaftShallowShareShedShellSheriffShieldShiftShineShipShiverShockShoeShootShopShortShoulderShoveShrimpShrugShuffleShySiblingSickSideSiegeSightSignSilentSilkSillySilverSimilarSimpleSinceSingSirenSisterSituateSixSizeSkateSketchSkiSkillSkinSkirtSkullSlabSlamSleepSlenderSliceSlideSlightSlimSloganSlotSlowSlushSmallSmartSmileSmokeSmoothSnackSnakeSnapSniffSnowSoapSoccerSocialSockSodaSoftSolarSoldierSolidSolutionSolveSomeoneSongSoonSorrySortSoulSoundSoupSourceSouthSpaceSpareSpatialSpawnSpeakSpecialSpeedSpellSpendSphereSpiceSpiderSpikeSpinSpiritSplitSpoilSponsorSpoonSportSpotSpraySpreadSpringSpySquareSqueezeSquirrelStableStadiumStaffStageStairsStampStandStartStateStaySteakSteelStemStepStereoStickStillStingStockStomachStoneStoolStoryStoveStrategyStreetStrikeStrongStruggleStudentStuffStumbleStyleSubjectSubmitSubwaySuccessSuchSuddenSufferSugarSuggestSuitSummerSunSunnySunsetSuperSupplySupremeSureSurfaceSurgeSurpriseSurroundSurveySuspectSustainSwallowSwampSwapSwarmSwearSweetSwiftSwimSwingSwitchSwordSymbolSymptomSyrupSystemTableTackleTagTailTalentTalkTankTapeTargetTaskTasteTattooTaxiTeachTeamTellTenTenantTennisTentTermTestTextThankThatThemeThenTheoryThereTheyThingThisThoughtThreeThriveThrowThumbThunderTicketTideTigerTiltTimberTimeTinyTipTiredTissueTitleToastTobaccoTodayToddlerToeTogetherToiletTokenTomatoTomorrowToneTongueTonightToolToothTopTopicToppleTorchTornadoTortoiseTossTotalTouristTowardTowerTownToyTrackTradeTrafficTragicTrainTransferTrapTrashTravelTrayTreatTreeTrendTrialTribeTrickTriggerTrimTripTrophyTroubleTruckTrueTrulyTrumpetTrustTruthTryTubeTuitionTumbleTunaTunnelTurkeyTurnTurtleTwelveTwentyTwiceTwinTwistTwoTypeTypicalUglyUmbrellaUnableUnawareUncleUncoverUnderUndoUnfairUnfoldUnhappyUniformUniqueUnitUniverseUnknownUnlockUntilUnusualUnveilUpdateUpgradeUpholdUponUpperUpsetUrbanUrgeUsageUseUsedUsefulUselessUsualUtilityVacantVacuumVagueValidValleyValveVanVanishVaporVariousVastVaultVehicleVelvetVendorVentureVenueVerbVerifyVersionVeryVesselVeteranViableVibrantViciousVictoryVideoViewVillageVintageViolinVirtualVirusVisaVisitVisualVitalVividVocalVoiceVoidVolcanoVolumeVoteVoyageWageWagonWaitWalkWallWalnutWantWarfareWarmWarriorWashWaspWasteWaterWaveWayWealthWeaponWearWeaselWeatherWebWeddingWeekendWeirdWelcomeWestWetWhaleWhatWheatWheelWhenWhereWhipWhisperWideWidthWifeWildWillWinWindowWineWingWinkWinnerWinterWireWisdomWiseWishWitnessWolfWomanWonderWoodWoolWordWorkWorldWorryWorthWrapWreckWrestleWristWriteWrongYardYearYellowYouYoungYouthZebraZeroZoneZoo\\\";\\nvar wordlist = null;\\nfunction loadWords(lang) {\\n if (wordlist != null) {\\n return;\\n }\\n wordlist = words.replace(/([A-Z])/g, \\\" $1\\\").toLowerCase().substring(1).split(\\\" \\\");\\n if (wordlist_1.Wordlist.check(lang) !== \\\"0x3c8acc1e7b08d8e76f9fda015ef48dc8c710a73cb7e0f77b2c18a9b5a7adde60\\\") {\\n wordlist = null;\\n throw new Error(\\\"BIP39 Wordlist for en (English) FAILED\\\");\\n }\\n}\\nvar LangEn = /** @class */ (function (_super) {\\n __extends(LangEn, _super);\\n function LangEn() {\\n return _super.call(this, \\\"en\\\") || this;\\n }\\n LangEn.prototype.getWord = function (index) {\\n loadWords(this);\\n return wordlist[index];\\n };\\n LangEn.prototype.getWordIndex = function (word) {\\n loadWords(this);\\n return wordlist.indexOf(word);\\n };\\n return LangEn;\\n}(wordlist_1.Wordlist));\\nvar langEn = new LangEn();\\nexports.langEn = langEn;\\nwordlist_1.Wordlist.register(langEn);\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/wordlists/lib/lang-en.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@ethersproject/wordlists/lib/wordlist.js\":\n/*!***************************************************************!*\\\n !*** ./node_modules/@ethersproject/wordlists/lib/wordlist.js ***!\n \\***************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, \\\"__esModule\\\", { value: true });\\n// This gets overridden by rollup\\nvar exportWordlist = false;\\nvar hash_1 = __webpack_require__(/*! @ethersproject/hash */ \\\"./node_modules/@ethersproject/hash/lib.esm/index.js\\\");\\nvar properties_1 = __webpack_require__(/*! @ethersproject/properties */ \\\"./node_modules/@ethersproject/properties/lib.esm/index.js\\\");\\nvar logger_1 = __webpack_require__(/*! @ethersproject/logger */ \\\"./node_modules/@ethersproject/logger/lib.esm/index.js\\\");\\nvar _version_1 = __webpack_require__(/*! ./_version */ \\\"./node_modules/@ethersproject/wordlists/lib/_version.js\\\");\\nexports.logger = new logger_1.Logger(_version_1.version);\\nvar Wordlist = /** @class */ (function () {\\n function Wordlist(locale) {\\n var _newTarget = this.constructor;\\n exports.logger.checkAbstract(_newTarget, Wordlist);\\n properties_1.defineReadOnly(this, \\\"locale\\\", locale);\\n }\\n // Subclasses may override this\\n Wordlist.prototype.split = function (mnemonic) {\\n return mnemonic.toLowerCase().split(/ +/g);\\n };\\n // Subclasses may override this\\n Wordlist.prototype.join = function (words) {\\n return words.join(\\\" \\\");\\n };\\n Wordlist.check = function (wordlist) {\\n var words = [];\\n for (var i = 0; i < 2048; i++) {\\n var word = wordlist.getWord(i);\\n if (i !== wordlist.getWordIndex(word)) {\\n return \\\"0x\\\";\\n }\\n words.push(word);\\n }\\n return hash_1.id(words.join(\\\"\\\\n\\\") + \\\"\\\\n\\\");\\n };\\n Wordlist.register = function (lang, name) {\\n if (!name) {\\n name = lang.locale;\\n }\\n if (exportWordlist) {\\n try {\\n var anyGlobal = window;\\n if (anyGlobal._ethers && anyGlobal._ethers.wordlists) {\\n if (!anyGlobal._ethers.wordlists[name]) {\\n properties_1.defineReadOnly(anyGlobal._ethers.wordlists, name, lang);\\n }\\n }\\n }\\n catch (error) { }\\n }\\n };\\n return Wordlist;\\n}());\\nexports.Wordlist = Wordlist;\\n\\n\\n//# sourceURL=webpack:///./node_modules/@ethersproject/wordlists/lib/wordlist.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@fortawesome/fontawesome-svg-core/index.es.js\":\n/*!********************************************************************!*\\\n !*** ./node_modules/@fortawesome/fontawesome-svg-core/index.es.js ***!\n \\********************************************************************/\n/*! exports provided: icon, noAuto, config, toHtml, layer, text, counter, library, dom, parse, findIconDefinition */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* WEBPACK VAR INJECTION */(function(global, setImmediate) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"icon\\\", function() { return icon; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"noAuto\\\", function() { return noAuto; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"config\\\", function() { return config; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"toHtml\\\", function() { return toHtml; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"layer\\\", function() { return layer; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"text\\\", function() { return text; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"counter\\\", function() { return counter; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"library\\\", function() { return library; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"dom\\\", function() { return dom; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"parse\\\", function() { return parse; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"findIconDefinition\\\", function() { return findIconDefinition; });\\nfunction _typeof(obj) {\\n if (typeof Symbol === \\\"function\\\" && typeof Symbol.iterator === \\\"symbol\\\") {\\n _typeof = function (obj) {\\n return typeof obj;\\n };\\n } else {\\n _typeof = function (obj) {\\n return obj && typeof Symbol === \\\"function\\\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \\\"symbol\\\" : typeof obj;\\n };\\n }\\n\\n return _typeof(obj);\\n}\\n\\nfunction _classCallCheck(instance, Constructor) {\\n if (!(instance instanceof Constructor)) {\\n throw new TypeError(\\\"Cannot call a class as a function\\\");\\n }\\n}\\n\\nfunction _defineProperties(target, props) {\\n for (var i = 0; i < props.length; i++) {\\n var descriptor = props[i];\\n descriptor.enumerable = descriptor.enumerable || false;\\n descriptor.configurable = true;\\n if (\\\"value\\\" in descriptor) descriptor.writable = true;\\n Object.defineProperty(target, descriptor.key, descriptor);\\n }\\n}\\n\\nfunction _createClass(Constructor, protoProps, staticProps) {\\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\\n if (staticProps) _defineProperties(Constructor, staticProps);\\n return Constructor;\\n}\\n\\nfunction _defineProperty(obj, key, value) {\\n if (key in obj) {\\n Object.defineProperty(obj, key, {\\n value: value,\\n enumerable: true,\\n configurable: true,\\n writable: true\\n });\\n } else {\\n obj[key] = value;\\n }\\n\\n return obj;\\n}\\n\\nfunction _objectSpread(target) {\\n for (var i = 1; i < arguments.length; i++) {\\n var source = arguments[i] != null ? arguments[i] : {};\\n var ownKeys = Object.keys(source);\\n\\n if (typeof Object.getOwnPropertySymbols === 'function') {\\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\\n }));\\n }\\n\\n ownKeys.forEach(function (key) {\\n _defineProperty(target, key, source[key]);\\n });\\n }\\n\\n return target;\\n}\\n\\nfunction _slicedToArray(arr, i) {\\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest();\\n}\\n\\nfunction _toConsumableArray(arr) {\\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\\n}\\n\\nfunction _arrayWithoutHoles(arr) {\\n if (Array.isArray(arr)) {\\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\\n\\n return arr2;\\n }\\n}\\n\\nfunction _arrayWithHoles(arr) {\\n if (Array.isArray(arr)) return arr;\\n}\\n\\nfunction _iterableToArray(iter) {\\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \\\"[object Arguments]\\\") return Array.from(iter);\\n}\\n\\nfunction _iterableToArrayLimit(arr, i) {\\n var _arr = [];\\n var _n = true;\\n var _d = false;\\n var _e = undefined;\\n\\n try {\\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\\n _arr.push(_s.value);\\n\\n if (i && _arr.length === i) break;\\n }\\n } catch (err) {\\n _d = true;\\n _e = err;\\n } finally {\\n try {\\n if (!_n && _i[\\\"return\\\"] != null) _i[\\\"return\\\"]();\\n } finally {\\n if (_d) throw _e;\\n }\\n }\\n\\n return _arr;\\n}\\n\\nfunction _nonIterableSpread() {\\n throw new TypeError(\\\"Invalid attempt to spread non-iterable instance\\\");\\n}\\n\\nfunction _nonIterableRest() {\\n throw new TypeError(\\\"Invalid attempt to destructure non-iterable instance\\\");\\n}\\n\\nvar noop = function noop() {};\\n\\nvar _WINDOW = {};\\nvar _DOCUMENT = {};\\nvar _MUTATION_OBSERVER = null;\\nvar _PERFORMANCE = {\\n mark: noop,\\n measure: noop\\n};\\n\\ntry {\\n if (typeof window !== 'undefined') _WINDOW = window;\\n if (typeof document !== 'undefined') _DOCUMENT = document;\\n if (typeof MutationObserver !== 'undefined') _MUTATION_OBSERVER = MutationObserver;\\n if (typeof performance !== 'undefined') _PERFORMANCE = performance;\\n} catch (e) {}\\n\\nvar _ref = _WINDOW.navigator || {},\\n _ref$userAgent = _ref.userAgent,\\n userAgent = _ref$userAgent === void 0 ? '' : _ref$userAgent;\\n\\nvar WINDOW = _WINDOW;\\nvar DOCUMENT = _DOCUMENT;\\nvar MUTATION_OBSERVER = _MUTATION_OBSERVER;\\nvar PERFORMANCE = _PERFORMANCE;\\nvar IS_BROWSER = !!WINDOW.document;\\nvar IS_DOM = !!DOCUMENT.documentElement && !!DOCUMENT.head && typeof DOCUMENT.addEventListener === 'function' && typeof DOCUMENT.createElement === 'function';\\nvar IS_IE = ~userAgent.indexOf('MSIE') || ~userAgent.indexOf('Trident/');\\n\\nvar NAMESPACE_IDENTIFIER = '___FONT_AWESOME___';\\nvar UNITS_IN_GRID = 16;\\nvar DEFAULT_FAMILY_PREFIX = 'fa';\\nvar DEFAULT_REPLACEMENT_CLASS = 'svg-inline--fa';\\nvar DATA_FA_I2SVG = 'data-fa-i2svg';\\nvar DATA_FA_PSEUDO_ELEMENT = 'data-fa-pseudo-element';\\nvar DATA_FA_PSEUDO_ELEMENT_PENDING = 'data-fa-pseudo-element-pending';\\nvar DATA_PREFIX = 'data-prefix';\\nvar DATA_ICON = 'data-icon';\\nvar HTML_CLASS_I2SVG_BASE_CLASS = 'fontawesome-i2svg';\\nvar TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS = ['HTML', 'HEAD', 'STYLE', 'SCRIPT'];\\nvar PRODUCTION = function () {\\n try {\\n return \\\"development\\\" === 'production';\\n } catch (e) {\\n return false;\\n }\\n}();\\nvar PREFIX_TO_STYLE = {\\n 'fas': 'solid',\\n 'far': 'regular',\\n 'fal': 'light',\\n 'fab': 'brands',\\n 'fa': 'solid'\\n};\\nvar STYLE_TO_PREFIX = {\\n 'solid': 'fas',\\n 'regular': 'far',\\n 'light': 'fal',\\n 'brands': 'fab'\\n};\\nvar LAYERS_TEXT_CLASSNAME = 'fa-layers-text';\\nvar FONT_FAMILY_PATTERN = /Font Awesome 5 (Solid|Regular|Light|Brands|Free|Pro)/;\\nvar FONT_WEIGHT_TO_PREFIX = {\\n '900': 'fas',\\n '400': 'far',\\n 'normal': 'far',\\n '300': 'fal'\\n};\\nvar oneToTen = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];\\nvar oneToTwenty = oneToTen.concat([11, 12, 13, 14, 15, 16, 17, 18, 19, 20]);\\nvar ATTRIBUTES_WATCHED_FOR_MUTATION = ['class', 'data-prefix', 'data-icon', 'data-fa-transform', 'data-fa-mask'];\\nvar RESERVED_CLASSES = ['xs', 'sm', 'lg', 'fw', 'ul', 'li', 'border', 'pull-left', 'pull-right', 'spin', 'pulse', 'rotate-90', 'rotate-180', 'rotate-270', 'flip-horizontal', 'flip-vertical', 'stack', 'stack-1x', 'stack-2x', 'inverse', 'layers', 'layers-text', 'layers-counter'].concat(oneToTen.map(function (n) {\\n return \\\"\\\".concat(n, \\\"x\\\");\\n})).concat(oneToTwenty.map(function (n) {\\n return \\\"w-\\\".concat(n);\\n}));\\n\\nvar initial = WINDOW.FontAwesomeConfig || {};\\n\\nfunction getAttrConfig(attr) {\\n var element = DOCUMENT.querySelector('script[' + attr + ']');\\n\\n if (element) {\\n return element.getAttribute(attr);\\n }\\n}\\n\\nfunction coerce(val) {\\n // Getting an empty string will occur if the attribute is set on the HTML tag but without a value\\n // We'll assume that this is an indication that it should be toggled to true\\n // For example <script data-search-pseudo-elements src=\\\"...\\\"></script>\\n if (val === '') return true;\\n if (val === 'false') return false;\\n if (val === 'true') return true;\\n return val;\\n}\\n\\nif (DOCUMENT && typeof DOCUMENT.querySelector === 'function') {\\n var attrs = [['data-family-prefix', 'familyPrefix'], ['data-replacement-class', 'replacementClass'], ['data-auto-replace-svg', 'autoReplaceSvg'], ['data-auto-add-css', 'autoAddCss'], ['data-auto-a11y', 'autoA11y'], ['data-search-pseudo-elements', 'searchPseudoElements'], ['data-observe-mutations', 'observeMutations'], ['data-keep-original-source', 'keepOriginalSource'], ['data-measure-performance', 'measurePerformance'], ['data-show-missing-icons', 'showMissingIcons']];\\n attrs.forEach(function (_ref) {\\n var _ref2 = _slicedToArray(_ref, 2),\\n attr = _ref2[0],\\n key = _ref2[1];\\n\\n var val = coerce(getAttrConfig(attr));\\n\\n if (val !== undefined && val !== null) {\\n initial[key] = val;\\n }\\n });\\n}\\n\\nvar _default = {\\n familyPrefix: DEFAULT_FAMILY_PREFIX,\\n replacementClass: DEFAULT_REPLACEMENT_CLASS,\\n autoReplaceSvg: true,\\n autoAddCss: true,\\n autoA11y: true,\\n searchPseudoElements: false,\\n observeMutations: true,\\n keepOriginalSource: true,\\n measurePerformance: false,\\n showMissingIcons: true\\n};\\n\\nvar _config = _objectSpread({}, _default, initial);\\n\\nif (!_config.autoReplaceSvg) _config.observeMutations = false;\\n\\nvar config = _objectSpread({}, _config);\\n\\nWINDOW.FontAwesomeConfig = config;\\n\\nvar w = WINDOW || {};\\nif (!w[NAMESPACE_IDENTIFIER]) w[NAMESPACE_IDENTIFIER] = {};\\nif (!w[NAMESPACE_IDENTIFIER].styles) w[NAMESPACE_IDENTIFIER].styles = {};\\nif (!w[NAMESPACE_IDENTIFIER].hooks) w[NAMESPACE_IDENTIFIER].hooks = {};\\nif (!w[NAMESPACE_IDENTIFIER].shims) w[NAMESPACE_IDENTIFIER].shims = [];\\nvar namespace = w[NAMESPACE_IDENTIFIER];\\n\\nvar functions = [];\\n\\nvar listener = function listener() {\\n DOCUMENT.removeEventListener('DOMContentLoaded', listener);\\n loaded = 1;\\n functions.map(function (fn) {\\n return fn();\\n });\\n};\\n\\nvar loaded = false;\\n\\nif (IS_DOM) {\\n loaded = (DOCUMENT.documentElement.doScroll ? /^loaded|^c/ : /^loaded|^i|^c/).test(DOCUMENT.readyState);\\n if (!loaded) DOCUMENT.addEventListener('DOMContentLoaded', listener);\\n}\\n\\nfunction domready (fn) {\\n if (!IS_DOM) return;\\n loaded ? setTimeout(fn, 0) : functions.push(fn);\\n}\\n\\nvar PENDING = 'pending';\\nvar SETTLED = 'settled';\\nvar FULFILLED = 'fulfilled';\\nvar REJECTED = 'rejected';\\n\\nvar NOOP = function NOOP() {};\\n\\nvar isNode = typeof global !== 'undefined' && typeof global.process !== 'undefined' && typeof global.process.emit === 'function';\\nvar asyncSetTimer = typeof setImmediate === 'undefined' ? setTimeout : setImmediate;\\nvar asyncQueue = [];\\nvar asyncTimer;\\n\\nfunction asyncFlush() {\\n // run promise callbacks\\n for (var i = 0; i < asyncQueue.length; i++) {\\n asyncQueue[i][0](asyncQueue[i][1]);\\n } // reset async asyncQueue\\n\\n\\n asyncQueue = [];\\n asyncTimer = false;\\n}\\n\\nfunction asyncCall(callback, arg) {\\n asyncQueue.push([callback, arg]);\\n\\n if (!asyncTimer) {\\n asyncTimer = true;\\n asyncSetTimer(asyncFlush, 0);\\n }\\n}\\n\\nfunction invokeResolver(resolver, promise) {\\n function resolvePromise(value) {\\n resolve(promise, value);\\n }\\n\\n function rejectPromise(reason) {\\n reject(promise, reason);\\n }\\n\\n try {\\n resolver(resolvePromise, rejectPromise);\\n } catch (e) {\\n rejectPromise(e);\\n }\\n}\\n\\nfunction invokeCallback(subscriber) {\\n var owner = subscriber.owner;\\n var settled = owner._state;\\n var value = owner._data;\\n var callback = subscriber[settled];\\n var promise = subscriber.then;\\n\\n if (typeof callback === 'function') {\\n settled = FULFILLED;\\n\\n try {\\n value = callback(value);\\n } catch (e) {\\n reject(promise, e);\\n }\\n }\\n\\n if (!handleThenable(promise, value)) {\\n if (settled === FULFILLED) {\\n resolve(promise, value);\\n }\\n\\n if (settled === REJECTED) {\\n reject(promise, value);\\n }\\n }\\n}\\n\\nfunction handleThenable(promise, value) {\\n var resolved;\\n\\n try {\\n if (promise === value) {\\n throw new TypeError('A promises callback cannot return that same promise.');\\n }\\n\\n if (value && (typeof value === 'function' || _typeof(value) === 'object')) {\\n // then should be retrieved only once\\n var then = value.then;\\n\\n if (typeof then === 'function') {\\n then.call(value, function (val) {\\n if (!resolved) {\\n resolved = true;\\n\\n if (value === val) {\\n fulfill(promise, val);\\n } else {\\n resolve(promise, val);\\n }\\n }\\n }, function (reason) {\\n if (!resolved) {\\n resolved = true;\\n reject(promise, reason);\\n }\\n });\\n return true;\\n }\\n }\\n } catch (e) {\\n if (!resolved) {\\n reject(promise, e);\\n }\\n\\n return true;\\n }\\n\\n return false;\\n}\\n\\nfunction resolve(promise, value) {\\n if (promise === value || !handleThenable(promise, value)) {\\n fulfill(promise, value);\\n }\\n}\\n\\nfunction fulfill(promise, value) {\\n if (promise._state === PENDING) {\\n promise._state = SETTLED;\\n promise._data = value;\\n asyncCall(publishFulfillment, promise);\\n }\\n}\\n\\nfunction reject(promise, reason) {\\n if (promise._state === PENDING) {\\n promise._state = SETTLED;\\n promise._data = reason;\\n asyncCall(publishRejection, promise);\\n }\\n}\\n\\nfunction publish(promise) {\\n promise._then = promise._then.forEach(invokeCallback);\\n}\\n\\nfunction publishFulfillment(promise) {\\n promise._state = FULFILLED;\\n publish(promise);\\n}\\n\\nfunction publishRejection(promise) {\\n promise._state = REJECTED;\\n publish(promise);\\n\\n if (!promise._handled && isNode) {\\n global.process.emit('unhandledRejection', promise._data, promise);\\n }\\n}\\n\\nfunction notifyRejectionHandled(promise) {\\n global.process.emit('rejectionHandled', promise);\\n}\\n/**\\n * @class\\n */\\n\\n\\nfunction P(resolver) {\\n if (typeof resolver !== 'function') {\\n throw new TypeError('Promise resolver ' + resolver + ' is not a function');\\n }\\n\\n if (this instanceof P === false) {\\n throw new TypeError('Failed to construct \\\\'Promise\\\\': Please use the \\\\'new\\\\' operator, this object constructor cannot be called as a function.');\\n }\\n\\n this._then = [];\\n invokeResolver(resolver, this);\\n}\\n\\nP.prototype = {\\n constructor: P,\\n _state: PENDING,\\n _then: null,\\n _data: undefined,\\n _handled: false,\\n then: function then(onFulfillment, onRejection) {\\n var subscriber = {\\n owner: this,\\n then: new this.constructor(NOOP),\\n fulfilled: onFulfillment,\\n rejected: onRejection\\n };\\n\\n if ((onRejection || onFulfillment) && !this._handled) {\\n this._handled = true;\\n\\n if (this._state === REJECTED && isNode) {\\n asyncCall(notifyRejectionHandled, this);\\n }\\n }\\n\\n if (this._state === FULFILLED || this._state === REJECTED) {\\n // already resolved, call callback async\\n asyncCall(invokeCallback, subscriber);\\n } else {\\n // subscribe\\n this._then.push(subscriber);\\n }\\n\\n return subscriber.then;\\n },\\n catch: function _catch(onRejection) {\\n return this.then(null, onRejection);\\n }\\n};\\n\\nP.all = function (promises) {\\n if (!Array.isArray(promises)) {\\n throw new TypeError('You must pass an array to Promise.all().');\\n }\\n\\n return new P(function (resolve, reject) {\\n var results = [];\\n var remaining = 0;\\n\\n function resolver(index) {\\n remaining++;\\n return function (value) {\\n results[index] = value;\\n\\n if (! --remaining) {\\n resolve(results);\\n }\\n };\\n }\\n\\n for (var i = 0, promise; i < promises.length; i++) {\\n promise = promises[i];\\n\\n if (promise && typeof promise.then === 'function') {\\n promise.then(resolver(i), reject);\\n } else {\\n results[i] = promise;\\n }\\n }\\n\\n if (!remaining) {\\n resolve(results);\\n }\\n });\\n};\\n\\nP.race = function (promises) {\\n if (!Array.isArray(promises)) {\\n throw new TypeError('You must pass an array to Promise.race().');\\n }\\n\\n return new P(function (resolve, reject) {\\n for (var i = 0, promise; i < promises.length; i++) {\\n promise = promises[i];\\n\\n if (promise && typeof promise.then === 'function') {\\n promise.then(resolve, reject);\\n } else {\\n resolve(promise);\\n }\\n }\\n });\\n};\\n\\nP.resolve = function (value) {\\n if (value && _typeof(value) === 'object' && value.constructor === P) {\\n return value;\\n }\\n\\n return new P(function (resolve) {\\n resolve(value);\\n });\\n};\\n\\nP.reject = function (reason) {\\n return new P(function (resolve, reject) {\\n reject(reason);\\n });\\n};\\n\\nvar picked = typeof Promise === 'function' ? Promise : P;\\n\\nvar d = UNITS_IN_GRID;\\nvar meaninglessTransform = {\\n size: 16,\\n x: 0,\\n y: 0,\\n rotate: 0,\\n flipX: false,\\n flipY: false\\n};\\n\\nfunction isReserved(name) {\\n return ~RESERVED_CLASSES.indexOf(name);\\n}\\nfunction insertCss(css) {\\n if (!css || !IS_DOM) {\\n return;\\n }\\n\\n var style = DOCUMENT.createElement('style');\\n style.setAttribute('type', 'text/css');\\n style.innerHTML = css;\\n var headChildren = DOCUMENT.head.childNodes;\\n var beforeChild = null;\\n\\n for (var i = headChildren.length - 1; i > -1; i--) {\\n var child = headChildren[i];\\n var tagName = (child.tagName || '').toUpperCase();\\n\\n if (['STYLE', 'LINK'].indexOf(tagName) > -1) {\\n beforeChild = child;\\n }\\n }\\n\\n DOCUMENT.head.insertBefore(style, beforeChild);\\n return css;\\n}\\nvar idPool = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\\nfunction nextUniqueId() {\\n var size = 12;\\n var id = '';\\n\\n while (size-- > 0) {\\n id += idPool[Math.random() * 62 | 0];\\n }\\n\\n return id;\\n}\\nfunction toArray(obj) {\\n var array = [];\\n\\n for (var i = (obj || []).length >>> 0; i--;) {\\n array[i] = obj[i];\\n }\\n\\n return array;\\n}\\nfunction classArray(node) {\\n if (node.classList) {\\n return toArray(node.classList);\\n } else {\\n return (node.getAttribute('class') || '').split(' ').filter(function (i) {\\n return i;\\n });\\n }\\n}\\nfunction getIconName(familyPrefix, cls) {\\n var parts = cls.split('-');\\n var prefix = parts[0];\\n var iconName = parts.slice(1).join('-');\\n\\n if (prefix === familyPrefix && iconName !== '' && !isReserved(iconName)) {\\n return iconName;\\n } else {\\n return null;\\n }\\n}\\nfunction htmlEscape(str) {\\n return \\\"\\\".concat(str).replace(/&/g, '&').replace(/\\\"/g, '"').replace(/'/g, ''').replace(/</g, '<').replace(/>/g, '>');\\n}\\nfunction joinAttributes(attributes) {\\n return Object.keys(attributes || {}).reduce(function (acc, attributeName) {\\n return acc + \\\"\\\".concat(attributeName, \\\"=\\\\\\\"\\\").concat(htmlEscape(attributes[attributeName]), \\\"\\\\\\\" \\\");\\n }, '').trim();\\n}\\nfunction joinStyles(styles) {\\n return Object.keys(styles || {}).reduce(function (acc, styleName) {\\n return acc + \\\"\\\".concat(styleName, \\\": \\\").concat(styles[styleName], \\\";\\\");\\n }, '');\\n}\\nfunction transformIsMeaningful(transform) {\\n return transform.size !== meaninglessTransform.size || transform.x !== meaninglessTransform.x || transform.y !== meaninglessTransform.y || transform.rotate !== meaninglessTransform.rotate || transform.flipX || transform.flipY;\\n}\\nfunction transformForSvg(_ref) {\\n var transform = _ref.transform,\\n containerWidth = _ref.containerWidth,\\n iconWidth = _ref.iconWidth;\\n var outer = {\\n transform: \\\"translate(\\\".concat(containerWidth / 2, \\\" 256)\\\")\\n };\\n var innerTranslate = \\\"translate(\\\".concat(transform.x * 32, \\\", \\\").concat(transform.y * 32, \\\") \\\");\\n var innerScale = \\\"scale(\\\".concat(transform.size / 16 * (transform.flipX ? -1 : 1), \\\", \\\").concat(transform.size / 16 * (transform.flipY ? -1 : 1), \\\") \\\");\\n var innerRotate = \\\"rotate(\\\".concat(transform.rotate, \\\" 0 0)\\\");\\n var inner = {\\n transform: \\\"\\\".concat(innerTranslate, \\\" \\\").concat(innerScale, \\\" \\\").concat(innerRotate)\\n };\\n var path = {\\n transform: \\\"translate(\\\".concat(iconWidth / 2 * -1, \\\" -256)\\\")\\n };\\n return {\\n outer: outer,\\n inner: inner,\\n path: path\\n };\\n}\\nfunction transformForCss(_ref2) {\\n var transform = _ref2.transform,\\n _ref2$width = _ref2.width,\\n width = _ref2$width === void 0 ? UNITS_IN_GRID : _ref2$width,\\n _ref2$height = _ref2.height,\\n height = _ref2$height === void 0 ? UNITS_IN_GRID : _ref2$height,\\n _ref2$startCentered = _ref2.startCentered,\\n startCentered = _ref2$startCentered === void 0 ? false : _ref2$startCentered;\\n var val = '';\\n\\n if (startCentered && IS_IE) {\\n val += \\\"translate(\\\".concat(transform.x / d - width / 2, \\\"em, \\\").concat(transform.y / d - height / 2, \\\"em) \\\");\\n } else if (startCentered) {\\n val += \\\"translate(calc(-50% + \\\".concat(transform.x / d, \\\"em), calc(-50% + \\\").concat(transform.y / d, \\\"em)) \\\");\\n } else {\\n val += \\\"translate(\\\".concat(transform.x / d, \\\"em, \\\").concat(transform.y / d, \\\"em) \\\");\\n }\\n\\n val += \\\"scale(\\\".concat(transform.size / d * (transform.flipX ? -1 : 1), \\\", \\\").concat(transform.size / d * (transform.flipY ? -1 : 1), \\\") \\\");\\n val += \\\"rotate(\\\".concat(transform.rotate, \\\"deg) \\\");\\n return val;\\n}\\n\\nvar ALL_SPACE = {\\n x: 0,\\n y: 0,\\n width: '100%',\\n height: '100%'\\n};\\nfunction makeIconMasking (_ref) {\\n var children = _ref.children,\\n attributes = _ref.attributes,\\n main = _ref.main,\\n mask = _ref.mask,\\n transform = _ref.transform;\\n var mainWidth = main.width,\\n mainPath = main.icon;\\n var maskWidth = mask.width,\\n maskPath = mask.icon;\\n var trans = transformForSvg({\\n transform: transform,\\n containerWidth: maskWidth,\\n iconWidth: mainWidth\\n });\\n var maskRect = {\\n tag: 'rect',\\n attributes: _objectSpread({}, ALL_SPACE, {\\n fill: 'white'\\n })\\n };\\n var maskInnerGroup = {\\n tag: 'g',\\n attributes: _objectSpread({}, trans.inner),\\n children: [{\\n tag: 'path',\\n attributes: _objectSpread({}, mainPath.attributes, trans.path, {\\n fill: 'black'\\n })\\n }]\\n };\\n var maskOuterGroup = {\\n tag: 'g',\\n attributes: _objectSpread({}, trans.outer),\\n children: [maskInnerGroup]\\n };\\n var maskId = \\\"mask-\\\".concat(nextUniqueId());\\n var clipId = \\\"clip-\\\".concat(nextUniqueId());\\n var maskTag = {\\n tag: 'mask',\\n attributes: _objectSpread({}, ALL_SPACE, {\\n id: maskId,\\n maskUnits: 'userSpaceOnUse',\\n maskContentUnits: 'userSpaceOnUse'\\n }),\\n children: [maskRect, maskOuterGroup]\\n };\\n var defs = {\\n tag: 'defs',\\n children: [{\\n tag: 'clipPath',\\n attributes: {\\n id: clipId\\n },\\n children: [maskPath]\\n }, maskTag]\\n };\\n children.push(defs, {\\n tag: 'rect',\\n attributes: _objectSpread({\\n fill: 'currentColor',\\n 'clip-path': \\\"url(#\\\".concat(clipId, \\\")\\\"),\\n mask: \\\"url(#\\\".concat(maskId, \\\")\\\")\\n }, ALL_SPACE)\\n });\\n return {\\n children: children,\\n attributes: attributes\\n };\\n}\\n\\nfunction makeIconStandard (_ref) {\\n var children = _ref.children,\\n attributes = _ref.attributes,\\n main = _ref.main,\\n transform = _ref.transform,\\n styles = _ref.styles;\\n var styleString = joinStyles(styles);\\n\\n if (styleString.length > 0) {\\n attributes['style'] = styleString;\\n }\\n\\n if (transformIsMeaningful(transform)) {\\n var trans = transformForSvg({\\n transform: transform,\\n containerWidth: main.width,\\n iconWidth: main.width\\n });\\n children.push({\\n tag: 'g',\\n attributes: _objectSpread({}, trans.outer),\\n children: [{\\n tag: 'g',\\n attributes: _objectSpread({}, trans.inner),\\n children: [{\\n tag: main.icon.tag,\\n children: main.icon.children,\\n attributes: _objectSpread({}, main.icon.attributes, trans.path)\\n }]\\n }]\\n });\\n } else {\\n children.push(main.icon);\\n }\\n\\n return {\\n children: children,\\n attributes: attributes\\n };\\n}\\n\\nfunction asIcon (_ref) {\\n var children = _ref.children,\\n main = _ref.main,\\n mask = _ref.mask,\\n attributes = _ref.attributes,\\n styles = _ref.styles,\\n transform = _ref.transform;\\n\\n if (transformIsMeaningful(transform) && main.found && !mask.found) {\\n var width = main.width,\\n height = main.height;\\n var offset = {\\n x: width / height / 2,\\n y: 0.5\\n };\\n attributes['style'] = joinStyles(_objectSpread({}, styles, {\\n 'transform-origin': \\\"\\\".concat(offset.x + transform.x / 16, \\\"em \\\").concat(offset.y + transform.y / 16, \\\"em\\\")\\n }));\\n }\\n\\n return [{\\n tag: 'svg',\\n attributes: attributes,\\n children: children\\n }];\\n}\\n\\nfunction asSymbol (_ref) {\\n var prefix = _ref.prefix,\\n iconName = _ref.iconName,\\n children = _ref.children,\\n attributes = _ref.attributes,\\n symbol = _ref.symbol;\\n var id = symbol === true ? \\\"\\\".concat(prefix, \\\"-\\\").concat(config.familyPrefix, \\\"-\\\").concat(iconName) : symbol;\\n return [{\\n tag: 'svg',\\n attributes: {\\n style: 'display: none;'\\n },\\n children: [{\\n tag: 'symbol',\\n attributes: _objectSpread({}, attributes, {\\n id: id\\n }),\\n children: children\\n }]\\n }];\\n}\\n\\nfunction makeInlineSvgAbstract(params) {\\n var _params$icons = params.icons,\\n main = _params$icons.main,\\n mask = _params$icons.mask,\\n prefix = params.prefix,\\n iconName = params.iconName,\\n transform = params.transform,\\n symbol = params.symbol,\\n title = params.title,\\n extra = params.extra,\\n _params$watchable = params.watchable,\\n watchable = _params$watchable === void 0 ? false : _params$watchable;\\n\\n var _ref = mask.found ? mask : main,\\n width = _ref.width,\\n height = _ref.height;\\n\\n var widthClass = \\\"fa-w-\\\".concat(Math.ceil(width / height * 16));\\n var attrClass = [config.replacementClass, iconName ? \\\"\\\".concat(config.familyPrefix, \\\"-\\\").concat(iconName) : '', widthClass].filter(function (c) {\\n return extra.classes.indexOf(c) === -1;\\n }).concat(extra.classes).join(' ');\\n var content = {\\n children: [],\\n attributes: _objectSpread({}, extra.attributes, {\\n 'data-prefix': prefix,\\n 'data-icon': iconName,\\n 'class': attrClass,\\n 'role': 'img',\\n 'xmlns': 'http://www.w3.org/2000/svg',\\n 'viewBox': \\\"0 0 \\\".concat(width, \\\" \\\").concat(height)\\n })\\n };\\n\\n if (watchable) {\\n content.attributes[DATA_FA_I2SVG] = '';\\n }\\n\\n if (title) content.children.push({\\n tag: 'title',\\n attributes: {\\n id: content.attributes['aria-labelledby'] || \\\"title-\\\".concat(nextUniqueId())\\n },\\n children: [title]\\n });\\n\\n var args = _objectSpread({}, content, {\\n prefix: prefix,\\n iconName: iconName,\\n main: main,\\n mask: mask,\\n transform: transform,\\n symbol: symbol,\\n styles: extra.styles\\n });\\n\\n var _ref2 = mask.found && main.found ? makeIconMasking(args) : makeIconStandard(args),\\n children = _ref2.children,\\n attributes = _ref2.attributes;\\n\\n args.children = children;\\n args.attributes = attributes;\\n\\n if (symbol) {\\n return asSymbol(args);\\n } else {\\n return asIcon(args);\\n }\\n}\\nfunction makeLayersTextAbstract(params) {\\n var content = params.content,\\n width = params.width,\\n height = params.height,\\n transform = params.transform,\\n title = params.title,\\n extra = params.extra,\\n _params$watchable2 = params.watchable,\\n watchable = _params$watchable2 === void 0 ? false : _params$watchable2;\\n\\n var attributes = _objectSpread({}, extra.attributes, title ? {\\n 'title': title\\n } : {}, {\\n 'class': extra.classes.join(' ')\\n });\\n\\n if (watchable) {\\n attributes[DATA_FA_I2SVG] = '';\\n }\\n\\n var styles = _objectSpread({}, extra.styles);\\n\\n if (transformIsMeaningful(transform)) {\\n styles['transform'] = transformForCss({\\n transform: transform,\\n startCentered: true,\\n width: width,\\n height: height\\n });\\n styles['-webkit-transform'] = styles['transform'];\\n }\\n\\n var styleString = joinStyles(styles);\\n\\n if (styleString.length > 0) {\\n attributes['style'] = styleString;\\n }\\n\\n var val = [];\\n val.push({\\n tag: 'span',\\n attributes: attributes,\\n children: [content]\\n });\\n\\n if (title) {\\n val.push({\\n tag: 'span',\\n attributes: {\\n class: 'sr-only'\\n },\\n children: [title]\\n });\\n }\\n\\n return val;\\n}\\nfunction makeLayersCounterAbstract(params) {\\n var content = params.content,\\n title = params.title,\\n extra = params.extra;\\n\\n var attributes = _objectSpread({}, extra.attributes, title ? {\\n 'title': title\\n } : {}, {\\n 'class': extra.classes.join(' ')\\n });\\n\\n var styleString = joinStyles(extra.styles);\\n\\n if (styleString.length > 0) {\\n attributes['style'] = styleString;\\n }\\n\\n var val = [];\\n val.push({\\n tag: 'span',\\n attributes: attributes,\\n children: [content]\\n });\\n\\n if (title) {\\n val.push({\\n tag: 'span',\\n attributes: {\\n class: 'sr-only'\\n },\\n children: [title]\\n });\\n }\\n\\n return val;\\n}\\n\\nvar noop$1 = function noop() {};\\n\\nvar p = config.measurePerformance && PERFORMANCE && PERFORMANCE.mark && PERFORMANCE.measure ? PERFORMANCE : {\\n mark: noop$1,\\n measure: noop$1\\n};\\nvar preamble = \\\"FA \\\\\\\"5.7.2\\\\\\\"\\\";\\n\\nvar begin = function begin(name) {\\n p.mark(\\\"\\\".concat(preamble, \\\" \\\").concat(name, \\\" begins\\\"));\\n return function () {\\n return end(name);\\n };\\n};\\n\\nvar end = function end(name) {\\n p.mark(\\\"\\\".concat(preamble, \\\" \\\").concat(name, \\\" ends\\\"));\\n p.measure(\\\"\\\".concat(preamble, \\\" \\\").concat(name), \\\"\\\".concat(preamble, \\\" \\\").concat(name, \\\" begins\\\"), \\\"\\\".concat(preamble, \\\" \\\").concat(name, \\\" ends\\\"));\\n};\\n\\nvar perf = {\\n begin: begin,\\n end: end\\n};\\n\\n/**\\n * Internal helper to bind a function known to have 4 arguments\\n * to a given context.\\n */\\n\\nvar bindInternal4 = function bindInternal4(func, thisContext) {\\n return function (a, b, c, d) {\\n return func.call(thisContext, a, b, c, d);\\n };\\n};\\n\\n/**\\n * # Reduce\\n *\\n * A fast object `.reduce()` implementation.\\n *\\n * @param {Object} subject The object to reduce over.\\n * @param {Function} fn The reducer function.\\n * @param {mixed} initialValue The initial value for the reducer, defaults to subject[0].\\n * @param {Object} thisContext The context for the reducer.\\n * @return {mixed} The final result.\\n */\\n\\n\\nvar reduce = function fastReduceObject(subject, fn, initialValue, thisContext) {\\n var keys = Object.keys(subject),\\n length = keys.length,\\n iterator = thisContext !== undefined ? bindInternal4(fn, thisContext) : fn,\\n i,\\n key,\\n result;\\n\\n if (initialValue === undefined) {\\n i = 1;\\n result = subject[keys[0]];\\n } else {\\n i = 0;\\n result = initialValue;\\n }\\n\\n for (; i < length; i++) {\\n key = keys[i];\\n result = iterator(result, subject[key], key, subject);\\n }\\n\\n return result;\\n};\\n\\nfunction defineIcons(prefix, icons) {\\n var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\\n var _params$skipHooks = params.skipHooks,\\n skipHooks = _params$skipHooks === void 0 ? false : _params$skipHooks;\\n var normalized = Object.keys(icons).reduce(function (acc, iconName) {\\n var icon = icons[iconName];\\n var expanded = !!icon.icon;\\n\\n if (expanded) {\\n acc[icon.iconName] = icon.icon;\\n } else {\\n acc[iconName] = icon;\\n }\\n\\n return acc;\\n }, {});\\n\\n if (typeof namespace.hooks.addPack === 'function' && !skipHooks) {\\n namespace.hooks.addPack(prefix, normalized);\\n } else {\\n namespace.styles[prefix] = _objectSpread({}, namespace.styles[prefix] || {}, normalized);\\n }\\n /**\\n * Font Awesome 4 used the prefix of `fa` for all icons. With the introduction\\n * of new styles we needed to differentiate between them. Prefix `fa` is now an alias\\n * for `fas` so we'll easy the upgrade process for our users by automatically defining\\n * this as well.\\n */\\n\\n\\n if (prefix === 'fas') {\\n defineIcons('fa', icons);\\n }\\n}\\n\\nvar styles = namespace.styles,\\n shims = namespace.shims;\\nvar _byUnicode = {};\\nvar _byLigature = {};\\nvar _byOldName = {};\\nvar build = function build() {\\n var lookup = function lookup(reducer) {\\n return reduce(styles, function (o, style, prefix) {\\n o[prefix] = reduce(style, reducer, {});\\n return o;\\n }, {});\\n };\\n\\n _byUnicode = lookup(function (acc, icon, iconName) {\\n if (icon[3]) {\\n acc[icon[3]] = iconName;\\n }\\n\\n return acc;\\n });\\n _byLigature = lookup(function (acc, icon, iconName) {\\n var ligatures = icon[2];\\n acc[iconName] = iconName;\\n ligatures.forEach(function (ligature) {\\n acc[ligature] = iconName;\\n });\\n return acc;\\n });\\n var hasRegular = 'far' in styles;\\n _byOldName = reduce(shims, function (acc, shim) {\\n var oldName = shim[0];\\n var prefix = shim[1];\\n var iconName = shim[2];\\n\\n if (prefix === 'far' && !hasRegular) {\\n prefix = 'fas';\\n }\\n\\n acc[oldName] = {\\n prefix: prefix,\\n iconName: iconName\\n };\\n return acc;\\n }, {});\\n};\\nbuild();\\nfunction byUnicode(prefix, unicode) {\\n return _byUnicode[prefix][unicode];\\n}\\nfunction byLigature(prefix, ligature) {\\n return _byLigature[prefix][ligature];\\n}\\nfunction byOldName(name) {\\n return _byOldName[name] || {\\n prefix: null,\\n iconName: null\\n };\\n}\\n\\nvar styles$1 = namespace.styles;\\nvar emptyCanonicalIcon = function emptyCanonicalIcon() {\\n return {\\n prefix: null,\\n iconName: null,\\n rest: []\\n };\\n};\\nfunction getCanonicalIcon(values) {\\n return values.reduce(function (acc, cls) {\\n var iconName = getIconName(config.familyPrefix, cls);\\n\\n if (styles$1[cls]) {\\n acc.prefix = cls;\\n } else if (config.autoFetchSvg && ['fas', 'far', 'fal', 'fab', 'fa'].indexOf(cls) > -1) {\\n acc.prefix = cls;\\n } else if (iconName) {\\n var shim = acc.prefix === 'fa' ? byOldName(iconName) : {};\\n acc.iconName = shim.iconName || iconName;\\n acc.prefix = shim.prefix || acc.prefix;\\n } else if (cls !== config.replacementClass && cls.indexOf('fa-w-') !== 0) {\\n acc.rest.push(cls);\\n }\\n\\n return acc;\\n }, emptyCanonicalIcon());\\n}\\nfunction iconFromMapping(mapping, prefix, iconName) {\\n if (mapping && mapping[prefix] && mapping[prefix][iconName]) {\\n return {\\n prefix: prefix,\\n iconName: iconName,\\n icon: mapping[prefix][iconName]\\n };\\n }\\n}\\n\\nfunction toHtml(abstractNodes) {\\n var tag = abstractNodes.tag,\\n _abstractNodes$attrib = abstractNodes.attributes,\\n attributes = _abstractNodes$attrib === void 0 ? {} : _abstractNodes$attrib,\\n _abstractNodes$childr = abstractNodes.children,\\n children = _abstractNodes$childr === void 0 ? [] : _abstractNodes$childr;\\n\\n if (typeof abstractNodes === 'string') {\\n return htmlEscape(abstractNodes);\\n } else {\\n return \\\"<\\\".concat(tag, \\\" \\\").concat(joinAttributes(attributes), \\\">\\\").concat(children.map(toHtml).join(''), \\\"</\\\").concat(tag, \\\">\\\");\\n }\\n}\\n\\nvar noop$2 = function noop() {};\\n\\nfunction isWatched(node) {\\n var i2svg = node.getAttribute ? node.getAttribute(DATA_FA_I2SVG) : null;\\n return typeof i2svg === 'string';\\n}\\n\\nfunction getMutator() {\\n if (config.autoReplaceSvg === true) {\\n return mutators.replace;\\n }\\n\\n var mutator = mutators[config.autoReplaceSvg];\\n return mutator || mutators.replace;\\n}\\n\\nvar mutators = {\\n replace: function replace(mutation) {\\n var node = mutation[0];\\n var abstract = mutation[1];\\n var newOuterHTML = abstract.map(function (a) {\\n return toHtml(a);\\n }).join('\\\\n');\\n\\n if (node.parentNode && node.outerHTML) {\\n node.outerHTML = newOuterHTML + (config.keepOriginalSource && node.tagName.toLowerCase() !== 'svg' ? \\\"<!-- \\\".concat(node.outerHTML, \\\" -->\\\") : '');\\n } else if (node.parentNode) {\\n var newNode = document.createElement('span');\\n node.parentNode.replaceChild(newNode, node);\\n newNode.outerHTML = newOuterHTML;\\n }\\n },\\n nest: function nest(mutation) {\\n var node = mutation[0];\\n var abstract = mutation[1]; // If we already have a replaced node we do not want to continue nesting within it.\\n // Short-circuit to the standard replacement\\n\\n if (~classArray(node).indexOf(config.replacementClass)) {\\n return mutators.replace(mutation);\\n }\\n\\n var forSvg = new RegExp(\\\"\\\".concat(config.familyPrefix, \\\"-.*\\\"));\\n delete abstract[0].attributes.style;\\n var splitClasses = abstract[0].attributes.class.split(' ').reduce(function (acc, cls) {\\n if (cls === config.replacementClass || cls.match(forSvg)) {\\n acc.toSvg.push(cls);\\n } else {\\n acc.toNode.push(cls);\\n }\\n\\n return acc;\\n }, {\\n toNode: [],\\n toSvg: []\\n });\\n abstract[0].attributes.class = splitClasses.toSvg.join(' ');\\n var newInnerHTML = abstract.map(function (a) {\\n return toHtml(a);\\n }).join('\\\\n');\\n node.setAttribute('class', splitClasses.toNode.join(' '));\\n node.setAttribute(DATA_FA_I2SVG, '');\\n node.innerHTML = newInnerHTML;\\n }\\n};\\nfunction perform(mutations, callback) {\\n var callbackFunction = typeof callback === 'function' ? callback : noop$2;\\n\\n if (mutations.length === 0) {\\n callbackFunction();\\n } else {\\n var frame = WINDOW.requestAnimationFrame || function (op) {\\n return op();\\n };\\n\\n frame(function () {\\n var mutator = getMutator();\\n var mark = perf.begin('mutate');\\n mutations.map(mutator);\\n mark();\\n callbackFunction();\\n });\\n }\\n}\\nvar disabled = false;\\nfunction disableObservation() {\\n disabled = true;\\n}\\nfunction enableObservation() {\\n disabled = false;\\n}\\nvar mo = null;\\nfunction observe(options) {\\n if (!MUTATION_OBSERVER) {\\n return;\\n }\\n\\n if (!config.observeMutations) {\\n return;\\n }\\n\\n var treeCallback = options.treeCallback,\\n nodeCallback = options.nodeCallback,\\n pseudoElementsCallback = options.pseudoElementsCallback,\\n _options$observeMutat = options.observeMutationsRoot,\\n observeMutationsRoot = _options$observeMutat === void 0 ? DOCUMENT : _options$observeMutat;\\n mo = new MUTATION_OBSERVER(function (objects) {\\n if (disabled) return;\\n toArray(objects).forEach(function (mutationRecord) {\\n if (mutationRecord.type === 'childList' && mutationRecord.addedNodes.length > 0 && !isWatched(mutationRecord.addedNodes[0])) {\\n if (config.searchPseudoElements) {\\n pseudoElementsCallback(mutationRecord.target);\\n }\\n\\n treeCallback(mutationRecord.target);\\n }\\n\\n if (mutationRecord.type === 'attributes' && mutationRecord.target.parentNode && config.searchPseudoElements) {\\n pseudoElementsCallback(mutationRecord.target.parentNode);\\n }\\n\\n if (mutationRecord.type === 'attributes' && isWatched(mutationRecord.target) && ~ATTRIBUTES_WATCHED_FOR_MUTATION.indexOf(mutationRecord.attributeName)) {\\n if (mutationRecord.attributeName === 'class') {\\n var _getCanonicalIcon = getCanonicalIcon(classArray(mutationRecord.target)),\\n prefix = _getCanonicalIcon.prefix,\\n iconName = _getCanonicalIcon.iconName;\\n\\n if (prefix) mutationRecord.target.setAttribute('data-prefix', prefix);\\n if (iconName) mutationRecord.target.setAttribute('data-icon', iconName);\\n } else {\\n nodeCallback(mutationRecord.target);\\n }\\n }\\n });\\n });\\n if (!IS_DOM) return;\\n mo.observe(observeMutationsRoot, {\\n childList: true,\\n attributes: true,\\n characterData: true,\\n subtree: true\\n });\\n}\\nfunction disconnect() {\\n if (!mo) return;\\n mo.disconnect();\\n}\\n\\nfunction styleParser (node) {\\n var style = node.getAttribute('style');\\n var val = [];\\n\\n if (style) {\\n val = style.split(';').reduce(function (acc, style) {\\n var styles = style.split(':');\\n var prop = styles[0];\\n var value = styles.slice(1);\\n\\n if (prop && value.length > 0) {\\n acc[prop] = value.join(':').trim();\\n }\\n\\n return acc;\\n }, {});\\n }\\n\\n return val;\\n}\\n\\nfunction toHex(unicode) {\\n var result = '';\\n\\n for (var i = 0; i < unicode.length; i++) {\\n var hex = unicode.charCodeAt(i).toString(16);\\n result += ('000' + hex).slice(-4);\\n }\\n\\n return result;\\n}\\n\\nfunction classParser (node) {\\n var existingPrefix = node.getAttribute('data-prefix');\\n var existingIconName = node.getAttribute('data-icon');\\n var innerText = node.innerText !== undefined ? node.innerText.trim() : '';\\n var val = getCanonicalIcon(classArray(node));\\n\\n if (existingPrefix && existingIconName) {\\n val.prefix = existingPrefix;\\n val.iconName = existingIconName;\\n }\\n\\n if (val.prefix && innerText.length > 1) {\\n val.iconName = byLigature(val.prefix, node.innerText);\\n } else if (val.prefix && innerText.length === 1) {\\n val.iconName = byUnicode(val.prefix, toHex(node.innerText));\\n }\\n\\n return val;\\n}\\n\\nvar parseTransformString = function parseTransformString(transformString) {\\n var transform = {\\n size: 16,\\n x: 0,\\n y: 0,\\n flipX: false,\\n flipY: false,\\n rotate: 0\\n };\\n\\n if (!transformString) {\\n return transform;\\n } else {\\n return transformString.toLowerCase().split(' ').reduce(function (acc, n) {\\n var parts = n.toLowerCase().split('-');\\n var first = parts[0];\\n var rest = parts.slice(1).join('-');\\n\\n if (first && rest === 'h') {\\n acc.flipX = true;\\n return acc;\\n }\\n\\n if (first && rest === 'v') {\\n acc.flipY = true;\\n return acc;\\n }\\n\\n rest = parseFloat(rest);\\n\\n if (isNaN(rest)) {\\n return acc;\\n }\\n\\n switch (first) {\\n case 'grow':\\n acc.size = acc.size + rest;\\n break;\\n\\n case 'shrink':\\n acc.size = acc.size - rest;\\n break;\\n\\n case 'left':\\n acc.x = acc.x - rest;\\n break;\\n\\n case 'right':\\n acc.x = acc.x + rest;\\n break;\\n\\n case 'up':\\n acc.y = acc.y - rest;\\n break;\\n\\n case 'down':\\n acc.y = acc.y + rest;\\n break;\\n\\n case 'rotate':\\n acc.rotate = acc.rotate + rest;\\n break;\\n }\\n\\n return acc;\\n }, transform);\\n }\\n};\\nfunction transformParser (node) {\\n return parseTransformString(node.getAttribute('data-fa-transform'));\\n}\\n\\nfunction symbolParser (node) {\\n var symbol = node.getAttribute('data-fa-symbol');\\n return symbol === null ? false : symbol === '' ? true : symbol;\\n}\\n\\nfunction attributesParser (node) {\\n var extraAttributes = toArray(node.attributes).reduce(function (acc, attr) {\\n if (acc.name !== 'class' && acc.name !== 'style') {\\n acc[attr.name] = attr.value;\\n }\\n\\n return acc;\\n }, {});\\n var title = node.getAttribute('title');\\n\\n if (config.autoA11y) {\\n if (title) {\\n extraAttributes['aria-labelledby'] = \\\"\\\".concat(config.replacementClass, \\\"-title-\\\").concat(nextUniqueId());\\n } else {\\n extraAttributes['aria-hidden'] = 'true';\\n extraAttributes['focusable'] = 'false';\\n }\\n }\\n\\n return extraAttributes;\\n}\\n\\nfunction maskParser (node) {\\n var mask = node.getAttribute('data-fa-mask');\\n\\n if (!mask) {\\n return emptyCanonicalIcon();\\n } else {\\n return getCanonicalIcon(mask.split(' ').map(function (i) {\\n return i.trim();\\n }));\\n }\\n}\\n\\nfunction blankMeta() {\\n return {\\n iconName: null,\\n title: null,\\n prefix: null,\\n transform: meaninglessTransform,\\n symbol: false,\\n mask: null,\\n extra: {\\n classes: [],\\n styles: {},\\n attributes: {}\\n }\\n };\\n}\\nfunction parseMeta(node) {\\n var _classParser = classParser(node),\\n iconName = _classParser.iconName,\\n prefix = _classParser.prefix,\\n extraClasses = _classParser.rest;\\n\\n var extraStyles = styleParser(node);\\n var transform = transformParser(node);\\n var symbol = symbolParser(node);\\n var extraAttributes = attributesParser(node);\\n var mask = maskParser(node);\\n return {\\n iconName: iconName,\\n title: node.getAttribute('title'),\\n prefix: prefix,\\n transform: transform,\\n symbol: symbol,\\n mask: mask,\\n extra: {\\n classes: extraClasses,\\n styles: extraStyles,\\n attributes: extraAttributes\\n }\\n };\\n}\\n\\nfunction MissingIcon(error) {\\n this.name = 'MissingIcon';\\n this.message = error || 'Icon unavailable';\\n this.stack = new Error().stack;\\n}\\nMissingIcon.prototype = Object.create(Error.prototype);\\nMissingIcon.prototype.constructor = MissingIcon;\\n\\nvar FILL = {\\n fill: 'currentColor'\\n};\\nvar ANIMATION_BASE = {\\n attributeType: 'XML',\\n repeatCount: 'indefinite',\\n dur: '2s'\\n};\\nvar RING = {\\n tag: 'path',\\n attributes: _objectSpread({}, FILL, {\\n d: 'M156.5,447.7l-12.6,29.5c-18.7-9.5-35.9-21.2-51.5-34.9l22.7-22.7C127.6,430.5,141.5,440,156.5,447.7z M40.6,272H8.5 c1.4,21.2,5.4,41.7,11.7,61.1L50,321.2C45.1,305.5,41.8,289,40.6,272z M40.6,240c1.4-18.8,5.2-37,11.1-54.1l-29.5-12.6 C14.7,194.3,10,216.7,8.5,240H40.6z M64.3,156.5c7.8-14.9,17.2-28.8,28.1-41.5L69.7,92.3c-13.7,15.6-25.5,32.8-34.9,51.5 L64.3,156.5z M397,419.6c-13.9,12-29.4,22.3-46.1,30.4l11.9,29.8c20.7-9.9,39.8-22.6,56.9-37.6L397,419.6z M115,92.4 c13.9-12,29.4-22.3,46.1-30.4l-11.9-29.8c-20.7,9.9-39.8,22.6-56.8,37.6L115,92.4z M447.7,355.5c-7.8,14.9-17.2,28.8-28.1,41.5 l22.7,22.7c13.7-15.6,25.5-32.9,34.9-51.5L447.7,355.5z M471.4,272c-1.4,18.8-5.2,37-11.1,54.1l29.5,12.6 c7.5-21.1,12.2-43.5,13.6-66.8H471.4z M321.2,462c-15.7,5-32.2,8.2-49.2,9.4v32.1c21.2-1.4,41.7-5.4,61.1-11.7L321.2,462z M240,471.4c-18.8-1.4-37-5.2-54.1-11.1l-12.6,29.5c21.1,7.5,43.5,12.2,66.8,13.6V471.4z M462,190.8c5,15.7,8.2,32.2,9.4,49.2h32.1 c-1.4-21.2-5.4-41.7-11.7-61.1L462,190.8z M92.4,397c-12-13.9-22.3-29.4-30.4-46.1l-29.8,11.9c9.9,20.7,22.6,39.8,37.6,56.9 L92.4,397z M272,40.6c18.8,1.4,36.9,5.2,54.1,11.1l12.6-29.5C317.7,14.7,295.3,10,272,8.5V40.6z M190.8,50 c15.7-5,32.2-8.2,49.2-9.4V8.5c-21.2,1.4-41.7,5.4-61.1,11.7L190.8,50z M442.3,92.3L419.6,115c12,13.9,22.3,29.4,30.5,46.1 l29.8-11.9C470,128.5,457.3,109.4,442.3,92.3z M397,92.4l22.7-22.7c-15.6-13.7-32.8-25.5-51.5-34.9l-12.6,29.5 C370.4,72.1,384.4,81.5,397,92.4z'\\n })\\n};\\n\\nvar OPACITY_ANIMATE = _objectSpread({}, ANIMATION_BASE, {\\n attributeName: 'opacity'\\n});\\n\\nvar DOT = {\\n tag: 'circle',\\n attributes: _objectSpread({}, FILL, {\\n cx: '256',\\n cy: '364',\\n r: '28'\\n }),\\n children: [{\\n tag: 'animate',\\n attributes: _objectSpread({}, ANIMATION_BASE, {\\n attributeName: 'r',\\n values: '28;14;28;28;14;28;'\\n })\\n }, {\\n tag: 'animate',\\n attributes: _objectSpread({}, OPACITY_ANIMATE, {\\n values: '1;0;1;1;0;1;'\\n })\\n }]\\n};\\nvar QUESTION = {\\n tag: 'path',\\n attributes: _objectSpread({}, FILL, {\\n opacity: '1',\\n d: 'M263.7,312h-16c-6.6,0-12-5.4-12-12c0-71,77.4-63.9,77.4-107.8c0-20-17.8-40.2-57.4-40.2c-29.1,0-44.3,9.6-59.2,28.7 c-3.9,5-11.1,6-16.2,2.4l-13.1-9.2c-5.6-3.9-6.9-11.8-2.6-17.2c21.2-27.2,46.4-44.7,91.2-44.7c52.3,0,97.4,29.8,97.4,80.2 c0,67.6-77.4,63.5-77.4,107.8C275.7,306.6,270.3,312,263.7,312z'\\n }),\\n children: [{\\n tag: 'animate',\\n attributes: _objectSpread({}, OPACITY_ANIMATE, {\\n values: '1;0;0;0;0;1;'\\n })\\n }]\\n};\\nvar EXCLAMATION = {\\n tag: 'path',\\n attributes: _objectSpread({}, FILL, {\\n opacity: '0',\\n d: 'M232.5,134.5l7,168c0.3,6.4,5.6,11.5,12,11.5h9c6.4,0,11.7-5.1,12-11.5l7-168c0.3-6.8-5.2-12.5-12-12.5h-23 C237.7,122,232.2,127.7,232.5,134.5z'\\n }),\\n children: [{\\n tag: 'animate',\\n attributes: _objectSpread({}, OPACITY_ANIMATE, {\\n values: '0;0;1;1;0;0;'\\n })\\n }]\\n};\\nvar missing = {\\n tag: 'g',\\n children: [RING, DOT, QUESTION, EXCLAMATION]\\n};\\n\\nvar styles$2 = namespace.styles;\\nfunction findIcon(iconName, prefix) {\\n return new picked(function (resolve, reject) {\\n var val = {\\n found: false,\\n width: 512,\\n height: 512,\\n icon: missing\\n };\\n\\n if (iconName && prefix && styles$2[prefix] && styles$2[prefix][iconName]) {\\n var icon = styles$2[prefix][iconName];\\n var width = icon[0];\\n var height = icon[1];\\n var vectorData = icon.slice(4);\\n val = {\\n found: true,\\n width: width,\\n height: height,\\n icon: {\\n tag: 'path',\\n attributes: {\\n fill: 'currentColor',\\n d: vectorData[0]\\n }\\n }\\n };\\n return resolve(val);\\n }\\n\\n if (iconName && prefix && !config.showMissingIcons) {\\n reject(new MissingIcon(\\\"Icon is missing for prefix \\\".concat(prefix, \\\" with icon name \\\").concat(iconName)));\\n } else {\\n resolve(val);\\n }\\n });\\n}\\n\\nvar styles$3 = namespace.styles;\\n\\nfunction generateSvgReplacementMutation(node, nodeMeta) {\\n var iconName = nodeMeta.iconName,\\n title = nodeMeta.title,\\n prefix = nodeMeta.prefix,\\n transform = nodeMeta.transform,\\n symbol = nodeMeta.symbol,\\n mask = nodeMeta.mask,\\n extra = nodeMeta.extra;\\n return new picked(function (resolve, reject) {\\n picked.all([findIcon(iconName, prefix), findIcon(mask.iconName, mask.prefix)]).then(function (_ref) {\\n var _ref2 = _slicedToArray(_ref, 2),\\n main = _ref2[0],\\n mask = _ref2[1];\\n\\n resolve([node, makeInlineSvgAbstract({\\n icons: {\\n main: main,\\n mask: mask\\n },\\n prefix: prefix,\\n iconName: iconName,\\n transform: transform,\\n symbol: symbol,\\n mask: mask,\\n title: title,\\n extra: extra,\\n watchable: true\\n })]);\\n });\\n });\\n}\\n\\nfunction generateLayersText(node, nodeMeta) {\\n var title = nodeMeta.title,\\n transform = nodeMeta.transform,\\n extra = nodeMeta.extra;\\n var width = null;\\n var height = null;\\n\\n if (IS_IE) {\\n var computedFontSize = parseInt(getComputedStyle(node).fontSize, 10);\\n var boundingClientRect = node.getBoundingClientRect();\\n width = boundingClientRect.width / computedFontSize;\\n height = boundingClientRect.height / computedFontSize;\\n }\\n\\n if (config.autoA11y && !title) {\\n extra.attributes['aria-hidden'] = 'true';\\n }\\n\\n return picked.resolve([node, makeLayersTextAbstract({\\n content: node.innerHTML,\\n width: width,\\n height: height,\\n transform: transform,\\n title: title,\\n extra: extra,\\n watchable: true\\n })]);\\n}\\n\\nfunction generateMutation(node) {\\n var nodeMeta = parseMeta(node);\\n\\n if (~nodeMeta.extra.classes.indexOf(LAYERS_TEXT_CLASSNAME)) {\\n return generateLayersText(node, nodeMeta);\\n } else {\\n return generateSvgReplacementMutation(node, nodeMeta);\\n }\\n}\\n\\nfunction onTree(root) {\\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\\n if (!IS_DOM) return;\\n var htmlClassList = DOCUMENT.documentElement.classList;\\n\\n var hclAdd = function hclAdd(suffix) {\\n return htmlClassList.add(\\\"\\\".concat(HTML_CLASS_I2SVG_BASE_CLASS, \\\"-\\\").concat(suffix));\\n };\\n\\n var hclRemove = function hclRemove(suffix) {\\n return htmlClassList.remove(\\\"\\\".concat(HTML_CLASS_I2SVG_BASE_CLASS, \\\"-\\\").concat(suffix));\\n };\\n\\n var prefixes = config.autoFetchSvg ? Object.keys(PREFIX_TO_STYLE) : Object.keys(styles$3);\\n var prefixesDomQuery = [\\\".\\\".concat(LAYERS_TEXT_CLASSNAME, \\\":not([\\\").concat(DATA_FA_I2SVG, \\\"])\\\")].concat(prefixes.map(function (p) {\\n return \\\".\\\".concat(p, \\\":not([\\\").concat(DATA_FA_I2SVG, \\\"])\\\");\\n })).join(', ');\\n\\n if (prefixesDomQuery.length === 0) {\\n return;\\n }\\n\\n var candidates = toArray(root.querySelectorAll(prefixesDomQuery));\\n\\n if (candidates.length > 0) {\\n hclAdd('pending');\\n hclRemove('complete');\\n } else {\\n return;\\n }\\n\\n var mark = perf.begin('onTree');\\n var mutations = candidates.reduce(function (acc, node) {\\n try {\\n var mutation = generateMutation(node);\\n\\n if (mutation) {\\n acc.push(mutation);\\n }\\n } catch (e) {\\n if (!PRODUCTION) {\\n if (e instanceof MissingIcon) {\\n console.error(e);\\n }\\n }\\n }\\n\\n return acc;\\n }, []);\\n return new picked(function (resolve, reject) {\\n picked.all(mutations).then(function (resolvedMutations) {\\n perform(resolvedMutations, function () {\\n hclAdd('active');\\n hclAdd('complete');\\n hclRemove('pending');\\n if (typeof callback === 'function') callback();\\n mark();\\n resolve();\\n });\\n }).catch(function () {\\n mark();\\n reject();\\n });\\n });\\n}\\nfunction onNode(node) {\\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\\n generateMutation(node).then(function (mutation) {\\n if (mutation) {\\n perform([mutation], callback);\\n }\\n });\\n}\\n\\nfunction replaceForPosition(node, position) {\\n var pendingAttribute = \\\"\\\".concat(DATA_FA_PSEUDO_ELEMENT_PENDING).concat(position.replace(':', '-'));\\n return new picked(function (resolve, reject) {\\n if (node.getAttribute(pendingAttribute) !== null) {\\n // This node is already being processed\\n return resolve();\\n }\\n\\n var children = toArray(node.children);\\n var alreadyProcessedPseudoElement = children.filter(function (c) {\\n return c.getAttribute(DATA_FA_PSEUDO_ELEMENT) === position;\\n })[0];\\n var styles = WINDOW.getComputedStyle(node, position);\\n var fontFamily = styles.getPropertyValue('font-family').match(FONT_FAMILY_PATTERN);\\n var fontWeight = styles.getPropertyValue('font-weight');\\n\\n if (alreadyProcessedPseudoElement && !fontFamily) {\\n // If we've already processed it but the current computed style does not result in a font-family,\\n // that probably means that a class name that was previously present to make the icon has been\\n // removed. So we now should delete the icon.\\n node.removeChild(alreadyProcessedPseudoElement);\\n return resolve();\\n } else if (fontFamily) {\\n var content = styles.getPropertyValue('content');\\n var prefix = ~['Light', 'Regular', 'Solid', 'Brands'].indexOf(fontFamily[1]) ? STYLE_TO_PREFIX[fontFamily[1].toLowerCase()] : FONT_WEIGHT_TO_PREFIX[fontWeight];\\n var iconName = byUnicode(prefix, toHex(content.length === 3 ? content.substr(1, 1) : content)); // Only convert the pseudo element in this :before/:after position into an icon if we haven't\\n // already done so with the same prefix and iconName\\n\\n if (!alreadyProcessedPseudoElement || alreadyProcessedPseudoElement.getAttribute(DATA_PREFIX) !== prefix || alreadyProcessedPseudoElement.getAttribute(DATA_ICON) !== iconName) {\\n node.setAttribute(pendingAttribute, iconName);\\n\\n if (alreadyProcessedPseudoElement) {\\n // Delete the old one, since we're replacing it with a new one\\n node.removeChild(alreadyProcessedPseudoElement);\\n }\\n\\n var meta = blankMeta();\\n var extra = meta.extra;\\n extra.attributes[DATA_FA_PSEUDO_ELEMENT] = position;\\n findIcon(iconName, prefix).then(function (main) {\\n var abstract = makeInlineSvgAbstract(_objectSpread({}, meta, {\\n icons: {\\n main: main,\\n mask: emptyCanonicalIcon()\\n },\\n prefix: prefix,\\n iconName: iconName,\\n extra: extra,\\n watchable: true\\n }));\\n var element = DOCUMENT.createElement('svg');\\n\\n if (position === ':before') {\\n node.insertBefore(element, node.firstChild);\\n } else {\\n node.appendChild(element);\\n }\\n\\n element.outerHTML = abstract.map(function (a) {\\n return toHtml(a);\\n }).join('\\\\n');\\n node.removeAttribute(pendingAttribute);\\n resolve();\\n }).catch(reject);\\n } else {\\n resolve();\\n }\\n } else {\\n resolve();\\n }\\n });\\n}\\n\\nfunction replace(node) {\\n return picked.all([replaceForPosition(node, ':before'), replaceForPosition(node, ':after')]);\\n}\\n\\nfunction processable(node) {\\n return node.parentNode !== document.head && !~TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS.indexOf(node.tagName.toUpperCase()) && !node.getAttribute(DATA_FA_PSEUDO_ELEMENT) && (!node.parentNode || node.parentNode.tagName !== 'svg');\\n}\\n\\nfunction searchPseudoElements (root) {\\n if (!IS_DOM) return;\\n return new picked(function (resolve, reject) {\\n var operations = toArray(root.querySelectorAll('*')).filter(processable).map(replace);\\n var end = perf.begin('searchPseudoElements');\\n disableObservation();\\n picked.all(operations).then(function () {\\n end();\\n enableObservation();\\n resolve();\\n }).catch(function () {\\n end();\\n enableObservation();\\n reject();\\n });\\n });\\n}\\n\\nvar baseStyles = \\\"svg:not(:root).svg-inline--fa {\\\\n overflow: visible;\\\\n}\\\\n\\\\n.svg-inline--fa {\\\\n display: inline-block;\\\\n font-size: inherit;\\\\n height: 1em;\\\\n overflow: visible;\\\\n vertical-align: -0.125em;\\\\n}\\\\n.svg-inline--fa.fa-lg {\\\\n vertical-align: -0.225em;\\\\n}\\\\n.svg-inline--fa.fa-w-1 {\\\\n width: 0.0625em;\\\\n}\\\\n.svg-inline--fa.fa-w-2 {\\\\n width: 0.125em;\\\\n}\\\\n.svg-inline--fa.fa-w-3 {\\\\n width: 0.1875em;\\\\n}\\\\n.svg-inline--fa.fa-w-4 {\\\\n width: 0.25em;\\\\n}\\\\n.svg-inline--fa.fa-w-5 {\\\\n width: 0.3125em;\\\\n}\\\\n.svg-inline--fa.fa-w-6 {\\\\n width: 0.375em;\\\\n}\\\\n.svg-inline--fa.fa-w-7 {\\\\n width: 0.4375em;\\\\n}\\\\n.svg-inline--fa.fa-w-8 {\\\\n width: 0.5em;\\\\n}\\\\n.svg-inline--fa.fa-w-9 {\\\\n width: 0.5625em;\\\\n}\\\\n.svg-inline--fa.fa-w-10 {\\\\n width: 0.625em;\\\\n}\\\\n.svg-inline--fa.fa-w-11 {\\\\n width: 0.6875em;\\\\n}\\\\n.svg-inline--fa.fa-w-12 {\\\\n width: 0.75em;\\\\n}\\\\n.svg-inline--fa.fa-w-13 {\\\\n width: 0.8125em;\\\\n}\\\\n.svg-inline--fa.fa-w-14 {\\\\n width: 0.875em;\\\\n}\\\\n.svg-inline--fa.fa-w-15 {\\\\n width: 0.9375em;\\\\n}\\\\n.svg-inline--fa.fa-w-16 {\\\\n width: 1em;\\\\n}\\\\n.svg-inline--fa.fa-w-17 {\\\\n width: 1.0625em;\\\\n}\\\\n.svg-inline--fa.fa-w-18 {\\\\n width: 1.125em;\\\\n}\\\\n.svg-inline--fa.fa-w-19 {\\\\n width: 1.1875em;\\\\n}\\\\n.svg-inline--fa.fa-w-20 {\\\\n width: 1.25em;\\\\n}\\\\n.svg-inline--fa.fa-pull-left {\\\\n margin-right: 0.3em;\\\\n width: auto;\\\\n}\\\\n.svg-inline--fa.fa-pull-right {\\\\n margin-left: 0.3em;\\\\n width: auto;\\\\n}\\\\n.svg-inline--fa.fa-border {\\\\n height: 1.5em;\\\\n}\\\\n.svg-inline--fa.fa-li {\\\\n width: 2em;\\\\n}\\\\n.svg-inline--fa.fa-fw {\\\\n width: 1.25em;\\\\n}\\\\n\\\\n.fa-layers svg.svg-inline--fa {\\\\n bottom: 0;\\\\n left: 0;\\\\n margin: auto;\\\\n position: absolute;\\\\n right: 0;\\\\n top: 0;\\\\n}\\\\n\\\\n.fa-layers {\\\\n display: inline-block;\\\\n height: 1em;\\\\n position: relative;\\\\n text-align: center;\\\\n vertical-align: -0.125em;\\\\n width: 1em;\\\\n}\\\\n.fa-layers svg.svg-inline--fa {\\\\n -webkit-transform-origin: center center;\\\\n transform-origin: center center;\\\\n}\\\\n\\\\n.fa-layers-counter, .fa-layers-text {\\\\n display: inline-block;\\\\n position: absolute;\\\\n text-align: center;\\\\n}\\\\n\\\\n.fa-layers-text {\\\\n left: 50%;\\\\n top: 50%;\\\\n -webkit-transform: translate(-50%, -50%);\\\\n transform: translate(-50%, -50%);\\\\n -webkit-transform-origin: center center;\\\\n transform-origin: center center;\\\\n}\\\\n\\\\n.fa-layers-counter {\\\\n background-color: #ff253a;\\\\n border-radius: 1em;\\\\n -webkit-box-sizing: border-box;\\\\n box-sizing: border-box;\\\\n color: #fff;\\\\n height: 1.5em;\\\\n line-height: 1;\\\\n max-width: 5em;\\\\n min-width: 1.5em;\\\\n overflow: hidden;\\\\n padding: 0.25em;\\\\n right: 0;\\\\n text-overflow: ellipsis;\\\\n top: 0;\\\\n -webkit-transform: scale(0.25);\\\\n transform: scale(0.25);\\\\n -webkit-transform-origin: top right;\\\\n transform-origin: top right;\\\\n}\\\\n\\\\n.fa-layers-bottom-right {\\\\n bottom: 0;\\\\n right: 0;\\\\n top: auto;\\\\n -webkit-transform: scale(0.25);\\\\n transform: scale(0.25);\\\\n -webkit-transform-origin: bottom right;\\\\n transform-origin: bottom right;\\\\n}\\\\n\\\\n.fa-layers-bottom-left {\\\\n bottom: 0;\\\\n left: 0;\\\\n right: auto;\\\\n top: auto;\\\\n -webkit-transform: scale(0.25);\\\\n transform: scale(0.25);\\\\n -webkit-transform-origin: bottom left;\\\\n transform-origin: bottom left;\\\\n}\\\\n\\\\n.fa-layers-top-right {\\\\n right: 0;\\\\n top: 0;\\\\n -webkit-transform: scale(0.25);\\\\n transform: scale(0.25);\\\\n -webkit-transform-origin: top right;\\\\n transform-origin: top right;\\\\n}\\\\n\\\\n.fa-layers-top-left {\\\\n left: 0;\\\\n right: auto;\\\\n top: 0;\\\\n -webkit-transform: scale(0.25);\\\\n transform: scale(0.25);\\\\n -webkit-transform-origin: top left;\\\\n transform-origin: top left;\\\\n}\\\\n\\\\n.fa-lg {\\\\n font-size: 1.3333333333em;\\\\n line-height: 0.75em;\\\\n vertical-align: -0.0667em;\\\\n}\\\\n\\\\n.fa-xs {\\\\n font-size: 0.75em;\\\\n}\\\\n\\\\n.fa-sm {\\\\n font-size: 0.875em;\\\\n}\\\\n\\\\n.fa-1x {\\\\n font-size: 1em;\\\\n}\\\\n\\\\n.fa-2x {\\\\n font-size: 2em;\\\\n}\\\\n\\\\n.fa-3x {\\\\n font-size: 3em;\\\\n}\\\\n\\\\n.fa-4x {\\\\n font-size: 4em;\\\\n}\\\\n\\\\n.fa-5x {\\\\n font-size: 5em;\\\\n}\\\\n\\\\n.fa-6x {\\\\n font-size: 6em;\\\\n}\\\\n\\\\n.fa-7x {\\\\n font-size: 7em;\\\\n}\\\\n\\\\n.fa-8x {\\\\n font-size: 8em;\\\\n}\\\\n\\\\n.fa-9x {\\\\n font-size: 9em;\\\\n}\\\\n\\\\n.fa-10x {\\\\n font-size: 10em;\\\\n}\\\\n\\\\n.fa-fw {\\\\n text-align: center;\\\\n width: 1.25em;\\\\n}\\\\n\\\\n.fa-ul {\\\\n list-style-type: none;\\\\n margin-left: 2.5em;\\\\n padding-left: 0;\\\\n}\\\\n.fa-ul > li {\\\\n position: relative;\\\\n}\\\\n\\\\n.fa-li {\\\\n left: -2em;\\\\n position: absolute;\\\\n text-align: center;\\\\n width: 2em;\\\\n line-height: inherit;\\\\n}\\\\n\\\\n.fa-border {\\\\n border: solid 0.08em #eee;\\\\n border-radius: 0.1em;\\\\n padding: 0.2em 0.25em 0.15em;\\\\n}\\\\n\\\\n.fa-pull-left {\\\\n float: left;\\\\n}\\\\n\\\\n.fa-pull-right {\\\\n float: right;\\\\n}\\\\n\\\\n.fa.fa-pull-left,\\\\n.fas.fa-pull-left,\\\\n.far.fa-pull-left,\\\\n.fal.fa-pull-left,\\\\n.fab.fa-pull-left {\\\\n margin-right: 0.3em;\\\\n}\\\\n.fa.fa-pull-right,\\\\n.fas.fa-pull-right,\\\\n.far.fa-pull-right,\\\\n.fal.fa-pull-right,\\\\n.fab.fa-pull-right {\\\\n margin-left: 0.3em;\\\\n}\\\\n\\\\n.fa-spin {\\\\n -webkit-animation: fa-spin 2s infinite linear;\\\\n animation: fa-spin 2s infinite linear;\\\\n}\\\\n\\\\n.fa-pulse {\\\\n -webkit-animation: fa-spin 1s infinite steps(8);\\\\n animation: fa-spin 1s infinite steps(8);\\\\n}\\\\n\\\\n@-webkit-keyframes fa-spin {\\\\n 0% {\\\\n -webkit-transform: rotate(0deg);\\\\n transform: rotate(0deg);\\\\n }\\\\n 100% {\\\\n -webkit-transform: rotate(360deg);\\\\n transform: rotate(360deg);\\\\n }\\\\n}\\\\n\\\\n@keyframes fa-spin {\\\\n 0% {\\\\n -webkit-transform: rotate(0deg);\\\\n transform: rotate(0deg);\\\\n }\\\\n 100% {\\\\n -webkit-transform: rotate(360deg);\\\\n transform: rotate(360deg);\\\\n }\\\\n}\\\\n.fa-rotate-90 {\\\\n -ms-filter: \\\\\\\"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\\\\\\\";\\\\n -webkit-transform: rotate(90deg);\\\\n transform: rotate(90deg);\\\\n}\\\\n\\\\n.fa-rotate-180 {\\\\n -ms-filter: \\\\\\\"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\\\\\\\";\\\\n -webkit-transform: rotate(180deg);\\\\n transform: rotate(180deg);\\\\n}\\\\n\\\\n.fa-rotate-270 {\\\\n -ms-filter: \\\\\\\"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\\\\\\\";\\\\n -webkit-transform: rotate(270deg);\\\\n transform: rotate(270deg);\\\\n}\\\\n\\\\n.fa-flip-horizontal {\\\\n -ms-filter: \\\\\\\"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\\\\\\\";\\\\n -webkit-transform: scale(-1, 1);\\\\n transform: scale(-1, 1);\\\\n}\\\\n\\\\n.fa-flip-vertical {\\\\n -ms-filter: \\\\\\\"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\\\\\\\";\\\\n -webkit-transform: scale(1, -1);\\\\n transform: scale(1, -1);\\\\n}\\\\n\\\\n.fa-flip-both, .fa-flip-horizontal.fa-flip-vertical {\\\\n -ms-filter: \\\\\\\"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\\\\\\\";\\\\n -webkit-transform: scale(-1, -1);\\\\n transform: scale(-1, -1);\\\\n}\\\\n\\\\n:root .fa-rotate-90,\\\\n:root .fa-rotate-180,\\\\n:root .fa-rotate-270,\\\\n:root .fa-flip-horizontal,\\\\n:root .fa-flip-vertical,\\\\n:root .fa-flip-both {\\\\n -webkit-filter: none;\\\\n filter: none;\\\\n}\\\\n\\\\n.fa-stack {\\\\n display: inline-block;\\\\n height: 2em;\\\\n position: relative;\\\\n width: 2.5em;\\\\n}\\\\n\\\\n.fa-stack-1x,\\\\n.fa-stack-2x {\\\\n bottom: 0;\\\\n left: 0;\\\\n margin: auto;\\\\n position: absolute;\\\\n right: 0;\\\\n top: 0;\\\\n}\\\\n\\\\n.svg-inline--fa.fa-stack-1x {\\\\n height: 1em;\\\\n width: 1.25em;\\\\n}\\\\n.svg-inline--fa.fa-stack-2x {\\\\n height: 2em;\\\\n width: 2.5em;\\\\n}\\\\n\\\\n.fa-inverse {\\\\n color: #fff;\\\\n}\\\\n\\\\n.sr-only {\\\\n border: 0;\\\\n clip: rect(0, 0, 0, 0);\\\\n height: 1px;\\\\n margin: -1px;\\\\n overflow: hidden;\\\\n padding: 0;\\\\n position: absolute;\\\\n width: 1px;\\\\n}\\\\n\\\\n.sr-only-focusable:active, .sr-only-focusable:focus {\\\\n clip: auto;\\\\n height: auto;\\\\n margin: 0;\\\\n overflow: visible;\\\\n position: static;\\\\n width: auto;\\\\n}\\\";\\n\\nfunction css () {\\n var dfp = DEFAULT_FAMILY_PREFIX;\\n var drc = DEFAULT_REPLACEMENT_CLASS;\\n var fp = config.familyPrefix;\\n var rc = config.replacementClass;\\n var s = baseStyles;\\n\\n if (fp !== dfp || rc !== drc) {\\n var dPatt = new RegExp(\\\"\\\\\\\\.\\\".concat(dfp, \\\"\\\\\\\\-\\\"), 'g');\\n var rPatt = new RegExp(\\\"\\\\\\\\.\\\".concat(drc), 'g');\\n s = s.replace(dPatt, \\\".\\\".concat(fp, \\\"-\\\")).replace(rPatt, \\\".\\\".concat(rc));\\n }\\n\\n return s;\\n}\\n\\nvar Library =\\n/*#__PURE__*/\\nfunction () {\\n function Library() {\\n _classCallCheck(this, Library);\\n\\n this.definitions = {};\\n }\\n\\n _createClass(Library, [{\\n key: \\\"add\\\",\\n value: function add() {\\n var _this = this;\\n\\n for (var _len = arguments.length, definitions = new Array(_len), _key = 0; _key < _len; _key++) {\\n definitions[_key] = arguments[_key];\\n }\\n\\n var additions = definitions.reduce(this._pullDefinitions, {});\\n Object.keys(additions).forEach(function (key) {\\n _this.definitions[key] = _objectSpread({}, _this.definitions[key] || {}, additions[key]);\\n defineIcons(key, additions[key]);\\n build();\\n });\\n }\\n }, {\\n key: \\\"reset\\\",\\n value: function reset() {\\n this.definitions = {};\\n }\\n }, {\\n key: \\\"_pullDefinitions\\\",\\n value: function _pullDefinitions(additions, definition) {\\n var normalized = definition.prefix && definition.iconName && definition.icon ? {\\n 0: definition\\n } : definition;\\n Object.keys(normalized).map(function (key) {\\n var _normalized$key = normalized[key],\\n prefix = _normalized$key.prefix,\\n iconName = _normalized$key.iconName,\\n icon = _normalized$key.icon;\\n if (!additions[prefix]) additions[prefix] = {};\\n additions[prefix][iconName] = icon;\\n });\\n return additions;\\n }\\n }]);\\n\\n return Library;\\n}();\\n\\nfunction prepIcon(icon) {\\n var width = icon[0];\\n var height = icon[1];\\n var vectorData = icon.slice(4);\\n return {\\n found: true,\\n width: width,\\n height: height,\\n icon: {\\n tag: 'path',\\n attributes: {\\n fill: 'currentColor',\\n d: vectorData[0]\\n }\\n }\\n };\\n}\\n\\nfunction ensureCss() {\\n if (config.autoAddCss && !_cssInserted) {\\n insertCss(css());\\n\\n _cssInserted = true;\\n }\\n}\\n\\nfunction apiObject(val, abstractCreator) {\\n Object.defineProperty(val, 'abstract', {\\n get: abstractCreator\\n });\\n Object.defineProperty(val, 'html', {\\n get: function get() {\\n return val.abstract.map(function (a) {\\n return toHtml(a);\\n });\\n }\\n });\\n Object.defineProperty(val, 'node', {\\n get: function get() {\\n if (!IS_DOM) return;\\n var container = DOCUMENT.createElement('div');\\n container.innerHTML = val.html;\\n return container.children;\\n }\\n });\\n return val;\\n}\\n\\nfunction findIconDefinition(iconLookup) {\\n var _iconLookup$prefix = iconLookup.prefix,\\n prefix = _iconLookup$prefix === void 0 ? 'fa' : _iconLookup$prefix,\\n iconName = iconLookup.iconName;\\n if (!iconName) return;\\n return iconFromMapping(library.definitions, prefix, iconName) || iconFromMapping(namespace.styles, prefix, iconName);\\n}\\n\\nfunction resolveIcons(next) {\\n return function (maybeIconDefinition) {\\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\\n var iconDefinition = (maybeIconDefinition || {}).icon ? maybeIconDefinition : findIconDefinition(maybeIconDefinition || {});\\n var mask = params.mask;\\n\\n if (mask) {\\n mask = (mask || {}).icon ? mask : findIconDefinition(mask || {});\\n }\\n\\n return next(iconDefinition, _objectSpread({}, params, {\\n mask: mask\\n }));\\n };\\n}\\n\\nvar library = new Library();\\nvar noAuto = function noAuto() {\\n config.autoReplaceSvg = false;\\n config.observeMutations = false;\\n disconnect();\\n};\\nvar _cssInserted = false;\\nvar dom = {\\n i2svg: function i2svg() {\\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\\n\\n if (IS_DOM) {\\n ensureCss();\\n var _params$node = params.node,\\n node = _params$node === void 0 ? DOCUMENT : _params$node,\\n _params$callback = params.callback,\\n callback = _params$callback === void 0 ? function () {} : _params$callback;\\n\\n if (config.searchPseudoElements) {\\n searchPseudoElements(node);\\n }\\n\\n return onTree(node, callback);\\n } else {\\n return picked.reject('Operation requires a DOM of some kind.');\\n }\\n },\\n css: css,\\n insertCss: function insertCss$$1() {\\n if (!_cssInserted) {\\n insertCss(css());\\n\\n _cssInserted = true;\\n }\\n },\\n watch: function watch() {\\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\\n var autoReplaceSvgRoot = params.autoReplaceSvgRoot,\\n observeMutationsRoot = params.observeMutationsRoot;\\n\\n if (config.autoReplaceSvg === false) {\\n config.autoReplaceSvg = true;\\n }\\n\\n config.observeMutations = true;\\n domready(function () {\\n autoReplace({\\n autoReplaceSvgRoot: autoReplaceSvgRoot\\n });\\n observe({\\n treeCallback: onTree,\\n nodeCallback: onNode,\\n pseudoElementsCallback: searchPseudoElements,\\n observeMutationsRoot: observeMutationsRoot\\n });\\n });\\n }\\n};\\nvar parse = {\\n transform: function transform(transformString) {\\n return parseTransformString(transformString);\\n }\\n};\\nvar icon = resolveIcons(function (iconDefinition) {\\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\\n var _params$transform = params.transform,\\n transform = _params$transform === void 0 ? meaninglessTransform : _params$transform,\\n _params$symbol = params.symbol,\\n symbol = _params$symbol === void 0 ? false : _params$symbol,\\n _params$mask = params.mask,\\n mask = _params$mask === void 0 ? null : _params$mask,\\n _params$title = params.title,\\n title = _params$title === void 0 ? null : _params$title,\\n _params$classes = params.classes,\\n classes = _params$classes === void 0 ? [] : _params$classes,\\n _params$attributes = params.attributes,\\n attributes = _params$attributes === void 0 ? {} : _params$attributes,\\n _params$styles = params.styles,\\n styles = _params$styles === void 0 ? {} : _params$styles;\\n if (!iconDefinition) return;\\n var prefix = iconDefinition.prefix,\\n iconName = iconDefinition.iconName,\\n icon = iconDefinition.icon;\\n return apiObject(_objectSpread({\\n type: 'icon'\\n }, iconDefinition), function () {\\n ensureCss();\\n\\n if (config.autoA11y) {\\n if (title) {\\n attributes['aria-labelledby'] = \\\"\\\".concat(config.replacementClass, \\\"-title-\\\").concat(nextUniqueId());\\n } else {\\n attributes['aria-hidden'] = 'true';\\n attributes['focusable'] = 'false';\\n }\\n }\\n\\n return makeInlineSvgAbstract({\\n icons: {\\n main: prepIcon(icon),\\n mask: mask ? prepIcon(mask.icon) : {\\n found: false,\\n width: null,\\n height: null,\\n icon: {}\\n }\\n },\\n prefix: prefix,\\n iconName: iconName,\\n transform: _objectSpread({}, meaninglessTransform, transform),\\n symbol: symbol,\\n title: title,\\n extra: {\\n attributes: attributes,\\n styles: styles,\\n classes: classes\\n }\\n });\\n });\\n});\\nvar text = function text(content) {\\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\\n var _params$transform2 = params.transform,\\n transform = _params$transform2 === void 0 ? meaninglessTransform : _params$transform2,\\n _params$title2 = params.title,\\n title = _params$title2 === void 0 ? null : _params$title2,\\n _params$classes2 = params.classes,\\n classes = _params$classes2 === void 0 ? [] : _params$classes2,\\n _params$attributes2 = params.attributes,\\n attributes = _params$attributes2 === void 0 ? {} : _params$attributes2,\\n _params$styles2 = params.styles,\\n styles = _params$styles2 === void 0 ? {} : _params$styles2;\\n return apiObject({\\n type: 'text',\\n content: content\\n }, function () {\\n ensureCss();\\n return makeLayersTextAbstract({\\n content: content,\\n transform: _objectSpread({}, meaninglessTransform, transform),\\n title: title,\\n extra: {\\n attributes: attributes,\\n styles: styles,\\n classes: [\\\"\\\".concat(config.familyPrefix, \\\"-layers-text\\\")].concat(_toConsumableArray(classes))\\n }\\n });\\n });\\n};\\nvar counter = function counter(content) {\\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\\n var _params$title3 = params.title,\\n title = _params$title3 === void 0 ? null : _params$title3,\\n _params$classes3 = params.classes,\\n classes = _params$classes3 === void 0 ? [] : _params$classes3,\\n _params$attributes3 = params.attributes,\\n attributes = _params$attributes3 === void 0 ? {} : _params$attributes3,\\n _params$styles3 = params.styles,\\n styles = _params$styles3 === void 0 ? {} : _params$styles3;\\n return apiObject({\\n type: 'counter',\\n content: content\\n }, function () {\\n ensureCss();\\n return makeLayersCounterAbstract({\\n content: content.toString(),\\n title: title,\\n extra: {\\n attributes: attributes,\\n styles: styles,\\n classes: [\\\"\\\".concat(config.familyPrefix, \\\"-layers-counter\\\")].concat(_toConsumableArray(classes))\\n }\\n });\\n });\\n};\\nvar layer = function layer(assembler) {\\n return apiObject({\\n type: 'layer'\\n }, function () {\\n ensureCss();\\n var children = [];\\n assembler(function (args) {\\n Array.isArray(args) ? args.map(function (a) {\\n children = children.concat(a.abstract);\\n }) : children = children.concat(args.abstract);\\n });\\n return [{\\n tag: 'span',\\n attributes: {\\n class: \\\"\\\".concat(config.familyPrefix, \\\"-layers\\\")\\n },\\n children: children\\n }];\\n });\\n};\\nvar api = {\\n noAuto: noAuto,\\n config: config,\\n dom: dom,\\n library: library,\\n parse: parse,\\n findIconDefinition: findIconDefinition,\\n icon: icon,\\n text: text,\\n counter: counter,\\n layer: layer,\\n toHtml: toHtml\\n};\\n\\nvar autoReplace = function autoReplace() {\\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\\n var _params$autoReplaceSv = params.autoReplaceSvgRoot,\\n autoReplaceSvgRoot = _params$autoReplaceSv === void 0 ? DOCUMENT : _params$autoReplaceSv;\\n if ((Object.keys(namespace.styles).length > 0 || config.autoFetchSvg) && IS_DOM && config.autoReplaceSvg) api.dom.i2svg({\\n node: autoReplaceSvgRoot\\n });\\n};\\n\\n\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ \\\"./node_modules/webpack/buildin/global.js\\\"), __webpack_require__(/*! ./../../timers-browserify/main.js */ \\\"./node_modules/timers-browserify/main.js\\\").setImmediate))\\n\\n//# sourceURL=webpack:///./node_modules/@fortawesome/fontawesome-svg-core/index.es.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@fortawesome/free-brands-svg-icons/faGithub.js\":\n/*!*********************************************************************!*\\\n !*** ./node_modules/@fortawesome/free-brands-svg-icons/faGithub.js ***!\n \\*********************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, '__esModule', { value: true });\\nvar prefix = 'fab';\\nvar iconName = 'github';\\nvar width = 496;\\nvar height = 512;\\nvar ligatures = [];\\nvar unicode = 'f09b';\\nvar svgPathData = 'M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z';\\n\\nexports.definition = {\\n prefix: prefix,\\n iconName: iconName,\\n icon: [\\n width,\\n height,\\n ligatures,\\n unicode,\\n svgPathData\\n ]};\\n\\nexports.faGithub = exports.definition;\\nexports.prefix = prefix;\\nexports.iconName = iconName;\\nexports.width = width;\\nexports.height = height;\\nexports.ligatures = ligatures;\\nexports.unicode = unicode;\\nexports.svgPathData = svgPathData;\\n\\n//# sourceURL=webpack:///./node_modules/@fortawesome/free-brands-svg-icons/faGithub.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@fortawesome/free-brands-svg-icons/faTwitter.js\":\n/*!**********************************************************************!*\\\n !*** ./node_modules/@fortawesome/free-brands-svg-icons/faTwitter.js ***!\n \\**********************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, '__esModule', { value: true });\\nvar prefix = 'fab';\\nvar iconName = 'twitter';\\nvar width = 512;\\nvar height = 512;\\nvar ligatures = [];\\nvar unicode = 'f099';\\nvar svgPathData = 'M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z';\\n\\nexports.definition = {\\n prefix: prefix,\\n iconName: iconName,\\n icon: [\\n width,\\n height,\\n ligatures,\\n unicode,\\n svgPathData\\n ]};\\n\\nexports.faTwitter = exports.definition;\\nexports.prefix = prefix;\\nexports.iconName = iconName;\\nexports.width = width;\\nexports.height = height;\\nexports.ligatures = ligatures;\\nexports.unicode = unicode;\\nexports.svgPathData = svgPathData;\\n\\n//# sourceURL=webpack:///./node_modules/@fortawesome/free-brands-svg-icons/faTwitter.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@fortawesome/free-regular-svg-icons/faClone.js\":\n/*!*********************************************************************!*\\\n !*** ./node_modules/@fortawesome/free-regular-svg-icons/faClone.js ***!\n \\*********************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, '__esModule', { value: true });\\nvar prefix = 'far';\\nvar iconName = 'clone';\\nvar width = 512;\\nvar height = 512;\\nvar ligatures = [];\\nvar unicode = 'f24d';\\nvar svgPathData = 'M464 0H144c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h320c26.51 0 48-21.49 48-48v-48h48c26.51 0 48-21.49 48-48V48c0-26.51-21.49-48-48-48zM362 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h42v224c0 26.51 21.49 48 48 48h224v42a6 6 0 0 1-6 6zm96-96H150a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h308a6 6 0 0 1 6 6v308a6 6 0 0 1-6 6z';\\n\\nexports.definition = {\\n prefix: prefix,\\n iconName: iconName,\\n icon: [\\n width,\\n height,\\n ligatures,\\n unicode,\\n svgPathData\\n ]};\\n\\nexports.faClone = exports.definition;\\nexports.prefix = prefix;\\nexports.iconName = iconName;\\nexports.width = width;\\nexports.height = height;\\nexports.ligatures = ligatures;\\nexports.unicode = unicode;\\nexports.svgPathData = svgPathData;\\n\\n//# sourceURL=webpack:///./node_modules/@fortawesome/free-regular-svg-icons/faClone.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@fortawesome/free-solid-svg-icons/faArrowRight.js\":\n/*!************************************************************************!*\\\n !*** ./node_modules/@fortawesome/free-solid-svg-icons/faArrowRight.js ***!\n \\************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, '__esModule', { value: true });\\nvar prefix = 'fas';\\nvar iconName = 'arrow-right';\\nvar width = 448;\\nvar height = 512;\\nvar ligatures = [];\\nvar unicode = 'f061';\\nvar svgPathData = 'M190.5 66.9l22.2-22.2c9.4-9.4 24.6-9.4 33.9 0L441 239c9.4 9.4 9.4 24.6 0 33.9L246.6 467.3c-9.4 9.4-24.6 9.4-33.9 0l-22.2-22.2c-9.5-9.5-9.3-25 .4-34.3L311.4 296H24c-13.3 0-24-10.7-24-24v-32c0-13.3 10.7-24 24-24h287.4L190.9 101.2c-9.8-9.3-10-24.8-.4-34.3z';\\n\\nexports.definition = {\\n prefix: prefix,\\n iconName: iconName,\\n icon: [\\n width,\\n height,\\n ligatures,\\n unicode,\\n svgPathData\\n ]};\\n\\nexports.faArrowRight = exports.definition;\\nexports.prefix = prefix;\\nexports.iconName = iconName;\\nexports.width = width;\\nexports.height = height;\\nexports.ligatures = ligatures;\\nexports.unicode = unicode;\\nexports.svgPathData = svgPathData;\\n\\n//# sourceURL=webpack:///./node_modules/@fortawesome/free-solid-svg-icons/faArrowRight.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@fortawesome/free-solid-svg-icons/faCheck.js\":\n/*!*******************************************************************!*\\\n !*** ./node_modules/@fortawesome/free-solid-svg-icons/faCheck.js ***!\n \\*******************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, '__esModule', { value: true });\\nvar prefix = 'fas';\\nvar iconName = 'check';\\nvar width = 512;\\nvar height = 512;\\nvar ligatures = [];\\nvar unicode = 'f00c';\\nvar svgPathData = 'M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z';\\n\\nexports.definition = {\\n prefix: prefix,\\n iconName: iconName,\\n icon: [\\n width,\\n height,\\n ligatures,\\n unicode,\\n svgPathData\\n ]};\\n\\nexports.faCheck = exports.definition;\\nexports.prefix = prefix;\\nexports.iconName = iconName;\\nexports.width = width;\\nexports.height = height;\\nexports.ligatures = ligatures;\\nexports.unicode = unicode;\\nexports.svgPathData = svgPathData;\\n\\n//# sourceURL=webpack:///./node_modules/@fortawesome/free-solid-svg-icons/faCheck.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@fortawesome/free-solid-svg-icons/faGlobeAmericas.js\":\n/*!***************************************************************************!*\\\n !*** ./node_modules/@fortawesome/free-solid-svg-icons/faGlobeAmericas.js ***!\n \\***************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, '__esModule', { value: true });\\nvar prefix = 'fas';\\nvar iconName = 'globe-americas';\\nvar width = 496;\\nvar height = 512;\\nvar ligatures = [];\\nvar unicode = 'f57d';\\nvar svgPathData = 'M248 8C111.03 8 0 119.03 0 256s111.03 248 248 248 248-111.03 248-248S384.97 8 248 8zm82.29 357.6c-3.9 3.88-7.99 7.95-11.31 11.28-2.99 3-5.1 6.7-6.17 10.71-1.51 5.66-2.73 11.38-4.77 16.87l-17.39 46.85c-13.76 3-28 4.69-42.65 4.69v-27.38c1.69-12.62-7.64-36.26-22.63-51.25-6-6-9.37-14.14-9.37-22.63v-32.01c0-11.64-6.27-22.34-16.46-27.97-14.37-7.95-34.81-19.06-48.81-26.11-11.48-5.78-22.1-13.14-31.65-21.75l-.8-.72a114.792 114.792 0 0 1-18.06-20.74c-9.38-13.77-24.66-36.42-34.59-51.14 20.47-45.5 57.36-82.04 103.2-101.89l24.01 12.01C203.48 89.74 216 82.01 216 70.11v-11.3c7.99-1.29 16.12-2.11 24.39-2.42l28.3 28.3c6.25 6.25 6.25 16.38 0 22.63L264 112l-10.34 10.34c-3.12 3.12-3.12 8.19 0 11.31l4.69 4.69c3.12 3.12 3.12 8.19 0 11.31l-8 8a8.008 8.008 0 0 1-5.66 2.34h-8.99c-2.08 0-4.08.81-5.58 2.27l-9.92 9.65a8.008 8.008 0 0 0-1.58 9.31l15.59 31.19c2.66 5.32-1.21 11.58-7.15 11.58h-5.64c-1.93 0-3.79-.7-5.24-1.96l-9.28-8.06a16.017 16.017 0 0 0-15.55-3.1l-31.17 10.39a11.95 11.95 0 0 0-8.17 11.34c0 4.53 2.56 8.66 6.61 10.69l11.08 5.54c9.41 4.71 19.79 7.16 30.31 7.16s22.59 27.29 32 32h66.75c8.49 0 16.62 3.37 22.63 9.37l13.69 13.69a30.503 30.503 0 0 1 8.93 21.57 46.536 46.536 0 0 1-13.72 32.98zM417 274.25c-5.79-1.45-10.84-5-14.15-9.97l-17.98-26.97a23.97 23.97 0 0 1 0-26.62l19.59-29.38c2.32-3.47 5.5-6.29 9.24-8.15l12.98-6.49C440.2 193.59 448 223.87 448 256c0 8.67-.74 17.16-1.82 25.54L417 274.25z';\\n\\nexports.definition = {\\n prefix: prefix,\\n iconName: iconName,\\n icon: [\\n width,\\n height,\\n ligatures,\\n unicode,\\n svgPathData\\n ]};\\n\\nexports.faGlobeAmericas = exports.definition;\\nexports.prefix = prefix;\\nexports.iconName = iconName;\\nexports.width = width;\\nexports.height = height;\\nexports.ligatures = ligatures;\\nexports.unicode = unicode;\\nexports.svgPathData = svgPathData;\\n\\n//# sourceURL=webpack:///./node_modules/@fortawesome/free-solid-svg-icons/faGlobeAmericas.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@fortawesome/react-fontawesome/index.es.js\":\n/*!*****************************************************************!*\\\n !*** ./node_modules/@fortawesome/react-fontawesome/index.es.js ***!\n \\*****************************************************************/\n/*! exports provided: FontAwesomeIcon */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* WEBPACK VAR INJECTION */(function(global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"FontAwesomeIcon\\\", function() { return FontAwesomeIcon; });\\n/* harmony import */ var _fortawesome_fontawesome_svg_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @fortawesome/fontawesome-svg-core */ \\\"./node_modules/@fortawesome/fontawesome-svg-core/index.es.js\\\");\\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! prop-types */ \\\"./node_modules/prop-types/index.js\\\");\\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__);\\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \\\"./node_modules/react/index.js\\\");\\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\\n\\n\\n\\n\\nfunction _typeof(obj) {\\n if (typeof Symbol === \\\"function\\\" && typeof Symbol.iterator === \\\"symbol\\\") {\\n _typeof = function (obj) {\\n return typeof obj;\\n };\\n } else {\\n _typeof = function (obj) {\\n return obj && typeof Symbol === \\\"function\\\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \\\"symbol\\\" : typeof obj;\\n };\\n }\\n\\n return _typeof(obj);\\n}\\n\\nfunction _defineProperty(obj, key, value) {\\n if (key in obj) {\\n Object.defineProperty(obj, key, {\\n value: value,\\n enumerable: true,\\n configurable: true,\\n writable: true\\n });\\n } else {\\n obj[key] = value;\\n }\\n\\n return obj;\\n}\\n\\nfunction _objectSpread(target) {\\n for (var i = 1; i < arguments.length; i++) {\\n var source = arguments[i] != null ? arguments[i] : {};\\n var ownKeys = Object.keys(source);\\n\\n if (typeof Object.getOwnPropertySymbols === 'function') {\\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\\n }));\\n }\\n\\n ownKeys.forEach(function (key) {\\n _defineProperty(target, key, source[key]);\\n });\\n }\\n\\n return target;\\n}\\n\\nfunction _objectWithoutPropertiesLoose(source, excluded) {\\n if (source == null) return {};\\n var target = {};\\n var sourceKeys = Object.keys(source);\\n var key, i;\\n\\n for (i = 0; i < sourceKeys.length; i++) {\\n key = sourceKeys[i];\\n if (excluded.indexOf(key) >= 0) continue;\\n target[key] = source[key];\\n }\\n\\n return target;\\n}\\n\\nfunction _objectWithoutProperties(source, excluded) {\\n if (source == null) return {};\\n\\n var target = _objectWithoutPropertiesLoose(source, excluded);\\n\\n var key, i;\\n\\n if (Object.getOwnPropertySymbols) {\\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\\n\\n for (i = 0; i < sourceSymbolKeys.length; i++) {\\n key = sourceSymbolKeys[i];\\n if (excluded.indexOf(key) >= 0) continue;\\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\\n target[key] = source[key];\\n }\\n }\\n\\n return target;\\n}\\n\\nfunction _toConsumableArray(arr) {\\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread();\\n}\\n\\nfunction _arrayWithoutHoles(arr) {\\n if (Array.isArray(arr)) {\\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\\n\\n return arr2;\\n }\\n}\\n\\nfunction _iterableToArray(iter) {\\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \\\"[object Arguments]\\\") return Array.from(iter);\\n}\\n\\nfunction _nonIterableSpread() {\\n throw new TypeError(\\\"Invalid attempt to spread non-iterable instance\\\");\\n}\\n\\nvar commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\\n\\nfunction createCommonjsModule(fn, module) {\\n\\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\\n}\\n\\nvar humps = createCommonjsModule(function (module) {\\n(function(global) {\\n\\n var _processKeys = function(convert, obj, options) {\\n if(!_isObject(obj) || _isDate(obj) || _isRegExp(obj) || _isBoolean(obj) || _isFunction(obj)) {\\n return obj;\\n }\\n\\n var output,\\n i = 0,\\n l = 0;\\n\\n if(_isArray(obj)) {\\n output = [];\\n for(l=obj.length; i<l; i++) {\\n output.push(_processKeys(convert, obj[i], options));\\n }\\n }\\n else {\\n output = {};\\n for(var key in obj) {\\n if(Object.prototype.hasOwnProperty.call(obj, key)) {\\n output[convert(key, options)] = _processKeys(convert, obj[key], options);\\n }\\n }\\n }\\n return output;\\n };\\n\\n // String conversion methods\\n\\n var separateWords = function(string, options) {\\n options = options || {};\\n var separator = options.separator || '_';\\n var split = options.split || /(?=[A-Z])/;\\n\\n return string.split(split).join(separator);\\n };\\n\\n var camelize = function(string) {\\n if (_isNumerical(string)) {\\n return string;\\n }\\n string = string.replace(/[\\\\-_\\\\s]+(.)?/g, function(match, chr) {\\n return chr ? chr.toUpperCase() : '';\\n });\\n // Ensure 1st char is always lowercase\\n return string.substr(0, 1).toLowerCase() + string.substr(1);\\n };\\n\\n var pascalize = function(string) {\\n var camelized = camelize(string);\\n // Ensure 1st char is always uppercase\\n return camelized.substr(0, 1).toUpperCase() + camelized.substr(1);\\n };\\n\\n var decamelize = function(string, options) {\\n return separateWords(string, options).toLowerCase();\\n };\\n\\n // Utilities\\n // Taken from Underscore.js\\n\\n var toString = Object.prototype.toString;\\n\\n var _isFunction = function(obj) {\\n return typeof(obj) === 'function';\\n };\\n var _isObject = function(obj) {\\n return obj === Object(obj);\\n };\\n var _isArray = function(obj) {\\n return toString.call(obj) == '[object Array]';\\n };\\n var _isDate = function(obj) {\\n return toString.call(obj) == '[object Date]';\\n };\\n var _isRegExp = function(obj) {\\n return toString.call(obj) == '[object RegExp]';\\n };\\n var _isBoolean = function(obj) {\\n return toString.call(obj) == '[object Boolean]';\\n };\\n\\n // Performant way to determine if obj coerces to a number\\n var _isNumerical = function(obj) {\\n obj = obj - 0;\\n return obj === obj;\\n };\\n\\n // Sets up function which handles processing keys\\n // allowing the convert function to be modified by a callback\\n var _processor = function(convert, options) {\\n var callback = options && 'process' in options ? options.process : options;\\n\\n if(typeof(callback) !== 'function') {\\n return convert;\\n }\\n\\n return function(string, options) {\\n return callback(string, convert, options);\\n }\\n };\\n\\n var humps = {\\n camelize: camelize,\\n decamelize: decamelize,\\n pascalize: pascalize,\\n depascalize: decamelize,\\n camelizeKeys: function(object, options) {\\n return _processKeys(_processor(camelize, options), object);\\n },\\n decamelizeKeys: function(object, options) {\\n return _processKeys(_processor(decamelize, options), object, options);\\n },\\n pascalizeKeys: function(object, options) {\\n return _processKeys(_processor(pascalize, options), object);\\n },\\n depascalizeKeys: function () {\\n return this.decamelizeKeys.apply(this, arguments);\\n }\\n };\\n\\n if (module.exports) {\\n module.exports = humps;\\n } else {\\n global.humps = humps;\\n }\\n\\n})(commonjsGlobal);\\n});\\n\\nfunction capitalize(val) {\\n return val.charAt(0).toUpperCase() + val.slice(1);\\n}\\n\\nfunction styleToObject(style) {\\n return style.split(';').map(function (s) {\\n return s.trim();\\n }).filter(function (s) {\\n return s;\\n }).reduce(function (acc, pair) {\\n var i = pair.indexOf(':');\\n var prop = humps.camelize(pair.slice(0, i));\\n var value = pair.slice(i + 1).trim();\\n prop.startsWith('webkit') ? acc[capitalize(prop)] = value : acc[prop] = value;\\n return acc;\\n }, {});\\n}\\n\\nfunction convert(createElement, element) {\\n var extraProps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\\n\\n if (typeof element === 'string') {\\n return element;\\n }\\n\\n var children = (element.children || []).map(function (child) {\\n return convert(createElement, child);\\n });\\n var mixins = Object.keys(element.attributes || {}).reduce(function (acc, key) {\\n var val = element.attributes[key];\\n\\n switch (key) {\\n case 'class':\\n acc.attrs['className'] = val;\\n delete element.attributes['class'];\\n break;\\n\\n case 'style':\\n acc.attrs['style'] = styleToObject(val);\\n break;\\n\\n default:\\n if (key.indexOf('aria-') === 0 || key.indexOf('data-') === 0) {\\n acc.attrs[key.toLowerCase()] = val;\\n } else {\\n acc.attrs[humps.camelize(key)] = val;\\n }\\n\\n }\\n\\n return acc;\\n }, {\\n attrs: {}\\n });\\n\\n var _extraProps$style = extraProps.style,\\n existingStyle = _extraProps$style === void 0 ? {} : _extraProps$style,\\n remaining = _objectWithoutProperties(extraProps, [\\\"style\\\"]);\\n\\n mixins.attrs['style'] = _objectSpread({}, mixins.attrs['style'], existingStyle);\\n return createElement.apply(void 0, [element.tag, _objectSpread({}, mixins.attrs, remaining)].concat(_toConsumableArray(children)));\\n}\\n\\nvar PRODUCTION = false;\\n\\ntry {\\n PRODUCTION = \\\"development\\\" === 'production';\\n} catch (e) {}\\n\\nfunction log () {\\n if (!PRODUCTION && console && typeof console.error === 'function') {\\n var _console;\\n\\n (_console = console).error.apply(_console, arguments);\\n }\\n}\\n\\nfunction objectWithKey(key, value) {\\n return Array.isArray(value) && value.length > 0 || !Array.isArray(value) && value ? _defineProperty({}, key, value) : {};\\n}\\n\\nfunction classList(props) {\\n var _classes;\\n\\n var classes = (_classes = {\\n 'fa-spin': props.spin,\\n 'fa-pulse': props.pulse,\\n 'fa-fw': props.fixedWidth,\\n 'fa-inverse': props.inverse,\\n 'fa-border': props.border,\\n 'fa-li': props.listItem,\\n 'fa-flip-horizontal': props.flip === 'horizontal' || props.flip === 'both',\\n 'fa-flip-vertical': props.flip === 'vertical' || props.flip === 'both'\\n }, _defineProperty(_classes, \\\"fa-\\\".concat(props.size), props.size !== null), _defineProperty(_classes, \\\"fa-rotate-\\\".concat(props.rotation), props.rotation !== null), _defineProperty(_classes, \\\"fa-pull-\\\".concat(props.pull), props.pull !== null), _classes);\\n return Object.keys(classes).map(function (key) {\\n return classes[key] ? key : null;\\n }).filter(function (key) {\\n return key;\\n });\\n}\\n\\nfunction normalizeIconArgs(icon$$1) {\\n if (icon$$1 === null) {\\n return null;\\n }\\n\\n if (_typeof(icon$$1) === 'object' && icon$$1.prefix && icon$$1.iconName) {\\n return icon$$1;\\n }\\n\\n if (Array.isArray(icon$$1) && icon$$1.length === 2) {\\n return {\\n prefix: icon$$1[0],\\n iconName: icon$$1[1]\\n };\\n }\\n\\n if (typeof icon$$1 === 'string') {\\n return {\\n prefix: 'fas',\\n iconName: icon$$1\\n };\\n }\\n}\\n\\nfunction FontAwesomeIcon(props) {\\n var iconArgs = props.icon,\\n maskArgs = props.mask,\\n symbol = props.symbol,\\n className = props.className,\\n title = props.title;\\n var iconLookup = normalizeIconArgs(iconArgs);\\n var classes = objectWithKey('classes', [].concat(_toConsumableArray(classList(props)), _toConsumableArray(className.split(' '))));\\n var transform = objectWithKey('transform', typeof props.transform === 'string' ? _fortawesome_fontawesome_svg_core__WEBPACK_IMPORTED_MODULE_0__[\\\"parse\\\"].transform(props.transform) : props.transform);\\n var mask = objectWithKey('mask', normalizeIconArgs(maskArgs));\\n var renderedIcon = Object(_fortawesome_fontawesome_svg_core__WEBPACK_IMPORTED_MODULE_0__[\\\"icon\\\"])(iconLookup, _objectSpread({}, classes, transform, mask, {\\n symbol: symbol,\\n title: title\\n }));\\n\\n if (!renderedIcon) {\\n log('Could not find icon', iconLookup);\\n return null;\\n }\\n\\n var abstract = renderedIcon.abstract;\\n var extraProps = {};\\n Object.keys(props).forEach(function (key) {\\n if (!FontAwesomeIcon.defaultProps.hasOwnProperty(key)) {\\n extraProps[key] = props[key];\\n }\\n });\\n return convertCurry(abstract[0], extraProps);\\n}\\nFontAwesomeIcon.displayName = 'FontAwesomeIcon';\\nFontAwesomeIcon.propTypes = {\\n border: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\\n className: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\\n mask: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.array, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string]),\\n fixedWidth: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\\n inverse: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\\n flip: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOf(['horizontal', 'vertical', 'both']),\\n icon: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.array, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string]),\\n listItem: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\\n pull: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOf(['right', 'left']),\\n pulse: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\\n rotation: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOf([90, 180, 270]),\\n size: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOf(['lg', 'xs', 'sm', '1x', '2x', '3x', '4x', '5x', '6x', '7x', '8x', '9x', '10x']),\\n spin: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool,\\n symbol: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.bool, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string]),\\n title: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string,\\n transform: prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.string, prop_types__WEBPACK_IMPORTED_MODULE_1___default.a.object])\\n};\\nFontAwesomeIcon.defaultProps = {\\n border: false,\\n className: '',\\n mask: null,\\n fixedWidth: false,\\n inverse: false,\\n flip: null,\\n icon: null,\\n listItem: false,\\n pull: null,\\n pulse: false,\\n rotation: null,\\n size: null,\\n spin: false,\\n symbol: false,\\n title: '',\\n transform: null\\n};\\nvar convertCurry = convert.bind(null, react__WEBPACK_IMPORTED_MODULE_2___default.a.createElement);\\n\\n\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ \\\"./node_modules/webpack/buildin/global.js\\\")))\\n\\n//# sourceURL=webpack:///./node_modules/@fortawesome/react-fontawesome/index.es.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/@stablelib/utf8/lib/utf8.js\":\n/*!**************************************************!*\\\n !*** ./node_modules/@stablelib/utf8/lib/utf8.js ***!\n \\**************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n// Copyright (C) 2016 Dmitry Chestnykh\\n// MIT License. See LICENSE file for details.\\nObject.defineProperty(exports, \\\"__esModule\\\", { value: true });\\nvar INVALID_UTF16 = \\\"utf8: invalid string\\\";\\nvar INVALID_UTF8 = \\\"utf8: invalid source encoding\\\";\\n/**\\n * Encodes the given string into UTF-8 byte array.\\n * Throws if the source string has invalid UTF-16 encoding.\\n */\\nfunction encode(s) {\\n // Calculate result length and allocate output array.\\n // encodedLength() also validates string and throws errors,\\n // so we don't need repeat validation here.\\n var arr = new Uint8Array(encodedLength(s));\\n var pos = 0;\\n for (var i = 0; i < s.length; i++) {\\n var c = s.charCodeAt(i);\\n if (c < 0x80) {\\n arr[pos++] = c;\\n }\\n else if (c < 0x800) {\\n arr[pos++] = 0xc0 | c >> 6;\\n arr[pos++] = 0x80 | c & 0x3f;\\n }\\n else if (c < 0xd800) {\\n arr[pos++] = 0xe0 | c >> 12;\\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\\n arr[pos++] = 0x80 | c & 0x3f;\\n }\\n else {\\n i++; // get one more character\\n c = (c & 0x3ff) << 10;\\n c |= s.charCodeAt(i) & 0x3ff;\\n c += 0x10000;\\n arr[pos++] = 0xf0 | c >> 18;\\n arr[pos++] = 0x80 | (c >> 12) & 0x3f;\\n arr[pos++] = 0x80 | (c >> 6) & 0x3f;\\n arr[pos++] = 0x80 | c & 0x3f;\\n }\\n }\\n return arr;\\n}\\nexports.encode = encode;\\n/**\\n * Returns the number of bytes required to encode the given string into UTF-8.\\n * Throws if the source string has invalid UTF-16 encoding.\\n */\\nfunction encodedLength(s) {\\n var result = 0;\\n for (var i = 0; i < s.length; i++) {\\n var c = s.charCodeAt(i);\\n if (c < 0x80) {\\n result += 1;\\n }\\n else if (c < 0x800) {\\n result += 2;\\n }\\n else if (c < 0xd800) {\\n result += 3;\\n }\\n else if (c <= 0xdfff) {\\n if (i >= s.length - 1) {\\n throw new Error(INVALID_UTF16);\\n }\\n i++; // \\\"eat\\\" next character\\n result += 4;\\n }\\n else {\\n throw new Error(INVALID_UTF16);\\n }\\n }\\n return result;\\n}\\nexports.encodedLength = encodedLength;\\n/**\\n * Decodes the given byte array from UTF-8 into a string.\\n * Throws if encoding is invalid.\\n */\\nfunction decode(arr) {\\n var chars = [];\\n for (var i = 0; i < arr.length; i++) {\\n var b = arr[i];\\n if (b & 0x80) {\\n var min = void 0;\\n if (b < 0xe0) {\\n // Need 1 more byte.\\n if (i >= arr.length) {\\n throw new Error(INVALID_UTF8);\\n }\\n var n1 = arr[++i];\\n if ((n1 & 0xc0) !== 0x80) {\\n throw new Error(INVALID_UTF8);\\n }\\n b = (b & 0x1f) << 6 | (n1 & 0x3f);\\n min = 0x80;\\n }\\n else if (b < 0xf0) {\\n // Need 2 more bytes.\\n if (i >= arr.length - 1) {\\n throw new Error(INVALID_UTF8);\\n }\\n var n1 = arr[++i];\\n var n2 = arr[++i];\\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80) {\\n throw new Error(INVALID_UTF8);\\n }\\n b = (b & 0x0f) << 12 | (n1 & 0x3f) << 6 | (n2 & 0x3f);\\n min = 0x800;\\n }\\n else if (b < 0xf8) {\\n // Need 3 more bytes.\\n if (i >= arr.length - 2) {\\n throw new Error(INVALID_UTF8);\\n }\\n var n1 = arr[++i];\\n var n2 = arr[++i];\\n var n3 = arr[++i];\\n if ((n1 & 0xc0) !== 0x80 || (n2 & 0xc0) !== 0x80 || (n3 & 0xc0) !== 0x80) {\\n throw new Error(INVALID_UTF8);\\n }\\n b = (b & 0x0f) << 18 | (n1 & 0x3f) << 12 | (n2 & 0x3f) << 6 | (n3 & 0x3f);\\n min = 0x10000;\\n }\\n else {\\n throw new Error(INVALID_UTF8);\\n }\\n if (b < min || (b >= 0xd800 && b <= 0xdfff)) {\\n throw new Error(INVALID_UTF8);\\n }\\n if (b >= 0x10000) {\\n // Surrogate pair.\\n if (b > 0x10ffff) {\\n throw new Error(INVALID_UTF8);\\n }\\n b -= 0x10000;\\n chars.push(String.fromCharCode(0xd800 | (b >> 10)));\\n b = 0xdc00 | (b & 0x3ff);\\n }\\n }\\n chars.push(String.fromCharCode(b));\\n }\\n return chars.join(\\\"\\\");\\n}\\nexports.decode = decode;\\n//# sourceMappingURL=utf8.js.map\\n\\n//# sourceURL=webpack:///./node_modules/@stablelib/utf8/lib/utf8.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/aes-js/index.js\":\n/*!**************************************!*\\\n !*** ./node_modules/aes-js/index.js ***!\n \\**************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\n(function(root) {\\n\\n function checkInt(value) {\\n return (parseInt(value) === value);\\n }\\n\\n function checkInts(arrayish) {\\n if (!checkInt(arrayish.length)) { return false; }\\n\\n for (var i = 0; i < arrayish.length; i++) {\\n if (!checkInt(arrayish[i]) || arrayish[i] < 0 || arrayish[i] > 255) {\\n return false;\\n }\\n }\\n\\n return true;\\n }\\n\\n function coerceArray(arg, copy) {\\n\\n // ArrayBuffer view\\n if (arg.buffer && ArrayBuffer.isView(arg) && arg.name === 'Uint8Array') {\\n\\n if (copy) {\\n if (arg.slice) {\\n arg = arg.slice();\\n } else {\\n arg = Array.prototype.slice.call(arg);\\n }\\n }\\n\\n return arg;\\n }\\n\\n // It's an array; check it is a valid representation of a byte\\n if (Array.isArray(arg)) {\\n if (!checkInts(arg)) {\\n throw new Error('Array contains invalid value: ' + arg);\\n }\\n\\n return new Uint8Array(arg);\\n }\\n\\n // Something else, but behaves like an array (maybe a Buffer? Arguments?)\\n if (checkInt(arg.length) && checkInts(arg)) {\\n return new Uint8Array(arg);\\n }\\n\\n throw new Error('unsupported array-like object');\\n }\\n\\n function createArray(length) {\\n return new Uint8Array(length);\\n }\\n\\n function copyArray(sourceArray, targetArray, targetStart, sourceStart, sourceEnd) {\\n if (sourceStart != null || sourceEnd != null) {\\n if (sourceArray.slice) {\\n sourceArray = sourceArray.slice(sourceStart, sourceEnd);\\n } else {\\n sourceArray = Array.prototype.slice.call(sourceArray, sourceStart, sourceEnd);\\n }\\n }\\n targetArray.set(sourceArray, targetStart);\\n }\\n\\n\\n\\n var convertUtf8 = (function() {\\n function toBytes(text) {\\n var result = [], i = 0;\\n text = encodeURI(text);\\n while (i < text.length) {\\n var c = text.charCodeAt(i++);\\n\\n // if it is a % sign, encode the following 2 bytes as a hex value\\n if (c === 37) {\\n result.push(parseInt(text.substr(i, 2), 16))\\n i += 2;\\n\\n // otherwise, just the actual byte\\n } else {\\n result.push(c)\\n }\\n }\\n\\n return coerceArray(result);\\n }\\n\\n function fromBytes(bytes) {\\n var result = [], i = 0;\\n\\n while (i < bytes.length) {\\n var c = bytes[i];\\n\\n if (c < 128) {\\n result.push(String.fromCharCode(c));\\n i++;\\n } else if (c > 191 && c < 224) {\\n result.push(String.fromCharCode(((c & 0x1f) << 6) | (bytes[i + 1] & 0x3f)));\\n i += 2;\\n } else {\\n result.push(String.fromCharCode(((c & 0x0f) << 12) | ((bytes[i + 1] & 0x3f) << 6) | (bytes[i + 2] & 0x3f)));\\n i += 3;\\n }\\n }\\n\\n return result.join('');\\n }\\n\\n return {\\n toBytes: toBytes,\\n fromBytes: fromBytes,\\n }\\n })();\\n\\n var convertHex = (function() {\\n function toBytes(text) {\\n var result = [];\\n for (var i = 0; i < text.length; i += 2) {\\n result.push(parseInt(text.substr(i, 2), 16));\\n }\\n\\n return result;\\n }\\n\\n // http://ixti.net/development/javascript/2011/11/11/base64-encodedecode-of-utf8-in-browser-with-js.html\\n var Hex = '0123456789abcdef';\\n\\n function fromBytes(bytes) {\\n var result = [];\\n for (var i = 0; i < bytes.length; i++) {\\n var v = bytes[i];\\n result.push(Hex[(v & 0xf0) >> 4] + Hex[v & 0x0f]);\\n }\\n return result.join('');\\n }\\n\\n return {\\n toBytes: toBytes,\\n fromBytes: fromBytes,\\n }\\n })();\\n\\n\\n // Number of rounds by keysize\\n var numberOfRounds = {16: 10, 24: 12, 32: 14}\\n\\n // Round constant words\\n var rcon = [0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91];\\n\\n // S-box and Inverse S-box (S is for Substitution)\\n var S = [0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16];\\n var Si =[0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d];\\n\\n // Transformations for encryption\\n var T1 = [0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d, 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554, 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d, 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a, 0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87, 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b, 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea, 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b, 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a, 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f, 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108, 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f, 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e, 0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5, 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d, 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f, 0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e, 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb, 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce, 0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497, 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c, 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed, 0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b, 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a, 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16, 0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594, 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81, 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3, 0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a, 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504, 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163, 0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d, 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f, 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739, 0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47, 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395, 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f, 0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883, 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c, 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76, 0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e, 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4, 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6, 0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b, 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7, 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0, 0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25, 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818, 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72, 0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651, 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21, 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85, 0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa, 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12, 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0, 0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9, 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133, 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7, 0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920, 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a, 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17, 0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8, 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11, 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a];\\n var T2 = [0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b, 0x0dfff2f2, 0xbdd66b6b, 0xb1de6f6f, 0x5491c5c5, 0x50603030, 0x03020101, 0xa9ce6767, 0x7d562b2b, 0x19e7fefe, 0x62b5d7d7, 0xe64dabab, 0x9aec7676, 0x458fcaca, 0x9d1f8282, 0x4089c9c9, 0x87fa7d7d, 0x15effafa, 0xebb25959, 0xc98e4747, 0x0bfbf0f0, 0xec41adad, 0x67b3d4d4, 0xfd5fa2a2, 0xea45afaf, 0xbf239c9c, 0xf753a4a4, 0x96e47272, 0x5b9bc0c0, 0xc275b7b7, 0x1ce1fdfd, 0xae3d9393, 0x6a4c2626, 0x5a6c3636, 0x417e3f3f, 0x02f5f7f7, 0x4f83cccc, 0x5c683434, 0xf451a5a5, 0x34d1e5e5, 0x08f9f1f1, 0x93e27171, 0x73abd8d8, 0x53623131, 0x3f2a1515, 0x0c080404, 0x5295c7c7, 0x65462323, 0x5e9dc3c3, 0x28301818, 0xa1379696, 0x0f0a0505, 0xb52f9a9a, 0x090e0707, 0x36241212, 0x9b1b8080, 0x3ddfe2e2, 0x26cdebeb, 0x694e2727, 0xcd7fb2b2, 0x9fea7575, 0x1b120909, 0x9e1d8383, 0x74582c2c, 0x2e341a1a, 0x2d361b1b, 0xb2dc6e6e, 0xeeb45a5a, 0xfb5ba0a0, 0xf6a45252, 0x4d763b3b, 0x61b7d6d6, 0xce7db3b3, 0x7b522929, 0x3edde3e3, 0x715e2f2f, 0x97138484, 0xf5a65353, 0x68b9d1d1, 0x00000000, 0x2cc1eded, 0x60402020, 0x1fe3fcfc, 0xc879b1b1, 0xedb65b5b, 0xbed46a6a, 0x468dcbcb, 0xd967bebe, 0x4b723939, 0xde944a4a, 0xd4984c4c, 0xe8b05858, 0x4a85cfcf, 0x6bbbd0d0, 0x2ac5efef, 0xe54faaaa, 0x16edfbfb, 0xc5864343, 0xd79a4d4d, 0x55663333, 0x94118585, 0xcf8a4545, 0x10e9f9f9, 0x06040202, 0x81fe7f7f, 0xf0a05050, 0x44783c3c, 0xba259f9f, 0xe34ba8a8, 0xf3a25151, 0xfe5da3a3, 0xc0804040, 0x8a058f8f, 0xad3f9292, 0xbc219d9d, 0x48703838, 0x04f1f5f5, 0xdf63bcbc, 0xc177b6b6, 0x75afdada, 0x63422121, 0x30201010, 0x1ae5ffff, 0x0efdf3f3, 0x6dbfd2d2, 0x4c81cdcd, 0x14180c0c, 0x35261313, 0x2fc3ecec, 0xe1be5f5f, 0xa2359797, 0xcc884444, 0x392e1717, 0x5793c4c4, 0xf255a7a7, 0x82fc7e7e, 0x477a3d3d, 0xacc86464, 0xe7ba5d5d, 0x2b321919, 0x95e67373, 0xa0c06060, 0x98198181, 0xd19e4f4f, 0x7fa3dcdc, 0x66442222, 0x7e542a2a, 0xab3b9090, 0x830b8888, 0xca8c4646, 0x29c7eeee, 0xd36bb8b8, 0x3c281414, 0x79a7dede, 0xe2bc5e5e, 0x1d160b0b, 0x76addbdb, 0x3bdbe0e0, 0x56643232, 0x4e743a3a, 0x1e140a0a, 0xdb924949, 0x0a0c0606, 0x6c482424, 0xe4b85c5c, 0x5d9fc2c2, 0x6ebdd3d3, 0xef43acac, 0xa6c46262, 0xa8399191, 0xa4319595, 0x37d3e4e4, 0x8bf27979, 0x32d5e7e7, 0x438bc8c8, 0x596e3737, 0xb7da6d6d, 0x8c018d8d, 0x64b1d5d5, 0xd29c4e4e, 0xe049a9a9, 0xb4d86c6c, 0xfaac5656, 0x07f3f4f4, 0x25cfeaea, 0xafca6565, 0x8ef47a7a, 0xe947aeae, 0x18100808, 0xd56fbaba, 0x88f07878, 0x6f4a2525, 0x725c2e2e, 0x24381c1c, 0xf157a6a6, 0xc773b4b4, 0x5197c6c6, 0x23cbe8e8, 0x7ca1dddd, 0x9ce87474, 0x213e1f1f, 0xdd964b4b, 0xdc61bdbd, 0x860d8b8b, 0x850f8a8a, 0x90e07070, 0x427c3e3e, 0xc471b5b5, 0xaacc6666, 0xd8904848, 0x05060303, 0x01f7f6f6, 0x121c0e0e, 0xa3c26161, 0x5f6a3535, 0xf9ae5757, 0xd069b9b9, 0x91178686, 0x5899c1c1, 0x273a1d1d, 0xb9279e9e, 0x38d9e1e1, 0x13ebf8f8, 0xb32b9898, 0x33221111, 0xbbd26969, 0x70a9d9d9, 0x89078e8e, 0xa7339494, 0xb62d9b9b, 0x223c1e1e, 0x92158787, 0x20c9e9e9, 0x4987cece, 0xffaa5555, 0x78502828, 0x7aa5dfdf, 0x8f038c8c, 0xf859a1a1, 0x80098989, 0x171a0d0d, 0xda65bfbf, 0x31d7e6e6, 0xc6844242, 0xb8d06868, 0xc3824141, 0xb0299999, 0x775a2d2d, 0x111e0f0f, 0xcb7bb0b0, 0xfca85454, 0xd66dbbbb, 0x3a2c1616];\\n var T3 = [0x63a5c663, 0x7c84f87c, 0x7799ee77, 0x7b8df67b, 0xf20dfff2, 0x6bbdd66b, 0x6fb1de6f, 0xc55491c5, 0x30506030, 0x01030201, 0x67a9ce67, 0x2b7d562b, 0xfe19e7fe, 0xd762b5d7, 0xabe64dab, 0x769aec76, 0xca458fca, 0x829d1f82, 0xc94089c9, 0x7d87fa7d, 0xfa15effa, 0x59ebb259, 0x47c98e47, 0xf00bfbf0, 0xadec41ad, 0xd467b3d4, 0xa2fd5fa2, 0xafea45af, 0x9cbf239c, 0xa4f753a4, 0x7296e472, 0xc05b9bc0, 0xb7c275b7, 0xfd1ce1fd, 0x93ae3d93, 0x266a4c26, 0x365a6c36, 0x3f417e3f, 0xf702f5f7, 0xcc4f83cc, 0x345c6834, 0xa5f451a5, 0xe534d1e5, 0xf108f9f1, 0x7193e271, 0xd873abd8, 0x31536231, 0x153f2a15, 0x040c0804, 0xc75295c7, 0x23654623, 0xc35e9dc3, 0x18283018, 0x96a13796, 0x050f0a05, 0x9ab52f9a, 0x07090e07, 0x12362412, 0x809b1b80, 0xe23ddfe2, 0xeb26cdeb, 0x27694e27, 0xb2cd7fb2, 0x759fea75, 0x091b1209, 0x839e1d83, 0x2c74582c, 0x1a2e341a, 0x1b2d361b, 0x6eb2dc6e, 0x5aeeb45a, 0xa0fb5ba0, 0x52f6a452, 0x3b4d763b, 0xd661b7d6, 0xb3ce7db3, 0x297b5229, 0xe33edde3, 0x2f715e2f, 0x84971384, 0x53f5a653, 0xd168b9d1, 0x00000000, 0xed2cc1ed, 0x20604020, 0xfc1fe3fc, 0xb1c879b1, 0x5bedb65b, 0x6abed46a, 0xcb468dcb, 0xbed967be, 0x394b7239, 0x4ade944a, 0x4cd4984c, 0x58e8b058, 0xcf4a85cf, 0xd06bbbd0, 0xef2ac5ef, 0xaae54faa, 0xfb16edfb, 0x43c58643, 0x4dd79a4d, 0x33556633, 0x85941185, 0x45cf8a45, 0xf910e9f9, 0x02060402, 0x7f81fe7f, 0x50f0a050, 0x3c44783c, 0x9fba259f, 0xa8e34ba8, 0x51f3a251, 0xa3fe5da3, 0x40c08040, 0x8f8a058f, 0x92ad3f92, 0x9dbc219d, 0x38487038, 0xf504f1f5, 0xbcdf63bc, 0xb6c177b6, 0xda75afda, 0x21634221, 0x10302010, 0xff1ae5ff, 0xf30efdf3, 0xd26dbfd2, 0xcd4c81cd, 0x0c14180c, 0x13352613, 0xec2fc3ec, 0x5fe1be5f, 0x97a23597, 0x44cc8844, 0x17392e17, 0xc45793c4, 0xa7f255a7, 0x7e82fc7e, 0x3d477a3d, 0x64acc864, 0x5de7ba5d, 0x192b3219, 0x7395e673, 0x60a0c060, 0x81981981, 0x4fd19e4f, 0xdc7fa3dc, 0x22664422, 0x2a7e542a, 0x90ab3b90, 0x88830b88, 0x46ca8c46, 0xee29c7ee, 0xb8d36bb8, 0x143c2814, 0xde79a7de, 0x5ee2bc5e, 0x0b1d160b, 0xdb76addb, 0xe03bdbe0, 0x32566432, 0x3a4e743a, 0x0a1e140a, 0x49db9249, 0x060a0c06, 0x246c4824, 0x5ce4b85c, 0xc25d9fc2, 0xd36ebdd3, 0xacef43ac, 0x62a6c462, 0x91a83991, 0x95a43195, 0xe437d3e4, 0x798bf279, 0xe732d5e7, 0xc8438bc8, 0x37596e37, 0x6db7da6d, 0x8d8c018d, 0xd564b1d5, 0x4ed29c4e, 0xa9e049a9, 0x6cb4d86c, 0x56faac56, 0xf407f3f4, 0xea25cfea, 0x65afca65, 0x7a8ef47a, 0xaee947ae, 0x08181008, 0xbad56fba, 0x7888f078, 0x256f4a25, 0x2e725c2e, 0x1c24381c, 0xa6f157a6, 0xb4c773b4, 0xc65197c6, 0xe823cbe8, 0xdd7ca1dd, 0x749ce874, 0x1f213e1f, 0x4bdd964b, 0xbddc61bd, 0x8b860d8b, 0x8a850f8a, 0x7090e070, 0x3e427c3e, 0xb5c471b5, 0x66aacc66, 0x48d89048, 0x03050603, 0xf601f7f6, 0x0e121c0e, 0x61a3c261, 0x355f6a35, 0x57f9ae57, 0xb9d069b9, 0x86911786, 0xc15899c1, 0x1d273a1d, 0x9eb9279e, 0xe138d9e1, 0xf813ebf8, 0x98b32b98, 0x11332211, 0x69bbd269, 0xd970a9d9, 0x8e89078e, 0x94a73394, 0x9bb62d9b, 0x1e223c1e, 0x87921587, 0xe920c9e9, 0xce4987ce, 0x55ffaa55, 0x28785028, 0xdf7aa5df, 0x8c8f038c, 0xa1f859a1, 0x89800989, 0x0d171a0d, 0xbfda65bf, 0xe631d7e6, 0x42c68442, 0x68b8d068, 0x41c38241, 0x99b02999, 0x2d775a2d, 0x0f111e0f, 0xb0cb7bb0, 0x54fca854, 0xbbd66dbb, 0x163a2c16];\\n var T4 = [0x6363a5c6, 0x7c7c84f8, 0x777799ee, 0x7b7b8df6, 0xf2f20dff, 0x6b6bbdd6, 0x6f6fb1de, 0xc5c55491, 0x30305060, 0x01010302, 0x6767a9ce, 0x2b2b7d56, 0xfefe19e7, 0xd7d762b5, 0xababe64d, 0x76769aec, 0xcaca458f, 0x82829d1f, 0xc9c94089, 0x7d7d87fa, 0xfafa15ef, 0x5959ebb2, 0x4747c98e, 0xf0f00bfb, 0xadadec41, 0xd4d467b3, 0xa2a2fd5f, 0xafafea45, 0x9c9cbf23, 0xa4a4f753, 0x727296e4, 0xc0c05b9b, 0xb7b7c275, 0xfdfd1ce1, 0x9393ae3d, 0x26266a4c, 0x36365a6c, 0x3f3f417e, 0xf7f702f5, 0xcccc4f83, 0x34345c68, 0xa5a5f451, 0xe5e534d1, 0xf1f108f9, 0x717193e2, 0xd8d873ab, 0x31315362, 0x15153f2a, 0x04040c08, 0xc7c75295, 0x23236546, 0xc3c35e9d, 0x18182830, 0x9696a137, 0x05050f0a, 0x9a9ab52f, 0x0707090e, 0x12123624, 0x80809b1b, 0xe2e23ddf, 0xebeb26cd, 0x2727694e, 0xb2b2cd7f, 0x75759fea, 0x09091b12, 0x83839e1d, 0x2c2c7458, 0x1a1a2e34, 0x1b1b2d36, 0x6e6eb2dc, 0x5a5aeeb4, 0xa0a0fb5b, 0x5252f6a4, 0x3b3b4d76, 0xd6d661b7, 0xb3b3ce7d, 0x29297b52, 0xe3e33edd, 0x2f2f715e, 0x84849713, 0x5353f5a6, 0xd1d168b9, 0x00000000, 0xeded2cc1, 0x20206040, 0xfcfc1fe3, 0xb1b1c879, 0x5b5bedb6, 0x6a6abed4, 0xcbcb468d, 0xbebed967, 0x39394b72, 0x4a4ade94, 0x4c4cd498, 0x5858e8b0, 0xcfcf4a85, 0xd0d06bbb, 0xefef2ac5, 0xaaaae54f, 0xfbfb16ed, 0x4343c586, 0x4d4dd79a, 0x33335566, 0x85859411, 0x4545cf8a, 0xf9f910e9, 0x02020604, 0x7f7f81fe, 0x5050f0a0, 0x3c3c4478, 0x9f9fba25, 0xa8a8e34b, 0x5151f3a2, 0xa3a3fe5d, 0x4040c080, 0x8f8f8a05, 0x9292ad3f, 0x9d9dbc21, 0x38384870, 0xf5f504f1, 0xbcbcdf63, 0xb6b6c177, 0xdada75af, 0x21216342, 0x10103020, 0xffff1ae5, 0xf3f30efd, 0xd2d26dbf, 0xcdcd4c81, 0x0c0c1418, 0x13133526, 0xecec2fc3, 0x5f5fe1be, 0x9797a235, 0x4444cc88, 0x1717392e, 0xc4c45793, 0xa7a7f255, 0x7e7e82fc, 0x3d3d477a, 0x6464acc8, 0x5d5de7ba, 0x19192b32, 0x737395e6, 0x6060a0c0, 0x81819819, 0x4f4fd19e, 0xdcdc7fa3, 0x22226644, 0x2a2a7e54, 0x9090ab3b, 0x8888830b, 0x4646ca8c, 0xeeee29c7, 0xb8b8d36b, 0x14143c28, 0xdede79a7, 0x5e5ee2bc, 0x0b0b1d16, 0xdbdb76ad, 0xe0e03bdb, 0x32325664, 0x3a3a4e74, 0x0a0a1e14, 0x4949db92, 0x06060a0c, 0x24246c48, 0x5c5ce4b8, 0xc2c25d9f, 0xd3d36ebd, 0xacacef43, 0x6262a6c4, 0x9191a839, 0x9595a431, 0xe4e437d3, 0x79798bf2, 0xe7e732d5, 0xc8c8438b, 0x3737596e, 0x6d6db7da, 0x8d8d8c01, 0xd5d564b1, 0x4e4ed29c, 0xa9a9e049, 0x6c6cb4d8, 0x5656faac, 0xf4f407f3, 0xeaea25cf, 0x6565afca, 0x7a7a8ef4, 0xaeaee947, 0x08081810, 0xbabad56f, 0x787888f0, 0x25256f4a, 0x2e2e725c, 0x1c1c2438, 0xa6a6f157, 0xb4b4c773, 0xc6c65197, 0xe8e823cb, 0xdddd7ca1, 0x74749ce8, 0x1f1f213e, 0x4b4bdd96, 0xbdbddc61, 0x8b8b860d, 0x8a8a850f, 0x707090e0, 0x3e3e427c, 0xb5b5c471, 0x6666aacc, 0x4848d890, 0x03030506, 0xf6f601f7, 0x0e0e121c, 0x6161a3c2, 0x35355f6a, 0x5757f9ae, 0xb9b9d069, 0x86869117, 0xc1c15899, 0x1d1d273a, 0x9e9eb927, 0xe1e138d9, 0xf8f813eb, 0x9898b32b, 0x11113322, 0x6969bbd2, 0xd9d970a9, 0x8e8e8907, 0x9494a733, 0x9b9bb62d, 0x1e1e223c, 0x87879215, 0xe9e920c9, 0xcece4987, 0x5555ffaa, 0x28287850, 0xdfdf7aa5, 0x8c8c8f03, 0xa1a1f859, 0x89898009, 0x0d0d171a, 0xbfbfda65, 0xe6e631d7, 0x4242c684, 0x6868b8d0, 0x4141c382, 0x9999b029, 0x2d2d775a, 0x0f0f111e, 0xb0b0cb7b, 0x5454fca8, 0xbbbbd66d, 0x16163a2c];\\n\\n // Transformations for decryption\\n var T5 = [0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96, 0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393, 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25, 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f, 0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1, 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6, 0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da, 0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844, 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd, 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4, 0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45, 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94, 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7, 0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a, 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5, 0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c, 0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1, 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a, 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75, 0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051, 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46, 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff, 0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77, 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb, 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000, 0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e, 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927, 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a, 0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e, 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16, 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d, 0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8, 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd, 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34, 0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163, 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120, 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d, 0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0, 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422, 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef, 0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36, 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4, 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662, 0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5, 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3, 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b, 0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8, 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6, 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6, 0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0, 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815, 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f, 0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df, 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f, 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e, 0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713, 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89, 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c, 0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf, 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86, 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f, 0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541, 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190, 0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742];\\n var T6 = [0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e, 0xcb3bab6b, 0xf11f9d45, 0xabacfa58, 0x934be303, 0x552030fa, 0xf6ad766d, 0x9188cc76, 0x25f5024c, 0xfc4fe5d7, 0xd7c52acb, 0x80263544, 0x8fb562a3, 0x49deb15a, 0x6725ba1b, 0x9845ea0e, 0xe15dfec0, 0x02c32f75, 0x12814cf0, 0xa38d4697, 0xc66bd3f9, 0xe7038f5f, 0x9515929c, 0xebbf6d7a, 0xda955259, 0x2dd4be83, 0xd3587421, 0x2949e069, 0x448ec9c8, 0x6a75c289, 0x78f48e79, 0x6b99583e, 0xdd27b971, 0xb6bee14f, 0x17f088ad, 0x66c920ac, 0xb47dce3a, 0x1863df4a, 0x82e51a31, 0x60975133, 0x4562537f, 0xe0b16477, 0x84bb6bae, 0x1cfe81a0, 0x94f9082b, 0x58704868, 0x198f45fd, 0x8794de6c, 0xb7527bf8, 0x23ab73d3, 0xe2724b02, 0x57e31f8f, 0x2a6655ab, 0x07b2eb28, 0x032fb5c2, 0x9a86c57b, 0xa5d33708, 0xf2302887, 0xb223bfa5, 0xba02036a, 0x5ced1682, 0x2b8acf1c, 0x92a779b4, 0xf0f307f2, 0xa14e69e2, 0xcd65daf4, 0xd50605be, 0x1fd13462, 0x8ac4a6fe, 0x9d342e53, 0xa0a2f355, 0x32058ae1, 0x75a4f6eb, 0x390b83ec, 0xaa4060ef, 0x065e719f, 0x51bd6e10, 0xf93e218a, 0x3d96dd06, 0xaedd3e05, 0x464de6bd, 0xb591548d, 0x0571c45d, 0x6f0406d4, 0xff605015, 0x241998fb, 0x97d6bde9, 0xcc894043, 0x7767d99e, 0xbdb0e842, 0x8807898b, 0x38e7195b, 0xdb79c8ee, 0x47a17c0a, 0xe97c420f, 0xc9f8841e, 0x00000000, 0x83098086, 0x48322bed, 0xac1e1170, 0x4e6c5a72, 0xfbfd0eff, 0x560f8538, 0x1e3daed5, 0x27362d39, 0x640a0fd9, 0x21685ca6, 0xd19b5b54, 0x3a24362e, 0xb10c0a67, 0x0f9357e7, 0xd2b4ee96, 0x9e1b9b91, 0x4f80c0c5, 0xa261dc20, 0x695a774b, 0x161c121a, 0x0ae293ba, 0xe5c0a02a, 0x433c22e0, 0x1d121b17, 0x0b0e090d, 0xadf28bc7, 0xb92db6a8, 0xc8141ea9, 0x8557f119, 0x4caf7507, 0xbbee99dd, 0xfda37f60, 0x9ff70126, 0xbc5c72f5, 0xc544663b, 0x345bfb7e, 0x768b4329, 0xdccb23c6, 0x68b6edfc, 0x63b8e4f1, 0xcad731dc, 0x10426385, 0x40139722, 0x2084c611, 0x7d854a24, 0xf8d2bb3d, 0x11aef932, 0x6dc729a1, 0x4b1d9e2f, 0xf3dcb230, 0xec0d8652, 0xd077c1e3, 0x6c2bb316, 0x99a970b9, 0xfa119448, 0x2247e964, 0xc4a8fc8c, 0x1aa0f03f, 0xd8567d2c, 0xef223390, 0xc787494e, 0xc1d938d1, 0xfe8ccaa2, 0x3698d40b, 0xcfa6f581, 0x28a57ade, 0x26dab78e, 0xa43fadbf, 0xe42c3a9d, 0x0d507892, 0x9b6a5fcc, 0x62547e46, 0xc2f68d13, 0xe890d8b8, 0x5e2e39f7, 0xf582c3af, 0xbe9f5d80, 0x7c69d093, 0xa96fd52d, 0xb3cf2512, 0x3bc8ac99, 0xa710187d, 0x6ee89c63, 0x7bdb3bbb, 0x09cd2678, 0xf46e5918, 0x01ec9ab7, 0xa8834f9a, 0x65e6956e, 0x7eaaffe6, 0x0821bccf, 0xe6ef15e8, 0xd9bae79b, 0xce4a6f36, 0xd4ea9f09, 0xd629b07c, 0xaf31a4b2, 0x312a3f23, 0x30c6a594, 0xc035a266, 0x37744ebc, 0xa6fc82ca, 0xb0e090d0, 0x1533a7d8, 0x4af10498, 0xf741ecda, 0x0e7fcd50, 0x2f1791f6, 0x8d764dd6, 0x4d43efb0, 0x54ccaa4d, 0xdfe49604, 0xe39ed1b5, 0x1b4c6a88, 0xb8c12c1f, 0x7f466551, 0x049d5eea, 0x5d018c35, 0x73fa8774, 0x2efb0b41, 0x5ab3671d, 0x5292dbd2, 0x33e91056, 0x136dd647, 0x8c9ad761, 0x7a37a10c, 0x8e59f814, 0x89eb133c, 0xeecea927, 0x35b761c9, 0xede11ce5, 0x3c7a47b1, 0x599cd2df, 0x3f55f273, 0x791814ce, 0xbf73c737, 0xea53f7cd, 0x5b5ffdaa, 0x14df3d6f, 0x867844db, 0x81caaff3, 0x3eb968c4, 0x2c382434, 0x5fc2a340, 0x72161dc3, 0x0cbce225, 0x8b283c49, 0x41ff0d95, 0x7139a801, 0xde080cb3, 0x9cd8b4e4, 0x906456c1, 0x617bcb84, 0x70d532b6, 0x74486c5c, 0x42d0b857];\\n var T7 = [0xa75051f4, 0x65537e41, 0xa4c31a17, 0x5e963a27, 0x6bcb3bab, 0x45f11f9d, 0x58abacfa, 0x03934be3, 0xfa552030, 0x6df6ad76, 0x769188cc, 0x4c25f502, 0xd7fc4fe5, 0xcbd7c52a, 0x44802635, 0xa38fb562, 0x5a49deb1, 0x1b6725ba, 0x0e9845ea, 0xc0e15dfe, 0x7502c32f, 0xf012814c, 0x97a38d46, 0xf9c66bd3, 0x5fe7038f, 0x9c951592, 0x7aebbf6d, 0x59da9552, 0x832dd4be, 0x21d35874, 0x692949e0, 0xc8448ec9, 0x896a75c2, 0x7978f48e, 0x3e6b9958, 0x71dd27b9, 0x4fb6bee1, 0xad17f088, 0xac66c920, 0x3ab47dce, 0x4a1863df, 0x3182e51a, 0x33609751, 0x7f456253, 0x77e0b164, 0xae84bb6b, 0xa01cfe81, 0x2b94f908, 0x68587048, 0xfd198f45, 0x6c8794de, 0xf8b7527b, 0xd323ab73, 0x02e2724b, 0x8f57e31f, 0xab2a6655, 0x2807b2eb, 0xc2032fb5, 0x7b9a86c5, 0x08a5d337, 0x87f23028, 0xa5b223bf, 0x6aba0203, 0x825ced16, 0x1c2b8acf, 0xb492a779, 0xf2f0f307, 0xe2a14e69, 0xf4cd65da, 0xbed50605, 0x621fd134, 0xfe8ac4a6, 0x539d342e, 0x55a0a2f3, 0xe132058a, 0xeb75a4f6, 0xec390b83, 0xefaa4060, 0x9f065e71, 0x1051bd6e, 0x8af93e21, 0x063d96dd, 0x05aedd3e, 0xbd464de6, 0x8db59154, 0x5d0571c4, 0xd46f0406, 0x15ff6050, 0xfb241998, 0xe997d6bd, 0x43cc8940, 0x9e7767d9, 0x42bdb0e8, 0x8b880789, 0x5b38e719, 0xeedb79c8, 0x0a47a17c, 0x0fe97c42, 0x1ec9f884, 0x00000000, 0x86830980, 0xed48322b, 0x70ac1e11, 0x724e6c5a, 0xfffbfd0e, 0x38560f85, 0xd51e3dae, 0x3927362d, 0xd9640a0f, 0xa621685c, 0x54d19b5b, 0x2e3a2436, 0x67b10c0a, 0xe70f9357, 0x96d2b4ee, 0x919e1b9b, 0xc54f80c0, 0x20a261dc, 0x4b695a77, 0x1a161c12, 0xba0ae293, 0x2ae5c0a0, 0xe0433c22, 0x171d121b, 0x0d0b0e09, 0xc7adf28b, 0xa8b92db6, 0xa9c8141e, 0x198557f1, 0x074caf75, 0xddbbee99, 0x60fda37f, 0x269ff701, 0xf5bc5c72, 0x3bc54466, 0x7e345bfb, 0x29768b43, 0xc6dccb23, 0xfc68b6ed, 0xf163b8e4, 0xdccad731, 0x85104263, 0x22401397, 0x112084c6, 0x247d854a, 0x3df8d2bb, 0x3211aef9, 0xa16dc729, 0x2f4b1d9e, 0x30f3dcb2, 0x52ec0d86, 0xe3d077c1, 0x166c2bb3, 0xb999a970, 0x48fa1194, 0x642247e9, 0x8cc4a8fc, 0x3f1aa0f0, 0x2cd8567d, 0x90ef2233, 0x4ec78749, 0xd1c1d938, 0xa2fe8cca, 0x0b3698d4, 0x81cfa6f5, 0xde28a57a, 0x8e26dab7, 0xbfa43fad, 0x9de42c3a, 0x920d5078, 0xcc9b6a5f, 0x4662547e, 0x13c2f68d, 0xb8e890d8, 0xf75e2e39, 0xaff582c3, 0x80be9f5d, 0x937c69d0, 0x2da96fd5, 0x12b3cf25, 0x993bc8ac, 0x7da71018, 0x636ee89c, 0xbb7bdb3b, 0x7809cd26, 0x18f46e59, 0xb701ec9a, 0x9aa8834f, 0x6e65e695, 0xe67eaaff, 0xcf0821bc, 0xe8e6ef15, 0x9bd9bae7, 0x36ce4a6f, 0x09d4ea9f, 0x7cd629b0, 0xb2af31a4, 0x23312a3f, 0x9430c6a5, 0x66c035a2, 0xbc37744e, 0xcaa6fc82, 0xd0b0e090, 0xd81533a7, 0x984af104, 0xdaf741ec, 0x500e7fcd, 0xf62f1791, 0xd68d764d, 0xb04d43ef, 0x4d54ccaa, 0x04dfe496, 0xb5e39ed1, 0x881b4c6a, 0x1fb8c12c, 0x517f4665, 0xea049d5e, 0x355d018c, 0x7473fa87, 0x412efb0b, 0x1d5ab367, 0xd25292db, 0x5633e910, 0x47136dd6, 0x618c9ad7, 0x0c7a37a1, 0x148e59f8, 0x3c89eb13, 0x27eecea9, 0xc935b761, 0xe5ede11c, 0xb13c7a47, 0xdf599cd2, 0x733f55f2, 0xce791814, 0x37bf73c7, 0xcdea53f7, 0xaa5b5ffd, 0x6f14df3d, 0xdb867844, 0xf381caaf, 0xc43eb968, 0x342c3824, 0x405fc2a3, 0xc372161d, 0x250cbce2, 0x498b283c, 0x9541ff0d, 0x017139a8, 0xb3de080c, 0xe49cd8b4, 0xc1906456, 0x84617bcb, 0xb670d532, 0x5c74486c, 0x5742d0b8];\\n var T8 = [0xf4a75051, 0x4165537e, 0x17a4c31a, 0x275e963a, 0xab6bcb3b, 0x9d45f11f, 0xfa58abac, 0xe303934b, 0x30fa5520, 0x766df6ad, 0xcc769188, 0x024c25f5, 0xe5d7fc4f, 0x2acbd7c5, 0x35448026, 0x62a38fb5, 0xb15a49de, 0xba1b6725, 0xea0e9845, 0xfec0e15d, 0x2f7502c3, 0x4cf01281, 0x4697a38d, 0xd3f9c66b, 0x8f5fe703, 0x929c9515, 0x6d7aebbf, 0x5259da95, 0xbe832dd4, 0x7421d358, 0xe0692949, 0xc9c8448e, 0xc2896a75, 0x8e7978f4, 0x583e6b99, 0xb971dd27, 0xe14fb6be, 0x88ad17f0, 0x20ac66c9, 0xce3ab47d, 0xdf4a1863, 0x1a3182e5, 0x51336097, 0x537f4562, 0x6477e0b1, 0x6bae84bb, 0x81a01cfe, 0x082b94f9, 0x48685870, 0x45fd198f, 0xde6c8794, 0x7bf8b752, 0x73d323ab, 0x4b02e272, 0x1f8f57e3, 0x55ab2a66, 0xeb2807b2, 0xb5c2032f, 0xc57b9a86, 0x3708a5d3, 0x2887f230, 0xbfa5b223, 0x036aba02, 0x16825ced, 0xcf1c2b8a, 0x79b492a7, 0x07f2f0f3, 0x69e2a14e, 0xdaf4cd65, 0x05bed506, 0x34621fd1, 0xa6fe8ac4, 0x2e539d34, 0xf355a0a2, 0x8ae13205, 0xf6eb75a4, 0x83ec390b, 0x60efaa40, 0x719f065e, 0x6e1051bd, 0x218af93e, 0xdd063d96, 0x3e05aedd, 0xe6bd464d, 0x548db591, 0xc45d0571, 0x06d46f04, 0x5015ff60, 0x98fb2419, 0xbde997d6, 0x4043cc89, 0xd99e7767, 0xe842bdb0, 0x898b8807, 0x195b38e7, 0xc8eedb79, 0x7c0a47a1, 0x420fe97c, 0x841ec9f8, 0x00000000, 0x80868309, 0x2bed4832, 0x1170ac1e, 0x5a724e6c, 0x0efffbfd, 0x8538560f, 0xaed51e3d, 0x2d392736, 0x0fd9640a, 0x5ca62168, 0x5b54d19b, 0x362e3a24, 0x0a67b10c, 0x57e70f93, 0xee96d2b4, 0x9b919e1b, 0xc0c54f80, 0xdc20a261, 0x774b695a, 0x121a161c, 0x93ba0ae2, 0xa02ae5c0, 0x22e0433c, 0x1b171d12, 0x090d0b0e, 0x8bc7adf2, 0xb6a8b92d, 0x1ea9c814, 0xf1198557, 0x75074caf, 0x99ddbbee, 0x7f60fda3, 0x01269ff7, 0x72f5bc5c, 0x663bc544, 0xfb7e345b, 0x4329768b, 0x23c6dccb, 0xedfc68b6, 0xe4f163b8, 0x31dccad7, 0x63851042, 0x97224013, 0xc6112084, 0x4a247d85, 0xbb3df8d2, 0xf93211ae, 0x29a16dc7, 0x9e2f4b1d, 0xb230f3dc, 0x8652ec0d, 0xc1e3d077, 0xb3166c2b, 0x70b999a9, 0x9448fa11, 0xe9642247, 0xfc8cc4a8, 0xf03f1aa0, 0x7d2cd856, 0x3390ef22, 0x494ec787, 0x38d1c1d9, 0xcaa2fe8c, 0xd40b3698, 0xf581cfa6, 0x7ade28a5, 0xb78e26da, 0xadbfa43f, 0x3a9de42c, 0x78920d50, 0x5fcc9b6a, 0x7e466254, 0x8d13c2f6, 0xd8b8e890, 0x39f75e2e, 0xc3aff582, 0x5d80be9f, 0xd0937c69, 0xd52da96f, 0x2512b3cf, 0xac993bc8, 0x187da710, 0x9c636ee8, 0x3bbb7bdb, 0x267809cd, 0x5918f46e, 0x9ab701ec, 0x4f9aa883, 0x956e65e6, 0xffe67eaa, 0xbccf0821, 0x15e8e6ef, 0xe79bd9ba, 0x6f36ce4a, 0x9f09d4ea, 0xb07cd629, 0xa4b2af31, 0x3f23312a, 0xa59430c6, 0xa266c035, 0x4ebc3774, 0x82caa6fc, 0x90d0b0e0, 0xa7d81533, 0x04984af1, 0xecdaf741, 0xcd500e7f, 0x91f62f17, 0x4dd68d76, 0xefb04d43, 0xaa4d54cc, 0x9604dfe4, 0xd1b5e39e, 0x6a881b4c, 0x2c1fb8c1, 0x65517f46, 0x5eea049d, 0x8c355d01, 0x877473fa, 0x0b412efb, 0x671d5ab3, 0xdbd25292, 0x105633e9, 0xd647136d, 0xd7618c9a, 0xa10c7a37, 0xf8148e59, 0x133c89eb, 0xa927eece, 0x61c935b7, 0x1ce5ede1, 0x47b13c7a, 0xd2df599c, 0xf2733f55, 0x14ce7918, 0xc737bf73, 0xf7cdea53, 0xfdaa5b5f, 0x3d6f14df, 0x44db8678, 0xaff381ca, 0x68c43eb9, 0x24342c38, 0xa3405fc2, 0x1dc37216, 0xe2250cbc, 0x3c498b28, 0x0d9541ff, 0xa8017139, 0x0cb3de08, 0xb4e49cd8, 0x56c19064, 0xcb84617b, 0x32b670d5, 0x6c5c7448, 0xb85742d0];\\n\\n // Transformations for decryption key expansion\\n var U1 = [0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927, 0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45, 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb, 0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381, 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf, 0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66, 0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28, 0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012, 0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec, 0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e, 0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd, 0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7, 0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89, 0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b, 0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815, 0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f, 0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa, 0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8, 0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36, 0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c, 0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742, 0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea, 0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4, 0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e, 0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360, 0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502, 0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87, 0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd, 0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3, 0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621, 0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f, 0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55, 0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26, 0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844, 0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba, 0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480, 0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce, 0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67, 0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929, 0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713, 0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed, 0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f, 0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3];\\n var U2 = [0x00000000, 0x0b0e090d, 0x161c121a, 0x1d121b17, 0x2c382434, 0x27362d39, 0x3a24362e, 0x312a3f23, 0x58704868, 0x537e4165, 0x4e6c5a72, 0x4562537f, 0x74486c5c, 0x7f466551, 0x62547e46, 0x695a774b, 0xb0e090d0, 0xbbee99dd, 0xa6fc82ca, 0xadf28bc7, 0x9cd8b4e4, 0x97d6bde9, 0x8ac4a6fe, 0x81caaff3, 0xe890d8b8, 0xe39ed1b5, 0xfe8ccaa2, 0xf582c3af, 0xc4a8fc8c, 0xcfa6f581, 0xd2b4ee96, 0xd9bae79b, 0x7bdb3bbb, 0x70d532b6, 0x6dc729a1, 0x66c920ac, 0x57e31f8f, 0x5ced1682, 0x41ff0d95, 0x4af10498, 0x23ab73d3, 0x28a57ade, 0x35b761c9, 0x3eb968c4, 0x0f9357e7, 0x049d5eea, 0x198f45fd, 0x12814cf0, 0xcb3bab6b, 0xc035a266, 0xdd27b971, 0xd629b07c, 0xe7038f5f, 0xec0d8652, 0xf11f9d45, 0xfa119448, 0x934be303, 0x9845ea0e, 0x8557f119, 0x8e59f814, 0xbf73c737, 0xb47dce3a, 0xa96fd52d, 0xa261dc20, 0xf6ad766d, 0xfda37f60, 0xe0b16477, 0xebbf6d7a, 0xda955259, 0xd19b5b54, 0xcc894043, 0xc787494e, 0xaedd3e05, 0xa5d33708, 0xb8c12c1f, 0xb3cf2512, 0x82e51a31, 0x89eb133c, 0x94f9082b, 0x9ff70126, 0x464de6bd, 0x4d43efb0, 0x5051f4a7, 0x5b5ffdaa, 0x6a75c289, 0x617bcb84, 0x7c69d093, 0x7767d99e, 0x1e3daed5, 0x1533a7d8, 0x0821bccf, 0x032fb5c2, 0x32058ae1, 0x390b83ec, 0x241998fb, 0x2f1791f6, 0x8d764dd6, 0x867844db, 0x9b6a5fcc, 0x906456c1, 0xa14e69e2, 0xaa4060ef, 0xb7527bf8, 0xbc5c72f5, 0xd50605be, 0xde080cb3, 0xc31a17a4, 0xc8141ea9, 0xf93e218a, 0xf2302887, 0xef223390, 0xe42c3a9d, 0x3d96dd06, 0x3698d40b, 0x2b8acf1c, 0x2084c611, 0x11aef932, 0x1aa0f03f, 0x07b2eb28, 0x0cbce225, 0x65e6956e, 0x6ee89c63, 0x73fa8774, 0x78f48e79, 0x49deb15a, 0x42d0b857, 0x5fc2a340, 0x54ccaa4d, 0xf741ecda, 0xfc4fe5d7, 0xe15dfec0, 0xea53f7cd, 0xdb79c8ee, 0xd077c1e3, 0xcd65daf4, 0xc66bd3f9, 0xaf31a4b2, 0xa43fadbf, 0xb92db6a8, 0xb223bfa5, 0x83098086, 0x8807898b, 0x9515929c, 0x9e1b9b91, 0x47a17c0a, 0x4caf7507, 0x51bd6e10, 0x5ab3671d, 0x6b99583e, 0x60975133, 0x7d854a24, 0x768b4329, 0x1fd13462, 0x14df3d6f, 0x09cd2678, 0x02c32f75, 0x33e91056, 0x38e7195b, 0x25f5024c, 0x2efb0b41, 0x8c9ad761, 0x8794de6c, 0x9a86c57b, 0x9188cc76, 0xa0a2f355, 0xabacfa58, 0xb6bee14f, 0xbdb0e842, 0xd4ea9f09, 0xdfe49604, 0xc2f68d13, 0xc9f8841e, 0xf8d2bb3d, 0xf3dcb230, 0xeecea927, 0xe5c0a02a, 0x3c7a47b1, 0x37744ebc, 0x2a6655ab, 0x21685ca6, 0x10426385, 0x1b4c6a88, 0x065e719f, 0x0d507892, 0x640a0fd9, 0x6f0406d4, 0x72161dc3, 0x791814ce, 0x48322bed, 0x433c22e0, 0x5e2e39f7, 0x552030fa, 0x01ec9ab7, 0x0ae293ba, 0x17f088ad, 0x1cfe81a0, 0x2dd4be83, 0x26dab78e, 0x3bc8ac99, 0x30c6a594, 0x599cd2df, 0x5292dbd2, 0x4f80c0c5, 0x448ec9c8, 0x75a4f6eb, 0x7eaaffe6, 0x63b8e4f1, 0x68b6edfc, 0xb10c0a67, 0xba02036a, 0xa710187d, 0xac1e1170, 0x9d342e53, 0x963a275e, 0x8b283c49, 0x80263544, 0xe97c420f, 0xe2724b02, 0xff605015, 0xf46e5918, 0xc544663b, 0xce4a6f36, 0xd3587421, 0xd8567d2c, 0x7a37a10c, 0x7139a801, 0x6c2bb316, 0x6725ba1b, 0x560f8538, 0x5d018c35, 0x40139722, 0x4b1d9e2f, 0x2247e964, 0x2949e069, 0x345bfb7e, 0x3f55f273, 0x0e7fcd50, 0x0571c45d, 0x1863df4a, 0x136dd647, 0xcad731dc, 0xc1d938d1, 0xdccb23c6, 0xd7c52acb, 0xe6ef15e8, 0xede11ce5, 0xf0f307f2, 0xfbfd0eff, 0x92a779b4, 0x99a970b9, 0x84bb6bae, 0x8fb562a3, 0xbe9f5d80, 0xb591548d, 0xa8834f9a, 0xa38d4697];\\n var U3 = [0x00000000, 0x0d0b0e09, 0x1a161c12, 0x171d121b, 0x342c3824, 0x3927362d, 0x2e3a2436, 0x23312a3f, 0x68587048, 0x65537e41, 0x724e6c5a, 0x7f456253, 0x5c74486c, 0x517f4665, 0x4662547e, 0x4b695a77, 0xd0b0e090, 0xddbbee99, 0xcaa6fc82, 0xc7adf28b, 0xe49cd8b4, 0xe997d6bd, 0xfe8ac4a6, 0xf381caaf, 0xb8e890d8, 0xb5e39ed1, 0xa2fe8cca, 0xaff582c3, 0x8cc4a8fc, 0x81cfa6f5, 0x96d2b4ee, 0x9bd9bae7, 0xbb7bdb3b, 0xb670d532, 0xa16dc729, 0xac66c920, 0x8f57e31f, 0x825ced16, 0x9541ff0d, 0x984af104, 0xd323ab73, 0xde28a57a, 0xc935b761, 0xc43eb968, 0xe70f9357, 0xea049d5e, 0xfd198f45, 0xf012814c, 0x6bcb3bab, 0x66c035a2, 0x71dd27b9, 0x7cd629b0, 0x5fe7038f, 0x52ec0d86, 0x45f11f9d, 0x48fa1194, 0x03934be3, 0x0e9845ea, 0x198557f1, 0x148e59f8, 0x37bf73c7, 0x3ab47dce, 0x2da96fd5, 0x20a261dc, 0x6df6ad76, 0x60fda37f, 0x77e0b164, 0x7aebbf6d, 0x59da9552, 0x54d19b5b, 0x43cc8940, 0x4ec78749, 0x05aedd3e, 0x08a5d337, 0x1fb8c12c, 0x12b3cf25, 0x3182e51a, 0x3c89eb13, 0x2b94f908, 0x269ff701, 0xbd464de6, 0xb04d43ef, 0xa75051f4, 0xaa5b5ffd, 0x896a75c2, 0x84617bcb, 0x937c69d0, 0x9e7767d9, 0xd51e3dae, 0xd81533a7, 0xcf0821bc, 0xc2032fb5, 0xe132058a, 0xec390b83, 0xfb241998, 0xf62f1791, 0xd68d764d, 0xdb867844, 0xcc9b6a5f, 0xc1906456, 0xe2a14e69, 0xefaa4060, 0xf8b7527b, 0xf5bc5c72, 0xbed50605, 0xb3de080c, 0xa4c31a17, 0xa9c8141e, 0x8af93e21, 0x87f23028, 0x90ef2233, 0x9de42c3a, 0x063d96dd, 0x0b3698d4, 0x1c2b8acf, 0x112084c6, 0x3211aef9, 0x3f1aa0f0, 0x2807b2eb, 0x250cbce2, 0x6e65e695, 0x636ee89c, 0x7473fa87, 0x7978f48e, 0x5a49deb1, 0x5742d0b8, 0x405fc2a3, 0x4d54ccaa, 0xdaf741ec, 0xd7fc4fe5, 0xc0e15dfe, 0xcdea53f7, 0xeedb79c8, 0xe3d077c1, 0xf4cd65da, 0xf9c66bd3, 0xb2af31a4, 0xbfa43fad, 0xa8b92db6, 0xa5b223bf, 0x86830980, 0x8b880789, 0x9c951592, 0x919e1b9b, 0x0a47a17c, 0x074caf75, 0x1051bd6e, 0x1d5ab367, 0x3e6b9958, 0x33609751, 0x247d854a, 0x29768b43, 0x621fd134, 0x6f14df3d, 0x7809cd26, 0x7502c32f, 0x5633e910, 0x5b38e719, 0x4c25f502, 0x412efb0b, 0x618c9ad7, 0x6c8794de, 0x7b9a86c5, 0x769188cc, 0x55a0a2f3, 0x58abacfa, 0x4fb6bee1, 0x42bdb0e8, 0x09d4ea9f, 0x04dfe496, 0x13c2f68d, 0x1ec9f884, 0x3df8d2bb, 0x30f3dcb2, 0x27eecea9, 0x2ae5c0a0, 0xb13c7a47, 0xbc37744e, 0xab2a6655, 0xa621685c, 0x85104263, 0x881b4c6a, 0x9f065e71, 0x920d5078, 0xd9640a0f, 0xd46f0406, 0xc372161d, 0xce791814, 0xed48322b, 0xe0433c22, 0xf75e2e39, 0xfa552030, 0xb701ec9a, 0xba0ae293, 0xad17f088, 0xa01cfe81, 0x832dd4be, 0x8e26dab7, 0x993bc8ac, 0x9430c6a5, 0xdf599cd2, 0xd25292db, 0xc54f80c0, 0xc8448ec9, 0xeb75a4f6, 0xe67eaaff, 0xf163b8e4, 0xfc68b6ed, 0x67b10c0a, 0x6aba0203, 0x7da71018, 0x70ac1e11, 0x539d342e, 0x5e963a27, 0x498b283c, 0x44802635, 0x0fe97c42, 0x02e2724b, 0x15ff6050, 0x18f46e59, 0x3bc54466, 0x36ce4a6f, 0x21d35874, 0x2cd8567d, 0x0c7a37a1, 0x017139a8, 0x166c2bb3, 0x1b6725ba, 0x38560f85, 0x355d018c, 0x22401397, 0x2f4b1d9e, 0x642247e9, 0x692949e0, 0x7e345bfb, 0x733f55f2, 0x500e7fcd, 0x5d0571c4, 0x4a1863df, 0x47136dd6, 0xdccad731, 0xd1c1d938, 0xc6dccb23, 0xcbd7c52a, 0xe8e6ef15, 0xe5ede11c, 0xf2f0f307, 0xfffbfd0e, 0xb492a779, 0xb999a970, 0xae84bb6b, 0xa38fb562, 0x80be9f5d, 0x8db59154, 0x9aa8834f, 0x97a38d46];\\n var U4 = [0x00000000, 0x090d0b0e, 0x121a161c, 0x1b171d12, 0x24342c38, 0x2d392736, 0x362e3a24, 0x3f23312a, 0x48685870, 0x4165537e, 0x5a724e6c, 0x537f4562, 0x6c5c7448, 0x65517f46, 0x7e466254, 0x774b695a, 0x90d0b0e0, 0x99ddbbee, 0x82caa6fc, 0x8bc7adf2, 0xb4e49cd8, 0xbde997d6, 0xa6fe8ac4, 0xaff381ca, 0xd8b8e890, 0xd1b5e39e, 0xcaa2fe8c, 0xc3aff582, 0xfc8cc4a8, 0xf581cfa6, 0xee96d2b4, 0xe79bd9ba, 0x3bbb7bdb, 0x32b670d5, 0x29a16dc7, 0x20ac66c9, 0x1f8f57e3, 0x16825ced, 0x0d9541ff, 0x04984af1, 0x73d323ab, 0x7ade28a5, 0x61c935b7, 0x68c43eb9, 0x57e70f93, 0x5eea049d, 0x45fd198f, 0x4cf01281, 0xab6bcb3b, 0xa266c035, 0xb971dd27, 0xb07cd629, 0x8f5fe703, 0x8652ec0d, 0x9d45f11f, 0x9448fa11, 0xe303934b, 0xea0e9845, 0xf1198557, 0xf8148e59, 0xc737bf73, 0xce3ab47d, 0xd52da96f, 0xdc20a261, 0x766df6ad, 0x7f60fda3, 0x6477e0b1, 0x6d7aebbf, 0x5259da95, 0x5b54d19b, 0x4043cc89, 0x494ec787, 0x3e05aedd, 0x3708a5d3, 0x2c1fb8c1, 0x2512b3cf, 0x1a3182e5, 0x133c89eb, 0x082b94f9, 0x01269ff7, 0xe6bd464d, 0xefb04d43, 0xf4a75051, 0xfdaa5b5f, 0xc2896a75, 0xcb84617b, 0xd0937c69, 0xd99e7767, 0xaed51e3d, 0xa7d81533, 0xbccf0821, 0xb5c2032f, 0x8ae13205, 0x83ec390b, 0x98fb2419, 0x91f62f17, 0x4dd68d76, 0x44db8678, 0x5fcc9b6a, 0x56c19064, 0x69e2a14e, 0x60efaa40, 0x7bf8b752, 0x72f5bc5c, 0x05bed506, 0x0cb3de08, 0x17a4c31a, 0x1ea9c814, 0x218af93e, 0x2887f230, 0x3390ef22, 0x3a9de42c, 0xdd063d96, 0xd40b3698, 0xcf1c2b8a, 0xc6112084, 0xf93211ae, 0xf03f1aa0, 0xeb2807b2, 0xe2250cbc, 0x956e65e6, 0x9c636ee8, 0x877473fa, 0x8e7978f4, 0xb15a49de, 0xb85742d0, 0xa3405fc2, 0xaa4d54cc, 0xecdaf741, 0xe5d7fc4f, 0xfec0e15d, 0xf7cdea53, 0xc8eedb79, 0xc1e3d077, 0xdaf4cd65, 0xd3f9c66b, 0xa4b2af31, 0xadbfa43f, 0xb6a8b92d, 0xbfa5b223, 0x80868309, 0x898b8807, 0x929c9515, 0x9b919e1b, 0x7c0a47a1, 0x75074caf, 0x6e1051bd, 0x671d5ab3, 0x583e6b99, 0x51336097, 0x4a247d85, 0x4329768b, 0x34621fd1, 0x3d6f14df, 0x267809cd, 0x2f7502c3, 0x105633e9, 0x195b38e7, 0x024c25f5, 0x0b412efb, 0xd7618c9a, 0xde6c8794, 0xc57b9a86, 0xcc769188, 0xf355a0a2, 0xfa58abac, 0xe14fb6be, 0xe842bdb0, 0x9f09d4ea, 0x9604dfe4, 0x8d13c2f6, 0x841ec9f8, 0xbb3df8d2, 0xb230f3dc, 0xa927eece, 0xa02ae5c0, 0x47b13c7a, 0x4ebc3774, 0x55ab2a66, 0x5ca62168, 0x63851042, 0x6a881b4c, 0x719f065e, 0x78920d50, 0x0fd9640a, 0x06d46f04, 0x1dc37216, 0x14ce7918, 0x2bed4832, 0x22e0433c, 0x39f75e2e, 0x30fa5520, 0x9ab701ec, 0x93ba0ae2, 0x88ad17f0, 0x81a01cfe, 0xbe832dd4, 0xb78e26da, 0xac993bc8, 0xa59430c6, 0xd2df599c, 0xdbd25292, 0xc0c54f80, 0xc9c8448e, 0xf6eb75a4, 0xffe67eaa, 0xe4f163b8, 0xedfc68b6, 0x0a67b10c, 0x036aba02, 0x187da710, 0x1170ac1e, 0x2e539d34, 0x275e963a, 0x3c498b28, 0x35448026, 0x420fe97c, 0x4b02e272, 0x5015ff60, 0x5918f46e, 0x663bc544, 0x6f36ce4a, 0x7421d358, 0x7d2cd856, 0xa10c7a37, 0xa8017139, 0xb3166c2b, 0xba1b6725, 0x8538560f, 0x8c355d01, 0x97224013, 0x9e2f4b1d, 0xe9642247, 0xe0692949, 0xfb7e345b, 0xf2733f55, 0xcd500e7f, 0xc45d0571, 0xdf4a1863, 0xd647136d, 0x31dccad7, 0x38d1c1d9, 0x23c6dccb, 0x2acbd7c5, 0x15e8e6ef, 0x1ce5ede1, 0x07f2f0f3, 0x0efffbfd, 0x79b492a7, 0x70b999a9, 0x6bae84bb, 0x62a38fb5, 0x5d80be9f, 0x548db591, 0x4f9aa883, 0x4697a38d];\\n\\n function convertToInt32(bytes) {\\n var result = [];\\n for (var i = 0; i < bytes.length; i += 4) {\\n result.push(\\n (bytes[i ] << 24) |\\n (bytes[i + 1] << 16) |\\n (bytes[i + 2] << 8) |\\n bytes[i + 3]\\n );\\n }\\n return result;\\n }\\n\\n var AES = function(key) {\\n if (!(this instanceof AES)) {\\n throw Error('AES must be instanitated with `new`');\\n }\\n\\n Object.defineProperty(this, 'key', {\\n value: coerceArray(key, true)\\n });\\n\\n this._prepare();\\n }\\n\\n\\n AES.prototype._prepare = function() {\\n\\n var rounds = numberOfRounds[this.key.length];\\n if (rounds == null) {\\n throw new Error('invalid key size (must be 16, 24 or 32 bytes)');\\n }\\n\\n // encryption round keys\\n this._Ke = [];\\n\\n // decryption round keys\\n this._Kd = [];\\n\\n for (var i = 0; i <= rounds; i++) {\\n this._Ke.push([0, 0, 0, 0]);\\n this._Kd.push([0, 0, 0, 0]);\\n }\\n\\n var roundKeyCount = (rounds + 1) * 4;\\n var KC = this.key.length / 4;\\n\\n // convert the key into ints\\n var tk = convertToInt32(this.key);\\n\\n // copy values into round key arrays\\n var index;\\n for (var i = 0; i < KC; i++) {\\n index = i >> 2;\\n this._Ke[index][i % 4] = tk[i];\\n this._Kd[rounds - index][i % 4] = tk[i];\\n }\\n\\n // key expansion (fips-197 section 5.2)\\n var rconpointer = 0;\\n var t = KC, tt;\\n while (t < roundKeyCount) {\\n tt = tk[KC - 1];\\n tk[0] ^= ((S[(tt >> 16) & 0xFF] << 24) ^\\n (S[(tt >> 8) & 0xFF] << 16) ^\\n (S[ tt & 0xFF] << 8) ^\\n S[(tt >> 24) & 0xFF] ^\\n (rcon[rconpointer] << 24));\\n rconpointer += 1;\\n\\n // key expansion (for non-256 bit)\\n if (KC != 8) {\\n for (var i = 1; i < KC; i++) {\\n tk[i] ^= tk[i - 1];\\n }\\n\\n // key expansion for 256-bit keys is \\\"slightly different\\\" (fips-197)\\n } else {\\n for (var i = 1; i < (KC / 2); i++) {\\n tk[i] ^= tk[i - 1];\\n }\\n tt = tk[(KC / 2) - 1];\\n\\n tk[KC / 2] ^= (S[ tt & 0xFF] ^\\n (S[(tt >> 8) & 0xFF] << 8) ^\\n (S[(tt >> 16) & 0xFF] << 16) ^\\n (S[(tt >> 24) & 0xFF] << 24));\\n\\n for (var i = (KC / 2) + 1; i < KC; i++) {\\n tk[i] ^= tk[i - 1];\\n }\\n }\\n\\n // copy values into round key arrays\\n var i = 0, r, c;\\n while (i < KC && t < roundKeyCount) {\\n r = t >> 2;\\n c = t % 4;\\n this._Ke[r][c] = tk[i];\\n this._Kd[rounds - r][c] = tk[i++];\\n t++;\\n }\\n }\\n\\n // inverse-cipher-ify the decryption round key (fips-197 section 5.3)\\n for (var r = 1; r < rounds; r++) {\\n for (var c = 0; c < 4; c++) {\\n tt = this._Kd[r][c];\\n this._Kd[r][c] = (U1[(tt >> 24) & 0xFF] ^\\n U2[(tt >> 16) & 0xFF] ^\\n U3[(tt >> 8) & 0xFF] ^\\n U4[ tt & 0xFF]);\\n }\\n }\\n }\\n\\n AES.prototype.encrypt = function(plaintext) {\\n if (plaintext.length != 16) {\\n throw new Error('invalid plaintext size (must be 16 bytes)');\\n }\\n\\n var rounds = this._Ke.length - 1;\\n var a = [0, 0, 0, 0];\\n\\n // convert plaintext to (ints ^ key)\\n var t = convertToInt32(plaintext);\\n for (var i = 0; i < 4; i++) {\\n t[i] ^= this._Ke[0][i];\\n }\\n\\n // apply round transforms\\n for (var r = 1; r < rounds; r++) {\\n for (var i = 0; i < 4; i++) {\\n a[i] = (T1[(t[ i ] >> 24) & 0xff] ^\\n T2[(t[(i + 1) % 4] >> 16) & 0xff] ^\\n T3[(t[(i + 2) % 4] >> 8) & 0xff] ^\\n T4[ t[(i + 3) % 4] & 0xff] ^\\n this._Ke[r][i]);\\n }\\n t = a.slice();\\n }\\n\\n // the last round is special\\n var result = createArray(16), tt;\\n for (var i = 0; i < 4; i++) {\\n tt = this._Ke[rounds][i];\\n result[4 * i ] = (S[(t[ i ] >> 24) & 0xff] ^ (tt >> 24)) & 0xff;\\n result[4 * i + 1] = (S[(t[(i + 1) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff;\\n result[4 * i + 2] = (S[(t[(i + 2) % 4] >> 8) & 0xff] ^ (tt >> 8)) & 0xff;\\n result[4 * i + 3] = (S[ t[(i + 3) % 4] & 0xff] ^ tt ) & 0xff;\\n }\\n\\n return result;\\n }\\n\\n AES.prototype.decrypt = function(ciphertext) {\\n if (ciphertext.length != 16) {\\n throw new Error('invalid ciphertext size (must be 16 bytes)');\\n }\\n\\n var rounds = this._Kd.length - 1;\\n var a = [0, 0, 0, 0];\\n\\n // convert plaintext to (ints ^ key)\\n var t = convertToInt32(ciphertext);\\n for (var i = 0; i < 4; i++) {\\n t[i] ^= this._Kd[0][i];\\n }\\n\\n // apply round transforms\\n for (var r = 1; r < rounds; r++) {\\n for (var i = 0; i < 4; i++) {\\n a[i] = (T5[(t[ i ] >> 24) & 0xff] ^\\n T6[(t[(i + 3) % 4] >> 16) & 0xff] ^\\n T7[(t[(i + 2) % 4] >> 8) & 0xff] ^\\n T8[ t[(i + 1) % 4] & 0xff] ^\\n this._Kd[r][i]);\\n }\\n t = a.slice();\\n }\\n\\n // the last round is special\\n var result = createArray(16), tt;\\n for (var i = 0; i < 4; i++) {\\n tt = this._Kd[rounds][i];\\n result[4 * i ] = (Si[(t[ i ] >> 24) & 0xff] ^ (tt >> 24)) & 0xff;\\n result[4 * i + 1] = (Si[(t[(i + 3) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff;\\n result[4 * i + 2] = (Si[(t[(i + 2) % 4] >> 8) & 0xff] ^ (tt >> 8)) & 0xff;\\n result[4 * i + 3] = (Si[ t[(i + 1) % 4] & 0xff] ^ tt ) & 0xff;\\n }\\n\\n return result;\\n }\\n\\n\\n /**\\n * Mode Of Operation - Electonic Codebook (ECB)\\n */\\n var ModeOfOperationECB = function(key) {\\n if (!(this instanceof ModeOfOperationECB)) {\\n throw Error('AES must be instanitated with `new`');\\n }\\n\\n this.description = \\\"Electronic Code Block\\\";\\n this.name = \\\"ecb\\\";\\n\\n this._aes = new AES(key);\\n }\\n\\n ModeOfOperationECB.prototype.encrypt = function(plaintext) {\\n plaintext = coerceArray(plaintext);\\n\\n if ((plaintext.length % 16) !== 0) {\\n throw new Error('invalid plaintext size (must be multiple of 16 bytes)');\\n }\\n\\n var ciphertext = createArray(plaintext.length);\\n var block = createArray(16);\\n\\n for (var i = 0; i < plaintext.length; i += 16) {\\n copyArray(plaintext, block, 0, i, i + 16);\\n block = this._aes.encrypt(block);\\n copyArray(block, ciphertext, i);\\n }\\n\\n return ciphertext;\\n }\\n\\n ModeOfOperationECB.prototype.decrypt = function(ciphertext) {\\n ciphertext = coerceArray(ciphertext);\\n\\n if ((ciphertext.length % 16) !== 0) {\\n throw new Error('invalid ciphertext size (must be multiple of 16 bytes)');\\n }\\n\\n var plaintext = createArray(ciphertext.length);\\n var block = createArray(16);\\n\\n for (var i = 0; i < ciphertext.length; i += 16) {\\n copyArray(ciphertext, block, 0, i, i + 16);\\n block = this._aes.decrypt(block);\\n copyArray(block, plaintext, i);\\n }\\n\\n return plaintext;\\n }\\n\\n\\n /**\\n * Mode Of Operation - Cipher Block Chaining (CBC)\\n */\\n var ModeOfOperationCBC = function(key, iv) {\\n if (!(this instanceof ModeOfOperationCBC)) {\\n throw Error('AES must be instanitated with `new`');\\n }\\n\\n this.description = \\\"Cipher Block Chaining\\\";\\n this.name = \\\"cbc\\\";\\n\\n if (!iv) {\\n iv = createArray(16);\\n\\n } else if (iv.length != 16) {\\n throw new Error('invalid initialation vector size (must be 16 bytes)');\\n }\\n\\n this._lastCipherblock = coerceArray(iv, true);\\n\\n this._aes = new AES(key);\\n }\\n\\n ModeOfOperationCBC.prototype.encrypt = function(plaintext) {\\n plaintext = coerceArray(plaintext);\\n\\n if ((plaintext.length % 16) !== 0) {\\n throw new Error('invalid plaintext size (must be multiple of 16 bytes)');\\n }\\n\\n var ciphertext = createArray(plaintext.length);\\n var block = createArray(16);\\n\\n for (var i = 0; i < plaintext.length; i += 16) {\\n copyArray(plaintext, block, 0, i, i + 16);\\n\\n for (var j = 0; j < 16; j++) {\\n block[j] ^= this._lastCipherblock[j];\\n }\\n\\n this._lastCipherblock = this._aes.encrypt(block);\\n copyArray(this._lastCipherblock, ciphertext, i);\\n }\\n\\n return ciphertext;\\n }\\n\\n ModeOfOperationCBC.prototype.decrypt = function(ciphertext) {\\n ciphertext = coerceArray(ciphertext);\\n\\n if ((ciphertext.length % 16) !== 0) {\\n throw new Error('invalid ciphertext size (must be multiple of 16 bytes)');\\n }\\n\\n var plaintext = createArray(ciphertext.length);\\n var block = createArray(16);\\n\\n for (var i = 0; i < ciphertext.length; i += 16) {\\n copyArray(ciphertext, block, 0, i, i + 16);\\n block = this._aes.decrypt(block);\\n\\n for (var j = 0; j < 16; j++) {\\n plaintext[i + j] = block[j] ^ this._lastCipherblock[j];\\n }\\n\\n copyArray(ciphertext, this._lastCipherblock, 0, i, i + 16);\\n }\\n\\n return plaintext;\\n }\\n\\n\\n /**\\n * Mode Of Operation - Cipher Feedback (CFB)\\n */\\n var ModeOfOperationCFB = function(key, iv, segmentSize) {\\n if (!(this instanceof ModeOfOperationCFB)) {\\n throw Error('AES must be instanitated with `new`');\\n }\\n\\n this.description = \\\"Cipher Feedback\\\";\\n this.name = \\\"cfb\\\";\\n\\n if (!iv) {\\n iv = createArray(16);\\n\\n } else if (iv.length != 16) {\\n throw new Error('invalid initialation vector size (must be 16 size)');\\n }\\n\\n if (!segmentSize) { segmentSize = 1; }\\n\\n this.segmentSize = segmentSize;\\n\\n this._shiftRegister = coerceArray(iv, true);\\n\\n this._aes = new AES(key);\\n }\\n\\n ModeOfOperationCFB.prototype.encrypt = function(plaintext) {\\n if ((plaintext.length % this.segmentSize) != 0) {\\n throw new Error('invalid plaintext size (must be segmentSize bytes)');\\n }\\n\\n var encrypted = coerceArray(plaintext, true);\\n\\n var xorSegment;\\n for (var i = 0; i < encrypted.length; i += this.segmentSize) {\\n xorSegment = this._aes.encrypt(this._shiftRegister);\\n for (var j = 0; j < this.segmentSize; j++) {\\n encrypted[i + j] ^= xorSegment[j];\\n }\\n\\n // Shift the register\\n copyArray(this._shiftRegister, this._shiftRegister, 0, this.segmentSize);\\n copyArray(encrypted, this._shiftRegister, 16 - this.segmentSize, i, i + this.segmentSize);\\n }\\n\\n return encrypted;\\n }\\n\\n ModeOfOperationCFB.prototype.decrypt = function(ciphertext) {\\n if ((ciphertext.length % this.segmentSize) != 0) {\\n throw new Error('invalid ciphertext size (must be segmentSize bytes)');\\n }\\n\\n var plaintext = coerceArray(ciphertext, true);\\n\\n var xorSegment;\\n for (var i = 0; i < plaintext.length; i += this.segmentSize) {\\n xorSegment = this._aes.encrypt(this._shiftRegister);\\n\\n for (var j = 0; j < this.segmentSize; j++) {\\n plaintext[i + j] ^= xorSegment[j];\\n }\\n\\n // Shift the register\\n copyArray(this._shiftRegister, this._shiftRegister, 0, this.segmentSize);\\n copyArray(ciphertext, this._shiftRegister, 16 - this.segmentSize, i, i + this.segmentSize);\\n }\\n\\n return plaintext;\\n }\\n\\n /**\\n * Mode Of Operation - Output Feedback (OFB)\\n */\\n var ModeOfOperationOFB = function(key, iv) {\\n if (!(this instanceof ModeOfOperationOFB)) {\\n throw Error('AES must be instanitated with `new`');\\n }\\n\\n this.description = \\\"Output Feedback\\\";\\n this.name = \\\"ofb\\\";\\n\\n if (!iv) {\\n iv = createArray(16);\\n\\n } else if (iv.length != 16) {\\n throw new Error('invalid initialation vector size (must be 16 bytes)');\\n }\\n\\n this._lastPrecipher = coerceArray(iv, true);\\n this._lastPrecipherIndex = 16;\\n\\n this._aes = new AES(key);\\n }\\n\\n ModeOfOperationOFB.prototype.encrypt = function(plaintext) {\\n var encrypted = coerceArray(plaintext, true);\\n\\n for (var i = 0; i < encrypted.length; i++) {\\n if (this._lastPrecipherIndex === 16) {\\n this._lastPrecipher = this._aes.encrypt(this._lastPrecipher);\\n this._lastPrecipherIndex = 0;\\n }\\n encrypted[i] ^= this._lastPrecipher[this._lastPrecipherIndex++];\\n }\\n\\n return encrypted;\\n }\\n\\n // Decryption is symetric\\n ModeOfOperationOFB.prototype.decrypt = ModeOfOperationOFB.prototype.encrypt;\\n\\n\\n /**\\n * Counter object for CTR common mode of operation\\n */\\n var Counter = function(initialValue) {\\n if (!(this instanceof Counter)) {\\n throw Error('Counter must be instanitated with `new`');\\n }\\n\\n // We allow 0, but anything false-ish uses the default 1\\n if (initialValue !== 0 && !initialValue) { initialValue = 1; }\\n\\n if (typeof(initialValue) === 'number') {\\n this._counter = createArray(16);\\n this.setValue(initialValue);\\n\\n } else {\\n this.setBytes(initialValue);\\n }\\n }\\n\\n Counter.prototype.setValue = function(value) {\\n if (typeof(value) !== 'number' || parseInt(value) != value) {\\n throw new Error('invalid counter value (must be an integer)');\\n }\\n\\n for (var index = 15; index >= 0; --index) {\\n this._counter[index] = value % 256;\\n value = value >> 8;\\n }\\n }\\n\\n Counter.prototype.setBytes = function(bytes) {\\n bytes = coerceArray(bytes, true);\\n\\n if (bytes.length != 16) {\\n throw new Error('invalid counter bytes size (must be 16 bytes)');\\n }\\n\\n this._counter = bytes;\\n };\\n\\n Counter.prototype.increment = function() {\\n for (var i = 15; i >= 0; i--) {\\n if (this._counter[i] === 255) {\\n this._counter[i] = 0;\\n } else {\\n this._counter[i]++;\\n break;\\n }\\n }\\n }\\n\\n\\n /**\\n * Mode Of Operation - Counter (CTR)\\n */\\n var ModeOfOperationCTR = function(key, counter) {\\n if (!(this instanceof ModeOfOperationCTR)) {\\n throw Error('AES must be instanitated with `new`');\\n }\\n\\n this.description = \\\"Counter\\\";\\n this.name = \\\"ctr\\\";\\n\\n if (!(counter instanceof Counter)) {\\n counter = new Counter(counter)\\n }\\n\\n this._counter = counter;\\n\\n this._remainingCounter = null;\\n this._remainingCounterIndex = 16;\\n\\n this._aes = new AES(key);\\n }\\n\\n ModeOfOperationCTR.prototype.encrypt = function(plaintext) {\\n var encrypted = coerceArray(plaintext, true);\\n\\n for (var i = 0; i < encrypted.length; i++) {\\n if (this._remainingCounterIndex === 16) {\\n this._remainingCounter = this._aes.encrypt(this._counter._counter);\\n this._remainingCounterIndex = 0;\\n this._counter.increment();\\n }\\n encrypted[i] ^= this._remainingCounter[this._remainingCounterIndex++];\\n }\\n\\n return encrypted;\\n }\\n\\n // Decryption is symetric\\n ModeOfOperationCTR.prototype.decrypt = ModeOfOperationCTR.prototype.encrypt;\\n\\n\\n ///////////////////////\\n // Padding\\n\\n // See:https://tools.ietf.org/html/rfc2315\\n function pkcs7pad(data) {\\n data = coerceArray(data, true);\\n var padder = 16 - (data.length % 16);\\n var result = createArray(data.length + padder);\\n copyArray(data, result);\\n for (var i = data.length; i < result.length; i++) {\\n result[i] = padder;\\n }\\n return result;\\n }\\n\\n function pkcs7strip(data) {\\n data = coerceArray(data, true);\\n if (data.length < 16) { throw new Error('PKCS#7 invalid length'); }\\n\\n var padder = data[data.length - 1];\\n if (padder > 16) { throw new Error('PKCS#7 padding byte out of range'); }\\n\\n var length = data.length - padder;\\n for (var i = 0; i < padder; i++) {\\n if (data[length + i] !== padder) {\\n throw new Error('PKCS#7 invalid padding byte');\\n }\\n }\\n\\n var result = createArray(length);\\n copyArray(data, result, 0, 0, length);\\n return result;\\n }\\n\\n ///////////////////////\\n // Exporting\\n\\n\\n // The block cipher\\n var aesjs = {\\n AES: AES,\\n Counter: Counter,\\n\\n ModeOfOperation: {\\n ecb: ModeOfOperationECB,\\n cbc: ModeOfOperationCBC,\\n cfb: ModeOfOperationCFB,\\n ofb: ModeOfOperationOFB,\\n ctr: ModeOfOperationCTR\\n },\\n\\n utils: {\\n hex: convertHex,\\n utf8: convertUtf8\\n },\\n\\n padding: {\\n pkcs7: {\\n pad: pkcs7pad,\\n strip: pkcs7strip\\n }\\n },\\n\\n _arrayTest: {\\n coerceArray: coerceArray,\\n createArray: createArray,\\n copyArray: copyArray,\\n }\\n };\\n\\n\\n // node.js\\n if (true) {\\n module.exports = aesjs\\n\\n // RequireJS/AMD\\n // http://www.requirejs.org/docs/api.html\\n // https://github.com/amdjs/amdjs-api/wiki/AMD\\n } else {}\\n\\n\\n})(this);\\n\\n\\n//# sourceURL=webpack:///./node_modules/aes-js/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/assert/assert.js\":\n/*!***************************************!*\\\n !*** ./node_modules/assert/assert.js ***!\n \\***************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(global) {\\n\\n// compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js\\n// original notice:\\n\\n/*!\\n * The buffer module from node.js, for the browser.\\n *\\n * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\\n * @license MIT\\n */\\nfunction compare(a, b) {\\n if (a === b) {\\n return 0;\\n }\\n\\n var x = a.length;\\n var y = b.length;\\n\\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\\n if (a[i] !== b[i]) {\\n x = a[i];\\n y = b[i];\\n break;\\n }\\n }\\n\\n if (x < y) {\\n return -1;\\n }\\n if (y < x) {\\n return 1;\\n }\\n return 0;\\n}\\nfunction isBuffer(b) {\\n if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {\\n return global.Buffer.isBuffer(b);\\n }\\n return !!(b != null && b._isBuffer);\\n}\\n\\n// based on node assert, original notice:\\n\\n// http://wiki.commonjs.org/wiki/Unit_Testing/1.0\\n//\\n// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!\\n//\\n// Originally from narwhal.js (http://narwhaljs.org)\\n// Copyright (c) 2009 Thomas Robinson <280north.com>\\n//\\n// Permission is hereby granted, free of charge, to any person obtaining a copy\\n// of this software and associated documentation files (the 'Software'), to\\n// deal in the Software without restriction, including without limitation the\\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\\n// sell copies of the Software, and to permit persons to whom the Software is\\n// furnished to do so, subject to the following conditions:\\n//\\n// The above copyright notice and this permission notice shall be included in\\n// all copies or substantial portions of the Software.\\n//\\n// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\\n// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\\n\\nvar util = __webpack_require__(/*! util/ */ \\\"./node_modules/util/util.js\\\");\\nvar hasOwn = Object.prototype.hasOwnProperty;\\nvar pSlice = Array.prototype.slice;\\nvar functionsHaveNames = (function () {\\n return function foo() {}.name === 'foo';\\n}());\\nfunction pToString (obj) {\\n return Object.prototype.toString.call(obj);\\n}\\nfunction isView(arrbuf) {\\n if (isBuffer(arrbuf)) {\\n return false;\\n }\\n if (typeof global.ArrayBuffer !== 'function') {\\n return false;\\n }\\n if (typeof ArrayBuffer.isView === 'function') {\\n return ArrayBuffer.isView(arrbuf);\\n }\\n if (!arrbuf) {\\n return false;\\n }\\n if (arrbuf instanceof DataView) {\\n return true;\\n }\\n if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {\\n return true;\\n }\\n return false;\\n}\\n// 1. The assert module provides functions that throw\\n// AssertionError's when particular conditions are not met. The\\n// assert module must conform to the following interface.\\n\\nvar assert = module.exports = ok;\\n\\n// 2. The AssertionError is defined in assert.\\n// new assert.AssertionError({ message: message,\\n// actual: actual,\\n// expected: expected })\\n\\nvar regex = /\\\\s*function\\\\s+([^\\\\(\\\\s]*)\\\\s*/;\\n// based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js\\nfunction getName(func) {\\n if (!util.isFunction(func)) {\\n return;\\n }\\n if (functionsHaveNames) {\\n return func.name;\\n }\\n var str = func.toString();\\n var match = str.match(regex);\\n return match && match[1];\\n}\\nassert.AssertionError = function AssertionError(options) {\\n this.name = 'AssertionError';\\n this.actual = options.actual;\\n this.expected = options.expected;\\n this.operator = options.operator;\\n if (options.message) {\\n this.message = options.message;\\n this.generatedMessage = false;\\n } else {\\n this.message = getMessage(this);\\n this.generatedMessage = true;\\n }\\n var stackStartFunction = options.stackStartFunction || fail;\\n if (Error.captureStackTrace) {\\n Error.captureStackTrace(this, stackStartFunction);\\n } else {\\n // non v8 browsers so we can have a stacktrace\\n var err = new Error();\\n if (err.stack) {\\n var out = err.stack;\\n\\n // try to strip useless frames\\n var fn_name = getName(stackStartFunction);\\n var idx = out.indexOf('\\\\n' + fn_name);\\n if (idx >= 0) {\\n // once we have located the function frame\\n // we need to strip out everything before it (and its line)\\n var next_line = out.indexOf('\\\\n', idx + 1);\\n out = out.substring(next_line + 1);\\n }\\n\\n this.stack = out;\\n }\\n }\\n};\\n\\n// assert.AssertionError instanceof Error\\nutil.inherits(assert.AssertionError, Error);\\n\\nfunction truncate(s, n) {\\n if (typeof s === 'string') {\\n return s.length < n ? s : s.slice(0, n);\\n } else {\\n return s;\\n }\\n}\\nfunction inspect(something) {\\n if (functionsHaveNames || !util.isFunction(something)) {\\n return util.inspect(something);\\n }\\n var rawname = getName(something);\\n var name = rawname ? ': ' + rawname : '';\\n return '[Function' + name + ']';\\n}\\nfunction getMessage(self) {\\n return truncate(inspect(self.actual), 128) + ' ' +\\n self.operator + ' ' +\\n truncate(inspect(self.expected), 128);\\n}\\n\\n// At present only the three keys mentioned above are used and\\n// understood by the spec. Implementations or sub modules can pass\\n// other keys to the AssertionError's constructor - they will be\\n// ignored.\\n\\n// 3. All of the following functions must throw an AssertionError\\n// when a corresponding condition is not met, with a message that\\n// may be undefined if not provided. All assertion methods provide\\n// both the actual and expected values to the assertion error for\\n// display purposes.\\n\\nfunction fail(actual, expected, message, operator, stackStartFunction) {\\n throw new assert.AssertionError({\\n message: message,\\n actual: actual,\\n expected: expected,\\n operator: operator,\\n stackStartFunction: stackStartFunction\\n });\\n}\\n\\n// EXTENSION! allows for well behaved errors defined elsewhere.\\nassert.fail = fail;\\n\\n// 4. Pure assertion tests whether a value is truthy, as determined\\n// by !!guard.\\n// assert.ok(guard, message_opt);\\n// This statement is equivalent to assert.equal(true, !!guard,\\n// message_opt);. To test strictly for the value true, use\\n// assert.strictEqual(true, guard, message_opt);.\\n\\nfunction ok(value, message) {\\n if (!value) fail(value, true, message, '==', assert.ok);\\n}\\nassert.ok = ok;\\n\\n// 5. The equality assertion tests shallow, coercive equality with\\n// ==.\\n// assert.equal(actual, expected, message_opt);\\n\\nassert.equal = function equal(actual, expected, message) {\\n if (actual != expected) fail(actual, expected, message, '==', assert.equal);\\n};\\n\\n// 6. The non-equality assertion tests for whether two objects are not equal\\n// with != assert.notEqual(actual, expected, message_opt);\\n\\nassert.notEqual = function notEqual(actual, expected, message) {\\n if (actual == expected) {\\n fail(actual, expected, message, '!=', assert.notEqual);\\n }\\n};\\n\\n// 7. The equivalence assertion tests a deep equality relation.\\n// assert.deepEqual(actual, expected, message_opt);\\n\\nassert.deepEqual = function deepEqual(actual, expected, message) {\\n if (!_deepEqual(actual, expected, false)) {\\n fail(actual, expected, message, 'deepEqual', assert.deepEqual);\\n }\\n};\\n\\nassert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {\\n if (!_deepEqual(actual, expected, true)) {\\n fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);\\n }\\n};\\n\\nfunction _deepEqual(actual, expected, strict, memos) {\\n // 7.1. All identical values are equivalent, as determined by ===.\\n if (actual === expected) {\\n return true;\\n } else if (isBuffer(actual) && isBuffer(expected)) {\\n return compare(actual, expected) === 0;\\n\\n // 7.2. If the expected value is a Date object, the actual value is\\n // equivalent if it is also a Date object that refers to the same time.\\n } else if (util.isDate(actual) && util.isDate(expected)) {\\n return actual.getTime() === expected.getTime();\\n\\n // 7.3 If the expected value is a RegExp object, the actual value is\\n // equivalent if it is also a RegExp object with the same source and\\n // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).\\n } else if (util.isRegExp(actual) && util.isRegExp(expected)) {\\n return actual.source === expected.source &&\\n actual.global === expected.global &&\\n actual.multiline === expected.multiline &&\\n actual.lastIndex === expected.lastIndex &&\\n actual.ignoreCase === expected.ignoreCase;\\n\\n // 7.4. Other pairs that do not both pass typeof value == 'object',\\n // equivalence is determined by ==.\\n } else if ((actual === null || typeof actual !== 'object') &&\\n (expected === null || typeof expected !== 'object')) {\\n return strict ? actual === expected : actual == expected;\\n\\n // If both values are instances of typed arrays, wrap their underlying\\n // ArrayBuffers in a Buffer each to increase performance\\n // This optimization requires the arrays to have the same type as checked by\\n // Object.prototype.toString (aka pToString). Never perform binary\\n // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their\\n // bit patterns are not identical.\\n } else if (isView(actual) && isView(expected) &&\\n pToString(actual) === pToString(expected) &&\\n !(actual instanceof Float32Array ||\\n actual instanceof Float64Array)) {\\n return compare(new Uint8Array(actual.buffer),\\n new Uint8Array(expected.buffer)) === 0;\\n\\n // 7.5 For all other Object pairs, including Array objects, equivalence is\\n // determined by having the same number of owned properties (as verified\\n // with Object.prototype.hasOwnProperty.call), the same set of keys\\n // (although not necessarily the same order), equivalent values for every\\n // corresponding key, and an identical 'prototype' property. Note: this\\n // accounts for both named and indexed properties on Arrays.\\n } else if (isBuffer(actual) !== isBuffer(expected)) {\\n return false;\\n } else {\\n memos = memos || {actual: [], expected: []};\\n\\n var actualIndex = memos.actual.indexOf(actual);\\n if (actualIndex !== -1) {\\n if (actualIndex === memos.expected.indexOf(expected)) {\\n return true;\\n }\\n }\\n\\n memos.actual.push(actual);\\n memos.expected.push(expected);\\n\\n return objEquiv(actual, expected, strict, memos);\\n }\\n}\\n\\nfunction isArguments(object) {\\n return Object.prototype.toString.call(object) == '[object Arguments]';\\n}\\n\\nfunction objEquiv(a, b, strict, actualVisitedObjects) {\\n if (a === null || a === undefined || b === null || b === undefined)\\n return false;\\n // if one is a primitive, the other must be same\\n if (util.isPrimitive(a) || util.isPrimitive(b))\\n return a === b;\\n if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))\\n return false;\\n var aIsArgs = isArguments(a);\\n var bIsArgs = isArguments(b);\\n if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))\\n return false;\\n if (aIsArgs) {\\n a = pSlice.call(a);\\n b = pSlice.call(b);\\n return _deepEqual(a, b, strict);\\n }\\n var ka = objectKeys(a);\\n var kb = objectKeys(b);\\n var key, i;\\n // having the same number of owned properties (keys incorporates\\n // hasOwnProperty)\\n if (ka.length !== kb.length)\\n return false;\\n //the same set of keys (although not necessarily the same order),\\n ka.sort();\\n kb.sort();\\n //~~~cheap key test\\n for (i = ka.length - 1; i >= 0; i--) {\\n if (ka[i] !== kb[i])\\n return false;\\n }\\n //equivalent values for every corresponding key, and\\n //~~~possibly expensive deep test\\n for (i = ka.length - 1; i >= 0; i--) {\\n key = ka[i];\\n if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))\\n return false;\\n }\\n return true;\\n}\\n\\n// 8. The non-equivalence assertion tests for any deep inequality.\\n// assert.notDeepEqual(actual, expected, message_opt);\\n\\nassert.notDeepEqual = function notDeepEqual(actual, expected, message) {\\n if (_deepEqual(actual, expected, false)) {\\n fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);\\n }\\n};\\n\\nassert.notDeepStrictEqual = notDeepStrictEqual;\\nfunction notDeepStrictEqual(actual, expected, message) {\\n if (_deepEqual(actual, expected, true)) {\\n fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);\\n }\\n}\\n\\n\\n// 9. The strict equality assertion tests strict equality, as determined by ===.\\n// assert.strictEqual(actual, expected, message_opt);\\n\\nassert.strictEqual = function strictEqual(actual, expected, message) {\\n if (actual !== expected) {\\n fail(actual, expected, message, '===', assert.strictEqual);\\n }\\n};\\n\\n// 10. The strict non-equality assertion tests for strict inequality, as\\n// determined by !==. assert.notStrictEqual(actual, expected, message_opt);\\n\\nassert.notStrictEqual = function notStrictEqual(actual, expected, message) {\\n if (actual === expected) {\\n fail(actual, expected, message, '!==', assert.notStrictEqual);\\n }\\n};\\n\\nfunction expectedException(actual, expected) {\\n if (!actual || !expected) {\\n return false;\\n }\\n\\n if (Object.prototype.toString.call(expected) == '[object RegExp]') {\\n return expected.test(actual);\\n }\\n\\n try {\\n if (actual instanceof expected) {\\n return true;\\n }\\n } catch (e) {\\n // Ignore. The instanceof check doesn't work for arrow functions.\\n }\\n\\n if (Error.isPrototypeOf(expected)) {\\n return false;\\n }\\n\\n return expected.call({}, actual) === true;\\n}\\n\\nfunction _tryBlock(block) {\\n var error;\\n try {\\n block();\\n } catch (e) {\\n error = e;\\n }\\n return error;\\n}\\n\\nfunction _throws(shouldThrow, block, expected, message) {\\n var actual;\\n\\n if (typeof block !== 'function') {\\n throw new TypeError('\\\"block\\\" argument must be a function');\\n }\\n\\n if (typeof expected === 'string') {\\n message = expected;\\n expected = null;\\n }\\n\\n actual = _tryBlock(block);\\n\\n message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +\\n (message ? ' ' + message : '.');\\n\\n if (shouldThrow && !actual) {\\n fail(actual, expected, 'Missing expected exception' + message);\\n }\\n\\n var userProvidedMessage = typeof message === 'string';\\n var isUnwantedException = !shouldThrow && util.isError(actual);\\n var isUnexpectedException = !shouldThrow && actual && !expected;\\n\\n if ((isUnwantedException &&\\n userProvidedMessage &&\\n expectedException(actual, expected)) ||\\n isUnexpectedException) {\\n fail(actual, expected, 'Got unwanted exception' + message);\\n }\\n\\n if ((shouldThrow && actual && expected &&\\n !expectedException(actual, expected)) || (!shouldThrow && actual)) {\\n throw actual;\\n }\\n}\\n\\n// 11. Expected to throw an error:\\n// assert.throws(block, Error_opt, message_opt);\\n\\nassert.throws = function(block, /*optional*/error, /*optional*/message) {\\n _throws(true, block, error, message);\\n};\\n\\n// EXTENSION! This is annoying to write outside this module.\\nassert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {\\n _throws(false, block, error, message);\\n};\\n\\nassert.ifError = function(err) { if (err) throw err; };\\n\\nvar objectKeys = Object.keys || function (obj) {\\n var keys = [];\\n for (var key in obj) {\\n if (hasOwn.call(obj, key)) keys.push(key);\\n }\\n return keys;\\n};\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ \\\"./node_modules/webpack/buildin/global.js\\\")))\\n\\n//# sourceURL=webpack:///./node_modules/assert/assert.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/base-x/index.js\":\n/*!**************************************!*\\\n !*** ./node_modules/base-x/index.js ***!\n \\**************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"// base-x encoding\\n// Forked from https://github.com/cryptocoinjs/bs58\\n// Originally written by Mike Hearn for BitcoinJ\\n// Copyright (c) 2011 Google Inc\\n// Ported to JavaScript by Stefan Thomas\\n// Merged Buffer refactorings from base58-native by Stephen Pair\\n// Copyright (c) 2013 BitPay Inc\\n\\nvar Buffer = __webpack_require__(/*! safe-buffer */ \\\"./node_modules/safe-buffer/index.js\\\").Buffer\\n\\nmodule.exports = function base (ALPHABET) {\\n var ALPHABET_MAP = {}\\n var BASE = ALPHABET.length\\n var LEADER = ALPHABET.charAt(0)\\n\\n // pre-compute lookup table\\n for (var z = 0; z < ALPHABET.length; z++) {\\n var x = ALPHABET.charAt(z)\\n\\n if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')\\n ALPHABET_MAP[x] = z\\n }\\n\\n function encode (source) {\\n if (source.length === 0) return ''\\n\\n var digits = [0]\\n for (var i = 0; i < source.length; ++i) {\\n for (var j = 0, carry = source[i]; j < digits.length; ++j) {\\n carry += digits[j] << 8\\n digits[j] = carry % BASE\\n carry = (carry / BASE) | 0\\n }\\n\\n while (carry > 0) {\\n digits.push(carry % BASE)\\n carry = (carry / BASE) | 0\\n }\\n }\\n\\n var string = ''\\n\\n // deal with leading zeros\\n for (var k = 0; source[k] === 0 && k < source.length - 1; ++k) string += LEADER\\n // convert digits to a string\\n for (var q = digits.length - 1; q >= 0; --q) string += ALPHABET[digits[q]]\\n\\n return string\\n }\\n\\n function decodeUnsafe (string) {\\n if (typeof string !== 'string') throw new TypeError('Expected String')\\n if (string.length === 0) return Buffer.allocUnsafe(0)\\n\\n var bytes = [0]\\n for (var i = 0; i < string.length; i++) {\\n var value = ALPHABET_MAP[string[i]]\\n if (value === undefined) return\\n\\n for (var j = 0, carry = value; j < bytes.length; ++j) {\\n carry += bytes[j] * BASE\\n bytes[j] = carry & 0xff\\n carry >>= 8\\n }\\n\\n while (carry > 0) {\\n bytes.push(carry & 0xff)\\n carry >>= 8\\n }\\n }\\n\\n // deal with leading zeros\\n for (var k = 0; string[k] === LEADER && k < string.length - 1; ++k) {\\n bytes.push(0)\\n }\\n\\n return Buffer.from(bytes.reverse())\\n }\\n\\n function decode (string) {\\n var buffer = decodeUnsafe(string)\\n if (buffer) return buffer\\n\\n throw new Error('Non-base' + BASE + ' character')\\n }\\n\\n return {\\n encode: encode,\\n decodeUnsafe: decodeUnsafe,\\n decode: decode\\n }\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/base-x/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/base64-js/index.js\":\n/*!*****************************************!*\\\n !*** ./node_modules/base64-js/index.js ***!\n \\*****************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nexports.byteLength = byteLength\\nexports.toByteArray = toByteArray\\nexports.fromByteArray = fromByteArray\\n\\nvar lookup = []\\nvar revLookup = []\\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\\n\\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\\nfor (var i = 0, len = code.length; i < len; ++i) {\\n lookup[i] = code[i]\\n revLookup[code.charCodeAt(i)] = i\\n}\\n\\n// Support decoding URL-safe base64 strings, as Node.js does.\\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\\nrevLookup['-'.charCodeAt(0)] = 62\\nrevLookup['_'.charCodeAt(0)] = 63\\n\\nfunction getLens (b64) {\\n var len = b64.length\\n\\n if (len % 4 > 0) {\\n throw new Error('Invalid string. Length must be a multiple of 4')\\n }\\n\\n // Trim off extra bytes after placeholder bytes are found\\n // See: https://github.com/beatgammit/base64-js/issues/42\\n var validLen = b64.indexOf('=')\\n if (validLen === -1) validLen = len\\n\\n var placeHoldersLen = validLen === len\\n ? 0\\n : 4 - (validLen % 4)\\n\\n return [validLen, placeHoldersLen]\\n}\\n\\n// base64 is 4/3 + up to two characters of the original data\\nfunction byteLength (b64) {\\n var lens = getLens(b64)\\n var validLen = lens[0]\\n var placeHoldersLen = lens[1]\\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\\n}\\n\\nfunction _byteLength (b64, validLen, placeHoldersLen) {\\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\\n}\\n\\nfunction toByteArray (b64) {\\n var tmp\\n var lens = getLens(b64)\\n var validLen = lens[0]\\n var placeHoldersLen = lens[1]\\n\\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\\n\\n var curByte = 0\\n\\n // if there are placeholders, only get up to the last complete 4 chars\\n var len = placeHoldersLen > 0\\n ? validLen - 4\\n : validLen\\n\\n for (var i = 0; i < len; i += 4) {\\n tmp =\\n (revLookup[b64.charCodeAt(i)] << 18) |\\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\\n revLookup[b64.charCodeAt(i + 3)]\\n arr[curByte++] = (tmp >> 16) & 0xFF\\n arr[curByte++] = (tmp >> 8) & 0xFF\\n arr[curByte++] = tmp & 0xFF\\n }\\n\\n if (placeHoldersLen === 2) {\\n tmp =\\n (revLookup[b64.charCodeAt(i)] << 2) |\\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\\n arr[curByte++] = tmp & 0xFF\\n }\\n\\n if (placeHoldersLen === 1) {\\n tmp =\\n (revLookup[b64.charCodeAt(i)] << 10) |\\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\\n arr[curByte++] = (tmp >> 8) & 0xFF\\n arr[curByte++] = tmp & 0xFF\\n }\\n\\n return arr\\n}\\n\\nfunction tripletToBase64 (num) {\\n return lookup[num >> 18 & 0x3F] +\\n lookup[num >> 12 & 0x3F] +\\n lookup[num >> 6 & 0x3F] +\\n lookup[num & 0x3F]\\n}\\n\\nfunction encodeChunk (uint8, start, end) {\\n var tmp\\n var output = []\\n for (var i = start; i < end; i += 3) {\\n tmp =\\n ((uint8[i] << 16) & 0xFF0000) +\\n ((uint8[i + 1] << 8) & 0xFF00) +\\n (uint8[i + 2] & 0xFF)\\n output.push(tripletToBase64(tmp))\\n }\\n return output.join('')\\n}\\n\\nfunction fromByteArray (uint8) {\\n var tmp\\n var len = uint8.length\\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\\n var parts = []\\n var maxChunkLength = 16383 // must be multiple of 3\\n\\n // go through the array every three bytes, we'll deal with trailing stuff later\\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\\n parts.push(encodeChunk(\\n uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)\\n ))\\n }\\n\\n // pad the end with zeros, but make sure to not forget the extra bytes\\n if (extraBytes === 1) {\\n tmp = uint8[len - 1]\\n parts.push(\\n lookup[tmp >> 2] +\\n lookup[(tmp << 4) & 0x3F] +\\n '=='\\n )\\n } else if (extraBytes === 2) {\\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\\n parts.push(\\n lookup[tmp >> 10] +\\n lookup[(tmp >> 4) & 0x3F] +\\n lookup[(tmp << 2) & 0x3F] +\\n '='\\n )\\n }\\n\\n return parts.join('')\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/base64-js/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/base64url/dist/base64url.js\":\n/*!**************************************************!*\\\n !*** ./node_modules/base64url/dist/base64url.js ***!\n \\**************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {\\nObject.defineProperty(exports, \\\"__esModule\\\", { value: true });\\nvar pad_string_1 = __webpack_require__(/*! ./pad-string */ \\\"./node_modules/base64url/dist/pad-string.js\\\");\\nfunction encode(input, encoding) {\\n if (encoding === void 0) { encoding = \\\"utf8\\\"; }\\n if (Buffer.isBuffer(input)) {\\n return fromBase64(input.toString(\\\"base64\\\"));\\n }\\n return fromBase64(Buffer.from(input, encoding).toString(\\\"base64\\\"));\\n}\\n;\\nfunction decode(base64url, encoding) {\\n if (encoding === void 0) { encoding = \\\"utf8\\\"; }\\n return Buffer.from(toBase64(base64url), \\\"base64\\\").toString(encoding);\\n}\\nfunction toBase64(base64url) {\\n base64url = base64url.toString();\\n return pad_string_1.default(base64url)\\n .replace(/\\\\-/g, \\\"+\\\")\\n .replace(/_/g, \\\"/\\\");\\n}\\nfunction fromBase64(base64) {\\n return base64\\n .replace(/=/g, \\\"\\\")\\n .replace(/\\\\+/g, \\\"-\\\")\\n .replace(/\\\\//g, \\\"_\\\");\\n}\\nfunction toBuffer(base64url) {\\n return Buffer.from(toBase64(base64url), \\\"base64\\\");\\n}\\nvar base64url = encode;\\nbase64url.encode = encode;\\nbase64url.decode = decode;\\nbase64url.toBase64 = toBase64;\\nbase64url.fromBase64 = fromBase64;\\nbase64url.toBuffer = toBuffer;\\nexports.default = base64url;\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/base64url/dist/base64url.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/base64url/dist/pad-string.js\":\n/*!***************************************************!*\\\n !*** ./node_modules/base64url/dist/pad-string.js ***!\n \\***************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {\\nObject.defineProperty(exports, \\\"__esModule\\\", { value: true });\\nfunction padString(input) {\\n var segmentLength = 4;\\n var stringLength = input.length;\\n var diff = stringLength % segmentLength;\\n if (!diff) {\\n return input;\\n }\\n var position = stringLength;\\n var padLength = segmentLength - diff;\\n var paddedStringLength = stringLength + padLength;\\n var buffer = Buffer.alloc(paddedStringLength);\\n buffer.write(input);\\n while (padLength--) {\\n buffer.write(\\\"=\\\", position++);\\n }\\n return buffer.toString();\\n}\\nexports.default = padString;\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/base64url/dist/pad-string.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/base64url/index.js\":\n/*!*****************************************!*\\\n !*** ./node_modules/base64url/index.js ***!\n \\*****************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"module.exports = __webpack_require__(/*! ./dist/base64url */ \\\"./node_modules/base64url/dist/base64url.js\\\").default;\\nmodule.exports.default = module.exports;\\n\\n\\n//# sourceURL=webpack:///./node_modules/base64url/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/blakejs/blake2b.js\":\n/*!*****************************************!*\\\n !*** ./node_modules/blakejs/blake2b.js ***!\n \\*****************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"// Blake2B in pure Javascript\\n// Adapted from the reference implementation in RFC7693\\n// Ported to Javascript by DC - https://github.com/dcposch\\n\\nvar util = __webpack_require__(/*! ./util */ \\\"./node_modules/blakejs/util.js\\\")\\n\\n// 64-bit unsigned addition\\n// Sets v[a,a+1] += v[b,b+1]\\n// v should be a Uint32Array\\nfunction ADD64AA (v, a, b) {\\n var o0 = v[a] + v[b]\\n var o1 = v[a + 1] + v[b + 1]\\n if (o0 >= 0x100000000) {\\n o1++\\n }\\n v[a] = o0\\n v[a + 1] = o1\\n}\\n\\n// 64-bit unsigned addition\\n// Sets v[a,a+1] += b\\n// b0 is the low 32 bits of b, b1 represents the high 32 bits\\nfunction ADD64AC (v, a, b0, b1) {\\n var o0 = v[a] + b0\\n if (b0 < 0) {\\n o0 += 0x100000000\\n }\\n var o1 = v[a + 1] + b1\\n if (o0 >= 0x100000000) {\\n o1++\\n }\\n v[a] = o0\\n v[a + 1] = o1\\n}\\n\\n// Little-endian byte access\\nfunction B2B_GET32 (arr, i) {\\n return (arr[i] ^\\n (arr[i + 1] << 8) ^\\n (arr[i + 2] << 16) ^\\n (arr[i + 3] << 24))\\n}\\n\\n// G Mixing function\\n// The ROTRs are inlined for speed\\nfunction B2B_G (a, b, c, d, ix, iy) {\\n var x0 = m[ix]\\n var x1 = m[ix + 1]\\n var y0 = m[iy]\\n var y1 = m[iy + 1]\\n\\n ADD64AA(v, a, b) // v[a,a+1] += v[b,b+1] ... in JS we must store a uint64 as two uint32s\\n ADD64AC(v, a, x0, x1) // v[a, a+1] += x ... x0 is the low 32 bits of x, x1 is the high 32 bits\\n\\n // v[d,d+1] = (v[d,d+1] xor v[a,a+1]) rotated to the right by 32 bits\\n var xor0 = v[d] ^ v[a]\\n var xor1 = v[d + 1] ^ v[a + 1]\\n v[d] = xor1\\n v[d + 1] = xor0\\n\\n ADD64AA(v, c, d)\\n\\n // v[b,b+1] = (v[b,b+1] xor v[c,c+1]) rotated right by 24 bits\\n xor0 = v[b] ^ v[c]\\n xor1 = v[b + 1] ^ v[c + 1]\\n v[b] = (xor0 >>> 24) ^ (xor1 << 8)\\n v[b + 1] = (xor1 >>> 24) ^ (xor0 << 8)\\n\\n ADD64AA(v, a, b)\\n ADD64AC(v, a, y0, y1)\\n\\n // v[d,d+1] = (v[d,d+1] xor v[a,a+1]) rotated right by 16 bits\\n xor0 = v[d] ^ v[a]\\n xor1 = v[d + 1] ^ v[a + 1]\\n v[d] = (xor0 >>> 16) ^ (xor1 << 16)\\n v[d + 1] = (xor1 >>> 16) ^ (xor0 << 16)\\n\\n ADD64AA(v, c, d)\\n\\n // v[b,b+1] = (v[b,b+1] xor v[c,c+1]) rotated right by 63 bits\\n xor0 = v[b] ^ v[c]\\n xor1 = v[b + 1] ^ v[c + 1]\\n v[b] = (xor1 >>> 31) ^ (xor0 << 1)\\n v[b + 1] = (xor0 >>> 31) ^ (xor1 << 1)\\n}\\n\\n// Initialization Vector\\nvar BLAKE2B_IV32 = new Uint32Array([\\n 0xF3BCC908, 0x6A09E667, 0x84CAA73B, 0xBB67AE85,\\n 0xFE94F82B, 0x3C6EF372, 0x5F1D36F1, 0xA54FF53A,\\n 0xADE682D1, 0x510E527F, 0x2B3E6C1F, 0x9B05688C,\\n 0xFB41BD6B, 0x1F83D9AB, 0x137E2179, 0x5BE0CD19\\n])\\n\\nvar SIGMA8 = [\\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\\n 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3,\\n 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4,\\n 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8,\\n 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13,\\n 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9,\\n 12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11,\\n 13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10,\\n 6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5,\\n 10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13, 0,\\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\\n 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3\\n]\\n\\n// These are offsets into a uint64 buffer.\\n// Multiply them all by 2 to make them offsets into a uint32 buffer,\\n// because this is Javascript and we don't have uint64s\\nvar SIGMA82 = new Uint8Array(SIGMA8.map(function (x) { return x * 2 }))\\n\\n// Compression function. 'last' flag indicates last block.\\n// Note we're representing 16 uint64s as 32 uint32s\\nvar v = new Uint32Array(32)\\nvar m = new Uint32Array(32)\\nfunction blake2bCompress (ctx, last) {\\n var i = 0\\n\\n // init work variables\\n for (i = 0; i < 16; i++) {\\n v[i] = ctx.h[i]\\n v[i + 16] = BLAKE2B_IV32[i]\\n }\\n\\n // low 64 bits of offset\\n v[24] = v[24] ^ ctx.t\\n v[25] = v[25] ^ (ctx.t / 0x100000000)\\n // high 64 bits not supported, offset may not be higher than 2**53-1\\n\\n // last block flag set ?\\n if (last) {\\n v[28] = ~v[28]\\n v[29] = ~v[29]\\n }\\n\\n // get little-endian words\\n for (i = 0; i < 32; i++) {\\n m[i] = B2B_GET32(ctx.b, 4 * i)\\n }\\n\\n // twelve rounds of mixing\\n // uncomment the DebugPrint calls to log the computation\\n // and match the RFC sample documentation\\n // util.debugPrint(' m[16]', m, 64)\\n for (i = 0; i < 12; i++) {\\n // util.debugPrint(' (i=' + (i < 10 ? ' ' : '') + i + ') v[16]', v, 64)\\n B2B_G(0, 8, 16, 24, SIGMA82[i * 16 + 0], SIGMA82[i * 16 + 1])\\n B2B_G(2, 10, 18, 26, SIGMA82[i * 16 + 2], SIGMA82[i * 16 + 3])\\n B2B_G(4, 12, 20, 28, SIGMA82[i * 16 + 4], SIGMA82[i * 16 + 5])\\n B2B_G(6, 14, 22, 30, SIGMA82[i * 16 + 6], SIGMA82[i * 16 + 7])\\n B2B_G(0, 10, 20, 30, SIGMA82[i * 16 + 8], SIGMA82[i * 16 + 9])\\n B2B_G(2, 12, 22, 24, SIGMA82[i * 16 + 10], SIGMA82[i * 16 + 11])\\n B2B_G(4, 14, 16, 26, SIGMA82[i * 16 + 12], SIGMA82[i * 16 + 13])\\n B2B_G(6, 8, 18, 28, SIGMA82[i * 16 + 14], SIGMA82[i * 16 + 15])\\n }\\n // util.debugPrint(' (i=12) v[16]', v, 64)\\n\\n for (i = 0; i < 16; i++) {\\n ctx.h[i] = ctx.h[i] ^ v[i] ^ v[i + 16]\\n }\\n // util.debugPrint('h[8]', ctx.h, 64)\\n}\\n\\n// Creates a BLAKE2b hashing context\\n// Requires an output length between 1 and 64 bytes\\n// Takes an optional Uint8Array key\\nfunction blake2bInit (outlen, key) {\\n if (outlen === 0 || outlen > 64) {\\n throw new Error('Illegal output length, expected 0 < length <= 64')\\n }\\n if (key && key.length > 64) {\\n throw new Error('Illegal key, expected Uint8Array with 0 < length <= 64')\\n }\\n\\n // state, 'param block'\\n var ctx = {\\n b: new Uint8Array(128),\\n h: new Uint32Array(16),\\n t: 0, // input count\\n c: 0, // pointer within buffer\\n outlen: outlen // output length in bytes\\n }\\n\\n // initialize hash state\\n for (var i = 0; i < 16; i++) {\\n ctx.h[i] = BLAKE2B_IV32[i]\\n }\\n var keylen = key ? key.length : 0\\n ctx.h[0] ^= 0x01010000 ^ (keylen << 8) ^ outlen\\n\\n // key the hash, if applicable\\n if (key) {\\n blake2bUpdate(ctx, key)\\n // at the end\\n ctx.c = 128\\n }\\n\\n return ctx\\n}\\n\\n// Updates a BLAKE2b streaming hash\\n// Requires hash context and Uint8Array (byte array)\\nfunction blake2bUpdate (ctx, input) {\\n for (var i = 0; i < input.length; i++) {\\n if (ctx.c === 128) { // buffer full ?\\n ctx.t += ctx.c // add counters\\n blake2bCompress(ctx, false) // compress (not last)\\n ctx.c = 0 // counter to zero\\n }\\n ctx.b[ctx.c++] = input[i]\\n }\\n}\\n\\n// Completes a BLAKE2b streaming hash\\n// Returns a Uint8Array containing the message digest\\nfunction blake2bFinal (ctx) {\\n ctx.t += ctx.c // mark last block offset\\n\\n while (ctx.c < 128) { // fill up with zeros\\n ctx.b[ctx.c++] = 0\\n }\\n blake2bCompress(ctx, true) // final block flag = 1\\n\\n // little endian convert and store\\n var out = new Uint8Array(ctx.outlen)\\n for (var i = 0; i < ctx.outlen; i++) {\\n out[i] = ctx.h[i >> 2] >> (8 * (i & 3))\\n }\\n return out\\n}\\n\\n// Computes the BLAKE2B hash of a string or byte array, and returns a Uint8Array\\n//\\n// Returns a n-byte Uint8Array\\n//\\n// Parameters:\\n// - input - the input bytes, as a string, Buffer or Uint8Array\\n// - key - optional key Uint8Array, up to 64 bytes\\n// - outlen - optional output length in bytes, default 64\\nfunction blake2b (input, key, outlen) {\\n // preprocess inputs\\n outlen = outlen || 64\\n input = util.normalizeInput(input)\\n\\n // do the math\\n var ctx = blake2bInit(outlen, key)\\n blake2bUpdate(ctx, input)\\n return blake2bFinal(ctx)\\n}\\n\\n// Computes the BLAKE2B hash of a string or byte array\\n//\\n// Returns an n-byte hash in hex, all lowercase\\n//\\n// Parameters:\\n// - input - the input bytes, as a string, Buffer, or Uint8Array\\n// - key - optional key Uint8Array, up to 64 bytes\\n// - outlen - optional output length in bytes, default 64\\nfunction blake2bHex (input, key, outlen) {\\n var output = blake2b(input, key, outlen)\\n return util.toHex(output)\\n}\\n\\nmodule.exports = {\\n blake2b: blake2b,\\n blake2bHex: blake2bHex,\\n blake2bInit: blake2bInit,\\n blake2bUpdate: blake2bUpdate,\\n blake2bFinal: blake2bFinal\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/blakejs/blake2b.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/blakejs/blake2s.js\":\n/*!*****************************************!*\\\n !*** ./node_modules/blakejs/blake2s.js ***!\n \\*****************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"// BLAKE2s hash function in pure Javascript\\n// Adapted from the reference implementation in RFC7693\\n// Ported to Javascript by DC - https://github.com/dcposch\\n\\nvar util = __webpack_require__(/*! ./util */ \\\"./node_modules/blakejs/util.js\\\")\\n\\n// Little-endian byte access.\\n// Expects a Uint8Array and an index\\n// Returns the little-endian uint32 at v[i..i+3]\\nfunction B2S_GET32 (v, i) {\\n return v[i] ^ (v[i + 1] << 8) ^ (v[i + 2] << 16) ^ (v[i + 3] << 24)\\n}\\n\\n// Mixing function G.\\nfunction B2S_G (a, b, c, d, x, y) {\\n v[a] = v[a] + v[b] + x\\n v[d] = ROTR32(v[d] ^ v[a], 16)\\n v[c] = v[c] + v[d]\\n v[b] = ROTR32(v[b] ^ v[c], 12)\\n v[a] = v[a] + v[b] + y\\n v[d] = ROTR32(v[d] ^ v[a], 8)\\n v[c] = v[c] + v[d]\\n v[b] = ROTR32(v[b] ^ v[c], 7)\\n}\\n\\n// 32-bit right rotation\\n// x should be a uint32\\n// y must be between 1 and 31, inclusive\\nfunction ROTR32 (x, y) {\\n return (x >>> y) ^ (x << (32 - y))\\n}\\n\\n// Initialization Vector.\\nvar BLAKE2S_IV = new Uint32Array([\\n 0x6A09E667, 0xBB67AE85, 0x3C6EF372, 0xA54FF53A,\\n 0x510E527F, 0x9B05688C, 0x1F83D9AB, 0x5BE0CD19])\\n\\nvar SIGMA = new Uint8Array([\\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\\n 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3,\\n 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4,\\n 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8,\\n 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13,\\n 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9,\\n 12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11,\\n 13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10,\\n 6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5,\\n 10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13, 0])\\n\\n// Compression function. \\\"last\\\" flag indicates last block\\nvar v = new Uint32Array(16)\\nvar m = new Uint32Array(16)\\nfunction blake2sCompress (ctx, last) {\\n var i = 0\\n for (i = 0; i < 8; i++) { // init work variables\\n v[i] = ctx.h[i]\\n v[i + 8] = BLAKE2S_IV[i]\\n }\\n\\n v[12] ^= ctx.t // low 32 bits of offset\\n v[13] ^= (ctx.t / 0x100000000) // high 32 bits\\n if (last) { // last block flag set ?\\n v[14] = ~v[14]\\n }\\n\\n for (i = 0; i < 16; i++) { // get little-endian words\\n m[i] = B2S_GET32(ctx.b, 4 * i)\\n }\\n\\n // ten rounds of mixing\\n // uncomment the DebugPrint calls to log the computation\\n // and match the RFC sample documentation\\n // util.debugPrint(' m[16]', m, 32)\\n for (i = 0; i < 10; i++) {\\n // util.debugPrint(' (i=' + i + ') v[16]', v, 32)\\n B2S_G(0, 4, 8, 12, m[SIGMA[i * 16 + 0]], m[SIGMA[i * 16 + 1]])\\n B2S_G(1, 5, 9, 13, m[SIGMA[i * 16 + 2]], m[SIGMA[i * 16 + 3]])\\n B2S_G(2, 6, 10, 14, m[SIGMA[i * 16 + 4]], m[SIGMA[i * 16 + 5]])\\n B2S_G(3, 7, 11, 15, m[SIGMA[i * 16 + 6]], m[SIGMA[i * 16 + 7]])\\n B2S_G(0, 5, 10, 15, m[SIGMA[i * 16 + 8]], m[SIGMA[i * 16 + 9]])\\n B2S_G(1, 6, 11, 12, m[SIGMA[i * 16 + 10]], m[SIGMA[i * 16 + 11]])\\n B2S_G(2, 7, 8, 13, m[SIGMA[i * 16 + 12]], m[SIGMA[i * 16 + 13]])\\n B2S_G(3, 4, 9, 14, m[SIGMA[i * 16 + 14]], m[SIGMA[i * 16 + 15]])\\n }\\n // util.debugPrint(' (i=10) v[16]', v, 32)\\n\\n for (i = 0; i < 8; i++) {\\n ctx.h[i] ^= v[i] ^ v[i + 8]\\n }\\n // util.debugPrint('h[8]', ctx.h, 32)\\n}\\n\\n// Creates a BLAKE2s hashing context\\n// Requires an output length between 1 and 32 bytes\\n// Takes an optional Uint8Array key\\nfunction blake2sInit (outlen, key) {\\n if (!(outlen > 0 && outlen <= 32)) {\\n throw new Error('Incorrect output length, should be in [1, 32]')\\n }\\n var keylen = key ? key.length : 0\\n if (key && !(keylen > 0 && keylen <= 32)) {\\n throw new Error('Incorrect key length, should be in [1, 32]')\\n }\\n\\n var ctx = {\\n h: new Uint32Array(BLAKE2S_IV), // hash state\\n b: new Uint32Array(64), // input block\\n c: 0, // pointer within block\\n t: 0, // input count\\n outlen: outlen // output length in bytes\\n }\\n ctx.h[0] ^= 0x01010000 ^ (keylen << 8) ^ outlen\\n\\n if (keylen > 0) {\\n blake2sUpdate(ctx, key)\\n ctx.c = 64 // at the end\\n }\\n\\n return ctx\\n}\\n\\n// Updates a BLAKE2s streaming hash\\n// Requires hash context and Uint8Array (byte array)\\nfunction blake2sUpdate (ctx, input) {\\n for (var i = 0; i < input.length; i++) {\\n if (ctx.c === 64) { // buffer full ?\\n ctx.t += ctx.c // add counters\\n blake2sCompress(ctx, false) // compress (not last)\\n ctx.c = 0 // counter to zero\\n }\\n ctx.b[ctx.c++] = input[i]\\n }\\n}\\n\\n// Completes a BLAKE2s streaming hash\\n// Returns a Uint8Array containing the message digest\\nfunction blake2sFinal (ctx) {\\n ctx.t += ctx.c // mark last block offset\\n while (ctx.c < 64) { // fill up with zeros\\n ctx.b[ctx.c++] = 0\\n }\\n blake2sCompress(ctx, true) // final block flag = 1\\n\\n // little endian convert and store\\n var out = new Uint8Array(ctx.outlen)\\n for (var i = 0; i < ctx.outlen; i++) {\\n out[i] = (ctx.h[i >> 2] >> (8 * (i & 3))) & 0xFF\\n }\\n return out\\n}\\n\\n// Computes the BLAKE2S hash of a string or byte array, and returns a Uint8Array\\n//\\n// Returns a n-byte Uint8Array\\n//\\n// Parameters:\\n// - input - the input bytes, as a string, Buffer, or Uint8Array\\n// - key - optional key Uint8Array, up to 32 bytes\\n// - outlen - optional output length in bytes, default 64\\nfunction blake2s (input, key, outlen) {\\n // preprocess inputs\\n outlen = outlen || 32\\n input = util.normalizeInput(input)\\n\\n // do the math\\n var ctx = blake2sInit(outlen, key)\\n blake2sUpdate(ctx, input)\\n return blake2sFinal(ctx)\\n}\\n\\n// Computes the BLAKE2S hash of a string or byte array\\n//\\n// Returns an n-byte hash in hex, all lowercase\\n//\\n// Parameters:\\n// - input - the input bytes, as a string, Buffer, or Uint8Array\\n// - key - optional key Uint8Array, up to 32 bytes\\n// - outlen - optional output length in bytes, default 64\\nfunction blake2sHex (input, key, outlen) {\\n var output = blake2s(input, key, outlen)\\n return util.toHex(output)\\n}\\n\\nmodule.exports = {\\n blake2s: blake2s,\\n blake2sHex: blake2sHex,\\n blake2sInit: blake2sInit,\\n blake2sUpdate: blake2sUpdate,\\n blake2sFinal: blake2sFinal\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/blakejs/blake2s.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/blakejs/index.js\":\n/*!***************************************!*\\\n !*** ./node_modules/blakejs/index.js ***!\n \\***************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"var b2b = __webpack_require__(/*! ./blake2b */ \\\"./node_modules/blakejs/blake2b.js\\\")\\nvar b2s = __webpack_require__(/*! ./blake2s */ \\\"./node_modules/blakejs/blake2s.js\\\")\\n\\nmodule.exports = {\\n blake2b: b2b.blake2b,\\n blake2bHex: b2b.blake2bHex,\\n blake2bInit: b2b.blake2bInit,\\n blake2bUpdate: b2b.blake2bUpdate,\\n blake2bFinal: b2b.blake2bFinal,\\n blake2s: b2s.blake2s,\\n blake2sHex: b2s.blake2sHex,\\n blake2sInit: b2s.blake2sInit,\\n blake2sUpdate: b2s.blake2sUpdate,\\n blake2sFinal: b2s.blake2sFinal\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/blakejs/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/blakejs/util.js\":\n/*!**************************************!*\\\n !*** ./node_modules/blakejs/util.js ***!\n \\**************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {var ERROR_MSG_INPUT = 'Input must be an string, Buffer or Uint8Array'\\n\\n// For convenience, let people hash a string, not just a Uint8Array\\nfunction normalizeInput (input) {\\n var ret\\n if (input instanceof Uint8Array) {\\n ret = input\\n } else if (input instanceof Buffer) {\\n ret = new Uint8Array(input)\\n } else if (typeof (input) === 'string') {\\n ret = new Uint8Array(Buffer.from(input, 'utf8'))\\n } else {\\n throw new Error(ERROR_MSG_INPUT)\\n }\\n return ret\\n}\\n\\n// Converts a Uint8Array to a hexadecimal string\\n// For example, toHex([255, 0, 255]) returns \\\"ff00ff\\\"\\nfunction toHex (bytes) {\\n return Array.prototype.map.call(bytes, function (n) {\\n return (n < 16 ? '0' : '') + n.toString(16)\\n }).join('')\\n}\\n\\n// Converts any value in [0...2^32-1] to an 8-character hex string\\nfunction uint32ToHex (val) {\\n return (0x100000000 + val).toString(16).substring(1)\\n}\\n\\n// For debugging: prints out hash state in the same format as the RFC\\n// sample computation exactly, so that you can diff\\nfunction debugPrint (label, arr, size) {\\n var msg = '\\\\n' + label + ' = '\\n for (var i = 0; i < arr.length; i += 2) {\\n if (size === 32) {\\n msg += uint32ToHex(arr[i]).toUpperCase()\\n msg += ' '\\n msg += uint32ToHex(arr[i + 1]).toUpperCase()\\n } else if (size === 64) {\\n msg += uint32ToHex(arr[i + 1]).toUpperCase()\\n msg += uint32ToHex(arr[i]).toUpperCase()\\n } else throw new Error('Invalid size ' + size)\\n if (i % 6 === 4) {\\n msg += '\\\\n' + new Array(label.length + 4).join(' ')\\n } else if (i < arr.length - 2) {\\n msg += ' '\\n }\\n }\\n console.log(msg)\\n}\\n\\n// For performance testing: generates N bytes of input, hashes M times\\n// Measures and prints MB/second hash performance each time\\nfunction testSpeed (hashFn, N, M) {\\n var startMs = new Date().getTime()\\n\\n var input = new Uint8Array(N)\\n for (var i = 0; i < N; i++) {\\n input[i] = i % 256\\n }\\n var genMs = new Date().getTime()\\n console.log('Generated random input in ' + (genMs - startMs) + 'ms')\\n startMs = genMs\\n\\n for (i = 0; i < M; i++) {\\n var hashHex = hashFn(input)\\n var hashMs = new Date().getTime()\\n var ms = hashMs - startMs\\n startMs = hashMs\\n console.log('Hashed in ' + ms + 'ms: ' + hashHex.substring(0, 20) + '...')\\n console.log(Math.round(N / (1 << 20) / (ms / 1000) * 100) / 100 + ' MB PER SECOND')\\n }\\n}\\n\\nmodule.exports = {\\n normalizeInput: normalizeInput,\\n toHex: toHex,\\n debugPrint: debugPrint,\\n testSpeed: testSpeed\\n}\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/blakejs/util.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/bn.js/lib/bn.js\":\n/*!**************************************!*\\\n !*** ./node_modules/bn.js/lib/bn.js ***!\n \\**************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"/* WEBPACK VAR INJECTION */(function(module) {(function (module, exports) {\\n 'use strict';\\n\\n // Utils\\n function assert (val, msg) {\\n if (!val) throw new Error(msg || 'Assertion failed');\\n }\\n\\n // Could use `inherits` module, but don't want to move from single file\\n // architecture yet.\\n function inherits (ctor, superCtor) {\\n ctor.super_ = superCtor;\\n var TempCtor = function () {};\\n TempCtor.prototype = superCtor.prototype;\\n ctor.prototype = new TempCtor();\\n ctor.prototype.constructor = ctor;\\n }\\n\\n // BN\\n\\n function BN (number, base, endian) {\\n if (BN.isBN(number)) {\\n return number;\\n }\\n\\n this.negative = 0;\\n this.words = null;\\n this.length = 0;\\n\\n // Reduction context\\n this.red = null;\\n\\n if (number !== null) {\\n if (base === 'le' || base === 'be') {\\n endian = base;\\n base = 10;\\n }\\n\\n this._init(number || 0, base || 10, endian || 'be');\\n }\\n }\\n if (typeof module === 'object') {\\n module.exports = BN;\\n } else {\\n exports.BN = BN;\\n }\\n\\n BN.BN = BN;\\n BN.wordSize = 26;\\n\\n var Buffer;\\n try {\\n Buffer = __webpack_require__(/*! buffer */ 0).Buffer;\\n } catch (e) {\\n }\\n\\n BN.isBN = function isBN (num) {\\n if (num instanceof BN) {\\n return true;\\n }\\n\\n return num !== null && typeof num === 'object' &&\\n num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\\n };\\n\\n BN.max = function max (left, right) {\\n if (left.cmp(right) > 0) return left;\\n return right;\\n };\\n\\n BN.min = function min (left, right) {\\n if (left.cmp(right) < 0) return left;\\n return right;\\n };\\n\\n BN.prototype._init = function init (number, base, endian) {\\n if (typeof number === 'number') {\\n return this._initNumber(number, base, endian);\\n }\\n\\n if (typeof number === 'object') {\\n return this._initArray(number, base, endian);\\n }\\n\\n if (base === 'hex') {\\n base = 16;\\n }\\n assert(base === (base | 0) && base >= 2 && base <= 36);\\n\\n number = number.toString().replace(/\\\\s+/g, '');\\n var start = 0;\\n if (number[0] === '-') {\\n start++;\\n }\\n\\n if (base === 16) {\\n this._parseHex(number, start);\\n } else {\\n this._parseBase(number, base, start);\\n }\\n\\n if (number[0] === '-') {\\n this.negative = 1;\\n }\\n\\n this.strip();\\n\\n if (endian !== 'le') return;\\n\\n this._initArray(this.toArray(), base, endian);\\n };\\n\\n BN.prototype._initNumber = function _initNumber (number, base, endian) {\\n if (number < 0) {\\n this.negative = 1;\\n number = -number;\\n }\\n if (number < 0x4000000) {\\n this.words = [ number & 0x3ffffff ];\\n this.length = 1;\\n } else if (number < 0x10000000000000) {\\n this.words = [\\n number & 0x3ffffff,\\n (number / 0x4000000) & 0x3ffffff\\n ];\\n this.length = 2;\\n } else {\\n assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\\n this.words = [\\n number & 0x3ffffff,\\n (number / 0x4000000) & 0x3ffffff,\\n 1\\n ];\\n this.length = 3;\\n }\\n\\n if (endian !== 'le') return;\\n\\n // Reverse the bytes\\n this._initArray(this.toArray(), base, endian);\\n };\\n\\n BN.prototype._initArray = function _initArray (number, base, endian) {\\n // Perhaps a Uint8Array\\n assert(typeof number.length === 'number');\\n if (number.length <= 0) {\\n this.words = [ 0 ];\\n this.length = 1;\\n return this;\\n }\\n\\n this.length = Math.ceil(number.length / 3);\\n this.words = new Array(this.length);\\n for (var i = 0; i < this.length; i++) {\\n this.words[i] = 0;\\n }\\n\\n var j, w;\\n var off = 0;\\n if (endian === 'be') {\\n for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\\n w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);\\n this.words[j] |= (w << off) & 0x3ffffff;\\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\\n off += 24;\\n if (off >= 26) {\\n off -= 26;\\n j++;\\n }\\n }\\n } else if (endian === 'le') {\\n for (i = 0, j = 0; i < number.length; i += 3) {\\n w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);\\n this.words[j] |= (w << off) & 0x3ffffff;\\n this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;\\n off += 24;\\n if (off >= 26) {\\n off -= 26;\\n j++;\\n }\\n }\\n }\\n return this.strip();\\n };\\n\\n function parseHex (str, start, end) {\\n var r = 0;\\n var len = Math.min(str.length, end);\\n for (var i = start; i < len; i++) {\\n var c = str.charCodeAt(i) - 48;\\n\\n r <<= 4;\\n\\n // 'a' - 'f'\\n if (c >= 49 && c <= 54) {\\n r |= c - 49 + 0xa;\\n\\n // 'A' - 'F'\\n } else if (c >= 17 && c <= 22) {\\n r |= c - 17 + 0xa;\\n\\n // '0' - '9'\\n } else {\\n r |= c & 0xf;\\n }\\n }\\n return r;\\n }\\n\\n BN.prototype._parseHex = function _parseHex (number, start) {\\n // Create possibly bigger array to ensure that it fits the number\\n this.length = Math.ceil((number.length - start) / 6);\\n this.words = new Array(this.length);\\n for (var i = 0; i < this.length; i++) {\\n this.words[i] = 0;\\n }\\n\\n var j, w;\\n // Scan 24-bit chunks and add them to the number\\n var off = 0;\\n for (i = number.length - 6, j = 0; i >= start; i -= 6) {\\n w = parseHex(number, i, i + 6);\\n this.words[j] |= (w << off) & 0x3ffffff;\\n // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb\\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\\n off += 24;\\n if (off >= 26) {\\n off -= 26;\\n j++;\\n }\\n }\\n if (i + 6 !== start) {\\n w = parseHex(number, start, i + 6);\\n this.words[j] |= (w << off) & 0x3ffffff;\\n this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;\\n }\\n this.strip();\\n };\\n\\n function parseBase (str, start, end, mul) {\\n var r = 0;\\n var len = Math.min(str.length, end);\\n for (var i = start; i < len; i++) {\\n var c = str.charCodeAt(i) - 48;\\n\\n r *= mul;\\n\\n // 'a'\\n if (c >= 49) {\\n r += c - 49 + 0xa;\\n\\n // 'A'\\n } else if (c >= 17) {\\n r += c - 17 + 0xa;\\n\\n // '0' - '9'\\n } else {\\n r += c;\\n }\\n }\\n return r;\\n }\\n\\n BN.prototype._parseBase = function _parseBase (number, base, start) {\\n // Initialize as zero\\n this.words = [ 0 ];\\n this.length = 1;\\n\\n // Find length of limb in base\\n for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\\n limbLen++;\\n }\\n limbLen--;\\n limbPow = (limbPow / base) | 0;\\n\\n var total = number.length - start;\\n var mod = total % limbLen;\\n var end = Math.min(total, total - mod) + start;\\n\\n var word = 0;\\n for (var i = start; i < end; i += limbLen) {\\n word = parseBase(number, i, i + limbLen, base);\\n\\n this.imuln(limbPow);\\n if (this.words[0] + word < 0x4000000) {\\n this.words[0] += word;\\n } else {\\n this._iaddn(word);\\n }\\n }\\n\\n if (mod !== 0) {\\n var pow = 1;\\n word = parseBase(number, i, number.length, base);\\n\\n for (i = 0; i < mod; i++) {\\n pow *= base;\\n }\\n\\n this.imuln(pow);\\n if (this.words[0] + word < 0x4000000) {\\n this.words[0] += word;\\n } else {\\n this._iaddn(word);\\n }\\n }\\n };\\n\\n BN.prototype.copy = function copy (dest) {\\n dest.words = new Array(this.length);\\n for (var i = 0; i < this.length; i++) {\\n dest.words[i] = this.words[i];\\n }\\n dest.length = this.length;\\n dest.negative = this.negative;\\n dest.red = this.red;\\n };\\n\\n BN.prototype.clone = function clone () {\\n var r = new BN(null);\\n this.copy(r);\\n return r;\\n };\\n\\n BN.prototype._expand = function _expand (size) {\\n while (this.length < size) {\\n this.words[this.length++] = 0;\\n }\\n return this;\\n };\\n\\n // Remove leading `0` from `this`\\n BN.prototype.strip = function strip () {\\n while (this.length > 1 && this.words[this.length - 1] === 0) {\\n this.length--;\\n }\\n return this._normSign();\\n };\\n\\n BN.prototype._normSign = function _normSign () {\\n // -0 = 0\\n if (this.length === 1 && this.words[0] === 0) {\\n this.negative = 0;\\n }\\n return this;\\n };\\n\\n BN.prototype.inspect = function inspect () {\\n return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\\n };\\n\\n /*\\n\\n var zeros = [];\\n var groupSizes = [];\\n var groupBases = [];\\n\\n var s = '';\\n var i = -1;\\n while (++i < BN.wordSize) {\\n zeros[i] = s;\\n s += '0';\\n }\\n groupSizes[0] = 0;\\n groupSizes[1] = 0;\\n groupBases[0] = 0;\\n groupBases[1] = 0;\\n var base = 2 - 1;\\n while (++base < 36 + 1) {\\n var groupSize = 0;\\n var groupBase = 1;\\n while (groupBase < (1 << BN.wordSize) / base) {\\n groupBase *= base;\\n groupSize += 1;\\n }\\n groupSizes[base] = groupSize;\\n groupBases[base] = groupBase;\\n }\\n\\n */\\n\\n var zeros = [\\n '',\\n '0',\\n '00',\\n '000',\\n '0000',\\n '00000',\\n '000000',\\n '0000000',\\n '00000000',\\n '000000000',\\n '0000000000',\\n '00000000000',\\n '000000000000',\\n '0000000000000',\\n '00000000000000',\\n '000000000000000',\\n '0000000000000000',\\n '00000000000000000',\\n '000000000000000000',\\n '0000000000000000000',\\n '00000000000000000000',\\n '000000000000000000000',\\n '0000000000000000000000',\\n '00000000000000000000000',\\n '000000000000000000000000',\\n '0000000000000000000000000'\\n ];\\n\\n var groupSizes = [\\n 0, 0,\\n 25, 16, 12, 11, 10, 9, 8,\\n 8, 7, 7, 7, 7, 6, 6,\\n 6, 6, 6, 6, 6, 5, 5,\\n 5, 5, 5, 5, 5, 5, 5,\\n 5, 5, 5, 5, 5, 5, 5\\n ];\\n\\n var groupBases = [\\n 0, 0,\\n 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,\\n 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,\\n 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,\\n 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,\\n 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176\\n ];\\n\\n BN.prototype.toString = function toString (base, padding) {\\n base = base || 10;\\n padding = padding | 0 || 1;\\n\\n var out;\\n if (base === 16 || base === 'hex') {\\n out = '';\\n var off = 0;\\n var carry = 0;\\n for (var i = 0; i < this.length; i++) {\\n var w = this.words[i];\\n var word = (((w << off) | carry) & 0xffffff).toString(16);\\n carry = (w >>> (24 - off)) & 0xffffff;\\n if (carry !== 0 || i !== this.length - 1) {\\n out = zeros[6 - word.length] + word + out;\\n } else {\\n out = word + out;\\n }\\n off += 2;\\n if (off >= 26) {\\n off -= 26;\\n i--;\\n }\\n }\\n if (carry !== 0) {\\n out = carry.toString(16) + out;\\n }\\n while (out.length % padding !== 0) {\\n out = '0' + out;\\n }\\n if (this.negative !== 0) {\\n out = '-' + out;\\n }\\n return out;\\n }\\n\\n if (base === (base | 0) && base >= 2 && base <= 36) {\\n // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\\n var groupSize = groupSizes[base];\\n // var groupBase = Math.pow(base, groupSize);\\n var groupBase = groupBases[base];\\n out = '';\\n var c = this.clone();\\n c.negative = 0;\\n while (!c.isZero()) {\\n var r = c.modn(groupBase).toString(base);\\n c = c.idivn(groupBase);\\n\\n if (!c.isZero()) {\\n out = zeros[groupSize - r.length] + r + out;\\n } else {\\n out = r + out;\\n }\\n }\\n if (this.isZero()) {\\n out = '0' + out;\\n }\\n while (out.length % padding !== 0) {\\n out = '0' + out;\\n }\\n if (this.negative !== 0) {\\n out = '-' + out;\\n }\\n return out;\\n }\\n\\n assert(false, 'Base should be between 2 and 36');\\n };\\n\\n BN.prototype.toNumber = function toNumber () {\\n var ret = this.words[0];\\n if (this.length === 2) {\\n ret += this.words[1] * 0x4000000;\\n } else if (this.length === 3 && this.words[2] === 0x01) {\\n // NOTE: at this stage it is known that the top bit is set\\n ret += 0x10000000000000 + (this.words[1] * 0x4000000);\\n } else if (this.length > 2) {\\n assert(false, 'Number can only safely store up to 53 bits');\\n }\\n return (this.negative !== 0) ? -ret : ret;\\n };\\n\\n BN.prototype.toJSON = function toJSON () {\\n return this.toString(16);\\n };\\n\\n BN.prototype.toBuffer = function toBuffer (endian, length) {\\n assert(typeof Buffer !== 'undefined');\\n return this.toArrayLike(Buffer, endian, length);\\n };\\n\\n BN.prototype.toArray = function toArray (endian, length) {\\n return this.toArrayLike(Array, endian, length);\\n };\\n\\n BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {\\n var byteLength = this.byteLength();\\n var reqLength = length || Math.max(1, byteLength);\\n assert(byteLength <= reqLength, 'byte array longer than desired length');\\n assert(reqLength > 0, 'Requested array length <= 0');\\n\\n this.strip();\\n var littleEndian = endian === 'le';\\n var res = new ArrayType(reqLength);\\n\\n var b, i;\\n var q = this.clone();\\n if (!littleEndian) {\\n // Assume big-endian\\n for (i = 0; i < reqLength - byteLength; i++) {\\n res[i] = 0;\\n }\\n\\n for (i = 0; !q.isZero(); i++) {\\n b = q.andln(0xff);\\n q.iushrn(8);\\n\\n res[reqLength - i - 1] = b;\\n }\\n } else {\\n for (i = 0; !q.isZero(); i++) {\\n b = q.andln(0xff);\\n q.iushrn(8);\\n\\n res[i] = b;\\n }\\n\\n for (; i < reqLength; i++) {\\n res[i] = 0;\\n }\\n }\\n\\n return res;\\n };\\n\\n if (Math.clz32) {\\n BN.prototype._countBits = function _countBits (w) {\\n return 32 - Math.clz32(w);\\n };\\n } else {\\n BN.prototype._countBits = function _countBits (w) {\\n var t = w;\\n var r = 0;\\n if (t >= 0x1000) {\\n r += 13;\\n t >>>= 13;\\n }\\n if (t >= 0x40) {\\n r += 7;\\n t >>>= 7;\\n }\\n if (t >= 0x8) {\\n r += 4;\\n t >>>= 4;\\n }\\n if (t >= 0x02) {\\n r += 2;\\n t >>>= 2;\\n }\\n return r + t;\\n };\\n }\\n\\n BN.prototype._zeroBits = function _zeroBits (w) {\\n // Short-cut\\n if (w === 0) return 26;\\n\\n var t = w;\\n var r = 0;\\n if ((t & 0x1fff) === 0) {\\n r += 13;\\n t >>>= 13;\\n }\\n if ((t & 0x7f) === 0) {\\n r += 7;\\n t >>>= 7;\\n }\\n if ((t & 0xf) === 0) {\\n r += 4;\\n t >>>= 4;\\n }\\n if ((t & 0x3) === 0) {\\n r += 2;\\n t >>>= 2;\\n }\\n if ((t & 0x1) === 0) {\\n r++;\\n }\\n return r;\\n };\\n\\n // Return number of used bits in a BN\\n BN.prototype.bitLength = function bitLength () {\\n var w = this.words[this.length - 1];\\n var hi = this._countBits(w);\\n return (this.length - 1) * 26 + hi;\\n };\\n\\n function toBitArray (num) {\\n var w = new Array(num.bitLength());\\n\\n for (var bit = 0; bit < w.length; bit++) {\\n var off = (bit / 26) | 0;\\n var wbit = bit % 26;\\n\\n w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;\\n }\\n\\n return w;\\n }\\n\\n // Number of trailing zero bits\\n BN.prototype.zeroBits = function zeroBits () {\\n if (this.isZero()) return 0;\\n\\n var r = 0;\\n for (var i = 0; i < this.length; i++) {\\n var b = this._zeroBits(this.words[i]);\\n r += b;\\n if (b !== 26) break;\\n }\\n return r;\\n };\\n\\n BN.prototype.byteLength = function byteLength () {\\n return Math.ceil(this.bitLength() / 8);\\n };\\n\\n BN.prototype.toTwos = function toTwos (width) {\\n if (this.negative !== 0) {\\n return this.abs().inotn(width).iaddn(1);\\n }\\n return this.clone();\\n };\\n\\n BN.prototype.fromTwos = function fromTwos (width) {\\n if (this.testn(width - 1)) {\\n return this.notn(width).iaddn(1).ineg();\\n }\\n return this.clone();\\n };\\n\\n BN.prototype.isNeg = function isNeg () {\\n return this.negative !== 0;\\n };\\n\\n // Return negative clone of `this`\\n BN.prototype.neg = function neg () {\\n return this.clone().ineg();\\n };\\n\\n BN.prototype.ineg = function ineg () {\\n if (!this.isZero()) {\\n this.negative ^= 1;\\n }\\n\\n return this;\\n };\\n\\n // Or `num` with `this` in-place\\n BN.prototype.iuor = function iuor (num) {\\n while (this.length < num.length) {\\n this.words[this.length++] = 0;\\n }\\n\\n for (var i = 0; i < num.length; i++) {\\n this.words[i] = this.words[i] | num.words[i];\\n }\\n\\n return this.strip();\\n };\\n\\n BN.prototype.ior = function ior (num) {\\n assert((this.negative | num.negative) === 0);\\n return this.iuor(num);\\n };\\n\\n // Or `num` with `this`\\n BN.prototype.or = function or (num) {\\n if (this.length > num.length) return this.clone().ior(num);\\n return num.clone().ior(this);\\n };\\n\\n BN.prototype.uor = function uor (num) {\\n if (this.length > num.length) return this.clone().iuor(num);\\n return num.clone().iuor(this);\\n };\\n\\n // And `num` with `this` in-place\\n BN.prototype.iuand = function iuand (num) {\\n // b = min-length(num, this)\\n var b;\\n if (this.length > num.length) {\\n b = num;\\n } else {\\n b = this;\\n }\\n\\n for (var i = 0; i < b.length; i++) {\\n this.words[i] = this.words[i] & num.words[i];\\n }\\n\\n this.length = b.length;\\n\\n return this.strip();\\n };\\n\\n BN.prototype.iand = function iand (num) {\\n assert((this.negative | num.negative) === 0);\\n return this.iuand(num);\\n };\\n\\n // And `num` with `this`\\n BN.prototype.and = function and (num) {\\n if (this.length > num.length) return this.clone().iand(num);\\n return num.clone().iand(this);\\n };\\n\\n BN.prototype.uand = function uand (num) {\\n if (this.length > num.length) return this.clone().iuand(num);\\n return num.clone().iuand(this);\\n };\\n\\n // Xor `num` with `this` in-place\\n BN.prototype.iuxor = function iuxor (num) {\\n // a.length > b.length\\n var a;\\n var b;\\n if (this.length > num.length) {\\n a = this;\\n b = num;\\n } else {\\n a = num;\\n b = this;\\n }\\n\\n for (var i = 0; i < b.length; i++) {\\n this.words[i] = a.words[i] ^ b.words[i];\\n }\\n\\n if (this !== a) {\\n for (; i < a.length; i++) {\\n this.words[i] = a.words[i];\\n }\\n }\\n\\n this.length = a.length;\\n\\n return this.strip();\\n };\\n\\n BN.prototype.ixor = function ixor (num) {\\n assert((this.negative | num.negative) === 0);\\n return this.iuxor(num);\\n };\\n\\n // Xor `num` with `this`\\n BN.prototype.xor = function xor (num) {\\n if (this.length > num.length) return this.clone().ixor(num);\\n return num.clone().ixor(this);\\n };\\n\\n BN.prototype.uxor = function uxor (num) {\\n if (this.length > num.length) return this.clone().iuxor(num);\\n return num.clone().iuxor(this);\\n };\\n\\n // Not ``this`` with ``width`` bitwidth\\n BN.prototype.inotn = function inotn (width) {\\n assert(typeof width === 'number' && width >= 0);\\n\\n var bytesNeeded = Math.ceil(width / 26) | 0;\\n var bitsLeft = width % 26;\\n\\n // Extend the buffer with leading zeroes\\n this._expand(bytesNeeded);\\n\\n if (bitsLeft > 0) {\\n bytesNeeded--;\\n }\\n\\n // Handle complete words\\n for (var i = 0; i < bytesNeeded; i++) {\\n this.words[i] = ~this.words[i] & 0x3ffffff;\\n }\\n\\n // Handle the residue\\n if (bitsLeft > 0) {\\n this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));\\n }\\n\\n // And remove leading zeroes\\n return this.strip();\\n };\\n\\n BN.prototype.notn = function notn (width) {\\n return this.clone().inotn(width);\\n };\\n\\n // Set `bit` of `this`\\n BN.prototype.setn = function setn (bit, val) {\\n assert(typeof bit === 'number' && bit >= 0);\\n\\n var off = (bit / 26) | 0;\\n var wbit = bit % 26;\\n\\n this._expand(off + 1);\\n\\n if (val) {\\n this.words[off] = this.words[off] | (1 << wbit);\\n } else {\\n this.words[off] = this.words[off] & ~(1 << wbit);\\n }\\n\\n return this.strip();\\n };\\n\\n // Add `num` to `this` in-place\\n BN.prototype.iadd = function iadd (num) {\\n var r;\\n\\n // negative + positive\\n if (this.negative !== 0 && num.negative === 0) {\\n this.negative = 0;\\n r = this.isub(num);\\n this.negative ^= 1;\\n return this._normSign();\\n\\n // positive + negative\\n } else if (this.negative === 0 && num.negative !== 0) {\\n num.negative = 0;\\n r = this.isub(num);\\n num.negative = 1;\\n return r._normSign();\\n }\\n\\n // a.length > b.length\\n var a, b;\\n if (this.length > num.length) {\\n a = this;\\n b = num;\\n } else {\\n a = num;\\n b = this;\\n }\\n\\n var carry = 0;\\n for (var i = 0; i < b.length; i++) {\\n r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\\n this.words[i] = r & 0x3ffffff;\\n carry = r >>> 26;\\n }\\n for (; carry !== 0 && i < a.length; i++) {\\n r = (a.words[i] | 0) + carry;\\n this.words[i] = r & 0x3ffffff;\\n carry = r >>> 26;\\n }\\n\\n this.length = a.length;\\n if (carry !== 0) {\\n this.words[this.length] = carry;\\n this.length++;\\n // Copy the rest of the words\\n } else if (a !== this) {\\n for (; i < a.length; i++) {\\n this.words[i] = a.words[i];\\n }\\n }\\n\\n return this;\\n };\\n\\n // Add `num` to `this`\\n BN.prototype.add = function add (num) {\\n var res;\\n if (num.negative !== 0 && this.negative === 0) {\\n num.negative = 0;\\n res = this.sub(num);\\n num.negative ^= 1;\\n return res;\\n } else if (num.negative === 0 && this.negative !== 0) {\\n this.negative = 0;\\n res = num.sub(this);\\n this.negative = 1;\\n return res;\\n }\\n\\n if (this.length > num.length) return this.clone().iadd(num);\\n\\n return num.clone().iadd(this);\\n };\\n\\n // Subtract `num` from `this` in-place\\n BN.prototype.isub = function isub (num) {\\n // this - (-num) = this + num\\n if (num.negative !== 0) {\\n num.negative = 0;\\n var r = this.iadd(num);\\n num.negative = 1;\\n return r._normSign();\\n\\n // -this - num = -(this + num)\\n } else if (this.negative !== 0) {\\n this.negative = 0;\\n this.iadd(num);\\n this.negative = 1;\\n return this._normSign();\\n }\\n\\n // At this point both numbers are positive\\n var cmp = this.cmp(num);\\n\\n // Optimization - zeroify\\n if (cmp === 0) {\\n this.negative = 0;\\n this.length = 1;\\n this.words[0] = 0;\\n return this;\\n }\\n\\n // a > b\\n var a, b;\\n if (cmp > 0) {\\n a = this;\\n b = num;\\n } else {\\n a = num;\\n b = this;\\n }\\n\\n var carry = 0;\\n for (var i = 0; i < b.length; i++) {\\n r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\\n carry = r >> 26;\\n this.words[i] = r & 0x3ffffff;\\n }\\n for (; carry !== 0 && i < a.length; i++) {\\n r = (a.words[i] | 0) + carry;\\n carry = r >> 26;\\n this.words[i] = r & 0x3ffffff;\\n }\\n\\n // Copy rest of the words\\n if (carry === 0 && i < a.length && a !== this) {\\n for (; i < a.length; i++) {\\n this.words[i] = a.words[i];\\n }\\n }\\n\\n this.length = Math.max(this.length, i);\\n\\n if (a !== this) {\\n this.negative = 1;\\n }\\n\\n return this.strip();\\n };\\n\\n // Subtract `num` from `this`\\n BN.prototype.sub = function sub (num) {\\n return this.clone().isub(num);\\n };\\n\\n function smallMulTo (self, num, out) {\\n out.negative = num.negative ^ self.negative;\\n var len = (self.length + num.length) | 0;\\n out.length = len;\\n len = (len - 1) | 0;\\n\\n // Peel one iteration (compiler can't do it, because of code complexity)\\n var a = self.words[0] | 0;\\n var b = num.words[0] | 0;\\n var r = a * b;\\n\\n var lo = r & 0x3ffffff;\\n var carry = (r / 0x4000000) | 0;\\n out.words[0] = lo;\\n\\n for (var k = 1; k < len; k++) {\\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\\n // note that ncarry could be >= 0x3ffffff\\n var ncarry = carry >>> 26;\\n var rword = carry & 0x3ffffff;\\n var maxJ = Math.min(k, num.length - 1);\\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\\n var i = (k - j) | 0;\\n a = self.words[i] | 0;\\n b = num.words[j] | 0;\\n r = a * b + rword;\\n ncarry += (r / 0x4000000) | 0;\\n rword = r & 0x3ffffff;\\n }\\n out.words[k] = rword | 0;\\n carry = ncarry | 0;\\n }\\n if (carry !== 0) {\\n out.words[k] = carry | 0;\\n } else {\\n out.length--;\\n }\\n\\n return out.strip();\\n }\\n\\n // TODO(indutny): it may be reasonable to omit it for users who don't need\\n // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\\n // multiplication (like elliptic secp256k1).\\n var comb10MulTo = function comb10MulTo (self, num, out) {\\n var a = self.words;\\n var b = num.words;\\n var o = out.words;\\n var c = 0;\\n var lo;\\n var mid;\\n var hi;\\n var a0 = a[0] | 0;\\n var al0 = a0 & 0x1fff;\\n var ah0 = a0 >>> 13;\\n var a1 = a[1] | 0;\\n var al1 = a1 & 0x1fff;\\n var ah1 = a1 >>> 13;\\n var a2 = a[2] | 0;\\n var al2 = a2 & 0x1fff;\\n var ah2 = a2 >>> 13;\\n var a3 = a[3] | 0;\\n var al3 = a3 & 0x1fff;\\n var ah3 = a3 >>> 13;\\n var a4 = a[4] | 0;\\n var al4 = a4 & 0x1fff;\\n var ah4 = a4 >>> 13;\\n var a5 = a[5] | 0;\\n var al5 = a5 & 0x1fff;\\n var ah5 = a5 >>> 13;\\n var a6 = a[6] | 0;\\n var al6 = a6 & 0x1fff;\\n var ah6 = a6 >>> 13;\\n var a7 = a[7] | 0;\\n var al7 = a7 & 0x1fff;\\n var ah7 = a7 >>> 13;\\n var a8 = a[8] | 0;\\n var al8 = a8 & 0x1fff;\\n var ah8 = a8 >>> 13;\\n var a9 = a[9] | 0;\\n var al9 = a9 & 0x1fff;\\n var ah9 = a9 >>> 13;\\n var b0 = b[0] | 0;\\n var bl0 = b0 & 0x1fff;\\n var bh0 = b0 >>> 13;\\n var b1 = b[1] | 0;\\n var bl1 = b1 & 0x1fff;\\n var bh1 = b1 >>> 13;\\n var b2 = b[2] | 0;\\n var bl2 = b2 & 0x1fff;\\n var bh2 = b2 >>> 13;\\n var b3 = b[3] | 0;\\n var bl3 = b3 & 0x1fff;\\n var bh3 = b3 >>> 13;\\n var b4 = b[4] | 0;\\n var bl4 = b4 & 0x1fff;\\n var bh4 = b4 >>> 13;\\n var b5 = b[5] | 0;\\n var bl5 = b5 & 0x1fff;\\n var bh5 = b5 >>> 13;\\n var b6 = b[6] | 0;\\n var bl6 = b6 & 0x1fff;\\n var bh6 = b6 >>> 13;\\n var b7 = b[7] | 0;\\n var bl7 = b7 & 0x1fff;\\n var bh7 = b7 >>> 13;\\n var b8 = b[8] | 0;\\n var bl8 = b8 & 0x1fff;\\n var bh8 = b8 >>> 13;\\n var b9 = b[9] | 0;\\n var bl9 = b9 & 0x1fff;\\n var bh9 = b9 >>> 13;\\n\\n out.negative = self.negative ^ num.negative;\\n out.length = 19;\\n /* k = 0 */\\n lo = Math.imul(al0, bl0);\\n mid = Math.imul(al0, bh0);\\n mid = (mid + Math.imul(ah0, bl0)) | 0;\\n hi = Math.imul(ah0, bh0);\\n var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;\\n w0 &= 0x3ffffff;\\n /* k = 1 */\\n lo = Math.imul(al1, bl0);\\n mid = Math.imul(al1, bh0);\\n mid = (mid + Math.imul(ah1, bl0)) | 0;\\n hi = Math.imul(ah1, bh0);\\n lo = (lo + Math.imul(al0, bl1)) | 0;\\n mid = (mid + Math.imul(al0, bh1)) | 0;\\n mid = (mid + Math.imul(ah0, bl1)) | 0;\\n hi = (hi + Math.imul(ah0, bh1)) | 0;\\n var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;\\n w1 &= 0x3ffffff;\\n /* k = 2 */\\n lo = Math.imul(al2, bl0);\\n mid = Math.imul(al2, bh0);\\n mid = (mid + Math.imul(ah2, bl0)) | 0;\\n hi = Math.imul(ah2, bh0);\\n lo = (lo + Math.imul(al1, bl1)) | 0;\\n mid = (mid + Math.imul(al1, bh1)) | 0;\\n mid = (mid + Math.imul(ah1, bl1)) | 0;\\n hi = (hi + Math.imul(ah1, bh1)) | 0;\\n lo = (lo + Math.imul(al0, bl2)) | 0;\\n mid = (mid + Math.imul(al0, bh2)) | 0;\\n mid = (mid + Math.imul(ah0, bl2)) | 0;\\n hi = (hi + Math.imul(ah0, bh2)) | 0;\\n var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;\\n w2 &= 0x3ffffff;\\n /* k = 3 */\\n lo = Math.imul(al3, bl0);\\n mid = Math.imul(al3, bh0);\\n mid = (mid + Math.imul(ah3, bl0)) | 0;\\n hi = Math.imul(ah3, bh0);\\n lo = (lo + Math.imul(al2, bl1)) | 0;\\n mid = (mid + Math.imul(al2, bh1)) | 0;\\n mid = (mid + Math.imul(ah2, bl1)) | 0;\\n hi = (hi + Math.imul(ah2, bh1)) | 0;\\n lo = (lo + Math.imul(al1, bl2)) | 0;\\n mid = (mid + Math.imul(al1, bh2)) | 0;\\n mid = (mid + Math.imul(ah1, bl2)) | 0;\\n hi = (hi + Math.imul(ah1, bh2)) | 0;\\n lo = (lo + Math.imul(al0, bl3)) | 0;\\n mid = (mid + Math.imul(al0, bh3)) | 0;\\n mid = (mid + Math.imul(ah0, bl3)) | 0;\\n hi = (hi + Math.imul(ah0, bh3)) | 0;\\n var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;\\n w3 &= 0x3ffffff;\\n /* k = 4 */\\n lo = Math.imul(al4, bl0);\\n mid = Math.imul(al4, bh0);\\n mid = (mid + Math.imul(ah4, bl0)) | 0;\\n hi = Math.imul(ah4, bh0);\\n lo = (lo + Math.imul(al3, bl1)) | 0;\\n mid = (mid + Math.imul(al3, bh1)) | 0;\\n mid = (mid + Math.imul(ah3, bl1)) | 0;\\n hi = (hi + Math.imul(ah3, bh1)) | 0;\\n lo = (lo + Math.imul(al2, bl2)) | 0;\\n mid = (mid + Math.imul(al2, bh2)) | 0;\\n mid = (mid + Math.imul(ah2, bl2)) | 0;\\n hi = (hi + Math.imul(ah2, bh2)) | 0;\\n lo = (lo + Math.imul(al1, bl3)) | 0;\\n mid = (mid + Math.imul(al1, bh3)) | 0;\\n mid = (mid + Math.imul(ah1, bl3)) | 0;\\n hi = (hi + Math.imul(ah1, bh3)) | 0;\\n lo = (lo + Math.imul(al0, bl4)) | 0;\\n mid = (mid + Math.imul(al0, bh4)) | 0;\\n mid = (mid + Math.imul(ah0, bl4)) | 0;\\n hi = (hi + Math.imul(ah0, bh4)) | 0;\\n var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;\\n w4 &= 0x3ffffff;\\n /* k = 5 */\\n lo = Math.imul(al5, bl0);\\n mid = Math.imul(al5, bh0);\\n mid = (mid + Math.imul(ah5, bl0)) | 0;\\n hi = Math.imul(ah5, bh0);\\n lo = (lo + Math.imul(al4, bl1)) | 0;\\n mid = (mid + Math.imul(al4, bh1)) | 0;\\n mid = (mid + Math.imul(ah4, bl1)) | 0;\\n hi = (hi + Math.imul(ah4, bh1)) | 0;\\n lo = (lo + Math.imul(al3, bl2)) | 0;\\n mid = (mid + Math.imul(al3, bh2)) | 0;\\n mid = (mid + Math.imul(ah3, bl2)) | 0;\\n hi = (hi + Math.imul(ah3, bh2)) | 0;\\n lo = (lo + Math.imul(al2, bl3)) | 0;\\n mid = (mid + Math.imul(al2, bh3)) | 0;\\n mid = (mid + Math.imul(ah2, bl3)) | 0;\\n hi = (hi + Math.imul(ah2, bh3)) | 0;\\n lo = (lo + Math.imul(al1, bl4)) | 0;\\n mid = (mid + Math.imul(al1, bh4)) | 0;\\n mid = (mid + Math.imul(ah1, bl4)) | 0;\\n hi = (hi + Math.imul(ah1, bh4)) | 0;\\n lo = (lo + Math.imul(al0, bl5)) | 0;\\n mid = (mid + Math.imul(al0, bh5)) | 0;\\n mid = (mid + Math.imul(ah0, bl5)) | 0;\\n hi = (hi + Math.imul(ah0, bh5)) | 0;\\n var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;\\n w5 &= 0x3ffffff;\\n /* k = 6 */\\n lo = Math.imul(al6, bl0);\\n mid = Math.imul(al6, bh0);\\n mid = (mid + Math.imul(ah6, bl0)) | 0;\\n hi = Math.imul(ah6, bh0);\\n lo = (lo + Math.imul(al5, bl1)) | 0;\\n mid = (mid + Math.imul(al5, bh1)) | 0;\\n mid = (mid + Math.imul(ah5, bl1)) | 0;\\n hi = (hi + Math.imul(ah5, bh1)) | 0;\\n lo = (lo + Math.imul(al4, bl2)) | 0;\\n mid = (mid + Math.imul(al4, bh2)) | 0;\\n mid = (mid + Math.imul(ah4, bl2)) | 0;\\n hi = (hi + Math.imul(ah4, bh2)) | 0;\\n lo = (lo + Math.imul(al3, bl3)) | 0;\\n mid = (mid + Math.imul(al3, bh3)) | 0;\\n mid = (mid + Math.imul(ah3, bl3)) | 0;\\n hi = (hi + Math.imul(ah3, bh3)) | 0;\\n lo = (lo + Math.imul(al2, bl4)) | 0;\\n mid = (mid + Math.imul(al2, bh4)) | 0;\\n mid = (mid + Math.imul(ah2, bl4)) | 0;\\n hi = (hi + Math.imul(ah2, bh4)) | 0;\\n lo = (lo + Math.imul(al1, bl5)) | 0;\\n mid = (mid + Math.imul(al1, bh5)) | 0;\\n mid = (mid + Math.imul(ah1, bl5)) | 0;\\n hi = (hi + Math.imul(ah1, bh5)) | 0;\\n lo = (lo + Math.imul(al0, bl6)) | 0;\\n mid = (mid + Math.imul(al0, bh6)) | 0;\\n mid = (mid + Math.imul(ah0, bl6)) | 0;\\n hi = (hi + Math.imul(ah0, bh6)) | 0;\\n var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;\\n w6 &= 0x3ffffff;\\n /* k = 7 */\\n lo = Math.imul(al7, bl0);\\n mid = Math.imul(al7, bh0);\\n mid = (mid + Math.imul(ah7, bl0)) | 0;\\n hi = Math.imul(ah7, bh0);\\n lo = (lo + Math.imul(al6, bl1)) | 0;\\n mid = (mid + Math.imul(al6, bh1)) | 0;\\n mid = (mid + Math.imul(ah6, bl1)) | 0;\\n hi = (hi + Math.imul(ah6, bh1)) | 0;\\n lo = (lo + Math.imul(al5, bl2)) | 0;\\n mid = (mid + Math.imul(al5, bh2)) | 0;\\n mid = (mid + Math.imul(ah5, bl2)) | 0;\\n hi = (hi + Math.imul(ah5, bh2)) | 0;\\n lo = (lo + Math.imul(al4, bl3)) | 0;\\n mid = (mid + Math.imul(al4, bh3)) | 0;\\n mid = (mid + Math.imul(ah4, bl3)) | 0;\\n hi = (hi + Math.imul(ah4, bh3)) | 0;\\n lo = (lo + Math.imul(al3, bl4)) | 0;\\n mid = (mid + Math.imul(al3, bh4)) | 0;\\n mid = (mid + Math.imul(ah3, bl4)) | 0;\\n hi = (hi + Math.imul(ah3, bh4)) | 0;\\n lo = (lo + Math.imul(al2, bl5)) | 0;\\n mid = (mid + Math.imul(al2, bh5)) | 0;\\n mid = (mid + Math.imul(ah2, bl5)) | 0;\\n hi = (hi + Math.imul(ah2, bh5)) | 0;\\n lo = (lo + Math.imul(al1, bl6)) | 0;\\n mid = (mid + Math.imul(al1, bh6)) | 0;\\n mid = (mid + Math.imul(ah1, bl6)) | 0;\\n hi = (hi + Math.imul(ah1, bh6)) | 0;\\n lo = (lo + Math.imul(al0, bl7)) | 0;\\n mid = (mid + Math.imul(al0, bh7)) | 0;\\n mid = (mid + Math.imul(ah0, bl7)) | 0;\\n hi = (hi + Math.imul(ah0, bh7)) | 0;\\n var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;\\n w7 &= 0x3ffffff;\\n /* k = 8 */\\n lo = Math.imul(al8, bl0);\\n mid = Math.imul(al8, bh0);\\n mid = (mid + Math.imul(ah8, bl0)) | 0;\\n hi = Math.imul(ah8, bh0);\\n lo = (lo + Math.imul(al7, bl1)) | 0;\\n mid = (mid + Math.imul(al7, bh1)) | 0;\\n mid = (mid + Math.imul(ah7, bl1)) | 0;\\n hi = (hi + Math.imul(ah7, bh1)) | 0;\\n lo = (lo + Math.imul(al6, bl2)) | 0;\\n mid = (mid + Math.imul(al6, bh2)) | 0;\\n mid = (mid + Math.imul(ah6, bl2)) | 0;\\n hi = (hi + Math.imul(ah6, bh2)) | 0;\\n lo = (lo + Math.imul(al5, bl3)) | 0;\\n mid = (mid + Math.imul(al5, bh3)) | 0;\\n mid = (mid + Math.imul(ah5, bl3)) | 0;\\n hi = (hi + Math.imul(ah5, bh3)) | 0;\\n lo = (lo + Math.imul(al4, bl4)) | 0;\\n mid = (mid + Math.imul(al4, bh4)) | 0;\\n mid = (mid + Math.imul(ah4, bl4)) | 0;\\n hi = (hi + Math.imul(ah4, bh4)) | 0;\\n lo = (lo + Math.imul(al3, bl5)) | 0;\\n mid = (mid + Math.imul(al3, bh5)) | 0;\\n mid = (mid + Math.imul(ah3, bl5)) | 0;\\n hi = (hi + Math.imul(ah3, bh5)) | 0;\\n lo = (lo + Math.imul(al2, bl6)) | 0;\\n mid = (mid + Math.imul(al2, bh6)) | 0;\\n mid = (mid + Math.imul(ah2, bl6)) | 0;\\n hi = (hi + Math.imul(ah2, bh6)) | 0;\\n lo = (lo + Math.imul(al1, bl7)) | 0;\\n mid = (mid + Math.imul(al1, bh7)) | 0;\\n mid = (mid + Math.imul(ah1, bl7)) | 0;\\n hi = (hi + Math.imul(ah1, bh7)) | 0;\\n lo = (lo + Math.imul(al0, bl8)) | 0;\\n mid = (mid + Math.imul(al0, bh8)) | 0;\\n mid = (mid + Math.imul(ah0, bl8)) | 0;\\n hi = (hi + Math.imul(ah0, bh8)) | 0;\\n var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;\\n w8 &= 0x3ffffff;\\n /* k = 9 */\\n lo = Math.imul(al9, bl0);\\n mid = Math.imul(al9, bh0);\\n mid = (mid + Math.imul(ah9, bl0)) | 0;\\n hi = Math.imul(ah9, bh0);\\n lo = (lo + Math.imul(al8, bl1)) | 0;\\n mid = (mid + Math.imul(al8, bh1)) | 0;\\n mid = (mid + Math.imul(ah8, bl1)) | 0;\\n hi = (hi + Math.imul(ah8, bh1)) | 0;\\n lo = (lo + Math.imul(al7, bl2)) | 0;\\n mid = (mid + Math.imul(al7, bh2)) | 0;\\n mid = (mid + Math.imul(ah7, bl2)) | 0;\\n hi = (hi + Math.imul(ah7, bh2)) | 0;\\n lo = (lo + Math.imul(al6, bl3)) | 0;\\n mid = (mid + Math.imul(al6, bh3)) | 0;\\n mid = (mid + Math.imul(ah6, bl3)) | 0;\\n hi = (hi + Math.imul(ah6, bh3)) | 0;\\n lo = (lo + Math.imul(al5, bl4)) | 0;\\n mid = (mid + Math.imul(al5, bh4)) | 0;\\n mid = (mid + Math.imul(ah5, bl4)) | 0;\\n hi = (hi + Math.imul(ah5, bh4)) | 0;\\n lo = (lo + Math.imul(al4, bl5)) | 0;\\n mid = (mid + Math.imul(al4, bh5)) | 0;\\n mid = (mid + Math.imul(ah4, bl5)) | 0;\\n hi = (hi + Math.imul(ah4, bh5)) | 0;\\n lo = (lo + Math.imul(al3, bl6)) | 0;\\n mid = (mid + Math.imul(al3, bh6)) | 0;\\n mid = (mid + Math.imul(ah3, bl6)) | 0;\\n hi = (hi + Math.imul(ah3, bh6)) | 0;\\n lo = (lo + Math.imul(al2, bl7)) | 0;\\n mid = (mid + Math.imul(al2, bh7)) | 0;\\n mid = (mid + Math.imul(ah2, bl7)) | 0;\\n hi = (hi + Math.imul(ah2, bh7)) | 0;\\n lo = (lo + Math.imul(al1, bl8)) | 0;\\n mid = (mid + Math.imul(al1, bh8)) | 0;\\n mid = (mid + Math.imul(ah1, bl8)) | 0;\\n hi = (hi + Math.imul(ah1, bh8)) | 0;\\n lo = (lo + Math.imul(al0, bl9)) | 0;\\n mid = (mid + Math.imul(al0, bh9)) | 0;\\n mid = (mid + Math.imul(ah0, bl9)) | 0;\\n hi = (hi + Math.imul(ah0, bh9)) | 0;\\n var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;\\n w9 &= 0x3ffffff;\\n /* k = 10 */\\n lo = Math.imul(al9, bl1);\\n mid = Math.imul(al9, bh1);\\n mid = (mid + Math.imul(ah9, bl1)) | 0;\\n hi = Math.imul(ah9, bh1);\\n lo = (lo + Math.imul(al8, bl2)) | 0;\\n mid = (mid + Math.imul(al8, bh2)) | 0;\\n mid = (mid + Math.imul(ah8, bl2)) | 0;\\n hi = (hi + Math.imul(ah8, bh2)) | 0;\\n lo = (lo + Math.imul(al7, bl3)) | 0;\\n mid = (mid + Math.imul(al7, bh3)) | 0;\\n mid = (mid + Math.imul(ah7, bl3)) | 0;\\n hi = (hi + Math.imul(ah7, bh3)) | 0;\\n lo = (lo + Math.imul(al6, bl4)) | 0;\\n mid = (mid + Math.imul(al6, bh4)) | 0;\\n mid = (mid + Math.imul(ah6, bl4)) | 0;\\n hi = (hi + Math.imul(ah6, bh4)) | 0;\\n lo = (lo + Math.imul(al5, bl5)) | 0;\\n mid = (mid + Math.imul(al5, bh5)) | 0;\\n mid = (mid + Math.imul(ah5, bl5)) | 0;\\n hi = (hi + Math.imul(ah5, bh5)) | 0;\\n lo = (lo + Math.imul(al4, bl6)) | 0;\\n mid = (mid + Math.imul(al4, bh6)) | 0;\\n mid = (mid + Math.imul(ah4, bl6)) | 0;\\n hi = (hi + Math.imul(ah4, bh6)) | 0;\\n lo = (lo + Math.imul(al3, bl7)) | 0;\\n mid = (mid + Math.imul(al3, bh7)) | 0;\\n mid = (mid + Math.imul(ah3, bl7)) | 0;\\n hi = (hi + Math.imul(ah3, bh7)) | 0;\\n lo = (lo + Math.imul(al2, bl8)) | 0;\\n mid = (mid + Math.imul(al2, bh8)) | 0;\\n mid = (mid + Math.imul(ah2, bl8)) | 0;\\n hi = (hi + Math.imul(ah2, bh8)) | 0;\\n lo = (lo + Math.imul(al1, bl9)) | 0;\\n mid = (mid + Math.imul(al1, bh9)) | 0;\\n mid = (mid + Math.imul(ah1, bl9)) | 0;\\n hi = (hi + Math.imul(ah1, bh9)) | 0;\\n var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;\\n w10 &= 0x3ffffff;\\n /* k = 11 */\\n lo = Math.imul(al9, bl2);\\n mid = Math.imul(al9, bh2);\\n mid = (mid + Math.imul(ah9, bl2)) | 0;\\n hi = Math.imul(ah9, bh2);\\n lo = (lo + Math.imul(al8, bl3)) | 0;\\n mid = (mid + Math.imul(al8, bh3)) | 0;\\n mid = (mid + Math.imul(ah8, bl3)) | 0;\\n hi = (hi + Math.imul(ah8, bh3)) | 0;\\n lo = (lo + Math.imul(al7, bl4)) | 0;\\n mid = (mid + Math.imul(al7, bh4)) | 0;\\n mid = (mid + Math.imul(ah7, bl4)) | 0;\\n hi = (hi + Math.imul(ah7, bh4)) | 0;\\n lo = (lo + Math.imul(al6, bl5)) | 0;\\n mid = (mid + Math.imul(al6, bh5)) | 0;\\n mid = (mid + Math.imul(ah6, bl5)) | 0;\\n hi = (hi + Math.imul(ah6, bh5)) | 0;\\n lo = (lo + Math.imul(al5, bl6)) | 0;\\n mid = (mid + Math.imul(al5, bh6)) | 0;\\n mid = (mid + Math.imul(ah5, bl6)) | 0;\\n hi = (hi + Math.imul(ah5, bh6)) | 0;\\n lo = (lo + Math.imul(al4, bl7)) | 0;\\n mid = (mid + Math.imul(al4, bh7)) | 0;\\n mid = (mid + Math.imul(ah4, bl7)) | 0;\\n hi = (hi + Math.imul(ah4, bh7)) | 0;\\n lo = (lo + Math.imul(al3, bl8)) | 0;\\n mid = (mid + Math.imul(al3, bh8)) | 0;\\n mid = (mid + Math.imul(ah3, bl8)) | 0;\\n hi = (hi + Math.imul(ah3, bh8)) | 0;\\n lo = (lo + Math.imul(al2, bl9)) | 0;\\n mid = (mid + Math.imul(al2, bh9)) | 0;\\n mid = (mid + Math.imul(ah2, bl9)) | 0;\\n hi = (hi + Math.imul(ah2, bh9)) | 0;\\n var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;\\n w11 &= 0x3ffffff;\\n /* k = 12 */\\n lo = Math.imul(al9, bl3);\\n mid = Math.imul(al9, bh3);\\n mid = (mid + Math.imul(ah9, bl3)) | 0;\\n hi = Math.imul(ah9, bh3);\\n lo = (lo + Math.imul(al8, bl4)) | 0;\\n mid = (mid + Math.imul(al8, bh4)) | 0;\\n mid = (mid + Math.imul(ah8, bl4)) | 0;\\n hi = (hi + Math.imul(ah8, bh4)) | 0;\\n lo = (lo + Math.imul(al7, bl5)) | 0;\\n mid = (mid + Math.imul(al7, bh5)) | 0;\\n mid = (mid + Math.imul(ah7, bl5)) | 0;\\n hi = (hi + Math.imul(ah7, bh5)) | 0;\\n lo = (lo + Math.imul(al6, bl6)) | 0;\\n mid = (mid + Math.imul(al6, bh6)) | 0;\\n mid = (mid + Math.imul(ah6, bl6)) | 0;\\n hi = (hi + Math.imul(ah6, bh6)) | 0;\\n lo = (lo + Math.imul(al5, bl7)) | 0;\\n mid = (mid + Math.imul(al5, bh7)) | 0;\\n mid = (mid + Math.imul(ah5, bl7)) | 0;\\n hi = (hi + Math.imul(ah5, bh7)) | 0;\\n lo = (lo + Math.imul(al4, bl8)) | 0;\\n mid = (mid + Math.imul(al4, bh8)) | 0;\\n mid = (mid + Math.imul(ah4, bl8)) | 0;\\n hi = (hi + Math.imul(ah4, bh8)) | 0;\\n lo = (lo + Math.imul(al3, bl9)) | 0;\\n mid = (mid + Math.imul(al3, bh9)) | 0;\\n mid = (mid + Math.imul(ah3, bl9)) | 0;\\n hi = (hi + Math.imul(ah3, bh9)) | 0;\\n var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;\\n w12 &= 0x3ffffff;\\n /* k = 13 */\\n lo = Math.imul(al9, bl4);\\n mid = Math.imul(al9, bh4);\\n mid = (mid + Math.imul(ah9, bl4)) | 0;\\n hi = Math.imul(ah9, bh4);\\n lo = (lo + Math.imul(al8, bl5)) | 0;\\n mid = (mid + Math.imul(al8, bh5)) | 0;\\n mid = (mid + Math.imul(ah8, bl5)) | 0;\\n hi = (hi + Math.imul(ah8, bh5)) | 0;\\n lo = (lo + Math.imul(al7, bl6)) | 0;\\n mid = (mid + Math.imul(al7, bh6)) | 0;\\n mid = (mid + Math.imul(ah7, bl6)) | 0;\\n hi = (hi + Math.imul(ah7, bh6)) | 0;\\n lo = (lo + Math.imul(al6, bl7)) | 0;\\n mid = (mid + Math.imul(al6, bh7)) | 0;\\n mid = (mid + Math.imul(ah6, bl7)) | 0;\\n hi = (hi + Math.imul(ah6, bh7)) | 0;\\n lo = (lo + Math.imul(al5, bl8)) | 0;\\n mid = (mid + Math.imul(al5, bh8)) | 0;\\n mid = (mid + Math.imul(ah5, bl8)) | 0;\\n hi = (hi + Math.imul(ah5, bh8)) | 0;\\n lo = (lo + Math.imul(al4, bl9)) | 0;\\n mid = (mid + Math.imul(al4, bh9)) | 0;\\n mid = (mid + Math.imul(ah4, bl9)) | 0;\\n hi = (hi + Math.imul(ah4, bh9)) | 0;\\n var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;\\n w13 &= 0x3ffffff;\\n /* k = 14 */\\n lo = Math.imul(al9, bl5);\\n mid = Math.imul(al9, bh5);\\n mid = (mid + Math.imul(ah9, bl5)) | 0;\\n hi = Math.imul(ah9, bh5);\\n lo = (lo + Math.imul(al8, bl6)) | 0;\\n mid = (mid + Math.imul(al8, bh6)) | 0;\\n mid = (mid + Math.imul(ah8, bl6)) | 0;\\n hi = (hi + Math.imul(ah8, bh6)) | 0;\\n lo = (lo + Math.imul(al7, bl7)) | 0;\\n mid = (mid + Math.imul(al7, bh7)) | 0;\\n mid = (mid + Math.imul(ah7, bl7)) | 0;\\n hi = (hi + Math.imul(ah7, bh7)) | 0;\\n lo = (lo + Math.imul(al6, bl8)) | 0;\\n mid = (mid + Math.imul(al6, bh8)) | 0;\\n mid = (mid + Math.imul(ah6, bl8)) | 0;\\n hi = (hi + Math.imul(ah6, bh8)) | 0;\\n lo = (lo + Math.imul(al5, bl9)) | 0;\\n mid = (mid + Math.imul(al5, bh9)) | 0;\\n mid = (mid + Math.imul(ah5, bl9)) | 0;\\n hi = (hi + Math.imul(ah5, bh9)) | 0;\\n var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;\\n w14 &= 0x3ffffff;\\n /* k = 15 */\\n lo = Math.imul(al9, bl6);\\n mid = Math.imul(al9, bh6);\\n mid = (mid + Math.imul(ah9, bl6)) | 0;\\n hi = Math.imul(ah9, bh6);\\n lo = (lo + Math.imul(al8, bl7)) | 0;\\n mid = (mid + Math.imul(al8, bh7)) | 0;\\n mid = (mid + Math.imul(ah8, bl7)) | 0;\\n hi = (hi + Math.imul(ah8, bh7)) | 0;\\n lo = (lo + Math.imul(al7, bl8)) | 0;\\n mid = (mid + Math.imul(al7, bh8)) | 0;\\n mid = (mid + Math.imul(ah7, bl8)) | 0;\\n hi = (hi + Math.imul(ah7, bh8)) | 0;\\n lo = (lo + Math.imul(al6, bl9)) | 0;\\n mid = (mid + Math.imul(al6, bh9)) | 0;\\n mid = (mid + Math.imul(ah6, bl9)) | 0;\\n hi = (hi + Math.imul(ah6, bh9)) | 0;\\n var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;\\n w15 &= 0x3ffffff;\\n /* k = 16 */\\n lo = Math.imul(al9, bl7);\\n mid = Math.imul(al9, bh7);\\n mid = (mid + Math.imul(ah9, bl7)) | 0;\\n hi = Math.imul(ah9, bh7);\\n lo = (lo + Math.imul(al8, bl8)) | 0;\\n mid = (mid + Math.imul(al8, bh8)) | 0;\\n mid = (mid + Math.imul(ah8, bl8)) | 0;\\n hi = (hi + Math.imul(ah8, bh8)) | 0;\\n lo = (lo + Math.imul(al7, bl9)) | 0;\\n mid = (mid + Math.imul(al7, bh9)) | 0;\\n mid = (mid + Math.imul(ah7, bl9)) | 0;\\n hi = (hi + Math.imul(ah7, bh9)) | 0;\\n var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;\\n w16 &= 0x3ffffff;\\n /* k = 17 */\\n lo = Math.imul(al9, bl8);\\n mid = Math.imul(al9, bh8);\\n mid = (mid + Math.imul(ah9, bl8)) | 0;\\n hi = Math.imul(ah9, bh8);\\n lo = (lo + Math.imul(al8, bl9)) | 0;\\n mid = (mid + Math.imul(al8, bh9)) | 0;\\n mid = (mid + Math.imul(ah8, bl9)) | 0;\\n hi = (hi + Math.imul(ah8, bh9)) | 0;\\n var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;\\n w17 &= 0x3ffffff;\\n /* k = 18 */\\n lo = Math.imul(al9, bl9);\\n mid = Math.imul(al9, bh9);\\n mid = (mid + Math.imul(ah9, bl9)) | 0;\\n hi = Math.imul(ah9, bh9);\\n var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;\\n c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;\\n w18 &= 0x3ffffff;\\n o[0] = w0;\\n o[1] = w1;\\n o[2] = w2;\\n o[3] = w3;\\n o[4] = w4;\\n o[5] = w5;\\n o[6] = w6;\\n o[7] = w7;\\n o[8] = w8;\\n o[9] = w9;\\n o[10] = w10;\\n o[11] = w11;\\n o[12] = w12;\\n o[13] = w13;\\n o[14] = w14;\\n o[15] = w15;\\n o[16] = w16;\\n o[17] = w17;\\n o[18] = w18;\\n if (c !== 0) {\\n o[19] = c;\\n out.length++;\\n }\\n return out;\\n };\\n\\n // Polyfill comb\\n if (!Math.imul) {\\n comb10MulTo = smallMulTo;\\n }\\n\\n function bigMulTo (self, num, out) {\\n out.negative = num.negative ^ self.negative;\\n out.length = self.length + num.length;\\n\\n var carry = 0;\\n var hncarry = 0;\\n for (var k = 0; k < out.length - 1; k++) {\\n // Sum all words with the same `i + j = k` and accumulate `ncarry`,\\n // note that ncarry could be >= 0x3ffffff\\n var ncarry = hncarry;\\n hncarry = 0;\\n var rword = carry & 0x3ffffff;\\n var maxJ = Math.min(k, num.length - 1);\\n for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\\n var i = k - j;\\n var a = self.words[i] | 0;\\n var b = num.words[j] | 0;\\n var r = a * b;\\n\\n var lo = r & 0x3ffffff;\\n ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;\\n lo = (lo + rword) | 0;\\n rword = lo & 0x3ffffff;\\n ncarry = (ncarry + (lo >>> 26)) | 0;\\n\\n hncarry += ncarry >>> 26;\\n ncarry &= 0x3ffffff;\\n }\\n out.words[k] = rword;\\n carry = ncarry;\\n ncarry = hncarry;\\n }\\n if (carry !== 0) {\\n out.words[k] = carry;\\n } else {\\n out.length--;\\n }\\n\\n return out.strip();\\n }\\n\\n function jumboMulTo (self, num, out) {\\n var fftm = new FFTM();\\n return fftm.mulp(self, num, out);\\n }\\n\\n BN.prototype.mulTo = function mulTo (num, out) {\\n var res;\\n var len = this.length + num.length;\\n if (this.length === 10 && num.length === 10) {\\n res = comb10MulTo(this, num, out);\\n } else if (len < 63) {\\n res = smallMulTo(this, num, out);\\n } else if (len < 1024) {\\n res = bigMulTo(this, num, out);\\n } else {\\n res = jumboMulTo(this, num, out);\\n }\\n\\n return res;\\n };\\n\\n // Cooley-Tukey algorithm for FFT\\n // slightly revisited to rely on looping instead of recursion\\n\\n function FFTM (x, y) {\\n this.x = x;\\n this.y = y;\\n }\\n\\n FFTM.prototype.makeRBT = function makeRBT (N) {\\n var t = new Array(N);\\n var l = BN.prototype._countBits(N) - 1;\\n for (var i = 0; i < N; i++) {\\n t[i] = this.revBin(i, l, N);\\n }\\n\\n return t;\\n };\\n\\n // Returns binary-reversed representation of `x`\\n FFTM.prototype.revBin = function revBin (x, l, N) {\\n if (x === 0 || x === N - 1) return x;\\n\\n var rb = 0;\\n for (var i = 0; i < l; i++) {\\n rb |= (x & 1) << (l - i - 1);\\n x >>= 1;\\n }\\n\\n return rb;\\n };\\n\\n // Performs \\\"tweedling\\\" phase, therefore 'emulating'\\n // behaviour of the recursive algorithm\\n FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {\\n for (var i = 0; i < N; i++) {\\n rtws[i] = rws[rbt[i]];\\n itws[i] = iws[rbt[i]];\\n }\\n };\\n\\n FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {\\n this.permute(rbt, rws, iws, rtws, itws, N);\\n\\n for (var s = 1; s < N; s <<= 1) {\\n var l = s << 1;\\n\\n var rtwdf = Math.cos(2 * Math.PI / l);\\n var itwdf = Math.sin(2 * Math.PI / l);\\n\\n for (var p = 0; p < N; p += l) {\\n var rtwdf_ = rtwdf;\\n var itwdf_ = itwdf;\\n\\n for (var j = 0; j < s; j++) {\\n var re = rtws[p + j];\\n var ie = itws[p + j];\\n\\n var ro = rtws[p + j + s];\\n var io = itws[p + j + s];\\n\\n var rx = rtwdf_ * ro - itwdf_ * io;\\n\\n io = rtwdf_ * io + itwdf_ * ro;\\n ro = rx;\\n\\n rtws[p + j] = re + ro;\\n itws[p + j] = ie + io;\\n\\n rtws[p + j + s] = re - ro;\\n itws[p + j + s] = ie - io;\\n\\n /* jshint maxdepth : false */\\n if (j !== l) {\\n rx = rtwdf * rtwdf_ - itwdf * itwdf_;\\n\\n itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\\n rtwdf_ = rx;\\n }\\n }\\n }\\n }\\n };\\n\\n FFTM.prototype.guessLen13b = function guessLen13b (n, m) {\\n var N = Math.max(m, n) | 1;\\n var odd = N & 1;\\n var i = 0;\\n for (N = N / 2 | 0; N; N = N >>> 1) {\\n i++;\\n }\\n\\n return 1 << i + 1 + odd;\\n };\\n\\n FFTM.prototype.conjugate = function conjugate (rws, iws, N) {\\n if (N <= 1) return;\\n\\n for (var i = 0; i < N / 2; i++) {\\n var t = rws[i];\\n\\n rws[i] = rws[N - i - 1];\\n rws[N - i - 1] = t;\\n\\n t = iws[i];\\n\\n iws[i] = -iws[N - i - 1];\\n iws[N - i - 1] = -t;\\n }\\n };\\n\\n FFTM.prototype.normalize13b = function normalize13b (ws, N) {\\n var carry = 0;\\n for (var i = 0; i < N / 2; i++) {\\n var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +\\n Math.round(ws[2 * i] / N) +\\n carry;\\n\\n ws[i] = w & 0x3ffffff;\\n\\n if (w < 0x4000000) {\\n carry = 0;\\n } else {\\n carry = w / 0x4000000 | 0;\\n }\\n }\\n\\n return ws;\\n };\\n\\n FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {\\n var carry = 0;\\n for (var i = 0; i < len; i++) {\\n carry = carry + (ws[i] | 0);\\n\\n rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;\\n rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;\\n }\\n\\n // Pad with zeroes\\n for (i = 2 * len; i < N; ++i) {\\n rws[i] = 0;\\n }\\n\\n assert(carry === 0);\\n assert((carry & ~0x1fff) === 0);\\n };\\n\\n FFTM.prototype.stub = function stub (N) {\\n var ph = new Array(N);\\n for (var i = 0; i < N; i++) {\\n ph[i] = 0;\\n }\\n\\n return ph;\\n };\\n\\n FFTM.prototype.mulp = function mulp (x, y, out) {\\n var N = 2 * this.guessLen13b(x.length, y.length);\\n\\n var rbt = this.makeRBT(N);\\n\\n var _ = this.stub(N);\\n\\n var rws = new Array(N);\\n var rwst = new Array(N);\\n var iwst = new Array(N);\\n\\n var nrws = new Array(N);\\n var nrwst = new Array(N);\\n var niwst = new Array(N);\\n\\n var rmws = out.words;\\n rmws.length = N;\\n\\n this.convert13b(x.words, x.length, rws, N);\\n this.convert13b(y.words, y.length, nrws, N);\\n\\n this.transform(rws, _, rwst, iwst, N, rbt);\\n this.transform(nrws, _, nrwst, niwst, N, rbt);\\n\\n for (var i = 0; i < N; i++) {\\n var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\\n iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\\n rwst[i] = rx;\\n }\\n\\n this.conjugate(rwst, iwst, N);\\n this.transform(rwst, iwst, rmws, _, N, rbt);\\n this.conjugate(rmws, _, N);\\n this.normalize13b(rmws, N);\\n\\n out.negative = x.negative ^ y.negative;\\n out.length = x.length + y.length;\\n return out.strip();\\n };\\n\\n // Multiply `this` by `num`\\n BN.prototype.mul = function mul (num) {\\n var out = new BN(null);\\n out.words = new Array(this.length + num.length);\\n return this.mulTo(num, out);\\n };\\n\\n // Multiply employing FFT\\n BN.prototype.mulf = function mulf (num) {\\n var out = new BN(null);\\n out.words = new Array(this.length + num.length);\\n return jumboMulTo(this, num, out);\\n };\\n\\n // In-place Multiplication\\n BN.prototype.imul = function imul (num) {\\n return this.clone().mulTo(num, this);\\n };\\n\\n BN.prototype.imuln = function imuln (num) {\\n assert(typeof num === 'number');\\n assert(num < 0x4000000);\\n\\n // Carry\\n var carry = 0;\\n for (var i = 0; i < this.length; i++) {\\n var w = (this.words[i] | 0) * num;\\n var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\\n carry >>= 26;\\n carry += (w / 0x4000000) | 0;\\n // NOTE: lo is 27bit maximum\\n carry += lo >>> 26;\\n this.words[i] = lo & 0x3ffffff;\\n }\\n\\n if (carry !== 0) {\\n this.words[i] = carry;\\n this.length++;\\n }\\n\\n return this;\\n };\\n\\n BN.prototype.muln = function muln (num) {\\n return this.clone().imuln(num);\\n };\\n\\n // `this` * `this`\\n BN.prototype.sqr = function sqr () {\\n return this.mul(this);\\n };\\n\\n // `this` * `this` in-place\\n BN.prototype.isqr = function isqr () {\\n return this.imul(this.clone());\\n };\\n\\n // Math.pow(`this`, `num`)\\n BN.prototype.pow = function pow (num) {\\n var w = toBitArray(num);\\n if (w.length === 0) return new BN(1);\\n\\n // Skip leading zeroes\\n var res = this;\\n for (var i = 0; i < w.length; i++, res = res.sqr()) {\\n if (w[i] !== 0) break;\\n }\\n\\n if (++i < w.length) {\\n for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\\n if (w[i] === 0) continue;\\n\\n res = res.mul(q);\\n }\\n }\\n\\n return res;\\n };\\n\\n // Shift-left in-place\\n BN.prototype.iushln = function iushln (bits) {\\n assert(typeof bits === 'number' && bits >= 0);\\n var r = bits % 26;\\n var s = (bits - r) / 26;\\n var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);\\n var i;\\n\\n if (r !== 0) {\\n var carry = 0;\\n\\n for (i = 0; i < this.length; i++) {\\n var newCarry = this.words[i] & carryMask;\\n var c = ((this.words[i] | 0) - newCarry) << r;\\n this.words[i] = c | carry;\\n carry = newCarry >>> (26 - r);\\n }\\n\\n if (carry) {\\n this.words[i] = carry;\\n this.length++;\\n }\\n }\\n\\n if (s !== 0) {\\n for (i = this.length - 1; i >= 0; i--) {\\n this.words[i + s] = this.words[i];\\n }\\n\\n for (i = 0; i < s; i++) {\\n this.words[i] = 0;\\n }\\n\\n this.length += s;\\n }\\n\\n return this.strip();\\n };\\n\\n BN.prototype.ishln = function ishln (bits) {\\n // TODO(indutny): implement me\\n assert(this.negative === 0);\\n return this.iushln(bits);\\n };\\n\\n // Shift-right in-place\\n // NOTE: `hint` is a lowest bit before trailing zeroes\\n // NOTE: if `extended` is present - it will be filled with destroyed bits\\n BN.prototype.iushrn = function iushrn (bits, hint, extended) {\\n assert(typeof bits === 'number' && bits >= 0);\\n var h;\\n if (hint) {\\n h = (hint - (hint % 26)) / 26;\\n } else {\\n h = 0;\\n }\\n\\n var r = bits % 26;\\n var s = Math.min((bits - r) / 26, this.length);\\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\\n var maskedWords = extended;\\n\\n h -= s;\\n h = Math.max(0, h);\\n\\n // Extended mode, copy masked part\\n if (maskedWords) {\\n for (var i = 0; i < s; i++) {\\n maskedWords.words[i] = this.words[i];\\n }\\n maskedWords.length = s;\\n }\\n\\n if (s === 0) {\\n // No-op, we should not move anything at all\\n } else if (this.length > s) {\\n this.length -= s;\\n for (i = 0; i < this.length; i++) {\\n this.words[i] = this.words[i + s];\\n }\\n } else {\\n this.words[0] = 0;\\n this.length = 1;\\n }\\n\\n var carry = 0;\\n for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\\n var word = this.words[i] | 0;\\n this.words[i] = (carry << (26 - r)) | (word >>> r);\\n carry = word & mask;\\n }\\n\\n // Push carried bits as a mask\\n if (maskedWords && carry !== 0) {\\n maskedWords.words[maskedWords.length++] = carry;\\n }\\n\\n if (this.length === 0) {\\n this.words[0] = 0;\\n this.length = 1;\\n }\\n\\n return this.strip();\\n };\\n\\n BN.prototype.ishrn = function ishrn (bits, hint, extended) {\\n // TODO(indutny): implement me\\n assert(this.negative === 0);\\n return this.iushrn(bits, hint, extended);\\n };\\n\\n // Shift-left\\n BN.prototype.shln = function shln (bits) {\\n return this.clone().ishln(bits);\\n };\\n\\n BN.prototype.ushln = function ushln (bits) {\\n return this.clone().iushln(bits);\\n };\\n\\n // Shift-right\\n BN.prototype.shrn = function shrn (bits) {\\n return this.clone().ishrn(bits);\\n };\\n\\n BN.prototype.ushrn = function ushrn (bits) {\\n return this.clone().iushrn(bits);\\n };\\n\\n // Test if n bit is set\\n BN.prototype.testn = function testn (bit) {\\n assert(typeof bit === 'number' && bit >= 0);\\n var r = bit % 26;\\n var s = (bit - r) / 26;\\n var q = 1 << r;\\n\\n // Fast case: bit is much higher than all existing words\\n if (this.length <= s) return false;\\n\\n // Check bit and return\\n var w = this.words[s];\\n\\n return !!(w & q);\\n };\\n\\n // Return only lowers bits of number (in-place)\\n BN.prototype.imaskn = function imaskn (bits) {\\n assert(typeof bits === 'number' && bits >= 0);\\n var r = bits % 26;\\n var s = (bits - r) / 26;\\n\\n assert(this.negative === 0, 'imaskn works only with positive numbers');\\n\\n if (this.length <= s) {\\n return this;\\n }\\n\\n if (r !== 0) {\\n s++;\\n }\\n this.length = Math.min(s, this.length);\\n\\n if (r !== 0) {\\n var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);\\n this.words[this.length - 1] &= mask;\\n }\\n\\n return this.strip();\\n };\\n\\n // Return only lowers bits of number\\n BN.prototype.maskn = function maskn (bits) {\\n return this.clone().imaskn(bits);\\n };\\n\\n // Add plain number `num` to `this`\\n BN.prototype.iaddn = function iaddn (num) {\\n assert(typeof num === 'number');\\n assert(num < 0x4000000);\\n if (num < 0) return this.isubn(-num);\\n\\n // Possible sign change\\n if (this.negative !== 0) {\\n if (this.length === 1 && (this.words[0] | 0) < num) {\\n this.words[0] = num - (this.words[0] | 0);\\n this.negative = 0;\\n return this;\\n }\\n\\n this.negative = 0;\\n this.isubn(num);\\n this.negative = 1;\\n return this;\\n }\\n\\n // Add without checks\\n return this._iaddn(num);\\n };\\n\\n BN.prototype._iaddn = function _iaddn (num) {\\n this.words[0] += num;\\n\\n // Carry\\n for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\\n this.words[i] -= 0x4000000;\\n if (i === this.length - 1) {\\n this.words[i + 1] = 1;\\n } else {\\n this.words[i + 1]++;\\n }\\n }\\n this.length = Math.max(this.length, i + 1);\\n\\n return this;\\n };\\n\\n // Subtract plain number `num` from `this`\\n BN.prototype.isubn = function isubn (num) {\\n assert(typeof num === 'number');\\n assert(num < 0x4000000);\\n if (num < 0) return this.iaddn(-num);\\n\\n if (this.negative !== 0) {\\n this.negative = 0;\\n this.iaddn(num);\\n this.negative = 1;\\n return this;\\n }\\n\\n this.words[0] -= num;\\n\\n if (this.length === 1 && this.words[0] < 0) {\\n this.words[0] = -this.words[0];\\n this.negative = 1;\\n } else {\\n // Carry\\n for (var i = 0; i < this.length && this.words[i] < 0; i++) {\\n this.words[i] += 0x4000000;\\n this.words[i + 1] -= 1;\\n }\\n }\\n\\n return this.strip();\\n };\\n\\n BN.prototype.addn = function addn (num) {\\n return this.clone().iaddn(num);\\n };\\n\\n BN.prototype.subn = function subn (num) {\\n return this.clone().isubn(num);\\n };\\n\\n BN.prototype.iabs = function iabs () {\\n this.negative = 0;\\n\\n return this;\\n };\\n\\n BN.prototype.abs = function abs () {\\n return this.clone().iabs();\\n };\\n\\n BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {\\n var len = num.length + shift;\\n var i;\\n\\n this._expand(len);\\n\\n var w;\\n var carry = 0;\\n for (i = 0; i < num.length; i++) {\\n w = (this.words[i + shift] | 0) + carry;\\n var right = (num.words[i] | 0) * mul;\\n w -= right & 0x3ffffff;\\n carry = (w >> 26) - ((right / 0x4000000) | 0);\\n this.words[i + shift] = w & 0x3ffffff;\\n }\\n for (; i < this.length - shift; i++) {\\n w = (this.words[i + shift] | 0) + carry;\\n carry = w >> 26;\\n this.words[i + shift] = w & 0x3ffffff;\\n }\\n\\n if (carry === 0) return this.strip();\\n\\n // Subtraction overflow\\n assert(carry === -1);\\n carry = 0;\\n for (i = 0; i < this.length; i++) {\\n w = -(this.words[i] | 0) + carry;\\n carry = w >> 26;\\n this.words[i] = w & 0x3ffffff;\\n }\\n this.negative = 1;\\n\\n return this.strip();\\n };\\n\\n BN.prototype._wordDiv = function _wordDiv (num, mode) {\\n var shift = this.length - num.length;\\n\\n var a = this.clone();\\n var b = num;\\n\\n // Normalize\\n var bhi = b.words[b.length - 1] | 0;\\n var bhiBits = this._countBits(bhi);\\n shift = 26 - bhiBits;\\n if (shift !== 0) {\\n b = b.ushln(shift);\\n a.iushln(shift);\\n bhi = b.words[b.length - 1] | 0;\\n }\\n\\n // Initialize quotient\\n var m = a.length - b.length;\\n var q;\\n\\n if (mode !== 'mod') {\\n q = new BN(null);\\n q.length = m + 1;\\n q.words = new Array(q.length);\\n for (var i = 0; i < q.length; i++) {\\n q.words[i] = 0;\\n }\\n }\\n\\n var diff = a.clone()._ishlnsubmul(b, 1, m);\\n if (diff.negative === 0) {\\n a = diff;\\n if (q) {\\n q.words[m] = 1;\\n }\\n }\\n\\n for (var j = m - 1; j >= 0; j--) {\\n var qj = (a.words[b.length + j] | 0) * 0x4000000 +\\n (a.words[b.length + j - 1] | 0);\\n\\n // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\\n // (0x7ffffff)\\n qj = Math.min((qj / bhi) | 0, 0x3ffffff);\\n\\n a._ishlnsubmul(b, qj, j);\\n while (a.negative !== 0) {\\n qj--;\\n a.negative = 0;\\n a._ishlnsubmul(b, 1, j);\\n if (!a.isZero()) {\\n a.negative ^= 1;\\n }\\n }\\n if (q) {\\n q.words[j] = qj;\\n }\\n }\\n if (q) {\\n q.strip();\\n }\\n a.strip();\\n\\n // Denormalize\\n if (mode !== 'div' && shift !== 0) {\\n a.iushrn(shift);\\n }\\n\\n return {\\n div: q || null,\\n mod: a\\n };\\n };\\n\\n // NOTE: 1) `mode` can be set to `mod` to request mod only,\\n // to `div` to request div only, or be absent to\\n // request both div & mod\\n // 2) `positive` is true if unsigned mod is requested\\n BN.prototype.divmod = function divmod (num, mode, positive) {\\n assert(!num.isZero());\\n\\n if (this.isZero()) {\\n return {\\n div: new BN(0),\\n mod: new BN(0)\\n };\\n }\\n\\n var div, mod, res;\\n if (this.negative !== 0 && num.negative === 0) {\\n res = this.neg().divmod(num, mode);\\n\\n if (mode !== 'mod') {\\n div = res.div.neg();\\n }\\n\\n if (mode !== 'div') {\\n mod = res.mod.neg();\\n if (positive && mod.negative !== 0) {\\n mod.iadd(num);\\n }\\n }\\n\\n return {\\n div: div,\\n mod: mod\\n };\\n }\\n\\n if (this.negative === 0 && num.negative !== 0) {\\n res = this.divmod(num.neg(), mode);\\n\\n if (mode !== 'mod') {\\n div = res.div.neg();\\n }\\n\\n return {\\n div: div,\\n mod: res.mod\\n };\\n }\\n\\n if ((this.negative & num.negative) !== 0) {\\n res = this.neg().divmod(num.neg(), mode);\\n\\n if (mode !== 'div') {\\n mod = res.mod.neg();\\n if (positive && mod.negative !== 0) {\\n mod.isub(num);\\n }\\n }\\n\\n return {\\n div: res.div,\\n mod: mod\\n };\\n }\\n\\n // Both numbers are positive at this point\\n\\n // Strip both numbers to approximate shift value\\n if (num.length > this.length || this.cmp(num) < 0) {\\n return {\\n div: new BN(0),\\n mod: this\\n };\\n }\\n\\n // Very short reduction\\n if (num.length === 1) {\\n if (mode === 'div') {\\n return {\\n div: this.divn(num.words[0]),\\n mod: null\\n };\\n }\\n\\n if (mode === 'mod') {\\n return {\\n div: null,\\n mod: new BN(this.modn(num.words[0]))\\n };\\n }\\n\\n return {\\n div: this.divn(num.words[0]),\\n mod: new BN(this.modn(num.words[0]))\\n };\\n }\\n\\n return this._wordDiv(num, mode);\\n };\\n\\n // Find `this` / `num`\\n BN.prototype.div = function div (num) {\\n return this.divmod(num, 'div', false).div;\\n };\\n\\n // Find `this` % `num`\\n BN.prototype.mod = function mod (num) {\\n return this.divmod(num, 'mod', false).mod;\\n };\\n\\n BN.prototype.umod = function umod (num) {\\n return this.divmod(num, 'mod', true).mod;\\n };\\n\\n // Find Round(`this` / `num`)\\n BN.prototype.divRound = function divRound (num) {\\n var dm = this.divmod(num);\\n\\n // Fast case - exact division\\n if (dm.mod.isZero()) return dm.div;\\n\\n var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\\n\\n var half = num.ushrn(1);\\n var r2 = num.andln(1);\\n var cmp = mod.cmp(half);\\n\\n // Round down\\n if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;\\n\\n // Round up\\n return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\\n };\\n\\n BN.prototype.modn = function modn (num) {\\n assert(num <= 0x3ffffff);\\n var p = (1 << 26) % num;\\n\\n var acc = 0;\\n for (var i = this.length - 1; i >= 0; i--) {\\n acc = (p * acc + (this.words[i] | 0)) % num;\\n }\\n\\n return acc;\\n };\\n\\n // In-place division by number\\n BN.prototype.idivn = function idivn (num) {\\n assert(num <= 0x3ffffff);\\n\\n var carry = 0;\\n for (var i = this.length - 1; i >= 0; i--) {\\n var w = (this.words[i] | 0) + carry * 0x4000000;\\n this.words[i] = (w / num) | 0;\\n carry = w % num;\\n }\\n\\n return this.strip();\\n };\\n\\n BN.prototype.divn = function divn (num) {\\n return this.clone().idivn(num);\\n };\\n\\n BN.prototype.egcd = function egcd (p) {\\n assert(p.negative === 0);\\n assert(!p.isZero());\\n\\n var x = this;\\n var y = p.clone();\\n\\n if (x.negative !== 0) {\\n x = x.umod(p);\\n } else {\\n x = x.clone();\\n }\\n\\n // A * x + B * y = x\\n var A = new BN(1);\\n var B = new BN(0);\\n\\n // C * x + D * y = y\\n var C = new BN(0);\\n var D = new BN(1);\\n\\n var g = 0;\\n\\n while (x.isEven() && y.isEven()) {\\n x.iushrn(1);\\n y.iushrn(1);\\n ++g;\\n }\\n\\n var yp = y.clone();\\n var xp = x.clone();\\n\\n while (!x.isZero()) {\\n for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\\n if (i > 0) {\\n x.iushrn(i);\\n while (i-- > 0) {\\n if (A.isOdd() || B.isOdd()) {\\n A.iadd(yp);\\n B.isub(xp);\\n }\\n\\n A.iushrn(1);\\n B.iushrn(1);\\n }\\n }\\n\\n for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\\n if (j > 0) {\\n y.iushrn(j);\\n while (j-- > 0) {\\n if (C.isOdd() || D.isOdd()) {\\n C.iadd(yp);\\n D.isub(xp);\\n }\\n\\n C.iushrn(1);\\n D.iushrn(1);\\n }\\n }\\n\\n if (x.cmp(y) >= 0) {\\n x.isub(y);\\n A.isub(C);\\n B.isub(D);\\n } else {\\n y.isub(x);\\n C.isub(A);\\n D.isub(B);\\n }\\n }\\n\\n return {\\n a: C,\\n b: D,\\n gcd: y.iushln(g)\\n };\\n };\\n\\n // This is reduced incarnation of the binary EEA\\n // above, designated to invert members of the\\n // _prime_ fields F(p) at a maximal speed\\n BN.prototype._invmp = function _invmp (p) {\\n assert(p.negative === 0);\\n assert(!p.isZero());\\n\\n var a = this;\\n var b = p.clone();\\n\\n if (a.negative !== 0) {\\n a = a.umod(p);\\n } else {\\n a = a.clone();\\n }\\n\\n var x1 = new BN(1);\\n var x2 = new BN(0);\\n\\n var delta = b.clone();\\n\\n while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\\n for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);\\n if (i > 0) {\\n a.iushrn(i);\\n while (i-- > 0) {\\n if (x1.isOdd()) {\\n x1.iadd(delta);\\n }\\n\\n x1.iushrn(1);\\n }\\n }\\n\\n for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);\\n if (j > 0) {\\n b.iushrn(j);\\n while (j-- > 0) {\\n if (x2.isOdd()) {\\n x2.iadd(delta);\\n }\\n\\n x2.iushrn(1);\\n }\\n }\\n\\n if (a.cmp(b) >= 0) {\\n a.isub(b);\\n x1.isub(x2);\\n } else {\\n b.isub(a);\\n x2.isub(x1);\\n }\\n }\\n\\n var res;\\n if (a.cmpn(1) === 0) {\\n res = x1;\\n } else {\\n res = x2;\\n }\\n\\n if (res.cmpn(0) < 0) {\\n res.iadd(p);\\n }\\n\\n return res;\\n };\\n\\n BN.prototype.gcd = function gcd (num) {\\n if (this.isZero()) return num.abs();\\n if (num.isZero()) return this.abs();\\n\\n var a = this.clone();\\n var b = num.clone();\\n a.negative = 0;\\n b.negative = 0;\\n\\n // Remove common factor of two\\n for (var shift = 0; a.isEven() && b.isEven(); shift++) {\\n a.iushrn(1);\\n b.iushrn(1);\\n }\\n\\n do {\\n while (a.isEven()) {\\n a.iushrn(1);\\n }\\n while (b.isEven()) {\\n b.iushrn(1);\\n }\\n\\n var r = a.cmp(b);\\n if (r < 0) {\\n // Swap `a` and `b` to make `a` always bigger than `b`\\n var t = a;\\n a = b;\\n b = t;\\n } else if (r === 0 || b.cmpn(1) === 0) {\\n break;\\n }\\n\\n a.isub(b);\\n } while (true);\\n\\n return b.iushln(shift);\\n };\\n\\n // Invert number in the field F(num)\\n BN.prototype.invm = function invm (num) {\\n return this.egcd(num).a.umod(num);\\n };\\n\\n BN.prototype.isEven = function isEven () {\\n return (this.words[0] & 1) === 0;\\n };\\n\\n BN.prototype.isOdd = function isOdd () {\\n return (this.words[0] & 1) === 1;\\n };\\n\\n // And first word and num\\n BN.prototype.andln = function andln (num) {\\n return this.words[0] & num;\\n };\\n\\n // Increment at the bit position in-line\\n BN.prototype.bincn = function bincn (bit) {\\n assert(typeof bit === 'number');\\n var r = bit % 26;\\n var s = (bit - r) / 26;\\n var q = 1 << r;\\n\\n // Fast case: bit is much higher than all existing words\\n if (this.length <= s) {\\n this._expand(s + 1);\\n this.words[s] |= q;\\n return this;\\n }\\n\\n // Add bit and propagate, if needed\\n var carry = q;\\n for (var i = s; carry !== 0 && i < this.length; i++) {\\n var w = this.words[i] | 0;\\n w += carry;\\n carry = w >>> 26;\\n w &= 0x3ffffff;\\n this.words[i] = w;\\n }\\n if (carry !== 0) {\\n this.words[i] = carry;\\n this.length++;\\n }\\n return this;\\n };\\n\\n BN.prototype.isZero = function isZero () {\\n return this.length === 1 && this.words[0] === 0;\\n };\\n\\n BN.prototype.cmpn = function cmpn (num) {\\n var negative = num < 0;\\n\\n if (this.negative !== 0 && !negative) return -1;\\n if (this.negative === 0 && negative) return 1;\\n\\n this.strip();\\n\\n var res;\\n if (this.length > 1) {\\n res = 1;\\n } else {\\n if (negative) {\\n num = -num;\\n }\\n\\n assert(num <= 0x3ffffff, 'Number is too big');\\n\\n var w = this.words[0] | 0;\\n res = w === num ? 0 : w < num ? -1 : 1;\\n }\\n if (this.negative !== 0) return -res | 0;\\n return res;\\n };\\n\\n // Compare two numbers and return:\\n // 1 - if `this` > `num`\\n // 0 - if `this` == `num`\\n // -1 - if `this` < `num`\\n BN.prototype.cmp = function cmp (num) {\\n if (this.negative !== 0 && num.negative === 0) return -1;\\n if (this.negative === 0 && num.negative !== 0) return 1;\\n\\n var res = this.ucmp(num);\\n if (this.negative !== 0) return -res | 0;\\n return res;\\n };\\n\\n // Unsigned comparison\\n BN.prototype.ucmp = function ucmp (num) {\\n // At this point both numbers have the same sign\\n if (this.length > num.length) return 1;\\n if (this.length < num.length) return -1;\\n\\n var res = 0;\\n for (var i = this.length - 1; i >= 0; i--) {\\n var a = this.words[i] | 0;\\n var b = num.words[i] | 0;\\n\\n if (a === b) continue;\\n if (a < b) {\\n res = -1;\\n } else if (a > b) {\\n res = 1;\\n }\\n break;\\n }\\n return res;\\n };\\n\\n BN.prototype.gtn = function gtn (num) {\\n return this.cmpn(num) === 1;\\n };\\n\\n BN.prototype.gt = function gt (num) {\\n return this.cmp(num) === 1;\\n };\\n\\n BN.prototype.gten = function gten (num) {\\n return this.cmpn(num) >= 0;\\n };\\n\\n BN.prototype.gte = function gte (num) {\\n return this.cmp(num) >= 0;\\n };\\n\\n BN.prototype.ltn = function ltn (num) {\\n return this.cmpn(num) === -1;\\n };\\n\\n BN.prototype.lt = function lt (num) {\\n return this.cmp(num) === -1;\\n };\\n\\n BN.prototype.lten = function lten (num) {\\n return this.cmpn(num) <= 0;\\n };\\n\\n BN.prototype.lte = function lte (num) {\\n return this.cmp(num) <= 0;\\n };\\n\\n BN.prototype.eqn = function eqn (num) {\\n return this.cmpn(num) === 0;\\n };\\n\\n BN.prototype.eq = function eq (num) {\\n return this.cmp(num) === 0;\\n };\\n\\n //\\n // A reduce context, could be using montgomery or something better, depending\\n // on the `m` itself.\\n //\\n BN.red = function red (num) {\\n return new Red(num);\\n };\\n\\n BN.prototype.toRed = function toRed (ctx) {\\n assert(!this.red, 'Already a number in reduction context');\\n assert(this.negative === 0, 'red works only with positives');\\n return ctx.convertTo(this)._forceRed(ctx);\\n };\\n\\n BN.prototype.fromRed = function fromRed () {\\n assert(this.red, 'fromRed works only with numbers in reduction context');\\n return this.red.convertFrom(this);\\n };\\n\\n BN.prototype._forceRed = function _forceRed (ctx) {\\n this.red = ctx;\\n return this;\\n };\\n\\n BN.prototype.forceRed = function forceRed (ctx) {\\n assert(!this.red, 'Already a number in reduction context');\\n return this._forceRed(ctx);\\n };\\n\\n BN.prototype.redAdd = function redAdd (num) {\\n assert(this.red, 'redAdd works only with red numbers');\\n return this.red.add(this, num);\\n };\\n\\n BN.prototype.redIAdd = function redIAdd (num) {\\n assert(this.red, 'redIAdd works only with red numbers');\\n return this.red.iadd(this, num);\\n };\\n\\n BN.prototype.redSub = function redSub (num) {\\n assert(this.red, 'redSub works only with red numbers');\\n return this.red.sub(this, num);\\n };\\n\\n BN.prototype.redISub = function redISub (num) {\\n assert(this.red, 'redISub works only with red numbers');\\n return this.red.isub(this, num);\\n };\\n\\n BN.prototype.redShl = function redShl (num) {\\n assert(this.red, 'redShl works only with red numbers');\\n return this.red.shl(this, num);\\n };\\n\\n BN.prototype.redMul = function redMul (num) {\\n assert(this.red, 'redMul works only with red numbers');\\n this.red._verify2(this, num);\\n return this.red.mul(this, num);\\n };\\n\\n BN.prototype.redIMul = function redIMul (num) {\\n assert(this.red, 'redMul works only with red numbers');\\n this.red._verify2(this, num);\\n return this.red.imul(this, num);\\n };\\n\\n BN.prototype.redSqr = function redSqr () {\\n assert(this.red, 'redSqr works only with red numbers');\\n this.red._verify1(this);\\n return this.red.sqr(this);\\n };\\n\\n BN.prototype.redISqr = function redISqr () {\\n assert(this.red, 'redISqr works only with red numbers');\\n this.red._verify1(this);\\n return this.red.isqr(this);\\n };\\n\\n // Square root over p\\n BN.prototype.redSqrt = function redSqrt () {\\n assert(this.red, 'redSqrt works only with red numbers');\\n this.red._verify1(this);\\n return this.red.sqrt(this);\\n };\\n\\n BN.prototype.redInvm = function redInvm () {\\n assert(this.red, 'redInvm works only with red numbers');\\n this.red._verify1(this);\\n return this.red.invm(this);\\n };\\n\\n // Return negative clone of `this` % `red modulo`\\n BN.prototype.redNeg = function redNeg () {\\n assert(this.red, 'redNeg works only with red numbers');\\n this.red._verify1(this);\\n return this.red.neg(this);\\n };\\n\\n BN.prototype.redPow = function redPow (num) {\\n assert(this.red && !num.red, 'redPow(normalNum)');\\n this.red._verify1(this);\\n return this.red.pow(this, num);\\n };\\n\\n // Prime numbers with efficient reduction\\n var primes = {\\n k256: null,\\n p224: null,\\n p192: null,\\n p25519: null\\n };\\n\\n // Pseudo-Mersenne prime\\n function MPrime (name, p) {\\n // P = 2 ^ N - K\\n this.name = name;\\n this.p = new BN(p, 16);\\n this.n = this.p.bitLength();\\n this.k = new BN(1).iushln(this.n).isub(this.p);\\n\\n this.tmp = this._tmp();\\n }\\n\\n MPrime.prototype._tmp = function _tmp () {\\n var tmp = new BN(null);\\n tmp.words = new Array(Math.ceil(this.n / 13));\\n return tmp;\\n };\\n\\n MPrime.prototype.ireduce = function ireduce (num) {\\n // Assumes that `num` is less than `P^2`\\n // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\\n var r = num;\\n var rlen;\\n\\n do {\\n this.split(r, this.tmp);\\n r = this.imulK(r);\\n r = r.iadd(this.tmp);\\n rlen = r.bitLength();\\n } while (rlen > this.n);\\n\\n var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\\n if (cmp === 0) {\\n r.words[0] = 0;\\n r.length = 1;\\n } else if (cmp > 0) {\\n r.isub(this.p);\\n } else {\\n r.strip();\\n }\\n\\n return r;\\n };\\n\\n MPrime.prototype.split = function split (input, out) {\\n input.iushrn(this.n, 0, out);\\n };\\n\\n MPrime.prototype.imulK = function imulK (num) {\\n return num.imul(this.k);\\n };\\n\\n function K256 () {\\n MPrime.call(\\n this,\\n 'k256',\\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\\n }\\n inherits(K256, MPrime);\\n\\n K256.prototype.split = function split (input, output) {\\n // 256 = 9 * 26 + 22\\n var mask = 0x3fffff;\\n\\n var outLen = Math.min(input.length, 9);\\n for (var i = 0; i < outLen; i++) {\\n output.words[i] = input.words[i];\\n }\\n output.length = outLen;\\n\\n if (input.length <= 9) {\\n input.words[0] = 0;\\n input.length = 1;\\n return;\\n }\\n\\n // Shift by 9 limbs\\n var prev = input.words[9];\\n output.words[output.length++] = prev & mask;\\n\\n for (i = 10; i < input.length; i++) {\\n var next = input.words[i] | 0;\\n input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);\\n prev = next;\\n }\\n prev >>>= 22;\\n input.words[i - 10] = prev;\\n if (prev === 0 && input.length > 10) {\\n input.length -= 10;\\n } else {\\n input.length -= 9;\\n }\\n };\\n\\n K256.prototype.imulK = function imulK (num) {\\n // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\\n num.words[num.length] = 0;\\n num.words[num.length + 1] = 0;\\n num.length += 2;\\n\\n // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\\n var lo = 0;\\n for (var i = 0; i < num.length; i++) {\\n var w = num.words[i] | 0;\\n lo += w * 0x3d1;\\n num.words[i] = lo & 0x3ffffff;\\n lo = w * 0x40 + ((lo / 0x4000000) | 0);\\n }\\n\\n // Fast length reduction\\n if (num.words[num.length - 1] === 0) {\\n num.length--;\\n if (num.words[num.length - 1] === 0) {\\n num.length--;\\n }\\n }\\n return num;\\n };\\n\\n function P224 () {\\n MPrime.call(\\n this,\\n 'p224',\\n 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\\n }\\n inherits(P224, MPrime);\\n\\n function P192 () {\\n MPrime.call(\\n this,\\n 'p192',\\n 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\\n }\\n inherits(P192, MPrime);\\n\\n function P25519 () {\\n // 2 ^ 255 - 19\\n MPrime.call(\\n this,\\n '25519',\\n '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\\n }\\n inherits(P25519, MPrime);\\n\\n P25519.prototype.imulK = function imulK (num) {\\n // K = 0x13\\n var carry = 0;\\n for (var i = 0; i < num.length; i++) {\\n var hi = (num.words[i] | 0) * 0x13 + carry;\\n var lo = hi & 0x3ffffff;\\n hi >>>= 26;\\n\\n num.words[i] = lo;\\n carry = hi;\\n }\\n if (carry !== 0) {\\n num.words[num.length++] = carry;\\n }\\n return num;\\n };\\n\\n // Exported mostly for testing purposes, use plain name instead\\n BN._prime = function prime (name) {\\n // Cached version of prime\\n if (primes[name]) return primes[name];\\n\\n var prime;\\n if (name === 'k256') {\\n prime = new K256();\\n } else if (name === 'p224') {\\n prime = new P224();\\n } else if (name === 'p192') {\\n prime = new P192();\\n } else if (name === 'p25519') {\\n prime = new P25519();\\n } else {\\n throw new Error('Unknown prime ' + name);\\n }\\n primes[name] = prime;\\n\\n return prime;\\n };\\n\\n //\\n // Base reduction engine\\n //\\n function Red (m) {\\n if (typeof m === 'string') {\\n var prime = BN._prime(m);\\n this.m = prime.p;\\n this.prime = prime;\\n } else {\\n assert(m.gtn(1), 'modulus must be greater than 1');\\n this.m = m;\\n this.prime = null;\\n }\\n }\\n\\n Red.prototype._verify1 = function _verify1 (a) {\\n assert(a.negative === 0, 'red works only with positives');\\n assert(a.red, 'red works only with red numbers');\\n };\\n\\n Red.prototype._verify2 = function _verify2 (a, b) {\\n assert((a.negative | b.negative) === 0, 'red works only with positives');\\n assert(a.red && a.red === b.red,\\n 'red works only with red numbers');\\n };\\n\\n Red.prototype.imod = function imod (a) {\\n if (this.prime) return this.prime.ireduce(a)._forceRed(this);\\n return a.umod(this.m)._forceRed(this);\\n };\\n\\n Red.prototype.neg = function neg (a) {\\n if (a.isZero()) {\\n return a.clone();\\n }\\n\\n return this.m.sub(a)._forceRed(this);\\n };\\n\\n Red.prototype.add = function add (a, b) {\\n this._verify2(a, b);\\n\\n var res = a.add(b);\\n if (res.cmp(this.m) >= 0) {\\n res.isub(this.m);\\n }\\n return res._forceRed(this);\\n };\\n\\n Red.prototype.iadd = function iadd (a, b) {\\n this._verify2(a, b);\\n\\n var res = a.iadd(b);\\n if (res.cmp(this.m) >= 0) {\\n res.isub(this.m);\\n }\\n return res;\\n };\\n\\n Red.prototype.sub = function sub (a, b) {\\n this._verify2(a, b);\\n\\n var res = a.sub(b);\\n if (res.cmpn(0) < 0) {\\n res.iadd(this.m);\\n }\\n return res._forceRed(this);\\n };\\n\\n Red.prototype.isub = function isub (a, b) {\\n this._verify2(a, b);\\n\\n var res = a.isub(b);\\n if (res.cmpn(0) < 0) {\\n res.iadd(this.m);\\n }\\n return res;\\n };\\n\\n Red.prototype.shl = function shl (a, num) {\\n this._verify1(a);\\n return this.imod(a.ushln(num));\\n };\\n\\n Red.prototype.imul = function imul (a, b) {\\n this._verify2(a, b);\\n return this.imod(a.imul(b));\\n };\\n\\n Red.prototype.mul = function mul (a, b) {\\n this._verify2(a, b);\\n return this.imod(a.mul(b));\\n };\\n\\n Red.prototype.isqr = function isqr (a) {\\n return this.imul(a, a.clone());\\n };\\n\\n Red.prototype.sqr = function sqr (a) {\\n return this.mul(a, a);\\n };\\n\\n Red.prototype.sqrt = function sqrt (a) {\\n if (a.isZero()) return a.clone();\\n\\n var mod3 = this.m.andln(3);\\n assert(mod3 % 2 === 1);\\n\\n // Fast case\\n if (mod3 === 3) {\\n var pow = this.m.add(new BN(1)).iushrn(2);\\n return this.pow(a, pow);\\n }\\n\\n // Tonelli-Shanks algorithm (Totally unoptimized and slow)\\n //\\n // Find Q and S, that Q * 2 ^ S = (P - 1)\\n var q = this.m.subn(1);\\n var s = 0;\\n while (!q.isZero() && q.andln(1) === 0) {\\n s++;\\n q.iushrn(1);\\n }\\n assert(!q.isZero());\\n\\n var one = new BN(1).toRed(this);\\n var nOne = one.redNeg();\\n\\n // Find quadratic non-residue\\n // NOTE: Max is such because of generalized Riemann hypothesis.\\n var lpow = this.m.subn(1).iushrn(1);\\n var z = this.m.bitLength();\\n z = new BN(2 * z * z).toRed(this);\\n\\n while (this.pow(z, lpow).cmp(nOne) !== 0) {\\n z.redIAdd(nOne);\\n }\\n\\n var c = this.pow(z, q);\\n var r = this.pow(a, q.addn(1).iushrn(1));\\n var t = this.pow(a, q);\\n var m = s;\\n while (t.cmp(one) !== 0) {\\n var tmp = t;\\n for (var i = 0; tmp.cmp(one) !== 0; i++) {\\n tmp = tmp.redSqr();\\n }\\n assert(i < m);\\n var b = this.pow(c, new BN(1).iushln(m - i - 1));\\n\\n r = r.redMul(b);\\n c = b.redSqr();\\n t = t.redMul(c);\\n m = i;\\n }\\n\\n return r;\\n };\\n\\n Red.prototype.invm = function invm (a) {\\n var inv = a._invmp(this.m);\\n if (inv.negative !== 0) {\\n inv.negative = 0;\\n return this.imod(inv).redNeg();\\n } else {\\n return this.imod(inv);\\n }\\n };\\n\\n Red.prototype.pow = function pow (a, num) {\\n if (num.isZero()) return new BN(1).toRed(this);\\n if (num.cmpn(1) === 0) return a.clone();\\n\\n var windowSize = 4;\\n var wnd = new Array(1 << windowSize);\\n wnd[0] = new BN(1).toRed(this);\\n wnd[1] = a;\\n for (var i = 2; i < wnd.length; i++) {\\n wnd[i] = this.mul(wnd[i - 1], a);\\n }\\n\\n var res = wnd[0];\\n var current = 0;\\n var currentLen = 0;\\n var start = num.bitLength() % 26;\\n if (start === 0) {\\n start = 26;\\n }\\n\\n for (i = num.length - 1; i >= 0; i--) {\\n var word = num.words[i];\\n for (var j = start - 1; j >= 0; j--) {\\n var bit = (word >> j) & 1;\\n if (res !== wnd[0]) {\\n res = this.sqr(res);\\n }\\n\\n if (bit === 0 && current === 0) {\\n currentLen = 0;\\n continue;\\n }\\n\\n current <<= 1;\\n current |= bit;\\n currentLen++;\\n if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\\n\\n res = this.mul(res, wnd[current]);\\n currentLen = 0;\\n current = 0;\\n }\\n start = 26;\\n }\\n\\n return res;\\n };\\n\\n Red.prototype.convertTo = function convertTo (num) {\\n var r = num.umod(this.m);\\n\\n return r === num ? r.clone() : r;\\n };\\n\\n Red.prototype.convertFrom = function convertFrom (num) {\\n var res = num.clone();\\n res.red = null;\\n return res;\\n };\\n\\n //\\n // Montgomery method engine\\n //\\n\\n BN.mont = function mont (num) {\\n return new Mont(num);\\n };\\n\\n function Mont (m) {\\n Red.call(this, m);\\n\\n this.shift = this.m.bitLength();\\n if (this.shift % 26 !== 0) {\\n this.shift += 26 - (this.shift % 26);\\n }\\n\\n this.r = new BN(1).iushln(this.shift);\\n this.r2 = this.imod(this.r.sqr());\\n this.rinv = this.r._invmp(this.m);\\n\\n this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\\n this.minv = this.minv.umod(this.r);\\n this.minv = this.r.sub(this.minv);\\n }\\n inherits(Mont, Red);\\n\\n Mont.prototype.convertTo = function convertTo (num) {\\n return this.imod(num.ushln(this.shift));\\n };\\n\\n Mont.prototype.convertFrom = function convertFrom (num) {\\n var r = this.imod(num.mul(this.rinv));\\n r.red = null;\\n return r;\\n };\\n\\n Mont.prototype.imul = function imul (a, b) {\\n if (a.isZero() || b.isZero()) {\\n a.words[0] = 0;\\n a.length = 1;\\n return a;\\n }\\n\\n var t = a.imul(b);\\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\\n var u = t.isub(c).iushrn(this.shift);\\n var res = u;\\n\\n if (u.cmp(this.m) >= 0) {\\n res = u.isub(this.m);\\n } else if (u.cmpn(0) < 0) {\\n res = u.iadd(this.m);\\n }\\n\\n return res._forceRed(this);\\n };\\n\\n Mont.prototype.mul = function mul (a, b) {\\n if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\\n\\n var t = a.mul(b);\\n var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\\n var u = t.isub(c).iushrn(this.shift);\\n var res = u;\\n if (u.cmp(this.m) >= 0) {\\n res = u.isub(this.m);\\n } else if (u.cmpn(0) < 0) {\\n res = u.iadd(this.m);\\n }\\n\\n return res._forceRed(this);\\n };\\n\\n Mont.prototype.invm = function invm (a) {\\n // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\\n var res = this.imod(a._invmp(this.m).mul(this.r2));\\n return res._forceRed(this);\\n };\\n})( false || module, this);\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/module.js */ \\\"./node_modules/webpack/buildin/module.js\\\")(module)))\\n\\n//# sourceURL=webpack:///./node_modules/bn.js/lib/bn.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/brorand/index.js\":\n/*!***************************************!*\\\n !*** ./node_modules/brorand/index.js ***!\n \\***************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"var r;\\n\\nmodule.exports = function rand(len) {\\n if (!r)\\n r = new Rand(null);\\n\\n return r.generate(len);\\n};\\n\\nfunction Rand(rand) {\\n this.rand = rand;\\n}\\nmodule.exports.Rand = Rand;\\n\\nRand.prototype.generate = function generate(len) {\\n return this._rand(len);\\n};\\n\\n// Emulate crypto API using randy\\nRand.prototype._rand = function _rand(n) {\\n if (this.rand.getBytes)\\n return this.rand.getBytes(n);\\n\\n var res = new Uint8Array(n);\\n for (var i = 0; i < res.length; i++)\\n res[i] = this.rand.getByte();\\n return res;\\n};\\n\\nif (typeof self === 'object') {\\n if (self.crypto && self.crypto.getRandomValues) {\\n // Modern browsers\\n Rand.prototype._rand = function _rand(n) {\\n var arr = new Uint8Array(n);\\n self.crypto.getRandomValues(arr);\\n return arr;\\n };\\n } else if (self.msCrypto && self.msCrypto.getRandomValues) {\\n // IE\\n Rand.prototype._rand = function _rand(n) {\\n var arr = new Uint8Array(n);\\n self.msCrypto.getRandomValues(arr);\\n return arr;\\n };\\n\\n // Safari's WebWorkers do not have `crypto`\\n } else if (typeof window === 'object') {\\n // Old junk\\n Rand.prototype._rand = function() {\\n throw new Error('Not implemented yet');\\n };\\n }\\n} else {\\n // Node.js or Web worker with no crypto support\\n try {\\n var crypto = __webpack_require__(/*! crypto */ 1);\\n if (typeof crypto.randomBytes !== 'function')\\n throw new Error('Not supported');\\n\\n Rand.prototype._rand = function _rand(n) {\\n return crypto.randomBytes(n);\\n };\\n } catch (e) {\\n }\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/brorand/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/bs58/index.js\":\n/*!************************************!*\\\n !*** ./node_modules/bs58/index.js ***!\n \\************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"var basex = __webpack_require__(/*! base-x */ \\\"./node_modules/base-x/index.js\\\")\\nvar ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\\n\\nmodule.exports = basex(ALPHABET)\\n\\n\\n//# sourceURL=webpack:///./node_modules/bs58/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/class-is/index.js\":\n/*!****************************************!*\\\n !*** ./node_modules/class-is/index.js ***!\n \\****************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nfunction withIs(Class, { className, symbolName }) {\\n const symbol = Symbol.for(symbolName);\\n\\n const ClassIsWrapper = {\\n // The code below assigns the class wrapper to an object to trick\\n // JavaScript engines to show the name of the extended class when\\n // logging an instances.\\n // We are assigning an anonymous class (class wrapper) to the object\\n // with key `className` to keep the correct name.\\n // If this is not supported it falls back to logging `ClassIsWrapper`.\\n [className]: class extends Class {\\n constructor(...args) {\\n super(...args);\\n Object.defineProperty(this, symbol, { value: true });\\n }\\n\\n get [Symbol.toStringTag]() {\\n return className;\\n }\\n },\\n }[className];\\n\\n ClassIsWrapper[`is${className}`] = (obj) => !!(obj && obj[symbol]);\\n\\n return ClassIsWrapper;\\n}\\n\\nfunction withIsProto(Class, { className, symbolName, withoutNew }) {\\n const symbol = Symbol.for(symbolName);\\n\\n /* eslint-disable object-shorthand */\\n const ClassIsWrapper = {\\n [className]: function (...args) {\\n if (withoutNew && !(this instanceof ClassIsWrapper)) {\\n return new ClassIsWrapper(...args);\\n }\\n\\n const _this = Class.call(this, ...args) || this;\\n\\n if (_this && !_this[symbol]) {\\n Object.defineProperty(_this, symbol, { value: true });\\n }\\n\\n return _this;\\n },\\n }[className];\\n /* eslint-enable object-shorthand */\\n\\n ClassIsWrapper.prototype = Object.create(Class.prototype);\\n ClassIsWrapper.prototype.constructor = ClassIsWrapper;\\n\\n Object.defineProperty(ClassIsWrapper.prototype, Symbol.toStringTag, {\\n get() {\\n return className;\\n },\\n });\\n\\n ClassIsWrapper[`is${className}`] = (obj) => !!(obj && obj[symbol]);\\n\\n return ClassIsWrapper;\\n}\\n\\nmodule.exports = withIs;\\nmodule.exports.proto = withIsProto;\\n\\n\\n//# sourceURL=webpack:///./node_modules/class-is/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/css-loader/dist/cjs.js?!./node_modules/less-loader/dist/cjs.js!./src/style.less\":\n/*!***************************************************************************************************************!*\\\n !*** ./node_modules/css-loader/dist/cjs.js??ref--5-0!./node_modules/less-loader/dist/cjs.js!./src/style.less ***!\n \\***************************************************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"exports = module.exports = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ \\\"./node_modules/css-loader/dist/runtime/api.js\\\")(true);\\n// Module\\nexports.push([module.i, \\\".threeboxProfileHover__style_boxAddress {\\\\n background: transparent;\\\\n height: fit-content;\\\\n padding: 0px;\\\\n font-family: Arial, sans-serif;\\\\n position: relative;\\\\n display: block;\\\\n width: fit-content;\\\\n display: flex;\\\\n justify-content: flex-start;\\\\n align-items: center;\\\\n}\\\\n.threeboxProfileHover__style_boxAddress.threeboxProfileHover__style_tileStyle {\\\\n border: 1px solid #edf2fb;\\\\n background: white;\\\\n border-radius: 5px;\\\\n}\\\\n.threeboxProfileHover__style_boxAddressContentWrapper {\\\\n display: flex;\\\\n justify-content: flex-end;\\\\n align-items: center;\\\\n}\\\\n.threeboxProfileHover__style_boxAddressContentWrapper.threeboxProfileHover__style_boxAddressLink {\\\\n cursor: pointer;\\\\n}\\\\n.threeboxProfileHover__style_tileStyle .threeboxProfileHover__style_boxAddressContentWrapper {\\\\n max-width: calc(200px + 50px + 40px);\\\\n min-width: calc(92px + 50px + 40px);\\\\n}\\\\n.threeboxProfileHover__style_boxAddressContentWrapper {\\\\n max-width: calc(200px + 50px + 40px);\\\\n}\\\\n.threeboxProfileHover__style_boxAddressFull {\\\\n width: fit-content;\\\\n}\\\\n.threeboxProfileHover__style_boxAddressWrap {\\\\n display: block;\\\\n float: left;\\\\n position: relative;\\\\n font-family: Arial, sans-serif;\\\\n -webkit-font-smoothing: antialiased;\\\\n background-clip: padding-box;\\\\n}\\\\n.threeboxProfileHover__style_boxAddress .threeboxProfileHover__style_boxImg {\\\\n background: #074988;\\\\n height: 50px;\\\\n width: 50px;\\\\n border-radius: 50%;\\\\n overflow: hidden;\\\\n}\\\\n.threeboxProfileHover__style_boxAddress.threeboxProfileHover__style_tileStyle .threeboxProfileHover__style_boxImg {\\\\n border-radius: 5px 0px 0px 5px;\\\\n}\\\\n.threeboxProfileHover__style_boxAddress .threeboxProfileHover__style_boxImg img {\\\\n height: 100%;\\\\n width: 100%;\\\\n object-fit: cover;\\\\n background-color: white;\\\\n}\\\\n.threeboxProfileHover__style_boxShortAddress {\\\\n color: #636668;\\\\n font-size: 15px;\\\\n font-weight: 600;\\\\n letter-spacing: 0.015em;\\\\n display: block;\\\\n padding: 0 16px;\\\\n max-width: 200px;\\\\n text-overflow: ellipsis;\\\\n overflow: hidden;\\\\n white-space: nowrap;\\\\n}\\\\n.threeboxProfileHover__style_tileStyle .threeboxProfileHover__style_boxShortAddress {\\\\n min-width: 100px;\\\\n}\\\\n.threeboxProfileHover__style_openHover_mobile {\\\\n width: fit-content;\\\\n height: fit-content;\\\\n color: #b7bece;\\\\n padding: 0;\\\\n border: none;\\\\n background-color: transparent;\\\\n}\\\\n.threeboxProfileHover__style_tileStyle .threeboxProfileHover__style_openHover_mobile {\\\\n background-color: #f9f9f9;\\\\n border-left: 1px solid #edf2fb;\\\\n border-radius: 0 5px 5px 0;\\\\n width: 50px;\\\\n height: 50px;\\\\n}\\\\n.threeboxProfileHover__style_openHover_mobile svg {\\\\n height: 14px !important;\\\\n width: 14px !important;\\\\n}\\\\n.threeboxProfileHover__style_addressCopy {\\\\n position: relative;\\\\n color: #b7bece;\\\\n border-left: 1px solid #edf2fb;\\\\n padding: 9px 4px 4px 9px;\\\\n width: 16px;\\\\n font-size: 12px;\\\\n height: 20px;\\\\n display: inline-block;\\\\n}\\\\n.threeboxProfileHover__style_addressCopy:hover {\\\\n cursor: pointer;\\\\n color: #7c8aa7;\\\\n}\\\\n.threeboxProfileHover__style_addressCopy:active {\\\\n background-color: #f7f7fb;\\\\n}\\\\n.threeboxProfileHover__style_addressAndCheck svg {\\\\n margin-left: 6px;\\\\n}\\\\n.threeboxProfileHover__style_boxAddressWrap .threeboxProfileHover__style_hoverWrap {\\\\n height: fit-content;\\\\n width: fit-content;\\\\n position: absolute;\\\\n z-index: 2;\\\\n}\\\\n.threeboxProfileHover__style_boxAddressWrap .threeboxProfileHover__style_hoverWrap.threeboxProfileHover__style_top {\\\\n padding-bottom: 20px;\\\\n bottom: 90%;\\\\n left: -10px;\\\\n}\\\\n.threeboxProfileHover__style_boxAddressWrap .threeboxProfileHover__style_hoverWrap.threeboxProfileHover__style_bottom {\\\\n padding-top: 20px;\\\\n top: 90%;\\\\n left: -10px;\\\\n}\\\\n.threeboxProfileHover__style_boxAddressWrap .threeboxProfileHover__style_hoverWrap.threeboxProfileHover__style_right {\\\\n padding-left: 20px;\\\\n top: calc(50% - 33px);\\\\n left: calc(100% + -5px);\\\\n}\\\\n.threeboxProfileHover__style_boxAddressWrap .threeboxProfileHover__style_hoverWrap.threeboxProfileHover__style_left {\\\\n padding-right: 20px;\\\\n top: calc(50% - 33px);\\\\n right: calc(100% + -5px);\\\\n}\\\\n.threeboxProfileHover__style_boxAddressWrap .threeboxProfileHover__style_hoverProfile {\\\\n border-radius: 10px;\\\\n border: 1px solid #edf2fb;\\\\n box-shadow: 0 3px 8px 0 rgba(87, 87, 87, 0.15);\\\\n background: white;\\\\n color: #181F21;\\\\n width: 230px;\\\\n z-index: 1111;\\\\n display: none;\\\\n flex-direction: column;\\\\n justify-content: flex-start;\\\\n align-items: flex-start;\\\\n padding: 20px 20px 20px 20px;\\\\n position: relative;\\\\n}\\\\n.threeboxProfileHover__style_boxAddressWrap.threeboxProfileHover__style_isDesktop:hover .threeboxProfileHover__style_hoverWrap .threeboxProfileHover__style_hoverProfile {\\\\n display: flex;\\\\n}\\\\n.threeboxProfileHover__style_boxAddressWrap .threeboxProfileHover__style_hoverWrap.threeboxProfileHover__style_showHoverMobile .threeboxProfileHover__style_hoverProfile {\\\\n display: flex;\\\\n box-sizing: border-box;\\\\n min-width: 270px;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfileEmpty {\\\\n padding: 20px;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile p {\\\\n letter-spacing: 0.4px;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile textarea {\\\\n font-size: 18px;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_coverPicture {\\\\n position: absolute;\\\\n top: 0;\\\\n width: 100%;\\\\n height: 70px;\\\\n z-index: 1;\\\\n margin-left: -20px;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_coverPicture_image {\\\\n min-width: 100%;\\\\n min-height: 70px;\\\\n max-width: 100%;\\\\n max-height: 70px;\\\\n object-fit: cover;\\\\n border-top-left-radius: 10px;\\\\n border-top-right-radius: 10px;\\\\n background-color: #f5f5f5;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_profileValue {\\\\n display: flex;\\\\n justify-content: flex-start;\\\\n align-items: center;\\\\n width: 100%;\\\\n height: 18px;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_profileValue a {\\\\n text-decoration: none;\\\\n color: #487dec;\\\\n font-size: 14px;\\\\n width: 80%;\\\\n white-space: nowrap;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile p {\\\\n margin: 0;\\\\n color: #ababab;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_profileValuePicture {\\\\n z-index: 2;\\\\n margin-top: 10px;\\\\n display: flex;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_profileValuePicture .threeboxProfileHover__style_profileValuePicture_image {\\\\n background: white;\\\\n height: 60px;\\\\n width: 60px;\\\\n border-radius: 50%;\\\\n object-fit: cover;\\\\n margin-bottom: 14px;\\\\n border: 3px solid white;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_noProfileImgSpacer {\\\\n margin-top: 65px;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_profileDescription .threeboxProfileHover__style_profileDescription_text {\\\\n font-size: 14px;\\\\n margin-top: 4px;\\\\n color: #949494;\\\\n line-height: 18px;\\\\n text-align: left;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_profileValue .threeboxProfileHover__style_profileText {\\\\n padding-left: 6px;\\\\n display: flex;\\\\n justify-content: flex-start;\\\\n align-items: center;\\\\n color: #487dec;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_profileValue svg {\\\\n margin-left: 8px;\\\\n color: #487dec;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_profileValueName {\\\\n letter-spacing: 1px;\\\\n width: 100%;\\\\n overflow: hidden;\\\\n display: flex;\\\\n justify-content: flex-start;\\\\n align-items: center;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_profileValueName.threeboxProfileHover__style_noContent {\\\\n margin-bottom: 20px;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_profileValueName span {\\\\n margin-left: 5px;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_profileValueName svg {\\\\n margin-left: 8px;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_profileValueName .threeboxProfileHover__style_profileText {\\\\n text-decoration: none;\\\\n color: #181F21;\\\\n font-weight: 600;\\\\n font-size: 20px;\\\\n text-align: left;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_profileText p {\\\\n color: #487dec !important;\\\\n font-size: 14px !important;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_profileValueName .threeboxProfileHover__style_profileText:hover {\\\\n text-decoration: underline;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_profileValueName .threeboxProfileHover__style_profileText:visited {\\\\n color: #181F21;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_boxLink {\\\\n font-size: 12px;\\\\n border-radius: 0px 0px 3px 3px;\\\\n color: #ababab;\\\\n display: flex;\\\\n justify-content: space-between;\\\\n align-items: center;\\\\n width: 100%;\\\\n position: relative;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_boxLink .threeboxProfileHover__style_boxLinkText {\\\\n display: flex;\\\\n justify-content: flex-end;\\\\n align-items: center;\\\\n transition: 0.3s all ease-in-out;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_boxLink .threeboxProfileHover__style_boxLinkText:hover {\\\\n color: #1168df !important;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_boxLink .threeboxProfileHover__style_boxLinkText:hover .threeboxProfileHover__style_logo {\\\\n opacity: 1 !important;\\\\n filter: saturate(100%);\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_boxLink .threeboxProfileHover__style_boxLinkText img {\\\\n margin-left: 12px;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_boxLink .threeboxProfileHover__style_profileCheck {\\\\n position: absolute;\\\\n right: -16px;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_logo {\\\\n opacity: 0.1 !important;\\\\n height: 18px;\\\\n width: 18px;\\\\n filter: saturate(0%);\\\\n transition: 0.3s all ease-in-out;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_boxLink a {\\\\n color: #ababab !important;\\\\n font-weight: 300 !important;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_BoxLinkText {\\\\n display: flex;\\\\n justify-content: flex-start;\\\\n align-items: center;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_boxLinkEmpty {\\\\n font-size: 12px;\\\\n text-align: center;\\\\n border-radius: 0px 0px 3px 3px;\\\\n display: flex;\\\\n justify-content: space-between;\\\\n align-items: center;\\\\n width: 100%;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_boxLink a {\\\\n text-decoration: none;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_boxLink svg {\\\\n color: #487dec;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_boxLinkEmpty_text {\\\\n display: flex;\\\\n justify-content: flex-start;\\\\n align-items: center;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_boxLinkEmpty a {\\\\n text-decoration: none;\\\\n color: #487dec;\\\\n font-weight: 600;\\\\n margin-right: 5px;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_boxLinkEmpty span {\\\\n color: #ababab;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_boxLinkEmpty svg {\\\\n color: #487dec;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_profileDetails {\\\\n margin: 24px 0;\\\\n width: 100%;\\\\n overflow: hidden;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_profileValueKey {\\\\n font-size: 12px;\\\\n width: 20%;\\\\n text-align: left;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile:after {\\\\n content: '';\\\\n position: absolute;\\\\n width: 10px;\\\\n height: 10px;\\\\n border-bottom: 1px solid #edf2fb;\\\\n border-right: 1px solid #edf2fb;\\\\n background: white;\\\\n z-index: 0;\\\\n}\\\\n.threeboxProfileHover__style_hoverWrap.threeboxProfileHover__style_bottom .threeboxProfileHover__style_hoverProfile:after {\\\\n top: -6px;\\\\n left: 14%;\\\\n margin-left: -10px;\\\\n -moz-transform: rotate(225deg);\\\\n -webkit-transform: rotate(225deg);\\\\n transform: rotate(225deg);\\\\n}\\\\n.threeboxProfileHover__style_hoverWrap.threeboxProfileHover__style_top .threeboxProfileHover__style_hoverProfile:after {\\\\n bottom: -6px;\\\\n left: 14%;\\\\n margin-left: -10px;\\\\n -moz-transform: rotate(45deg);\\\\n -webkit-transform: rotate(45deg);\\\\n transform: rotate(45deg);\\\\n}\\\\n.threeboxProfileHover__style_hoverWrap.threeboxProfileHover__style_right .threeboxProfileHover__style_hoverProfile:after {\\\\n top: 37px;\\\\n left: -6px;\\\\n margin-top: -10px;\\\\n -moz-transform: rotate(135deg);\\\\n -webkit-transform: rotate(135deg);\\\\n transform: rotate(135deg);\\\\n}\\\\n.threeboxProfileHover__style_hoverWrap.threeboxProfileHover__style_left .threeboxProfileHover__style_hoverProfile:after {\\\\n top: 37px;\\\\n right: -6px;\\\\n margin-top: -10px;\\\\n -moz-transform: rotate(315deg);\\\\n -webkit-transform: rotate(315deg);\\\\n transform: rotate(315deg);\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_addressAndCheck {\\\\n display: flex;\\\\n justify-content: flex-start;\\\\n align-items: center;\\\\n width: fit-content;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_addressWrapper {\\\\n background-color: #f9f9f9;\\\\n padding: 4px 6px;\\\\n border-radius: 3px;\\\\n cursor: pointer;\\\\n display: flex;\\\\n justify-content: flex-start;\\\\n align-items: center;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_addressWrapper img {\\\\n width: 13px;\\\\n height: 13px;\\\\n opacity: 0.3;\\\\n margin-right: 6px;\\\\n}\\\\n.threeboxProfileHover__style_hoverProfile .threeboxProfileHover__style_address {\\\\n font-size: 12px;\\\\n color: #ababab;\\\\n}\\\\n.threeboxProfileHover__style_loadingText {\\\\n text-align: center;\\\\n padding: 2px;\\\\n font-size: 13px;\\\\n}\\\\n.threeboxProfileHover__style_noMargin {\\\\n margin: 0 !important;\\\\n}\\\\n.threeboxProfileHover__style_onClickOutsideMobile {\\\\n display: flex;\\\\n position: fixed;\\\\n top: 0;\\\\n left: 0;\\\\n width: 100%;\\\\n height: 100%;\\\\n z-index: 1;\\\\n}\\\\n\\\", \\\"\\\",{\\\"version\\\":3,\\\"sources\\\":[\\\"/Users/kenzo/profile-hover/src/style.less\\\"],\\\"names\\\":[],\\\"mappings\\\":\\\"AAAA;EACE,uBAAuB;EACvB,mBAAmB;EACnB,YAAY;EACZ,8BAA8B;EAC9B,kBAAkB;EAClB,cAAc;EACd,kBAAkB;EAClB,aAAa;EACb,2BAA2B;EAC3B,mBAAmB;AACrB;AACA;EACE,yBAAyB;EACzB,iBAAiB;EACjB,kBAAkB;AACpB;AACA;EACE,aAAa;EACb,yBAAyB;EACzB,mBAAmB;AACrB;AACA;EACE,eAAe;AACjB;AACA;EACE,oCAAoC;EACpC,mCAAmC;AACrC;AACA;EACE,oCAAoC;AACtC;AACA;EACE,kBAAkB;AACpB;AACA;EACE,cAAc;EACd,WAAW;EACX,kBAAkB;EAClB,8BAA8B;EAC9B,mCAAmC;EACnC,4BAA4B;AAC9B;AACA;EACE,mBAAmB;EACnB,YAAY;EACZ,WAAW;EACX,kBAAkB;EAClB,gBAAgB;AAClB;AACA;EACE,8BAA8B;AAChC;AACA;EACE,YAAY;EACZ,WAAW;EACX,iBAAiB;EACjB,uBAAuB;AACzB;AACA;EACE,cAAc;EACd,eAAe;EACf,gBAAgB;EAChB,uBAAuB;EACvB,cAAc;EACd,eAAe;EACf,gBAAgB;EAChB,uBAAuB;EACvB,gBAAgB;EAChB,mBAAmB;AACrB;AACA;EACE,gBAAgB;AAClB;AACA;EACE,kBAAkB;EAClB,mBAAmB;EACnB,cAAc;EACd,UAAU;EACV,YAAY;EACZ,6BAA6B;AAC/B;AACA;EACE,yBAAyB;EACzB,8BAA8B;EAC9B,0BAA0B;EAC1B,WAAW;EACX,YAAY;AACd;AACA;EACE,uBAAuB;EACvB,sBAAsB;AACxB;AACA;EACE,kBAAkB;EAClB,cAAc;EACd,8BAA8B;EAC9B,wBAAwB;EACxB,WAAW;EACX,eAAe;EACf,YAAY;EACZ,qBAAqB;AACvB;AACA;EACE,eAAe;EACf,cAAc;AAChB;AACA;EACE,yBAAyB;AAC3B;AACA;EACE,gBAAgB;AAClB;AACA;EACE,mBAAmB;EACnB,kBAAkB;EAClB,kBAAkB;EAClB,UAAU;AACZ;AACA;EACE,oBAAoB;EACpB,WAAW;EACX,WAAW;AACb;AACA;EACE,iBAAiB;EACjB,QAAQ;EACR,WAAW;AACb;AACA;EACE,kBAAkB;EAClB,qBAAqB;EACrB,uBAAuB;AACzB;AACA;EACE,mBAAmB;EACnB,qBAAqB;EACrB,wBAAwB;AAC1B;AACA;EACE,mBAAmB;EACnB,yBAAyB;EACzB,8CAA8C;EAC9C,iBAAiB;EACjB,cAAc;EACd,YAAY;EACZ,aAAa;EACb,aAAa;EACb,sBAAsB;EACtB,2BAA2B;EAC3B,uBAAuB;EACvB,4BAA4B;EAC5B,kBAAkB;AACpB;AACA;EACE,aAAa;AACf;AACA;EACE,aAAa;EACb,sBAAsB;EACtB,gBAAgB;AAClB;AACA;EACE,aAAa;AACf;AACA;EACE,qBAAqB;AACvB;AACA;EACE,eAAe;AACjB;AACA;EACE,kBAAkB;EAClB,MAAM;EACN,WAAW;EACX,YAAY;EACZ,UAAU;EACV,kBAAkB;AACpB;AACA;EACE,eAAe;EACf,gBAAgB;EAChB,eAAe;EACf,gBAAgB;EAChB,iBAAiB;EACjB,4BAA4B;EAC5B,6BAA6B;EAC7B,yBAAyB;AAC3B;AACA;EACE,aAAa;EACb,2BAA2B;EAC3B,mBAAmB;EACnB,WAAW;EACX,YAAY;AACd;AACA;EACE,qBAAqB;EACrB,cAAc;EACd,eAAe;EACf,UAAU;EACV,mBAAmB;AACrB;AACA;EACE,SAAS;EACT,cAAc;AAChB;AACA;EACE,UAAU;EACV,gBAAgB;EAChB,aAAa;AACf;AACA;EACE,iBAAiB;EACjB,YAAY;EACZ,WAAW;EACX,kBAAkB;EAClB,iBAAiB;EACjB,mBAAmB;EACnB,uBAAuB;AACzB;AACA;EACE,gBAAgB;AAClB;AACA;EACE,eAAe;EACf,eAAe;EACf,cAAc;EACd,iBAAiB;EACjB,gBAAgB;AAClB;AACA;EACE,iBAAiB;EACjB,aAAa;EACb,2BAA2B;EAC3B,mBAAmB;EACnB,cAAc;AAChB;AACA;EACE,gBAAgB;EAChB,cAAc;AAChB;AACA;EACE,mBAAmB;EACnB,WAAW;EACX,gBAAgB;EAChB,aAAa;EACb,2BAA2B;EAC3B,mBAAmB;AACrB;AACA;EACE,mBAAmB;AACrB;AACA;EACE,gBAAgB;AAClB;AACA;EACE,gBAAgB;AAClB;AACA;EACE,qBAAqB;EACrB,cAAc;EACd,gBAAgB;EAChB,eAAe;EACf,gBAAgB;AAClB;AACA;EACE,yBAAyB;EACzB,0BAA0B;AAC5B;AACA;EACE,0BAA0B;AAC5B;AACA;EACE,cAAc;AAChB;AACA;EACE,eAAe;EACf,8BAA8B;EAC9B,cAAc;EACd,aAAa;EACb,8BAA8B;EAC9B,mBAAmB;EACnB,WAAW;EACX,kBAAkB;AACpB;AACA;EACE,aAAa;EACb,yBAAyB;EACzB,mBAAmB;EACnB,gCAAgC;AAClC;AACA;EACE,yBAAyB;AAC3B;AACA;EACE,qBAAqB;EACrB,sBAAsB;AACxB;AACA;EACE,iBAAiB;AACnB;AACA;EACE,kBAAkB;EAClB,YAAY;AACd;AACA;EACE,uBAAuB;EACvB,YAAY;EACZ,WAAW;EACX,oBAAoB;EACpB,gCAAgC;AAClC;AACA;EACE,yBAAyB;EACzB,2BAA2B;AAC7B;AACA;EACE,aAAa;EACb,2BAA2B;EAC3B,mBAAmB;AACrB;AACA;EACE,eAAe;EACf,kBAAkB;EAClB,8BAA8B;EAC9B,aAAa;EACb,8BAA8B;EAC9B,mBAAmB;EACnB,WAAW;AACb;AACA;EACE,qBAAqB;AACvB;AACA;EACE,cAAc;AAChB;AACA;EACE,aAAa;EACb,2BAA2B;EAC3B,mBAAmB;AACrB;AACA;EACE,qBAAqB;EACrB,cAAc;EACd,gBAAgB;EAChB,iBAAiB;AACnB;AACA;EACE,cAAc;AAChB;AACA;EACE,cAAc;AAChB;AACA;EACE,cAAc;EACd,WAAW;EACX,gBAAgB;AAClB;AACA;EACE,eAAe;EACf,UAAU;EACV,gBAAgB;AAClB;AACA;EACE,WAAW;EACX,kBAAkB;EAClB,WAAW;EACX,YAAY;EACZ,gCAAgC;EAChC,+BAA+B;EAC/B,iBAAiB;EACjB,UAAU;AACZ;AACA;EACE,SAAS;EACT,SAAS;EACT,kBAAkB;EAClB,8BAA8B;EAC9B,iCAAiC;EACjC,yBAAyB;AAC3B;AACA;EACE,YAAY;EACZ,SAAS;EACT,kBAAkB;EAClB,6BAA6B;EAC7B,gCAAgC;EAChC,wBAAwB;AAC1B;AACA;EACE,SAAS;EACT,UAAU;EACV,iBAAiB;EACjB,8BAA8B;EAC9B,iCAAiC;EACjC,yBAAyB;AAC3B;AACA;EACE,SAAS;EACT,WAAW;EACX,iBAAiB;EACjB,8BAA8B;EAC9B,iCAAiC;EACjC,yBAAyB;AAC3B;AACA;EACE,aAAa;EACb,2BAA2B;EAC3B,mBAAmB;EACnB,kBAAkB;AACpB;AACA;EACE,yBAAyB;EACzB,gBAAgB;EAChB,kBAAkB;EAClB,eAAe;EACf,aAAa;EACb,2BAA2B;EAC3B,mBAAmB;AACrB;AACA;EACE,WAAW;EACX,YAAY;EACZ,YAAY;EACZ,iBAAiB;AACnB;AACA;EACE,eAAe;EACf,cAAc;AAChB;AACA;EACE,kBAAkB;EAClB,YAAY;EACZ,eAAe;AACjB;AACA;EACE,oBAAoB;AACtB;AACA;EACE,aAAa;EACb,eAAe;EACf,MAAM;EACN,OAAO;EACP,WAAW;EACX,YAAY;EACZ,UAAU;AACZ\\\",\\\"file\\\":\\\"style.less\\\",\\\"sourcesContent\\\":[\\\".boxAddress {\\\\n background: transparent;\\\\n height: fit-content;\\\\n padding: 0px;\\\\n font-family: Arial, sans-serif;\\\\n position: relative;\\\\n display: block;\\\\n width: fit-content;\\\\n display: flex;\\\\n justify-content: flex-start;\\\\n align-items: center;\\\\n}\\\\n.boxAddress.tileStyle {\\\\n border: 1px solid #edf2fb;\\\\n background: white;\\\\n border-radius: 5px;\\\\n}\\\\n.boxAddressContentWrapper {\\\\n display: flex;\\\\n justify-content: flex-end;\\\\n align-items: center;\\\\n}\\\\n.boxAddressContentWrapper.boxAddressLink {\\\\n cursor: pointer;\\\\n}\\\\n.tileStyle .boxAddressContentWrapper {\\\\n max-width: calc(200px + 50px + 40px);\\\\n min-width: calc(92px + 50px + 40px);\\\\n}\\\\n.boxAddressContentWrapper {\\\\n max-width: calc(200px + 50px + 40px);\\\\n}\\\\n.boxAddressFull {\\\\n width: fit-content;\\\\n}\\\\n.boxAddressWrap {\\\\n display: block;\\\\n float: left;\\\\n position: relative;\\\\n font-family: Arial, sans-serif;\\\\n -webkit-font-smoothing: antialiased;\\\\n background-clip: padding-box;\\\\n}\\\\n.boxAddress .boxImg {\\\\n background: #074988;\\\\n height: 50px;\\\\n width: 50px;\\\\n border-radius: 50%;\\\\n overflow: hidden;\\\\n}\\\\n.boxAddress.tileStyle .boxImg {\\\\n border-radius: 5px 0px 0px 5px;\\\\n}\\\\n.boxAddress .boxImg img {\\\\n height: 100%;\\\\n width: 100%;\\\\n object-fit: cover;\\\\n background-color: white;\\\\n}\\\\n.boxShortAddress {\\\\n color: #636668;\\\\n font-size: 15px;\\\\n font-weight: 600;\\\\n letter-spacing: 0.015em;\\\\n display: block;\\\\n padding: 0 16px;\\\\n max-width: 200px;\\\\n text-overflow: ellipsis;\\\\n overflow: hidden;\\\\n white-space: nowrap;\\\\n}\\\\n.tileStyle .boxShortAddress {\\\\n min-width: 100px;\\\\n}\\\\n.openHover_mobile {\\\\n width: fit-content;\\\\n height: fit-content;\\\\n color: #b7bece;\\\\n padding: 0;\\\\n border: none;\\\\n background-color: transparent;\\\\n}\\\\n.tileStyle .openHover_mobile {\\\\n background-color: #f9f9f9;\\\\n border-left: 1px solid #edf2fb;\\\\n border-radius: 0 5px 5px 0;\\\\n width: 50px;\\\\n height: 50px;\\\\n}\\\\n.openHover_mobile svg {\\\\n height: 14px !important;\\\\n width: 14px !important;\\\\n}\\\\n.addressCopy {\\\\n position: relative;\\\\n color: #b7bece;\\\\n border-left: 1px solid #edf2fb;\\\\n padding: 9px 4px 4px 9px;\\\\n width: 16px;\\\\n font-size: 12px;\\\\n height: 20px;\\\\n display: inline-block;\\\\n}\\\\n.addressCopy:hover {\\\\n cursor: pointer;\\\\n color: #7c8aa7;\\\\n}\\\\n.addressCopy:active {\\\\n background-color: #f7f7fb;\\\\n}\\\\n.addressAndCheck svg {\\\\n margin-left: 6px;\\\\n}\\\\n.boxAddressWrap .hoverWrap {\\\\n height: fit-content;\\\\n width: fit-content;\\\\n position: absolute;\\\\n z-index: 2;\\\\n}\\\\n.boxAddressWrap .hoverWrap.top {\\\\n padding-bottom: 20px;\\\\n bottom: 90%;\\\\n left: -10px;\\\\n}\\\\n.boxAddressWrap .hoverWrap.bottom {\\\\n padding-top: 20px;\\\\n top: 90%;\\\\n left: -10px;\\\\n}\\\\n.boxAddressWrap .hoverWrap.right {\\\\n padding-left: 20px;\\\\n top: calc(50% - 33px);\\\\n left: calc(100% + -5px);\\\\n}\\\\n.boxAddressWrap .hoverWrap.left {\\\\n padding-right: 20px;\\\\n top: calc(50% - 33px);\\\\n right: calc(100% + -5px);\\\\n}\\\\n.boxAddressWrap .hoverProfile {\\\\n border-radius: 10px;\\\\n border: 1px solid #edf2fb;\\\\n box-shadow: 0 3px 8px 0 rgba(87, 87, 87, 0.15);\\\\n background: white;\\\\n color: #181F21;\\\\n width: 230px;\\\\n z-index: 1111;\\\\n display: none;\\\\n flex-direction: column;\\\\n justify-content: flex-start;\\\\n align-items: flex-start;\\\\n padding: 20px 20px 20px 20px;\\\\n position: relative;\\\\n}\\\\n.boxAddressWrap.isDesktop:hover .hoverWrap .hoverProfile {\\\\n display: flex;\\\\n}\\\\n.boxAddressWrap .hoverWrap.showHoverMobile .hoverProfile {\\\\n display: flex;\\\\n box-sizing: border-box;\\\\n min-width: 270px;\\\\n}\\\\n.hoverProfileEmpty {\\\\n padding: 20px;\\\\n}\\\\n.hoverProfile p {\\\\n letter-spacing: 0.4px;\\\\n}\\\\n.hoverProfile textarea {\\\\n font-size: 18px;\\\\n}\\\\n.hoverProfile .coverPicture {\\\\n position: absolute;\\\\n top: 0;\\\\n width: 100%;\\\\n height: 70px;\\\\n z-index: 1;\\\\n margin-left: -20px;\\\\n}\\\\n.hoverProfile .coverPicture_image {\\\\n min-width: 100%;\\\\n min-height: 70px;\\\\n max-width: 100%;\\\\n max-height: 70px;\\\\n object-fit: cover;\\\\n border-top-left-radius: 10px;\\\\n border-top-right-radius: 10px;\\\\n background-color: #f5f5f5;\\\\n}\\\\n.hoverProfile .profileValue {\\\\n display: flex;\\\\n justify-content: flex-start;\\\\n align-items: center;\\\\n width: 100%;\\\\n height: 18px;\\\\n}\\\\n.hoverProfile .profileValue a {\\\\n text-decoration: none;\\\\n color: #487dec;\\\\n font-size: 14px;\\\\n width: 80%;\\\\n white-space: nowrap;\\\\n}\\\\n.hoverProfile p {\\\\n margin: 0;\\\\n color: #ababab;\\\\n}\\\\n.hoverProfile .profileValuePicture {\\\\n z-index: 2;\\\\n margin-top: 10px;\\\\n display: flex;\\\\n}\\\\n.hoverProfile .profileValuePicture .profileValuePicture_image {\\\\n background: white;\\\\n height: 60px;\\\\n width: 60px;\\\\n border-radius: 50%;\\\\n object-fit: cover;\\\\n margin-bottom: 14px;\\\\n border: 3px solid white;\\\\n}\\\\n.hoverProfile .noProfileImgSpacer {\\\\n margin-top: 65px;\\\\n}\\\\n.hoverProfile .profileDescription .profileDescription_text {\\\\n font-size: 14px;\\\\n margin-top: 4px;\\\\n color: #949494;\\\\n line-height: 18px;\\\\n text-align: left;\\\\n}\\\\n.hoverProfile .profileValue .profileText {\\\\n padding-left: 6px;\\\\n display: flex;\\\\n justify-content: flex-start;\\\\n align-items: center;\\\\n color: #487dec;\\\\n}\\\\n.hoverProfile .profileValue svg {\\\\n margin-left: 8px;\\\\n color: #487dec;\\\\n}\\\\n.hoverProfile .profileValueName {\\\\n letter-spacing: 1px;\\\\n width: 100%;\\\\n overflow: hidden;\\\\n display: flex;\\\\n justify-content: flex-start;\\\\n align-items: center;\\\\n}\\\\n.hoverProfile .profileValueName.noContent {\\\\n margin-bottom: 20px;\\\\n}\\\\n.hoverProfile .profileValueName span {\\\\n margin-left: 5px;\\\\n}\\\\n.hoverProfile .profileValueName svg {\\\\n margin-left: 8px;\\\\n}\\\\n.hoverProfile .profileValueName .profileText {\\\\n text-decoration: none;\\\\n color: #181F21;\\\\n font-weight: 600;\\\\n font-size: 20px;\\\\n text-align: left;\\\\n}\\\\n.hoverProfile .profileText p {\\\\n color: #487dec !important;\\\\n font-size: 14px !important;\\\\n}\\\\n.hoverProfile .profileValueName .profileText:hover {\\\\n text-decoration: underline;\\\\n}\\\\n.hoverProfile .profileValueName .profileText:visited {\\\\n color: #181F21;\\\\n}\\\\n.hoverProfile .boxLink {\\\\n font-size: 12px;\\\\n border-radius: 0px 0px 3px 3px;\\\\n color: #ababab;\\\\n display: flex;\\\\n justify-content: space-between;\\\\n align-items: center;\\\\n width: 100%;\\\\n position: relative;\\\\n}\\\\n.hoverProfile .boxLink .boxLinkText {\\\\n display: flex;\\\\n justify-content: flex-end;\\\\n align-items: center;\\\\n transition: 0.3s all ease-in-out;\\\\n}\\\\n.hoverProfile .boxLink .boxLinkText:hover {\\\\n color: #1168df !important;\\\\n}\\\\n.hoverProfile .boxLink .boxLinkText:hover .logo {\\\\n opacity: 1 !important;\\\\n filter: saturate(100%);\\\\n}\\\\n.hoverProfile .boxLink .boxLinkText img {\\\\n margin-left: 12px;\\\\n}\\\\n.hoverProfile .boxLink .profileCheck {\\\\n position: absolute;\\\\n right: -16px;\\\\n}\\\\n.hoverProfile .logo {\\\\n opacity: 0.1 !important;\\\\n height: 18px;\\\\n width: 18px;\\\\n filter: saturate(0%);\\\\n transition: 0.3s all ease-in-out;\\\\n}\\\\n.hoverProfile .boxLink a {\\\\n color: #ababab !important;\\\\n font-weight: 300 !important;\\\\n}\\\\n.hoverProfile .BoxLinkText {\\\\n display: flex;\\\\n justify-content: flex-start;\\\\n align-items: center;\\\\n}\\\\n.hoverProfile .boxLinkEmpty {\\\\n font-size: 12px;\\\\n text-align: center;\\\\n border-radius: 0px 0px 3px 3px;\\\\n display: flex;\\\\n justify-content: space-between;\\\\n align-items: center;\\\\n width: 100%;\\\\n}\\\\n.hoverProfile .boxLink a {\\\\n text-decoration: none;\\\\n}\\\\n.hoverProfile .boxLink svg {\\\\n color: #487dec;\\\\n}\\\\n.hoverProfile .boxLinkEmpty_text {\\\\n display: flex;\\\\n justify-content: flex-start;\\\\n align-items: center;\\\\n}\\\\n.hoverProfile .boxLinkEmpty a {\\\\n text-decoration: none;\\\\n color: #487dec;\\\\n font-weight: 600;\\\\n margin-right: 5px;\\\\n}\\\\n.hoverProfile .boxLinkEmpty span {\\\\n color: #ababab;\\\\n}\\\\n.hoverProfile .boxLinkEmpty svg {\\\\n color: #487dec;\\\\n}\\\\n.hoverProfile .profileDetails {\\\\n margin: 24px 0;\\\\n width: 100%;\\\\n overflow: hidden;\\\\n}\\\\n.hoverProfile .profileValueKey {\\\\n font-size: 12px;\\\\n width: 20%;\\\\n text-align: left;\\\\n}\\\\n.hoverProfile:after {\\\\n content: '';\\\\n position: absolute;\\\\n width: 10px;\\\\n height: 10px;\\\\n border-bottom: 1px solid #edf2fb;\\\\n border-right: 1px solid #edf2fb;\\\\n background: white;\\\\n z-index: 0;\\\\n}\\\\n.hoverWrap.bottom .hoverProfile:after {\\\\n top: -6px;\\\\n left: 14%;\\\\n margin-left: -10px;\\\\n -moz-transform: rotate(225deg);\\\\n -webkit-transform: rotate(225deg);\\\\n transform: rotate(225deg);\\\\n}\\\\n.hoverWrap.top .hoverProfile:after {\\\\n bottom: -6px;\\\\n left: 14%;\\\\n margin-left: -10px;\\\\n -moz-transform: rotate(45deg);\\\\n -webkit-transform: rotate(45deg);\\\\n transform: rotate(45deg);\\\\n}\\\\n.hoverWrap.right .hoverProfile:after {\\\\n top: 37px;\\\\n left: -6px;\\\\n margin-top: -10px;\\\\n -moz-transform: rotate(135deg);\\\\n -webkit-transform: rotate(135deg);\\\\n transform: rotate(135deg);\\\\n}\\\\n.hoverWrap.left .hoverProfile:after {\\\\n top: 37px;\\\\n right: -6px;\\\\n margin-top: -10px;\\\\n -moz-transform: rotate(315deg);\\\\n -webkit-transform: rotate(315deg);\\\\n transform: rotate(315deg);\\\\n}\\\\n.hoverProfile .addressAndCheck {\\\\n display: flex;\\\\n justify-content: flex-start;\\\\n align-items: center;\\\\n width: fit-content;\\\\n}\\\\n.hoverProfile .addressWrapper {\\\\n background-color: #f9f9f9;\\\\n padding: 4px 6px;\\\\n border-radius: 3px;\\\\n cursor: pointer;\\\\n display: flex;\\\\n justify-content: flex-start;\\\\n align-items: center;\\\\n}\\\\n.hoverProfile .addressWrapper img {\\\\n width: 13px;\\\\n height: 13px;\\\\n opacity: 0.3;\\\\n margin-right: 6px;\\\\n}\\\\n.hoverProfile .address {\\\\n font-size: 12px;\\\\n color: #ababab;\\\\n}\\\\n.loadingText {\\\\n text-align: center;\\\\n padding: 2px;\\\\n font-size: 13px;\\\\n}\\\\n.noMargin {\\\\n margin: 0 !important;\\\\n}\\\\n.onClickOutsideMobile {\\\\n display: flex;\\\\n position: fixed;\\\\n top: 0;\\\\n left: 0;\\\\n width: 100%;\\\\n height: 100%;\\\\n z-index: 1;\\\\n}\\\\n\\\"],\\\"sourceRoot\\\":\\\"\\\"}]);\\n\\n// Exports\\nexports.locals = {\\n\\t\\\"boxAddress\\\": \\\"threeboxProfileHover__style_boxAddress\\\",\\n\\t\\\"tileStyle\\\": \\\"threeboxProfileHover__style_tileStyle\\\",\\n\\t\\\"boxAddressContentWrapper\\\": \\\"threeboxProfileHover__style_boxAddressContentWrapper\\\",\\n\\t\\\"boxAddressLink\\\": \\\"threeboxProfileHover__style_boxAddressLink\\\",\\n\\t\\\"boxAddressFull\\\": \\\"threeboxProfileHover__style_boxAddressFull\\\",\\n\\t\\\"boxAddressWrap\\\": \\\"threeboxProfileHover__style_boxAddressWrap\\\",\\n\\t\\\"boxImg\\\": \\\"threeboxProfileHover__style_boxImg\\\",\\n\\t\\\"boxShortAddress\\\": \\\"threeboxProfileHover__style_boxShortAddress\\\",\\n\\t\\\"openHover_mobile\\\": \\\"threeboxProfileHover__style_openHover_mobile\\\",\\n\\t\\\"addressCopy\\\": \\\"threeboxProfileHover__style_addressCopy\\\",\\n\\t\\\"addressAndCheck\\\": \\\"threeboxProfileHover__style_addressAndCheck\\\",\\n\\t\\\"hoverWrap\\\": \\\"threeboxProfileHover__style_hoverWrap\\\",\\n\\t\\\"top\\\": \\\"threeboxProfileHover__style_top\\\",\\n\\t\\\"bottom\\\": \\\"threeboxProfileHover__style_bottom\\\",\\n\\t\\\"right\\\": \\\"threeboxProfileHover__style_right\\\",\\n\\t\\\"left\\\": \\\"threeboxProfileHover__style_left\\\",\\n\\t\\\"hoverProfile\\\": \\\"threeboxProfileHover__style_hoverProfile\\\",\\n\\t\\\"isDesktop\\\": \\\"threeboxProfileHover__style_isDesktop\\\",\\n\\t\\\"showHoverMobile\\\": \\\"threeboxProfileHover__style_showHoverMobile\\\",\\n\\t\\\"hoverProfileEmpty\\\": \\\"threeboxProfileHover__style_hoverProfileEmpty\\\",\\n\\t\\\"coverPicture\\\": \\\"threeboxProfileHover__style_coverPicture\\\",\\n\\t\\\"coverPicture_image\\\": \\\"threeboxProfileHover__style_coverPicture_image\\\",\\n\\t\\\"profileValue\\\": \\\"threeboxProfileHover__style_profileValue\\\",\\n\\t\\\"profileValuePicture\\\": \\\"threeboxProfileHover__style_profileValuePicture\\\",\\n\\t\\\"profileValuePicture_image\\\": \\\"threeboxProfileHover__style_profileValuePicture_image\\\",\\n\\t\\\"noProfileImgSpacer\\\": \\\"threeboxProfileHover__style_noProfileImgSpacer\\\",\\n\\t\\\"profileDescription\\\": \\\"threeboxProfileHover__style_profileDescription\\\",\\n\\t\\\"profileDescription_text\\\": \\\"threeboxProfileHover__style_profileDescription_text\\\",\\n\\t\\\"profileText\\\": \\\"threeboxProfileHover__style_profileText\\\",\\n\\t\\\"profileValueName\\\": \\\"threeboxProfileHover__style_profileValueName\\\",\\n\\t\\\"noContent\\\": \\\"threeboxProfileHover__style_noContent\\\",\\n\\t\\\"boxLink\\\": \\\"threeboxProfileHover__style_boxLink\\\",\\n\\t\\\"boxLinkText\\\": \\\"threeboxProfileHover__style_boxLinkText\\\",\\n\\t\\\"logo\\\": \\\"threeboxProfileHover__style_logo\\\",\\n\\t\\\"profileCheck\\\": \\\"threeboxProfileHover__style_profileCheck\\\",\\n\\t\\\"BoxLinkText\\\": \\\"threeboxProfileHover__style_BoxLinkText\\\",\\n\\t\\\"boxLinkEmpty\\\": \\\"threeboxProfileHover__style_boxLinkEmpty\\\",\\n\\t\\\"boxLinkEmpty_text\\\": \\\"threeboxProfileHover__style_boxLinkEmpty_text\\\",\\n\\t\\\"profileDetails\\\": \\\"threeboxProfileHover__style_profileDetails\\\",\\n\\t\\\"profileValueKey\\\": \\\"threeboxProfileHover__style_profileValueKey\\\",\\n\\t\\\"addressWrapper\\\": \\\"threeboxProfileHover__style_addressWrapper\\\",\\n\\t\\\"address\\\": \\\"threeboxProfileHover__style_address\\\",\\n\\t\\\"loadingText\\\": \\\"threeboxProfileHover__style_loadingText\\\",\\n\\t\\\"noMargin\\\": \\\"threeboxProfileHover__style_noMargin\\\",\\n\\t\\\"onClickOutsideMobile\\\": \\\"threeboxProfileHover__style_onClickOutsideMobile\\\"\\n};\\n\\n//# sourceURL=webpack:///./src/style.less?./node_modules/css-loader/dist/cjs.js??ref--5-0!./node_modules/less-loader/dist/cjs.js\");\n\n/***/ }),\n\n/***/ \"./node_modules/css-loader/dist/runtime/api.js\":\n/*!*****************************************************!*\\\n !*** ./node_modules/css-loader/dist/runtime/api.js ***!\n \\*****************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\n/*\\n MIT License http://www.opensource.org/licenses/mit-license.php\\n Author Tobias Koppers @sokra\\n*/\\n// css base code, injected by the css-loader\\nmodule.exports = function (useSourceMap) {\\n var list = []; // return the list of modules as css string\\n\\n list.toString = function toString() {\\n return this.map(function (item) {\\n var content = cssWithMappingToString(item, useSourceMap);\\n\\n if (item[2]) {\\n return '@media ' + item[2] + '{' + content + '}';\\n } else {\\n return content;\\n }\\n }).join('');\\n }; // import a list of modules into the list\\n\\n\\n list.i = function (modules, mediaQuery) {\\n if (typeof modules === 'string') {\\n modules = [[null, modules, '']];\\n }\\n\\n var alreadyImportedModules = {};\\n\\n for (var i = 0; i < this.length; i++) {\\n var id = this[i][0];\\n\\n if (id != null) {\\n alreadyImportedModules[id] = true;\\n }\\n }\\n\\n for (i = 0; i < modules.length; i++) {\\n var item = modules[i]; // skip already imported module\\n // this implementation is not 100% perfect for weird media query combinations\\n // when a module is imported multiple times with different media queries.\\n // I hope this will never occur (Hey this way we have smaller bundles)\\n\\n if (item[0] == null || !alreadyImportedModules[item[0]]) {\\n if (mediaQuery && !item[2]) {\\n item[2] = mediaQuery;\\n } else if (mediaQuery) {\\n item[2] = '(' + item[2] + ') and (' + mediaQuery + ')';\\n }\\n\\n list.push(item);\\n }\\n }\\n };\\n\\n return list;\\n};\\n\\nfunction cssWithMappingToString(item, useSourceMap) {\\n var content = item[1] || '';\\n var cssMapping = item[3];\\n\\n if (!cssMapping) {\\n return content;\\n }\\n\\n if (useSourceMap && typeof btoa === 'function') {\\n var sourceMapping = toComment(cssMapping);\\n var sourceURLs = cssMapping.sources.map(function (source) {\\n return '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */';\\n });\\n return [content].concat(sourceURLs).concat([sourceMapping]).join('\\\\n');\\n }\\n\\n return [content].join('\\\\n');\\n} // Adapted from convert-source-map (MIT)\\n\\n\\nfunction toComment(sourceMap) {\\n // eslint-disable-next-line no-undef\\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\\n var data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;\\n return '/*# ' + data + ' */';\\n}\\n\\n//# sourceURL=webpack:///./node_modules/css-loader/dist/runtime/api.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/did-jwt/lib/index.js\":\n/*!*******************************************!*\\\n !*** ./node_modules/did-jwt/lib/index.js ***!\n \\*******************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {function r(r){return r&&\\\"object\\\"==typeof r&&\\\"default\\\"in r?r.default:r}var e=__webpack_require__(/*! js-sha256 */ \\\"./node_modules/js-sha256/src/sha256.js\\\"),t=__webpack_require__(/*! js-sha3 */ \\\"./node_modules/did-jwt/node_modules/js-sha3/src/sha3.js\\\"),n=__webpack_require__(/*! elliptic */ \\\"./node_modules/elliptic/lib/elliptic.js\\\"),o=r(__webpack_require__(/*! tweetnacl */ \\\"./node_modules/tweetnacl/nacl-fast.js\\\")),i=__webpack_require__(/*! @stablelib/utf8 */ \\\"./node_modules/@stablelib/utf8/lib/utf8.js\\\"),a=__webpack_require__(/*! buffer */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\"),u=r(__webpack_require__(/*! uport-base64url */ \\\"./node_modules/uport-base64url/index.js\\\")),c=r(__webpack_require__(/*! did-resolver */ \\\"./node_modules/did-resolver/lib/resolver.js\\\"));function f(r){return a.Buffer.from(e.sha256.arrayBuffer(r))}function s(r){return\\\"0x\\\"+(e=a.Buffer.from(r.slice(2),\\\"hex\\\"),a.Buffer.from(t.keccak_256.arrayBuffer(e))).slice(-20).toString(\\\"hex\\\");var e}var d=new n.ec(\\\"secp256k1\\\");function h(r,e){return void 0===e&&(e=64),r.length===e?r:\\\"0\\\".repeat(e-r.length)+r}function l(r){return new Uint8Array(Array.prototype.slice.call(Buffer.from(r,\\\"base64\\\"),0))}var p=new n.ec(\\\"secp256k1\\\");function v(r,e){void 0===e&&(e=!1);var t=u.toBuffer(r);if(t.length!==(e?65:64))throw new Error(\\\"wrong signature length\\\");var n={r:t.slice(0,32).toString(\\\"hex\\\"),s:t.slice(32,64).toString(\\\"hex\\\")};return e&&(n.recoveryParam=t[64]),n}var w={ES256K:function(r,e,t){var n=f(r),o=v(e),i=t.find(function(r){return p.keyFromPublic(r.publicKeyHex,\\\"hex\\\").verify(n,o)});if(!i)throw new Error(\\\"Signature invalid for JWT\\\");return i},\\\"ES256K-R\\\":function(r,e,t){var n=v(e,!0),o=f(r),i=p.recoverPubKey(o,n,n.recoveryParam),a=i.encode(\\\"hex\\\"),u=i.encode(\\\"hex\\\",!0),c=s(a),d=t.find(function(r){var e=r.publicKeyHex;return e===a||e===u||r.ethereumAddress===c});if(!d)throw new Error(\\\"Signature invalid for JWT\\\");return d},Ed25519:function(r,e,t){var n=i.encode(r),a=l(u.toBase64(e)),c=t.find(function(r){return o.sign.detached.verify(n,a,l(r.publicKeyBase64))});if(!c)throw new Error(\\\"Signature invalid for JWT\\\");return c}};function y(r){var e=w[r];if(!e)throw new Error(\\\"Unsupported algorithm \\\"+r);return e}function g(r){return\\\"object\\\"==typeof r&&\\\"r\\\"in r&&\\\"s\\\"in r}function m(r){return function(e,t){try{return Promise.resolve(t(e)).then(function(e){if(g(e))return function(t){var n=e.r,o=e.s,i=e.recoveryParam,c=a.Buffer.alloc(r?65:64);if(a.Buffer.from(n,\\\"hex\\\").copy(c,0),a.Buffer.from(o,\\\"hex\\\").copy(c,32),r){if(void 0===i)throw new Error(\\\"Signer did not return a recoveryParam\\\");c[64]=i}return u.encode(c)}();throw new Error(\\\"expected a signer function that returns a signature object instead of string\\\")})}catch(r){return Promise.reject(r)}}}y.toSignatureObject=v;var E={ES256K:m(),\\\"ES256K-R\\\":m(!0),Ed25519:function(r,e){try{return Promise.resolve(e(r)).then(function(r){if(g(r))throw new Error(\\\"expected a signer function that returns a string instead of signature object\\\");return r})}catch(r){return Promise.reject(r)}}},b={ES256K:[\\\"Secp256k1VerificationKey2018\\\",\\\"Secp256k1SignatureVerificationKey2018\\\",\\\"EcdsaPublicKeySecp256k1\\\"],\\\"ES256K-R\\\":[\\\"Secp256k1VerificationKey2018\\\",\\\"Secp256k1SignatureVerificationKey2018\\\",\\\"EcdsaPublicKeySecp256k1\\\"],Ed25519:[\\\"ED25519SignatureVerification\\\"]};function S(r){return u.encode(JSON.stringify(r))}function x(r){return r.match(/^[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+$/)}function P(r){if(r.match(/^did:/))return r;if(x(r))return\\\"did:uport:\\\"+r;throw new Error(\\\"Not a valid DID '\\\"+r+\\\"'\\\")}function k(r){if(!r)throw new Error(\\\"no JWT passed into decodeJWT\\\");var e=r.match(/^([a-zA-Z0-9_-]+)\\\\.([a-zA-Z0-9_-]+)\\\\.([a-zA-Z0-9_-]+)$/);if(e)return{header:JSON.parse(u.decode(e[1])),payload:JSON.parse(u.decode(e[2])),signature:e[3],data:e[1]+\\\".\\\"+e[2]};throw new Error(\\\"Incorrect format JWT\\\")}exports.SimpleSigner=function(r){var e=d.keyFromPrivate(r);return function(r){try{var t=e.sign(f(r)),n=t.s,o=t.recoveryParam;return Promise.resolve({r:h(t.r.toString(\\\"hex\\\")),s:h(n.toString(\\\"hex\\\")),recoveryParam:o})}catch(r){return Promise.reject(r)}}},exports.NaclSigner=function(r){var e=l(r);return function(r){try{var t=i.encode(r),n=o.sign.detached(t,e),c=u.encode(a.Buffer.from(n));return Promise.resolve(c)}catch(r){return Promise.reject(r)}}},exports.verifyJWT=function(r,e){void 0===e&&(e={auth:null,audience:null,callbackUrl:null});try{var t=e.audience?P(e.audience):void 0,n=k(r),o=n.payload,i=n.header,a=n.signature,u=n.data;return Promise.resolve(function(r,e,t){try{var n=b[r];if(!n||0===n.length)throw new Error(\\\"No supported signature types for algorithm \\\"+r);var o=P(e);return Promise.resolve(c(o)).then(function(e){if(!e)throw new Error(\\\"Unable to resolve DID document for \\\"+o);var i=!t||(e.authentication||[]).map(function(r){return r.publicKey}),a=(e.publicKey||[]).filter(function(r){var e=r.type,o=r.id;return n.find(function(r){return r===e&&(!t||Array.isArray(i)&&i.indexOf(o)>=0)})});if(t&&(!a||0===a.length))throw new Error(\\\"DID document for \\\"+o+\\\" does not have public keys suitable for authenticationg user\\\");if(!a||0===a.length)throw new Error(\\\"DID document for \\\"+o+\\\" does not have public keys for \\\"+r);return{authenticators:a,issuer:o,doc:e}})}catch(r){return Promise.reject(r)}}(i.alg,o.iss,e.auth)).then(function(n){var c,f=n.doc,s=n.authenticators,d=n.issuer,h=y(i.alg)(u,a,s),l=Math.floor(Date.now()/1e3);if(h){if(o.iat&&o.iat>l+300)throw new Error(\\\"JWT not valid yet (issued in the future): iat: \\\"+o.iat+\\\" > now: \\\"+l);if(o.exp&&o.exp<=l-300)throw new Error(\\\"JWT has expired: exp: \\\"+o.exp+\\\" < now: \\\"+l);if(o.aud)if((c=o.aud)&&(c.match(/^did:/)||x(c))){if(!t)throw new Error(\\\"JWT audience is required but your app address has not been configured\\\");if(t!==P(o.aud))throw new Error(\\\"JWT audience does not match your DID: aud: \\\"+o.aud+\\\" !== yours: \\\"+t)}else{if(!e.callbackUrl)throw new Error(\\\"JWT audience matching your callback url is required but one wasn't passed in\\\");if(o.aud!==e.callbackUrl)throw new Error(\\\"JWT audience does not match the callback url: aud: \\\"+o.aud+\\\" !== url: \\\"+e.callbackUrl)}return{payload:o,doc:f,issuer:d,signer:h,jwt:r}}})}catch(r){return Promise.reject(r)}},exports.createJWT=function(r,e){var t=e.issuer,n=e.signer,o=e.alg,i=e.expiresIn;try{if(!n)throw new Error(\\\"No Signer functionality has been configured\\\");if(!t)throw new Error(\\\"No issuing DID has been configured\\\");var a={typ:\\\"JWT\\\",alg:o||\\\"ES256K\\\"},u={iat:Math.floor(Date.now()/1e3),exp:void 0};if(i){if(\\\"number\\\"!=typeof i)throw new Error(\\\"JWT expiresIn is not a number\\\");u.exp=u.iat+Math.floor(i)}var c=[S(a),S(Object.assign({},u,r,{iss:t}))].join(\\\".\\\"),f=function(r){var e=E[r];if(!e)throw new Error(\\\"Unsupported algorithm \\\"+r);return e}(a.alg);return Promise.resolve(f(c,n)).then(function(r){return[c,r].join(\\\".\\\")})}catch(r){return Promise.reject(r)}},exports.decodeJWT=k,exports.toEthereumAddress=s;\\n//# sourceMappingURL=index.js.map\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/did-jwt/lib/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/did-jwt/node_modules/js-sha3/src/sha3.js\":\n/*!***************************************************************!*\\\n !*** ./node_modules/did-jwt/node_modules/js-sha3/src/sha3.js ***!\n \\***************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"/* WEBPACK VAR INJECTION */(function(process, global) {var __WEBPACK_AMD_DEFINE_RESULT__;/**\\n * [js-sha3]{@link https://github.com/emn178/js-sha3}\\n *\\n * @version 0.8.0\\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\\n * @copyright Chen, Yi-Cyuan 2015-2018\\n * @license MIT\\n */\\n/*jslint bitwise: true */\\n(function () {\\n 'use strict';\\n\\n var INPUT_ERROR = 'input is invalid type';\\n var FINALIZE_ERROR = 'finalize already called';\\n var WINDOW = typeof window === 'object';\\n var root = WINDOW ? window : {};\\n if (root.JS_SHA3_NO_WINDOW) {\\n WINDOW = false;\\n }\\n var WEB_WORKER = !WINDOW && typeof self === 'object';\\n var NODE_JS = !root.JS_SHA3_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\\n if (NODE_JS) {\\n root = global;\\n } else if (WEB_WORKER) {\\n root = self;\\n }\\n var COMMON_JS = !root.JS_SHA3_NO_COMMON_JS && typeof module === 'object' && module.exports;\\n var AMD = true && __webpack_require__(/*! !webpack amd options */ \\\"./node_modules/webpack/buildin/amd-options.js\\\");\\n var ARRAY_BUFFER = !root.JS_SHA3_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\\n var HEX_CHARS = '0123456789abcdef'.split('');\\n var SHAKE_PADDING = [31, 7936, 2031616, 520093696];\\n var CSHAKE_PADDING = [4, 1024, 262144, 67108864];\\n var KECCAK_PADDING = [1, 256, 65536, 16777216];\\n var PADDING = [6, 1536, 393216, 100663296];\\n var SHIFT = [0, 8, 16, 24];\\n var RC = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649,\\n 0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0,\\n 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771,\\n 2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648,\\n 2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648];\\n var BITS = [224, 256, 384, 512];\\n var SHAKE_BITS = [128, 256];\\n var OUTPUT_TYPES = ['hex', 'buffer', 'arrayBuffer', 'array', 'digest'];\\n var CSHAKE_BYTEPAD = {\\n '128': 168,\\n '256': 136\\n };\\n\\n if (root.JS_SHA3_NO_NODE_JS || !Array.isArray) {\\n Array.isArray = function (obj) {\\n return Object.prototype.toString.call(obj) === '[object Array]';\\n };\\n }\\n\\n if (ARRAY_BUFFER && (root.JS_SHA3_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {\\n ArrayBuffer.isView = function (obj) {\\n return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\\n };\\n }\\n\\n var createOutputMethod = function (bits, padding, outputType) {\\n return function (message) {\\n return new Keccak(bits, padding, bits).update(message)[outputType]();\\n };\\n };\\n\\n var createShakeOutputMethod = function (bits, padding, outputType) {\\n return function (message, outputBits) {\\n return new Keccak(bits, padding, outputBits).update(message)[outputType]();\\n };\\n };\\n\\n var createCshakeOutputMethod = function (bits, padding, outputType) {\\n return function (message, outputBits, n, s) {\\n return methods['cshake' + bits].update(message, outputBits, n, s)[outputType]();\\n };\\n };\\n\\n var createKmacOutputMethod = function (bits, padding, outputType) {\\n return function (key, message, outputBits, s) {\\n return methods['kmac' + bits].update(key, message, outputBits, s)[outputType]();\\n };\\n };\\n\\n var createOutputMethods = function (method, createMethod, bits, padding) {\\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\\n var type = OUTPUT_TYPES[i];\\n method[type] = createMethod(bits, padding, type);\\n }\\n return method;\\n };\\n\\n var createMethod = function (bits, padding) {\\n var method = createOutputMethod(bits, padding, 'hex');\\n method.create = function () {\\n return new Keccak(bits, padding, bits);\\n };\\n method.update = function (message) {\\n return method.create().update(message);\\n };\\n return createOutputMethods(method, createOutputMethod, bits, padding);\\n };\\n\\n var createShakeMethod = function (bits, padding) {\\n var method = createShakeOutputMethod(bits, padding, 'hex');\\n method.create = function (outputBits) {\\n return new Keccak(bits, padding, outputBits);\\n };\\n method.update = function (message, outputBits) {\\n return method.create(outputBits).update(message);\\n };\\n return createOutputMethods(method, createShakeOutputMethod, bits, padding);\\n };\\n\\n var createCshakeMethod = function (bits, padding) {\\n var w = CSHAKE_BYTEPAD[bits];\\n var method = createCshakeOutputMethod(bits, padding, 'hex');\\n method.create = function (outputBits, n, s) {\\n if (!n && !s) {\\n return methods['shake' + bits].create(outputBits);\\n } else {\\n return new Keccak(bits, padding, outputBits).bytepad([n, s], w);\\n }\\n };\\n method.update = function (message, outputBits, n, s) {\\n return method.create(outputBits, n, s).update(message);\\n };\\n return createOutputMethods(method, createCshakeOutputMethod, bits, padding);\\n };\\n\\n var createKmacMethod = function (bits, padding) {\\n var w = CSHAKE_BYTEPAD[bits];\\n var method = createKmacOutputMethod(bits, padding, 'hex');\\n method.create = function (key, outputBits, s) {\\n return new Kmac(bits, padding, outputBits).bytepad(['KMAC', s], w).bytepad([key], w);\\n };\\n method.update = function (key, message, outputBits, s) {\\n return method.create(key, outputBits, s).update(message);\\n };\\n return createOutputMethods(method, createKmacOutputMethod, bits, padding);\\n };\\n\\n var algorithms = [\\n { name: 'keccak', padding: KECCAK_PADDING, bits: BITS, createMethod: createMethod },\\n { name: 'sha3', padding: PADDING, bits: BITS, createMethod: createMethod },\\n { name: 'shake', padding: SHAKE_PADDING, bits: SHAKE_BITS, createMethod: createShakeMethod },\\n { name: 'cshake', padding: CSHAKE_PADDING, bits: SHAKE_BITS, createMethod: createCshakeMethod },\\n { name: 'kmac', padding: CSHAKE_PADDING, bits: SHAKE_BITS, createMethod: createKmacMethod }\\n ];\\n\\n var methods = {}, methodNames = [];\\n\\n for (var i = 0; i < algorithms.length; ++i) {\\n var algorithm = algorithms[i];\\n var bits = algorithm.bits;\\n for (var j = 0; j < bits.length; ++j) {\\n var methodName = algorithm.name + '_' + bits[j];\\n methodNames.push(methodName);\\n methods[methodName] = algorithm.createMethod(bits[j], algorithm.padding);\\n if (algorithm.name !== 'sha3') {\\n var newMethodName = algorithm.name + bits[j];\\n methodNames.push(newMethodName);\\n methods[newMethodName] = methods[methodName];\\n }\\n }\\n }\\n\\n function Keccak(bits, padding, outputBits) {\\n this.blocks = [];\\n this.s = [];\\n this.padding = padding;\\n this.outputBits = outputBits;\\n this.reset = true;\\n this.finalized = false;\\n this.block = 0;\\n this.start = 0;\\n this.blockCount = (1600 - (bits << 1)) >> 5;\\n this.byteCount = this.blockCount << 2;\\n this.outputBlocks = outputBits >> 5;\\n this.extraBytes = (outputBits & 31) >> 3;\\n\\n for (var i = 0; i < 50; ++i) {\\n this.s[i] = 0;\\n }\\n }\\n\\n Keccak.prototype.update = function (message) {\\n if (this.finalized) {\\n throw new Error(FINALIZE_ERROR);\\n }\\n var notString, type = typeof message;\\n if (type !== 'string') {\\n if (type === 'object') {\\n if (message === null) {\\n throw new Error(INPUT_ERROR);\\n } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\\n message = new Uint8Array(message);\\n } else if (!Array.isArray(message)) {\\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {\\n throw new Error(INPUT_ERROR);\\n }\\n }\\n } else {\\n throw new Error(INPUT_ERROR);\\n }\\n notString = true;\\n }\\n var blocks = this.blocks, byteCount = this.byteCount, length = message.length,\\n blockCount = this.blockCount, index = 0, s = this.s, i, code;\\n\\n while (index < length) {\\n if (this.reset) {\\n this.reset = false;\\n blocks[0] = this.block;\\n for (i = 1; i < blockCount + 1; ++i) {\\n blocks[i] = 0;\\n }\\n }\\n if (notString) {\\n for (i = this.start; index < length && i < byteCount; ++index) {\\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\\n }\\n } else {\\n for (i = this.start; index < length && i < byteCount; ++index) {\\n code = message.charCodeAt(index);\\n if (code < 0x80) {\\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\\n } else if (code < 0x800) {\\n blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\\n } else if (code < 0xd800 || code >= 0xe000) {\\n blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\\n } else {\\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\\n blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\\n blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\\n }\\n }\\n }\\n this.lastByteIndex = i;\\n if (i >= byteCount) {\\n this.start = i - byteCount;\\n this.block = blocks[blockCount];\\n for (i = 0; i < blockCount; ++i) {\\n s[i] ^= blocks[i];\\n }\\n f(s);\\n this.reset = true;\\n } else {\\n this.start = i;\\n }\\n }\\n return this;\\n };\\n\\n Keccak.prototype.encode = function (x, right) {\\n var o = x & 255, n = 1;\\n var bytes = [o];\\n x = x >> 8;\\n o = x & 255;\\n while (o > 0) {\\n bytes.unshift(o);\\n x = x >> 8;\\n o = x & 255;\\n ++n;\\n }\\n if (right) {\\n bytes.push(n);\\n } else {\\n bytes.unshift(n);\\n }\\n this.update(bytes);\\n return bytes.length;\\n };\\n\\n Keccak.prototype.encodeString = function (str) {\\n var notString, type = typeof str;\\n if (type !== 'string') {\\n if (type === 'object') {\\n if (str === null) {\\n throw new Error(INPUT_ERROR);\\n } else if (ARRAY_BUFFER && str.constructor === ArrayBuffer) {\\n str = new Uint8Array(str);\\n } else if (!Array.isArray(str)) {\\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(str)) {\\n throw new Error(INPUT_ERROR);\\n }\\n }\\n } else {\\n throw new Error(INPUT_ERROR);\\n }\\n notString = true;\\n }\\n var bytes = 0, length = str.length;\\n if (notString) {\\n bytes = length;\\n } else {\\n for (var i = 0; i < str.length; ++i) {\\n var code = str.charCodeAt(i);\\n if (code < 0x80) {\\n bytes += 1;\\n } else if (code < 0x800) {\\n bytes += 2;\\n } else if (code < 0xd800 || code >= 0xe000) {\\n bytes += 3;\\n } else {\\n code = 0x10000 + (((code & 0x3ff) << 10) | (str.charCodeAt(++i) & 0x3ff));\\n bytes += 4;\\n }\\n }\\n }\\n bytes += this.encode(bytes * 8);\\n this.update(str);\\n return bytes;\\n };\\n\\n Keccak.prototype.bytepad = function (strs, w) {\\n var bytes = this.encode(w);\\n for (var i = 0; i < strs.length; ++i) {\\n bytes += this.encodeString(strs[i]);\\n }\\n var paddingBytes = w - bytes % w;\\n var zeros = [];\\n zeros.length = paddingBytes;\\n this.update(zeros);\\n return this;\\n };\\n\\n Keccak.prototype.finalize = function () {\\n if (this.finalized) {\\n return;\\n }\\n this.finalized = true;\\n var blocks = this.blocks, i = this.lastByteIndex, blockCount = this.blockCount, s = this.s;\\n blocks[i >> 2] |= this.padding[i & 3];\\n if (this.lastByteIndex === this.byteCount) {\\n blocks[0] = blocks[blockCount];\\n for (i = 1; i < blockCount + 1; ++i) {\\n blocks[i] = 0;\\n }\\n }\\n blocks[blockCount - 1] |= 0x80000000;\\n for (i = 0; i < blockCount; ++i) {\\n s[i] ^= blocks[i];\\n }\\n f(s);\\n };\\n\\n Keccak.prototype.toString = Keccak.prototype.hex = function () {\\n this.finalize();\\n\\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\\n extraBytes = this.extraBytes, i = 0, j = 0;\\n var hex = '', block;\\n while (j < outputBlocks) {\\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\\n block = s[i];\\n hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F] +\\n HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F] +\\n HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F] +\\n HEX_CHARS[(block >> 28) & 0x0F] + HEX_CHARS[(block >> 24) & 0x0F];\\n }\\n if (j % blockCount === 0) {\\n f(s);\\n i = 0;\\n }\\n }\\n if (extraBytes) {\\n block = s[i];\\n hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F];\\n if (extraBytes > 1) {\\n hex += HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F];\\n }\\n if (extraBytes > 2) {\\n hex += HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F];\\n }\\n }\\n return hex;\\n };\\n\\n Keccak.prototype.arrayBuffer = function () {\\n this.finalize();\\n\\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\\n extraBytes = this.extraBytes, i = 0, j = 0;\\n var bytes = this.outputBits >> 3;\\n var buffer;\\n if (extraBytes) {\\n buffer = new ArrayBuffer((outputBlocks + 1) << 2);\\n } else {\\n buffer = new ArrayBuffer(bytes);\\n }\\n var array = new Uint32Array(buffer);\\n while (j < outputBlocks) {\\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\\n array[j] = s[i];\\n }\\n if (j % blockCount === 0) {\\n f(s);\\n }\\n }\\n if (extraBytes) {\\n array[i] = s[i];\\n buffer = buffer.slice(0, bytes);\\n }\\n return buffer;\\n };\\n\\n Keccak.prototype.buffer = Keccak.prototype.arrayBuffer;\\n\\n Keccak.prototype.digest = Keccak.prototype.array = function () {\\n this.finalize();\\n\\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\\n extraBytes = this.extraBytes, i = 0, j = 0;\\n var array = [], offset, block;\\n while (j < outputBlocks) {\\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\\n offset = j << 2;\\n block = s[i];\\n array[offset] = block & 0xFF;\\n array[offset + 1] = (block >> 8) & 0xFF;\\n array[offset + 2] = (block >> 16) & 0xFF;\\n array[offset + 3] = (block >> 24) & 0xFF;\\n }\\n if (j % blockCount === 0) {\\n f(s);\\n }\\n }\\n if (extraBytes) {\\n offset = j << 2;\\n block = s[i];\\n array[offset] = block & 0xFF;\\n if (extraBytes > 1) {\\n array[offset + 1] = (block >> 8) & 0xFF;\\n }\\n if (extraBytes > 2) {\\n array[offset + 2] = (block >> 16) & 0xFF;\\n }\\n }\\n return array;\\n };\\n\\n function Kmac(bits, padding, outputBits) {\\n Keccak.call(this, bits, padding, outputBits);\\n }\\n\\n Kmac.prototype = new Keccak();\\n\\n Kmac.prototype.finalize = function () {\\n this.encode(this.outputBits, true);\\n return Keccak.prototype.finalize.call(this);\\n };\\n\\n var f = function (s) {\\n var h, l, n, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9,\\n b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17,\\n b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33,\\n b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49;\\n for (n = 0; n < 48; n += 2) {\\n c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40];\\n c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41];\\n c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42];\\n c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43];\\n c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44];\\n c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45];\\n c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46];\\n c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47];\\n c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48];\\n c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49];\\n\\n h = c8 ^ ((c2 << 1) | (c3 >>> 31));\\n l = c9 ^ ((c3 << 1) | (c2 >>> 31));\\n s[0] ^= h;\\n s[1] ^= l;\\n s[10] ^= h;\\n s[11] ^= l;\\n s[20] ^= h;\\n s[21] ^= l;\\n s[30] ^= h;\\n s[31] ^= l;\\n s[40] ^= h;\\n s[41] ^= l;\\n h = c0 ^ ((c4 << 1) | (c5 >>> 31));\\n l = c1 ^ ((c5 << 1) | (c4 >>> 31));\\n s[2] ^= h;\\n s[3] ^= l;\\n s[12] ^= h;\\n s[13] ^= l;\\n s[22] ^= h;\\n s[23] ^= l;\\n s[32] ^= h;\\n s[33] ^= l;\\n s[42] ^= h;\\n s[43] ^= l;\\n h = c2 ^ ((c6 << 1) | (c7 >>> 31));\\n l = c3 ^ ((c7 << 1) | (c6 >>> 31));\\n s[4] ^= h;\\n s[5] ^= l;\\n s[14] ^= h;\\n s[15] ^= l;\\n s[24] ^= h;\\n s[25] ^= l;\\n s[34] ^= h;\\n s[35] ^= l;\\n s[44] ^= h;\\n s[45] ^= l;\\n h = c4 ^ ((c8 << 1) | (c9 >>> 31));\\n l = c5 ^ ((c9 << 1) | (c8 >>> 31));\\n s[6] ^= h;\\n s[7] ^= l;\\n s[16] ^= h;\\n s[17] ^= l;\\n s[26] ^= h;\\n s[27] ^= l;\\n s[36] ^= h;\\n s[37] ^= l;\\n s[46] ^= h;\\n s[47] ^= l;\\n h = c6 ^ ((c0 << 1) | (c1 >>> 31));\\n l = c7 ^ ((c1 << 1) | (c0 >>> 31));\\n s[8] ^= h;\\n s[9] ^= l;\\n s[18] ^= h;\\n s[19] ^= l;\\n s[28] ^= h;\\n s[29] ^= l;\\n s[38] ^= h;\\n s[39] ^= l;\\n s[48] ^= h;\\n s[49] ^= l;\\n\\n b0 = s[0];\\n b1 = s[1];\\n b32 = (s[11] << 4) | (s[10] >>> 28);\\n b33 = (s[10] << 4) | (s[11] >>> 28);\\n b14 = (s[20] << 3) | (s[21] >>> 29);\\n b15 = (s[21] << 3) | (s[20] >>> 29);\\n b46 = (s[31] << 9) | (s[30] >>> 23);\\n b47 = (s[30] << 9) | (s[31] >>> 23);\\n b28 = (s[40] << 18) | (s[41] >>> 14);\\n b29 = (s[41] << 18) | (s[40] >>> 14);\\n b20 = (s[2] << 1) | (s[3] >>> 31);\\n b21 = (s[3] << 1) | (s[2] >>> 31);\\n b2 = (s[13] << 12) | (s[12] >>> 20);\\n b3 = (s[12] << 12) | (s[13] >>> 20);\\n b34 = (s[22] << 10) | (s[23] >>> 22);\\n b35 = (s[23] << 10) | (s[22] >>> 22);\\n b16 = (s[33] << 13) | (s[32] >>> 19);\\n b17 = (s[32] << 13) | (s[33] >>> 19);\\n b48 = (s[42] << 2) | (s[43] >>> 30);\\n b49 = (s[43] << 2) | (s[42] >>> 30);\\n b40 = (s[5] << 30) | (s[4] >>> 2);\\n b41 = (s[4] << 30) | (s[5] >>> 2);\\n b22 = (s[14] << 6) | (s[15] >>> 26);\\n b23 = (s[15] << 6) | (s[14] >>> 26);\\n b4 = (s[25] << 11) | (s[24] >>> 21);\\n b5 = (s[24] << 11) | (s[25] >>> 21);\\n b36 = (s[34] << 15) | (s[35] >>> 17);\\n b37 = (s[35] << 15) | (s[34] >>> 17);\\n b18 = (s[45] << 29) | (s[44] >>> 3);\\n b19 = (s[44] << 29) | (s[45] >>> 3);\\n b10 = (s[6] << 28) | (s[7] >>> 4);\\n b11 = (s[7] << 28) | (s[6] >>> 4);\\n b42 = (s[17] << 23) | (s[16] >>> 9);\\n b43 = (s[16] << 23) | (s[17] >>> 9);\\n b24 = (s[26] << 25) | (s[27] >>> 7);\\n b25 = (s[27] << 25) | (s[26] >>> 7);\\n b6 = (s[36] << 21) | (s[37] >>> 11);\\n b7 = (s[37] << 21) | (s[36] >>> 11);\\n b38 = (s[47] << 24) | (s[46] >>> 8);\\n b39 = (s[46] << 24) | (s[47] >>> 8);\\n b30 = (s[8] << 27) | (s[9] >>> 5);\\n b31 = (s[9] << 27) | (s[8] >>> 5);\\n b12 = (s[18] << 20) | (s[19] >>> 12);\\n b13 = (s[19] << 20) | (s[18] >>> 12);\\n b44 = (s[29] << 7) | (s[28] >>> 25);\\n b45 = (s[28] << 7) | (s[29] >>> 25);\\n b26 = (s[38] << 8) | (s[39] >>> 24);\\n b27 = (s[39] << 8) | (s[38] >>> 24);\\n b8 = (s[48] << 14) | (s[49] >>> 18);\\n b9 = (s[49] << 14) | (s[48] >>> 18);\\n\\n s[0] = b0 ^ (~b2 & b4);\\n s[1] = b1 ^ (~b3 & b5);\\n s[10] = b10 ^ (~b12 & b14);\\n s[11] = b11 ^ (~b13 & b15);\\n s[20] = b20 ^ (~b22 & b24);\\n s[21] = b21 ^ (~b23 & b25);\\n s[30] = b30 ^ (~b32 & b34);\\n s[31] = b31 ^ (~b33 & b35);\\n s[40] = b40 ^ (~b42 & b44);\\n s[41] = b41 ^ (~b43 & b45);\\n s[2] = b2 ^ (~b4 & b6);\\n s[3] = b3 ^ (~b5 & b7);\\n s[12] = b12 ^ (~b14 & b16);\\n s[13] = b13 ^ (~b15 & b17);\\n s[22] = b22 ^ (~b24 & b26);\\n s[23] = b23 ^ (~b25 & b27);\\n s[32] = b32 ^ (~b34 & b36);\\n s[33] = b33 ^ (~b35 & b37);\\n s[42] = b42 ^ (~b44 & b46);\\n s[43] = b43 ^ (~b45 & b47);\\n s[4] = b4 ^ (~b6 & b8);\\n s[5] = b5 ^ (~b7 & b9);\\n s[14] = b14 ^ (~b16 & b18);\\n s[15] = b15 ^ (~b17 & b19);\\n s[24] = b24 ^ (~b26 & b28);\\n s[25] = b25 ^ (~b27 & b29);\\n s[34] = b34 ^ (~b36 & b38);\\n s[35] = b35 ^ (~b37 & b39);\\n s[44] = b44 ^ (~b46 & b48);\\n s[45] = b45 ^ (~b47 & b49);\\n s[6] = b6 ^ (~b8 & b0);\\n s[7] = b7 ^ (~b9 & b1);\\n s[16] = b16 ^ (~b18 & b10);\\n s[17] = b17 ^ (~b19 & b11);\\n s[26] = b26 ^ (~b28 & b20);\\n s[27] = b27 ^ (~b29 & b21);\\n s[36] = b36 ^ (~b38 & b30);\\n s[37] = b37 ^ (~b39 & b31);\\n s[46] = b46 ^ (~b48 & b40);\\n s[47] = b47 ^ (~b49 & b41);\\n s[8] = b8 ^ (~b0 & b2);\\n s[9] = b9 ^ (~b1 & b3);\\n s[18] = b18 ^ (~b10 & b12);\\n s[19] = b19 ^ (~b11 & b13);\\n s[28] = b28 ^ (~b20 & b22);\\n s[29] = b29 ^ (~b21 & b23);\\n s[38] = b38 ^ (~b30 & b32);\\n s[39] = b39 ^ (~b31 & b33);\\n s[48] = b48 ^ (~b40 & b42);\\n s[49] = b49 ^ (~b41 & b43);\\n\\n s[0] ^= RC[n];\\n s[1] ^= RC[n + 1];\\n }\\n };\\n\\n if (COMMON_JS) {\\n module.exports = methods;\\n } else {\\n for (i = 0; i < methodNames.length; ++i) {\\n root[methodNames[i]] = methods[methodNames[i]];\\n }\\n if (AMD) {\\n !(__WEBPACK_AMD_DEFINE_RESULT__ = (function () {\\n return methods;\\n }).call(exports, __webpack_require__, exports, module),\\n\\t\\t\\t\\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\\n }\\n }\\n})();\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../process/browser.js */ \\\"./node_modules/process/browser.js\\\"), __webpack_require__(/*! ./../../../../webpack/buildin/global.js */ \\\"./node_modules/webpack/buildin/global.js\\\")))\\n\\n//# sourceURL=webpack:///./node_modules/did-jwt/node_modules/js-sha3/src/sha3.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/did-resolver/lib/resolver.js\":\n/*!***************************************************!*\\\n !*** ./node_modules/did-resolver/lib/resolver.js ***!\n \\***************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(global) {\\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\\n return new (P || (P = Promise))(function (resolve, reject) {\\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\\n function rejected(value) { try { step(generator[\\\"throw\\\"](value)); } catch (e) { reject(e); } }\\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\\n step((generator = generator.apply(thisArg, _arguments || [])).next());\\n });\\n};\\nvar __generator = (this && this.__generator) || function (thisArg, body) {\\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\\n return g = { next: verb(0), \\\"throw\\\": verb(1), \\\"return\\\": verb(2) }, typeof Symbol === \\\"function\\\" && (g[Symbol.iterator] = function() { return this; }), g;\\n function verb(n) { return function (v) { return step([n, v]); }; }\\n function step(op) {\\n if (f) throw new TypeError(\\\"Generator is already executing.\\\");\\n while (_) try {\\n if (f = 1, y && (t = op[0] & 2 ? y[\\\"return\\\"] : op[0] ? y[\\\"throw\\\"] || ((t = y[\\\"return\\\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\\n if (y = 0, t) op = [op[0] & 2, t.value];\\n switch (op[0]) {\\n case 0: case 1: t = op; break;\\n case 4: _.label++; return { value: op[1], done: false };\\n case 5: _.label++; y = op[1]; op = [0]; continue;\\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\\n default:\\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\\n if (t[2]) _.ops.pop();\\n _.trys.pop(); continue;\\n }\\n op = body.call(thisArg, _);\\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\\n }\\n};\\nObject.defineProperty(exports, \\\"__esModule\\\", { value: true });\\nvar globalObject;\\nvar REGISTRY;\\nif (typeof window === 'object') {\\n globalObject = window;\\n}\\nelse if (typeof global === 'object') {\\n globalObject = global;\\n}\\nelse {\\n globalObject = {\\n DID_REGISTRY: {}\\n };\\n}\\nif (globalObject.DID_REGISTRY) {\\n REGISTRY = globalObject.DID_REGISTRY;\\n}\\nelse {\\n REGISTRY = globalObject.DID_REGISTRY = {};\\n}\\nfunction registerMethod(method, resolver) {\\n REGISTRY[method] = resolver;\\n}\\nexports.registerMethod = registerMethod;\\nfunction parse(did) {\\n if (did === '')\\n throw new Error('Missing DID');\\n var sections = did.match(/^did:([a-zA-Z0-9_]+):([[a-zA-Z0-9_.-]+)(\\\\/[^#]*)?(#.*)?$/);\\n if (sections) {\\n var parts = { did: sections[0], method: sections[1], id: sections[2] };\\n if (sections[3])\\n parts.path = sections[3];\\n if (sections[4])\\n parts.fragment = sections[4].slice(1);\\n return parts;\\n }\\n throw new Error(\\\"Invalid DID \\\" + did);\\n}\\nexports.parse = parse;\\nfunction resolve(did) {\\n return __awaiter(this, void 0, void 0, function () {\\n var parsed, resolver;\\n return __generator(this, function (_a) {\\n switch (_a.label) {\\n case 0:\\n parsed = parse(did);\\n resolver = REGISTRY[parsed.method];\\n if (!resolver) return [3 /*break*/, 2];\\n return [4 /*yield*/, resolver(did, parsed)];\\n case 1: return [2 /*return*/, _a.sent()];\\n case 2: throw new Error(\\\"Unsupported DID method: '\\\" + parsed.method + \\\"'\\\");\\n }\\n });\\n });\\n}\\nexports.default = resolve;\\n//# sourceMappingURL=resolver.js.map\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ \\\"./node_modules/webpack/buildin/global.js\\\")))\\n\\n//# sourceURL=webpack:///./node_modules/did-resolver/lib/resolver.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/elliptic/lib/elliptic.js\":\n/*!***********************************************!*\\\n !*** ./node_modules/elliptic/lib/elliptic.js ***!\n \\***********************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar elliptic = exports;\\n\\nelliptic.version = __webpack_require__(/*! ../package.json */ \\\"./node_modules/elliptic/package.json\\\").version;\\nelliptic.utils = __webpack_require__(/*! ./elliptic/utils */ \\\"./node_modules/elliptic/lib/elliptic/utils.js\\\");\\nelliptic.rand = __webpack_require__(/*! brorand */ \\\"./node_modules/brorand/index.js\\\");\\nelliptic.curve = __webpack_require__(/*! ./elliptic/curve */ \\\"./node_modules/elliptic/lib/elliptic/curve/index.js\\\");\\nelliptic.curves = __webpack_require__(/*! ./elliptic/curves */ \\\"./node_modules/elliptic/lib/elliptic/curves.js\\\");\\n\\n// Protocols\\nelliptic.ec = __webpack_require__(/*! ./elliptic/ec */ \\\"./node_modules/elliptic/lib/elliptic/ec/index.js\\\");\\nelliptic.eddsa = __webpack_require__(/*! ./elliptic/eddsa */ \\\"./node_modules/elliptic/lib/elliptic/eddsa/index.js\\\");\\n\\n\\n//# sourceURL=webpack:///./node_modules/elliptic/lib/elliptic.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/elliptic/lib/elliptic/curve/base.js\":\n/*!**********************************************************!*\\\n !*** ./node_modules/elliptic/lib/elliptic/curve/base.js ***!\n \\**********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar BN = __webpack_require__(/*! bn.js */ \\\"./node_modules/bn.js/lib/bn.js\\\");\\nvar elliptic = __webpack_require__(/*! ../../elliptic */ \\\"./node_modules/elliptic/lib/elliptic.js\\\");\\nvar utils = elliptic.utils;\\nvar getNAF = utils.getNAF;\\nvar getJSF = utils.getJSF;\\nvar assert = utils.assert;\\n\\nfunction BaseCurve(type, conf) {\\n this.type = type;\\n this.p = new BN(conf.p, 16);\\n\\n // Use Montgomery, when there is no fast reduction for the prime\\n this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);\\n\\n // Useful for many curves\\n this.zero = new BN(0).toRed(this.red);\\n this.one = new BN(1).toRed(this.red);\\n this.two = new BN(2).toRed(this.red);\\n\\n // Curve configuration, optional\\n this.n = conf.n && new BN(conf.n, 16);\\n this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);\\n\\n // Temporary arrays\\n this._wnafT1 = new Array(4);\\n this._wnafT2 = new Array(4);\\n this._wnafT3 = new Array(4);\\n this._wnafT4 = new Array(4);\\n\\n // Generalized Greg Maxwell's trick\\n var adjustCount = this.n && this.p.div(this.n);\\n if (!adjustCount || adjustCount.cmpn(100) > 0) {\\n this.redN = null;\\n } else {\\n this._maxwellTrick = true;\\n this.redN = this.n.toRed(this.red);\\n }\\n}\\nmodule.exports = BaseCurve;\\n\\nBaseCurve.prototype.point = function point() {\\n throw new Error('Not implemented');\\n};\\n\\nBaseCurve.prototype.validate = function validate() {\\n throw new Error('Not implemented');\\n};\\n\\nBaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {\\n assert(p.precomputed);\\n var doubles = p._getDoubles();\\n\\n var naf = getNAF(k, 1);\\n var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);\\n I /= 3;\\n\\n // Translate into more windowed form\\n var repr = [];\\n for (var j = 0; j < naf.length; j += doubles.step) {\\n var nafW = 0;\\n for (var k = j + doubles.step - 1; k >= j; k--)\\n nafW = (nafW << 1) + naf[k];\\n repr.push(nafW);\\n }\\n\\n var a = this.jpoint(null, null, null);\\n var b = this.jpoint(null, null, null);\\n for (var i = I; i > 0; i--) {\\n for (var j = 0; j < repr.length; j++) {\\n var nafW = repr[j];\\n if (nafW === i)\\n b = b.mixedAdd(doubles.points[j]);\\n else if (nafW === -i)\\n b = b.mixedAdd(doubles.points[j].neg());\\n }\\n a = a.add(b);\\n }\\n return a.toP();\\n};\\n\\nBaseCurve.prototype._wnafMul = function _wnafMul(p, k) {\\n var w = 4;\\n\\n // Precompute window\\n var nafPoints = p._getNAFPoints(w);\\n w = nafPoints.wnd;\\n var wnd = nafPoints.points;\\n\\n // Get NAF form\\n var naf = getNAF(k, w);\\n\\n // Add `this`*(N+1) for every w-NAF index\\n var acc = this.jpoint(null, null, null);\\n for (var i = naf.length - 1; i >= 0; i--) {\\n // Count zeroes\\n for (var k = 0; i >= 0 && naf[i] === 0; i--)\\n k++;\\n if (i >= 0)\\n k++;\\n acc = acc.dblp(k);\\n\\n if (i < 0)\\n break;\\n var z = naf[i];\\n assert(z !== 0);\\n if (p.type === 'affine') {\\n // J +- P\\n if (z > 0)\\n acc = acc.mixedAdd(wnd[(z - 1) >> 1]);\\n else\\n acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());\\n } else {\\n // J +- J\\n if (z > 0)\\n acc = acc.add(wnd[(z - 1) >> 1]);\\n else\\n acc = acc.add(wnd[(-z - 1) >> 1].neg());\\n }\\n }\\n return p.type === 'affine' ? acc.toP() : acc;\\n};\\n\\nBaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,\\n points,\\n coeffs,\\n len,\\n jacobianResult) {\\n var wndWidth = this._wnafT1;\\n var wnd = this._wnafT2;\\n var naf = this._wnafT3;\\n\\n // Fill all arrays\\n var max = 0;\\n for (var i = 0; i < len; i++) {\\n var p = points[i];\\n var nafPoints = p._getNAFPoints(defW);\\n wndWidth[i] = nafPoints.wnd;\\n wnd[i] = nafPoints.points;\\n }\\n\\n // Comb small window NAFs\\n for (var i = len - 1; i >= 1; i -= 2) {\\n var a = i - 1;\\n var b = i;\\n if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {\\n naf[a] = getNAF(coeffs[a], wndWidth[a]);\\n naf[b] = getNAF(coeffs[b], wndWidth[b]);\\n max = Math.max(naf[a].length, max);\\n max = Math.max(naf[b].length, max);\\n continue;\\n }\\n\\n var comb = [\\n points[a], /* 1 */\\n null, /* 3 */\\n null, /* 5 */\\n points[b] /* 7 */\\n ];\\n\\n // Try to avoid Projective points, if possible\\n if (points[a].y.cmp(points[b].y) === 0) {\\n comb[1] = points[a].add(points[b]);\\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\\n } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {\\n comb[1] = points[a].toJ().mixedAdd(points[b]);\\n comb[2] = points[a].add(points[b].neg());\\n } else {\\n comb[1] = points[a].toJ().mixedAdd(points[b]);\\n comb[2] = points[a].toJ().mixedAdd(points[b].neg());\\n }\\n\\n var index = [\\n -3, /* -1 -1 */\\n -1, /* -1 0 */\\n -5, /* -1 1 */\\n -7, /* 0 -1 */\\n 0, /* 0 0 */\\n 7, /* 0 1 */\\n 5, /* 1 -1 */\\n 1, /* 1 0 */\\n 3 /* 1 1 */\\n ];\\n\\n var jsf = getJSF(coeffs[a], coeffs[b]);\\n max = Math.max(jsf[0].length, max);\\n naf[a] = new Array(max);\\n naf[b] = new Array(max);\\n for (var j = 0; j < max; j++) {\\n var ja = jsf[0][j] | 0;\\n var jb = jsf[1][j] | 0;\\n\\n naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];\\n naf[b][j] = 0;\\n wnd[a] = comb;\\n }\\n }\\n\\n var acc = this.jpoint(null, null, null);\\n var tmp = this._wnafT4;\\n for (var i = max; i >= 0; i--) {\\n var k = 0;\\n\\n while (i >= 0) {\\n var zero = true;\\n for (var j = 0; j < len; j++) {\\n tmp[j] = naf[j][i] | 0;\\n if (tmp[j] !== 0)\\n zero = false;\\n }\\n if (!zero)\\n break;\\n k++;\\n i--;\\n }\\n if (i >= 0)\\n k++;\\n acc = acc.dblp(k);\\n if (i < 0)\\n break;\\n\\n for (var j = 0; j < len; j++) {\\n var z = tmp[j];\\n var p;\\n if (z === 0)\\n continue;\\n else if (z > 0)\\n p = wnd[j][(z - 1) >> 1];\\n else if (z < 0)\\n p = wnd[j][(-z - 1) >> 1].neg();\\n\\n if (p.type === 'affine')\\n acc = acc.mixedAdd(p);\\n else\\n acc = acc.add(p);\\n }\\n }\\n // Zeroify references\\n for (var i = 0; i < len; i++)\\n wnd[i] = null;\\n\\n if (jacobianResult)\\n return acc;\\n else\\n return acc.toP();\\n};\\n\\nfunction BasePoint(curve, type) {\\n this.curve = curve;\\n this.type = type;\\n this.precomputed = null;\\n}\\nBaseCurve.BasePoint = BasePoint;\\n\\nBasePoint.prototype.eq = function eq(/*other*/) {\\n throw new Error('Not implemented');\\n};\\n\\nBasePoint.prototype.validate = function validate() {\\n return this.curve.validate(this);\\n};\\n\\nBaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\\n bytes = utils.toArray(bytes, enc);\\n\\n var len = this.p.byteLength();\\n\\n // uncompressed, hybrid-odd, hybrid-even\\n if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&\\n bytes.length - 1 === 2 * len) {\\n if (bytes[0] === 0x06)\\n assert(bytes[bytes.length - 1] % 2 === 0);\\n else if (bytes[0] === 0x07)\\n assert(bytes[bytes.length - 1] % 2 === 1);\\n\\n var res = this.point(bytes.slice(1, 1 + len),\\n bytes.slice(1 + len, 1 + 2 * len));\\n\\n return res;\\n } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&\\n bytes.length - 1 === len) {\\n return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);\\n }\\n throw new Error('Unknown point format');\\n};\\n\\nBasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {\\n return this.encode(enc, true);\\n};\\n\\nBasePoint.prototype._encode = function _encode(compact) {\\n var len = this.curve.p.byteLength();\\n var x = this.getX().toArray('be', len);\\n\\n if (compact)\\n return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);\\n\\n return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;\\n};\\n\\nBasePoint.prototype.encode = function encode(enc, compact) {\\n return utils.encode(this._encode(compact), enc);\\n};\\n\\nBasePoint.prototype.precompute = function precompute(power) {\\n if (this.precomputed)\\n return this;\\n\\n var precomputed = {\\n doubles: null,\\n naf: null,\\n beta: null\\n };\\n precomputed.naf = this._getNAFPoints(8);\\n precomputed.doubles = this._getDoubles(4, power);\\n precomputed.beta = this._getBeta();\\n this.precomputed = precomputed;\\n\\n return this;\\n};\\n\\nBasePoint.prototype._hasDoubles = function _hasDoubles(k) {\\n if (!this.precomputed)\\n return false;\\n\\n var doubles = this.precomputed.doubles;\\n if (!doubles)\\n return false;\\n\\n return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);\\n};\\n\\nBasePoint.prototype._getDoubles = function _getDoubles(step, power) {\\n if (this.precomputed && this.precomputed.doubles)\\n return this.precomputed.doubles;\\n\\n var doubles = [ this ];\\n var acc = this;\\n for (var i = 0; i < power; i += step) {\\n for (var j = 0; j < step; j++)\\n acc = acc.dbl();\\n doubles.push(acc);\\n }\\n return {\\n step: step,\\n points: doubles\\n };\\n};\\n\\nBasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {\\n if (this.precomputed && this.precomputed.naf)\\n return this.precomputed.naf;\\n\\n var res = [ this ];\\n var max = (1 << wnd) - 1;\\n var dbl = max === 1 ? null : this.dbl();\\n for (var i = 1; i < max; i++)\\n res[i] = res[i - 1].add(dbl);\\n return {\\n wnd: wnd,\\n points: res\\n };\\n};\\n\\nBasePoint.prototype._getBeta = function _getBeta() {\\n return null;\\n};\\n\\nBasePoint.prototype.dblp = function dblp(k) {\\n var r = this;\\n for (var i = 0; i < k; i++)\\n r = r.dbl();\\n return r;\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/elliptic/lib/elliptic/curve/base.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/elliptic/lib/elliptic/curve/edwards.js\":\n/*!*************************************************************!*\\\n !*** ./node_modules/elliptic/lib/elliptic/curve/edwards.js ***!\n \\*************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar curve = __webpack_require__(/*! ../curve */ \\\"./node_modules/elliptic/lib/elliptic/curve/index.js\\\");\\nvar elliptic = __webpack_require__(/*! ../../elliptic */ \\\"./node_modules/elliptic/lib/elliptic.js\\\");\\nvar BN = __webpack_require__(/*! bn.js */ \\\"./node_modules/bn.js/lib/bn.js\\\");\\nvar inherits = __webpack_require__(/*! inherits */ \\\"./node_modules/inherits/inherits_browser.js\\\");\\nvar Base = curve.base;\\n\\nvar assert = elliptic.utils.assert;\\n\\nfunction EdwardsCurve(conf) {\\n // NOTE: Important as we are creating point in Base.call()\\n this.twisted = (conf.a | 0) !== 1;\\n this.mOneA = this.twisted && (conf.a | 0) === -1;\\n this.extended = this.mOneA;\\n\\n Base.call(this, 'edwards', conf);\\n\\n this.a = new BN(conf.a, 16).umod(this.red.m);\\n this.a = this.a.toRed(this.red);\\n this.c = new BN(conf.c, 16).toRed(this.red);\\n this.c2 = this.c.redSqr();\\n this.d = new BN(conf.d, 16).toRed(this.red);\\n this.dd = this.d.redAdd(this.d);\\n\\n assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);\\n this.oneC = (conf.c | 0) === 1;\\n}\\ninherits(EdwardsCurve, Base);\\nmodule.exports = EdwardsCurve;\\n\\nEdwardsCurve.prototype._mulA = function _mulA(num) {\\n if (this.mOneA)\\n return num.redNeg();\\n else\\n return this.a.redMul(num);\\n};\\n\\nEdwardsCurve.prototype._mulC = function _mulC(num) {\\n if (this.oneC)\\n return num;\\n else\\n return this.c.redMul(num);\\n};\\n\\n// Just for compatibility with Short curve\\nEdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {\\n return this.point(x, y, z, t);\\n};\\n\\nEdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {\\n x = new BN(x, 16);\\n if (!x.red)\\n x = x.toRed(this.red);\\n\\n var x2 = x.redSqr();\\n var rhs = this.c2.redSub(this.a.redMul(x2));\\n var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));\\n\\n var y2 = rhs.redMul(lhs.redInvm());\\n var y = y2.redSqrt();\\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\\n throw new Error('invalid point');\\n\\n var isOdd = y.fromRed().isOdd();\\n if (odd && !isOdd || !odd && isOdd)\\n y = y.redNeg();\\n\\n return this.point(x, y);\\n};\\n\\nEdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {\\n y = new BN(y, 16);\\n if (!y.red)\\n y = y.toRed(this.red);\\n\\n // x^2 = (y^2 - c^2) / (c^2 d y^2 - a)\\n var y2 = y.redSqr();\\n var lhs = y2.redSub(this.c2);\\n var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a);\\n var x2 = lhs.redMul(rhs.redInvm());\\n\\n if (x2.cmp(this.zero) === 0) {\\n if (odd)\\n throw new Error('invalid point');\\n else\\n return this.point(this.zero, y);\\n }\\n\\n var x = x2.redSqrt();\\n if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)\\n throw new Error('invalid point');\\n\\n if (x.fromRed().isOdd() !== odd)\\n x = x.redNeg();\\n\\n return this.point(x, y);\\n};\\n\\nEdwardsCurve.prototype.validate = function validate(point) {\\n if (point.isInfinity())\\n return true;\\n\\n // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)\\n point.normalize();\\n\\n var x2 = point.x.redSqr();\\n var y2 = point.y.redSqr();\\n var lhs = x2.redMul(this.a).redAdd(y2);\\n var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));\\n\\n return lhs.cmp(rhs) === 0;\\n};\\n\\nfunction Point(curve, x, y, z, t) {\\n Base.BasePoint.call(this, curve, 'projective');\\n if (x === null && y === null && z === null) {\\n this.x = this.curve.zero;\\n this.y = this.curve.one;\\n this.z = this.curve.one;\\n this.t = this.curve.zero;\\n this.zOne = true;\\n } else {\\n this.x = new BN(x, 16);\\n this.y = new BN(y, 16);\\n this.z = z ? new BN(z, 16) : this.curve.one;\\n this.t = t && new BN(t, 16);\\n if (!this.x.red)\\n this.x = this.x.toRed(this.curve.red);\\n if (!this.y.red)\\n this.y = this.y.toRed(this.curve.red);\\n if (!this.z.red)\\n this.z = this.z.toRed(this.curve.red);\\n if (this.t && !this.t.red)\\n this.t = this.t.toRed(this.curve.red);\\n this.zOne = this.z === this.curve.one;\\n\\n // Use extended coordinates\\n if (this.curve.extended && !this.t) {\\n this.t = this.x.redMul(this.y);\\n if (!this.zOne)\\n this.t = this.t.redMul(this.z.redInvm());\\n }\\n }\\n}\\ninherits(Point, Base.BasePoint);\\n\\nEdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\\n return Point.fromJSON(this, obj);\\n};\\n\\nEdwardsCurve.prototype.point = function point(x, y, z, t) {\\n return new Point(this, x, y, z, t);\\n};\\n\\nPoint.fromJSON = function fromJSON(curve, obj) {\\n return new Point(curve, obj[0], obj[1], obj[2]);\\n};\\n\\nPoint.prototype.inspect = function inspect() {\\n if (this.isInfinity())\\n return '<EC Point Infinity>';\\n return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\\n ' y: ' + this.y.fromRed().toString(16, 2) +\\n ' z: ' + this.z.fromRed().toString(16, 2) + '>';\\n};\\n\\nPoint.prototype.isInfinity = function isInfinity() {\\n // XXX This code assumes that zero is always zero in red\\n return this.x.cmpn(0) === 0 &&\\n (this.y.cmp(this.z) === 0 ||\\n (this.zOne && this.y.cmp(this.curve.c) === 0));\\n};\\n\\nPoint.prototype._extDbl = function _extDbl() {\\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\\n // #doubling-dbl-2008-hwcd\\n // 4M + 4S\\n\\n // A = X1^2\\n var a = this.x.redSqr();\\n // B = Y1^2\\n var b = this.y.redSqr();\\n // C = 2 * Z1^2\\n var c = this.z.redSqr();\\n c = c.redIAdd(c);\\n // D = a * A\\n var d = this.curve._mulA(a);\\n // E = (X1 + Y1)^2 - A - B\\n var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);\\n // G = D + B\\n var g = d.redAdd(b);\\n // F = G - C\\n var f = g.redSub(c);\\n // H = D - B\\n var h = d.redSub(b);\\n // X3 = E * F\\n var nx = e.redMul(f);\\n // Y3 = G * H\\n var ny = g.redMul(h);\\n // T3 = E * H\\n var nt = e.redMul(h);\\n // Z3 = F * G\\n var nz = f.redMul(g);\\n return this.curve.point(nx, ny, nz, nt);\\n};\\n\\nPoint.prototype._projDbl = function _projDbl() {\\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\\n // #doubling-dbl-2008-bbjlp\\n // #doubling-dbl-2007-bl\\n // and others\\n // Generally 3M + 4S or 2M + 4S\\n\\n // B = (X1 + Y1)^2\\n var b = this.x.redAdd(this.y).redSqr();\\n // C = X1^2\\n var c = this.x.redSqr();\\n // D = Y1^2\\n var d = this.y.redSqr();\\n\\n var nx;\\n var ny;\\n var nz;\\n if (this.curve.twisted) {\\n // E = a * C\\n var e = this.curve._mulA(c);\\n // F = E + D\\n var f = e.redAdd(d);\\n if (this.zOne) {\\n // X3 = (B - C - D) * (F - 2)\\n nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));\\n // Y3 = F * (E - D)\\n ny = f.redMul(e.redSub(d));\\n // Z3 = F^2 - 2 * F\\n nz = f.redSqr().redSub(f).redSub(f);\\n } else {\\n // H = Z1^2\\n var h = this.z.redSqr();\\n // J = F - 2 * H\\n var j = f.redSub(h).redISub(h);\\n // X3 = (B-C-D)*J\\n nx = b.redSub(c).redISub(d).redMul(j);\\n // Y3 = F * (E - D)\\n ny = f.redMul(e.redSub(d));\\n // Z3 = F * J\\n nz = f.redMul(j);\\n }\\n } else {\\n // E = C + D\\n var e = c.redAdd(d);\\n // H = (c * Z1)^2\\n var h = this.curve._mulC(this.z).redSqr();\\n // J = E - 2 * H\\n var j = e.redSub(h).redSub(h);\\n // X3 = c * (B - E) * J\\n nx = this.curve._mulC(b.redISub(e)).redMul(j);\\n // Y3 = c * E * (C - D)\\n ny = this.curve._mulC(e).redMul(c.redISub(d));\\n // Z3 = E * J\\n nz = e.redMul(j);\\n }\\n return this.curve.point(nx, ny, nz);\\n};\\n\\nPoint.prototype.dbl = function dbl() {\\n if (this.isInfinity())\\n return this;\\n\\n // Double in extended coordinates\\n if (this.curve.extended)\\n return this._extDbl();\\n else\\n return this._projDbl();\\n};\\n\\nPoint.prototype._extAdd = function _extAdd(p) {\\n // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\\n // #addition-add-2008-hwcd-3\\n // 8M\\n\\n // A = (Y1 - X1) * (Y2 - X2)\\n var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));\\n // B = (Y1 + X1) * (Y2 + X2)\\n var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));\\n // C = T1 * k * T2\\n var c = this.t.redMul(this.curve.dd).redMul(p.t);\\n // D = Z1 * 2 * Z2\\n var d = this.z.redMul(p.z.redAdd(p.z));\\n // E = B - A\\n var e = b.redSub(a);\\n // F = D - C\\n var f = d.redSub(c);\\n // G = D + C\\n var g = d.redAdd(c);\\n // H = B + A\\n var h = b.redAdd(a);\\n // X3 = E * F\\n var nx = e.redMul(f);\\n // Y3 = G * H\\n var ny = g.redMul(h);\\n // T3 = E * H\\n var nt = e.redMul(h);\\n // Z3 = F * G\\n var nz = f.redMul(g);\\n return this.curve.point(nx, ny, nz, nt);\\n};\\n\\nPoint.prototype._projAdd = function _projAdd(p) {\\n // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\\n // #addition-add-2008-bbjlp\\n // #addition-add-2007-bl\\n // 10M + 1S\\n\\n // A = Z1 * Z2\\n var a = this.z.redMul(p.z);\\n // B = A^2\\n var b = a.redSqr();\\n // C = X1 * X2\\n var c = this.x.redMul(p.x);\\n // D = Y1 * Y2\\n var d = this.y.redMul(p.y);\\n // E = d * C * D\\n var e = this.curve.d.redMul(c).redMul(d);\\n // F = B - E\\n var f = b.redSub(e);\\n // G = B + E\\n var g = b.redAdd(e);\\n // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)\\n var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);\\n var nx = a.redMul(f).redMul(tmp);\\n var ny;\\n var nz;\\n if (this.curve.twisted) {\\n // Y3 = A * G * (D - a * C)\\n ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));\\n // Z3 = F * G\\n nz = f.redMul(g);\\n } else {\\n // Y3 = A * G * (D - C)\\n ny = a.redMul(g).redMul(d.redSub(c));\\n // Z3 = c * F * G\\n nz = this.curve._mulC(f).redMul(g);\\n }\\n return this.curve.point(nx, ny, nz);\\n};\\n\\nPoint.prototype.add = function add(p) {\\n if (this.isInfinity())\\n return p;\\n if (p.isInfinity())\\n return this;\\n\\n if (this.curve.extended)\\n return this._extAdd(p);\\n else\\n return this._projAdd(p);\\n};\\n\\nPoint.prototype.mul = function mul(k) {\\n if (this._hasDoubles(k))\\n return this.curve._fixedNafMul(this, k);\\n else\\n return this.curve._wnafMul(this, k);\\n};\\n\\nPoint.prototype.mulAdd = function mulAdd(k1, p, k2) {\\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);\\n};\\n\\nPoint.prototype.jmulAdd = function jmulAdd(k1, p, k2) {\\n return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);\\n};\\n\\nPoint.prototype.normalize = function normalize() {\\n if (this.zOne)\\n return this;\\n\\n // Normalize coordinates\\n var zi = this.z.redInvm();\\n this.x = this.x.redMul(zi);\\n this.y = this.y.redMul(zi);\\n if (this.t)\\n this.t = this.t.redMul(zi);\\n this.z = this.curve.one;\\n this.zOne = true;\\n return this;\\n};\\n\\nPoint.prototype.neg = function neg() {\\n return this.curve.point(this.x.redNeg(),\\n this.y,\\n this.z,\\n this.t && this.t.redNeg());\\n};\\n\\nPoint.prototype.getX = function getX() {\\n this.normalize();\\n return this.x.fromRed();\\n};\\n\\nPoint.prototype.getY = function getY() {\\n this.normalize();\\n return this.y.fromRed();\\n};\\n\\nPoint.prototype.eq = function eq(other) {\\n return this === other ||\\n this.getX().cmp(other.getX()) === 0 &&\\n this.getY().cmp(other.getY()) === 0;\\n};\\n\\nPoint.prototype.eqXToP = function eqXToP(x) {\\n var rx = x.toRed(this.curve.red).redMul(this.z);\\n if (this.x.cmp(rx) === 0)\\n return true;\\n\\n var xc = x.clone();\\n var t = this.curve.redN.redMul(this.z);\\n for (;;) {\\n xc.iadd(this.curve.n);\\n if (xc.cmp(this.curve.p) >= 0)\\n return false;\\n\\n rx.redIAdd(t);\\n if (this.x.cmp(rx) === 0)\\n return true;\\n }\\n};\\n\\n// Compatibility with BaseCurve\\nPoint.prototype.toP = Point.prototype.normalize;\\nPoint.prototype.mixedAdd = Point.prototype.add;\\n\\n\\n//# sourceURL=webpack:///./node_modules/elliptic/lib/elliptic/curve/edwards.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/elliptic/lib/elliptic/curve/index.js\":\n/*!***********************************************************!*\\\n !*** ./node_modules/elliptic/lib/elliptic/curve/index.js ***!\n \\***********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar curve = exports;\\n\\ncurve.base = __webpack_require__(/*! ./base */ \\\"./node_modules/elliptic/lib/elliptic/curve/base.js\\\");\\ncurve.short = __webpack_require__(/*! ./short */ \\\"./node_modules/elliptic/lib/elliptic/curve/short.js\\\");\\ncurve.mont = __webpack_require__(/*! ./mont */ \\\"./node_modules/elliptic/lib/elliptic/curve/mont.js\\\");\\ncurve.edwards = __webpack_require__(/*! ./edwards */ \\\"./node_modules/elliptic/lib/elliptic/curve/edwards.js\\\");\\n\\n\\n//# sourceURL=webpack:///./node_modules/elliptic/lib/elliptic/curve/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/elliptic/lib/elliptic/curve/mont.js\":\n/*!**********************************************************!*\\\n !*** ./node_modules/elliptic/lib/elliptic/curve/mont.js ***!\n \\**********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar curve = __webpack_require__(/*! ../curve */ \\\"./node_modules/elliptic/lib/elliptic/curve/index.js\\\");\\nvar BN = __webpack_require__(/*! bn.js */ \\\"./node_modules/bn.js/lib/bn.js\\\");\\nvar inherits = __webpack_require__(/*! inherits */ \\\"./node_modules/inherits/inherits_browser.js\\\");\\nvar Base = curve.base;\\n\\nvar elliptic = __webpack_require__(/*! ../../elliptic */ \\\"./node_modules/elliptic/lib/elliptic.js\\\");\\nvar utils = elliptic.utils;\\n\\nfunction MontCurve(conf) {\\n Base.call(this, 'mont', conf);\\n\\n this.a = new BN(conf.a, 16).toRed(this.red);\\n this.b = new BN(conf.b, 16).toRed(this.red);\\n this.i4 = new BN(4).toRed(this.red).redInvm();\\n this.two = new BN(2).toRed(this.red);\\n this.a24 = this.i4.redMul(this.a.redAdd(this.two));\\n}\\ninherits(MontCurve, Base);\\nmodule.exports = MontCurve;\\n\\nMontCurve.prototype.validate = function validate(point) {\\n var x = point.normalize().x;\\n var x2 = x.redSqr();\\n var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);\\n var y = rhs.redSqrt();\\n\\n return y.redSqr().cmp(rhs) === 0;\\n};\\n\\nfunction Point(curve, x, z) {\\n Base.BasePoint.call(this, curve, 'projective');\\n if (x === null && z === null) {\\n this.x = this.curve.one;\\n this.z = this.curve.zero;\\n } else {\\n this.x = new BN(x, 16);\\n this.z = new BN(z, 16);\\n if (!this.x.red)\\n this.x = this.x.toRed(this.curve.red);\\n if (!this.z.red)\\n this.z = this.z.toRed(this.curve.red);\\n }\\n}\\ninherits(Point, Base.BasePoint);\\n\\nMontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\\n return this.point(utils.toArray(bytes, enc), 1);\\n};\\n\\nMontCurve.prototype.point = function point(x, z) {\\n return new Point(this, x, z);\\n};\\n\\nMontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\\n return Point.fromJSON(this, obj);\\n};\\n\\nPoint.prototype.precompute = function precompute() {\\n // No-op\\n};\\n\\nPoint.prototype._encode = function _encode() {\\n return this.getX().toArray('be', this.curve.p.byteLength());\\n};\\n\\nPoint.fromJSON = function fromJSON(curve, obj) {\\n return new Point(curve, obj[0], obj[1] || curve.one);\\n};\\n\\nPoint.prototype.inspect = function inspect() {\\n if (this.isInfinity())\\n return '<EC Point Infinity>';\\n return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\\n ' z: ' + this.z.fromRed().toString(16, 2) + '>';\\n};\\n\\nPoint.prototype.isInfinity = function isInfinity() {\\n // XXX This code assumes that zero is always zero in red\\n return this.z.cmpn(0) === 0;\\n};\\n\\nPoint.prototype.dbl = function dbl() {\\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3\\n // 2M + 2S + 4A\\n\\n // A = X1 + Z1\\n var a = this.x.redAdd(this.z);\\n // AA = A^2\\n var aa = a.redSqr();\\n // B = X1 - Z1\\n var b = this.x.redSub(this.z);\\n // BB = B^2\\n var bb = b.redSqr();\\n // C = AA - BB\\n var c = aa.redSub(bb);\\n // X3 = AA * BB\\n var nx = aa.redMul(bb);\\n // Z3 = C * (BB + A24 * C)\\n var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));\\n return this.curve.point(nx, nz);\\n};\\n\\nPoint.prototype.add = function add() {\\n throw new Error('Not supported on Montgomery curve');\\n};\\n\\nPoint.prototype.diffAdd = function diffAdd(p, diff) {\\n // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3\\n // 4M + 2S + 6A\\n\\n // A = X2 + Z2\\n var a = this.x.redAdd(this.z);\\n // B = X2 - Z2\\n var b = this.x.redSub(this.z);\\n // C = X3 + Z3\\n var c = p.x.redAdd(p.z);\\n // D = X3 - Z3\\n var d = p.x.redSub(p.z);\\n // DA = D * A\\n var da = d.redMul(a);\\n // CB = C * B\\n var cb = c.redMul(b);\\n // X5 = Z1 * (DA + CB)^2\\n var nx = diff.z.redMul(da.redAdd(cb).redSqr());\\n // Z5 = X1 * (DA - CB)^2\\n var nz = diff.x.redMul(da.redISub(cb).redSqr());\\n return this.curve.point(nx, nz);\\n};\\n\\nPoint.prototype.mul = function mul(k) {\\n var t = k.clone();\\n var a = this; // (N / 2) * Q + Q\\n var b = this.curve.point(null, null); // (N / 2) * Q\\n var c = this; // Q\\n\\n for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))\\n bits.push(t.andln(1));\\n\\n for (var i = bits.length - 1; i >= 0; i--) {\\n if (bits[i] === 0) {\\n // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q\\n a = a.diffAdd(b, c);\\n // N * Q = 2 * ((N / 2) * Q + Q))\\n b = b.dbl();\\n } else {\\n // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)\\n b = a.diffAdd(b, c);\\n // N * Q + Q = 2 * ((N / 2) * Q + Q)\\n a = a.dbl();\\n }\\n }\\n return b;\\n};\\n\\nPoint.prototype.mulAdd = function mulAdd() {\\n throw new Error('Not supported on Montgomery curve');\\n};\\n\\nPoint.prototype.jumlAdd = function jumlAdd() {\\n throw new Error('Not supported on Montgomery curve');\\n};\\n\\nPoint.prototype.eq = function eq(other) {\\n return this.getX().cmp(other.getX()) === 0;\\n};\\n\\nPoint.prototype.normalize = function normalize() {\\n this.x = this.x.redMul(this.z.redInvm());\\n this.z = this.curve.one;\\n return this;\\n};\\n\\nPoint.prototype.getX = function getX() {\\n // Normalize coordinates\\n this.normalize();\\n\\n return this.x.fromRed();\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/elliptic/lib/elliptic/curve/mont.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/elliptic/lib/elliptic/curve/short.js\":\n/*!***********************************************************!*\\\n !*** ./node_modules/elliptic/lib/elliptic/curve/short.js ***!\n \\***********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar curve = __webpack_require__(/*! ../curve */ \\\"./node_modules/elliptic/lib/elliptic/curve/index.js\\\");\\nvar elliptic = __webpack_require__(/*! ../../elliptic */ \\\"./node_modules/elliptic/lib/elliptic.js\\\");\\nvar BN = __webpack_require__(/*! bn.js */ \\\"./node_modules/bn.js/lib/bn.js\\\");\\nvar inherits = __webpack_require__(/*! inherits */ \\\"./node_modules/inherits/inherits_browser.js\\\");\\nvar Base = curve.base;\\n\\nvar assert = elliptic.utils.assert;\\n\\nfunction ShortCurve(conf) {\\n Base.call(this, 'short', conf);\\n\\n this.a = new BN(conf.a, 16).toRed(this.red);\\n this.b = new BN(conf.b, 16).toRed(this.red);\\n this.tinv = this.two.redInvm();\\n\\n this.zeroA = this.a.fromRed().cmpn(0) === 0;\\n this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;\\n\\n // If the curve is endomorphic, precalculate beta and lambda\\n this.endo = this._getEndomorphism(conf);\\n this._endoWnafT1 = new Array(4);\\n this._endoWnafT2 = new Array(4);\\n}\\ninherits(ShortCurve, Base);\\nmodule.exports = ShortCurve;\\n\\nShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {\\n // No efficient endomorphism\\n if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)\\n return;\\n\\n // Compute beta and lambda, that lambda * P = (beta * Px; Py)\\n var beta;\\n var lambda;\\n if (conf.beta) {\\n beta = new BN(conf.beta, 16).toRed(this.red);\\n } else {\\n var betas = this._getEndoRoots(this.p);\\n // Choose the smallest beta\\n beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];\\n beta = beta.toRed(this.red);\\n }\\n if (conf.lambda) {\\n lambda = new BN(conf.lambda, 16);\\n } else {\\n // Choose the lambda that is matching selected beta\\n var lambdas = this._getEndoRoots(this.n);\\n if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {\\n lambda = lambdas[0];\\n } else {\\n lambda = lambdas[1];\\n assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);\\n }\\n }\\n\\n // Get basis vectors, used for balanced length-two representation\\n var basis;\\n if (conf.basis) {\\n basis = conf.basis.map(function(vec) {\\n return {\\n a: new BN(vec.a, 16),\\n b: new BN(vec.b, 16)\\n };\\n });\\n } else {\\n basis = this._getEndoBasis(lambda);\\n }\\n\\n return {\\n beta: beta,\\n lambda: lambda,\\n basis: basis\\n };\\n};\\n\\nShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {\\n // Find roots of for x^2 + x + 1 in F\\n // Root = (-1 +- Sqrt(-3)) / 2\\n //\\n var red = num === this.p ? this.red : BN.mont(num);\\n var tinv = new BN(2).toRed(red).redInvm();\\n var ntinv = tinv.redNeg();\\n\\n var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);\\n\\n var l1 = ntinv.redAdd(s).fromRed();\\n var l2 = ntinv.redSub(s).fromRed();\\n return [ l1, l2 ];\\n};\\n\\nShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {\\n // aprxSqrt >= sqrt(this.n)\\n var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));\\n\\n // 3.74\\n // Run EGCD, until r(L + 1) < aprxSqrt\\n var u = lambda;\\n var v = this.n.clone();\\n var x1 = new BN(1);\\n var y1 = new BN(0);\\n var x2 = new BN(0);\\n var y2 = new BN(1);\\n\\n // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)\\n var a0;\\n var b0;\\n // First vector\\n var a1;\\n var b1;\\n // Second vector\\n var a2;\\n var b2;\\n\\n var prevR;\\n var i = 0;\\n var r;\\n var x;\\n while (u.cmpn(0) !== 0) {\\n var q = v.div(u);\\n r = v.sub(q.mul(u));\\n x = x2.sub(q.mul(x1));\\n var y = y2.sub(q.mul(y1));\\n\\n if (!a1 && r.cmp(aprxSqrt) < 0) {\\n a0 = prevR.neg();\\n b0 = x1;\\n a1 = r.neg();\\n b1 = x;\\n } else if (a1 && ++i === 2) {\\n break;\\n }\\n prevR = r;\\n\\n v = u;\\n u = r;\\n x2 = x1;\\n x1 = x;\\n y2 = y1;\\n y1 = y;\\n }\\n a2 = r.neg();\\n b2 = x;\\n\\n var len1 = a1.sqr().add(b1.sqr());\\n var len2 = a2.sqr().add(b2.sqr());\\n if (len2.cmp(len1) >= 0) {\\n a2 = a0;\\n b2 = b0;\\n }\\n\\n // Normalize signs\\n if (a1.negative) {\\n a1 = a1.neg();\\n b1 = b1.neg();\\n }\\n if (a2.negative) {\\n a2 = a2.neg();\\n b2 = b2.neg();\\n }\\n\\n return [\\n { a: a1, b: b1 },\\n { a: a2, b: b2 }\\n ];\\n};\\n\\nShortCurve.prototype._endoSplit = function _endoSplit(k) {\\n var basis = this.endo.basis;\\n var v1 = basis[0];\\n var v2 = basis[1];\\n\\n var c1 = v2.b.mul(k).divRound(this.n);\\n var c2 = v1.b.neg().mul(k).divRound(this.n);\\n\\n var p1 = c1.mul(v1.a);\\n var p2 = c2.mul(v2.a);\\n var q1 = c1.mul(v1.b);\\n var q2 = c2.mul(v2.b);\\n\\n // Calculate answer\\n var k1 = k.sub(p1).sub(p2);\\n var k2 = q1.add(q2).neg();\\n return { k1: k1, k2: k2 };\\n};\\n\\nShortCurve.prototype.pointFromX = function pointFromX(x, odd) {\\n x = new BN(x, 16);\\n if (!x.red)\\n x = x.toRed(this.red);\\n\\n var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);\\n var y = y2.redSqrt();\\n if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)\\n throw new Error('invalid point');\\n\\n // XXX Is there any way to tell if the number is odd without converting it\\n // to non-red form?\\n var isOdd = y.fromRed().isOdd();\\n if (odd && !isOdd || !odd && isOdd)\\n y = y.redNeg();\\n\\n return this.point(x, y);\\n};\\n\\nShortCurve.prototype.validate = function validate(point) {\\n if (point.inf)\\n return true;\\n\\n var x = point.x;\\n var y = point.y;\\n\\n var ax = this.a.redMul(x);\\n var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);\\n return y.redSqr().redISub(rhs).cmpn(0) === 0;\\n};\\n\\nShortCurve.prototype._endoWnafMulAdd =\\n function _endoWnafMulAdd(points, coeffs, jacobianResult) {\\n var npoints = this._endoWnafT1;\\n var ncoeffs = this._endoWnafT2;\\n for (var i = 0; i < points.length; i++) {\\n var split = this._endoSplit(coeffs[i]);\\n var p = points[i];\\n var beta = p._getBeta();\\n\\n if (split.k1.negative) {\\n split.k1.ineg();\\n p = p.neg(true);\\n }\\n if (split.k2.negative) {\\n split.k2.ineg();\\n beta = beta.neg(true);\\n }\\n\\n npoints[i * 2] = p;\\n npoints[i * 2 + 1] = beta;\\n ncoeffs[i * 2] = split.k1;\\n ncoeffs[i * 2 + 1] = split.k2;\\n }\\n var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);\\n\\n // Clean-up references to points and coefficients\\n for (var j = 0; j < i * 2; j++) {\\n npoints[j] = null;\\n ncoeffs[j] = null;\\n }\\n return res;\\n};\\n\\nfunction Point(curve, x, y, isRed) {\\n Base.BasePoint.call(this, curve, 'affine');\\n if (x === null && y === null) {\\n this.x = null;\\n this.y = null;\\n this.inf = true;\\n } else {\\n this.x = new BN(x, 16);\\n this.y = new BN(y, 16);\\n // Force redgomery representation when loading from JSON\\n if (isRed) {\\n this.x.forceRed(this.curve.red);\\n this.y.forceRed(this.curve.red);\\n }\\n if (!this.x.red)\\n this.x = this.x.toRed(this.curve.red);\\n if (!this.y.red)\\n this.y = this.y.toRed(this.curve.red);\\n this.inf = false;\\n }\\n}\\ninherits(Point, Base.BasePoint);\\n\\nShortCurve.prototype.point = function point(x, y, isRed) {\\n return new Point(this, x, y, isRed);\\n};\\n\\nShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {\\n return Point.fromJSON(this, obj, red);\\n};\\n\\nPoint.prototype._getBeta = function _getBeta() {\\n if (!this.curve.endo)\\n return;\\n\\n var pre = this.precomputed;\\n if (pre && pre.beta)\\n return pre.beta;\\n\\n var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);\\n if (pre) {\\n var curve = this.curve;\\n var endoMul = function(p) {\\n return curve.point(p.x.redMul(curve.endo.beta), p.y);\\n };\\n pre.beta = beta;\\n beta.precomputed = {\\n beta: null,\\n naf: pre.naf && {\\n wnd: pre.naf.wnd,\\n points: pre.naf.points.map(endoMul)\\n },\\n doubles: pre.doubles && {\\n step: pre.doubles.step,\\n points: pre.doubles.points.map(endoMul)\\n }\\n };\\n }\\n return beta;\\n};\\n\\nPoint.prototype.toJSON = function toJSON() {\\n if (!this.precomputed)\\n return [ this.x, this.y ];\\n\\n return [ this.x, this.y, this.precomputed && {\\n doubles: this.precomputed.doubles && {\\n step: this.precomputed.doubles.step,\\n points: this.precomputed.doubles.points.slice(1)\\n },\\n naf: this.precomputed.naf && {\\n wnd: this.precomputed.naf.wnd,\\n points: this.precomputed.naf.points.slice(1)\\n }\\n } ];\\n};\\n\\nPoint.fromJSON = function fromJSON(curve, obj, red) {\\n if (typeof obj === 'string')\\n obj = JSON.parse(obj);\\n var res = curve.point(obj[0], obj[1], red);\\n if (!obj[2])\\n return res;\\n\\n function obj2point(obj) {\\n return curve.point(obj[0], obj[1], red);\\n }\\n\\n var pre = obj[2];\\n res.precomputed = {\\n beta: null,\\n doubles: pre.doubles && {\\n step: pre.doubles.step,\\n points: [ res ].concat(pre.doubles.points.map(obj2point))\\n },\\n naf: pre.naf && {\\n wnd: pre.naf.wnd,\\n points: [ res ].concat(pre.naf.points.map(obj2point))\\n }\\n };\\n return res;\\n};\\n\\nPoint.prototype.inspect = function inspect() {\\n if (this.isInfinity())\\n return '<EC Point Infinity>';\\n return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +\\n ' y: ' + this.y.fromRed().toString(16, 2) + '>';\\n};\\n\\nPoint.prototype.isInfinity = function isInfinity() {\\n return this.inf;\\n};\\n\\nPoint.prototype.add = function add(p) {\\n // O + P = P\\n if (this.inf)\\n return p;\\n\\n // P + O = P\\n if (p.inf)\\n return this;\\n\\n // P + P = 2P\\n if (this.eq(p))\\n return this.dbl();\\n\\n // P + (-P) = O\\n if (this.neg().eq(p))\\n return this.curve.point(null, null);\\n\\n // P + Q = O\\n if (this.x.cmp(p.x) === 0)\\n return this.curve.point(null, null);\\n\\n var c = this.y.redSub(p.y);\\n if (c.cmpn(0) !== 0)\\n c = c.redMul(this.x.redSub(p.x).redInvm());\\n var nx = c.redSqr().redISub(this.x).redISub(p.x);\\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\\n return this.curve.point(nx, ny);\\n};\\n\\nPoint.prototype.dbl = function dbl() {\\n if (this.inf)\\n return this;\\n\\n // 2P = O\\n var ys1 = this.y.redAdd(this.y);\\n if (ys1.cmpn(0) === 0)\\n return this.curve.point(null, null);\\n\\n var a = this.curve.a;\\n\\n var x2 = this.x.redSqr();\\n var dyinv = ys1.redInvm();\\n var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);\\n\\n var nx = c.redSqr().redISub(this.x.redAdd(this.x));\\n var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\\n return this.curve.point(nx, ny);\\n};\\n\\nPoint.prototype.getX = function getX() {\\n return this.x.fromRed();\\n};\\n\\nPoint.prototype.getY = function getY() {\\n return this.y.fromRed();\\n};\\n\\nPoint.prototype.mul = function mul(k) {\\n k = new BN(k, 16);\\n\\n if (this._hasDoubles(k))\\n return this.curve._fixedNafMul(this, k);\\n else if (this.curve.endo)\\n return this.curve._endoWnafMulAdd([ this ], [ k ]);\\n else\\n return this.curve._wnafMul(this, k);\\n};\\n\\nPoint.prototype.mulAdd = function mulAdd(k1, p2, k2) {\\n var points = [ this, p2 ];\\n var coeffs = [ k1, k2 ];\\n if (this.curve.endo)\\n return this.curve._endoWnafMulAdd(points, coeffs);\\n else\\n return this.curve._wnafMulAdd(1, points, coeffs, 2);\\n};\\n\\nPoint.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {\\n var points = [ this, p2 ];\\n var coeffs = [ k1, k2 ];\\n if (this.curve.endo)\\n return this.curve._endoWnafMulAdd(points, coeffs, true);\\n else\\n return this.curve._wnafMulAdd(1, points, coeffs, 2, true);\\n};\\n\\nPoint.prototype.eq = function eq(p) {\\n return this === p ||\\n this.inf === p.inf &&\\n (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);\\n};\\n\\nPoint.prototype.neg = function neg(_precompute) {\\n if (this.inf)\\n return this;\\n\\n var res = this.curve.point(this.x, this.y.redNeg());\\n if (_precompute && this.precomputed) {\\n var pre = this.precomputed;\\n var negate = function(p) {\\n return p.neg();\\n };\\n res.precomputed = {\\n naf: pre.naf && {\\n wnd: pre.naf.wnd,\\n points: pre.naf.points.map(negate)\\n },\\n doubles: pre.doubles && {\\n step: pre.doubles.step,\\n points: pre.doubles.points.map(negate)\\n }\\n };\\n }\\n return res;\\n};\\n\\nPoint.prototype.toJ = function toJ() {\\n if (this.inf)\\n return this.curve.jpoint(null, null, null);\\n\\n var res = this.curve.jpoint(this.x, this.y, this.curve.one);\\n return res;\\n};\\n\\nfunction JPoint(curve, x, y, z) {\\n Base.BasePoint.call(this, curve, 'jacobian');\\n if (x === null && y === null && z === null) {\\n this.x = this.curve.one;\\n this.y = this.curve.one;\\n this.z = new BN(0);\\n } else {\\n this.x = new BN(x, 16);\\n this.y = new BN(y, 16);\\n this.z = new BN(z, 16);\\n }\\n if (!this.x.red)\\n this.x = this.x.toRed(this.curve.red);\\n if (!this.y.red)\\n this.y = this.y.toRed(this.curve.red);\\n if (!this.z.red)\\n this.z = this.z.toRed(this.curve.red);\\n\\n this.zOne = this.z === this.curve.one;\\n}\\ninherits(JPoint, Base.BasePoint);\\n\\nShortCurve.prototype.jpoint = function jpoint(x, y, z) {\\n return new JPoint(this, x, y, z);\\n};\\n\\nJPoint.prototype.toP = function toP() {\\n if (this.isInfinity())\\n return this.curve.point(null, null);\\n\\n var zinv = this.z.redInvm();\\n var zinv2 = zinv.redSqr();\\n var ax = this.x.redMul(zinv2);\\n var ay = this.y.redMul(zinv2).redMul(zinv);\\n\\n return this.curve.point(ax, ay);\\n};\\n\\nJPoint.prototype.neg = function neg() {\\n return this.curve.jpoint(this.x, this.y.redNeg(), this.z);\\n};\\n\\nJPoint.prototype.add = function add(p) {\\n // O + P = P\\n if (this.isInfinity())\\n return p;\\n\\n // P + O = P\\n if (p.isInfinity())\\n return this;\\n\\n // 12M + 4S + 7A\\n var pz2 = p.z.redSqr();\\n var z2 = this.z.redSqr();\\n var u1 = this.x.redMul(pz2);\\n var u2 = p.x.redMul(z2);\\n var s1 = this.y.redMul(pz2.redMul(p.z));\\n var s2 = p.y.redMul(z2.redMul(this.z));\\n\\n var h = u1.redSub(u2);\\n var r = s1.redSub(s2);\\n if (h.cmpn(0) === 0) {\\n if (r.cmpn(0) !== 0)\\n return this.curve.jpoint(null, null, null);\\n else\\n return this.dbl();\\n }\\n\\n var h2 = h.redSqr();\\n var h3 = h2.redMul(h);\\n var v = u1.redMul(h2);\\n\\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\\n var nz = this.z.redMul(p.z).redMul(h);\\n\\n return this.curve.jpoint(nx, ny, nz);\\n};\\n\\nJPoint.prototype.mixedAdd = function mixedAdd(p) {\\n // O + P = P\\n if (this.isInfinity())\\n return p.toJ();\\n\\n // P + O = P\\n if (p.isInfinity())\\n return this;\\n\\n // 8M + 3S + 7A\\n var z2 = this.z.redSqr();\\n var u1 = this.x;\\n var u2 = p.x.redMul(z2);\\n var s1 = this.y;\\n var s2 = p.y.redMul(z2).redMul(this.z);\\n\\n var h = u1.redSub(u2);\\n var r = s1.redSub(s2);\\n if (h.cmpn(0) === 0) {\\n if (r.cmpn(0) !== 0)\\n return this.curve.jpoint(null, null, null);\\n else\\n return this.dbl();\\n }\\n\\n var h2 = h.redSqr();\\n var h3 = h2.redMul(h);\\n var v = u1.redMul(h2);\\n\\n var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\\n var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\\n var nz = this.z.redMul(h);\\n\\n return this.curve.jpoint(nx, ny, nz);\\n};\\n\\nJPoint.prototype.dblp = function dblp(pow) {\\n if (pow === 0)\\n return this;\\n if (this.isInfinity())\\n return this;\\n if (!pow)\\n return this.dbl();\\n\\n if (this.curve.zeroA || this.curve.threeA) {\\n var r = this;\\n for (var i = 0; i < pow; i++)\\n r = r.dbl();\\n return r;\\n }\\n\\n // 1M + 2S + 1A + N * (4S + 5M + 8A)\\n // N = 1 => 6M + 6S + 9A\\n var a = this.curve.a;\\n var tinv = this.curve.tinv;\\n\\n var jx = this.x;\\n var jy = this.y;\\n var jz = this.z;\\n var jz4 = jz.redSqr().redSqr();\\n\\n // Reuse results\\n var jyd = jy.redAdd(jy);\\n for (var i = 0; i < pow; i++) {\\n var jx2 = jx.redSqr();\\n var jyd2 = jyd.redSqr();\\n var jyd4 = jyd2.redSqr();\\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\\n\\n var t1 = jx.redMul(jyd2);\\n var nx = c.redSqr().redISub(t1.redAdd(t1));\\n var t2 = t1.redISub(nx);\\n var dny = c.redMul(t2);\\n dny = dny.redIAdd(dny).redISub(jyd4);\\n var nz = jyd.redMul(jz);\\n if (i + 1 < pow)\\n jz4 = jz4.redMul(jyd4);\\n\\n jx = nx;\\n jz = nz;\\n jyd = dny;\\n }\\n\\n return this.curve.jpoint(jx, jyd.redMul(tinv), jz);\\n};\\n\\nJPoint.prototype.dbl = function dbl() {\\n if (this.isInfinity())\\n return this;\\n\\n if (this.curve.zeroA)\\n return this._zeroDbl();\\n else if (this.curve.threeA)\\n return this._threeDbl();\\n else\\n return this._dbl();\\n};\\n\\nJPoint.prototype._zeroDbl = function _zeroDbl() {\\n var nx;\\n var ny;\\n var nz;\\n // Z = 1\\n if (this.zOne) {\\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\\n // #doubling-mdbl-2007-bl\\n // 1M + 5S + 14A\\n\\n // XX = X1^2\\n var xx = this.x.redSqr();\\n // YY = Y1^2\\n var yy = this.y.redSqr();\\n // YYYY = YY^2\\n var yyyy = yy.redSqr();\\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\\n s = s.redIAdd(s);\\n // M = 3 * XX + a; a = 0\\n var m = xx.redAdd(xx).redIAdd(xx);\\n // T = M ^ 2 - 2*S\\n var t = m.redSqr().redISub(s).redISub(s);\\n\\n // 8 * YYYY\\n var yyyy8 = yyyy.redIAdd(yyyy);\\n yyyy8 = yyyy8.redIAdd(yyyy8);\\n yyyy8 = yyyy8.redIAdd(yyyy8);\\n\\n // X3 = T\\n nx = t;\\n // Y3 = M * (S - T) - 8 * YYYY\\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\\n // Z3 = 2*Y1\\n nz = this.y.redAdd(this.y);\\n } else {\\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\\n // #doubling-dbl-2009-l\\n // 2M + 5S + 13A\\n\\n // A = X1^2\\n var a = this.x.redSqr();\\n // B = Y1^2\\n var b = this.y.redSqr();\\n // C = B^2\\n var c = b.redSqr();\\n // D = 2 * ((X1 + B)^2 - A - C)\\n var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);\\n d = d.redIAdd(d);\\n // E = 3 * A\\n var e = a.redAdd(a).redIAdd(a);\\n // F = E^2\\n var f = e.redSqr();\\n\\n // 8 * C\\n var c8 = c.redIAdd(c);\\n c8 = c8.redIAdd(c8);\\n c8 = c8.redIAdd(c8);\\n\\n // X3 = F - 2 * D\\n nx = f.redISub(d).redISub(d);\\n // Y3 = E * (D - X3) - 8 * C\\n ny = e.redMul(d.redISub(nx)).redISub(c8);\\n // Z3 = 2 * Y1 * Z1\\n nz = this.y.redMul(this.z);\\n nz = nz.redIAdd(nz);\\n }\\n\\n return this.curve.jpoint(nx, ny, nz);\\n};\\n\\nJPoint.prototype._threeDbl = function _threeDbl() {\\n var nx;\\n var ny;\\n var nz;\\n // Z = 1\\n if (this.zOne) {\\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html\\n // #doubling-mdbl-2007-bl\\n // 1M + 5S + 15A\\n\\n // XX = X1^2\\n var xx = this.x.redSqr();\\n // YY = Y1^2\\n var yy = this.y.redSqr();\\n // YYYY = YY^2\\n var yyyy = yy.redSqr();\\n // S = 2 * ((X1 + YY)^2 - XX - YYYY)\\n var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\\n s = s.redIAdd(s);\\n // M = 3 * XX + a\\n var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);\\n // T = M^2 - 2 * S\\n var t = m.redSqr().redISub(s).redISub(s);\\n // X3 = T\\n nx = t;\\n // Y3 = M * (S - T) - 8 * YYYY\\n var yyyy8 = yyyy.redIAdd(yyyy);\\n yyyy8 = yyyy8.redIAdd(yyyy8);\\n yyyy8 = yyyy8.redIAdd(yyyy8);\\n ny = m.redMul(s.redISub(t)).redISub(yyyy8);\\n // Z3 = 2 * Y1\\n nz = this.y.redAdd(this.y);\\n } else {\\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b\\n // 3M + 5S\\n\\n // delta = Z1^2\\n var delta = this.z.redSqr();\\n // gamma = Y1^2\\n var gamma = this.y.redSqr();\\n // beta = X1 * gamma\\n var beta = this.x.redMul(gamma);\\n // alpha = 3 * (X1 - delta) * (X1 + delta)\\n var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));\\n alpha = alpha.redAdd(alpha).redIAdd(alpha);\\n // X3 = alpha^2 - 8 * beta\\n var beta4 = beta.redIAdd(beta);\\n beta4 = beta4.redIAdd(beta4);\\n var beta8 = beta4.redAdd(beta4);\\n nx = alpha.redSqr().redISub(beta8);\\n // Z3 = (Y1 + Z1)^2 - gamma - delta\\n nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);\\n // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2\\n var ggamma8 = gamma.redSqr();\\n ggamma8 = ggamma8.redIAdd(ggamma8);\\n ggamma8 = ggamma8.redIAdd(ggamma8);\\n ggamma8 = ggamma8.redIAdd(ggamma8);\\n ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);\\n }\\n\\n return this.curve.jpoint(nx, ny, nz);\\n};\\n\\nJPoint.prototype._dbl = function _dbl() {\\n var a = this.curve.a;\\n\\n // 4M + 6S + 10A\\n var jx = this.x;\\n var jy = this.y;\\n var jz = this.z;\\n var jz4 = jz.redSqr().redSqr();\\n\\n var jx2 = jx.redSqr();\\n var jy2 = jy.redSqr();\\n\\n var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\\n\\n var jxd4 = jx.redAdd(jx);\\n jxd4 = jxd4.redIAdd(jxd4);\\n var t1 = jxd4.redMul(jy2);\\n var nx = c.redSqr().redISub(t1.redAdd(t1));\\n var t2 = t1.redISub(nx);\\n\\n var jyd8 = jy2.redSqr();\\n jyd8 = jyd8.redIAdd(jyd8);\\n jyd8 = jyd8.redIAdd(jyd8);\\n jyd8 = jyd8.redIAdd(jyd8);\\n var ny = c.redMul(t2).redISub(jyd8);\\n var nz = jy.redAdd(jy).redMul(jz);\\n\\n return this.curve.jpoint(nx, ny, nz);\\n};\\n\\nJPoint.prototype.trpl = function trpl() {\\n if (!this.curve.zeroA)\\n return this.dbl().add(this);\\n\\n // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl\\n // 5M + 10S + ...\\n\\n // XX = X1^2\\n var xx = this.x.redSqr();\\n // YY = Y1^2\\n var yy = this.y.redSqr();\\n // ZZ = Z1^2\\n var zz = this.z.redSqr();\\n // YYYY = YY^2\\n var yyyy = yy.redSqr();\\n // M = 3 * XX + a * ZZ2; a = 0\\n var m = xx.redAdd(xx).redIAdd(xx);\\n // MM = M^2\\n var mm = m.redSqr();\\n // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM\\n var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\\n e = e.redIAdd(e);\\n e = e.redAdd(e).redIAdd(e);\\n e = e.redISub(mm);\\n // EE = E^2\\n var ee = e.redSqr();\\n // T = 16*YYYY\\n var t = yyyy.redIAdd(yyyy);\\n t = t.redIAdd(t);\\n t = t.redIAdd(t);\\n t = t.redIAdd(t);\\n // U = (M + E)^2 - MM - EE - T\\n var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);\\n // X3 = 4 * (X1 * EE - 4 * YY * U)\\n var yyu4 = yy.redMul(u);\\n yyu4 = yyu4.redIAdd(yyu4);\\n yyu4 = yyu4.redIAdd(yyu4);\\n var nx = this.x.redMul(ee).redISub(yyu4);\\n nx = nx.redIAdd(nx);\\n nx = nx.redIAdd(nx);\\n // Y3 = 8 * Y1 * (U * (T - U) - E * EE)\\n var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));\\n ny = ny.redIAdd(ny);\\n ny = ny.redIAdd(ny);\\n ny = ny.redIAdd(ny);\\n // Z3 = (Z1 + E)^2 - ZZ - EE\\n var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);\\n\\n return this.curve.jpoint(nx, ny, nz);\\n};\\n\\nJPoint.prototype.mul = function mul(k, kbase) {\\n k = new BN(k, kbase);\\n\\n return this.curve._wnafMul(this, k);\\n};\\n\\nJPoint.prototype.eq = function eq(p) {\\n if (p.type === 'affine')\\n return this.eq(p.toJ());\\n\\n if (this === p)\\n return true;\\n\\n // x1 * z2^2 == x2 * z1^2\\n var z2 = this.z.redSqr();\\n var pz2 = p.z.redSqr();\\n if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)\\n return false;\\n\\n // y1 * z2^3 == y2 * z1^3\\n var z3 = z2.redMul(this.z);\\n var pz3 = pz2.redMul(p.z);\\n return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;\\n};\\n\\nJPoint.prototype.eqXToP = function eqXToP(x) {\\n var zs = this.z.redSqr();\\n var rx = x.toRed(this.curve.red).redMul(zs);\\n if (this.x.cmp(rx) === 0)\\n return true;\\n\\n var xc = x.clone();\\n var t = this.curve.redN.redMul(zs);\\n for (;;) {\\n xc.iadd(this.curve.n);\\n if (xc.cmp(this.curve.p) >= 0)\\n return false;\\n\\n rx.redIAdd(t);\\n if (this.x.cmp(rx) === 0)\\n return true;\\n }\\n};\\n\\nJPoint.prototype.inspect = function inspect() {\\n if (this.isInfinity())\\n return '<EC JPoint Infinity>';\\n return '<EC JPoint x: ' + this.x.toString(16, 2) +\\n ' y: ' + this.y.toString(16, 2) +\\n ' z: ' + this.z.toString(16, 2) + '>';\\n};\\n\\nJPoint.prototype.isInfinity = function isInfinity() {\\n // XXX This code assumes that zero is always zero in red\\n return this.z.cmpn(0) === 0;\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/elliptic/lib/elliptic/curve/short.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/elliptic/lib/elliptic/curves.js\":\n/*!******************************************************!*\\\n !*** ./node_modules/elliptic/lib/elliptic/curves.js ***!\n \\******************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar curves = exports;\\n\\nvar hash = __webpack_require__(/*! hash.js */ \\\"./node_modules/hash.js/lib/hash.js\\\");\\nvar elliptic = __webpack_require__(/*! ../elliptic */ \\\"./node_modules/elliptic/lib/elliptic.js\\\");\\n\\nvar assert = elliptic.utils.assert;\\n\\nfunction PresetCurve(options) {\\n if (options.type === 'short')\\n this.curve = new elliptic.curve.short(options);\\n else if (options.type === 'edwards')\\n this.curve = new elliptic.curve.edwards(options);\\n else\\n this.curve = new elliptic.curve.mont(options);\\n this.g = this.curve.g;\\n this.n = this.curve.n;\\n this.hash = options.hash;\\n\\n assert(this.g.validate(), 'Invalid curve');\\n assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');\\n}\\ncurves.PresetCurve = PresetCurve;\\n\\nfunction defineCurve(name, options) {\\n Object.defineProperty(curves, name, {\\n configurable: true,\\n enumerable: true,\\n get: function() {\\n var curve = new PresetCurve(options);\\n Object.defineProperty(curves, name, {\\n configurable: true,\\n enumerable: true,\\n value: curve\\n });\\n return curve;\\n }\\n });\\n}\\n\\ndefineCurve('p192', {\\n type: 'short',\\n prime: 'p192',\\n p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',\\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',\\n b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',\\n n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',\\n hash: hash.sha256,\\n gRed: false,\\n g: [\\n '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',\\n '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'\\n ]\\n});\\n\\ndefineCurve('p224', {\\n type: 'short',\\n prime: 'p224',\\n p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',\\n a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',\\n b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',\\n n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',\\n hash: hash.sha256,\\n gRed: false,\\n g: [\\n 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',\\n 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'\\n ]\\n});\\n\\ndefineCurve('p256', {\\n type: 'short',\\n prime: null,\\n p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',\\n a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',\\n b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',\\n n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',\\n hash: hash.sha256,\\n gRed: false,\\n g: [\\n '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',\\n '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'\\n ]\\n});\\n\\ndefineCurve('p384', {\\n type: 'short',\\n prime: null,\\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\\n 'fffffffe ffffffff 00000000 00000000 ffffffff',\\n a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\\n 'fffffffe ffffffff 00000000 00000000 fffffffc',\\n b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +\\n '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',\\n n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +\\n 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',\\n hash: hash.sha384,\\n gRed: false,\\n g: [\\n 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +\\n '5502f25d bf55296c 3a545e38 72760ab7',\\n '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +\\n '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'\\n ]\\n});\\n\\ndefineCurve('p521', {\\n type: 'short',\\n prime: null,\\n p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\\n 'ffffffff ffffffff ffffffff ffffffff ffffffff',\\n a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\\n 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\\n 'ffffffff ffffffff ffffffff ffffffff fffffffc',\\n b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +\\n '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +\\n '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',\\n n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +\\n 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +\\n 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',\\n hash: hash.sha512,\\n gRed: false,\\n g: [\\n '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +\\n '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +\\n 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',\\n '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +\\n '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +\\n '3fad0761 353c7086 a272c240 88be9476 9fd16650'\\n ]\\n});\\n\\ndefineCurve('curve25519', {\\n type: 'mont',\\n prime: 'p25519',\\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\\n a: '76d06',\\n b: '1',\\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\\n hash: hash.sha256,\\n gRed: false,\\n g: [\\n '9'\\n ]\\n});\\n\\ndefineCurve('ed25519', {\\n type: 'edwards',\\n prime: 'p25519',\\n p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\\n a: '-1',\\n c: '1',\\n // -121665 * (121666^(-1)) (mod P)\\n d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',\\n n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\\n hash: hash.sha256,\\n gRed: false,\\n g: [\\n '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',\\n\\n // 4/5\\n '6666666666666666666666666666666666666666666666666666666666666658'\\n ]\\n});\\n\\nvar pre;\\ntry {\\n pre = __webpack_require__(/*! ./precomputed/secp256k1 */ \\\"./node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js\\\");\\n} catch (e) {\\n pre = undefined;\\n}\\n\\ndefineCurve('secp256k1', {\\n type: 'short',\\n prime: 'k256',\\n p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',\\n a: '0',\\n b: '7',\\n n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',\\n h: '1',\\n hash: hash.sha256,\\n\\n // Precomputed endomorphism\\n beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',\\n lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',\\n basis: [\\n {\\n a: '3086d221a7d46bcde86c90e49284eb15',\\n b: '-e4437ed6010e88286f547fa90abfe4c3'\\n },\\n {\\n a: '114ca50f7a8e2f3f657c1108d9d44cfd8',\\n b: '3086d221a7d46bcde86c90e49284eb15'\\n }\\n ],\\n\\n gRed: false,\\n g: [\\n '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',\\n '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',\\n pre\\n ]\\n});\\n\\n\\n//# sourceURL=webpack:///./node_modules/elliptic/lib/elliptic/curves.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/elliptic/lib/elliptic/ec/index.js\":\n/*!********************************************************!*\\\n !*** ./node_modules/elliptic/lib/elliptic/ec/index.js ***!\n \\********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar BN = __webpack_require__(/*! bn.js */ \\\"./node_modules/bn.js/lib/bn.js\\\");\\nvar HmacDRBG = __webpack_require__(/*! hmac-drbg */ \\\"./node_modules/hmac-drbg/lib/hmac-drbg.js\\\");\\nvar elliptic = __webpack_require__(/*! ../../elliptic */ \\\"./node_modules/elliptic/lib/elliptic.js\\\");\\nvar utils = elliptic.utils;\\nvar assert = utils.assert;\\n\\nvar KeyPair = __webpack_require__(/*! ./key */ \\\"./node_modules/elliptic/lib/elliptic/ec/key.js\\\");\\nvar Signature = __webpack_require__(/*! ./signature */ \\\"./node_modules/elliptic/lib/elliptic/ec/signature.js\\\");\\n\\nfunction EC(options) {\\n if (!(this instanceof EC))\\n return new EC(options);\\n\\n // Shortcut `elliptic.ec(curve-name)`\\n if (typeof options === 'string') {\\n assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options);\\n\\n options = elliptic.curves[options];\\n }\\n\\n // Shortcut for `elliptic.ec(elliptic.curves.curveName)`\\n if (options instanceof elliptic.curves.PresetCurve)\\n options = { curve: options };\\n\\n this.curve = options.curve.curve;\\n this.n = this.curve.n;\\n this.nh = this.n.ushrn(1);\\n this.g = this.curve.g;\\n\\n // Point on curve\\n this.g = options.curve.g;\\n this.g.precompute(options.curve.n.bitLength() + 1);\\n\\n // Hash for function for DRBG\\n this.hash = options.hash || options.curve.hash;\\n}\\nmodule.exports = EC;\\n\\nEC.prototype.keyPair = function keyPair(options) {\\n return new KeyPair(this, options);\\n};\\n\\nEC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {\\n return KeyPair.fromPrivate(this, priv, enc);\\n};\\n\\nEC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {\\n return KeyPair.fromPublic(this, pub, enc);\\n};\\n\\nEC.prototype.genKeyPair = function genKeyPair(options) {\\n if (!options)\\n options = {};\\n\\n // Instantiate Hmac_DRBG\\n var drbg = new HmacDRBG({\\n hash: this.hash,\\n pers: options.pers,\\n persEnc: options.persEnc || 'utf8',\\n entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),\\n entropyEnc: options.entropy && options.entropyEnc || 'utf8',\\n nonce: this.n.toArray()\\n });\\n\\n var bytes = this.n.byteLength();\\n var ns2 = this.n.sub(new BN(2));\\n do {\\n var priv = new BN(drbg.generate(bytes));\\n if (priv.cmp(ns2) > 0)\\n continue;\\n\\n priv.iaddn(1);\\n return this.keyFromPrivate(priv);\\n } while (true);\\n};\\n\\nEC.prototype._truncateToN = function truncateToN(msg, truncOnly) {\\n var delta = msg.byteLength() * 8 - this.n.bitLength();\\n if (delta > 0)\\n msg = msg.ushrn(delta);\\n if (!truncOnly && msg.cmp(this.n) >= 0)\\n return msg.sub(this.n);\\n else\\n return msg;\\n};\\n\\nEC.prototype.sign = function sign(msg, key, enc, options) {\\n if (typeof enc === 'object') {\\n options = enc;\\n enc = null;\\n }\\n if (!options)\\n options = {};\\n\\n key = this.keyFromPrivate(key, enc);\\n msg = this._truncateToN(new BN(msg, 16));\\n\\n // Zero-extend key to provide enough entropy\\n var bytes = this.n.byteLength();\\n var bkey = key.getPrivate().toArray('be', bytes);\\n\\n // Zero-extend nonce to have the same byte size as N\\n var nonce = msg.toArray('be', bytes);\\n\\n // Instantiate Hmac_DRBG\\n var drbg = new HmacDRBG({\\n hash: this.hash,\\n entropy: bkey,\\n nonce: nonce,\\n pers: options.pers,\\n persEnc: options.persEnc || 'utf8'\\n });\\n\\n // Number of bytes to generate\\n var ns1 = this.n.sub(new BN(1));\\n\\n for (var iter = 0; true; iter++) {\\n var k = options.k ?\\n options.k(iter) :\\n new BN(drbg.generate(this.n.byteLength()));\\n k = this._truncateToN(k, true);\\n if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)\\n continue;\\n\\n var kp = this.g.mul(k);\\n if (kp.isInfinity())\\n continue;\\n\\n var kpX = kp.getX();\\n var r = kpX.umod(this.n);\\n if (r.cmpn(0) === 0)\\n continue;\\n\\n var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));\\n s = s.umod(this.n);\\n if (s.cmpn(0) === 0)\\n continue;\\n\\n var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |\\n (kpX.cmp(r) !== 0 ? 2 : 0);\\n\\n // Use complement of `s`, if it is > `n / 2`\\n if (options.canonical && s.cmp(this.nh) > 0) {\\n s = this.n.sub(s);\\n recoveryParam ^= 1;\\n }\\n\\n return new Signature({ r: r, s: s, recoveryParam: recoveryParam });\\n }\\n};\\n\\nEC.prototype.verify = function verify(msg, signature, key, enc) {\\n msg = this._truncateToN(new BN(msg, 16));\\n key = this.keyFromPublic(key, enc);\\n signature = new Signature(signature, 'hex');\\n\\n // Perform primitive values validation\\n var r = signature.r;\\n var s = signature.s;\\n if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)\\n return false;\\n if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)\\n return false;\\n\\n // Validate signature\\n var sinv = s.invm(this.n);\\n var u1 = sinv.mul(msg).umod(this.n);\\n var u2 = sinv.mul(r).umod(this.n);\\n\\n if (!this.curve._maxwellTrick) {\\n var p = this.g.mulAdd(u1, key.getPublic(), u2);\\n if (p.isInfinity())\\n return false;\\n\\n return p.getX().umod(this.n).cmp(r) === 0;\\n }\\n\\n // NOTE: Greg Maxwell's trick, inspired by:\\n // https://git.io/vad3K\\n\\n var p = this.g.jmulAdd(u1, key.getPublic(), u2);\\n if (p.isInfinity())\\n return false;\\n\\n // Compare `p.x` of Jacobian point with `r`,\\n // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the\\n // inverse of `p.z^2`\\n return p.eqXToP(r);\\n};\\n\\nEC.prototype.recoverPubKey = function(msg, signature, j, enc) {\\n assert((3 & j) === j, 'The recovery param is more than two bits');\\n signature = new Signature(signature, enc);\\n\\n var n = this.n;\\n var e = new BN(msg);\\n var r = signature.r;\\n var s = signature.s;\\n\\n // A set LSB signifies that the y-coordinate is odd\\n var isYOdd = j & 1;\\n var isSecondKey = j >> 1;\\n if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)\\n throw new Error('Unable to find sencond key candinate');\\n\\n // 1.1. Let x = r + jn.\\n if (isSecondKey)\\n r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);\\n else\\n r = this.curve.pointFromX(r, isYOdd);\\n\\n var rInv = signature.r.invm(n);\\n var s1 = n.sub(e).mul(rInv).umod(n);\\n var s2 = s.mul(rInv).umod(n);\\n\\n // 1.6.1 Compute Q = r^-1 (sR - eG)\\n // Q = r^-1 (sR + -eG)\\n return this.g.mulAdd(s1, r, s2);\\n};\\n\\nEC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {\\n signature = new Signature(signature, enc);\\n if (signature.recoveryParam !== null)\\n return signature.recoveryParam;\\n\\n for (var i = 0; i < 4; i++) {\\n var Qprime;\\n try {\\n Qprime = this.recoverPubKey(e, signature, i);\\n } catch (e) {\\n continue;\\n }\\n\\n if (Qprime.eq(Q))\\n return i;\\n }\\n throw new Error('Unable to find valid recovery factor');\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/elliptic/lib/elliptic/ec/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/elliptic/lib/elliptic/ec/key.js\":\n/*!******************************************************!*\\\n !*** ./node_modules/elliptic/lib/elliptic/ec/key.js ***!\n \\******************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar BN = __webpack_require__(/*! bn.js */ \\\"./node_modules/bn.js/lib/bn.js\\\");\\nvar elliptic = __webpack_require__(/*! ../../elliptic */ \\\"./node_modules/elliptic/lib/elliptic.js\\\");\\nvar utils = elliptic.utils;\\nvar assert = utils.assert;\\n\\nfunction KeyPair(ec, options) {\\n this.ec = ec;\\n this.priv = null;\\n this.pub = null;\\n\\n // KeyPair(ec, { priv: ..., pub: ... })\\n if (options.priv)\\n this._importPrivate(options.priv, options.privEnc);\\n if (options.pub)\\n this._importPublic(options.pub, options.pubEnc);\\n}\\nmodule.exports = KeyPair;\\n\\nKeyPair.fromPublic = function fromPublic(ec, pub, enc) {\\n if (pub instanceof KeyPair)\\n return pub;\\n\\n return new KeyPair(ec, {\\n pub: pub,\\n pubEnc: enc\\n });\\n};\\n\\nKeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {\\n if (priv instanceof KeyPair)\\n return priv;\\n\\n return new KeyPair(ec, {\\n priv: priv,\\n privEnc: enc\\n });\\n};\\n\\nKeyPair.prototype.validate = function validate() {\\n var pub = this.getPublic();\\n\\n if (pub.isInfinity())\\n return { result: false, reason: 'Invalid public key' };\\n if (!pub.validate())\\n return { result: false, reason: 'Public key is not a point' };\\n if (!pub.mul(this.ec.curve.n).isInfinity())\\n return { result: false, reason: 'Public key * N != O' };\\n\\n return { result: true, reason: null };\\n};\\n\\nKeyPair.prototype.getPublic = function getPublic(compact, enc) {\\n // compact is optional argument\\n if (typeof compact === 'string') {\\n enc = compact;\\n compact = null;\\n }\\n\\n if (!this.pub)\\n this.pub = this.ec.g.mul(this.priv);\\n\\n if (!enc)\\n return this.pub;\\n\\n return this.pub.encode(enc, compact);\\n};\\n\\nKeyPair.prototype.getPrivate = function getPrivate(enc) {\\n if (enc === 'hex')\\n return this.priv.toString(16, 2);\\n else\\n return this.priv;\\n};\\n\\nKeyPair.prototype._importPrivate = function _importPrivate(key, enc) {\\n this.priv = new BN(key, enc || 16);\\n\\n // Ensure that the priv won't be bigger than n, otherwise we may fail\\n // in fixed multiplication method\\n this.priv = this.priv.umod(this.ec.curve.n);\\n};\\n\\nKeyPair.prototype._importPublic = function _importPublic(key, enc) {\\n if (key.x || key.y) {\\n // Montgomery points only have an `x` coordinate.\\n // Weierstrass/Edwards points on the other hand have both `x` and\\n // `y` coordinates.\\n if (this.ec.curve.type === 'mont') {\\n assert(key.x, 'Need x coordinate');\\n } else if (this.ec.curve.type === 'short' ||\\n this.ec.curve.type === 'edwards') {\\n assert(key.x && key.y, 'Need both x and y coordinate');\\n }\\n this.pub = this.ec.curve.point(key.x, key.y);\\n return;\\n }\\n this.pub = this.ec.curve.decodePoint(key, enc);\\n};\\n\\n// ECDH\\nKeyPair.prototype.derive = function derive(pub) {\\n return pub.mul(this.priv).getX();\\n};\\n\\n// ECDSA\\nKeyPair.prototype.sign = function sign(msg, enc, options) {\\n return this.ec.sign(msg, this, enc, options);\\n};\\n\\nKeyPair.prototype.verify = function verify(msg, signature) {\\n return this.ec.verify(msg, signature, this);\\n};\\n\\nKeyPair.prototype.inspect = function inspect() {\\n return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +\\n ' pub: ' + (this.pub && this.pub.inspect()) + ' >';\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/elliptic/lib/elliptic/ec/key.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/elliptic/lib/elliptic/ec/signature.js\":\n/*!************************************************************!*\\\n !*** ./node_modules/elliptic/lib/elliptic/ec/signature.js ***!\n \\************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar BN = __webpack_require__(/*! bn.js */ \\\"./node_modules/bn.js/lib/bn.js\\\");\\n\\nvar elliptic = __webpack_require__(/*! ../../elliptic */ \\\"./node_modules/elliptic/lib/elliptic.js\\\");\\nvar utils = elliptic.utils;\\nvar assert = utils.assert;\\n\\nfunction Signature(options, enc) {\\n if (options instanceof Signature)\\n return options;\\n\\n if (this._importDER(options, enc))\\n return;\\n\\n assert(options.r && options.s, 'Signature without r or s');\\n this.r = new BN(options.r, 16);\\n this.s = new BN(options.s, 16);\\n if (options.recoveryParam === undefined)\\n this.recoveryParam = null;\\n else\\n this.recoveryParam = options.recoveryParam;\\n}\\nmodule.exports = Signature;\\n\\nfunction Position() {\\n this.place = 0;\\n}\\n\\nfunction getLength(buf, p) {\\n var initial = buf[p.place++];\\n if (!(initial & 0x80)) {\\n return initial;\\n }\\n var octetLen = initial & 0xf;\\n var val = 0;\\n for (var i = 0, off = p.place; i < octetLen; i++, off++) {\\n val <<= 8;\\n val |= buf[off];\\n }\\n p.place = off;\\n return val;\\n}\\n\\nfunction rmPadding(buf) {\\n var i = 0;\\n var len = buf.length - 1;\\n while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {\\n i++;\\n }\\n if (i === 0) {\\n return buf;\\n }\\n return buf.slice(i);\\n}\\n\\nSignature.prototype._importDER = function _importDER(data, enc) {\\n data = utils.toArray(data, enc);\\n var p = new Position();\\n if (data[p.place++] !== 0x30) {\\n return false;\\n }\\n var len = getLength(data, p);\\n if ((len + p.place) !== data.length) {\\n return false;\\n }\\n if (data[p.place++] !== 0x02) {\\n return false;\\n }\\n var rlen = getLength(data, p);\\n var r = data.slice(p.place, rlen + p.place);\\n p.place += rlen;\\n if (data[p.place++] !== 0x02) {\\n return false;\\n }\\n var slen = getLength(data, p);\\n if (data.length !== slen + p.place) {\\n return false;\\n }\\n var s = data.slice(p.place, slen + p.place);\\n if (r[0] === 0 && (r[1] & 0x80)) {\\n r = r.slice(1);\\n }\\n if (s[0] === 0 && (s[1] & 0x80)) {\\n s = s.slice(1);\\n }\\n\\n this.r = new BN(r);\\n this.s = new BN(s);\\n this.recoveryParam = null;\\n\\n return true;\\n};\\n\\nfunction constructLength(arr, len) {\\n if (len < 0x80) {\\n arr.push(len);\\n return;\\n }\\n var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);\\n arr.push(octets | 0x80);\\n while (--octets) {\\n arr.push((len >>> (octets << 3)) & 0xff);\\n }\\n arr.push(len);\\n}\\n\\nSignature.prototype.toDER = function toDER(enc) {\\n var r = this.r.toArray();\\n var s = this.s.toArray();\\n\\n // Pad values\\n if (r[0] & 0x80)\\n r = [ 0 ].concat(r);\\n // Pad values\\n if (s[0] & 0x80)\\n s = [ 0 ].concat(s);\\n\\n r = rmPadding(r);\\n s = rmPadding(s);\\n\\n while (!s[0] && !(s[1] & 0x80)) {\\n s = s.slice(1);\\n }\\n var arr = [ 0x02 ];\\n constructLength(arr, r.length);\\n arr = arr.concat(r);\\n arr.push(0x02);\\n constructLength(arr, s.length);\\n var backHalf = arr.concat(s);\\n var res = [ 0x30 ];\\n constructLength(res, backHalf.length);\\n res = res.concat(backHalf);\\n return utils.encode(res, enc);\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/elliptic/lib/elliptic/ec/signature.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/elliptic/lib/elliptic/eddsa/index.js\":\n/*!***********************************************************!*\\\n !*** ./node_modules/elliptic/lib/elliptic/eddsa/index.js ***!\n \\***********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar hash = __webpack_require__(/*! hash.js */ \\\"./node_modules/hash.js/lib/hash.js\\\");\\nvar elliptic = __webpack_require__(/*! ../../elliptic */ \\\"./node_modules/elliptic/lib/elliptic.js\\\");\\nvar utils = elliptic.utils;\\nvar assert = utils.assert;\\nvar parseBytes = utils.parseBytes;\\nvar KeyPair = __webpack_require__(/*! ./key */ \\\"./node_modules/elliptic/lib/elliptic/eddsa/key.js\\\");\\nvar Signature = __webpack_require__(/*! ./signature */ \\\"./node_modules/elliptic/lib/elliptic/eddsa/signature.js\\\");\\n\\nfunction EDDSA(curve) {\\n assert(curve === 'ed25519', 'only tested with ed25519 so far');\\n\\n if (!(this instanceof EDDSA))\\n return new EDDSA(curve);\\n\\n var curve = elliptic.curves[curve].curve;\\n this.curve = curve;\\n this.g = curve.g;\\n this.g.precompute(curve.n.bitLength() + 1);\\n\\n this.pointClass = curve.point().constructor;\\n this.encodingLength = Math.ceil(curve.n.bitLength() / 8);\\n this.hash = hash.sha512;\\n}\\n\\nmodule.exports = EDDSA;\\n\\n/**\\n* @param {Array|String} message - message bytes\\n* @param {Array|String|KeyPair} secret - secret bytes or a keypair\\n* @returns {Signature} - signature\\n*/\\nEDDSA.prototype.sign = function sign(message, secret) {\\n message = parseBytes(message);\\n var key = this.keyFromSecret(secret);\\n var r = this.hashInt(key.messagePrefix(), message);\\n var R = this.g.mul(r);\\n var Rencoded = this.encodePoint(R);\\n var s_ = this.hashInt(Rencoded, key.pubBytes(), message)\\n .mul(key.priv());\\n var S = r.add(s_).umod(this.curve.n);\\n return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });\\n};\\n\\n/**\\n* @param {Array} message - message bytes\\n* @param {Array|String|Signature} sig - sig bytes\\n* @param {Array|String|Point|KeyPair} pub - public key\\n* @returns {Boolean} - true if public key matches sig of message\\n*/\\nEDDSA.prototype.verify = function verify(message, sig, pub) {\\n message = parseBytes(message);\\n sig = this.makeSignature(sig);\\n var key = this.keyFromPublic(pub);\\n var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);\\n var SG = this.g.mul(sig.S());\\n var RplusAh = sig.R().add(key.pub().mul(h));\\n return RplusAh.eq(SG);\\n};\\n\\nEDDSA.prototype.hashInt = function hashInt() {\\n var hash = this.hash();\\n for (var i = 0; i < arguments.length; i++)\\n hash.update(arguments[i]);\\n return utils.intFromLE(hash.digest()).umod(this.curve.n);\\n};\\n\\nEDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {\\n return KeyPair.fromPublic(this, pub);\\n};\\n\\nEDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {\\n return KeyPair.fromSecret(this, secret);\\n};\\n\\nEDDSA.prototype.makeSignature = function makeSignature(sig) {\\n if (sig instanceof Signature)\\n return sig;\\n return new Signature(this, sig);\\n};\\n\\n/**\\n* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2\\n*\\n* EDDSA defines methods for encoding and decoding points and integers. These are\\n* helper convenience methods, that pass along to utility functions implied\\n* parameters.\\n*\\n*/\\nEDDSA.prototype.encodePoint = function encodePoint(point) {\\n var enc = point.getY().toArray('le', this.encodingLength);\\n enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;\\n return enc;\\n};\\n\\nEDDSA.prototype.decodePoint = function decodePoint(bytes) {\\n bytes = utils.parseBytes(bytes);\\n\\n var lastIx = bytes.length - 1;\\n var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);\\n var xIsOdd = (bytes[lastIx] & 0x80) !== 0;\\n\\n var y = utils.intFromLE(normed);\\n return this.curve.pointFromY(y, xIsOdd);\\n};\\n\\nEDDSA.prototype.encodeInt = function encodeInt(num) {\\n return num.toArray('le', this.encodingLength);\\n};\\n\\nEDDSA.prototype.decodeInt = function decodeInt(bytes) {\\n return utils.intFromLE(bytes);\\n};\\n\\nEDDSA.prototype.isPoint = function isPoint(val) {\\n return val instanceof this.pointClass;\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/elliptic/lib/elliptic/eddsa/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/elliptic/lib/elliptic/eddsa/key.js\":\n/*!*********************************************************!*\\\n !*** ./node_modules/elliptic/lib/elliptic/eddsa/key.js ***!\n \\*********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar elliptic = __webpack_require__(/*! ../../elliptic */ \\\"./node_modules/elliptic/lib/elliptic.js\\\");\\nvar utils = elliptic.utils;\\nvar assert = utils.assert;\\nvar parseBytes = utils.parseBytes;\\nvar cachedProperty = utils.cachedProperty;\\n\\n/**\\n* @param {EDDSA} eddsa - instance\\n* @param {Object} params - public/private key parameters\\n*\\n* @param {Array<Byte>} [params.secret] - secret seed bytes\\n* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)\\n* @param {Array<Byte>} [params.pub] - public key point encoded as bytes\\n*\\n*/\\nfunction KeyPair(eddsa, params) {\\n this.eddsa = eddsa;\\n this._secret = parseBytes(params.secret);\\n if (eddsa.isPoint(params.pub))\\n this._pub = params.pub;\\n else\\n this._pubBytes = parseBytes(params.pub);\\n}\\n\\nKeyPair.fromPublic = function fromPublic(eddsa, pub) {\\n if (pub instanceof KeyPair)\\n return pub;\\n return new KeyPair(eddsa, { pub: pub });\\n};\\n\\nKeyPair.fromSecret = function fromSecret(eddsa, secret) {\\n if (secret instanceof KeyPair)\\n return secret;\\n return new KeyPair(eddsa, { secret: secret });\\n};\\n\\nKeyPair.prototype.secret = function secret() {\\n return this._secret;\\n};\\n\\ncachedProperty(KeyPair, 'pubBytes', function pubBytes() {\\n return this.eddsa.encodePoint(this.pub());\\n});\\n\\ncachedProperty(KeyPair, 'pub', function pub() {\\n if (this._pubBytes)\\n return this.eddsa.decodePoint(this._pubBytes);\\n return this.eddsa.g.mul(this.priv());\\n});\\n\\ncachedProperty(KeyPair, 'privBytes', function privBytes() {\\n var eddsa = this.eddsa;\\n var hash = this.hash();\\n var lastIx = eddsa.encodingLength - 1;\\n\\n var a = hash.slice(0, eddsa.encodingLength);\\n a[0] &= 248;\\n a[lastIx] &= 127;\\n a[lastIx] |= 64;\\n\\n return a;\\n});\\n\\ncachedProperty(KeyPair, 'priv', function priv() {\\n return this.eddsa.decodeInt(this.privBytes());\\n});\\n\\ncachedProperty(KeyPair, 'hash', function hash() {\\n return this.eddsa.hash().update(this.secret()).digest();\\n});\\n\\ncachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {\\n return this.hash().slice(this.eddsa.encodingLength);\\n});\\n\\nKeyPair.prototype.sign = function sign(message) {\\n assert(this._secret, 'KeyPair can only verify');\\n return this.eddsa.sign(message, this);\\n};\\n\\nKeyPair.prototype.verify = function verify(message, sig) {\\n return this.eddsa.verify(message, sig, this);\\n};\\n\\nKeyPair.prototype.getSecret = function getSecret(enc) {\\n assert(this._secret, 'KeyPair is public only');\\n return utils.encode(this.secret(), enc);\\n};\\n\\nKeyPair.prototype.getPublic = function getPublic(enc) {\\n return utils.encode(this.pubBytes(), enc);\\n};\\n\\nmodule.exports = KeyPair;\\n\\n\\n//# sourceURL=webpack:///./node_modules/elliptic/lib/elliptic/eddsa/key.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/elliptic/lib/elliptic/eddsa/signature.js\":\n/*!***************************************************************!*\\\n !*** ./node_modules/elliptic/lib/elliptic/eddsa/signature.js ***!\n \\***************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar BN = __webpack_require__(/*! bn.js */ \\\"./node_modules/bn.js/lib/bn.js\\\");\\nvar elliptic = __webpack_require__(/*! ../../elliptic */ \\\"./node_modules/elliptic/lib/elliptic.js\\\");\\nvar utils = elliptic.utils;\\nvar assert = utils.assert;\\nvar cachedProperty = utils.cachedProperty;\\nvar parseBytes = utils.parseBytes;\\n\\n/**\\n* @param {EDDSA} eddsa - eddsa instance\\n* @param {Array<Bytes>|Object} sig -\\n* @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes\\n* @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes\\n* @param {Array<Bytes>} [sig.Rencoded] - R point encoded\\n* @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded\\n*/\\nfunction Signature(eddsa, sig) {\\n this.eddsa = eddsa;\\n\\n if (typeof sig !== 'object')\\n sig = parseBytes(sig);\\n\\n if (Array.isArray(sig)) {\\n sig = {\\n R: sig.slice(0, eddsa.encodingLength),\\n S: sig.slice(eddsa.encodingLength)\\n };\\n }\\n\\n assert(sig.R && sig.S, 'Signature without R or S');\\n\\n if (eddsa.isPoint(sig.R))\\n this._R = sig.R;\\n if (sig.S instanceof BN)\\n this._S = sig.S;\\n\\n this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;\\n this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;\\n}\\n\\ncachedProperty(Signature, 'S', function S() {\\n return this.eddsa.decodeInt(this.Sencoded());\\n});\\n\\ncachedProperty(Signature, 'R', function R() {\\n return this.eddsa.decodePoint(this.Rencoded());\\n});\\n\\ncachedProperty(Signature, 'Rencoded', function Rencoded() {\\n return this.eddsa.encodePoint(this.R());\\n});\\n\\ncachedProperty(Signature, 'Sencoded', function Sencoded() {\\n return this.eddsa.encodeInt(this.S());\\n});\\n\\nSignature.prototype.toBytes = function toBytes() {\\n return this.Rencoded().concat(this.Sencoded());\\n};\\n\\nSignature.prototype.toHex = function toHex() {\\n return utils.encode(this.toBytes(), 'hex').toUpperCase();\\n};\\n\\nmodule.exports = Signature;\\n\\n\\n//# sourceURL=webpack:///./node_modules/elliptic/lib/elliptic/eddsa/signature.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js\":\n/*!*********************************************************************!*\\\n !*** ./node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js ***!\n \\*********************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"module.exports = {\\n doubles: {\\n step: 4,\\n points: [\\n [\\n 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',\\n 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'\\n ],\\n [\\n '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',\\n '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'\\n ],\\n [\\n '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',\\n 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'\\n ],\\n [\\n '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',\\n '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'\\n ],\\n [\\n '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',\\n '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'\\n ],\\n [\\n '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',\\n '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'\\n ],\\n [\\n 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',\\n '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'\\n ],\\n [\\n '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',\\n 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'\\n ],\\n [\\n 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',\\n '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'\\n ],\\n [\\n 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',\\n 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'\\n ],\\n [\\n 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',\\n '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'\\n ],\\n [\\n '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',\\n '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'\\n ],\\n [\\n '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',\\n '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'\\n ],\\n [\\n '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',\\n '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'\\n ],\\n [\\n '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',\\n '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'\\n ],\\n [\\n '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',\\n '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'\\n ],\\n [\\n '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',\\n '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'\\n ],\\n [\\n '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',\\n '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'\\n ],\\n [\\n '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',\\n 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'\\n ],\\n [\\n 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',\\n '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'\\n ],\\n [\\n 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',\\n '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'\\n ],\\n [\\n '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',\\n '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'\\n ],\\n [\\n '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',\\n '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'\\n ],\\n [\\n 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',\\n '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'\\n ],\\n [\\n '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',\\n 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'\\n ],\\n [\\n 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',\\n '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'\\n ],\\n [\\n 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',\\n 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'\\n ],\\n [\\n 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',\\n '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'\\n ],\\n [\\n 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',\\n 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'\\n ],\\n [\\n 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',\\n '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'\\n ],\\n [\\n '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',\\n 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'\\n ],\\n [\\n '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',\\n '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'\\n ],\\n [\\n 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',\\n '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'\\n ],\\n [\\n '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',\\n 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'\\n ],\\n [\\n 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',\\n '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'\\n ],\\n [\\n 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',\\n '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'\\n ],\\n [\\n 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',\\n 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'\\n ],\\n [\\n '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',\\n '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'\\n ],\\n [\\n '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',\\n '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'\\n ],\\n [\\n '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',\\n 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'\\n ],\\n [\\n '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',\\n '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'\\n ],\\n [\\n 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',\\n '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'\\n ],\\n [\\n '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',\\n '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'\\n ],\\n [\\n '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',\\n 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'\\n ],\\n [\\n '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',\\n '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'\\n ],\\n [\\n 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',\\n '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'\\n ],\\n [\\n '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',\\n 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'\\n ],\\n [\\n 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',\\n 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'\\n ],\\n [\\n 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',\\n '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'\\n ],\\n [\\n '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',\\n 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'\\n ],\\n [\\n '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',\\n 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'\\n ],\\n [\\n 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',\\n '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'\\n ],\\n [\\n 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',\\n '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'\\n ],\\n [\\n 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',\\n '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'\\n ],\\n [\\n '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',\\n 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'\\n ],\\n [\\n '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',\\n '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'\\n ],\\n [\\n 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',\\n 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'\\n ],\\n [\\n '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',\\n 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'\\n ],\\n [\\n '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',\\n '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'\\n ],\\n [\\n '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',\\n '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'\\n ],\\n [\\n 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',\\n 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'\\n ],\\n [\\n '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',\\n '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'\\n ],\\n [\\n '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',\\n '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'\\n ],\\n [\\n 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',\\n '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'\\n ],\\n [\\n 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',\\n 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'\\n ]\\n ]\\n },\\n naf: {\\n wnd: 7,\\n points: [\\n [\\n 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',\\n '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'\\n ],\\n [\\n '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',\\n 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'\\n ],\\n [\\n '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',\\n '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'\\n ],\\n [\\n 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',\\n 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'\\n ],\\n [\\n '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',\\n 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'\\n ],\\n [\\n 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',\\n 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'\\n ],\\n [\\n 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',\\n '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'\\n ],\\n [\\n 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',\\n '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'\\n ],\\n [\\n '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',\\n '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'\\n ],\\n [\\n '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',\\n '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'\\n ],\\n [\\n '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',\\n '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'\\n ],\\n [\\n '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',\\n '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'\\n ],\\n [\\n 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',\\n 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'\\n ],\\n [\\n 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',\\n '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'\\n ],\\n [\\n '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',\\n 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'\\n ],\\n [\\n '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',\\n 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'\\n ],\\n [\\n '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',\\n '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'\\n ],\\n [\\n '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',\\n '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'\\n ],\\n [\\n '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',\\n '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'\\n ],\\n [\\n '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',\\n 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'\\n ],\\n [\\n 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',\\n 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'\\n ],\\n [\\n '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',\\n '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'\\n ],\\n [\\n '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',\\n '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'\\n ],\\n [\\n 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',\\n 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'\\n ],\\n [\\n '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',\\n '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'\\n ],\\n [\\n 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',\\n 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'\\n ],\\n [\\n 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',\\n 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'\\n ],\\n [\\n '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',\\n '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'\\n ],\\n [\\n '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',\\n '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'\\n ],\\n [\\n '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',\\n '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'\\n ],\\n [\\n 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',\\n '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'\\n ],\\n [\\n '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',\\n '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'\\n ],\\n [\\n 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',\\n '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'\\n ],\\n [\\n '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',\\n 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'\\n ],\\n [\\n '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',\\n 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'\\n ],\\n [\\n 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',\\n 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'\\n ],\\n [\\n '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',\\n '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'\\n ],\\n [\\n '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',\\n 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'\\n ],\\n [\\n 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',\\n 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'\\n ],\\n [\\n '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',\\n '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'\\n ],\\n [\\n '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',\\n 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'\\n ],\\n [\\n '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',\\n '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'\\n ],\\n [\\n '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',\\n 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'\\n ],\\n [\\n 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',\\n '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'\\n ],\\n [\\n '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',\\n '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'\\n ],\\n [\\n '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',\\n 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'\\n ],\\n [\\n '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',\\n 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'\\n ],\\n [\\n 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',\\n 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'\\n ],\\n [\\n 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',\\n 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'\\n ],\\n [\\n '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',\\n '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'\\n ],\\n [\\n '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',\\n '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'\\n ],\\n [\\n 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',\\n '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'\\n ],\\n [\\n 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',\\n 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'\\n ],\\n [\\n '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',\\n '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'\\n ],\\n [\\n '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',\\n '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'\\n ],\\n [\\n 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',\\n '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'\\n ],\\n [\\n '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',\\n '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'\\n ],\\n [\\n 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',\\n 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'\\n ],\\n [\\n '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',\\n 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'\\n ],\\n [\\n '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',\\n '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'\\n ],\\n [\\n 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',\\n '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'\\n ],\\n [\\n 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',\\n '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'\\n ],\\n [\\n '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',\\n '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'\\n ],\\n [\\n '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',\\n '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'\\n ],\\n [\\n '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',\\n 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'\\n ],\\n [\\n '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',\\n 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'\\n ],\\n [\\n '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',\\n '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'\\n ],\\n [\\n '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',\\n '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'\\n ],\\n [\\n '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',\\n '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'\\n ],\\n [\\n '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',\\n 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'\\n ],\\n [\\n 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',\\n 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'\\n ],\\n [\\n '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',\\n 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'\\n ],\\n [\\n 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',\\n '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'\\n ],\\n [\\n 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',\\n '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'\\n ],\\n [\\n 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',\\n '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'\\n ],\\n [\\n 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',\\n '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'\\n ],\\n [\\n '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',\\n 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'\\n ],\\n [\\n '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',\\n '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'\\n ],\\n [\\n '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',\\n 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'\\n ],\\n [\\n 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',\\n 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'\\n ],\\n [\\n 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',\\n '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'\\n ],\\n [\\n 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',\\n 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'\\n ],\\n [\\n 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',\\n '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'\\n ],\\n [\\n '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',\\n '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'\\n ],\\n [\\n 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',\\n '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'\\n ],\\n [\\n 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',\\n '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'\\n ],\\n [\\n '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',\\n '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'\\n ],\\n [\\n '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',\\n 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'\\n ],\\n [\\n 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',\\n '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'\\n ],\\n [\\n 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',\\n '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'\\n ],\\n [\\n 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',\\n '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'\\n ],\\n [\\n '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',\\n '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'\\n ],\\n [\\n 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',\\n 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'\\n ],\\n [\\n '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',\\n 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'\\n ],\\n [\\n 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',\\n 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'\\n ],\\n [\\n 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',\\n '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'\\n ],\\n [\\n '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',\\n 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'\\n ],\\n [\\n 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',\\n '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'\\n ],\\n [\\n 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',\\n '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'\\n ],\\n [\\n 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',\\n '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'\\n ],\\n [\\n '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',\\n 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'\\n ],\\n [\\n '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',\\n 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'\\n ],\\n [\\n 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',\\n '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'\\n ],\\n [\\n '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',\\n 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'\\n ],\\n [\\n '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',\\n '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'\\n ],\\n [\\n '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',\\n 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'\\n ],\\n [\\n 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',\\n 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'\\n ],\\n [\\n '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',\\n 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'\\n ],\\n [\\n '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',\\n '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'\\n ],\\n [\\n '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',\\n 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'\\n ],\\n [\\n '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',\\n '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'\\n ],\\n [\\n 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',\\n 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'\\n ],\\n [\\n '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',\\n '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'\\n ],\\n [\\n 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',\\n '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'\\n ],\\n [\\n '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',\\n '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'\\n ],\\n [\\n 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',\\n 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'\\n ],\\n [\\n 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',\\n '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'\\n ],\\n [\\n 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',\\n 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'\\n ],\\n [\\n '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',\\n 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'\\n ],\\n [\\n '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',\\n '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'\\n ],\\n [\\n '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',\\n 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'\\n ],\\n [\\n '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',\\n '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'\\n ],\\n [\\n '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',\\n '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'\\n ],\\n [\\n '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',\\n 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'\\n ],\\n [\\n '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',\\n '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'\\n ],\\n [\\n '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',\\n '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'\\n ],\\n [\\n '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',\\n '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'\\n ]\\n ]\\n }\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/elliptic/lib/elliptic/utils.js\":\n/*!*****************************************************!*\\\n !*** ./node_modules/elliptic/lib/elliptic/utils.js ***!\n \\*****************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar utils = exports;\\nvar BN = __webpack_require__(/*! bn.js */ \\\"./node_modules/bn.js/lib/bn.js\\\");\\nvar minAssert = __webpack_require__(/*! minimalistic-assert */ \\\"./node_modules/minimalistic-assert/index.js\\\");\\nvar minUtils = __webpack_require__(/*! minimalistic-crypto-utils */ \\\"./node_modules/minimalistic-crypto-utils/lib/utils.js\\\");\\n\\nutils.assert = minAssert;\\nutils.toArray = minUtils.toArray;\\nutils.zero2 = minUtils.zero2;\\nutils.toHex = minUtils.toHex;\\nutils.encode = minUtils.encode;\\n\\n// Represent num in a w-NAF form\\nfunction getNAF(num, w) {\\n var naf = [];\\n var ws = 1 << (w + 1);\\n var k = num.clone();\\n while (k.cmpn(1) >= 0) {\\n var z;\\n if (k.isOdd()) {\\n var mod = k.andln(ws - 1);\\n if (mod > (ws >> 1) - 1)\\n z = (ws >> 1) - mod;\\n else\\n z = mod;\\n k.isubn(z);\\n } else {\\n z = 0;\\n }\\n naf.push(z);\\n\\n // Optimization, shift by word if possible\\n var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;\\n for (var i = 1; i < shift; i++)\\n naf.push(0);\\n k.iushrn(shift);\\n }\\n\\n return naf;\\n}\\nutils.getNAF = getNAF;\\n\\n// Represent k1, k2 in a Joint Sparse Form\\nfunction getJSF(k1, k2) {\\n var jsf = [\\n [],\\n []\\n ];\\n\\n k1 = k1.clone();\\n k2 = k2.clone();\\n var d1 = 0;\\n var d2 = 0;\\n while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {\\n\\n // First phase\\n var m14 = (k1.andln(3) + d1) & 3;\\n var m24 = (k2.andln(3) + d2) & 3;\\n if (m14 === 3)\\n m14 = -1;\\n if (m24 === 3)\\n m24 = -1;\\n var u1;\\n if ((m14 & 1) === 0) {\\n u1 = 0;\\n } else {\\n var m8 = (k1.andln(7) + d1) & 7;\\n if ((m8 === 3 || m8 === 5) && m24 === 2)\\n u1 = -m14;\\n else\\n u1 = m14;\\n }\\n jsf[0].push(u1);\\n\\n var u2;\\n if ((m24 & 1) === 0) {\\n u2 = 0;\\n } else {\\n var m8 = (k2.andln(7) + d2) & 7;\\n if ((m8 === 3 || m8 === 5) && m14 === 2)\\n u2 = -m24;\\n else\\n u2 = m24;\\n }\\n jsf[1].push(u2);\\n\\n // Second phase\\n if (2 * d1 === u1 + 1)\\n d1 = 1 - d1;\\n if (2 * d2 === u2 + 1)\\n d2 = 1 - d2;\\n k1.iushrn(1);\\n k2.iushrn(1);\\n }\\n\\n return jsf;\\n}\\nutils.getJSF = getJSF;\\n\\nfunction cachedProperty(obj, name, computer) {\\n var key = '_' + name;\\n obj.prototype[name] = function cachedProperty() {\\n return this[key] !== undefined ? this[key] :\\n this[key] = computer.call(this);\\n };\\n}\\nutils.cachedProperty = cachedProperty;\\n\\nfunction parseBytes(bytes) {\\n return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :\\n bytes;\\n}\\nutils.parseBytes = parseBytes;\\n\\nfunction intFromLE(bytes) {\\n return new BN(bytes, 'hex', 'le');\\n}\\nutils.intFromLE = intFromLE;\\n\\n\\n\\n//# sourceURL=webpack:///./node_modules/elliptic/lib/elliptic/utils.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/elliptic/package.json\":\n/*!********************************************!*\\\n !*** ./node_modules/elliptic/package.json ***!\n \\********************************************/\n/*! exports provided: _args, _from, _id, _inBundle, _integrity, _location, _phantomChildren, _requested, _requiredBy, _resolved, _spec, _where, author, bugs, dependencies, description, devDependencies, files, homepage, keywords, license, main, name, repository, scripts, version, default */\n/***/ (function(module) {\n\neval(\"module.exports = {\\\"_args\\\":[[\\\"elliptic@6.4.1\\\",\\\"/Users/kenzo/profile-hover\\\"]],\\\"_from\\\":\\\"elliptic@6.4.1\\\",\\\"_id\\\":\\\"elliptic@6.4.1\\\",\\\"_inBundle\\\":false,\\\"_integrity\\\":\\\"sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==\\\",\\\"_location\\\":\\\"/elliptic\\\",\\\"_phantomChildren\\\":{},\\\"_requested\\\":{\\\"type\\\":\\\"version\\\",\\\"registry\\\":true,\\\"raw\\\":\\\"elliptic@6.4.1\\\",\\\"name\\\":\\\"elliptic\\\",\\\"escapedName\\\":\\\"elliptic\\\",\\\"rawSpec\\\":\\\"6.4.1\\\",\\\"saveSpec\\\":null,\\\"fetchSpec\\\":\\\"6.4.1\\\"},\\\"_requiredBy\\\":[\\\"/3box-orbitdb-plugins/did-jwt\\\",\\\"/3id-resolver/did-jwt\\\",\\\"/browserify-sign\\\",\\\"/create-ecdh\\\",\\\"/did-jwt\\\",\\\"/orbit-db-keystore\\\",\\\"/secp256k1\\\"],\\\"_resolved\\\":\\\"https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz\\\",\\\"_spec\\\":\\\"6.4.1\\\",\\\"_where\\\":\\\"/Users/kenzo/profile-hover\\\",\\\"author\\\":{\\\"name\\\":\\\"Fedor Indutny\\\",\\\"email\\\":\\\"fedor@indutny.com\\\"},\\\"bugs\\\":{\\\"url\\\":\\\"https://github.com/indutny/elliptic/issues\\\"},\\\"dependencies\\\":{\\\"bn.js\\\":\\\"^4.4.0\\\",\\\"brorand\\\":\\\"^1.0.1\\\",\\\"hash.js\\\":\\\"^1.0.0\\\",\\\"hmac-drbg\\\":\\\"^1.0.0\\\",\\\"inherits\\\":\\\"^2.0.1\\\",\\\"minimalistic-assert\\\":\\\"^1.0.0\\\",\\\"minimalistic-crypto-utils\\\":\\\"^1.0.0\\\"},\\\"description\\\":\\\"EC cryptography\\\",\\\"devDependencies\\\":{\\\"brfs\\\":\\\"^1.4.3\\\",\\\"coveralls\\\":\\\"^2.11.3\\\",\\\"grunt\\\":\\\"^0.4.5\\\",\\\"grunt-browserify\\\":\\\"^5.0.0\\\",\\\"grunt-cli\\\":\\\"^1.2.0\\\",\\\"grunt-contrib-connect\\\":\\\"^1.0.0\\\",\\\"grunt-contrib-copy\\\":\\\"^1.0.0\\\",\\\"grunt-contrib-uglify\\\":\\\"^1.0.1\\\",\\\"grunt-mocha-istanbul\\\":\\\"^3.0.1\\\",\\\"grunt-saucelabs\\\":\\\"^8.6.2\\\",\\\"istanbul\\\":\\\"^0.4.2\\\",\\\"jscs\\\":\\\"^2.9.0\\\",\\\"jshint\\\":\\\"^2.6.0\\\",\\\"mocha\\\":\\\"^2.1.0\\\"},\\\"files\\\":[\\\"lib\\\"],\\\"homepage\\\":\\\"https://github.com/indutny/elliptic\\\",\\\"keywords\\\":[\\\"EC\\\",\\\"Elliptic\\\",\\\"curve\\\",\\\"Cryptography\\\"],\\\"license\\\":\\\"MIT\\\",\\\"main\\\":\\\"lib/elliptic.js\\\",\\\"name\\\":\\\"elliptic\\\",\\\"repository\\\":{\\\"type\\\":\\\"git\\\",\\\"url\\\":\\\"git+ssh://git@github.com/indutny/elliptic.git\\\"},\\\"scripts\\\":{\\\"jscs\\\":\\\"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js\\\",\\\"jshint\\\":\\\"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js\\\",\\\"lint\\\":\\\"npm run jscs && npm run jshint\\\",\\\"test\\\":\\\"npm run lint && npm run unit\\\",\\\"unit\\\":\\\"istanbul test _mocha --reporter=spec test/index.js\\\",\\\"version\\\":\\\"grunt dist && git add dist/\\\"},\\\"version\\\":\\\"6.4.1\\\"};\\n\\n//# sourceURL=webpack:///./node_modules/elliptic/package.json?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ethereum-blockies-base64/dist/main.js\":\n/*!************************************************************!*\\\n !*** ./node_modules/ethereum-blockies-base64/dist/main.js ***!\n \\************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"(function webpackUniversalModuleDefinition(root, factory) {\\n\\tif(true)\\n\\t\\tmodule.exports = factory();\\n\\telse {}\\n})(this, function() {\\nreturn /******/ (function(modules) { // webpackBootstrap\\n/******/ \\t// The module cache\\n/******/ \\tvar installedModules = {};\\n\\n/******/ \\t// The require function\\n/******/ \\tfunction __webpack_require__(moduleId) {\\n\\n/******/ \\t\\t// Check if module is in cache\\n/******/ \\t\\tif(installedModules[moduleId])\\n/******/ \\t\\t\\treturn installedModules[moduleId].exports;\\n\\n/******/ \\t\\t// Create a new module (and put it into the cache)\\n/******/ \\t\\tvar module = installedModules[moduleId] = {\\n/******/ \\t\\t\\texports: {},\\n/******/ \\t\\t\\tid: moduleId,\\n/******/ \\t\\t\\tloaded: false\\n/******/ \\t\\t};\\n\\n/******/ \\t\\t// Execute the module function\\n/******/ \\t\\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\\n\\n/******/ \\t\\t// Flag the module as loaded\\n/******/ \\t\\tmodule.loaded = true;\\n\\n/******/ \\t\\t// Return the exports of the module\\n/******/ \\t\\treturn module.exports;\\n/******/ \\t}\\n\\n\\n/******/ \\t// expose the modules object (__webpack_modules__)\\n/******/ \\t__webpack_require__.m = modules;\\n\\n/******/ \\t// expose the module cache\\n/******/ \\t__webpack_require__.c = installedModules;\\n\\n/******/ \\t// __webpack_public_path__\\n/******/ \\t__webpack_require__.p = \\\"\\\";\\n\\n/******/ \\t// Load entry module and return exports\\n/******/ \\treturn __webpack_require__(0);\\n/******/ })\\n/************************************************************************/\\n/******/ ([\\n/* 0 */\\n/***/ function(module, exports, __webpack_require__) {\\n\\n\\tconst pnglib = __webpack_require__(1);\\n\\tconst hsl2rgb = __webpack_require__(2);\\n\\n\\t// The random number is a js implementation of the Xorshift PRNG\\n\\tconst randseed = new Array(4); // Xorshift: [x, y, z, w] 32 bit values\\n\\n\\tfunction seedrand(seed) {\\n\\t for (let i = 0; i < randseed.length; i++) {\\n\\t randseed[i] = 0;\\n\\t }\\n\\t for (let i = 0; i < seed.length; i++) {\\n\\t randseed[i % 4] = (randseed[i % 4] << 5) - randseed[i % 4] + seed.charCodeAt(i);\\n\\t }\\n\\t}\\n\\n\\tfunction rand() {\\n\\t // based on Java's String.hashCode(), expanded to 4 32bit values\\n\\t const t = randseed[0] ^ (randseed[0] << 11);\\n\\n\\t randseed[0] = randseed[1];\\n\\t randseed[1] = randseed[2];\\n\\t randseed[2] = randseed[3];\\n\\t randseed[3] = randseed[3] ^ (randseed[3] >> 19) ^ t ^ (t >> 8);\\n\\n\\t return (randseed[3] >>> 0) / (1 << 31 >>> 0);\\n\\t}\\n\\n\\tfunction createColor() {\\n\\t //saturation is the whole color spectrum\\n\\t const h = Math.floor(rand() * 360);\\n\\t //saturation goes from 40 to 100, it avoids greyish colors\\n\\t const s = rand() * 60 + 40;\\n\\t //lightness can be anything from 0 to 100, but probabilities are a bell curve around 50%\\n\\t const l = (rand() + rand() + rand() + rand()) * 25 ;\\n\\n\\t return [h / 360, s / 100, l / 100];\\n\\t}\\n\\n\\tfunction createImageData(size) {\\n\\t const width = size; // Only support square icons for now\\n\\t const height = size;\\n\\n\\t const dataWidth = Math.ceil(width / 2);\\n\\t const mirrorWidth = width - dataWidth;\\n\\n\\t const data = [];\\n\\t for (let y = 0; y < height; y++) {\\n\\t let row = [];\\n\\t for (let x = 0; x < dataWidth; x++) {\\n\\t // this makes foreground and background color to have a 43% (1/2.3) probability\\n\\t // spot color has 13% chance\\n\\t row[x] = Math.floor(rand() * 2.3);\\n\\t }\\n\\t const r = row.slice(0, mirrorWidth).reverse();\\n\\t row = row.concat(r);\\n\\n\\t for (let i = 0; i < row.length; i++) {\\n\\t data.push(row[i]);\\n\\t }\\n\\t }\\n\\n\\t return data;\\n\\t}\\n\\n\\t// Modifies the passed PNG to fill in a specified rectangle\\n\\tfunction fillRect(png, x, y, w, h, color) {\\n\\t for(let i = 0; i < w; i++) {\\n\\t for (let j = 0; j < h; j++) {\\n\\t png.buffer[png.index(x + i, y + j)] = color;\\n\\t }\\n\\t }\\n\\t}\\n\\n\\tfunction buildOpts(opts) {\\n\\t if (!opts.seed) {\\n\\t throw new Error('No seed provided');\\n\\t }\\n\\n\\t seedrand(opts.seed);\\n\\n\\t return Object.assign({\\n\\t size: 8,\\n\\t scale: 16,\\n\\t color: createColor(),\\n\\t bgcolor: createColor(),\\n\\t spotcolor: createColor(),\\n\\t }, opts)\\n\\t}\\n\\n\\tfunction makeBlockie(address) {\\n\\t const opts = buildOpts({ seed: address.toLowerCase() });\\n\\n\\t const imageData = createImageData(opts.size);\\n\\t const width = Math.sqrt(imageData.length);\\n\\n\\t const p = new pnglib(opts.size * opts.scale, opts.size * opts.scale, 3);\\n\\t const bgcolor = p.color(...hsl2rgb(...opts.bgcolor));\\n\\t const color = p.color(...hsl2rgb(...opts.color));\\n\\t const spotcolor = p.color(...hsl2rgb(...opts.spotcolor));\\n\\n\\t for (let i = 0; i < imageData.length; i++) {\\n\\t const row = Math.floor(i / width);\\n\\t const col = i % width;\\n\\t // if data is 0, leave the background\\n\\t if (imageData[i]) {\\n\\t // if data is 2, choose spot color, if 1 choose foreground\\n\\t const pngColor = imageData[i] == 1 ? color : spotcolor;\\n\\t fillRect(p, col * opts.scale, row * opts.scale, opts.scale, opts.scale, pngColor);\\n\\t }\\n\\t }\\n\\t return `data:image/png;base64,${p.getBase64()}`;\\n\\t}\\n\\n\\tmodule.exports = makeBlockie;\\n\\n\\n/***/ },\\n/* 1 */\\n/***/ function(module, exports) {\\n\\n\\t/**\\n\\t * A handy class to calculate color values.\\n\\t *\\n\\t * @version 1.0\\n\\t * @author Robert Eisele <robert@xarg.org>\\n\\t * @copyright Copyright (c) 2010, Robert Eisele\\n\\t * @link http://www.xarg.org/2010/03/generate-client-side-png-files-using-javascript/\\n\\t * @license http://www.opensource.org/licenses/bsd-license.php BSD License\\n\\t *\\n\\t */\\n\\n\\t// Modified by George Chan <gchan@21cn.com>\\n\\n\\t// Further modified by Will O'B <@wbobeirne> to make it\\n\\t// UglifyJS and \\\"use strict\\\"; friendly\\n\\n\\tmodule.exports = function(width,height,depth) {\\n\\n\\n\\t // helper functions for that ctx\\n\\t function write(buffer, offs) {\\n\\t for (var i = 2; i < arguments.length; i++) {\\n\\t for (var j = 0; j < arguments[i].length; j++) {\\n\\t buffer[offs++] = arguments[i].charAt(j);\\n\\t }\\n\\t }\\n\\t }\\n\\n\\t function byte2(w) {\\n\\t return String.fromCharCode((w >> 8) & 255, w & 255);\\n\\t }\\n\\n\\t function byte4(w) {\\n\\t return String.fromCharCode((w >> 24) & 255, (w >> 16) & 255, (w >> 8) & 255, w & 255);\\n\\t }\\n\\n\\t function byte2lsb(w) {\\n\\t return String.fromCharCode(w & 255, (w >> 8) & 255);\\n\\t }\\n\\n\\t this.width = width;\\n\\t this.height = height;\\n\\t this.depth = depth;\\n\\n\\t // pixel data and row filter identifier size\\n\\t this.pix_size = height * (width + 1);\\n\\n\\t // deflate header, pix_size, block headers, adler32 checksum\\n\\t this.data_size = 2 + this.pix_size + 5 * Math.floor((0xfffe + this.pix_size) / 0xffff) + 4;\\n\\n\\t // offsets and sizes of Png chunks\\n\\t this.ihdr_offs = 0; // IHDR offset and size\\n\\t this.ihdr_size = 4 + 4 + 13 + 4;\\n\\t this.plte_offs = this.ihdr_offs + this.ihdr_size; // PLTE offset and size\\n\\t this.plte_size = 4 + 4 + 3 * depth + 4;\\n\\t this.trns_offs = this.plte_offs + this.plte_size; // tRNS offset and size\\n\\t this.trns_size = 4 + 4 + depth + 4;\\n\\t this.idat_offs = this.trns_offs + this.trns_size; // IDAT offset and size\\n\\t this.idat_size = 4 + 4 + this.data_size + 4;\\n\\t this.iend_offs = this.idat_offs + this.idat_size; // IEND offset and size\\n\\t this.iend_size = 4 + 4 + 4;\\n\\t this.buffer_size = this.iend_offs + this.iend_size; // total PNG size\\n\\n\\t this.buffer = new Array();\\n\\t this.palette = new Object();\\n\\t this.pindex = 0;\\n\\n\\t var _crc32 = new Array();\\n\\n\\t // initialize buffer with zero bytes\\n\\t for (var i = 0; i < this.buffer_size; i++) {\\n\\t this.buffer[i] = \\\"\\\\x00\\\";\\n\\t }\\n\\n\\t // initialize non-zero elements\\n\\t write(this.buffer, this.ihdr_offs, byte4(this.ihdr_size - 12), 'IHDR', byte4(width), byte4(height), \\\"\\\\x08\\\\x03\\\");\\n\\t write(this.buffer, this.plte_offs, byte4(this.plte_size - 12), 'PLTE');\\n\\t write(this.buffer, this.trns_offs, byte4(this.trns_size - 12), 'tRNS');\\n\\t write(this.buffer, this.idat_offs, byte4(this.idat_size - 12), 'IDAT');\\n\\t write(this.buffer, this.iend_offs, byte4(this.iend_size - 12), 'IEND');\\n\\n\\t // initialize deflate header\\n\\t var header = ((8 + (7 << 4)) << 8) | (3 << 6);\\n\\t header+= 31 - (header % 31);\\n\\n\\t write(this.buffer, this.idat_offs + 8, byte2(header));\\n\\n\\t // initialize deflate block headers\\n\\t for (var i = 0; (i << 16) - 1 < this.pix_size; i++) {\\n\\t var size, bits;\\n\\t if (i + 0xffff < this.pix_size) {\\n\\t size = 0xffff;\\n\\t bits = \\\"\\\\x00\\\";\\n\\t } else {\\n\\t size = this.pix_size - (i << 16) - i;\\n\\t bits = \\\"\\\\x01\\\";\\n\\t }\\n\\t write(this.buffer, this.idat_offs + 8 + 2 + (i << 16) + (i << 2), bits, byte2lsb(size), byte2lsb(~size));\\n\\t }\\n\\n\\t /* Create crc32 lookup table */\\n\\t for (var i = 0; i < 256; i++) {\\n\\t var c = i;\\n\\t for (var j = 0; j < 8; j++) {\\n\\t if (c & 1) {\\n\\t c = -306674912 ^ ((c >> 1) & 0x7fffffff);\\n\\t } else {\\n\\t c = (c >> 1) & 0x7fffffff;\\n\\t }\\n\\t }\\n\\t _crc32[i] = c;\\n\\t }\\n\\n\\t // compute the index into a png for a given pixel\\n\\t this.index = function(x,y) {\\n\\t var i = y * (this.width + 1) + x + 1;\\n\\t var j = this.idat_offs + 8 + 2 + 5 * Math.floor((i / 0xffff) + 1) + i;\\n\\t return j;\\n\\t }\\n\\n\\t // convert a color and build up the palette\\n\\t this.color = function(red, green, blue, alpha) {\\n\\n\\t alpha = alpha >= 0 ? alpha : 255;\\n\\t var color = (((((alpha << 8) | red) << 8) | green) << 8) | blue;\\n\\n\\t if (typeof this.palette[color] == \\\"undefined\\\") {\\n\\t if (this.pindex == this.depth) return \\\"\\\\x00\\\";\\n\\n\\t var ndx = this.plte_offs + 8 + 3 * this.pindex;\\n\\n\\t this.buffer[ndx + 0] = String.fromCharCode(red);\\n\\t this.buffer[ndx + 1] = String.fromCharCode(green);\\n\\t this.buffer[ndx + 2] = String.fromCharCode(blue);\\n\\t this.buffer[this.trns_offs+8+this.pindex] = String.fromCharCode(alpha);\\n\\n\\t this.palette[color] = String.fromCharCode(this.pindex++);\\n\\t }\\n\\t return this.palette[color];\\n\\t }\\n\\n\\t // output a PNG string, Base64 encoded\\n\\t this.getBase64 = function() {\\n\\n\\t var s = this.getDump();\\n\\n\\t var ch = \\\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\\\";\\n\\t var c1, c2, c3, e1, e2, e3, e4;\\n\\t var l = s.length;\\n\\t var i = 0;\\n\\t var r = \\\"\\\";\\n\\n\\t do {\\n\\t c1 = s.charCodeAt(i);\\n\\t e1 = c1 >> 2;\\n\\t c2 = s.charCodeAt(i+1);\\n\\t e2 = ((c1 & 3) << 4) | (c2 >> 4);\\n\\t c3 = s.charCodeAt(i+2);\\n\\t if (l < i+2) { e3 = 64; } else { e3 = ((c2 & 0xf) << 2) | (c3 >> 6); }\\n\\t if (l < i+3) { e4 = 64; } else { e4 = c3 & 0x3f; }\\n\\t r+= ch.charAt(e1) + ch.charAt(e2) + ch.charAt(e3) + ch.charAt(e4);\\n\\t } while ((i+= 3) < l);\\n\\t return r;\\n\\t }\\n\\n\\t // output a PNG string\\n\\t this.getDump = function() {\\n\\t // compute adler32 of output pixels + row filter bytes\\n\\t var BASE = 65521; /* largest prime smaller than 65536 */\\n\\t var NMAX = 5552; /* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */\\n\\t var s1 = 1;\\n\\t var s2 = 0;\\n\\t var n = NMAX;\\n\\n\\t for (var y = 0; y < this.height; y++) {\\n\\t for (var x = -1; x < this.width; x++) {\\n\\t s1+= this.buffer[this.index(x, y)].charCodeAt(0);\\n\\t s2+= s1;\\n\\t if ((n-= 1) == 0) {\\n\\t s1%= BASE;\\n\\t s2%= BASE;\\n\\t n = NMAX;\\n\\t }\\n\\t }\\n\\t }\\n\\t s1%= BASE;\\n\\t s2%= BASE;\\n\\t write(this.buffer, this.idat_offs + this.idat_size - 8, byte4((s2 << 16) | s1));\\n\\n\\t // compute crc32 of the PNG chunks\\n\\t function crc32(png, offs, size) {\\n\\t var crc = -1;\\n\\t for (var i = 4; i < size-4; i += 1) {\\n\\t crc = _crc32[(crc ^ png[offs+i].charCodeAt(0)) & 0xff] ^ ((crc >> 8) & 0x00ffffff);\\n\\t }\\n\\t write(png, offs+size-4, byte4(crc ^ -1));\\n\\t }\\n\\n\\t crc32(this.buffer, this.ihdr_offs, this.ihdr_size);\\n\\t crc32(this.buffer, this.plte_offs, this.plte_size);\\n\\t crc32(this.buffer, this.trns_offs, this.trns_size);\\n\\t crc32(this.buffer, this.idat_offs, this.idat_size);\\n\\t crc32(this.buffer, this.iend_offs, this.iend_size);\\n\\n\\t // convert PNG to string\\n\\t return \\\"\\\\x89PNG\\\\r\\\\n\\\\x1a\\\\n\\\" + this.buffer.join('');\\n\\t }\\n\\t};\\n\\n\\n/***/ },\\n/* 2 */\\n/***/ function(module, exports) {\\n\\n\\t// https://stackoverflow.com/questions/2353211/hsl-to-rgb-color-conversion\\n\\t/**\\n\\t * Converts an HSL color value to RGB. Conversion formula\\n\\t * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\\n\\t * Assumes h, s, and l are contained in the set [0, 1] and\\n\\t * returns r, g, and b in the set [0, 255].\\n\\t *\\n\\t * @param {number} h The hue\\n\\t * @param {number} s The saturation\\n\\t * @param {number} l The lightness\\n\\t * @return {Array} The RGB representation\\n\\t */\\n\\n\\t function hue2rgb(p, q, t) {\\n\\t if(t < 0) t += 1;\\n\\t if(t > 1) t -= 1;\\n\\t if(t < 1/6) return p + (q - p) * 6 * t;\\n\\t if(t < 1/2) return q;\\n\\t if(t < 2/3) return p + (q - p) * (2/3 - t) * 6;\\n\\t return p;\\n\\t }\\n\\n\\tfunction hsl2rgb(h, s, l){\\n\\t let r, g, b;\\n\\n\\t if (s == 0) {\\n\\t r = g = b = l; // achromatic\\n\\t } else {\\n\\t const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\\n\\t const p = 2 * l - q;\\n\\t r = hue2rgb(p, q, h + 1/3);\\n\\t g = hue2rgb(p, q, h);\\n\\t b = hue2rgb(p, q, h - 1/3);\\n\\t }\\n\\n\\t return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255), 255];\\n\\t}\\n\\n\\tmodule.exports = hsl2rgb;\\n\\n\\n/***/ }\\n/******/ ])\\n});\\n;\\n\\n//# sourceURL=webpack:///./node_modules/ethereum-blockies-base64/dist/main.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/graphql-request/dist/src/index.js\":\n/*!********************************************************!*\\\n !*** ./node_modules/graphql-request/dist/src/index.js ***!\n \\********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nvar __assign = (this && this.__assign) || Object.assign || function(t) {\\n for (var s, i = 1, n = arguments.length; i < n; i++) {\\n s = arguments[i];\\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\\n t[p] = s[p];\\n }\\n return t;\\n};\\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\\n return new (P || (P = Promise))(function (resolve, reject) {\\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\\n function rejected(value) { try { step(generator[\\\"throw\\\"](value)); } catch (e) { reject(e); } }\\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\\n step((generator = generator.apply(thisArg, _arguments || [])).next());\\n });\\n};\\nvar __generator = (this && this.__generator) || function (thisArg, body) {\\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\\n return g = { next: verb(0), \\\"throw\\\": verb(1), \\\"return\\\": verb(2) }, typeof Symbol === \\\"function\\\" && (g[Symbol.iterator] = function() { return this; }), g;\\n function verb(n) { return function (v) { return step([n, v]); }; }\\n function step(op) {\\n if (f) throw new TypeError(\\\"Generator is already executing.\\\");\\n while (_) try {\\n if (f = 1, y && (t = y[op[0] & 2 ? \\\"return\\\" : op[0] ? \\\"throw\\\" : \\\"next\\\"]) && !(t = t.call(y, op[1])).done) return t;\\n if (y = 0, t) op = [0, t.value];\\n switch (op[0]) {\\n case 0: case 1: t = op; break;\\n case 4: _.label++; return { value: op[1], done: false };\\n case 5: _.label++; y = op[1]; op = [0]; continue;\\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\\n default:\\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\\n if (t[2]) _.ops.pop();\\n _.trys.pop(); continue;\\n }\\n op = body.call(thisArg, _);\\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\\n }\\n};\\nvar __rest = (this && this.__rest) || function (s, e) {\\n var t = {};\\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\\n t[p] = s[p];\\n if (s != null && typeof Object.getOwnPropertySymbols === \\\"function\\\")\\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\\n t[p[i]] = s[p[i]];\\n return t;\\n};\\nObject.defineProperty(exports, \\\"__esModule\\\", { value: true });\\nvar types_1 = __webpack_require__(/*! ./types */ \\\"./node_modules/graphql-request/dist/src/types.js\\\");\\nvar types_2 = __webpack_require__(/*! ./types */ \\\"./node_modules/graphql-request/dist/src/types.js\\\");\\nexports.ClientError = types_2.ClientError;\\n__webpack_require__(/*! cross-fetch/polyfill */ \\\"./node_modules/graphql-request/node_modules/cross-fetch/dist/browser-polyfill.js\\\");\\nvar GraphQLClient = /** @class */ (function () {\\n function GraphQLClient(url, options) {\\n this.url = url;\\n this.options = options || {};\\n }\\n GraphQLClient.prototype.rawRequest = function (query, variables) {\\n return __awaiter(this, void 0, void 0, function () {\\n var _a, headers, others, body, response, result, headers_1, status_1, errorResult;\\n return __generator(this, function (_b) {\\n switch (_b.label) {\\n case 0:\\n _a = this.options, headers = _a.headers, others = __rest(_a, [\\\"headers\\\"]);\\n body = JSON.stringify({\\n query: query,\\n variables: variables ? variables : undefined,\\n });\\n return [4 /*yield*/, fetch(this.url, __assign({ method: 'POST', headers: Object.assign({ 'Content-Type': 'application/json' }, headers), body: body }, others))];\\n case 1:\\n response = _b.sent();\\n return [4 /*yield*/, getResult(response)];\\n case 2:\\n result = _b.sent();\\n if (response.ok && !result.errors && result.data) {\\n headers_1 = response.headers, status_1 = response.status;\\n return [2 /*return*/, __assign({}, result, { headers: headers_1, status: status_1 })];\\n }\\n else {\\n errorResult = typeof result === 'string' ? { error: result } : result;\\n throw new types_1.ClientError(__assign({}, errorResult, { status: response.status, headers: response.headers }), { query: query, variables: variables });\\n }\\n return [2 /*return*/];\\n }\\n });\\n });\\n };\\n GraphQLClient.prototype.request = function (query, variables) {\\n return __awaiter(this, void 0, void 0, function () {\\n var _a, headers, others, body, response, result, errorResult;\\n return __generator(this, function (_b) {\\n switch (_b.label) {\\n case 0:\\n _a = this.options, headers = _a.headers, others = __rest(_a, [\\\"headers\\\"]);\\n body = JSON.stringify({\\n query: query,\\n variables: variables ? variables : undefined,\\n });\\n return [4 /*yield*/, fetch(this.url, __assign({ method: 'POST', headers: Object.assign({ 'Content-Type': 'application/json' }, headers), body: body }, others))];\\n case 1:\\n response = _b.sent();\\n return [4 /*yield*/, getResult(response)];\\n case 2:\\n result = _b.sent();\\n if (response.ok && !result.errors && result.data) {\\n return [2 /*return*/, result.data];\\n }\\n else {\\n errorResult = typeof result === 'string' ? { error: result } : result;\\n throw new types_1.ClientError(__assign({}, errorResult, { status: response.status }), { query: query, variables: variables });\\n }\\n return [2 /*return*/];\\n }\\n });\\n });\\n };\\n GraphQLClient.prototype.setHeaders = function (headers) {\\n this.options.headers = headers;\\n return this;\\n };\\n GraphQLClient.prototype.setHeader = function (key, value) {\\n var headers = this.options.headers;\\n if (headers) {\\n headers[key] = value;\\n }\\n else {\\n this.options.headers = (_a = {}, _a[key] = value, _a);\\n }\\n return this;\\n var _a;\\n };\\n return GraphQLClient;\\n}());\\nexports.GraphQLClient = GraphQLClient;\\nfunction rawRequest(url, query, variables) {\\n return __awaiter(this, void 0, void 0, function () {\\n var client;\\n return __generator(this, function (_a) {\\n client = new GraphQLClient(url);\\n return [2 /*return*/, client.rawRequest(query, variables)];\\n });\\n });\\n}\\nexports.rawRequest = rawRequest;\\nfunction request(url, query, variables) {\\n return __awaiter(this, void 0, void 0, function () {\\n var client;\\n return __generator(this, function (_a) {\\n client = new GraphQLClient(url);\\n return [2 /*return*/, client.request(query, variables)];\\n });\\n });\\n}\\nexports.request = request;\\nexports.default = request;\\nfunction getResult(response) {\\n return __awaiter(this, void 0, void 0, function () {\\n var contentType;\\n return __generator(this, function (_a) {\\n contentType = response.headers.get('Content-Type');\\n if (contentType && contentType.startsWith('application/json')) {\\n return [2 /*return*/, response.json()];\\n }\\n else {\\n return [2 /*return*/, response.text()];\\n }\\n return [2 /*return*/];\\n });\\n });\\n}\\n//# sourceMappingURL=index.js.map\\n\\n//# sourceURL=webpack:///./node_modules/graphql-request/dist/src/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/graphql-request/dist/src/types.js\":\n/*!********************************************************!*\\\n !*** ./node_modules/graphql-request/dist/src/types.js ***!\n \\********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nvar __extends = (this && this.__extends) || (function () {\\n var extendStatics = Object.setPrototypeOf ||\\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\\n return function (d, b) {\\n extendStatics(d, b);\\n function __() { this.constructor = d; }\\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\\n };\\n})();\\nObject.defineProperty(exports, \\\"__esModule\\\", { value: true });\\nvar ClientError = /** @class */ (function (_super) {\\n __extends(ClientError, _super);\\n function ClientError(response, request) {\\n var _this = this;\\n var message = ClientError.extractMessage(response) + \\\": \\\" + JSON.stringify({ response: response, request: request });\\n _this = _super.call(this, message) || this;\\n _this.response = response;\\n _this.request = request;\\n // this is needed as Safari doesn't support .captureStackTrace\\n /* tslint:disable-next-line */\\n if (typeof Error.captureStackTrace === 'function') {\\n Error.captureStackTrace(_this, ClientError);\\n }\\n return _this;\\n }\\n ClientError.extractMessage = function (response) {\\n try {\\n return response.errors[0].message;\\n }\\n catch (e) {\\n return \\\"GraphQL Error (Code: \\\" + response.status + \\\")\\\";\\n }\\n };\\n return ClientError;\\n}(Error));\\nexports.ClientError = ClientError;\\n//# sourceMappingURL=types.js.map\\n\\n//# sourceURL=webpack:///./node_modules/graphql-request/dist/src/types.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/graphql-request/node_modules/cross-fetch/dist/browser-polyfill.js\":\n/*!****************************************************************************************!*\\\n !*** ./node_modules/graphql-request/node_modules/cross-fetch/dist/browser-polyfill.js ***!\n \\****************************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"(function(self) {\\n\\n if (self.fetch) {\\n return\\n }\\n\\n var support = {\\n searchParams: 'URLSearchParams' in self,\\n iterable: 'Symbol' in self && 'iterator' in Symbol,\\n blob: 'FileReader' in self && 'Blob' in self && (function() {\\n try {\\n new Blob();\\n return true\\n } catch(e) {\\n return false\\n }\\n })(),\\n formData: 'FormData' in self,\\n arrayBuffer: 'ArrayBuffer' in self\\n };\\n\\n if (support.arrayBuffer) {\\n var viewClasses = [\\n '[object Int8Array]',\\n '[object Uint8Array]',\\n '[object Uint8ClampedArray]',\\n '[object Int16Array]',\\n '[object Uint16Array]',\\n '[object Int32Array]',\\n '[object Uint32Array]',\\n '[object Float32Array]',\\n '[object Float64Array]'\\n ];\\n\\n var isDataView = function(obj) {\\n return obj && DataView.prototype.isPrototypeOf(obj)\\n };\\n\\n var isArrayBufferView = ArrayBuffer.isView || function(obj) {\\n return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\\n };\\n }\\n\\n function normalizeName(name) {\\n if (typeof name !== 'string') {\\n name = String(name);\\n }\\n if (/[^a-z0-9\\\\-#$%&'*+.\\\\^_`|~]/i.test(name)) {\\n throw new TypeError('Invalid character in header field name')\\n }\\n return name.toLowerCase()\\n }\\n\\n function normalizeValue(value) {\\n if (typeof value !== 'string') {\\n value = String(value);\\n }\\n return value\\n }\\n\\n // Build a destructive iterator for the value list\\n function iteratorFor(items) {\\n var iterator = {\\n next: function() {\\n var value = items.shift();\\n return {done: value === undefined, value: value}\\n }\\n };\\n\\n if (support.iterable) {\\n iterator[Symbol.iterator] = function() {\\n return iterator\\n };\\n }\\n\\n return iterator\\n }\\n\\n function Headers(headers) {\\n this.map = {};\\n\\n if (headers instanceof Headers) {\\n headers.forEach(function(value, name) {\\n this.append(name, value);\\n }, this);\\n } else if (Array.isArray(headers)) {\\n headers.forEach(function(header) {\\n this.append(header[0], header[1]);\\n }, this);\\n } else if (headers) {\\n Object.getOwnPropertyNames(headers).forEach(function(name) {\\n this.append(name, headers[name]);\\n }, this);\\n }\\n }\\n\\n Headers.prototype.append = function(name, value) {\\n name = normalizeName(name);\\n value = normalizeValue(value);\\n var oldValue = this.map[name];\\n this.map[name] = oldValue ? oldValue+','+value : value;\\n };\\n\\n Headers.prototype['delete'] = function(name) {\\n delete this.map[normalizeName(name)];\\n };\\n\\n Headers.prototype.get = function(name) {\\n name = normalizeName(name);\\n return this.has(name) ? this.map[name] : null\\n };\\n\\n Headers.prototype.has = function(name) {\\n return this.map.hasOwnProperty(normalizeName(name))\\n };\\n\\n Headers.prototype.set = function(name, value) {\\n this.map[normalizeName(name)] = normalizeValue(value);\\n };\\n\\n Headers.prototype.forEach = function(callback, thisArg) {\\n for (var name in this.map) {\\n if (this.map.hasOwnProperty(name)) {\\n callback.call(thisArg, this.map[name], name, this);\\n }\\n }\\n };\\n\\n Headers.prototype.keys = function() {\\n var items = [];\\n this.forEach(function(value, name) { items.push(name); });\\n return iteratorFor(items)\\n };\\n\\n Headers.prototype.values = function() {\\n var items = [];\\n this.forEach(function(value) { items.push(value); });\\n return iteratorFor(items)\\n };\\n\\n Headers.prototype.entries = function() {\\n var items = [];\\n this.forEach(function(value, name) { items.push([name, value]); });\\n return iteratorFor(items)\\n };\\n\\n if (support.iterable) {\\n Headers.prototype[Symbol.iterator] = Headers.prototype.entries;\\n }\\n\\n function consumed(body) {\\n if (body.bodyUsed) {\\n return Promise.reject(new TypeError('Already read'))\\n }\\n body.bodyUsed = true;\\n }\\n\\n function fileReaderReady(reader) {\\n return new Promise(function(resolve, reject) {\\n reader.onload = function() {\\n resolve(reader.result);\\n };\\n reader.onerror = function() {\\n reject(reader.error);\\n };\\n })\\n }\\n\\n function readBlobAsArrayBuffer(blob) {\\n var reader = new FileReader();\\n var promise = fileReaderReady(reader);\\n reader.readAsArrayBuffer(blob);\\n return promise\\n }\\n\\n function readBlobAsText(blob) {\\n var reader = new FileReader();\\n var promise = fileReaderReady(reader);\\n reader.readAsText(blob);\\n return promise\\n }\\n\\n function readArrayBufferAsText(buf) {\\n var view = new Uint8Array(buf);\\n var chars = new Array(view.length);\\n\\n for (var i = 0; i < view.length; i++) {\\n chars[i] = String.fromCharCode(view[i]);\\n }\\n return chars.join('')\\n }\\n\\n function bufferClone(buf) {\\n if (buf.slice) {\\n return buf.slice(0)\\n } else {\\n var view = new Uint8Array(buf.byteLength);\\n view.set(new Uint8Array(buf));\\n return view.buffer\\n }\\n }\\n\\n function Body() {\\n this.bodyUsed = false;\\n\\n this._initBody = function(body) {\\n this._bodyInit = body;\\n if (!body) {\\n this._bodyText = '';\\n } else if (typeof body === 'string') {\\n this._bodyText = body;\\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\\n this._bodyBlob = body;\\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\\n this._bodyFormData = body;\\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\\n this._bodyText = body.toString();\\n } else if (support.arrayBuffer && support.blob && isDataView(body)) {\\n this._bodyArrayBuffer = bufferClone(body.buffer);\\n // IE 10-11 can't handle a DataView body.\\n this._bodyInit = new Blob([this._bodyArrayBuffer]);\\n } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\\n this._bodyArrayBuffer = bufferClone(body);\\n } else {\\n throw new Error('unsupported BodyInit type')\\n }\\n\\n if (!this.headers.get('content-type')) {\\n if (typeof body === 'string') {\\n this.headers.set('content-type', 'text/plain;charset=UTF-8');\\n } else if (this._bodyBlob && this._bodyBlob.type) {\\n this.headers.set('content-type', this._bodyBlob.type);\\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\\n this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');\\n }\\n }\\n };\\n\\n if (support.blob) {\\n this.blob = function() {\\n var rejected = consumed(this);\\n if (rejected) {\\n return rejected\\n }\\n\\n if (this._bodyBlob) {\\n return Promise.resolve(this._bodyBlob)\\n } else if (this._bodyArrayBuffer) {\\n return Promise.resolve(new Blob([this._bodyArrayBuffer]))\\n } else if (this._bodyFormData) {\\n throw new Error('could not read FormData body as blob')\\n } else {\\n return Promise.resolve(new Blob([this._bodyText]))\\n }\\n };\\n\\n this.arrayBuffer = function() {\\n if (this._bodyArrayBuffer) {\\n return consumed(this) || Promise.resolve(this._bodyArrayBuffer)\\n } else {\\n return this.blob().then(readBlobAsArrayBuffer)\\n }\\n };\\n }\\n\\n this.text = function() {\\n var rejected = consumed(this);\\n if (rejected) {\\n return rejected\\n }\\n\\n if (this._bodyBlob) {\\n return readBlobAsText(this._bodyBlob)\\n } else if (this._bodyArrayBuffer) {\\n return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\\n } else if (this._bodyFormData) {\\n throw new Error('could not read FormData body as text')\\n } else {\\n return Promise.resolve(this._bodyText)\\n }\\n };\\n\\n if (support.formData) {\\n this.formData = function() {\\n return this.text().then(decode)\\n };\\n }\\n\\n this.json = function() {\\n return this.text().then(JSON.parse)\\n };\\n\\n return this\\n }\\n\\n // HTTP methods whose capitalization should be normalized\\n var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT'];\\n\\n function normalizeMethod(method) {\\n var upcased = method.toUpperCase();\\n return (methods.indexOf(upcased) > -1) ? upcased : method\\n }\\n\\n function Request(input, options) {\\n options = options || {};\\n var body = options.body;\\n\\n if (input instanceof Request) {\\n if (input.bodyUsed) {\\n throw new TypeError('Already read')\\n }\\n this.url = input.url;\\n this.credentials = input.credentials;\\n if (!options.headers) {\\n this.headers = new Headers(input.headers);\\n }\\n this.method = input.method;\\n this.mode = input.mode;\\n if (!body && input._bodyInit != null) {\\n body = input._bodyInit;\\n input.bodyUsed = true;\\n }\\n } else {\\n this.url = String(input);\\n }\\n\\n this.credentials = options.credentials || this.credentials || 'omit';\\n if (options.headers || !this.headers) {\\n this.headers = new Headers(options.headers);\\n }\\n this.method = normalizeMethod(options.method || this.method || 'GET');\\n this.mode = options.mode || this.mode || null;\\n this.referrer = null;\\n\\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\\n throw new TypeError('Body not allowed for GET or HEAD requests')\\n }\\n this._initBody(body);\\n }\\n\\n Request.prototype.clone = function() {\\n return new Request(this, { body: this._bodyInit })\\n };\\n\\n function decode(body) {\\n var form = new FormData();\\n body.trim().split('&').forEach(function(bytes) {\\n if (bytes) {\\n var split = bytes.split('=');\\n var name = split.shift().replace(/\\\\+/g, ' ');\\n var value = split.join('=').replace(/\\\\+/g, ' ');\\n form.append(decodeURIComponent(name), decodeURIComponent(value));\\n }\\n });\\n return form\\n }\\n\\n function parseHeaders(rawHeaders) {\\n var headers = new Headers();\\n // Replace instances of \\\\r\\\\n and \\\\n followed by at least one space or horizontal tab with a space\\n // https://tools.ietf.org/html/rfc7230#section-3.2\\n var preProcessedHeaders = rawHeaders.replace(/\\\\r?\\\\n[\\\\t ]+/g, ' ');\\n preProcessedHeaders.split(/\\\\r?\\\\n/).forEach(function(line) {\\n var parts = line.split(':');\\n var key = parts.shift().trim();\\n if (key) {\\n var value = parts.join(':').trim();\\n headers.append(key, value);\\n }\\n });\\n return headers\\n }\\n\\n Body.call(Request.prototype);\\n\\n function Response(bodyInit, options) {\\n if (!options) {\\n options = {};\\n }\\n\\n this.type = 'default';\\n this.status = options.status === undefined ? 200 : options.status;\\n this.ok = this.status >= 200 && this.status < 300;\\n this.statusText = 'statusText' in options ? options.statusText : 'OK';\\n this.headers = new Headers(options.headers);\\n this.url = options.url || '';\\n this._initBody(bodyInit);\\n }\\n\\n Body.call(Response.prototype);\\n\\n Response.prototype.clone = function() {\\n return new Response(this._bodyInit, {\\n status: this.status,\\n statusText: this.statusText,\\n headers: new Headers(this.headers),\\n url: this.url\\n })\\n };\\n\\n Response.error = function() {\\n var response = new Response(null, {status: 0, statusText: ''});\\n response.type = 'error';\\n return response\\n };\\n\\n var redirectStatuses = [301, 302, 303, 307, 308];\\n\\n Response.redirect = function(url, status) {\\n if (redirectStatuses.indexOf(status) === -1) {\\n throw new RangeError('Invalid status code')\\n }\\n\\n return new Response(null, {status: status, headers: {location: url}})\\n };\\n\\n self.Headers = Headers;\\n self.Request = Request;\\n self.Response = Response;\\n\\n self.fetch = function(input, init) {\\n return new Promise(function(resolve, reject) {\\n var request = new Request(input, init);\\n var xhr = new XMLHttpRequest();\\n\\n xhr.onload = function() {\\n var options = {\\n status: xhr.status,\\n statusText: xhr.statusText,\\n headers: parseHeaders(xhr.getAllResponseHeaders() || '')\\n };\\n options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL');\\n var body = 'response' in xhr ? xhr.response : xhr.responseText;\\n resolve(new Response(body, options));\\n };\\n\\n xhr.onerror = function() {\\n reject(new TypeError('Network request failed'));\\n };\\n\\n xhr.ontimeout = function() {\\n reject(new TypeError('Network request failed'));\\n };\\n\\n xhr.open(request.method, request.url, true);\\n\\n if (request.credentials === 'include') {\\n xhr.withCredentials = true;\\n } else if (request.credentials === 'omit') {\\n xhr.withCredentials = false;\\n }\\n\\n if ('responseType' in xhr && support.blob) {\\n xhr.responseType = 'blob';\\n }\\n\\n request.headers.forEach(function(value, name) {\\n xhr.setRequestHeader(name, value);\\n });\\n\\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit);\\n })\\n };\\n self.fetch.polyfill = true;\\n})(typeof self !== 'undefined' ? self : this);\\n\\n\\n//# sourceURL=webpack:///./node_modules/graphql-request/node_modules/cross-fetch/dist/browser-polyfill.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/hash.js/lib/hash.js\":\n/*!******************************************!*\\\n !*** ./node_modules/hash.js/lib/hash.js ***!\n \\******************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"var hash = exports;\\n\\nhash.utils = __webpack_require__(/*! ./hash/utils */ \\\"./node_modules/hash.js/lib/hash/utils.js\\\");\\nhash.common = __webpack_require__(/*! ./hash/common */ \\\"./node_modules/hash.js/lib/hash/common.js\\\");\\nhash.sha = __webpack_require__(/*! ./hash/sha */ \\\"./node_modules/hash.js/lib/hash/sha.js\\\");\\nhash.ripemd = __webpack_require__(/*! ./hash/ripemd */ \\\"./node_modules/hash.js/lib/hash/ripemd.js\\\");\\nhash.hmac = __webpack_require__(/*! ./hash/hmac */ \\\"./node_modules/hash.js/lib/hash/hmac.js\\\");\\n\\n// Proxy hash functions to the main object\\nhash.sha1 = hash.sha.sha1;\\nhash.sha256 = hash.sha.sha256;\\nhash.sha224 = hash.sha.sha224;\\nhash.sha384 = hash.sha.sha384;\\nhash.sha512 = hash.sha.sha512;\\nhash.ripemd160 = hash.ripemd.ripemd160;\\n\\n\\n//# sourceURL=webpack:///./node_modules/hash.js/lib/hash.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/hash.js/lib/hash/common.js\":\n/*!*************************************************!*\\\n !*** ./node_modules/hash.js/lib/hash/common.js ***!\n \\*************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar utils = __webpack_require__(/*! ./utils */ \\\"./node_modules/hash.js/lib/hash/utils.js\\\");\\nvar assert = __webpack_require__(/*! minimalistic-assert */ \\\"./node_modules/minimalistic-assert/index.js\\\");\\n\\nfunction BlockHash() {\\n this.pending = null;\\n this.pendingTotal = 0;\\n this.blockSize = this.constructor.blockSize;\\n this.outSize = this.constructor.outSize;\\n this.hmacStrength = this.constructor.hmacStrength;\\n this.padLength = this.constructor.padLength / 8;\\n this.endian = 'big';\\n\\n this._delta8 = this.blockSize / 8;\\n this._delta32 = this.blockSize / 32;\\n}\\nexports.BlockHash = BlockHash;\\n\\nBlockHash.prototype.update = function update(msg, enc) {\\n // Convert message to array, pad it, and join into 32bit blocks\\n msg = utils.toArray(msg, enc);\\n if (!this.pending)\\n this.pending = msg;\\n else\\n this.pending = this.pending.concat(msg);\\n this.pendingTotal += msg.length;\\n\\n // Enough data, try updating\\n if (this.pending.length >= this._delta8) {\\n msg = this.pending;\\n\\n // Process pending data in blocks\\n var r = msg.length % this._delta8;\\n this.pending = msg.slice(msg.length - r, msg.length);\\n if (this.pending.length === 0)\\n this.pending = null;\\n\\n msg = utils.join32(msg, 0, msg.length - r, this.endian);\\n for (var i = 0; i < msg.length; i += this._delta32)\\n this._update(msg, i, i + this._delta32);\\n }\\n\\n return this;\\n};\\n\\nBlockHash.prototype.digest = function digest(enc) {\\n this.update(this._pad());\\n assert(this.pending === null);\\n\\n return this._digest(enc);\\n};\\n\\nBlockHash.prototype._pad = function pad() {\\n var len = this.pendingTotal;\\n var bytes = this._delta8;\\n var k = bytes - ((len + this.padLength) % bytes);\\n var res = new Array(k + this.padLength);\\n res[0] = 0x80;\\n for (var i = 1; i < k; i++)\\n res[i] = 0;\\n\\n // Append length\\n len <<= 3;\\n if (this.endian === 'big') {\\n for (var t = 8; t < this.padLength; t++)\\n res[i++] = 0;\\n\\n res[i++] = 0;\\n res[i++] = 0;\\n res[i++] = 0;\\n res[i++] = 0;\\n res[i++] = (len >>> 24) & 0xff;\\n res[i++] = (len >>> 16) & 0xff;\\n res[i++] = (len >>> 8) & 0xff;\\n res[i++] = len & 0xff;\\n } else {\\n res[i++] = len & 0xff;\\n res[i++] = (len >>> 8) & 0xff;\\n res[i++] = (len >>> 16) & 0xff;\\n res[i++] = (len >>> 24) & 0xff;\\n res[i++] = 0;\\n res[i++] = 0;\\n res[i++] = 0;\\n res[i++] = 0;\\n\\n for (t = 8; t < this.padLength; t++)\\n res[i++] = 0;\\n }\\n\\n return res;\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/hash.js/lib/hash/common.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/hash.js/lib/hash/hmac.js\":\n/*!***********************************************!*\\\n !*** ./node_modules/hash.js/lib/hash/hmac.js ***!\n \\***********************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar utils = __webpack_require__(/*! ./utils */ \\\"./node_modules/hash.js/lib/hash/utils.js\\\");\\nvar assert = __webpack_require__(/*! minimalistic-assert */ \\\"./node_modules/minimalistic-assert/index.js\\\");\\n\\nfunction Hmac(hash, key, enc) {\\n if (!(this instanceof Hmac))\\n return new Hmac(hash, key, enc);\\n this.Hash = hash;\\n this.blockSize = hash.blockSize / 8;\\n this.outSize = hash.outSize / 8;\\n this.inner = null;\\n this.outer = null;\\n\\n this._init(utils.toArray(key, enc));\\n}\\nmodule.exports = Hmac;\\n\\nHmac.prototype._init = function init(key) {\\n // Shorten key, if needed\\n if (key.length > this.blockSize)\\n key = new this.Hash().update(key).digest();\\n assert(key.length <= this.blockSize);\\n\\n // Add padding to key\\n for (var i = key.length; i < this.blockSize; i++)\\n key.push(0);\\n\\n for (i = 0; i < key.length; i++)\\n key[i] ^= 0x36;\\n this.inner = new this.Hash().update(key);\\n\\n // 0x36 ^ 0x5c = 0x6a\\n for (i = 0; i < key.length; i++)\\n key[i] ^= 0x6a;\\n this.outer = new this.Hash().update(key);\\n};\\n\\nHmac.prototype.update = function update(msg, enc) {\\n this.inner.update(msg, enc);\\n return this;\\n};\\n\\nHmac.prototype.digest = function digest(enc) {\\n this.outer.update(this.inner.digest());\\n return this.outer.digest(enc);\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/hash.js/lib/hash/hmac.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/hash.js/lib/hash/ripemd.js\":\n/*!*************************************************!*\\\n !*** ./node_modules/hash.js/lib/hash/ripemd.js ***!\n \\*************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar utils = __webpack_require__(/*! ./utils */ \\\"./node_modules/hash.js/lib/hash/utils.js\\\");\\nvar common = __webpack_require__(/*! ./common */ \\\"./node_modules/hash.js/lib/hash/common.js\\\");\\n\\nvar rotl32 = utils.rotl32;\\nvar sum32 = utils.sum32;\\nvar sum32_3 = utils.sum32_3;\\nvar sum32_4 = utils.sum32_4;\\nvar BlockHash = common.BlockHash;\\n\\nfunction RIPEMD160() {\\n if (!(this instanceof RIPEMD160))\\n return new RIPEMD160();\\n\\n BlockHash.call(this);\\n\\n this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];\\n this.endian = 'little';\\n}\\nutils.inherits(RIPEMD160, BlockHash);\\nexports.ripemd160 = RIPEMD160;\\n\\nRIPEMD160.blockSize = 512;\\nRIPEMD160.outSize = 160;\\nRIPEMD160.hmacStrength = 192;\\nRIPEMD160.padLength = 64;\\n\\nRIPEMD160.prototype._update = function update(msg, start) {\\n var A = this.h[0];\\n var B = this.h[1];\\n var C = this.h[2];\\n var D = this.h[3];\\n var E = this.h[4];\\n var Ah = A;\\n var Bh = B;\\n var Ch = C;\\n var Dh = D;\\n var Eh = E;\\n for (var j = 0; j < 80; j++) {\\n var T = sum32(\\n rotl32(\\n sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),\\n s[j]),\\n E);\\n A = E;\\n E = D;\\n D = rotl32(C, 10);\\n C = B;\\n B = T;\\n T = sum32(\\n rotl32(\\n sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),\\n sh[j]),\\n Eh);\\n Ah = Eh;\\n Eh = Dh;\\n Dh = rotl32(Ch, 10);\\n Ch = Bh;\\n Bh = T;\\n }\\n T = sum32_3(this.h[1], C, Dh);\\n this.h[1] = sum32_3(this.h[2], D, Eh);\\n this.h[2] = sum32_3(this.h[3], E, Ah);\\n this.h[3] = sum32_3(this.h[4], A, Bh);\\n this.h[4] = sum32_3(this.h[0], B, Ch);\\n this.h[0] = T;\\n};\\n\\nRIPEMD160.prototype._digest = function digest(enc) {\\n if (enc === 'hex')\\n return utils.toHex32(this.h, 'little');\\n else\\n return utils.split32(this.h, 'little');\\n};\\n\\nfunction f(j, x, y, z) {\\n if (j <= 15)\\n return x ^ y ^ z;\\n else if (j <= 31)\\n return (x & y) | ((~x) & z);\\n else if (j <= 47)\\n return (x | (~y)) ^ z;\\n else if (j <= 63)\\n return (x & z) | (y & (~z));\\n else\\n return x ^ (y | (~z));\\n}\\n\\nfunction K(j) {\\n if (j <= 15)\\n return 0x00000000;\\n else if (j <= 31)\\n return 0x5a827999;\\n else if (j <= 47)\\n return 0x6ed9eba1;\\n else if (j <= 63)\\n return 0x8f1bbcdc;\\n else\\n return 0xa953fd4e;\\n}\\n\\nfunction Kh(j) {\\n if (j <= 15)\\n return 0x50a28be6;\\n else if (j <= 31)\\n return 0x5c4dd124;\\n else if (j <= 47)\\n return 0x6d703ef3;\\n else if (j <= 63)\\n return 0x7a6d76e9;\\n else\\n return 0x00000000;\\n}\\n\\nvar r = [\\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\\n 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\\n 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\\n 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13\\n];\\n\\nvar rh = [\\n 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\\n 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\\n 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\\n 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\\n 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11\\n];\\n\\nvar s = [\\n 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\\n 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\\n 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\\n 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\\n 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6\\n];\\n\\nvar sh = [\\n 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\\n 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\\n 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\\n 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\\n 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11\\n];\\n\\n\\n//# sourceURL=webpack:///./node_modules/hash.js/lib/hash/ripemd.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/hash.js/lib/hash/sha.js\":\n/*!**********************************************!*\\\n !*** ./node_modules/hash.js/lib/hash/sha.js ***!\n \\**********************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nexports.sha1 = __webpack_require__(/*! ./sha/1 */ \\\"./node_modules/hash.js/lib/hash/sha/1.js\\\");\\nexports.sha224 = __webpack_require__(/*! ./sha/224 */ \\\"./node_modules/hash.js/lib/hash/sha/224.js\\\");\\nexports.sha256 = __webpack_require__(/*! ./sha/256 */ \\\"./node_modules/hash.js/lib/hash/sha/256.js\\\");\\nexports.sha384 = __webpack_require__(/*! ./sha/384 */ \\\"./node_modules/hash.js/lib/hash/sha/384.js\\\");\\nexports.sha512 = __webpack_require__(/*! ./sha/512 */ \\\"./node_modules/hash.js/lib/hash/sha/512.js\\\");\\n\\n\\n//# sourceURL=webpack:///./node_modules/hash.js/lib/hash/sha.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/hash.js/lib/hash/sha/1.js\":\n/*!************************************************!*\\\n !*** ./node_modules/hash.js/lib/hash/sha/1.js ***!\n \\************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar utils = __webpack_require__(/*! ../utils */ \\\"./node_modules/hash.js/lib/hash/utils.js\\\");\\nvar common = __webpack_require__(/*! ../common */ \\\"./node_modules/hash.js/lib/hash/common.js\\\");\\nvar shaCommon = __webpack_require__(/*! ./common */ \\\"./node_modules/hash.js/lib/hash/sha/common.js\\\");\\n\\nvar rotl32 = utils.rotl32;\\nvar sum32 = utils.sum32;\\nvar sum32_5 = utils.sum32_5;\\nvar ft_1 = shaCommon.ft_1;\\nvar BlockHash = common.BlockHash;\\n\\nvar sha1_K = [\\n 0x5A827999, 0x6ED9EBA1,\\n 0x8F1BBCDC, 0xCA62C1D6\\n];\\n\\nfunction SHA1() {\\n if (!(this instanceof SHA1))\\n return new SHA1();\\n\\n BlockHash.call(this);\\n this.h = [\\n 0x67452301, 0xefcdab89, 0x98badcfe,\\n 0x10325476, 0xc3d2e1f0 ];\\n this.W = new Array(80);\\n}\\n\\nutils.inherits(SHA1, BlockHash);\\nmodule.exports = SHA1;\\n\\nSHA1.blockSize = 512;\\nSHA1.outSize = 160;\\nSHA1.hmacStrength = 80;\\nSHA1.padLength = 64;\\n\\nSHA1.prototype._update = function _update(msg, start) {\\n var W = this.W;\\n\\n for (var i = 0; i < 16; i++)\\n W[i] = msg[start + i];\\n\\n for(; i < W.length; i++)\\n W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\\n\\n var a = this.h[0];\\n var b = this.h[1];\\n var c = this.h[2];\\n var d = this.h[3];\\n var e = this.h[4];\\n\\n for (i = 0; i < W.length; i++) {\\n var s = ~~(i / 20);\\n var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\\n e = d;\\n d = c;\\n c = rotl32(b, 30);\\n b = a;\\n a = t;\\n }\\n\\n this.h[0] = sum32(this.h[0], a);\\n this.h[1] = sum32(this.h[1], b);\\n this.h[2] = sum32(this.h[2], c);\\n this.h[3] = sum32(this.h[3], d);\\n this.h[4] = sum32(this.h[4], e);\\n};\\n\\nSHA1.prototype._digest = function digest(enc) {\\n if (enc === 'hex')\\n return utils.toHex32(this.h, 'big');\\n else\\n return utils.split32(this.h, 'big');\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/hash.js/lib/hash/sha/1.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/hash.js/lib/hash/sha/224.js\":\n/*!**************************************************!*\\\n !*** ./node_modules/hash.js/lib/hash/sha/224.js ***!\n \\**************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar utils = __webpack_require__(/*! ../utils */ \\\"./node_modules/hash.js/lib/hash/utils.js\\\");\\nvar SHA256 = __webpack_require__(/*! ./256 */ \\\"./node_modules/hash.js/lib/hash/sha/256.js\\\");\\n\\nfunction SHA224() {\\n if (!(this instanceof SHA224))\\n return new SHA224();\\n\\n SHA256.call(this);\\n this.h = [\\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\\n 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];\\n}\\nutils.inherits(SHA224, SHA256);\\nmodule.exports = SHA224;\\n\\nSHA224.blockSize = 512;\\nSHA224.outSize = 224;\\nSHA224.hmacStrength = 192;\\nSHA224.padLength = 64;\\n\\nSHA224.prototype._digest = function digest(enc) {\\n // Just truncate output\\n if (enc === 'hex')\\n return utils.toHex32(this.h.slice(0, 7), 'big');\\n else\\n return utils.split32(this.h.slice(0, 7), 'big');\\n};\\n\\n\\n\\n//# sourceURL=webpack:///./node_modules/hash.js/lib/hash/sha/224.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/hash.js/lib/hash/sha/256.js\":\n/*!**************************************************!*\\\n !*** ./node_modules/hash.js/lib/hash/sha/256.js ***!\n \\**************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar utils = __webpack_require__(/*! ../utils */ \\\"./node_modules/hash.js/lib/hash/utils.js\\\");\\nvar common = __webpack_require__(/*! ../common */ \\\"./node_modules/hash.js/lib/hash/common.js\\\");\\nvar shaCommon = __webpack_require__(/*! ./common */ \\\"./node_modules/hash.js/lib/hash/sha/common.js\\\");\\nvar assert = __webpack_require__(/*! minimalistic-assert */ \\\"./node_modules/minimalistic-assert/index.js\\\");\\n\\nvar sum32 = utils.sum32;\\nvar sum32_4 = utils.sum32_4;\\nvar sum32_5 = utils.sum32_5;\\nvar ch32 = shaCommon.ch32;\\nvar maj32 = shaCommon.maj32;\\nvar s0_256 = shaCommon.s0_256;\\nvar s1_256 = shaCommon.s1_256;\\nvar g0_256 = shaCommon.g0_256;\\nvar g1_256 = shaCommon.g1_256;\\n\\nvar BlockHash = common.BlockHash;\\n\\nvar sha256_K = [\\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,\\n 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,\\n 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,\\n 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,\\n 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,\\n 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,\\n 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\\n];\\n\\nfunction SHA256() {\\n if (!(this instanceof SHA256))\\n return new SHA256();\\n\\n BlockHash.call(this);\\n this.h = [\\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,\\n 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\\n ];\\n this.k = sha256_K;\\n this.W = new Array(64);\\n}\\nutils.inherits(SHA256, BlockHash);\\nmodule.exports = SHA256;\\n\\nSHA256.blockSize = 512;\\nSHA256.outSize = 256;\\nSHA256.hmacStrength = 192;\\nSHA256.padLength = 64;\\n\\nSHA256.prototype._update = function _update(msg, start) {\\n var W = this.W;\\n\\n for (var i = 0; i < 16; i++)\\n W[i] = msg[start + i];\\n for (; i < W.length; i++)\\n W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\\n\\n var a = this.h[0];\\n var b = this.h[1];\\n var c = this.h[2];\\n var d = this.h[3];\\n var e = this.h[4];\\n var f = this.h[5];\\n var g = this.h[6];\\n var h = this.h[7];\\n\\n assert(this.k.length === W.length);\\n for (i = 0; i < W.length; i++) {\\n var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\\n var T2 = sum32(s0_256(a), maj32(a, b, c));\\n h = g;\\n g = f;\\n f = e;\\n e = sum32(d, T1);\\n d = c;\\n c = b;\\n b = a;\\n a = sum32(T1, T2);\\n }\\n\\n this.h[0] = sum32(this.h[0], a);\\n this.h[1] = sum32(this.h[1], b);\\n this.h[2] = sum32(this.h[2], c);\\n this.h[3] = sum32(this.h[3], d);\\n this.h[4] = sum32(this.h[4], e);\\n this.h[5] = sum32(this.h[5], f);\\n this.h[6] = sum32(this.h[6], g);\\n this.h[7] = sum32(this.h[7], h);\\n};\\n\\nSHA256.prototype._digest = function digest(enc) {\\n if (enc === 'hex')\\n return utils.toHex32(this.h, 'big');\\n else\\n return utils.split32(this.h, 'big');\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/hash.js/lib/hash/sha/256.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/hash.js/lib/hash/sha/384.js\":\n/*!**************************************************!*\\\n !*** ./node_modules/hash.js/lib/hash/sha/384.js ***!\n \\**************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar utils = __webpack_require__(/*! ../utils */ \\\"./node_modules/hash.js/lib/hash/utils.js\\\");\\n\\nvar SHA512 = __webpack_require__(/*! ./512 */ \\\"./node_modules/hash.js/lib/hash/sha/512.js\\\");\\n\\nfunction SHA384() {\\n if (!(this instanceof SHA384))\\n return new SHA384();\\n\\n SHA512.call(this);\\n this.h = [\\n 0xcbbb9d5d, 0xc1059ed8,\\n 0x629a292a, 0x367cd507,\\n 0x9159015a, 0x3070dd17,\\n 0x152fecd8, 0xf70e5939,\\n 0x67332667, 0xffc00b31,\\n 0x8eb44a87, 0x68581511,\\n 0xdb0c2e0d, 0x64f98fa7,\\n 0x47b5481d, 0xbefa4fa4 ];\\n}\\nutils.inherits(SHA384, SHA512);\\nmodule.exports = SHA384;\\n\\nSHA384.blockSize = 1024;\\nSHA384.outSize = 384;\\nSHA384.hmacStrength = 192;\\nSHA384.padLength = 128;\\n\\nSHA384.prototype._digest = function digest(enc) {\\n if (enc === 'hex')\\n return utils.toHex32(this.h.slice(0, 12), 'big');\\n else\\n return utils.split32(this.h.slice(0, 12), 'big');\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/hash.js/lib/hash/sha/384.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/hash.js/lib/hash/sha/512.js\":\n/*!**************************************************!*\\\n !*** ./node_modules/hash.js/lib/hash/sha/512.js ***!\n \\**************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar utils = __webpack_require__(/*! ../utils */ \\\"./node_modules/hash.js/lib/hash/utils.js\\\");\\nvar common = __webpack_require__(/*! ../common */ \\\"./node_modules/hash.js/lib/hash/common.js\\\");\\nvar assert = __webpack_require__(/*! minimalistic-assert */ \\\"./node_modules/minimalistic-assert/index.js\\\");\\n\\nvar rotr64_hi = utils.rotr64_hi;\\nvar rotr64_lo = utils.rotr64_lo;\\nvar shr64_hi = utils.shr64_hi;\\nvar shr64_lo = utils.shr64_lo;\\nvar sum64 = utils.sum64;\\nvar sum64_hi = utils.sum64_hi;\\nvar sum64_lo = utils.sum64_lo;\\nvar sum64_4_hi = utils.sum64_4_hi;\\nvar sum64_4_lo = utils.sum64_4_lo;\\nvar sum64_5_hi = utils.sum64_5_hi;\\nvar sum64_5_lo = utils.sum64_5_lo;\\n\\nvar BlockHash = common.BlockHash;\\n\\nvar sha512_K = [\\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\\n];\\n\\nfunction SHA512() {\\n if (!(this instanceof SHA512))\\n return new SHA512();\\n\\n BlockHash.call(this);\\n this.h = [\\n 0x6a09e667, 0xf3bcc908,\\n 0xbb67ae85, 0x84caa73b,\\n 0x3c6ef372, 0xfe94f82b,\\n 0xa54ff53a, 0x5f1d36f1,\\n 0x510e527f, 0xade682d1,\\n 0x9b05688c, 0x2b3e6c1f,\\n 0x1f83d9ab, 0xfb41bd6b,\\n 0x5be0cd19, 0x137e2179 ];\\n this.k = sha512_K;\\n this.W = new Array(160);\\n}\\nutils.inherits(SHA512, BlockHash);\\nmodule.exports = SHA512;\\n\\nSHA512.blockSize = 1024;\\nSHA512.outSize = 512;\\nSHA512.hmacStrength = 192;\\nSHA512.padLength = 128;\\n\\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\\n var W = this.W;\\n\\n // 32 x 32bit words\\n for (var i = 0; i < 32; i++)\\n W[i] = msg[start + i];\\n for (; i < W.length; i += 2) {\\n var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\\n var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\\n var c1_hi = W[i - 14]; // i - 7\\n var c1_lo = W[i - 13];\\n var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\\n var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\\n var c3_hi = W[i - 32]; // i - 16\\n var c3_lo = W[i - 31];\\n\\n W[i] = sum64_4_hi(\\n c0_hi, c0_lo,\\n c1_hi, c1_lo,\\n c2_hi, c2_lo,\\n c3_hi, c3_lo);\\n W[i + 1] = sum64_4_lo(\\n c0_hi, c0_lo,\\n c1_hi, c1_lo,\\n c2_hi, c2_lo,\\n c3_hi, c3_lo);\\n }\\n};\\n\\nSHA512.prototype._update = function _update(msg, start) {\\n this._prepareBlock(msg, start);\\n\\n var W = this.W;\\n\\n var ah = this.h[0];\\n var al = this.h[1];\\n var bh = this.h[2];\\n var bl = this.h[3];\\n var ch = this.h[4];\\n var cl = this.h[5];\\n var dh = this.h[6];\\n var dl = this.h[7];\\n var eh = this.h[8];\\n var el = this.h[9];\\n var fh = this.h[10];\\n var fl = this.h[11];\\n var gh = this.h[12];\\n var gl = this.h[13];\\n var hh = this.h[14];\\n var hl = this.h[15];\\n\\n assert(this.k.length === W.length);\\n for (var i = 0; i < W.length; i += 2) {\\n var c0_hi = hh;\\n var c0_lo = hl;\\n var c1_hi = s1_512_hi(eh, el);\\n var c1_lo = s1_512_lo(eh, el);\\n var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\\n var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\\n var c3_hi = this.k[i];\\n var c3_lo = this.k[i + 1];\\n var c4_hi = W[i];\\n var c4_lo = W[i + 1];\\n\\n var T1_hi = sum64_5_hi(\\n c0_hi, c0_lo,\\n c1_hi, c1_lo,\\n c2_hi, c2_lo,\\n c3_hi, c3_lo,\\n c4_hi, c4_lo);\\n var T1_lo = sum64_5_lo(\\n c0_hi, c0_lo,\\n c1_hi, c1_lo,\\n c2_hi, c2_lo,\\n c3_hi, c3_lo,\\n c4_hi, c4_lo);\\n\\n c0_hi = s0_512_hi(ah, al);\\n c0_lo = s0_512_lo(ah, al);\\n c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\\n c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\\n\\n var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\\n var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\\n\\n hh = gh;\\n hl = gl;\\n\\n gh = fh;\\n gl = fl;\\n\\n fh = eh;\\n fl = el;\\n\\n eh = sum64_hi(dh, dl, T1_hi, T1_lo);\\n el = sum64_lo(dl, dl, T1_hi, T1_lo);\\n\\n dh = ch;\\n dl = cl;\\n\\n ch = bh;\\n cl = bl;\\n\\n bh = ah;\\n bl = al;\\n\\n ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\\n al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\\n }\\n\\n sum64(this.h, 0, ah, al);\\n sum64(this.h, 2, bh, bl);\\n sum64(this.h, 4, ch, cl);\\n sum64(this.h, 6, dh, dl);\\n sum64(this.h, 8, eh, el);\\n sum64(this.h, 10, fh, fl);\\n sum64(this.h, 12, gh, gl);\\n sum64(this.h, 14, hh, hl);\\n};\\n\\nSHA512.prototype._digest = function digest(enc) {\\n if (enc === 'hex')\\n return utils.toHex32(this.h, 'big');\\n else\\n return utils.split32(this.h, 'big');\\n};\\n\\nfunction ch64_hi(xh, xl, yh, yl, zh) {\\n var r = (xh & yh) ^ ((~xh) & zh);\\n if (r < 0)\\n r += 0x100000000;\\n return r;\\n}\\n\\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\\n var r = (xl & yl) ^ ((~xl) & zl);\\n if (r < 0)\\n r += 0x100000000;\\n return r;\\n}\\n\\nfunction maj64_hi(xh, xl, yh, yl, zh) {\\n var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);\\n if (r < 0)\\n r += 0x100000000;\\n return r;\\n}\\n\\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\\n var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);\\n if (r < 0)\\n r += 0x100000000;\\n return r;\\n}\\n\\nfunction s0_512_hi(xh, xl) {\\n var c0_hi = rotr64_hi(xh, xl, 28);\\n var c1_hi = rotr64_hi(xl, xh, 2); // 34\\n var c2_hi = rotr64_hi(xl, xh, 7); // 39\\n\\n var r = c0_hi ^ c1_hi ^ c2_hi;\\n if (r < 0)\\n r += 0x100000000;\\n return r;\\n}\\n\\nfunction s0_512_lo(xh, xl) {\\n var c0_lo = rotr64_lo(xh, xl, 28);\\n var c1_lo = rotr64_lo(xl, xh, 2); // 34\\n var c2_lo = rotr64_lo(xl, xh, 7); // 39\\n\\n var r = c0_lo ^ c1_lo ^ c2_lo;\\n if (r < 0)\\n r += 0x100000000;\\n return r;\\n}\\n\\nfunction s1_512_hi(xh, xl) {\\n var c0_hi = rotr64_hi(xh, xl, 14);\\n var c1_hi = rotr64_hi(xh, xl, 18);\\n var c2_hi = rotr64_hi(xl, xh, 9); // 41\\n\\n var r = c0_hi ^ c1_hi ^ c2_hi;\\n if (r < 0)\\n r += 0x100000000;\\n return r;\\n}\\n\\nfunction s1_512_lo(xh, xl) {\\n var c0_lo = rotr64_lo(xh, xl, 14);\\n var c1_lo = rotr64_lo(xh, xl, 18);\\n var c2_lo = rotr64_lo(xl, xh, 9); // 41\\n\\n var r = c0_lo ^ c1_lo ^ c2_lo;\\n if (r < 0)\\n r += 0x100000000;\\n return r;\\n}\\n\\nfunction g0_512_hi(xh, xl) {\\n var c0_hi = rotr64_hi(xh, xl, 1);\\n var c1_hi = rotr64_hi(xh, xl, 8);\\n var c2_hi = shr64_hi(xh, xl, 7);\\n\\n var r = c0_hi ^ c1_hi ^ c2_hi;\\n if (r < 0)\\n r += 0x100000000;\\n return r;\\n}\\n\\nfunction g0_512_lo(xh, xl) {\\n var c0_lo = rotr64_lo(xh, xl, 1);\\n var c1_lo = rotr64_lo(xh, xl, 8);\\n var c2_lo = shr64_lo(xh, xl, 7);\\n\\n var r = c0_lo ^ c1_lo ^ c2_lo;\\n if (r < 0)\\n r += 0x100000000;\\n return r;\\n}\\n\\nfunction g1_512_hi(xh, xl) {\\n var c0_hi = rotr64_hi(xh, xl, 19);\\n var c1_hi = rotr64_hi(xl, xh, 29); // 61\\n var c2_hi = shr64_hi(xh, xl, 6);\\n\\n var r = c0_hi ^ c1_hi ^ c2_hi;\\n if (r < 0)\\n r += 0x100000000;\\n return r;\\n}\\n\\nfunction g1_512_lo(xh, xl) {\\n var c0_lo = rotr64_lo(xh, xl, 19);\\n var c1_lo = rotr64_lo(xl, xh, 29); // 61\\n var c2_lo = shr64_lo(xh, xl, 6);\\n\\n var r = c0_lo ^ c1_lo ^ c2_lo;\\n if (r < 0)\\n r += 0x100000000;\\n return r;\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/hash.js/lib/hash/sha/512.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/hash.js/lib/hash/sha/common.js\":\n/*!*****************************************************!*\\\n !*** ./node_modules/hash.js/lib/hash/sha/common.js ***!\n \\*****************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar utils = __webpack_require__(/*! ../utils */ \\\"./node_modules/hash.js/lib/hash/utils.js\\\");\\nvar rotr32 = utils.rotr32;\\n\\nfunction ft_1(s, x, y, z) {\\n if (s === 0)\\n return ch32(x, y, z);\\n if (s === 1 || s === 3)\\n return p32(x, y, z);\\n if (s === 2)\\n return maj32(x, y, z);\\n}\\nexports.ft_1 = ft_1;\\n\\nfunction ch32(x, y, z) {\\n return (x & y) ^ ((~x) & z);\\n}\\nexports.ch32 = ch32;\\n\\nfunction maj32(x, y, z) {\\n return (x & y) ^ (x & z) ^ (y & z);\\n}\\nexports.maj32 = maj32;\\n\\nfunction p32(x, y, z) {\\n return x ^ y ^ z;\\n}\\nexports.p32 = p32;\\n\\nfunction s0_256(x) {\\n return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\\n}\\nexports.s0_256 = s0_256;\\n\\nfunction s1_256(x) {\\n return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\\n}\\nexports.s1_256 = s1_256;\\n\\nfunction g0_256(x) {\\n return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);\\n}\\nexports.g0_256 = g0_256;\\n\\nfunction g1_256(x) {\\n return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);\\n}\\nexports.g1_256 = g1_256;\\n\\n\\n//# sourceURL=webpack:///./node_modules/hash.js/lib/hash/sha/common.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/hash.js/lib/hash/utils.js\":\n/*!************************************************!*\\\n !*** ./node_modules/hash.js/lib/hash/utils.js ***!\n \\************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar assert = __webpack_require__(/*! minimalistic-assert */ \\\"./node_modules/minimalistic-assert/index.js\\\");\\nvar inherits = __webpack_require__(/*! inherits */ \\\"./node_modules/inherits/inherits_browser.js\\\");\\n\\nexports.inherits = inherits;\\n\\nfunction isSurrogatePair(msg, i) {\\n if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\\n return false;\\n }\\n if (i < 0 || i + 1 >= msg.length) {\\n return false;\\n }\\n return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\\n}\\n\\nfunction toArray(msg, enc) {\\n if (Array.isArray(msg))\\n return msg.slice();\\n if (!msg)\\n return [];\\n var res = [];\\n if (typeof msg === 'string') {\\n if (!enc) {\\n // Inspired by stringToUtf8ByteArray() in closure-library by Google\\n // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\\n // Apache License 2.0\\n // https://github.com/google/closure-library/blob/master/LICENSE\\n var p = 0;\\n for (var i = 0; i < msg.length; i++) {\\n var c = msg.charCodeAt(i);\\n if (c < 128) {\\n res[p++] = c;\\n } else if (c < 2048) {\\n res[p++] = (c >> 6) | 192;\\n res[p++] = (c & 63) | 128;\\n } else if (isSurrogatePair(msg, i)) {\\n c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\\n res[p++] = (c >> 18) | 240;\\n res[p++] = ((c >> 12) & 63) | 128;\\n res[p++] = ((c >> 6) & 63) | 128;\\n res[p++] = (c & 63) | 128;\\n } else {\\n res[p++] = (c >> 12) | 224;\\n res[p++] = ((c >> 6) & 63) | 128;\\n res[p++] = (c & 63) | 128;\\n }\\n }\\n } else if (enc === 'hex') {\\n msg = msg.replace(/[^a-z0-9]+/ig, '');\\n if (msg.length % 2 !== 0)\\n msg = '0' + msg;\\n for (i = 0; i < msg.length; i += 2)\\n res.push(parseInt(msg[i] + msg[i + 1], 16));\\n }\\n } else {\\n for (i = 0; i < msg.length; i++)\\n res[i] = msg[i] | 0;\\n }\\n return res;\\n}\\nexports.toArray = toArray;\\n\\nfunction toHex(msg) {\\n var res = '';\\n for (var i = 0; i < msg.length; i++)\\n res += zero2(msg[i].toString(16));\\n return res;\\n}\\nexports.toHex = toHex;\\n\\nfunction htonl(w) {\\n var res = (w >>> 24) |\\n ((w >>> 8) & 0xff00) |\\n ((w << 8) & 0xff0000) |\\n ((w & 0xff) << 24);\\n return res >>> 0;\\n}\\nexports.htonl = htonl;\\n\\nfunction toHex32(msg, endian) {\\n var res = '';\\n for (var i = 0; i < msg.length; i++) {\\n var w = msg[i];\\n if (endian === 'little')\\n w = htonl(w);\\n res += zero8(w.toString(16));\\n }\\n return res;\\n}\\nexports.toHex32 = toHex32;\\n\\nfunction zero2(word) {\\n if (word.length === 1)\\n return '0' + word;\\n else\\n return word;\\n}\\nexports.zero2 = zero2;\\n\\nfunction zero8(word) {\\n if (word.length === 7)\\n return '0' + word;\\n else if (word.length === 6)\\n return '00' + word;\\n else if (word.length === 5)\\n return '000' + word;\\n else if (word.length === 4)\\n return '0000' + word;\\n else if (word.length === 3)\\n return '00000' + word;\\n else if (word.length === 2)\\n return '000000' + word;\\n else if (word.length === 1)\\n return '0000000' + word;\\n else\\n return word;\\n}\\nexports.zero8 = zero8;\\n\\nfunction join32(msg, start, end, endian) {\\n var len = end - start;\\n assert(len % 4 === 0);\\n var res = new Array(len / 4);\\n for (var i = 0, k = start; i < res.length; i++, k += 4) {\\n var w;\\n if (endian === 'big')\\n w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];\\n else\\n w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];\\n res[i] = w >>> 0;\\n }\\n return res;\\n}\\nexports.join32 = join32;\\n\\nfunction split32(msg, endian) {\\n var res = new Array(msg.length * 4);\\n for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\\n var m = msg[i];\\n if (endian === 'big') {\\n res[k] = m >>> 24;\\n res[k + 1] = (m >>> 16) & 0xff;\\n res[k + 2] = (m >>> 8) & 0xff;\\n res[k + 3] = m & 0xff;\\n } else {\\n res[k + 3] = m >>> 24;\\n res[k + 2] = (m >>> 16) & 0xff;\\n res[k + 1] = (m >>> 8) & 0xff;\\n res[k] = m & 0xff;\\n }\\n }\\n return res;\\n}\\nexports.split32 = split32;\\n\\nfunction rotr32(w, b) {\\n return (w >>> b) | (w << (32 - b));\\n}\\nexports.rotr32 = rotr32;\\n\\nfunction rotl32(w, b) {\\n return (w << b) | (w >>> (32 - b));\\n}\\nexports.rotl32 = rotl32;\\n\\nfunction sum32(a, b) {\\n return (a + b) >>> 0;\\n}\\nexports.sum32 = sum32;\\n\\nfunction sum32_3(a, b, c) {\\n return (a + b + c) >>> 0;\\n}\\nexports.sum32_3 = sum32_3;\\n\\nfunction sum32_4(a, b, c, d) {\\n return (a + b + c + d) >>> 0;\\n}\\nexports.sum32_4 = sum32_4;\\n\\nfunction sum32_5(a, b, c, d, e) {\\n return (a + b + c + d + e) >>> 0;\\n}\\nexports.sum32_5 = sum32_5;\\n\\nfunction sum64(buf, pos, ah, al) {\\n var bh = buf[pos];\\n var bl = buf[pos + 1];\\n\\n var lo = (al + bl) >>> 0;\\n var hi = (lo < al ? 1 : 0) + ah + bh;\\n buf[pos] = hi >>> 0;\\n buf[pos + 1] = lo;\\n}\\nexports.sum64 = sum64;\\n\\nfunction sum64_hi(ah, al, bh, bl) {\\n var lo = (al + bl) >>> 0;\\n var hi = (lo < al ? 1 : 0) + ah + bh;\\n return hi >>> 0;\\n}\\nexports.sum64_hi = sum64_hi;\\n\\nfunction sum64_lo(ah, al, bh, bl) {\\n var lo = al + bl;\\n return lo >>> 0;\\n}\\nexports.sum64_lo = sum64_lo;\\n\\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\\n var carry = 0;\\n var lo = al;\\n lo = (lo + bl) >>> 0;\\n carry += lo < al ? 1 : 0;\\n lo = (lo + cl) >>> 0;\\n carry += lo < cl ? 1 : 0;\\n lo = (lo + dl) >>> 0;\\n carry += lo < dl ? 1 : 0;\\n\\n var hi = ah + bh + ch + dh + carry;\\n return hi >>> 0;\\n}\\nexports.sum64_4_hi = sum64_4_hi;\\n\\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\\n var lo = al + bl + cl + dl;\\n return lo >>> 0;\\n}\\nexports.sum64_4_lo = sum64_4_lo;\\n\\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\\n var carry = 0;\\n var lo = al;\\n lo = (lo + bl) >>> 0;\\n carry += lo < al ? 1 : 0;\\n lo = (lo + cl) >>> 0;\\n carry += lo < cl ? 1 : 0;\\n lo = (lo + dl) >>> 0;\\n carry += lo < dl ? 1 : 0;\\n lo = (lo + el) >>> 0;\\n carry += lo < el ? 1 : 0;\\n\\n var hi = ah + bh + ch + dh + eh + carry;\\n return hi >>> 0;\\n}\\nexports.sum64_5_hi = sum64_5_hi;\\n\\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\\n var lo = al + bl + cl + dl + el;\\n\\n return lo >>> 0;\\n}\\nexports.sum64_5_lo = sum64_5_lo;\\n\\nfunction rotr64_hi(ah, al, num) {\\n var r = (al << (32 - num)) | (ah >>> num);\\n return r >>> 0;\\n}\\nexports.rotr64_hi = rotr64_hi;\\n\\nfunction rotr64_lo(ah, al, num) {\\n var r = (ah << (32 - num)) | (al >>> num);\\n return r >>> 0;\\n}\\nexports.rotr64_lo = rotr64_lo;\\n\\nfunction shr64_hi(ah, al, num) {\\n return ah >>> num;\\n}\\nexports.shr64_hi = shr64_hi;\\n\\nfunction shr64_lo(ah, al, num) {\\n var r = (ah << (32 - num)) | (al >>> num);\\n return r >>> 0;\\n}\\nexports.shr64_lo = shr64_lo;\\n\\n\\n//# sourceURL=webpack:///./node_modules/hash.js/lib/hash/utils.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/hmac-drbg/lib/hmac-drbg.js\":\n/*!*************************************************!*\\\n !*** ./node_modules/hmac-drbg/lib/hmac-drbg.js ***!\n \\*************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar hash = __webpack_require__(/*! hash.js */ \\\"./node_modules/hash.js/lib/hash.js\\\");\\nvar utils = __webpack_require__(/*! minimalistic-crypto-utils */ \\\"./node_modules/minimalistic-crypto-utils/lib/utils.js\\\");\\nvar assert = __webpack_require__(/*! minimalistic-assert */ \\\"./node_modules/minimalistic-assert/index.js\\\");\\n\\nfunction HmacDRBG(options) {\\n if (!(this instanceof HmacDRBG))\\n return new HmacDRBG(options);\\n this.hash = options.hash;\\n this.predResist = !!options.predResist;\\n\\n this.outLen = this.hash.outSize;\\n this.minEntropy = options.minEntropy || this.hash.hmacStrength;\\n\\n this._reseed = null;\\n this.reseedInterval = null;\\n this.K = null;\\n this.V = null;\\n\\n var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');\\n var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');\\n var pers = utils.toArray(options.pers, options.persEnc || 'hex');\\n assert(entropy.length >= (this.minEntropy / 8),\\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\\n this._init(entropy, nonce, pers);\\n}\\nmodule.exports = HmacDRBG;\\n\\nHmacDRBG.prototype._init = function init(entropy, nonce, pers) {\\n var seed = entropy.concat(nonce).concat(pers);\\n\\n this.K = new Array(this.outLen / 8);\\n this.V = new Array(this.outLen / 8);\\n for (var i = 0; i < this.V.length; i++) {\\n this.K[i] = 0x00;\\n this.V[i] = 0x01;\\n }\\n\\n this._update(seed);\\n this._reseed = 1;\\n this.reseedInterval = 0x1000000000000; // 2^48\\n};\\n\\nHmacDRBG.prototype._hmac = function hmac() {\\n return new hash.hmac(this.hash, this.K);\\n};\\n\\nHmacDRBG.prototype._update = function update(seed) {\\n var kmac = this._hmac()\\n .update(this.V)\\n .update([ 0x00 ]);\\n if (seed)\\n kmac = kmac.update(seed);\\n this.K = kmac.digest();\\n this.V = this._hmac().update(this.V).digest();\\n if (!seed)\\n return;\\n\\n this.K = this._hmac()\\n .update(this.V)\\n .update([ 0x01 ])\\n .update(seed)\\n .digest();\\n this.V = this._hmac().update(this.V).digest();\\n};\\n\\nHmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {\\n // Optional entropy enc\\n if (typeof entropyEnc !== 'string') {\\n addEnc = add;\\n add = entropyEnc;\\n entropyEnc = null;\\n }\\n\\n entropy = utils.toArray(entropy, entropyEnc);\\n add = utils.toArray(add, addEnc);\\n\\n assert(entropy.length >= (this.minEntropy / 8),\\n 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\\n\\n this._update(entropy.concat(add || []));\\n this._reseed = 1;\\n};\\n\\nHmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {\\n if (this._reseed > this.reseedInterval)\\n throw new Error('Reseed is required');\\n\\n // Optional encoding\\n if (typeof enc !== 'string') {\\n addEnc = add;\\n add = enc;\\n enc = null;\\n }\\n\\n // Optional additional data\\n if (add) {\\n add = utils.toArray(add, addEnc || 'hex');\\n this._update(add);\\n }\\n\\n var temp = [];\\n while (temp.length < len) {\\n this.V = this._hmac().update(this.V).digest();\\n temp = temp.concat(this.V);\\n }\\n\\n var res = temp.slice(0, len);\\n this._update(add);\\n this._reseed++;\\n return utils.encode(res, enc);\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/hmac-drbg/lib/hmac-drbg.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/https-did-resolver/lib/register.js\":\n/*!*********************************************************!*\\\n !*** ./node_modules/https-did-resolver/lib/register.js ***!\n \\*********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\\n return new (P || (P = Promise))(function (resolve, reject) {\\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\\n function rejected(value) { try { step(generator[\\\"throw\\\"](value)); } catch (e) { reject(e); } }\\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\\n step((generator = generator.apply(thisArg, _arguments || [])).next());\\n });\\n};\\nvar __generator = (this && this.__generator) || function (thisArg, body) {\\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\\n return g = { next: verb(0), \\\"throw\\\": verb(1), \\\"return\\\": verb(2) }, typeof Symbol === \\\"function\\\" && (g[Symbol.iterator] = function() { return this; }), g;\\n function verb(n) { return function (v) { return step([n, v]); }; }\\n function step(op) {\\n if (f) throw new TypeError(\\\"Generator is already executing.\\\");\\n while (_) try {\\n if (f = 1, y && (t = op[0] & 2 ? y[\\\"return\\\"] : op[0] ? y[\\\"throw\\\"] || ((t = y[\\\"return\\\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\\n if (y = 0, t) op = [op[0] & 2, t.value];\\n switch (op[0]) {\\n case 0: case 1: t = op; break;\\n case 4: _.label++; return { value: op[1], done: false };\\n case 5: _.label++; y = op[1]; op = [0]; continue;\\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\\n default:\\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\\n if (t[2]) _.ops.pop();\\n _.trys.pop(); continue;\\n }\\n op = body.call(thisArg, _);\\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\\n }\\n};\\nObject.defineProperty(exports, \\\"__esModule\\\", { value: true });\\nvar did_resolver_1 = __webpack_require__(/*! did-resolver */ \\\"./node_modules/did-resolver/lib/resolver.js\\\");\\nvar DOC_PATH = '/.well-known/did.json';\\nfunction get(url) {\\n return new Promise(function (resolve, reject) {\\n // declare XMLHttpRequest in here so it can be mocked for tests\\n var XMLHttpRequest = typeof window !== 'undefined'\\n ? window.XMLHttpRequest\\n : __webpack_require__(/*! xmlhttprequest */ 3).XMLHttpRequest;\\n var request = new XMLHttpRequest();\\n request.open('GET', url);\\n request.onreadystatechange = function () {\\n if (!request || request.readyState !== 4)\\n return;\\n if (request.status === 200) {\\n resolve(request.responseText);\\n }\\n else {\\n reject(new Error((\\\"Invalid http response status \\\" + request.status + \\\" \\\" + request.responseText).trim()));\\n }\\n };\\n request.setRequestHeader('accept', 'application/json');\\n request.send();\\n });\\n}\\nfunction register() {\\n function resolve(did, parsed) {\\n return __awaiter(this, void 0, void 0, function () {\\n var url, response, error_1, data, hasContext, docIdMatchesDid, docHasPublicKey;\\n return __generator(this, function (_a) {\\n switch (_a.label) {\\n case 0:\\n url = \\\"https://\\\" + parsed.id + DOC_PATH;\\n response = null;\\n _a.label = 1;\\n case 1:\\n _a.trys.push([1, 3, , 4]);\\n return [4 /*yield*/, get(url)];\\n case 2:\\n response = _a.sent();\\n return [3 /*break*/, 4];\\n case 3:\\n error_1 = _a.sent();\\n throw new Error(\\\"DID must resolve to a valid https URL: \\\" + error_1.message);\\n case 4:\\n data = null;\\n try {\\n data = JSON.parse(response);\\n }\\n catch (error) {\\n throw new Error('DID must resolve to a JSON document');\\n }\\n hasContext = data['@context'] === 'https://w3id.org/did/v1';\\n if (!hasContext)\\n throw new Error('DID document missing context');\\n docIdMatchesDid = data.id === did;\\n if (!docIdMatchesDid)\\n throw new Error('DID document id does not match requested did');\\n docHasPublicKey = Array.isArray(data.publicKey) && data.publicKey.length > 0;\\n if (!docHasPublicKey)\\n throw new Error('DID document has no public keys');\\n return [2 /*return*/, data];\\n }\\n });\\n });\\n }\\n did_resolver_1.registerMethod('https', resolve);\\n}\\nexports.default = register;\\n//# sourceMappingURL=register.js.map\\n\\n//# sourceURL=webpack:///./node_modules/https-did-resolver/lib/register.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ieee754/index.js\":\n/*!***************************************!*\\\n !*** ./node_modules/ieee754/index.js ***!\n \\***************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"exports.read = function (buffer, offset, isLE, mLen, nBytes) {\\n var e, m\\n var eLen = (nBytes * 8) - mLen - 1\\n var eMax = (1 << eLen) - 1\\n var eBias = eMax >> 1\\n var nBits = -7\\n var i = isLE ? (nBytes - 1) : 0\\n var d = isLE ? -1 : 1\\n var s = buffer[offset + i]\\n\\n i += d\\n\\n e = s & ((1 << (-nBits)) - 1)\\n s >>= (-nBits)\\n nBits += eLen\\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\\n\\n m = e & ((1 << (-nBits)) - 1)\\n e >>= (-nBits)\\n nBits += mLen\\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\\n\\n if (e === 0) {\\n e = 1 - eBias\\n } else if (e === eMax) {\\n return m ? NaN : ((s ? -1 : 1) * Infinity)\\n } else {\\n m = m + Math.pow(2, mLen)\\n e = e - eBias\\n }\\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\\n}\\n\\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\\n var e, m, c\\n var eLen = (nBytes * 8) - mLen - 1\\n var eMax = (1 << eLen) - 1\\n var eBias = eMax >> 1\\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\\n var i = isLE ? 0 : (nBytes - 1)\\n var d = isLE ? 1 : -1\\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\\n\\n value = Math.abs(value)\\n\\n if (isNaN(value) || value === Infinity) {\\n m = isNaN(value) ? 1 : 0\\n e = eMax\\n } else {\\n e = Math.floor(Math.log(value) / Math.LN2)\\n if (value * (c = Math.pow(2, -e)) < 1) {\\n e--\\n c *= 2\\n }\\n if (e + eBias >= 1) {\\n value += rt / c\\n } else {\\n value += rt * Math.pow(2, 1 - eBias)\\n }\\n if (value * c >= 2) {\\n e++\\n c /= 2\\n }\\n\\n if (e + eBias >= eMax) {\\n m = 0\\n e = eMax\\n } else if (e + eBias >= 1) {\\n m = ((value * c) - 1) * Math.pow(2, mLen)\\n e = e + eBias\\n } else {\\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\\n e = 0\\n }\\n }\\n\\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\\n\\n e = (e << mLen) | m\\n eLen += mLen\\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\\n\\n buffer[offset + i - d] |= s * 128\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/ieee754/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/inherits/inherits_browser.js\":\n/*!***************************************************!*\\\n !*** ./node_modules/inherits/inherits_browser.js ***!\n \\***************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"if (typeof Object.create === 'function') {\\n // implementation from standard node.js 'util' module\\n module.exports = function inherits(ctor, superCtor) {\\n ctor.super_ = superCtor\\n ctor.prototype = Object.create(superCtor.prototype, {\\n constructor: {\\n value: ctor,\\n enumerable: false,\\n writable: true,\\n configurable: true\\n }\\n });\\n };\\n} else {\\n // old school shim for old browsers\\n module.exports = function inherits(ctor, superCtor) {\\n ctor.super_ = superCtor\\n var TempCtor = function () {}\\n TempCtor.prototype = superCtor.prototype\\n ctor.prototype = new TempCtor()\\n ctor.prototype.constructor = ctor\\n }\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/inherits/inherits_browser.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipfs-did-document/index.js\":\n/*!*************************************************!*\\\n !*** ./node_modules/ipfs-did-document/index.js ***!\n \\*************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"const DID_PLACEHOLDER = 'GENESIS'\\n\\n/**\\n * A class for creating ipfs based DID Documents.\\n * Based on the DID spec: https://w3c-ccg.github.io/did-spec/\\n */\\nclass DidDocument {\\n /**\\n * Create a new DID Document.\\n *\\n * @param {Object} ipfs An js-ipfs instance\\n * @param {String} method The name of the DID Method\\n * @return {DidDocument} self\\n */\\n constructor (ipfs, method) {\\n this._ipfs = ipfs\\n this._content = {\\n id: `did:${method}:${DID_PLACEHOLDER}`\\n }\\n }\\n\\n get DID () {\\n if (this._content.id.includes(DID_PLACEHOLDER)) {\\n throw new Error('DID is not available before commit')\\n }\\n return this._content.id\\n }\\n\\n /**\\n * Load an already existing DID Document.\\n *\\n * @param {Object} ipfs An js-ipfs instance\\n * @param {String} documentCid The CID of the document\\n * @return {Promise<DidDocument>} self\\n */\\n static async load (ipfs, documentCid) {\\n const doc = new DidDocument(ipfs)\\n doc._content = await DidDocument.cidToDocument(ipfs, documentCid)\\n doc._content.previousDocument = { '/': documentCid.toString() }\\n return doc\\n }\\n\\n /**\\n * Add a new public key\\n *\\n * @param {String} id The id of the key, e.g. \\\"key1\\\"\\n * @param {String} type The type of the key\\n * @param {String} encoding The encoding of the key\\n * @param {String} key The encoded public key\\n * @param {String} owner The owner of the key (optional)\\n */\\n addPublicKey (id, type, encoding, key, owner) {\\n if (!this._content.publicKey) {\\n this._content.publicKey = []\\n }\\n let entry = {\\n id: `${this._content.id}#${id}`,\\n type\\n }\\n entry[encoding] = key\\n if (owner) {\\n entry.owner = owner\\n }\\n this._content.publicKey.push(entry)\\n }\\n\\n /**\\n * Remove a public key\\n *\\n * @param {String} id The id of the key, e.g. \\\"key1\\\"\\n */\\n removePublicKey (id) {\\n const idx = this._content.publicKey.findIndex(e => e.id.endsWith(id))\\n this._content.publicKey.splice(idx, 1)\\n if (!this._content.publicKey.length) {\\n delete this._content.publicKey\\n }\\n }\\n\\n /**\\n * Add a new authentication\\n *\\n * @param {String} type The type of the authentication\\n * @param {String} id The id of the key to be used, e.g. \\\"key1\\\"\\n */\\n addAuthentication (type, id) {\\n if (!this._content.authentication) {\\n this._content.authentication = []\\n }\\n this._content.authentication.push({\\n type,\\n publicKey: `${this._content.id}#${id}`\\n })\\n }\\n\\n /**\\n * Remove an authentication\\n *\\n * @param {String} id The id of the key, e.g. \\\"key1\\\"\\n */\\n removeAuthentication (id) {\\n const idx = this._content.authentication.findIndex(e => e.publicKey.endsWith(id))\\n this._content.authentication.splice(idx, 1)\\n if (!this._content.authentication.length) {\\n delete this._content.authentication\\n }\\n }\\n\\n /**\\n * Add a new service\\n *\\n * @param {String} id The id of the key to be used, e.g. \\\"key1\\\"\\n * @param {String} type The type of the service\\n * @param {String} serviceEndpoint The endpoint of the service\\n * @param {Object} additionalFields Any additional fields (optional)\\n */\\n addService (id, type, serviceEndpoint, additionalFields) {\\n if (!this._content.service) {\\n this._content.service = []\\n }\\n this._content.service.push(Object.assign({\\n id: `${this._content.id};${id}`,\\n type,\\n serviceEndpoint\\n }, additionalFields))\\n }\\n\\n /**\\n * Remove a service\\n *\\n * @param {String} id The id of the key, e.g. \\\"key1\\\"\\n */\\n removeService (id) {\\n const idx = this._content.service.findIndex(e => e.id.endsWith(id))\\n this._content.service.splice(idx, 1)\\n if (!this._content.service.length) {\\n delete this._content.service\\n }\\n }\\n\\n /**\\n * Set the revocationMethod. This can be of any js object\\n * and is determined by the implementer of a revocation module.\\n *\\n * @param {Object} methodDescriptor the object that defines the revocation method\\n */\\n setRevocationMethod (methodDescriptor) {\\n this._content.revocationMethod = methodDescriptor\\n }\\n\\n /**\\n * Add a new property\\n *\\n * @param {String} propName The name of the property\\n * @param {Object} propValue The value of the property\\n */\\n addCustomProperty (propName, propValue) {\\n this._content[propName] = propValue\\n }\\n\\n /**\\n * Remove a property\\n *\\n * @param {String} propName The name of the property\\n */\\n removeCustomProperty (propName) {\\n delete this._content[propName]\\n }\\n\\n /**\\n * Commit all changes and create a new ipfs dag object.\\n *\\n * @param {Object} opts Optional parameters\\n * @param {Boolean} noTimestamp Don't use timestamps if true\\n *\\n * @return {Promise<CID>} The CID of the object\\n */\\n async commit (opts = {}) {\\n if (!this._content.created) {\\n this._content['@context'] = 'https://w3id.org/did/v1'\\n if (!opts.noTimestamp) {\\n this._content.created = (new Date(Date.now())).toISOString()\\n }\\n } else if (!opts.noTimestamp) {\\n this._content.updated = (new Date(Date.now())).toISOString()\\n }\\n const cid = await this._ipfs.dag.put(this._content, { format: 'dag-cbor', hashAlg: 'sha2-256' })\\n // set up for further changes:\\n this._content = await DidDocument.cidToDocument(this._ipfs, cid)\\n this._content.previousDocument = { '/': cid.toString() }\\n return cid\\n }\\n\\n /**\\n * Returns the DID document of a document CID\\n *\\n * @param {Object} ipfs An js-ipfs instance\\n * @param {String} documentCid The CID of the document\\n * @return {Promise<Object>} The DID document as a js object\\n */\\n static async cidToDocument (ipfs, documentCid) {\\n let doc = (await ipfs.dag.get(documentCid)).value\\n // If genesis document replace placeholder identifier with cid\\n if (doc.id.includes(DID_PLACEHOLDER)) {\\n const re = new RegExp(DID_PLACEHOLDER, 'gi')\\n doc.id = doc.id.replace(re, documentCid)\\n if (doc.publicKey) {\\n doc.publicKey = JSON.parse(JSON.stringify(doc.publicKey).replace(re, documentCid))\\n }\\n if (doc.authentication) {\\n doc.authentication = JSON.parse(JSON.stringify(doc.authentication).replace(re, documentCid))\\n }\\n if (doc.service) {\\n doc.service = JSON.parse(JSON.stringify(doc.service).replace(re, documentCid))\\n }\\n }\\n if (doc.previousDocument) {\\n // make CID human readable\\n doc.previousDocument = { '/': doc.previousDocument.toString() }\\n }\\n return doc\\n }\\n}\\n\\nmodule.exports = DidDocument\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipfs-did-document/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipfs-log/src/default-access-controller.js\":\n/*!****************************************************************!*\\\n !*** ./node_modules/ipfs-log/src/default-access-controller.js ***!\n \\****************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nclass AccessController {\\n async canAppend (entry, identityProvider) {\\n return true\\n }\\n}\\n\\nmodule.exports = AccessController\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipfs-log/src/default-access-controller.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipfs-log/src/entry-index.js\":\n/*!**************************************************!*\\\n !*** ./node_modules/ipfs-log/src/entry-index.js ***!\n \\**************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nclass EntryIndex {\\n constructor (entries = {}) {\\n this._cache = entries\\n }\\n\\n set (k, v) {\\n this._cache[k] = v\\n }\\n\\n get (k) {\\n return this._cache[k]\\n }\\n\\n delete (k) {\\n return delete this._cache[k]\\n }\\n\\n add (newItems) {\\n this._cache = Object.assign(this._cache, newItems)\\n }\\n\\n get length () {\\n return Object.values(this._cache).length\\n }\\n}\\n\\nmodule.exports = EntryIndex\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipfs-log/src/entry-index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipfs-log/src/entry-io.js\":\n/*!***********************************************!*\\\n !*** ./node_modules/ipfs-log/src/entry-io.js ***!\n \\***********************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst pMap = __webpack_require__(/*! p-map */ \\\"./node_modules/p-map/index.js\\\")\\nconst pDoWhilst = __webpack_require__(/*! p-do-whilst */ \\\"./node_modules/p-do-whilst/index.js\\\")\\nconst Entry = __webpack_require__(/*! ./entry */ \\\"./node_modules/ipfs-log/src/entry.js\\\")\\n\\nconst hasItems = arr => arr && arr.length > 0\\n\\nclass EntryIO {\\n // Fetch log graphs in parallel\\n static async fetchParallel (ipfs, hashes, { length, exclude = [], timeout, concurrency, onProgressCallback }) {\\n const fetchOne = async (hash) => EntryIO.fetchAll(ipfs, hash, { length, exclude, timeout, onProgressCallback, concurrency })\\n const concatArrays = (arr1, arr2) => arr1.concat(arr2)\\n const flatten = (arr) => arr.reduce(concatArrays, [])\\n const res = await pMap(hashes, fetchOne, { concurrency: Math.max(concurrency || hashes.length, 1) })\\n return flatten(res)\\n }\\n\\n /**\\n * Fetch log entries\\n *\\n * @param {IPFS} [ipfs] An IPFS instance\\n * @param {string} [hash] Multihash of the entry to fetch\\n * @param {string} [parent] Parent of the node to be fetched\\n * @param {Object} [all] Entries to skip\\n * @param {Number} [amount=-1] How many entries to fetch\\n * @param {Number} [depth=0] Current depth of the recursion\\n * @param {function(hash, entry, parent, depth)} onProgressCallback\\n * @returns {Promise<Array<Entry>>}\\n */\\n static async fetchAll (ipfs, hashes, { length = -1, exclude = [], timeout, onProgressCallback, onStartProgressCallback, concurrency = 32, delay = 0 } = {}) {\\n let result = []\\n let cache = {}\\n let loadingCache = {}\\n let loadingQueue = Array.isArray(hashes)\\n ? { 0: hashes.slice() }\\n : { 0: [hashes] }\\n let running = 0 // keep track of how many entries are being fetched at any time\\n let maxClock = 0 // keep track of the latest clock time during load\\n let minClock = 0 // keep track of the minimum clock time during load\\n\\n // Does the loading queue have more to process?\\n const loadingQueueHasMore = () => Object.values(loadingQueue).find(hasItems) !== undefined\\n\\n // Add a multihash to the loading queue\\n const addToLoadingQueue = (e, idx) => {\\n if (!loadingCache[e]) {\\n if (!loadingQueue[idx]) loadingQueue[idx] = []\\n if (!loadingQueue[idx].includes(e)) {\\n loadingQueue[idx].push(e)\\n }\\n loadingCache[e] = true\\n }\\n }\\n\\n // Get the next items to process from the loading queue\\n const getNextFromQueue = (length = 1) => {\\n const getNext = (res, key, idx) => {\\n const nextItems = loadingQueue[key]\\n while (nextItems.length > 0 && res.length < length) {\\n const hash = nextItems.shift()\\n res.push(hash)\\n }\\n if (nextItems.length === 0) {\\n delete loadingQueue[key]\\n }\\n return res\\n }\\n return Object.keys(loadingQueue).reduce(getNext, [])\\n }\\n\\n // Add entries that we don't need to fetch to the \\\"cache\\\"\\n const addToExcludeCache = e => { cache[e.hash] = true }\\n\\n // Fetch one entry and add it to the results\\n const fetchEntry = async (hash) => {\\n if (!hash || cache[hash]) {\\n return\\n }\\n\\n return new Promise(async (resolve, reject) => {\\n // Resolve the promise after a timeout (if given) in order to\\n // not get stuck loading a block that is unreachable\\n const timer = timeout && timeout > 0\\n ? setTimeout(() => {\\n console.warn(`Warning: Couldn't fetch entry '${hash}', request timed out (${timeout}ms)`)\\n resolve()\\n }, timeout)\\n : null\\n\\n const addToResults = (entry) => {\\n if (Entry.isEntry(entry)) {\\n const ts = entry.clock.time\\n\\n // Update min/max clocks\\n maxClock = Math.max(maxClock, ts)\\n minClock = result.length > 0\\n ? Math.min(result[result.length - 1].clock.time, minClock)\\n : maxClock\\n\\n const isLater = (result.length >= length && ts >= minClock)\\n const calculateIndex = (idx) => maxClock - ts + ((idx + 1) * idx)\\n\\n // Add the entry to the results if\\n // 1) we're fetching all entries\\n // 2) results is not filled yet\\n // the clock of the entry is later than current known minimum clock time\\n if (length < 0 || result.length < length || isLater) {\\n result.push(entry)\\n cache[hash] = true\\n\\n if (onProgressCallback) {\\n onProgressCallback(hash, entry, result.length, result.length)\\n }\\n }\\n\\n if (length < 0) {\\n // If we're fetching all entries (length === -1), adds nexts and refs to the queue\\n entry.next.forEach(addToLoadingQueue)\\n if (entry.refs) entry.refs.forEach(addToLoadingQueue)\\n } else {\\n // If we're fetching entries up to certain length,\\n // fetch the next if result is filled up, to make sure we \\\"check\\\"\\n // the next entry if its clock is later than what we have in the result\\n if (result.length < length || ts > minClock || (ts === minClock && !cache[entry.hash])) {\\n entry.next.forEach(e => addToLoadingQueue(e, calculateIndex(0)))\\n }\\n if (entry.refs && (result.length + entry.refs.length <= length)) {\\n entry.refs.forEach((e, i) => addToLoadingQueue(e, calculateIndex(i)))\\n }\\n }\\n }\\n }\\n\\n if (onStartProgressCallback) {\\n onStartProgressCallback(hash, null, 0, result.length)\\n }\\n\\n try {\\n // Load the entry\\n const entry = await Entry.fromMultihash(ipfs, hash)\\n\\n // Add it to the results\\n addToResults(entry)\\n\\n // Simulate network latency (for debugging purposes)\\n if (delay > 0) {\\n const sleep = (ms = 0) => new Promise(resolve => setTimeout(resolve, ms))\\n await sleep(delay)\\n }\\n resolve()\\n } catch (e) {\\n reject(e)\\n } finally {\\n clearTimeout(timer)\\n }\\n })\\n }\\n\\n // One loop of processing the loading queue\\n const _processQueue = async () => {\\n if (running < concurrency) {\\n const nexts = getNextFromQueue(concurrency)\\n running += nexts.length\\n await pMap(nexts, fetchEntry)\\n running -= nexts.length\\n }\\n }\\n\\n // Add entries to exclude from processing to the cache before we start\\n exclude.forEach(addToExcludeCache)\\n\\n // Fetch entries\\n await pDoWhilst(_processQueue, loadingQueueHasMore)\\n\\n return result\\n }\\n}\\n\\nmodule.exports = EntryIO\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipfs-log/src/entry-io.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipfs-log/src/entry.js\":\n/*!********************************************!*\\\n !*** ./node_modules/ipfs-log/src/entry.js ***!\n \\********************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {\\n\\nconst Clock = __webpack_require__(/*! ./lamport-clock */ \\\"./node_modules/ipfs-log/src/lamport-clock.js\\\")\\nconst { isDefined, io } = __webpack_require__(/*! ./utils */ \\\"./node_modules/ipfs-log/src/utils/index.js\\\")\\nconst stringify = __webpack_require__(/*! json-stringify-deterministic */ \\\"./node_modules/json-stringify-deterministic/lib/index.js\\\")\\nconst IpfsNotDefinedError = () => new Error('Ipfs instance not defined')\\nconst IPLD_LINKS = ['next', 'refs']\\nconst getWriteFormatForVersion = v => v === 0 ? 'dag-pb' : 'dag-cbor'\\nconst getWriteFormat = e => Entry.isEntry(e) ? getWriteFormatForVersion(e.v) : getWriteFormatForVersion(e)\\n\\nclass Entry {\\n /**\\n * Create an Entry\\n * @param {IPFS} ipfs An IPFS instance\\n * @param {Identity} identity The identity instance\\n * @param {string} logId The unique identifier for this log\\n * @param {*} data Data of the entry to be added. Can be any JSON.stringifyable data\\n * @param {Array<string|Entry>} [next=[]] Parent hashes or entries\\n * @param {LamportClock} [clock] The lamport clock\\n * @returns {Promise<Entry>}\\n * @example\\n * const entry = await Entry.create(ipfs, identity, 'hello')\\n * console.log(entry)\\n * // { hash: null, payload: \\\"hello\\\", next: [] }\\n */\\n static async create (ipfs, identity, logId, data, next = [], clock, refs = [], pin) {\\n if (!isDefined(ipfs)) throw IpfsNotDefinedError()\\n if (!isDefined(identity)) throw new Error('Identity is required, cannot create entry')\\n if (!isDefined(logId)) throw new Error('Entry requires an id')\\n if (!isDefined(data)) throw new Error('Entry requires data')\\n if (!isDefined(next) || !Array.isArray(next)) throw new Error(\\\"'next' argument is not an array\\\")\\n\\n // Clean the next objects and convert to hashes\\n const toEntry = (e) => e.hash ? e.hash : e\\n const nexts = next.filter(isDefined).map(toEntry)\\n\\n const entry = {\\n hash: null, // \\\"zd...Foo\\\", we'll set the hash after persisting the entry\\n id: logId, // For determining a unique chain\\n payload: data, // Can be any JSON.stringifyable data\\n next: nexts, // Array of hashes\\n refs: refs,\\n v: 2, // To tag the version of this data structure\\n clock: clock || new Clock(identity.publicKey)\\n }\\n\\n const signature = await identity.provider.sign(identity, Entry.toBuffer(entry))\\n\\n entry.key = identity.publicKey\\n entry.identity = identity.toJSON()\\n entry.sig = signature\\n entry.hash = await Entry.toMultihash(ipfs, entry, pin)\\n\\n return entry\\n }\\n\\n /**\\n * Verifies an entry signature.\\n *\\n * @param {IdentityProvider} identityProvider The identity provider to use\\n * @param {Entry} entry The entry being verified\\n * @return {Promise} A promise that resolves to a boolean value indicating if the signature is valid\\n */\\n static async verify (identityProvider, entry) {\\n if (!identityProvider) throw new Error('Identity-provider is required, cannot verify entry')\\n if (!Entry.isEntry(entry)) throw new Error('Invalid Log entry')\\n if (!entry.key) throw new Error(\\\"Entry doesn't have a key\\\")\\n if (!entry.sig) throw new Error(\\\"Entry doesn't have a signature\\\")\\n\\n const e = Entry.toEntry(entry, { presigned: true })\\n const verifier = entry.v < 1 ? 'v0' : 'v1'\\n return identityProvider.verify(entry.sig, entry.key, Entry.toBuffer(e), verifier)\\n }\\n\\n /**\\n * Transforms an entry into a Buffer.\\n * @param {Entry} entry The entry\\n * @return {Buffer} The buffer\\n */\\n static toBuffer (entry) {\\n const stringifiedEntry = entry.v === 0 ? JSON.stringify(entry) : stringify(entry)\\n return Buffer.from(stringifiedEntry)\\n }\\n\\n /**\\n * Get the multihash of an Entry.\\n * @param {IPFS} ipfs An IPFS instance\\n * @param {Entry} entry Entry to get a multihash for\\n * @returns {Promise<string>}\\n * @example\\n * const multihash = await Entry.toMultihash(ipfs, entry)\\n * console.log(multihash)\\n * // \\\"Qm...Foo\\\"\\n * @deprecated\\n */\\n static async toMultihash (ipfs, entry, pin = false) {\\n if (!ipfs) throw IpfsNotDefinedError()\\n if (!Entry.isEntry(entry)) throw new Error('Invalid object format, cannot generate entry hash')\\n\\n // // Ensure `entry` follows the correct format\\n const e = Entry.toEntry(entry)\\n return io.write(ipfs, getWriteFormat(e.v), e, { links: IPLD_LINKS, pin })\\n }\\n\\n static toEntry (entry, { presigned = false, includeHash = false } = {}) {\\n const e = {\\n hash: includeHash ? entry.hash : null,\\n id: entry.id,\\n payload: entry.payload,\\n next: entry.next\\n }\\n\\n const v = entry.v\\n if (v > 1) {\\n e.refs = entry.refs // added in v2\\n }\\n e.v = entry.v\\n e.clock = new Clock(entry.clock.id, entry.clock.time)\\n\\n if (presigned) {\\n return e // don't include key/sig information\\n }\\n\\n e.key = entry.key\\n if (v > 0) {\\n e.identity = entry.identity // added in v1\\n }\\n e.sig = entry.sig\\n return e\\n }\\n\\n /**\\n * Create an Entry from a hash.\\n * @param {IPFS} ipfs An IPFS instance\\n * @param {string} hash The hash to create an Entry from\\n * @returns {Promise<Entry>}\\n * @example\\n * const entry = await Entry.fromMultihash(ipfs, \\\"zd...Foo\\\")\\n * console.log(entry)\\n * // { hash: \\\"Zd...Foo\\\", payload: \\\"hello\\\", next: [] }\\n */\\n static async fromMultihash (ipfs, hash) {\\n if (!ipfs) throw IpfsNotDefinedError()\\n if (!hash) throw new Error(`Invalid hash: ${hash}`)\\n const e = await io.read(ipfs, hash, { links: IPLD_LINKS })\\n\\n const entry = Entry.toEntry(e)\\n entry.hash = hash\\n\\n return entry\\n }\\n\\n /**\\n * Check if an object is an Entry.\\n * @param {Entry} obj\\n * @returns {boolean}\\n */\\n static isEntry (obj) {\\n return obj && obj.id !== undefined &&\\n obj.next !== undefined &&\\n obj.payload !== undefined &&\\n obj.v !== undefined &&\\n obj.hash !== undefined &&\\n obj.clock !== undefined &&\\n (obj.refs !== undefined || obj.v < 2) // 'refs' added in v2\\n }\\n\\n /**\\n * Compares two entries.\\n * @param {Entry} a\\n * @param {Entry} b\\n * @returns {number} 1 if a is greater, -1 is b is greater\\n */\\n static compare (a, b) {\\n var distance = Clock.compare(a.clock, b.clock)\\n if (distance === 0) return a.clock.id < b.clock.id ? -1 : 1\\n return distance\\n }\\n\\n /**\\n * Check if an entry equals another entry.\\n * @param {Entry} a\\n * @param {Entry} b\\n * @returns {boolean}\\n */\\n static isEqual (a, b) {\\n return a.hash === b.hash\\n }\\n\\n /**\\n * Check if an entry is a parent to another entry.\\n * @param {Entry} entry1 Entry to check\\n * @param {Entry} entry2 The parent Entry\\n * @returns {boolean}\\n */\\n static isParent (entry1, entry2) {\\n return entry2.next.indexOf(entry1.hash) > -1\\n }\\n\\n /**\\n * Find entry's children from an Array of entries.\\n * Returns entry's children as an Array up to the last know child.\\n * @param {Entry} entry Entry for which to find the parents\\n * @param {Array<Entry>} values Entries to search parents from\\n * @returns {Array<Entry>}\\n */\\n static findChildren (entry, values) {\\n var stack = []\\n var parent = values.find((e) => Entry.isParent(entry, e))\\n var prev = entry\\n while (parent) {\\n stack.push(parent)\\n prev = parent\\n parent = values.find((e) => Entry.isParent(prev, e))\\n }\\n stack = stack.sort((a, b) => a.clock.time > b.clock.time)\\n return stack\\n }\\n}\\n\\nmodule.exports = Entry\\nmodule.exports.IPLD_LINKS = IPLD_LINKS\\nmodule.exports.getWriteFormat = getWriteFormat\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/ipfs-log/src/entry.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipfs-log/src/g-set.js\":\n/*!********************************************!*\\\n !*** ./node_modules/ipfs-log/src/g-set.js ***!\n \\********************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\n/**\\n * Interface for G-Set CRDT\\n *\\n * From:\\n * \\\"A comprehensive study of Convergent and Commutative Replicated Data Types\\\"\\n * https://hal.inria.fr/inria-00555588\\n */\\nclass GSet {\\n constructor (values) {} // eslint-disable-line\\n append (value) {}\\n merge (set) {}\\n get (value) {}\\n has (value) {}\\n get values () {}\\n get length () {}\\n}\\n\\nmodule.exports = GSet\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipfs-log/src/g-set.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipfs-log/src/lamport-clock.js\":\n/*!****************************************************!*\\\n !*** ./node_modules/ipfs-log/src/lamport-clock.js ***!\n \\****************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nclass LamportClock {\\n constructor (id, time) {\\n this.id = id\\n this.time = time || 0\\n }\\n\\n tick () {\\n return new LamportClock(this.id, ++this.time)\\n }\\n\\n merge (clock) {\\n this.time = Math.max(this.time, clock.time)\\n return new LamportClock(this.id, this.time)\\n }\\n\\n clone () {\\n return new LamportClock(this.id, this.time)\\n }\\n\\n static compare (a, b) {\\n // Calculate the \\\"distance\\\" based on the clock, ie. lower or greater\\n var dist = a.time - b.time\\n\\n // If the sequence number is the same (concurrent events),\\n // and the IDs are different, take the one with a \\\"lower\\\" id\\n if (dist === 0 && a.id !== b.id) return a.id < b.id ? -1 : 1\\n\\n return dist\\n }\\n}\\n\\nmodule.exports = LamportClock\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipfs-log/src/lamport-clock.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipfs-log/src/log-errors.js\":\n/*!*************************************************!*\\\n !*** ./node_modules/ipfs-log/src/log-errors.js ***!\n \\*************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst IPFSNotDefinedError = () => new Error('IPFS instance not defined')\\nconst LogNotDefinedError = () => new Error('Log instance not defined')\\nconst NotALogError = () => new Error('Given argument is not an instance of Log')\\nconst CannotJoinWithDifferentId = () => new Error('Can\\\\'t join logs with different IDs')\\nconst LtOrLteMustBeStringOrArray = () => new Error('lt or lte must be a string or array of Entries')\\n\\nmodule.exports = {\\n IPFSNotDefinedError: IPFSNotDefinedError,\\n LogNotDefinedError: LogNotDefinedError,\\n NotALogError: NotALogError,\\n CannotJoinWithDifferentId: CannotJoinWithDifferentId,\\n LtOrLteMustBeStringOrArray: LtOrLteMustBeStringOrArray\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipfs-log/src/log-errors.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipfs-log/src/log-io.js\":\n/*!*********************************************!*\\\n !*** ./node_modules/ipfs-log/src/log-io.js ***!\n \\*********************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst Entry = __webpack_require__(/*! ./entry */ \\\"./node_modules/ipfs-log/src/entry.js\\\")\\nconst EntryIO = __webpack_require__(/*! ./entry-io */ \\\"./node_modules/ipfs-log/src/entry-io.js\\\")\\nconst Sorting = __webpack_require__(/*! ./log-sorting */ \\\"./node_modules/ipfs-log/src/log-sorting.js\\\")\\nconst { LastWriteWins, NoZeroes } = Sorting\\nconst LogError = __webpack_require__(/*! ./log-errors */ \\\"./node_modules/ipfs-log/src/log-errors.js\\\")\\nconst { isDefined, findUniques, difference, io } = __webpack_require__(/*! ./utils */ \\\"./node_modules/ipfs-log/src/utils/index.js\\\")\\n\\nconst IPLD_LINKS = ['heads']\\nconst last = (arr, n) => arr.slice(arr.length - Math.min(arr.length, n), arr.length)\\n\\nclass LogIO {\\n //\\n /**\\n * Get the multihash of a Log.\\n * @param {IPFS} ipfs An IPFS instance\\n * @param {Log} log Log to get a multihash for\\n * @returns {Promise<string>}\\n * @deprecated\\n */\\n static async toMultihash (ipfs, log, { format } = {}) {\\n if (!isDefined(ipfs)) throw LogError.IPFSNotDefinedError()\\n if (!isDefined(log)) throw LogError.LogNotDefinedError()\\n if (!isDefined(format)) format = 'dag-cbor'\\n if (log.values.length < 1) throw new Error(`Can't serialize an empty log`)\\n\\n return io.write(ipfs, format, log.toJSON(), { links: IPLD_LINKS })\\n }\\n\\n /**\\n * Create a log from a hashes.\\n * @param {IPFS} ipfs An IPFS instance\\n * @param {string} hash The hash of the log\\n * @param {Object} options\\n * @param {number} options.length How many items to include in the log\\n * @param {Array<Entry>} options.exclude Entries to not fetch (cached)\\n * @param {function(hash, entry, parent, depth)} options.onProgressCallback\\n */\\n static async fromMultihash (ipfs, hash,\\n { length = -1, exclude = [], timeout, concurrency, sortFn, onProgressCallback }) {\\n if (!isDefined(ipfs)) throw LogError.IPFSNotDefinedError()\\n if (!isDefined(hash)) throw new Error(`Invalid hash: ${hash}`)\\n\\n const logData = await io.read(ipfs, hash, { links: IPLD_LINKS })\\n\\n if (!logData.heads || !logData.id) throw LogError.NotALogError()\\n\\n // Use user provided sorting function or the default one\\n sortFn = sortFn || NoZeroes(LastWriteWins)\\n const isHead = e => logData.heads.includes(e.hash)\\n\\n const all = await EntryIO.fetchAll(ipfs, logData.heads,\\n { length, exclude, timeout, concurrency, onProgressCallback })\\n\\n const logId = logData.id\\n const entries = length > -1 ? last(all.sort(sortFn), length) : all\\n const heads = entries.filter(isHead)\\n return { logId, entries, heads }\\n }\\n\\n /**\\n * Create a log from an entry hash.\\n * @param {IPFS} ipfs An IPFS instance\\n * @param {string} hash The hash of the entry\\n * @param {Object} options\\n * @param {number} options.length How many items to include in the log\\n * @param {Array<Entry>} options.exclude Entries to not fetch (cached)\\n * @param {function(hash, entry, parent, depth)} options.onProgressCallback\\n */\\n static async fromEntryHash (ipfs, hash,\\n { length = -1, exclude = [], timeout, concurrency, sortFn, onProgressCallback }) {\\n if (!isDefined(ipfs)) throw LogError.IpfsNotDefinedError()\\n if (!isDefined(hash)) throw new Error(\\\"'hash' must be defined\\\")\\n // Convert input hash(s) to an array\\n const hashes = Array.isArray(hash) ? hash : [hash]\\n // Fetch given length, return size at least the given input entries\\n length = length > -1 ? Math.max(length, 1) : length\\n const all = await EntryIO.fetchParallel(ipfs, hashes,\\n { length, exclude, timeout, concurrency, onProgressCallback })\\n // Cap the result at the right size by taking the last n entries,\\n // or if given length is -1, then take all\\n sortFn = sortFn || NoZeroes(LastWriteWins)\\n const entries = length > -1 ? last(all.sort(sortFn), length) : all\\n return { entries }\\n }\\n\\n /**\\n * Creates a log data from a JSON object, to be passed to a Log constructor\\n *\\n * @param {IPFS} ipfs An IPFS instance\\n * @param {json} json A json object containing valid log data\\n * @param {Object} options\\n * @param {number} options.length How many entries to include\\n * @param {function(hash, entry, parent, depth)} options.onProgressCallback\\n **/\\n static async fromJSON (ipfs, json, { length = -1, timeout, concurrency, onProgressCallback }) {\\n if (!isDefined(ipfs)) throw LogError.IPFSNotDefinedError()\\n const { id, heads } = json\\n const headHashes = heads.map(e => e.hash)\\n const all = await EntryIO.fetchParallel(ipfs, headHashes,\\n { length, timeout, concurrency, onProgressCallback })\\n const entries = all.sort(Entry.compare)\\n return { logId: id, entries, heads }\\n }\\n\\n /**\\n * Create a new log starting from an entry.\\n * @param {IPFS} ipfs An IPFS instance\\n * @param {Entry|Array<Entry>} sourceEntries An entry or an array of entries to fetch a log from\\n * @param {Object} options\\n * @param {number} options.length How many entries to include\\n * @param {Array<Entry>} options.exclude Entries to not fetch (cached)\\n * @param {function(hash, entry, parent, depth)} options.onProgressCallback\\n */\\n static async fromEntry (ipfs, sourceEntries,\\n { length = -1, exclude = [], timeout, concurrency, onProgressCallback }) {\\n if (!isDefined(ipfs)) throw LogError.IPFSNotDefinedError()\\n if (!isDefined(sourceEntries)) throw new Error(\\\"'sourceEntries' must be defined\\\")\\n\\n // Make sure we only have Entry objects as input\\n if (!Array.isArray(sourceEntries) && !Entry.isEntry(sourceEntries)) {\\n throw new Error(`'sourceEntries' argument must be an array of Entry instances or a single Entry`)\\n }\\n\\n if (!Array.isArray(sourceEntries)) {\\n sourceEntries = [sourceEntries]\\n }\\n\\n // Fetch given length, return size at least the given input entries\\n length = length > -1 ? Math.max(length, sourceEntries.length) : length\\n\\n // Make sure we pass hashes instead of objects to the fetcher function\\n const hashes = sourceEntries.map(e => e.hash)\\n\\n // Fetch the entries\\n const all = await EntryIO.fetchParallel(ipfs, hashes,\\n { length, exclude, timeout, concurrency, onProgressCallback })\\n\\n // Combine the fetches with the source entries and take only uniques\\n const combined = sourceEntries.concat(all).concat(exclude)\\n const uniques = findUniques(combined, 'hash').sort(Entry.compare)\\n\\n // Cap the result at the right size by taking the last n entries\\n const sliced = uniques.slice(length > -1 ? -length : -uniques.length)\\n\\n // Make sure that the given input entries are present in the result\\n // in order to not lose references\\n const missingSourceEntries = difference(sliced, sourceEntries, 'hash')\\n\\n const replaceInFront = (a, withEntries) => {\\n var sliced = a.slice(withEntries.length, a.length)\\n return withEntries.concat(sliced)\\n }\\n\\n // Add the input entries at the beginning of the array and remove\\n // as many elements from the array before inserting the original entries\\n const entries = replaceInFront(sliced, missingSourceEntries)\\n const logId = entries[entries.length - 1].id\\n return { logId, entries }\\n }\\n}\\n\\nmodule.exports = LogIO\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipfs-log/src/log-io.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipfs-log/src/log-sorting.js\":\n/*!**************************************************!*\\\n !*** ./node_modules/ipfs-log/src/log-sorting.js ***!\n \\**************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst Clock = __webpack_require__(/*! ./lamport-clock */ \\\"./node_modules/ipfs-log/src/lamport-clock.js\\\")\\n\\n/**\\n * Sort two entries as Last-Write-Wins (LWW).\\n *\\n * Last Write Wins is a conflict resolution strategy for sorting elements\\n * where the element with a greater clock (latest) is chosen as the winner.\\n *\\n * @param {Entry} a First entry\\n * @param {Entry} b Second entry\\n * @returns {number} 1 if a is latest, -1 if b is latest\\n */\\nfunction LastWriteWins (a, b) {\\n // Ultimate conflict resolution (take the first/left arg)\\n const First = (a, b) => a\\n // Sort two entries by their clock id, if the same always take the first\\n const sortById = (a, b) => SortByClockId(a, b, First)\\n // Sort two entries by their clock time, if concurrent,\\n // determine sorting using provided conflict resolution function\\n const sortByEntryClocks = (a, b) => SortByClocks(a, b, sortById)\\n // Sort entries by clock time as the primary sort criteria\\n return sortByEntryClocks(a, b)\\n}\\n\\n/**\\n * Sort two entries by their hash.\\n *\\n * @param {Entry} a First entry\\n * @param {Entry} b Second entry\\n * @returns {number} 1 if a is latest, -1 if b is latest\\n */\\nfunction SortByEntryHash (a, b) {\\n // Ultimate conflict resolution (compare hashes)\\n const compareHash = (a, b) => a.hash < b.hash ? -1 : 1\\n // Sort two entries by their clock id, if the same then compare hashes\\n const sortById = (a, b) => SortByClockId(a, b, compareHash)\\n // Sort two entries by their clock time, if concurrent,\\n // determine sorting using provided conflict resolution function\\n const sortByEntryClocks = (a, b) => SortByClocks(a, b, sortById)\\n // Sort entries by clock time as the primary sort criteria\\n return sortByEntryClocks(a, b)\\n}\\n\\n/**\\n * Sort two entries by their clock time.\\n * @param {Entry} a First entry to compare\\n * @param {Entry} b Second entry to compare\\n * @param {function(a, b)} resolveConflict A function to call if entries are concurrent (happened at the same time). The function should take in two entries and return 1 if the first entry should be chosen and -1 if the second entry should be chosen.\\n * @returns {number} 1 if a is greater, -1 if b is greater\\n */\\nfunction SortByClocks (a, b, resolveConflict) {\\n // Compare the clocks\\n const diff = Clock.compare(a.clock, b.clock)\\n // If the clocks are concurrent, use the provided\\n // conflict resolution function to determine which comes first\\n return diff === 0 ? resolveConflict(a, b) : diff\\n}\\n\\n/**\\n * Sort two entries by their clock id.\\n * @param {Entry} a First entry to compare\\n * @param {Entry} b Second entry to compare\\n * @param {function(a, b)} resolveConflict A function to call if the clocks ids are the same. The function should take in two entries and return 1 if the first entry should be chosen and -1 if the second entry should be chosen.\\n * @returns {number} 1 if a is greater, -1 if b is greater\\n */\\nfunction SortByClockId (a, b, resolveConflict) {\\n // Sort by ID if clocks are concurrent,\\n // take the entry with a \\\"greater\\\" clock id\\n return a.clock.id === b.clock.id\\n ? resolveConflict(a, b)\\n : a.clock.id < b.clock.id ? -1 : 1\\n}\\n\\n/**\\n * A wrapper function to throw an error if the results of a passed function return zero\\n * @param {function(a, b)} [tiebreaker] The tiebreaker function to validate.\\n * @returns {function(a, b)} 1 if a is greater, -1 if b is greater\\n * @throws {Error} if func ever returns 0\\n */\\nfunction NoZeroes (func) {\\n const msg = `Your log's tiebreaker function, ${func.name}, has returned zero and therefore cannot be`\\n\\n const comparator = (a, b) => {\\n // Validate by calling the function\\n const result = func(a, b)\\n if (result === 0) { throw Error(msg) }\\n return result\\n }\\n\\n return comparator\\n}\\n\\nexports.SortByClocks = SortByClocks\\nexports.SortByClockId = SortByClockId\\nexports.LastWriteWins = LastWriteWins\\nexports.SortByEntryHash = SortByEntryHash\\nexports.NoZeroes = NoZeroes\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipfs-log/src/log-sorting.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipfs-log/src/log.js\":\n/*!******************************************!*\\\n !*** ./node_modules/ipfs-log/src/log.js ***!\n \\******************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {\\n\\nconst pMap = __webpack_require__(/*! p-map */ \\\"./node_modules/p-map/index.js\\\")\\nconst GSet = __webpack_require__(/*! ./g-set */ \\\"./node_modules/ipfs-log/src/g-set.js\\\")\\nconst Entry = __webpack_require__(/*! ./entry */ \\\"./node_modules/ipfs-log/src/entry.js\\\")\\nconst LogIO = __webpack_require__(/*! ./log-io */ \\\"./node_modules/ipfs-log/src/log-io.js\\\")\\nconst LogError = __webpack_require__(/*! ./log-errors */ \\\"./node_modules/ipfs-log/src/log-errors.js\\\")\\nconst Clock = __webpack_require__(/*! ./lamport-clock */ \\\"./node_modules/ipfs-log/src/lamport-clock.js\\\")\\nconst Sorting = __webpack_require__(/*! ./log-sorting */ \\\"./node_modules/ipfs-log/src/log-sorting.js\\\")\\nconst { LastWriteWins, NoZeroes } = Sorting\\nconst AccessController = __webpack_require__(/*! ./default-access-controller */ \\\"./node_modules/ipfs-log/src/default-access-controller.js\\\")\\nconst { isDefined, findUniques } = __webpack_require__(/*! ./utils */ \\\"./node_modules/ipfs-log/src/utils/index.js\\\")\\nconst EntryIndex = __webpack_require__(/*! ./entry-index */ \\\"./node_modules/ipfs-log/src/entry-index.js\\\")\\nconst randomId = () => new Date().getTime().toString()\\nconst getHash = e => e.hash\\nconst flatMap = (res, acc) => res.concat(acc)\\nconst getNextPointers = entry => entry.next\\nconst maxClockTimeReducer = (res, acc) => Math.max(res, acc.clock.time)\\nconst uniqueEntriesReducer = (res, acc) => {\\n res[acc.hash] = acc\\n return res\\n}\\n\\n/**\\n * Log.\\n *\\n * @description\\n * Log implements a G-Set CRDT and adds ordering.\\n *\\n * From:\\n * \\\"A comprehensive study of Convergent and Commutative Replicated Data Types\\\"\\n * https://hal.inria.fr/inria-00555588\\n */\\nclass Log extends GSet {\\n /**\\n * Create a new Log instance\\n * @param {IPFS} ipfs An IPFS instance\\n * @param {Object} identity Identity (https://github.com/orbitdb/orbit-db-identity-provider/blob/master/src/identity.js)\\n * @param {Object} options\\n * @param {string} options.logId ID of the log\\n * @param {Object} options.access AccessController (./default-access-controller)\\n * @param {Array<Entry>} options.entries An Array of Entries from which to create the log\\n * @param {Array<Entry>} options.heads Set the heads of the log\\n * @param {Clock} options.clock Set the clock of the log\\n * @param {Function} options.sortFn The sort function - by default LastWriteWins\\n * @return {Log} The log instance\\n */\\n constructor (ipfs, identity, { logId, access, entries, heads, clock, sortFn, concurrency } = {}) {\\n if (!isDefined(ipfs)) {\\n throw LogError.IPFSNotDefinedError()\\n }\\n\\n if (!isDefined(identity)) {\\n throw new Error('Identity is required')\\n }\\n\\n if (!isDefined(access)) {\\n access = new AccessController()\\n }\\n\\n if (isDefined(entries) && !Array.isArray(entries)) {\\n throw new Error(`'entries' argument must be an array of Entry instances`)\\n }\\n\\n if (isDefined(heads) && !Array.isArray(heads)) {\\n throw new Error(`'heads' argument must be an array`)\\n }\\n\\n if (!isDefined(sortFn)) {\\n sortFn = LastWriteWins\\n }\\n\\n super()\\n\\n this._sortFn = NoZeroes(sortFn)\\n\\n this._storage = ipfs\\n this._id = logId || randomId()\\n\\n // Access Controller\\n this._access = access\\n // Identity\\n this._identity = identity\\n\\n // Add entries to the internal cache\\n const uniqueEntries = (entries || []).reduce(uniqueEntriesReducer, {})\\n this._entryIndex = new EntryIndex(uniqueEntries)\\n entries = Object.values(uniqueEntries) || []\\n\\n // Set heads if not passed as an argument\\n heads = heads || Log.findHeads(entries)\\n this._headsIndex = heads.reduce(uniqueEntriesReducer, {})\\n\\n // Index of all next pointers in this log\\n this._nextsIndex = {}\\n const addToNextsIndex = e => e.next.forEach(a => (this._nextsIndex[a] = e.hash))\\n entries.forEach(addToNextsIndex)\\n\\n // Set the length, we calculate the length manually internally\\n this._length = entries.length\\n\\n // Set the clock\\n const maxTime = Math.max(clock ? clock.time : 0, this.heads.reduce(maxClockTimeReducer, 0))\\n // Take the given key as the clock id is it's a Key instance,\\n // otherwise if key was given, take whatever it is,\\n // and if it was null, take the given id as the clock id\\n this._clock = new Clock(this._identity.publicKey, maxTime)\\n\\n this.joinConcurrency = concurrency || 16\\n }\\n\\n /**\\n * Returns the ID of the log.\\n * @returns {string}\\n */\\n get id () {\\n return this._id\\n }\\n\\n /**\\n * Returns the clock of the log.\\n * @returns {string}\\n */\\n get clock () {\\n return this._clock\\n }\\n\\n /**\\n * Returns the length of the log.\\n * @return {number} Length\\n */\\n get length () {\\n return this._length\\n }\\n\\n /**\\n * Returns the values in the log.\\n * @returns {Array<Entry>}\\n */\\n get values () {\\n return Object.values(this.traverse(this.heads)).reverse()\\n }\\n\\n /**\\n * Returns an array of heads as hashes.\\n * @returns {Array<string>}\\n */\\n get heads () {\\n return Object.values(this._headsIndex).sort(this._sortFn).reverse()\\n }\\n\\n /**\\n * Returns an array of Entry objects that reference entries which\\n * are not in the log currently.\\n * @returns {Array<Entry>}\\n */\\n get tails () {\\n return Log.findTails(this.values)\\n }\\n\\n /**\\n * Returns an array of hashes that are referenced by entries which\\n * are not in the log currently.\\n * @returns {Array<string>} Array of hashes\\n */\\n get tailHashes () {\\n return Log.findTailHashes(this.values)\\n }\\n\\n /**\\n * Set the identity for the log\\n * @param {Identity} [identity] The identity to be set\\n */\\n setIdentity (identity) {\\n this._identity = identity\\n // Find the latest clock from the heads\\n const time = Math.max(this.clock.time, this.heads.reduce(maxClockTimeReducer, 0))\\n this._clock = new Clock(this._identity.publicKey, time)\\n }\\n\\n /**\\n * Find an entry.\\n * @param {string} [hash] The hashes of the entry\\n * @returns {Entry|undefined}\\n */\\n get (hash) {\\n return this._entryIndex.get(hash)\\n }\\n\\n /**\\n * Checks if a entry is part of the log\\n * @param {string} hash The hash of the entry\\n * @returns {boolean}\\n */\\n has (entry) {\\n return this._entryIndex.get(entry.hash || entry) !== undefined\\n }\\n\\n traverse (rootEntries, amount = -1, endHash) {\\n // Sort the given given root entries and use as the starting stack\\n let stack = rootEntries.sort(this._sortFn).reverse()\\n\\n // Cache for checking if we've processed an entry already\\n let traversed = {}\\n // End result\\n let result = {}\\n let count = 0\\n // Named function for getting an entry from the log\\n const getEntry = e => this.get(e)\\n\\n // Add an entry to the stack and traversed nodes index\\n const addToStack = entry => {\\n // If we've already processed the entry, don't add it to the stack\\n if (!entry || traversed[entry.hash]) {\\n return\\n }\\n\\n // Add the entry in front of the stack and sort\\n stack = [entry, ...stack]\\n .sort(this._sortFn)\\n .reverse()\\n // Add to the cache of processed entries\\n traversed[entry.hash] = true\\n }\\n\\n const addEntry = rootEntry => {\\n result[rootEntry.hash] = rootEntry\\n traversed[rootEntry.hash] = true\\n count++\\n }\\n\\n // Start traversal\\n // Process stack until it's empty (traversed the full log)\\n // or when we have the requested amount of entries\\n // If requested entry amount is -1, traverse all\\n while (stack.length > 0 && (count < amount || amount < 0)) { // eslint-disable-line no-unmodified-loop-condition\\n // Get the next element from the stack\\n const entry = stack.shift()\\n // Add to the result\\n addEntry(entry)\\n // If it is the specified end hash, break out of the while loop\\n if (endHash && endHash === entry.hash) break\\n\\n // Add entry's next references to the stack\\n const entries = entry.next.map(getEntry)\\n const defined = entries.filter(isDefined)\\n defined.forEach(addToStack)\\n }\\n\\n stack = []\\n traversed = {}\\n // End result\\n return result\\n }\\n\\n /**\\n * Append an entry to the log.\\n * @param {Entry} entry Entry to add\\n * @return {Log} New Log containing the appended value\\n */\\n async append (data, pointerCount = 1, pin = false) {\\n // Update the clock (find the latest clock)\\n const newTime = Math.max(this.clock.time, this.heads.reduce(maxClockTimeReducer, 0)) + 1\\n this._clock = new Clock(this.clock.id, newTime)\\n\\n const all = Object.values(this.traverse(this.heads, Math.max(pointerCount, this.heads.length)))\\n\\n // If pointer count is 4, returns 2\\n // If pointer count is 8, returns 3 references\\n // If pointer count is 512, returns 9 references\\n // If pointer count is 2048, returns 11 references\\n const getEveryPow2 = (maxDistance) => {\\n let entries = new Set()\\n for (let i = 1; i <= maxDistance; i *= 2) {\\n const index = Math.min(i - 1, all.length - 1)\\n entries.add(all[index])\\n }\\n return entries\\n }\\n const references = getEveryPow2(Math.min(pointerCount, all.length))\\n\\n // Always include the last known reference\\n if (all.length < pointerCount && all[all.length - 1]) {\\n references.add(all[all.length - 1])\\n }\\n\\n // Create the next pointers from heads\\n const nexts = Object.keys(this.heads.reverse().reduce(uniqueEntriesReducer, {}))\\n const isNext = e => !nexts.includes(e)\\n // Delete the heads from the refs\\n const refs = Array.from(references).map(getHash).filter(isNext)\\n\\n // @TODO: Split Entry.create into creating object, checking permission, signing and then posting to IPFS\\n // Create the entry and add it to the internal cache\\n const entry = await Entry.create(\\n this._storage,\\n this._identity,\\n this.id,\\n data,\\n nexts,\\n this.clock,\\n refs,\\n pin\\n )\\n\\n const canAppend = await this._access.canAppend(entry, this._identity.provider)\\n if (!canAppend) {\\n throw new Error(`Could not append entry, key \\\"${this._identity.id}\\\" is not allowed to write to the log`)\\n }\\n\\n this._entryIndex.set(entry.hash, entry)\\n nexts.forEach(e => (this._nextsIndex[e] = entry.hash))\\n this._headsIndex = {}\\n this._headsIndex[entry.hash] = entry\\n // Update the length\\n this._length++\\n return entry\\n }\\n\\n /*\\n * Creates a javscript iterator over log entries\\n *\\n * @param {Object} options\\n * @param {string|Array} options.gt Beginning hash of the iterator, non-inclusive\\n * @param {string|Array} options.gte Beginning hash of the iterator, inclusive\\n * @param {string|Array} options.lt Ending hash of the iterator, non-inclusive\\n * @param {string|Array} options.lte Ending hash of the iterator, inclusive\\n * @param {amount} options.amount Number of entried to return to / from the gte / lte hash\\n * @returns {Symbol.Iterator} Iterator object containing log entries\\n *\\n * @examples\\n *\\n * (async () => {\\n * log1 = new Log(ipfs, testIdentity, { logId: 'X' })\\n *\\n * for (let i = 0; i <= 100; i++) {\\n * await log1.append('entry' + i)\\n * }\\n *\\n * let it = log1.iterator({\\n * lte: 'zdpuApFd5XAPkCTmSx7qWQmQzvtdJPtx2K5p9to6ytCS79bfk',\\n * amount: 10\\n * })\\n *\\n * [...it].length // 10\\n * })()\\n *\\n *\\n */\\n iterator ({ gt = undefined, gte = undefined, lt = undefined, lte = undefined, amount = -1 } =\\n {}) {\\n if (amount === 0) return (function * () {})()\\n if (typeof lte === 'string') lte = [this.get(lte)]\\n if (typeof lt === 'string') lt = [this.get(this.get(lt).next)]\\n\\n if (lte && !Array.isArray(lte)) throw LogError.LtOrLteMustBeStringOrArray()\\n if (lt && !Array.isArray(lt)) throw LogError.LtOrLteMustBeStringOrArray()\\n\\n let start = (lte || (lt || this.heads)).filter(isDefined)\\n let endHash = gte ? this.get(gte).hash : gt ? this.get(gt).hash : null\\n let count = endHash ? -1 : amount || -1\\n\\n let entries = this.traverse(start, count, endHash)\\n let entryValues = Object.values(entries)\\n\\n // Strip off last entry if gt is non-inclusive\\n if (gt) entryValues.pop()\\n\\n // Deal with the amount argument working backwards from gt/gte\\n if ((gt || gte) && amount > -1) {\\n entryValues = entryValues.slice(entryValues.length - amount, entryValues.length)\\n }\\n\\n return (function * () {\\n for (let i in entryValues) {\\n yield entryValues[i]\\n }\\n })()\\n }\\n\\n /**\\n * Join two logs.\\n *\\n * Joins another log into this one.\\n *\\n * @param {Log} log Log to join with this Log\\n * @param {number} [size=-1] Max size of the joined log\\n * @returns {Promise<Log>} This Log instance\\n * @example\\n * await log1.join(log2)\\n */\\n async join (log, size = -1) {\\n if (!isDefined(log)) throw LogError.LogNotDefinedError()\\n if (!Log.isLog(log)) throw LogError.NotALogError()\\n if (this.id !== log.id) return\\n\\n // Get the difference of the logs\\n const newItems = Log.difference(log, this)\\n\\n const identityProvider = this._identity.provider\\n // Verify if entries are allowed to be added to the log and throws if\\n // there's an invalid entry\\n const permitted = async (entry) => {\\n const canAppend = await this._access.canAppend(entry, identityProvider)\\n if (!canAppend) {\\n throw new Error(`Could not append entry, key \\\"${entry.identity.id}\\\" is not allowed to write to the log`)\\n }\\n }\\n\\n // Verify signature for each entry and throws if there's an invalid signature\\n const verify = async (entry) => {\\n const isValid = await Entry.verify(identityProvider, entry)\\n const publicKey = entry.identity ? entry.identity.publicKey : entry.key\\n if (!isValid) throw new Error(`Could not validate signature \\\"${entry.sig}\\\" for entry \\\"${entry.hash}\\\" and key \\\"${publicKey}\\\"`)\\n }\\n\\n const entriesToJoin = Object.values(newItems)\\n await pMap(entriesToJoin, async e => {\\n await permitted(e)\\n await verify(e)\\n }, { concurrency: this.joinConcurrency })\\n\\n // Update the internal next pointers index\\n const addToNextsIndex = e => {\\n const entry = this.get(e.hash)\\n if (!entry) this._length++ /* istanbul ignore else */\\n e.next.forEach(a => (this._nextsIndex[a] = e.hash))\\n }\\n Object.values(newItems).forEach(addToNextsIndex)\\n\\n // Update the internal entry index\\n this._entryIndex.add(newItems)\\n\\n // Merge the heads\\n const notReferencedByNewItems = e => !nextsFromNewItems.find(a => a === e.hash)\\n const notInCurrentNexts = e => !this._nextsIndex[e.hash]\\n const nextsFromNewItems = Object.values(newItems).map(getNextPointers).reduce(flatMap, [])\\n const mergedHeads = Log.findHeads(Object.values(Object.assign({}, this._headsIndex, log._headsIndex)))\\n .filter(notReferencedByNewItems)\\n .filter(notInCurrentNexts)\\n .reduce(uniqueEntriesReducer, {})\\n\\n this._headsIndex = mergedHeads\\n\\n // Slice to the requested size\\n if (size > -1) {\\n let tmp = this.values\\n tmp = tmp.slice(-size)\\n this._entryIndex = null\\n this._entryIndex = new EntryIndex(tmp.reduce(uniqueEntriesReducer, {}))\\n this._headsIndex = Log.findHeads(tmp).reduce(uniqueEntriesReducer, {})\\n this._length = this._entryIndex.length\\n }\\n\\n // Find the latest clock from the heads\\n const maxClock = Object.values(this._headsIndex).reduce(maxClockTimeReducer, 0)\\n this._clock = new Clock(this.clock.id, Math.max(this.clock.time, maxClock))\\n return this\\n }\\n\\n /**\\n * Get the log in JSON format.\\n * @returns {Object} An object with the id and heads properties\\n */\\n toJSON () {\\n return {\\n id: this.id,\\n heads: this.heads\\n .sort(this._sortFn) // default sorting\\n .reverse() // we want the latest as the first element\\n .map(getHash) // return only the head hashes\\n }\\n }\\n\\n /**\\n * Get the log in JSON format as a snapshot.\\n * @returns {Object} An object with the id, heads and value properties\\n */\\n toSnapshot () {\\n return {\\n id: this.id,\\n heads: this.heads,\\n values: this.values\\n }\\n }\\n\\n /**\\n * Get the log as a Buffer.\\n * @returns {Buffer}\\n */\\n toBuffer () {\\n return Buffer.from(JSON.stringify(this.toJSON()))\\n }\\n\\n /**\\n * Returns the log entries as a formatted string.\\n * @returns {string}\\n * @example\\n * two\\n * └─one\\n * └─three\\n */\\n toString (payloadMapper) {\\n return this.values\\n .slice()\\n .reverse()\\n .map((e, idx) => {\\n const parents = Entry.findChildren(e, this.values)\\n const len = parents.length\\n let padding = new Array(Math.max(len - 1, 0))\\n padding = len > 1 ? padding.fill(' ') : padding\\n padding = len > 0 ? padding.concat(['└─']) : padding\\n /* istanbul ignore next */\\n return padding.join('') + (payloadMapper ? payloadMapper(e.payload) : e.payload)\\n })\\n .join('\\\\n')\\n }\\n\\n /**\\n * Check whether an object is a Log instance.\\n * @param {Object} log An object to check\\n * @returns {boolean}\\n */\\n static isLog (log) {\\n return log.id !== undefined &&\\n log.heads !== undefined &&\\n log._entryIndex !== undefined\\n }\\n\\n /**\\n * Get the log's multihash.\\n * @returns {Promise<string>} Multihash of the Log as Base58 encoded string.\\n */\\n toMultihash ({ format } = {}) {\\n return LogIO.toMultihash(this._storage, this, { format })\\n }\\n\\n /**\\n * Create a log from a hashes.\\n * @param {IPFS} ipfs An IPFS instance\\n * @param {Identity} identity The identity instance\\n * @param {string} hash The log hash\\n * @param {Object} options\\n * @param {AccessController} options.access The access controller instance\\n * @param {number} options.length How many items to include in the log\\n * @param {Array<Entry>} options.exclude Entries to not fetch (cached)\\n * @param {function(hash, entry, parent, depth)} options.onProgressCallback\\n * @param {Function} options.sortFn The sort function - by default LastWriteWins\\n * @returns {Promise<Log>}\\n */\\n static async fromMultihash (ipfs, identity, hash,\\n { access, length = -1, exclude = [], timeout, concurrency, sortFn, onProgressCallback } = {}) {\\n // TODO: need to verify the entries with 'key'\\n const { logId, entries, heads } = await LogIO.fromMultihash(ipfs, hash,\\n { length, exclude, timeout, onProgressCallback, concurrency, sortFn })\\n return new Log(ipfs, identity, { logId, access, entries, heads, sortFn })\\n }\\n\\n /**\\n * Create a log from a single entry's hash.\\n * @param {IPFS} ipfs An IPFS instance\\n * @param {Identity} identity The identity instance\\n * @param {string} hash The entry's hash\\n * @param {Object} options\\n * @param {string} options.logId The ID of the log\\n * @param {AccessController} options.access The access controller instance\\n * @param {number} options.length How many entries to include in the log\\n * @param {Array<Entry>} options.exclude Entries to not fetch (cached)\\n * @param {function(hash, entry, parent, depth)} options.onProgressCallback\\n * @param {Function} options.sortFn The sort function - by default LastWriteWins\\n * @return {Promise<Log>} New Log\\n */\\n static async fromEntryHash (ipfs, identity, hash,\\n { logId, access, length = -1, exclude = [], timeout, concurrency, sortFn, onProgressCallback } = {}) {\\n // TODO: need to verify the entries with 'key'\\n const { entries } = await LogIO.fromEntryHash(ipfs, hash,\\n { length, exclude, timeout, concurrency, onProgressCallback })\\n return new Log(ipfs, identity, { logId, access, entries, sortFn })\\n }\\n\\n /**\\n * Create a log from a Log Snapshot JSON.\\n * @param {IPFS} ipfs An IPFS instance\\n * @param {Identity} identity The identity instance\\n * @param {Object} json Log snapshot as JSON object\\n * @param {Object} options\\n * @param {AccessController} options.access The access controller instance\\n * @param {number} options.length How many entries to include in the log\\n * @param {function(hash, entry, parent, depth)} [options.onProgressCallback]\\n * @param {Function} options.sortFn The sort function - by default LastWriteWins\\n * @return {Promise<Log>} New Log\\n */\\n static async fromJSON (ipfs, identity, json,\\n { access, length = -1, timeout, sortFn, onProgressCallback } = {}) {\\n // TODO: need to verify the entries with 'key'\\n const { logId, entries } = await LogIO.fromJSON(ipfs, json,\\n { length, timeout, onProgressCallback })\\n return new Log(ipfs, identity, { logId, access, entries, sortFn })\\n }\\n\\n /**\\n * Create a new log from an Entry instance.\\n * @param {IPFS} ipfs An IPFS instance\\n * @param {Identity} identity The identity instance\\n * @param {Entry|Array<Entry>} sourceEntries An Entry or an array of entries to fetch a log from\\n * @param {Object} options\\n * @param {AccessController} options.access The access controller instance\\n * @param {number} options.length How many entries to include. Default: infinite.\\n * @param {Array<Entry>} options.exclude Entries to not fetch (cached)\\n * @param {function(hash, entry, parent, depth)} [options.onProgressCallback]\\n * @param {Function} options.sortFn The sort function - by default LastWriteWins\\n * @return {Promise<Log>} New Log\\n */\\n static async fromEntry (ipfs, identity, sourceEntries,\\n { access, length = -1, exclude = [], timeout, concurrency, sortFn, onProgressCallback } = {}) {\\n // TODO: need to verify the entries with 'key'\\n const { logId, entries } = await LogIO.fromEntry(ipfs, sourceEntries,\\n { length, exclude, timeout, concurrency, onProgressCallback })\\n return new Log(ipfs, identity, { logId, access, entries, sortFn })\\n }\\n\\n /**\\n * Find heads from a collection of entries.\\n *\\n * Finds entries that are the heads of this collection,\\n * ie. entries that are not referenced by other entries.\\n *\\n * @param {Array<Entry>} entries Entries to search heads from\\n * @returns {Array<Entry>}\\n */\\n static findHeads (entries) {\\n var indexReducer = (res, entry, idx, arr) => {\\n var addToResult = e => (res[e] = entry.hash)\\n entry.next.forEach(addToResult)\\n return res\\n }\\n\\n var items = entries.reduce(indexReducer, {})\\n\\n var exists = e => items[e.hash] === undefined\\n var compareIds = (a, b) => a.clock.id > b.clock.id\\n\\n return entries.filter(exists).sort(compareIds)\\n }\\n\\n // Find entries that point to another entry that is not in the\\n // input array\\n static findTails (entries) {\\n // Reverse index { next -> entry }\\n var reverseIndex = {}\\n // Null index containing entries that have no parents (nexts)\\n var nullIndex = []\\n // Hashes for all entries for quick lookups\\n var hashes = {}\\n // Hashes of all next entries\\n var nexts = []\\n\\n var addToIndex = (e) => {\\n if (e.next.length === 0) {\\n nullIndex.push(e)\\n }\\n var addToReverseIndex = (a) => {\\n /* istanbul ignore else */\\n if (!reverseIndex[a]) reverseIndex[a] = []\\n reverseIndex[a].push(e)\\n }\\n\\n // Add all entries and their parents to the reverse index\\n e.next.forEach(addToReverseIndex)\\n // Get all next references\\n nexts = nexts.concat(e.next)\\n // Get the hashes of input entries\\n hashes[e.hash] = true\\n }\\n\\n // Create our indices\\n entries.forEach(addToIndex)\\n\\n var addUniques = (res, entries, idx, arr) => res.concat(findUniques(entries, 'hash'))\\n var exists = e => hashes[e] === undefined\\n var findFromReverseIndex = e => reverseIndex[e]\\n\\n // Drop hashes that are not in the input entries\\n const tails = nexts // For every hash in nexts:\\n .filter(exists) // Remove undefineds and nulls\\n .map(findFromReverseIndex) // Get the Entry from the reverse index\\n .reduce(addUniques, []) // Flatten the result and take only uniques\\n .concat(nullIndex) // Combine with tails the have no next refs (ie. first-in-their-chain)\\n\\n return findUniques(tails, 'hash').sort(Entry.compare)\\n }\\n\\n // Find the hashes to entries that are not in a collection\\n // but referenced by other entries\\n static findTailHashes (entries) {\\n var hashes = {}\\n var addToIndex = e => (hashes[e.hash] = true)\\n var reduceTailHashes = (res, entry, idx, arr) => {\\n var addToResult = (e) => {\\n /* istanbul ignore else */\\n if (hashes[e] === undefined) {\\n res.splice(0, 0, e)\\n }\\n }\\n entry.next.reverse().forEach(addToResult)\\n return res\\n }\\n\\n entries.forEach(addToIndex)\\n return entries.reduce(reduceTailHashes, [])\\n }\\n\\n static difference (a, b) {\\n let stack = Object.keys(a._headsIndex)\\n let traversed = {}\\n let res = {}\\n\\n const pushToStack = hash => {\\n if (!traversed[hash] && !b.get(hash)) {\\n stack.push(hash)\\n traversed[hash] = true\\n }\\n }\\n\\n while (stack.length > 0) {\\n const hash = stack.shift()\\n const entry = a.get(hash)\\n if (entry && !b.get(hash) && entry.id === b.id) {\\n res[entry.hash] = entry\\n traversed[entry.hash] = true\\n entry.next.forEach(pushToStack)\\n }\\n }\\n return res\\n }\\n}\\n\\nmodule.exports = Log\\nmodule.exports.Sorting = Sorting\\nmodule.exports.Entry = Entry\\nmodule.exports.AccessController = AccessController\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/ipfs-log/src/log.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipfs-log/src/utils/difference.js\":\n/*!*******************************************************!*\\\n !*** ./node_modules/ipfs-log/src/utils/difference.js ***!\n \\*******************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nfunction difference (a, b, key) {\\n // Indices for quick lookups\\n var processed = {}\\n var existing = {}\\n\\n // Create an index of the first collection\\n var addToIndex = e => (existing[key ? e[key] : e] = true)\\n a.forEach(addToIndex)\\n\\n // Reduce to entries that are not in the first collection\\n var reducer = (res, entry) => {\\n var isInFirst = existing[key ? entry[key] : entry] !== undefined\\n var hasBeenProcessed = processed[key ? entry[key] : entry] !== undefined\\n if (!isInFirst && !hasBeenProcessed) {\\n res.push(entry)\\n processed[key ? entry[key] : entry] = true\\n }\\n return res\\n }\\n\\n return b.reduce(reducer, [])\\n}\\n\\nmodule.exports = difference\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipfs-log/src/utils/difference.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipfs-log/src/utils/find-uniques.js\":\n/*!*********************************************************!*\\\n !*** ./node_modules/ipfs-log/src/utils/find-uniques.js ***!\n \\*********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nfunction findUniques (value, key) {\\n // Create an index of the collection\\n let uniques = {}\\n var get = e => uniques[e]\\n var addToIndex = e => (uniques[key ? e[key] : e] = e)\\n value.forEach(addToIndex)\\n return Object.keys(uniques).map(get)\\n}\\n\\nmodule.exports = findUniques\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipfs-log/src/utils/find-uniques.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipfs-log/src/utils/index.js\":\n/*!**************************************************!*\\\n !*** ./node_modules/ipfs-log/src/utils/index.js ***!\n \\**************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst difference = __webpack_require__(/*! ./difference */ \\\"./node_modules/ipfs-log/src/utils/difference.js\\\")\\nconst findUniques = __webpack_require__(/*! ./find-uniques */ \\\"./node_modules/ipfs-log/src/utils/find-uniques.js\\\")\\nconst isDefined = __webpack_require__(/*! ./is-defined */ \\\"./node_modules/ipfs-log/src/utils/is-defined.js\\\")\\nconst io = __webpack_require__(/*! orbit-db-io */ \\\"./node_modules/orbit-db-io/index.js\\\")\\n\\nmodule.exports = {\\n difference,\\n findUniques,\\n isDefined,\\n io\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipfs-log/src/utils/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipfs-log/src/utils/is-defined.js\":\n/*!*******************************************************!*\\\n !*** ./node_modules/ipfs-log/src/utils/is-defined.js ***!\n \\*******************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst isDefined = (arg) => arg !== undefined && arg !== null\\n\\nmodule.exports = isDefined\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipfs-log/src/utils/is-defined.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/node_modules/cids/src/cid-util.js\":\n/*!********************************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/node_modules/cids/src/cid-util.js ***!\n \\********************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {\\n\\nconst mh = __webpack_require__(/*! multihashes */ \\\"./node_modules/ipld-dag-pb/node_modules/multihashes/src/index.js\\\")\\n\\nvar CIDUtil = {\\n /**\\n * Test if the given input is a valid CID object.\\n * Returns an error message if it is not.\\n * Returns undefined if it is a valid CID.\\n *\\n * @param {any} other\\n * @returns {string}\\n */\\n checkCIDComponents: function (other) {\\n if (other == null) {\\n return 'null values are not valid CIDs'\\n }\\n\\n if (!(other.version === 0 || other.version === 1)) {\\n return 'Invalid version, must be a number equal to 1 or 0'\\n }\\n\\n if (typeof other.codec !== 'string') {\\n return 'codec must be string'\\n }\\n\\n if (other.version === 0) {\\n if (other.codec !== 'dag-pb') {\\n return \\\"codec must be 'dag-pb' for CIDv0\\\"\\n }\\n if (other.multibaseName !== 'base58btc') {\\n return \\\"multibaseName must be 'base58btc' for CIDv0\\\"\\n }\\n }\\n\\n if (!Buffer.isBuffer(other.multihash)) {\\n return 'multihash must be a Buffer'\\n }\\n\\n try {\\n mh.validate(other.multihash)\\n } catch (err) {\\n let errorMsg = err.message\\n if (!errorMsg) { // Just in case mh.validate() throws an error with empty error message\\n errorMsg = 'Multihash validation failed'\\n }\\n return errorMsg\\n }\\n }\\n}\\n\\nmodule.exports = CIDUtil\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/node_modules/cids/src/cid-util.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/node_modules/cids/src/index.js\":\n/*!*****************************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/node_modules/cids/src/index.js ***!\n \\*****************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {\\n\\nconst mh = __webpack_require__(/*! multihashes */ \\\"./node_modules/ipld-dag-pb/node_modules/multihashes/src/index.js\\\")\\nconst multibase = __webpack_require__(/*! multibase */ \\\"./node_modules/multibase/src/index.js\\\")\\nconst multicodec = __webpack_require__(/*! multicodec */ \\\"./node_modules/ipld-dag-pb/node_modules/multicodec/src/index.js\\\")\\nconst codecs = __webpack_require__(/*! multicodec/src/base-table.json */ \\\"./node_modules/ipld-dag-pb/node_modules/multicodec/src/base-table.json\\\")\\nconst CIDUtil = __webpack_require__(/*! ./cid-util */ \\\"./node_modules/ipld-dag-pb/node_modules/cids/src/cid-util.js\\\")\\nconst withIs = __webpack_require__(/*! class-is */ \\\"./node_modules/class-is/index.js\\\")\\n\\n/**\\n * @typedef {Object} SerializedCID\\n * @param {string} codec\\n * @param {number} version\\n * @param {Buffer} multihash\\n */\\n\\n/**\\n * Test if the given input is a CID.\\n * @function isCID\\n * @memberof CID\\n * @static\\n * @param {any} other\\n * @returns {bool}\\n */\\n\\n/**\\n * Class representing a CID `<mbase><version><mcodec><mhash>`\\n * , as defined in [ipld/cid](https://github.com/multiformats/cid).\\n * @class CID\\n */\\nclass CID {\\n /**\\n * Create a new CID.\\n *\\n * The algorithm for argument input is roughly:\\n * ```\\n * if (cid)\\n * -> create a copy\\n * else if (str)\\n * if (1st char is on multibase table) -> CID String\\n * else -> bs58 encoded multihash\\n * else if (Buffer)\\n * if (1st byte is 0 or 1) -> CID\\n * else -> multihash\\n * else if (Number)\\n * -> construct CID by parts\\n * ```\\n *\\n * @param {string|Buffer|CID} version\\n * @param {string} [codec]\\n * @param {Buffer} [multihash]\\n * @param {string} [multibaseName]\\n *\\n * @example\\n * new CID(<version>, <codec>, <multihash>, <multibaseName>)\\n * new CID(<cidStr>)\\n * new CID(<cid.buffer>)\\n * new CID(<multihash>)\\n * new CID(<bs58 encoded multihash>)\\n * new CID(<cid>)\\n */\\n constructor (version, codec, multihash, multibaseName) {\\n if (_CID.isCID(version)) {\\n // version is an exising CID instance\\n const cid = version\\n this.version = cid.version\\n this.codec = cid.codec\\n this.multihash = Buffer.from(cid.multihash)\\n // Default guard for when a CID < 0.7 is passed with no multibaseName\\n this.multibaseName = cid.multibaseName || (cid.version === 0 ? 'base58btc' : 'base32')\\n return\\n }\\n\\n if (typeof version === 'string') {\\n // e.g. 'base32' or false\\n const baseName = multibase.isEncoded(version)\\n if (baseName) {\\n // version is a CID String encoded with multibase, so v1\\n const cid = multibase.decode(version)\\n this.version = parseInt(cid.slice(0, 1).toString('hex'), 16)\\n this.codec = multicodec.getCodec(cid.slice(1))\\n this.multihash = multicodec.rmPrefix(cid.slice(1))\\n this.multibaseName = baseName\\n } else {\\n // version is a base58btc string multihash, so v0\\n this.version = 0\\n this.codec = 'dag-pb'\\n this.multihash = mh.fromB58String(version)\\n this.multibaseName = 'base58btc'\\n }\\n CID.validateCID(this)\\n Object.defineProperty(this, 'string', { value: version })\\n return\\n }\\n\\n if (Buffer.isBuffer(version)) {\\n const firstByte = version.slice(0, 1)\\n const v = parseInt(firstByte.toString('hex'), 16)\\n if (v === 1) {\\n // version is a CID buffer\\n const cid = version\\n this.version = v\\n this.codec = multicodec.getCodec(cid.slice(1))\\n this.multihash = multicodec.rmPrefix(cid.slice(1))\\n this.multibaseName = 'base32'\\n } else {\\n // version is a raw multihash buffer, so v0\\n this.version = 0\\n this.codec = 'dag-pb'\\n this.multihash = version\\n this.multibaseName = 'base58btc'\\n }\\n CID.validateCID(this)\\n return\\n }\\n\\n // otherwise, assemble the CID from the parameters\\n\\n /**\\n * @type {number}\\n */\\n this.version = version\\n\\n /**\\n * @type {string}\\n */\\n this.codec = codec\\n\\n /**\\n * @type {Buffer}\\n */\\n this.multihash = multihash\\n\\n /**\\n * @type {string}\\n */\\n this.multibaseName = multibaseName || (version === 0 ? 'base58btc' : 'base32')\\n\\n CID.validateCID(this)\\n }\\n\\n /**\\n * The CID as a `Buffer`\\n *\\n * @return {Buffer}\\n * @readonly\\n *\\n * @memberOf CID\\n */\\n get buffer () {\\n let buffer = this._buffer\\n\\n if (!buffer) {\\n if (this.version === 0) {\\n buffer = this.multihash\\n } else if (this.version === 1) {\\n buffer = Buffer.concat([\\n Buffer.from('01', 'hex'),\\n multicodec.getCodeVarint(this.codec),\\n this.multihash\\n ])\\n } else {\\n throw new Error('unsupported version')\\n }\\n\\n // Cache this buffer so it doesn't have to be recreated\\n Object.defineProperty(this, '_buffer', { value: buffer })\\n }\\n\\n return buffer\\n }\\n\\n /**\\n * Get the prefix of the CID.\\n *\\n * @returns {Buffer}\\n * @readonly\\n */\\n get prefix () {\\n return Buffer.concat([\\n Buffer.from(`0${this.version}`, 'hex'),\\n multicodec.getCodeVarint(this.codec),\\n mh.prefix(this.multihash)\\n ])\\n }\\n\\n /**\\n * Convert to a CID of version `0`.\\n *\\n * @returns {CID}\\n */\\n toV0 () {\\n if (this.codec !== 'dag-pb') {\\n throw new Error('Cannot convert a non dag-pb CID to CIDv0')\\n }\\n\\n const { name, length } = mh.decode(this.multihash)\\n\\n if (name !== 'sha2-256') {\\n throw new Error('Cannot convert non sha2-256 multihash CID to CIDv0')\\n }\\n\\n if (length !== 32) {\\n throw new Error('Cannot convert non 32 byte multihash CID to CIDv0')\\n }\\n\\n return new _CID(0, this.codec, this.multihash)\\n }\\n\\n /**\\n * Convert to a CID of version `1`.\\n *\\n * @returns {CID}\\n */\\n toV1 () {\\n return new _CID(1, this.codec, this.multihash)\\n }\\n\\n /**\\n * Encode the CID into a string.\\n *\\n * @param {string} [base=this.multibaseName] - Base encoding to use.\\n * @returns {string}\\n */\\n toBaseEncodedString (base = this.multibaseName) {\\n if (this.string && base === this.multibaseName) {\\n return this.string\\n }\\n let str = null\\n if (this.version === 0) {\\n if (base !== 'base58btc') {\\n throw new Error('not supported with CIDv0, to support different bases, please migrate the instance do CIDv1, you can do that through cid.toV1()')\\n }\\n str = mh.toB58String(this.multihash)\\n } else if (this.version === 1) {\\n str = multibase.encode(base, this.buffer).toString()\\n } else {\\n throw new Error('unsupported version')\\n }\\n if (base === this.multibaseName) {\\n // cache the string value\\n Object.defineProperty(this, 'string', { value: str })\\n }\\n return str\\n }\\n\\n toString (base) {\\n return this.toBaseEncodedString(base)\\n }\\n\\n /**\\n * Serialize to a plain object.\\n *\\n * @returns {SerializedCID}\\n */\\n toJSON () {\\n return {\\n codec: this.codec,\\n version: this.version,\\n hash: this.multihash\\n }\\n }\\n\\n /**\\n * Compare equality with another CID.\\n *\\n * @param {CID} other\\n * @returns {bool}\\n */\\n equals (other) {\\n return this.codec === other.codec &&\\n this.version === other.version &&\\n this.multihash.equals(other.multihash)\\n }\\n\\n /**\\n * Test if the given input is a valid CID object.\\n * Throws if it is not.\\n *\\n * @param {any} other\\n * @returns {void}\\n */\\n static validateCID (other) {\\n const errorMsg = CIDUtil.checkCIDComponents(other)\\n if (errorMsg) {\\n throw new Error(errorMsg)\\n }\\n }\\n}\\n\\nconst _CID = withIs(CID, {\\n className: 'CID',\\n symbolName: '@ipld/js-cid/CID'\\n})\\n\\n_CID.codecs = codecs\\n\\nmodule.exports = _CID\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/node_modules/cids/src/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/node_modules/err-code/index.js\":\n/*!*****************************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/node_modules/err-code/index.js ***!\n \\*****************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nfunction createError(err, code, props) {\\n var key;\\n\\n if (!(err instanceof Error)) {\\n throw new TypeError('Please pass an Error to err-code');\\n }\\n\\n if (typeof code === 'object') {\\n props = code;\\n } else if (code != null) {\\n err.code = code;\\n }\\n\\n if (props) {\\n for (key in props) {\\n err[key] = props[key];\\n }\\n }\\n\\n return err;\\n}\\n\\nmodule.exports = createError;\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/node_modules/err-code/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/node_modules/js-sha3/src/sha3.js\":\n/*!*******************************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/node_modules/js-sha3/src/sha3.js ***!\n \\*******************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"/* WEBPACK VAR INJECTION */(function(process, global) {var __WEBPACK_AMD_DEFINE_RESULT__;/**\\n * [js-sha3]{@link https://github.com/emn178/js-sha3}\\n *\\n * @version 0.8.0\\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\\n * @copyright Chen, Yi-Cyuan 2015-2018\\n * @license MIT\\n */\\n/*jslint bitwise: true */\\n(function () {\\n 'use strict';\\n\\n var INPUT_ERROR = 'input is invalid type';\\n var FINALIZE_ERROR = 'finalize already called';\\n var WINDOW = typeof window === 'object';\\n var root = WINDOW ? window : {};\\n if (root.JS_SHA3_NO_WINDOW) {\\n WINDOW = false;\\n }\\n var WEB_WORKER = !WINDOW && typeof self === 'object';\\n var NODE_JS = !root.JS_SHA3_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\\n if (NODE_JS) {\\n root = global;\\n } else if (WEB_WORKER) {\\n root = self;\\n }\\n var COMMON_JS = !root.JS_SHA3_NO_COMMON_JS && typeof module === 'object' && module.exports;\\n var AMD = true && __webpack_require__(/*! !webpack amd options */ \\\"./node_modules/webpack/buildin/amd-options.js\\\");\\n var ARRAY_BUFFER = !root.JS_SHA3_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\\n var HEX_CHARS = '0123456789abcdef'.split('');\\n var SHAKE_PADDING = [31, 7936, 2031616, 520093696];\\n var CSHAKE_PADDING = [4, 1024, 262144, 67108864];\\n var KECCAK_PADDING = [1, 256, 65536, 16777216];\\n var PADDING = [6, 1536, 393216, 100663296];\\n var SHIFT = [0, 8, 16, 24];\\n var RC = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649,\\n 0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0,\\n 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771,\\n 2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648,\\n 2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648];\\n var BITS = [224, 256, 384, 512];\\n var SHAKE_BITS = [128, 256];\\n var OUTPUT_TYPES = ['hex', 'buffer', 'arrayBuffer', 'array', 'digest'];\\n var CSHAKE_BYTEPAD = {\\n '128': 168,\\n '256': 136\\n };\\n\\n if (root.JS_SHA3_NO_NODE_JS || !Array.isArray) {\\n Array.isArray = function (obj) {\\n return Object.prototype.toString.call(obj) === '[object Array]';\\n };\\n }\\n\\n if (ARRAY_BUFFER && (root.JS_SHA3_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {\\n ArrayBuffer.isView = function (obj) {\\n return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\\n };\\n }\\n\\n var createOutputMethod = function (bits, padding, outputType) {\\n return function (message) {\\n return new Keccak(bits, padding, bits).update(message)[outputType]();\\n };\\n };\\n\\n var createShakeOutputMethod = function (bits, padding, outputType) {\\n return function (message, outputBits) {\\n return new Keccak(bits, padding, outputBits).update(message)[outputType]();\\n };\\n };\\n\\n var createCshakeOutputMethod = function (bits, padding, outputType) {\\n return function (message, outputBits, n, s) {\\n return methods['cshake' + bits].update(message, outputBits, n, s)[outputType]();\\n };\\n };\\n\\n var createKmacOutputMethod = function (bits, padding, outputType) {\\n return function (key, message, outputBits, s) {\\n return methods['kmac' + bits].update(key, message, outputBits, s)[outputType]();\\n };\\n };\\n\\n var createOutputMethods = function (method, createMethod, bits, padding) {\\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\\n var type = OUTPUT_TYPES[i];\\n method[type] = createMethod(bits, padding, type);\\n }\\n return method;\\n };\\n\\n var createMethod = function (bits, padding) {\\n var method = createOutputMethod(bits, padding, 'hex');\\n method.create = function () {\\n return new Keccak(bits, padding, bits);\\n };\\n method.update = function (message) {\\n return method.create().update(message);\\n };\\n return createOutputMethods(method, createOutputMethod, bits, padding);\\n };\\n\\n var createShakeMethod = function (bits, padding) {\\n var method = createShakeOutputMethod(bits, padding, 'hex');\\n method.create = function (outputBits) {\\n return new Keccak(bits, padding, outputBits);\\n };\\n method.update = function (message, outputBits) {\\n return method.create(outputBits).update(message);\\n };\\n return createOutputMethods(method, createShakeOutputMethod, bits, padding);\\n };\\n\\n var createCshakeMethod = function (bits, padding) {\\n var w = CSHAKE_BYTEPAD[bits];\\n var method = createCshakeOutputMethod(bits, padding, 'hex');\\n method.create = function (outputBits, n, s) {\\n if (!n && !s) {\\n return methods['shake' + bits].create(outputBits);\\n } else {\\n return new Keccak(bits, padding, outputBits).bytepad([n, s], w);\\n }\\n };\\n method.update = function (message, outputBits, n, s) {\\n return method.create(outputBits, n, s).update(message);\\n };\\n return createOutputMethods(method, createCshakeOutputMethod, bits, padding);\\n };\\n\\n var createKmacMethod = function (bits, padding) {\\n var w = CSHAKE_BYTEPAD[bits];\\n var method = createKmacOutputMethod(bits, padding, 'hex');\\n method.create = function (key, outputBits, s) {\\n return new Kmac(bits, padding, outputBits).bytepad(['KMAC', s], w).bytepad([key], w);\\n };\\n method.update = function (key, message, outputBits, s) {\\n return method.create(key, outputBits, s).update(message);\\n };\\n return createOutputMethods(method, createKmacOutputMethod, bits, padding);\\n };\\n\\n var algorithms = [\\n { name: 'keccak', padding: KECCAK_PADDING, bits: BITS, createMethod: createMethod },\\n { name: 'sha3', padding: PADDING, bits: BITS, createMethod: createMethod },\\n { name: 'shake', padding: SHAKE_PADDING, bits: SHAKE_BITS, createMethod: createShakeMethod },\\n { name: 'cshake', padding: CSHAKE_PADDING, bits: SHAKE_BITS, createMethod: createCshakeMethod },\\n { name: 'kmac', padding: CSHAKE_PADDING, bits: SHAKE_BITS, createMethod: createKmacMethod }\\n ];\\n\\n var methods = {}, methodNames = [];\\n\\n for (var i = 0; i < algorithms.length; ++i) {\\n var algorithm = algorithms[i];\\n var bits = algorithm.bits;\\n for (var j = 0; j < bits.length; ++j) {\\n var methodName = algorithm.name + '_' + bits[j];\\n methodNames.push(methodName);\\n methods[methodName] = algorithm.createMethod(bits[j], algorithm.padding);\\n if (algorithm.name !== 'sha3') {\\n var newMethodName = algorithm.name + bits[j];\\n methodNames.push(newMethodName);\\n methods[newMethodName] = methods[methodName];\\n }\\n }\\n }\\n\\n function Keccak(bits, padding, outputBits) {\\n this.blocks = [];\\n this.s = [];\\n this.padding = padding;\\n this.outputBits = outputBits;\\n this.reset = true;\\n this.finalized = false;\\n this.block = 0;\\n this.start = 0;\\n this.blockCount = (1600 - (bits << 1)) >> 5;\\n this.byteCount = this.blockCount << 2;\\n this.outputBlocks = outputBits >> 5;\\n this.extraBytes = (outputBits & 31) >> 3;\\n\\n for (var i = 0; i < 50; ++i) {\\n this.s[i] = 0;\\n }\\n }\\n\\n Keccak.prototype.update = function (message) {\\n if (this.finalized) {\\n throw new Error(FINALIZE_ERROR);\\n }\\n var notString, type = typeof message;\\n if (type !== 'string') {\\n if (type === 'object') {\\n if (message === null) {\\n throw new Error(INPUT_ERROR);\\n } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\\n message = new Uint8Array(message);\\n } else if (!Array.isArray(message)) {\\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {\\n throw new Error(INPUT_ERROR);\\n }\\n }\\n } else {\\n throw new Error(INPUT_ERROR);\\n }\\n notString = true;\\n }\\n var blocks = this.blocks, byteCount = this.byteCount, length = message.length,\\n blockCount = this.blockCount, index = 0, s = this.s, i, code;\\n\\n while (index < length) {\\n if (this.reset) {\\n this.reset = false;\\n blocks[0] = this.block;\\n for (i = 1; i < blockCount + 1; ++i) {\\n blocks[i] = 0;\\n }\\n }\\n if (notString) {\\n for (i = this.start; index < length && i < byteCount; ++index) {\\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\\n }\\n } else {\\n for (i = this.start; index < length && i < byteCount; ++index) {\\n code = message.charCodeAt(index);\\n if (code < 0x80) {\\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\\n } else if (code < 0x800) {\\n blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\\n } else if (code < 0xd800 || code >= 0xe000) {\\n blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\\n } else {\\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\\n blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\\n blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\\n }\\n }\\n }\\n this.lastByteIndex = i;\\n if (i >= byteCount) {\\n this.start = i - byteCount;\\n this.block = blocks[blockCount];\\n for (i = 0; i < blockCount; ++i) {\\n s[i] ^= blocks[i];\\n }\\n f(s);\\n this.reset = true;\\n } else {\\n this.start = i;\\n }\\n }\\n return this;\\n };\\n\\n Keccak.prototype.encode = function (x, right) {\\n var o = x & 255, n = 1;\\n var bytes = [o];\\n x = x >> 8;\\n o = x & 255;\\n while (o > 0) {\\n bytes.unshift(o);\\n x = x >> 8;\\n o = x & 255;\\n ++n;\\n }\\n if (right) {\\n bytes.push(n);\\n } else {\\n bytes.unshift(n);\\n }\\n this.update(bytes);\\n return bytes.length;\\n };\\n\\n Keccak.prototype.encodeString = function (str) {\\n var notString, type = typeof str;\\n if (type !== 'string') {\\n if (type === 'object') {\\n if (str === null) {\\n throw new Error(INPUT_ERROR);\\n } else if (ARRAY_BUFFER && str.constructor === ArrayBuffer) {\\n str = new Uint8Array(str);\\n } else if (!Array.isArray(str)) {\\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(str)) {\\n throw new Error(INPUT_ERROR);\\n }\\n }\\n } else {\\n throw new Error(INPUT_ERROR);\\n }\\n notString = true;\\n }\\n var bytes = 0, length = str.length;\\n if (notString) {\\n bytes = length;\\n } else {\\n for (var i = 0; i < str.length; ++i) {\\n var code = str.charCodeAt(i);\\n if (code < 0x80) {\\n bytes += 1;\\n } else if (code < 0x800) {\\n bytes += 2;\\n } else if (code < 0xd800 || code >= 0xe000) {\\n bytes += 3;\\n } else {\\n code = 0x10000 + (((code & 0x3ff) << 10) | (str.charCodeAt(++i) & 0x3ff));\\n bytes += 4;\\n }\\n }\\n }\\n bytes += this.encode(bytes * 8);\\n this.update(str);\\n return bytes;\\n };\\n\\n Keccak.prototype.bytepad = function (strs, w) {\\n var bytes = this.encode(w);\\n for (var i = 0; i < strs.length; ++i) {\\n bytes += this.encodeString(strs[i]);\\n }\\n var paddingBytes = w - bytes % w;\\n var zeros = [];\\n zeros.length = paddingBytes;\\n this.update(zeros);\\n return this;\\n };\\n\\n Keccak.prototype.finalize = function () {\\n if (this.finalized) {\\n return;\\n }\\n this.finalized = true;\\n var blocks = this.blocks, i = this.lastByteIndex, blockCount = this.blockCount, s = this.s;\\n blocks[i >> 2] |= this.padding[i & 3];\\n if (this.lastByteIndex === this.byteCount) {\\n blocks[0] = blocks[blockCount];\\n for (i = 1; i < blockCount + 1; ++i) {\\n blocks[i] = 0;\\n }\\n }\\n blocks[blockCount - 1] |= 0x80000000;\\n for (i = 0; i < blockCount; ++i) {\\n s[i] ^= blocks[i];\\n }\\n f(s);\\n };\\n\\n Keccak.prototype.toString = Keccak.prototype.hex = function () {\\n this.finalize();\\n\\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\\n extraBytes = this.extraBytes, i = 0, j = 0;\\n var hex = '', block;\\n while (j < outputBlocks) {\\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\\n block = s[i];\\n hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F] +\\n HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F] +\\n HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F] +\\n HEX_CHARS[(block >> 28) & 0x0F] + HEX_CHARS[(block >> 24) & 0x0F];\\n }\\n if (j % blockCount === 0) {\\n f(s);\\n i = 0;\\n }\\n }\\n if (extraBytes) {\\n block = s[i];\\n hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F];\\n if (extraBytes > 1) {\\n hex += HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F];\\n }\\n if (extraBytes > 2) {\\n hex += HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F];\\n }\\n }\\n return hex;\\n };\\n\\n Keccak.prototype.arrayBuffer = function () {\\n this.finalize();\\n\\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\\n extraBytes = this.extraBytes, i = 0, j = 0;\\n var bytes = this.outputBits >> 3;\\n var buffer;\\n if (extraBytes) {\\n buffer = new ArrayBuffer((outputBlocks + 1) << 2);\\n } else {\\n buffer = new ArrayBuffer(bytes);\\n }\\n var array = new Uint32Array(buffer);\\n while (j < outputBlocks) {\\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\\n array[j] = s[i];\\n }\\n if (j % blockCount === 0) {\\n f(s);\\n }\\n }\\n if (extraBytes) {\\n array[i] = s[i];\\n buffer = buffer.slice(0, bytes);\\n }\\n return buffer;\\n };\\n\\n Keccak.prototype.buffer = Keccak.prototype.arrayBuffer;\\n\\n Keccak.prototype.digest = Keccak.prototype.array = function () {\\n this.finalize();\\n\\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\\n extraBytes = this.extraBytes, i = 0, j = 0;\\n var array = [], offset, block;\\n while (j < outputBlocks) {\\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\\n offset = j << 2;\\n block = s[i];\\n array[offset] = block & 0xFF;\\n array[offset + 1] = (block >> 8) & 0xFF;\\n array[offset + 2] = (block >> 16) & 0xFF;\\n array[offset + 3] = (block >> 24) & 0xFF;\\n }\\n if (j % blockCount === 0) {\\n f(s);\\n }\\n }\\n if (extraBytes) {\\n offset = j << 2;\\n block = s[i];\\n array[offset] = block & 0xFF;\\n if (extraBytes > 1) {\\n array[offset + 1] = (block >> 8) & 0xFF;\\n }\\n if (extraBytes > 2) {\\n array[offset + 2] = (block >> 16) & 0xFF;\\n }\\n }\\n return array;\\n };\\n\\n function Kmac(bits, padding, outputBits) {\\n Keccak.call(this, bits, padding, outputBits);\\n }\\n\\n Kmac.prototype = new Keccak();\\n\\n Kmac.prototype.finalize = function () {\\n this.encode(this.outputBits, true);\\n return Keccak.prototype.finalize.call(this);\\n };\\n\\n var f = function (s) {\\n var h, l, n, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9,\\n b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17,\\n b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33,\\n b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49;\\n for (n = 0; n < 48; n += 2) {\\n c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40];\\n c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41];\\n c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42];\\n c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43];\\n c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44];\\n c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45];\\n c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46];\\n c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47];\\n c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48];\\n c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49];\\n\\n h = c8 ^ ((c2 << 1) | (c3 >>> 31));\\n l = c9 ^ ((c3 << 1) | (c2 >>> 31));\\n s[0] ^= h;\\n s[1] ^= l;\\n s[10] ^= h;\\n s[11] ^= l;\\n s[20] ^= h;\\n s[21] ^= l;\\n s[30] ^= h;\\n s[31] ^= l;\\n s[40] ^= h;\\n s[41] ^= l;\\n h = c0 ^ ((c4 << 1) | (c5 >>> 31));\\n l = c1 ^ ((c5 << 1) | (c4 >>> 31));\\n s[2] ^= h;\\n s[3] ^= l;\\n s[12] ^= h;\\n s[13] ^= l;\\n s[22] ^= h;\\n s[23] ^= l;\\n s[32] ^= h;\\n s[33] ^= l;\\n s[42] ^= h;\\n s[43] ^= l;\\n h = c2 ^ ((c6 << 1) | (c7 >>> 31));\\n l = c3 ^ ((c7 << 1) | (c6 >>> 31));\\n s[4] ^= h;\\n s[5] ^= l;\\n s[14] ^= h;\\n s[15] ^= l;\\n s[24] ^= h;\\n s[25] ^= l;\\n s[34] ^= h;\\n s[35] ^= l;\\n s[44] ^= h;\\n s[45] ^= l;\\n h = c4 ^ ((c8 << 1) | (c9 >>> 31));\\n l = c5 ^ ((c9 << 1) | (c8 >>> 31));\\n s[6] ^= h;\\n s[7] ^= l;\\n s[16] ^= h;\\n s[17] ^= l;\\n s[26] ^= h;\\n s[27] ^= l;\\n s[36] ^= h;\\n s[37] ^= l;\\n s[46] ^= h;\\n s[47] ^= l;\\n h = c6 ^ ((c0 << 1) | (c1 >>> 31));\\n l = c7 ^ ((c1 << 1) | (c0 >>> 31));\\n s[8] ^= h;\\n s[9] ^= l;\\n s[18] ^= h;\\n s[19] ^= l;\\n s[28] ^= h;\\n s[29] ^= l;\\n s[38] ^= h;\\n s[39] ^= l;\\n s[48] ^= h;\\n s[49] ^= l;\\n\\n b0 = s[0];\\n b1 = s[1];\\n b32 = (s[11] << 4) | (s[10] >>> 28);\\n b33 = (s[10] << 4) | (s[11] >>> 28);\\n b14 = (s[20] << 3) | (s[21] >>> 29);\\n b15 = (s[21] << 3) | (s[20] >>> 29);\\n b46 = (s[31] << 9) | (s[30] >>> 23);\\n b47 = (s[30] << 9) | (s[31] >>> 23);\\n b28 = (s[40] << 18) | (s[41] >>> 14);\\n b29 = (s[41] << 18) | (s[40] >>> 14);\\n b20 = (s[2] << 1) | (s[3] >>> 31);\\n b21 = (s[3] << 1) | (s[2] >>> 31);\\n b2 = (s[13] << 12) | (s[12] >>> 20);\\n b3 = (s[12] << 12) | (s[13] >>> 20);\\n b34 = (s[22] << 10) | (s[23] >>> 22);\\n b35 = (s[23] << 10) | (s[22] >>> 22);\\n b16 = (s[33] << 13) | (s[32] >>> 19);\\n b17 = (s[32] << 13) | (s[33] >>> 19);\\n b48 = (s[42] << 2) | (s[43] >>> 30);\\n b49 = (s[43] << 2) | (s[42] >>> 30);\\n b40 = (s[5] << 30) | (s[4] >>> 2);\\n b41 = (s[4] << 30) | (s[5] >>> 2);\\n b22 = (s[14] << 6) | (s[15] >>> 26);\\n b23 = (s[15] << 6) | (s[14] >>> 26);\\n b4 = (s[25] << 11) | (s[24] >>> 21);\\n b5 = (s[24] << 11) | (s[25] >>> 21);\\n b36 = (s[34] << 15) | (s[35] >>> 17);\\n b37 = (s[35] << 15) | (s[34] >>> 17);\\n b18 = (s[45] << 29) | (s[44] >>> 3);\\n b19 = (s[44] << 29) | (s[45] >>> 3);\\n b10 = (s[6] << 28) | (s[7] >>> 4);\\n b11 = (s[7] << 28) | (s[6] >>> 4);\\n b42 = (s[17] << 23) | (s[16] >>> 9);\\n b43 = (s[16] << 23) | (s[17] >>> 9);\\n b24 = (s[26] << 25) | (s[27] >>> 7);\\n b25 = (s[27] << 25) | (s[26] >>> 7);\\n b6 = (s[36] << 21) | (s[37] >>> 11);\\n b7 = (s[37] << 21) | (s[36] >>> 11);\\n b38 = (s[47] << 24) | (s[46] >>> 8);\\n b39 = (s[46] << 24) | (s[47] >>> 8);\\n b30 = (s[8] << 27) | (s[9] >>> 5);\\n b31 = (s[9] << 27) | (s[8] >>> 5);\\n b12 = (s[18] << 20) | (s[19] >>> 12);\\n b13 = (s[19] << 20) | (s[18] >>> 12);\\n b44 = (s[29] << 7) | (s[28] >>> 25);\\n b45 = (s[28] << 7) | (s[29] >>> 25);\\n b26 = (s[38] << 8) | (s[39] >>> 24);\\n b27 = (s[39] << 8) | (s[38] >>> 24);\\n b8 = (s[48] << 14) | (s[49] >>> 18);\\n b9 = (s[49] << 14) | (s[48] >>> 18);\\n\\n s[0] = b0 ^ (~b2 & b4);\\n s[1] = b1 ^ (~b3 & b5);\\n s[10] = b10 ^ (~b12 & b14);\\n s[11] = b11 ^ (~b13 & b15);\\n s[20] = b20 ^ (~b22 & b24);\\n s[21] = b21 ^ (~b23 & b25);\\n s[30] = b30 ^ (~b32 & b34);\\n s[31] = b31 ^ (~b33 & b35);\\n s[40] = b40 ^ (~b42 & b44);\\n s[41] = b41 ^ (~b43 & b45);\\n s[2] = b2 ^ (~b4 & b6);\\n s[3] = b3 ^ (~b5 & b7);\\n s[12] = b12 ^ (~b14 & b16);\\n s[13] = b13 ^ (~b15 & b17);\\n s[22] = b22 ^ (~b24 & b26);\\n s[23] = b23 ^ (~b25 & b27);\\n s[32] = b32 ^ (~b34 & b36);\\n s[33] = b33 ^ (~b35 & b37);\\n s[42] = b42 ^ (~b44 & b46);\\n s[43] = b43 ^ (~b45 & b47);\\n s[4] = b4 ^ (~b6 & b8);\\n s[5] = b5 ^ (~b7 & b9);\\n s[14] = b14 ^ (~b16 & b18);\\n s[15] = b15 ^ (~b17 & b19);\\n s[24] = b24 ^ (~b26 & b28);\\n s[25] = b25 ^ (~b27 & b29);\\n s[34] = b34 ^ (~b36 & b38);\\n s[35] = b35 ^ (~b37 & b39);\\n s[44] = b44 ^ (~b46 & b48);\\n s[45] = b45 ^ (~b47 & b49);\\n s[6] = b6 ^ (~b8 & b0);\\n s[7] = b7 ^ (~b9 & b1);\\n s[16] = b16 ^ (~b18 & b10);\\n s[17] = b17 ^ (~b19 & b11);\\n s[26] = b26 ^ (~b28 & b20);\\n s[27] = b27 ^ (~b29 & b21);\\n s[36] = b36 ^ (~b38 & b30);\\n s[37] = b37 ^ (~b39 & b31);\\n s[46] = b46 ^ (~b48 & b40);\\n s[47] = b47 ^ (~b49 & b41);\\n s[8] = b8 ^ (~b0 & b2);\\n s[9] = b9 ^ (~b1 & b3);\\n s[18] = b18 ^ (~b10 & b12);\\n s[19] = b19 ^ (~b11 & b13);\\n s[28] = b28 ^ (~b20 & b22);\\n s[29] = b29 ^ (~b21 & b23);\\n s[38] = b38 ^ (~b30 & b32);\\n s[39] = b39 ^ (~b31 & b33);\\n s[48] = b48 ^ (~b40 & b42);\\n s[49] = b49 ^ (~b41 & b43);\\n\\n s[0] ^= RC[n];\\n s[1] ^= RC[n + 1];\\n }\\n };\\n\\n if (COMMON_JS) {\\n module.exports = methods;\\n } else {\\n for (i = 0; i < methodNames.length; ++i) {\\n root[methodNames[i]] = methods[methodNames[i]];\\n }\\n if (AMD) {\\n !(__WEBPACK_AMD_DEFINE_RESULT__ = (function () {\\n return methods;\\n }).call(exports, __webpack_require__, exports, module),\\n\\t\\t\\t\\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\\n }\\n }\\n})();\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../process/browser.js */ \\\"./node_modules/process/browser.js\\\"), __webpack_require__(/*! ./../../../../webpack/buildin/global.js */ \\\"./node_modules/webpack/buildin/global.js\\\")))\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/node_modules/js-sha3/src/sha3.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/node_modules/multicodec/src/base-table.json\":\n/*!******************************************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/node_modules/multicodec/src/base-table.json ***!\n \\******************************************************************************/\n/*! exports provided: identity, ip4, tcp, sha1, sha2-256, sha2-512, sha3-512, sha3-384, sha3-256, sha3-224, shake-128, shake-256, keccak-224, keccak-256, keccak-384, keccak-512, dccp, murmur3-128, murmur3-32, ip6, ip6zone, path, multicodec, multihash, multiaddr, multibase, dns, dns4, dns6, dnsaddr, protobuf, cbor, raw, dbl-sha2-256, rlp, bencode, dag-pb, dag-cbor, libp2p-key, git-raw, torrent-info, torrent-file, leofcoin-block, leofcoin-tx, leofcoin-pr, sctp, eth-block, eth-block-list, eth-tx-trie, eth-tx, eth-tx-receipt-trie, eth-tx-receipt, eth-state-trie, eth-account-snapshot, eth-storage-trie, bitcoin-block, bitcoin-tx, zcash-block, zcash-tx, stellar-block, stellar-tx, md4, md5, bmt, decred-block, decred-tx, ipld-ns, ipfs-ns, swarm-ns, ipns-ns, zeronet, ed25519-pub, dash-block, dash-tx, swarm-manifest, swarm-feed, udp, p2p-webrtc-star, p2p-webrtc-direct, p2p-stardust, p2p-circuit, dag-json, udt, utp, unix, p2p, ipfs, https, onion, onion3, garlic64, garlic32, tls, quic, ws, wss, p2p-websocket-star, http, json, messagepack, x11, blake2b-8, blake2b-16, blake2b-24, blake2b-32, blake2b-40, blake2b-48, blake2b-56, blake2b-64, blake2b-72, blake2b-80, blake2b-88, blake2b-96, blake2b-104, blake2b-112, blake2b-120, blake2b-128, blake2b-136, blake2b-144, blake2b-152, blake2b-160, blake2b-168, blake2b-176, blake2b-184, blake2b-192, blake2b-200, blake2b-208, blake2b-216, blake2b-224, blake2b-232, blake2b-240, blake2b-248, blake2b-256, blake2b-264, blake2b-272, blake2b-280, blake2b-288, blake2b-296, blake2b-304, blake2b-312, blake2b-320, blake2b-328, blake2b-336, blake2b-344, blake2b-352, blake2b-360, blake2b-368, blake2b-376, blake2b-384, blake2b-392, blake2b-400, blake2b-408, blake2b-416, blake2b-424, blake2b-432, blake2b-440, blake2b-448, blake2b-456, blake2b-464, blake2b-472, blake2b-480, blake2b-488, blake2b-496, blake2b-504, blake2b-512, blake2s-8, blake2s-16, blake2s-24, blake2s-32, blake2s-40, blake2s-48, blake2s-56, blake2s-64, blake2s-72, blake2s-80, blake2s-88, blake2s-96, blake2s-104, blake2s-112, blake2s-120, blake2s-128, blake2s-136, blake2s-144, blake2s-152, blake2s-160, blake2s-168, blake2s-176, blake2s-184, blake2s-192, blake2s-200, blake2s-208, blake2s-216, blake2s-224, blake2s-232, blake2s-240, blake2s-248, blake2s-256, skein256-8, skein256-16, skein256-24, skein256-32, skein256-40, skein256-48, skein256-56, skein256-64, skein256-72, skein256-80, skein256-88, skein256-96, skein256-104, skein256-112, skein256-120, skein256-128, skein256-136, skein256-144, skein256-152, skein256-160, skein256-168, skein256-176, skein256-184, skein256-192, skein256-200, skein256-208, skein256-216, skein256-224, skein256-232, skein256-240, skein256-248, skein256-256, skein512-8, skein512-16, skein512-24, skein512-32, skein512-40, skein512-48, skein512-56, skein512-64, skein512-72, skein512-80, skein512-88, skein512-96, skein512-104, skein512-112, skein512-120, skein512-128, skein512-136, skein512-144, skein512-152, skein512-160, skein512-168, skein512-176, skein512-184, skein512-192, skein512-200, skein512-208, skein512-216, skein512-224, skein512-232, skein512-240, skein512-248, skein512-256, skein512-264, skein512-272, skein512-280, skein512-288, skein512-296, skein512-304, skein512-312, skein512-320, skein512-328, skein512-336, skein512-344, skein512-352, skein512-360, skein512-368, skein512-376, skein512-384, skein512-392, skein512-400, skein512-408, skein512-416, skein512-424, skein512-432, skein512-440, skein512-448, skein512-456, skein512-464, skein512-472, skein512-480, skein512-488, skein512-496, skein512-504, skein512-512, skein1024-8, skein1024-16, skein1024-24, skein1024-32, skein1024-40, skein1024-48, skein1024-56, skein1024-64, skein1024-72, skein1024-80, skein1024-88, skein1024-96, skein1024-104, skein1024-112, skein1024-120, skein1024-128, skein1024-136, skein1024-144, skein1024-152, skein1024-160, skein1024-168, skein1024-176, skein1024-184, skein1024-192, skein1024-200, skein1024-208, skein1024-216, skein1024-224, skein1024-232, skein1024-240, skein1024-248, skein1024-256, skein1024-264, skein1024-272, skein1024-280, skein1024-288, skein1024-296, skein1024-304, skein1024-312, skein1024-320, skein1024-328, skein1024-336, skein1024-344, skein1024-352, skein1024-360, skein1024-368, skein1024-376, skein1024-384, skein1024-392, skein1024-400, skein1024-408, skein1024-416, skein1024-424, skein1024-432, skein1024-440, skein1024-448, skein1024-456, skein1024-464, skein1024-472, skein1024-480, skein1024-488, skein1024-496, skein1024-504, skein1024-512, skein1024-520, skein1024-528, skein1024-536, skein1024-544, skein1024-552, skein1024-560, skein1024-568, skein1024-576, skein1024-584, skein1024-592, skein1024-600, skein1024-608, skein1024-616, skein1024-624, skein1024-632, skein1024-640, skein1024-648, skein1024-656, skein1024-664, skein1024-672, skein1024-680, skein1024-688, skein1024-696, skein1024-704, skein1024-712, skein1024-720, skein1024-728, skein1024-736, skein1024-744, skein1024-752, skein1024-760, skein1024-768, skein1024-776, skein1024-784, skein1024-792, skein1024-800, skein1024-808, skein1024-816, skein1024-824, skein1024-832, skein1024-840, skein1024-848, skein1024-856, skein1024-864, skein1024-872, skein1024-880, skein1024-888, skein1024-896, skein1024-904, skein1024-912, skein1024-920, skein1024-928, skein1024-936, skein1024-944, skein1024-952, skein1024-960, skein1024-968, skein1024-976, skein1024-984, skein1024-992, skein1024-1000, skein1024-1008, skein1024-1016, skein1024-1024, holochain-adr-v0, holochain-adr-v1, holochain-key-v0, holochain-key-v1, holochain-sig-v0, holochain-sig-v1, default */\n/***/ (function(module) {\n\neval(\"module.exports = {\\\"identity\\\":0,\\\"ip4\\\":4,\\\"tcp\\\":6,\\\"sha1\\\":17,\\\"sha2-256\\\":18,\\\"sha2-512\\\":19,\\\"sha3-512\\\":20,\\\"sha3-384\\\":21,\\\"sha3-256\\\":22,\\\"sha3-224\\\":23,\\\"shake-128\\\":24,\\\"shake-256\\\":25,\\\"keccak-224\\\":26,\\\"keccak-256\\\":27,\\\"keccak-384\\\":28,\\\"keccak-512\\\":29,\\\"dccp\\\":33,\\\"murmur3-128\\\":34,\\\"murmur3-32\\\":35,\\\"ip6\\\":41,\\\"ip6zone\\\":42,\\\"path\\\":47,\\\"multicodec\\\":48,\\\"multihash\\\":49,\\\"multiaddr\\\":50,\\\"multibase\\\":51,\\\"dns\\\":53,\\\"dns4\\\":54,\\\"dns6\\\":55,\\\"dnsaddr\\\":56,\\\"protobuf\\\":80,\\\"cbor\\\":81,\\\"raw\\\":85,\\\"dbl-sha2-256\\\":86,\\\"rlp\\\":96,\\\"bencode\\\":99,\\\"dag-pb\\\":112,\\\"dag-cbor\\\":113,\\\"libp2p-key\\\":114,\\\"git-raw\\\":120,\\\"torrent-info\\\":123,\\\"torrent-file\\\":124,\\\"leofcoin-block\\\":129,\\\"leofcoin-tx\\\":130,\\\"leofcoin-pr\\\":131,\\\"sctp\\\":132,\\\"eth-block\\\":144,\\\"eth-block-list\\\":145,\\\"eth-tx-trie\\\":146,\\\"eth-tx\\\":147,\\\"eth-tx-receipt-trie\\\":148,\\\"eth-tx-receipt\\\":149,\\\"eth-state-trie\\\":150,\\\"eth-account-snapshot\\\":151,\\\"eth-storage-trie\\\":152,\\\"bitcoin-block\\\":176,\\\"bitcoin-tx\\\":177,\\\"zcash-block\\\":192,\\\"zcash-tx\\\":193,\\\"stellar-block\\\":208,\\\"stellar-tx\\\":209,\\\"md4\\\":212,\\\"md5\\\":213,\\\"bmt\\\":214,\\\"decred-block\\\":224,\\\"decred-tx\\\":225,\\\"ipld-ns\\\":226,\\\"ipfs-ns\\\":227,\\\"swarm-ns\\\":228,\\\"ipns-ns\\\":229,\\\"zeronet\\\":230,\\\"ed25519-pub\\\":237,\\\"dash-block\\\":240,\\\"dash-tx\\\":241,\\\"swarm-manifest\\\":250,\\\"swarm-feed\\\":251,\\\"udp\\\":273,\\\"p2p-webrtc-star\\\":275,\\\"p2p-webrtc-direct\\\":276,\\\"p2p-stardust\\\":277,\\\"p2p-circuit\\\":290,\\\"dag-json\\\":297,\\\"udt\\\":301,\\\"utp\\\":302,\\\"unix\\\":400,\\\"p2p\\\":421,\\\"ipfs\\\":421,\\\"https\\\":443,\\\"onion\\\":444,\\\"onion3\\\":445,\\\"garlic64\\\":446,\\\"garlic32\\\":447,\\\"tls\\\":448,\\\"quic\\\":460,\\\"ws\\\":477,\\\"wss\\\":478,\\\"p2p-websocket-star\\\":479,\\\"http\\\":480,\\\"json\\\":512,\\\"messagepack\\\":513,\\\"x11\\\":4352,\\\"blake2b-8\\\":45569,\\\"blake2b-16\\\":45570,\\\"blake2b-24\\\":45571,\\\"blake2b-32\\\":45572,\\\"blake2b-40\\\":45573,\\\"blake2b-48\\\":45574,\\\"blake2b-56\\\":45575,\\\"blake2b-64\\\":45576,\\\"blake2b-72\\\":45577,\\\"blake2b-80\\\":45578,\\\"blake2b-88\\\":45579,\\\"blake2b-96\\\":45580,\\\"blake2b-104\\\":45581,\\\"blake2b-112\\\":45582,\\\"blake2b-120\\\":45583,\\\"blake2b-128\\\":45584,\\\"blake2b-136\\\":45585,\\\"blake2b-144\\\":45586,\\\"blake2b-152\\\":45587,\\\"blake2b-160\\\":45588,\\\"blake2b-168\\\":45589,\\\"blake2b-176\\\":45590,\\\"blake2b-184\\\":45591,\\\"blake2b-192\\\":45592,\\\"blake2b-200\\\":45593,\\\"blake2b-208\\\":45594,\\\"blake2b-216\\\":45595,\\\"blake2b-224\\\":45596,\\\"blake2b-232\\\":45597,\\\"blake2b-240\\\":45598,\\\"blake2b-248\\\":45599,\\\"blake2b-256\\\":45600,\\\"blake2b-264\\\":45601,\\\"blake2b-272\\\":45602,\\\"blake2b-280\\\":45603,\\\"blake2b-288\\\":45604,\\\"blake2b-296\\\":45605,\\\"blake2b-304\\\":45606,\\\"blake2b-312\\\":45607,\\\"blake2b-320\\\":45608,\\\"blake2b-328\\\":45609,\\\"blake2b-336\\\":45610,\\\"blake2b-344\\\":45611,\\\"blake2b-352\\\":45612,\\\"blake2b-360\\\":45613,\\\"blake2b-368\\\":45614,\\\"blake2b-376\\\":45615,\\\"blake2b-384\\\":45616,\\\"blake2b-392\\\":45617,\\\"blake2b-400\\\":45618,\\\"blake2b-408\\\":45619,\\\"blake2b-416\\\":45620,\\\"blake2b-424\\\":45621,\\\"blake2b-432\\\":45622,\\\"blake2b-440\\\":45623,\\\"blake2b-448\\\":45624,\\\"blake2b-456\\\":45625,\\\"blake2b-464\\\":45626,\\\"blake2b-472\\\":45627,\\\"blake2b-480\\\":45628,\\\"blake2b-488\\\":45629,\\\"blake2b-496\\\":45630,\\\"blake2b-504\\\":45631,\\\"blake2b-512\\\":45632,\\\"blake2s-8\\\":45633,\\\"blake2s-16\\\":45634,\\\"blake2s-24\\\":45635,\\\"blake2s-32\\\":45636,\\\"blake2s-40\\\":45637,\\\"blake2s-48\\\":45638,\\\"blake2s-56\\\":45639,\\\"blake2s-64\\\":45640,\\\"blake2s-72\\\":45641,\\\"blake2s-80\\\":45642,\\\"blake2s-88\\\":45643,\\\"blake2s-96\\\":45644,\\\"blake2s-104\\\":45645,\\\"blake2s-112\\\":45646,\\\"blake2s-120\\\":45647,\\\"blake2s-128\\\":45648,\\\"blake2s-136\\\":45649,\\\"blake2s-144\\\":45650,\\\"blake2s-152\\\":45651,\\\"blake2s-160\\\":45652,\\\"blake2s-168\\\":45653,\\\"blake2s-176\\\":45654,\\\"blake2s-184\\\":45655,\\\"blake2s-192\\\":45656,\\\"blake2s-200\\\":45657,\\\"blake2s-208\\\":45658,\\\"blake2s-216\\\":45659,\\\"blake2s-224\\\":45660,\\\"blake2s-232\\\":45661,\\\"blake2s-240\\\":45662,\\\"blake2s-248\\\":45663,\\\"blake2s-256\\\":45664,\\\"skein256-8\\\":45825,\\\"skein256-16\\\":45826,\\\"skein256-24\\\":45827,\\\"skein256-32\\\":45828,\\\"skein256-40\\\":45829,\\\"skein256-48\\\":45830,\\\"skein256-56\\\":45831,\\\"skein256-64\\\":45832,\\\"skein256-72\\\":45833,\\\"skein256-80\\\":45834,\\\"skein256-88\\\":45835,\\\"skein256-96\\\":45836,\\\"skein256-104\\\":45837,\\\"skein256-112\\\":45838,\\\"skein256-120\\\":45839,\\\"skein256-128\\\":45840,\\\"skein256-136\\\":45841,\\\"skein256-144\\\":45842,\\\"skein256-152\\\":45843,\\\"skein256-160\\\":45844,\\\"skein256-168\\\":45845,\\\"skein256-176\\\":45846,\\\"skein256-184\\\":45847,\\\"skein256-192\\\":45848,\\\"skein256-200\\\":45849,\\\"skein256-208\\\":45850,\\\"skein256-216\\\":45851,\\\"skein256-224\\\":45852,\\\"skein256-232\\\":45853,\\\"skein256-240\\\":45854,\\\"skein256-248\\\":45855,\\\"skein256-256\\\":45856,\\\"skein512-8\\\":45857,\\\"skein512-16\\\":45858,\\\"skein512-24\\\":45859,\\\"skein512-32\\\":45860,\\\"skein512-40\\\":45861,\\\"skein512-48\\\":45862,\\\"skein512-56\\\":45863,\\\"skein512-64\\\":45864,\\\"skein512-72\\\":45865,\\\"skein512-80\\\":45866,\\\"skein512-88\\\":45867,\\\"skein512-96\\\":45868,\\\"skein512-104\\\":45869,\\\"skein512-112\\\":45870,\\\"skein512-120\\\":45871,\\\"skein512-128\\\":45872,\\\"skein512-136\\\":45873,\\\"skein512-144\\\":45874,\\\"skein512-152\\\":45875,\\\"skein512-160\\\":45876,\\\"skein512-168\\\":45877,\\\"skein512-176\\\":45878,\\\"skein512-184\\\":45879,\\\"skein512-192\\\":45880,\\\"skein512-200\\\":45881,\\\"skein512-208\\\":45882,\\\"skein512-216\\\":45883,\\\"skein512-224\\\":45884,\\\"skein512-232\\\":45885,\\\"skein512-240\\\":45886,\\\"skein512-248\\\":45887,\\\"skein512-256\\\":45888,\\\"skein512-264\\\":45889,\\\"skein512-272\\\":45890,\\\"skein512-280\\\":45891,\\\"skein512-288\\\":45892,\\\"skein512-296\\\":45893,\\\"skein512-304\\\":45894,\\\"skein512-312\\\":45895,\\\"skein512-320\\\":45896,\\\"skein512-328\\\":45897,\\\"skein512-336\\\":45898,\\\"skein512-344\\\":45899,\\\"skein512-352\\\":45900,\\\"skein512-360\\\":45901,\\\"skein512-368\\\":45902,\\\"skein512-376\\\":45903,\\\"skein512-384\\\":45904,\\\"skein512-392\\\":45905,\\\"skein512-400\\\":45906,\\\"skein512-408\\\":45907,\\\"skein512-416\\\":45908,\\\"skein512-424\\\":45909,\\\"skein512-432\\\":45910,\\\"skein512-440\\\":45911,\\\"skein512-448\\\":45912,\\\"skein512-456\\\":45913,\\\"skein512-464\\\":45914,\\\"skein512-472\\\":45915,\\\"skein512-480\\\":45916,\\\"skein512-488\\\":45917,\\\"skein512-496\\\":45918,\\\"skein512-504\\\":45919,\\\"skein512-512\\\":45920,\\\"skein1024-8\\\":45921,\\\"skein1024-16\\\":45922,\\\"skein1024-24\\\":45923,\\\"skein1024-32\\\":45924,\\\"skein1024-40\\\":45925,\\\"skein1024-48\\\":45926,\\\"skein1024-56\\\":45927,\\\"skein1024-64\\\":45928,\\\"skein1024-72\\\":45929,\\\"skein1024-80\\\":45930,\\\"skein1024-88\\\":45931,\\\"skein1024-96\\\":45932,\\\"skein1024-104\\\":45933,\\\"skein1024-112\\\":45934,\\\"skein1024-120\\\":45935,\\\"skein1024-128\\\":45936,\\\"skein1024-136\\\":45937,\\\"skein1024-144\\\":45938,\\\"skein1024-152\\\":45939,\\\"skein1024-160\\\":45940,\\\"skein1024-168\\\":45941,\\\"skein1024-176\\\":45942,\\\"skein1024-184\\\":45943,\\\"skein1024-192\\\":45944,\\\"skein1024-200\\\":45945,\\\"skein1024-208\\\":45946,\\\"skein1024-216\\\":45947,\\\"skein1024-224\\\":45948,\\\"skein1024-232\\\":45949,\\\"skein1024-240\\\":45950,\\\"skein1024-248\\\":45951,\\\"skein1024-256\\\":45952,\\\"skein1024-264\\\":45953,\\\"skein1024-272\\\":45954,\\\"skein1024-280\\\":45955,\\\"skein1024-288\\\":45956,\\\"skein1024-296\\\":45957,\\\"skein1024-304\\\":45958,\\\"skein1024-312\\\":45959,\\\"skein1024-320\\\":45960,\\\"skein1024-328\\\":45961,\\\"skein1024-336\\\":45962,\\\"skein1024-344\\\":45963,\\\"skein1024-352\\\":45964,\\\"skein1024-360\\\":45965,\\\"skein1024-368\\\":45966,\\\"skein1024-376\\\":45967,\\\"skein1024-384\\\":45968,\\\"skein1024-392\\\":45969,\\\"skein1024-400\\\":45970,\\\"skein1024-408\\\":45971,\\\"skein1024-416\\\":45972,\\\"skein1024-424\\\":45973,\\\"skein1024-432\\\":45974,\\\"skein1024-440\\\":45975,\\\"skein1024-448\\\":45976,\\\"skein1024-456\\\":45977,\\\"skein1024-464\\\":45978,\\\"skein1024-472\\\":45979,\\\"skein1024-480\\\":45980,\\\"skein1024-488\\\":45981,\\\"skein1024-496\\\":45982,\\\"skein1024-504\\\":45983,\\\"skein1024-512\\\":45984,\\\"skein1024-520\\\":45985,\\\"skein1024-528\\\":45986,\\\"skein1024-536\\\":45987,\\\"skein1024-544\\\":45988,\\\"skein1024-552\\\":45989,\\\"skein1024-560\\\":45990,\\\"skein1024-568\\\":45991,\\\"skein1024-576\\\":45992,\\\"skein1024-584\\\":45993,\\\"skein1024-592\\\":45994,\\\"skein1024-600\\\":45995,\\\"skein1024-608\\\":45996,\\\"skein1024-616\\\":45997,\\\"skein1024-624\\\":45998,\\\"skein1024-632\\\":45999,\\\"skein1024-640\\\":46000,\\\"skein1024-648\\\":46001,\\\"skein1024-656\\\":46002,\\\"skein1024-664\\\":46003,\\\"skein1024-672\\\":46004,\\\"skein1024-680\\\":46005,\\\"skein1024-688\\\":46006,\\\"skein1024-696\\\":46007,\\\"skein1024-704\\\":46008,\\\"skein1024-712\\\":46009,\\\"skein1024-720\\\":46010,\\\"skein1024-728\\\":46011,\\\"skein1024-736\\\":46012,\\\"skein1024-744\\\":46013,\\\"skein1024-752\\\":46014,\\\"skein1024-760\\\":46015,\\\"skein1024-768\\\":46016,\\\"skein1024-776\\\":46017,\\\"skein1024-784\\\":46018,\\\"skein1024-792\\\":46019,\\\"skein1024-800\\\":46020,\\\"skein1024-808\\\":46021,\\\"skein1024-816\\\":46022,\\\"skein1024-824\\\":46023,\\\"skein1024-832\\\":46024,\\\"skein1024-840\\\":46025,\\\"skein1024-848\\\":46026,\\\"skein1024-856\\\":46027,\\\"skein1024-864\\\":46028,\\\"skein1024-872\\\":46029,\\\"skein1024-880\\\":46030,\\\"skein1024-888\\\":46031,\\\"skein1024-896\\\":46032,\\\"skein1024-904\\\":46033,\\\"skein1024-912\\\":46034,\\\"skein1024-920\\\":46035,\\\"skein1024-928\\\":46036,\\\"skein1024-936\\\":46037,\\\"skein1024-944\\\":46038,\\\"skein1024-952\\\":46039,\\\"skein1024-960\\\":46040,\\\"skein1024-968\\\":46041,\\\"skein1024-976\\\":46042,\\\"skein1024-984\\\":46043,\\\"skein1024-992\\\":46044,\\\"skein1024-1000\\\":46045,\\\"skein1024-1008\\\":46046,\\\"skein1024-1016\\\":46047,\\\"skein1024-1024\\\":46048,\\\"holochain-adr-v0\\\":8417572,\\\"holochain-adr-v1\\\":8483108,\\\"holochain-key-v0\\\":9728292,\\\"holochain-key-v1\\\":9793828,\\\"holochain-sig-v0\\\":10645796,\\\"holochain-sig-v1\\\":10711332};\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/node_modules/multicodec/src/base-table.json?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/node_modules/multicodec/src/constants.js\":\n/*!***************************************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/node_modules/multicodec/src/constants.js ***!\n \\***************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst table = __webpack_require__(/*! ./base-table.json */ \\\"./node_modules/ipld-dag-pb/node_modules/multicodec/src/base-table.json\\\")\\n\\n// map for codecConstant -> code\\nconst constants = {}\\n\\nfor (const [name, code] of Object.entries(table)) {\\n constants[name.toUpperCase().replace(/-/g, '_')] = code\\n}\\n\\nmodule.exports = Object.freeze(constants)\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/node_modules/multicodec/src/constants.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/node_modules/multicodec/src/index.js\":\n/*!***********************************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/node_modules/multicodec/src/index.js ***!\n \\***********************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {/**\\n * Implementation of the multicodec specification.\\n *\\n * @module multicodec\\n * @example\\n * const multicodec = require('multicodec')\\n *\\n * const prefixedProtobuf = multicodec.addPrefix('protobuf', protobufBuffer)\\n * // prefixedProtobuf 0x50...\\n *\\n */\\n\\n\\nconst varint = __webpack_require__(/*! varint */ \\\"./node_modules/varint/index.js\\\")\\nconst intTable = __webpack_require__(/*! ./int-table */ \\\"./node_modules/ipld-dag-pb/node_modules/multicodec/src/int-table.js\\\")\\nconst codecNameToCodeVarint = __webpack_require__(/*! ./varint-table */ \\\"./node_modules/ipld-dag-pb/node_modules/multicodec/src/varint-table.js\\\")\\nconst util = __webpack_require__(/*! ./util */ \\\"./node_modules/ipld-dag-pb/node_modules/multicodec/src/util.js\\\")\\n\\nexports = module.exports\\n\\n/**\\n * Prefix a buffer with a multicodec-packed.\\n *\\n * @param {string|number} multicodecStrOrCode\\n * @param {Buffer} data\\n * @returns {Buffer}\\n */\\nexports.addPrefix = (multicodecStrOrCode, data) => {\\n let prefix\\n\\n if (Buffer.isBuffer(multicodecStrOrCode)) {\\n prefix = util.varintBufferEncode(multicodecStrOrCode)\\n } else {\\n if (codecNameToCodeVarint[multicodecStrOrCode]) {\\n prefix = codecNameToCodeVarint[multicodecStrOrCode]\\n } else {\\n throw new Error('multicodec not recognized')\\n }\\n }\\n return Buffer.concat([prefix, data])\\n}\\n\\n/**\\n * Decapsulate the multicodec-packed prefix from the data.\\n *\\n * @param {Buffer} data\\n * @returns {Buffer}\\n */\\nexports.rmPrefix = (data) => {\\n varint.decode(data)\\n return data.slice(varint.decode.bytes)\\n}\\n\\n/**\\n * Get the codec of the prefixed data.\\n * @param {Buffer} prefixedData\\n * @returns {string}\\n */\\nexports.getCodec = (prefixedData) => {\\n const code = varint.decode(prefixedData)\\n const codecName = intTable.get(code)\\n if (codecName === undefined) {\\n throw new Error(`Code ${code} not found`)\\n }\\n return codecName\\n}\\n\\n/**\\n * Get the name of the codec.\\n * @param {number} codec\\n * @returns {string}\\n */\\nexports.getName = (codec) => {\\n return intTable.get(codec)\\n}\\n\\n/**\\n * Get the code of the codec\\n * @param {string} name\\n * @returns {number}\\n */\\nexports.getNumber = (name) => {\\n const code = codecNameToCodeVarint[name]\\n if (code === undefined) {\\n throw new Error('Codec `' + name + '` not found')\\n }\\n return util.varintBufferDecode(code)[0]\\n}\\n\\n/**\\n * Get the code of the prefixed data.\\n * @param {Buffer} prefixedData\\n * @returns {number}\\n */\\nexports.getCode = (prefixedData) => {\\n return varint.decode(prefixedData)\\n}\\n\\n/**\\n * Get the code as varint of a codec name.\\n * @param {string} codecName\\n * @returns {Buffer}\\n */\\nexports.getCodeVarint = (codecName) => {\\n const code = codecNameToCodeVarint[codecName]\\n if (code === undefined) {\\n throw new Error('Codec `' + codecName + '` not found')\\n }\\n return code\\n}\\n\\n/**\\n * Get the varint of a code.\\n * @param {Number} code\\n * @returns {Array.<number>}\\n */\\nexports.getVarint = (code) => {\\n return varint.encode(code)\\n}\\n\\n// Make the constants top-level constants\\nconst constants = __webpack_require__(/*! ./constants */ \\\"./node_modules/ipld-dag-pb/node_modules/multicodec/src/constants.js\\\")\\nObject.assign(exports, constants)\\n\\n// Human friendly names for printing, e.g. in error messages\\nexports.print = __webpack_require__(/*! ./print */ \\\"./node_modules/ipld-dag-pb/node_modules/multicodec/src/print.js\\\")\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/node_modules/multicodec/src/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/node_modules/multicodec/src/int-table.js\":\n/*!***************************************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/node_modules/multicodec/src/int-table.js ***!\n \\***************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nconst baseTable = __webpack_require__(/*! ./base-table.json */ \\\"./node_modules/ipld-dag-pb/node_modules/multicodec/src/base-table.json\\\")\\n\\n// map for hexString -> codecName\\nconst nameTable = new Map()\\n\\nfor (const encodingName in baseTable) {\\n const code = baseTable[encodingName]\\n nameTable.set(code, encodingName)\\n}\\n\\nmodule.exports = Object.freeze(nameTable)\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/node_modules/multicodec/src/int-table.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/node_modules/multicodec/src/print.js\":\n/*!***********************************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/node_modules/multicodec/src/print.js ***!\n \\***********************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst table = __webpack_require__(/*! ./base-table.json */ \\\"./node_modules/ipld-dag-pb/node_modules/multicodec/src/base-table.json\\\")\\n\\n// map for code -> print friendly name\\nconst tableByCode = {}\\n\\nfor (const [name, code] of Object.entries(table)) {\\n if (tableByCode[code] === undefined) tableByCode[code] = name\\n}\\n\\nmodule.exports = Object.freeze(tableByCode)\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/node_modules/multicodec/src/print.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/node_modules/multicodec/src/util.js\":\n/*!**********************************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/node_modules/multicodec/src/util.js ***!\n \\**********************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {\\nconst varint = __webpack_require__(/*! varint */ \\\"./node_modules/varint/index.js\\\")\\n\\nmodule.exports = {\\n numberToBuffer,\\n bufferToNumber,\\n varintBufferEncode,\\n varintBufferDecode,\\n varintEncode\\n}\\n\\nfunction bufferToNumber (buf) {\\n return parseInt(buf.toString('hex'), 16)\\n}\\n\\nfunction numberToBuffer (num) {\\n let hexString = num.toString(16)\\n if (hexString.length % 2 === 1) {\\n hexString = '0' + hexString\\n }\\n return Buffer.from(hexString, 'hex')\\n}\\n\\nfunction varintBufferEncode (input) {\\n return Buffer.from(varint.encode(bufferToNumber(input)))\\n}\\n\\nfunction varintBufferDecode (input) {\\n return numberToBuffer(varint.decode(input))\\n}\\n\\nfunction varintEncode (num) {\\n return Buffer.from(varint.encode(num))\\n}\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/node_modules/multicodec/src/util.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/node_modules/multicodec/src/varint-table.js\":\n/*!******************************************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/node_modules/multicodec/src/varint-table.js ***!\n \\******************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst baseTable = __webpack_require__(/*! ./base-table.json */ \\\"./node_modules/ipld-dag-pb/node_modules/multicodec/src/base-table.json\\\")\\nconst varintEncode = __webpack_require__(/*! ./util */ \\\"./node_modules/ipld-dag-pb/node_modules/multicodec/src/util.js\\\").varintEncode\\n\\n// map for codecName -> codeVarintBuffer\\nconst varintTable = {}\\n\\nfor (const encodingName in baseTable) {\\n const code = baseTable[encodingName]\\n varintTable[encodingName] = varintEncode(code)\\n}\\n\\nmodule.exports = Object.freeze(varintTable)\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/node_modules/multicodec/src/varint-table.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/node_modules/multihashes/src/constants.js\":\n/*!****************************************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/node_modules/multihashes/src/constants.js ***!\n \\****************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* eslint quote-props: off */\\n/* eslint key-spacing: off */\\n\\n\\nexports.names = Object.freeze({\\n 'identity': 0x0,\\n 'sha1': 0x11,\\n 'sha2-256': 0x12,\\n 'sha2-512': 0x13,\\n 'dbl-sha2-256': 0x56,\\n 'sha3-224': 0x17,\\n 'sha3-256': 0x16,\\n 'sha3-384': 0x15,\\n 'sha3-512': 0x14,\\n 'shake-128': 0x18,\\n 'shake-256': 0x19,\\n 'keccak-224': 0x1A,\\n 'keccak-256': 0x1B,\\n 'keccak-384': 0x1C,\\n 'keccak-512': 0x1D,\\n 'murmur3-128': 0x22,\\n 'murmur3-32': 0x23,\\n 'blake2b-8': 0xb201,\\n 'blake2b-16': 0xb202,\\n 'blake2b-24': 0xb203,\\n 'blake2b-32': 0xb204,\\n 'blake2b-40': 0xb205,\\n 'blake2b-48': 0xb206,\\n 'blake2b-56': 0xb207,\\n 'blake2b-64': 0xb208,\\n 'blake2b-72': 0xb209,\\n 'blake2b-80': 0xb20a,\\n 'blake2b-88': 0xb20b,\\n 'blake2b-96': 0xb20c,\\n 'blake2b-104': 0xb20d,\\n 'blake2b-112': 0xb20e,\\n 'blake2b-120': 0xb20f,\\n 'blake2b-128': 0xb210,\\n 'blake2b-136': 0xb211,\\n 'blake2b-144': 0xb212,\\n 'blake2b-152': 0xb213,\\n 'blake2b-160': 0xb214,\\n 'blake2b-168': 0xb215,\\n 'blake2b-176': 0xb216,\\n 'blake2b-184': 0xb217,\\n 'blake2b-192': 0xb218,\\n 'blake2b-200': 0xb219,\\n 'blake2b-208': 0xb21a,\\n 'blake2b-216': 0xb21b,\\n 'blake2b-224': 0xb21c,\\n 'blake2b-232': 0xb21d,\\n 'blake2b-240': 0xb21e,\\n 'blake2b-248': 0xb21f,\\n 'blake2b-256': 0xb220,\\n 'blake2b-264': 0xb221,\\n 'blake2b-272': 0xb222,\\n 'blake2b-280': 0xb223,\\n 'blake2b-288': 0xb224,\\n 'blake2b-296': 0xb225,\\n 'blake2b-304': 0xb226,\\n 'blake2b-312': 0xb227,\\n 'blake2b-320': 0xb228,\\n 'blake2b-328': 0xb229,\\n 'blake2b-336': 0xb22a,\\n 'blake2b-344': 0xb22b,\\n 'blake2b-352': 0xb22c,\\n 'blake2b-360': 0xb22d,\\n 'blake2b-368': 0xb22e,\\n 'blake2b-376': 0xb22f,\\n 'blake2b-384': 0xb230,\\n 'blake2b-392': 0xb231,\\n 'blake2b-400': 0xb232,\\n 'blake2b-408': 0xb233,\\n 'blake2b-416': 0xb234,\\n 'blake2b-424': 0xb235,\\n 'blake2b-432': 0xb236,\\n 'blake2b-440': 0xb237,\\n 'blake2b-448': 0xb238,\\n 'blake2b-456': 0xb239,\\n 'blake2b-464': 0xb23a,\\n 'blake2b-472': 0xb23b,\\n 'blake2b-480': 0xb23c,\\n 'blake2b-488': 0xb23d,\\n 'blake2b-496': 0xb23e,\\n 'blake2b-504': 0xb23f,\\n 'blake2b-512': 0xb240,\\n 'blake2s-8': 0xb241,\\n 'blake2s-16': 0xb242,\\n 'blake2s-24': 0xb243,\\n 'blake2s-32': 0xb244,\\n 'blake2s-40': 0xb245,\\n 'blake2s-48': 0xb246,\\n 'blake2s-56': 0xb247,\\n 'blake2s-64': 0xb248,\\n 'blake2s-72': 0xb249,\\n 'blake2s-80': 0xb24a,\\n 'blake2s-88': 0xb24b,\\n 'blake2s-96': 0xb24c,\\n 'blake2s-104': 0xb24d,\\n 'blake2s-112': 0xb24e,\\n 'blake2s-120': 0xb24f,\\n 'blake2s-128': 0xb250,\\n 'blake2s-136': 0xb251,\\n 'blake2s-144': 0xb252,\\n 'blake2s-152': 0xb253,\\n 'blake2s-160': 0xb254,\\n 'blake2s-168': 0xb255,\\n 'blake2s-176': 0xb256,\\n 'blake2s-184': 0xb257,\\n 'blake2s-192': 0xb258,\\n 'blake2s-200': 0xb259,\\n 'blake2s-208': 0xb25a,\\n 'blake2s-216': 0xb25b,\\n 'blake2s-224': 0xb25c,\\n 'blake2s-232': 0xb25d,\\n 'blake2s-240': 0xb25e,\\n 'blake2s-248': 0xb25f,\\n 'blake2s-256': 0xb260,\\n 'Skein256-8': 0xb301,\\n 'Skein256-16': 0xb302,\\n 'Skein256-24': 0xb303,\\n 'Skein256-32': 0xb304,\\n 'Skein256-40': 0xb305,\\n 'Skein256-48': 0xb306,\\n 'Skein256-56': 0xb307,\\n 'Skein256-64': 0xb308,\\n 'Skein256-72': 0xb309,\\n 'Skein256-80': 0xb30a,\\n 'Skein256-88': 0xb30b,\\n 'Skein256-96': 0xb30c,\\n 'Skein256-104': 0xb30d,\\n 'Skein256-112': 0xb30e,\\n 'Skein256-120': 0xb30f,\\n 'Skein256-128': 0xb310,\\n 'Skein256-136': 0xb311,\\n 'Skein256-144': 0xb312,\\n 'Skein256-152': 0xb313,\\n 'Skein256-160': 0xb314,\\n 'Skein256-168': 0xb315,\\n 'Skein256-176': 0xb316,\\n 'Skein256-184': 0xb317,\\n 'Skein256-192': 0xb318,\\n 'Skein256-200': 0xb319,\\n 'Skein256-208': 0xb31a,\\n 'Skein256-216': 0xb31b,\\n 'Skein256-224': 0xb31c,\\n 'Skein256-232': 0xb31d,\\n 'Skein256-240': 0xb31e,\\n 'Skein256-248': 0xb31f,\\n 'Skein256-256': 0xb320,\\n 'Skein512-8': 0xb321,\\n 'Skein512-16': 0xb322,\\n 'Skein512-24': 0xb323,\\n 'Skein512-32': 0xb324,\\n 'Skein512-40': 0xb325,\\n 'Skein512-48': 0xb326,\\n 'Skein512-56': 0xb327,\\n 'Skein512-64': 0xb328,\\n 'Skein512-72': 0xb329,\\n 'Skein512-80': 0xb32a,\\n 'Skein512-88': 0xb32b,\\n 'Skein512-96': 0xb32c,\\n 'Skein512-104': 0xb32d,\\n 'Skein512-112': 0xb32e,\\n 'Skein512-120': 0xb32f,\\n 'Skein512-128': 0xb330,\\n 'Skein512-136': 0xb331,\\n 'Skein512-144': 0xb332,\\n 'Skein512-152': 0xb333,\\n 'Skein512-160': 0xb334,\\n 'Skein512-168': 0xb335,\\n 'Skein512-176': 0xb336,\\n 'Skein512-184': 0xb337,\\n 'Skein512-192': 0xb338,\\n 'Skein512-200': 0xb339,\\n 'Skein512-208': 0xb33a,\\n 'Skein512-216': 0xb33b,\\n 'Skein512-224': 0xb33c,\\n 'Skein512-232': 0xb33d,\\n 'Skein512-240': 0xb33e,\\n 'Skein512-248': 0xb33f,\\n 'Skein512-256': 0xb340,\\n 'Skein512-264': 0xb341,\\n 'Skein512-272': 0xb342,\\n 'Skein512-280': 0xb343,\\n 'Skein512-288': 0xb344,\\n 'Skein512-296': 0xb345,\\n 'Skein512-304': 0xb346,\\n 'Skein512-312': 0xb347,\\n 'Skein512-320': 0xb348,\\n 'Skein512-328': 0xb349,\\n 'Skein512-336': 0xb34a,\\n 'Skein512-344': 0xb34b,\\n 'Skein512-352': 0xb34c,\\n 'Skein512-360': 0xb34d,\\n 'Skein512-368': 0xb34e,\\n 'Skein512-376': 0xb34f,\\n 'Skein512-384': 0xb350,\\n 'Skein512-392': 0xb351,\\n 'Skein512-400': 0xb352,\\n 'Skein512-408': 0xb353,\\n 'Skein512-416': 0xb354,\\n 'Skein512-424': 0xb355,\\n 'Skein512-432': 0xb356,\\n 'Skein512-440': 0xb357,\\n 'Skein512-448': 0xb358,\\n 'Skein512-456': 0xb359,\\n 'Skein512-464': 0xb35a,\\n 'Skein512-472': 0xb35b,\\n 'Skein512-480': 0xb35c,\\n 'Skein512-488': 0xb35d,\\n 'Skein512-496': 0xb35e,\\n 'Skein512-504': 0xb35f,\\n 'Skein512-512': 0xb360,\\n 'Skein1024-8': 0xb361,\\n 'Skein1024-16': 0xb362,\\n 'Skein1024-24': 0xb363,\\n 'Skein1024-32': 0xb364,\\n 'Skein1024-40': 0xb365,\\n 'Skein1024-48': 0xb366,\\n 'Skein1024-56': 0xb367,\\n 'Skein1024-64': 0xb368,\\n 'Skein1024-72': 0xb369,\\n 'Skein1024-80': 0xb36a,\\n 'Skein1024-88': 0xb36b,\\n 'Skein1024-96': 0xb36c,\\n 'Skein1024-104': 0xb36d,\\n 'Skein1024-112': 0xb36e,\\n 'Skein1024-120': 0xb36f,\\n 'Skein1024-128': 0xb370,\\n 'Skein1024-136': 0xb371,\\n 'Skein1024-144': 0xb372,\\n 'Skein1024-152': 0xb373,\\n 'Skein1024-160': 0xb374,\\n 'Skein1024-168': 0xb375,\\n 'Skein1024-176': 0xb376,\\n 'Skein1024-184': 0xb377,\\n 'Skein1024-192': 0xb378,\\n 'Skein1024-200': 0xb379,\\n 'Skein1024-208': 0xb37a,\\n 'Skein1024-216': 0xb37b,\\n 'Skein1024-224': 0xb37c,\\n 'Skein1024-232': 0xb37d,\\n 'Skein1024-240': 0xb37e,\\n 'Skein1024-248': 0xb37f,\\n 'Skein1024-256': 0xb380,\\n 'Skein1024-264': 0xb381,\\n 'Skein1024-272': 0xb382,\\n 'Skein1024-280': 0xb383,\\n 'Skein1024-288': 0xb384,\\n 'Skein1024-296': 0xb385,\\n 'Skein1024-304': 0xb386,\\n 'Skein1024-312': 0xb387,\\n 'Skein1024-320': 0xb388,\\n 'Skein1024-328': 0xb389,\\n 'Skein1024-336': 0xb38a,\\n 'Skein1024-344': 0xb38b,\\n 'Skein1024-352': 0xb38c,\\n 'Skein1024-360': 0xb38d,\\n 'Skein1024-368': 0xb38e,\\n 'Skein1024-376': 0xb38f,\\n 'Skein1024-384': 0xb390,\\n 'Skein1024-392': 0xb391,\\n 'Skein1024-400': 0xb392,\\n 'Skein1024-408': 0xb393,\\n 'Skein1024-416': 0xb394,\\n 'Skein1024-424': 0xb395,\\n 'Skein1024-432': 0xb396,\\n 'Skein1024-440': 0xb397,\\n 'Skein1024-448': 0xb398,\\n 'Skein1024-456': 0xb399,\\n 'Skein1024-464': 0xb39a,\\n 'Skein1024-472': 0xb39b,\\n 'Skein1024-480': 0xb39c,\\n 'Skein1024-488': 0xb39d,\\n 'Skein1024-496': 0xb39e,\\n 'Skein1024-504': 0xb39f,\\n 'Skein1024-512': 0xb3a0,\\n 'Skein1024-520': 0xb3a1,\\n 'Skein1024-528': 0xb3a2,\\n 'Skein1024-536': 0xb3a3,\\n 'Skein1024-544': 0xb3a4,\\n 'Skein1024-552': 0xb3a5,\\n 'Skein1024-560': 0xb3a6,\\n 'Skein1024-568': 0xb3a7,\\n 'Skein1024-576': 0xb3a8,\\n 'Skein1024-584': 0xb3a9,\\n 'Skein1024-592': 0xb3aa,\\n 'Skein1024-600': 0xb3ab,\\n 'Skein1024-608': 0xb3ac,\\n 'Skein1024-616': 0xb3ad,\\n 'Skein1024-624': 0xb3ae,\\n 'Skein1024-632': 0xb3af,\\n 'Skein1024-640': 0xb3b0,\\n 'Skein1024-648': 0xb3b1,\\n 'Skein1024-656': 0xb3b2,\\n 'Skein1024-664': 0xb3b3,\\n 'Skein1024-672': 0xb3b4,\\n 'Skein1024-680': 0xb3b5,\\n 'Skein1024-688': 0xb3b6,\\n 'Skein1024-696': 0xb3b7,\\n 'Skein1024-704': 0xb3b8,\\n 'Skein1024-712': 0xb3b9,\\n 'Skein1024-720': 0xb3ba,\\n 'Skein1024-728': 0xb3bb,\\n 'Skein1024-736': 0xb3bc,\\n 'Skein1024-744': 0xb3bd,\\n 'Skein1024-752': 0xb3be,\\n 'Skein1024-760': 0xb3bf,\\n 'Skein1024-768': 0xb3c0,\\n 'Skein1024-776': 0xb3c1,\\n 'Skein1024-784': 0xb3c2,\\n 'Skein1024-792': 0xb3c3,\\n 'Skein1024-800': 0xb3c4,\\n 'Skein1024-808': 0xb3c5,\\n 'Skein1024-816': 0xb3c6,\\n 'Skein1024-824': 0xb3c7,\\n 'Skein1024-832': 0xb3c8,\\n 'Skein1024-840': 0xb3c9,\\n 'Skein1024-848': 0xb3ca,\\n 'Skein1024-856': 0xb3cb,\\n 'Skein1024-864': 0xb3cc,\\n 'Skein1024-872': 0xb3cd,\\n 'Skein1024-880': 0xb3ce,\\n 'Skein1024-888': 0xb3cf,\\n 'Skein1024-896': 0xb3d0,\\n 'Skein1024-904': 0xb3d1,\\n 'Skein1024-912': 0xb3d2,\\n 'Skein1024-920': 0xb3d3,\\n 'Skein1024-928': 0xb3d4,\\n 'Skein1024-936': 0xb3d5,\\n 'Skein1024-944': 0xb3d6,\\n 'Skein1024-952': 0xb3d7,\\n 'Skein1024-960': 0xb3d8,\\n 'Skein1024-968': 0xb3d9,\\n 'Skein1024-976': 0xb3da,\\n 'Skein1024-984': 0xb3db,\\n 'Skein1024-992': 0xb3dc,\\n 'Skein1024-1000': 0xb3dd,\\n 'Skein1024-1008': 0xb3de,\\n 'Skein1024-1016': 0xb3df,\\n 'Skein1024-1024': 0xb3e0\\n})\\n\\nexports.codes = Object.freeze({\\n 0x0: 'identity',\\n\\n // sha family\\n 0x11: 'sha1',\\n 0x12: 'sha2-256',\\n 0x13: 'sha2-512',\\n 0x56: 'dbl-sha2-256',\\n 0x17: 'sha3-224',\\n 0x16: 'sha3-256',\\n 0x15: 'sha3-384',\\n 0x14: 'sha3-512',\\n 0x18: 'shake-128',\\n 0x19: 'shake-256',\\n 0x1A: 'keccak-224',\\n 0x1B: 'keccak-256',\\n 0x1C: 'keccak-384',\\n 0x1D: 'keccak-512',\\n\\n 0x22: 'murmur3-128',\\n 0x23: 'murmur3-32',\\n\\n // blake2\\n 0xb201: 'blake2b-8',\\n 0xb202: 'blake2b-16',\\n 0xb203: 'blake2b-24',\\n 0xb204: 'blake2b-32',\\n 0xb205: 'blake2b-40',\\n 0xb206: 'blake2b-48',\\n 0xb207: 'blake2b-56',\\n 0xb208: 'blake2b-64',\\n 0xb209: 'blake2b-72',\\n 0xb20a: 'blake2b-80',\\n 0xb20b: 'blake2b-88',\\n 0xb20c: 'blake2b-96',\\n 0xb20d: 'blake2b-104',\\n 0xb20e: 'blake2b-112',\\n 0xb20f: 'blake2b-120',\\n 0xb210: 'blake2b-128',\\n 0xb211: 'blake2b-136',\\n 0xb212: 'blake2b-144',\\n 0xb213: 'blake2b-152',\\n 0xb214: 'blake2b-160',\\n 0xb215: 'blake2b-168',\\n 0xb216: 'blake2b-176',\\n 0xb217: 'blake2b-184',\\n 0xb218: 'blake2b-192',\\n 0xb219: 'blake2b-200',\\n 0xb21a: 'blake2b-208',\\n 0xb21b: 'blake2b-216',\\n 0xb21c: 'blake2b-224',\\n 0xb21d: 'blake2b-232',\\n 0xb21e: 'blake2b-240',\\n 0xb21f: 'blake2b-248',\\n 0xb220: 'blake2b-256',\\n 0xb221: 'blake2b-264',\\n 0xb222: 'blake2b-272',\\n 0xb223: 'blake2b-280',\\n 0xb224: 'blake2b-288',\\n 0xb225: 'blake2b-296',\\n 0xb226: 'blake2b-304',\\n 0xb227: 'blake2b-312',\\n 0xb228: 'blake2b-320',\\n 0xb229: 'blake2b-328',\\n 0xb22a: 'blake2b-336',\\n 0xb22b: 'blake2b-344',\\n 0xb22c: 'blake2b-352',\\n 0xb22d: 'blake2b-360',\\n 0xb22e: 'blake2b-368',\\n 0xb22f: 'blake2b-376',\\n 0xb230: 'blake2b-384',\\n 0xb231: 'blake2b-392',\\n 0xb232: 'blake2b-400',\\n 0xb233: 'blake2b-408',\\n 0xb234: 'blake2b-416',\\n 0xb235: 'blake2b-424',\\n 0xb236: 'blake2b-432',\\n 0xb237: 'blake2b-440',\\n 0xb238: 'blake2b-448',\\n 0xb239: 'blake2b-456',\\n 0xb23a: 'blake2b-464',\\n 0xb23b: 'blake2b-472',\\n 0xb23c: 'blake2b-480',\\n 0xb23d: 'blake2b-488',\\n 0xb23e: 'blake2b-496',\\n 0xb23f: 'blake2b-504',\\n 0xb240: 'blake2b-512',\\n 0xb241: 'blake2s-8',\\n 0xb242: 'blake2s-16',\\n 0xb243: 'blake2s-24',\\n 0xb244: 'blake2s-32',\\n 0xb245: 'blake2s-40',\\n 0xb246: 'blake2s-48',\\n 0xb247: 'blake2s-56',\\n 0xb248: 'blake2s-64',\\n 0xb249: 'blake2s-72',\\n 0xb24a: 'blake2s-80',\\n 0xb24b: 'blake2s-88',\\n 0xb24c: 'blake2s-96',\\n 0xb24d: 'blake2s-104',\\n 0xb24e: 'blake2s-112',\\n 0xb24f: 'blake2s-120',\\n 0xb250: 'blake2s-128',\\n 0xb251: 'blake2s-136',\\n 0xb252: 'blake2s-144',\\n 0xb253: 'blake2s-152',\\n 0xb254: 'blake2s-160',\\n 0xb255: 'blake2s-168',\\n 0xb256: 'blake2s-176',\\n 0xb257: 'blake2s-184',\\n 0xb258: 'blake2s-192',\\n 0xb259: 'blake2s-200',\\n 0xb25a: 'blake2s-208',\\n 0xb25b: 'blake2s-216',\\n 0xb25c: 'blake2s-224',\\n 0xb25d: 'blake2s-232',\\n 0xb25e: 'blake2s-240',\\n 0xb25f: 'blake2s-248',\\n 0xb260: 'blake2s-256',\\n\\n // skein\\n 0xb301: 'Skein256-8',\\n 0xb302: 'Skein256-16',\\n 0xb303: 'Skein256-24',\\n 0xb304: 'Skein256-32',\\n 0xb305: 'Skein256-40',\\n 0xb306: 'Skein256-48',\\n 0xb307: 'Skein256-56',\\n 0xb308: 'Skein256-64',\\n 0xb309: 'Skein256-72',\\n 0xb30a: 'Skein256-80',\\n 0xb30b: 'Skein256-88',\\n 0xb30c: 'Skein256-96',\\n 0xb30d: 'Skein256-104',\\n 0xb30e: 'Skein256-112',\\n 0xb30f: 'Skein256-120',\\n 0xb310: 'Skein256-128',\\n 0xb311: 'Skein256-136',\\n 0xb312: 'Skein256-144',\\n 0xb313: 'Skein256-152',\\n 0xb314: 'Skein256-160',\\n 0xb315: 'Skein256-168',\\n 0xb316: 'Skein256-176',\\n 0xb317: 'Skein256-184',\\n 0xb318: 'Skein256-192',\\n 0xb319: 'Skein256-200',\\n 0xb31a: 'Skein256-208',\\n 0xb31b: 'Skein256-216',\\n 0xb31c: 'Skein256-224',\\n 0xb31d: 'Skein256-232',\\n 0xb31e: 'Skein256-240',\\n 0xb31f: 'Skein256-248',\\n 0xb320: 'Skein256-256',\\n 0xb321: 'Skein512-8',\\n 0xb322: 'Skein512-16',\\n 0xb323: 'Skein512-24',\\n 0xb324: 'Skein512-32',\\n 0xb325: 'Skein512-40',\\n 0xb326: 'Skein512-48',\\n 0xb327: 'Skein512-56',\\n 0xb328: 'Skein512-64',\\n 0xb329: 'Skein512-72',\\n 0xb32a: 'Skein512-80',\\n 0xb32b: 'Skein512-88',\\n 0xb32c: 'Skein512-96',\\n 0xb32d: 'Skein512-104',\\n 0xb32e: 'Skein512-112',\\n 0xb32f: 'Skein512-120',\\n 0xb330: 'Skein512-128',\\n 0xb331: 'Skein512-136',\\n 0xb332: 'Skein512-144',\\n 0xb333: 'Skein512-152',\\n 0xb334: 'Skein512-160',\\n 0xb335: 'Skein512-168',\\n 0xb336: 'Skein512-176',\\n 0xb337: 'Skein512-184',\\n 0xb338: 'Skein512-192',\\n 0xb339: 'Skein512-200',\\n 0xb33a: 'Skein512-208',\\n 0xb33b: 'Skein512-216',\\n 0xb33c: 'Skein512-224',\\n 0xb33d: 'Skein512-232',\\n 0xb33e: 'Skein512-240',\\n 0xb33f: 'Skein512-248',\\n 0xb340: 'Skein512-256',\\n 0xb341: 'Skein512-264',\\n 0xb342: 'Skein512-272',\\n 0xb343: 'Skein512-280',\\n 0xb344: 'Skein512-288',\\n 0xb345: 'Skein512-296',\\n 0xb346: 'Skein512-304',\\n 0xb347: 'Skein512-312',\\n 0xb348: 'Skein512-320',\\n 0xb349: 'Skein512-328',\\n 0xb34a: 'Skein512-336',\\n 0xb34b: 'Skein512-344',\\n 0xb34c: 'Skein512-352',\\n 0xb34d: 'Skein512-360',\\n 0xb34e: 'Skein512-368',\\n 0xb34f: 'Skein512-376',\\n 0xb350: 'Skein512-384',\\n 0xb351: 'Skein512-392',\\n 0xb352: 'Skein512-400',\\n 0xb353: 'Skein512-408',\\n 0xb354: 'Skein512-416',\\n 0xb355: 'Skein512-424',\\n 0xb356: 'Skein512-432',\\n 0xb357: 'Skein512-440',\\n 0xb358: 'Skein512-448',\\n 0xb359: 'Skein512-456',\\n 0xb35a: 'Skein512-464',\\n 0xb35b: 'Skein512-472',\\n 0xb35c: 'Skein512-480',\\n 0xb35d: 'Skein512-488',\\n 0xb35e: 'Skein512-496',\\n 0xb35f: 'Skein512-504',\\n 0xb360: 'Skein512-512',\\n 0xb361: 'Skein1024-8',\\n 0xb362: 'Skein1024-16',\\n 0xb363: 'Skein1024-24',\\n 0xb364: 'Skein1024-32',\\n 0xb365: 'Skein1024-40',\\n 0xb366: 'Skein1024-48',\\n 0xb367: 'Skein1024-56',\\n 0xb368: 'Skein1024-64',\\n 0xb369: 'Skein1024-72',\\n 0xb36a: 'Skein1024-80',\\n 0xb36b: 'Skein1024-88',\\n 0xb36c: 'Skein1024-96',\\n 0xb36d: 'Skein1024-104',\\n 0xb36e: 'Skein1024-112',\\n 0xb36f: 'Skein1024-120',\\n 0xb370: 'Skein1024-128',\\n 0xb371: 'Skein1024-136',\\n 0xb372: 'Skein1024-144',\\n 0xb373: 'Skein1024-152',\\n 0xb374: 'Skein1024-160',\\n 0xb375: 'Skein1024-168',\\n 0xb376: 'Skein1024-176',\\n 0xb377: 'Skein1024-184',\\n 0xb378: 'Skein1024-192',\\n 0xb379: 'Skein1024-200',\\n 0xb37a: 'Skein1024-208',\\n 0xb37b: 'Skein1024-216',\\n 0xb37c: 'Skein1024-224',\\n 0xb37d: 'Skein1024-232',\\n 0xb37e: 'Skein1024-240',\\n 0xb37f: 'Skein1024-248',\\n 0xb380: 'Skein1024-256',\\n 0xb381: 'Skein1024-264',\\n 0xb382: 'Skein1024-272',\\n 0xb383: 'Skein1024-280',\\n 0xb384: 'Skein1024-288',\\n 0xb385: 'Skein1024-296',\\n 0xb386: 'Skein1024-304',\\n 0xb387: 'Skein1024-312',\\n 0xb388: 'Skein1024-320',\\n 0xb389: 'Skein1024-328',\\n 0xb38a: 'Skein1024-336',\\n 0xb38b: 'Skein1024-344',\\n 0xb38c: 'Skein1024-352',\\n 0xb38d: 'Skein1024-360',\\n 0xb38e: 'Skein1024-368',\\n 0xb38f: 'Skein1024-376',\\n 0xb390: 'Skein1024-384',\\n 0xb391: 'Skein1024-392',\\n 0xb392: 'Skein1024-400',\\n 0xb393: 'Skein1024-408',\\n 0xb394: 'Skein1024-416',\\n 0xb395: 'Skein1024-424',\\n 0xb396: 'Skein1024-432',\\n 0xb397: 'Skein1024-440',\\n 0xb398: 'Skein1024-448',\\n 0xb399: 'Skein1024-456',\\n 0xb39a: 'Skein1024-464',\\n 0xb39b: 'Skein1024-472',\\n 0xb39c: 'Skein1024-480',\\n 0xb39d: 'Skein1024-488',\\n 0xb39e: 'Skein1024-496',\\n 0xb39f: 'Skein1024-504',\\n 0xb3a0: 'Skein1024-512',\\n 0xb3a1: 'Skein1024-520',\\n 0xb3a2: 'Skein1024-528',\\n 0xb3a3: 'Skein1024-536',\\n 0xb3a4: 'Skein1024-544',\\n 0xb3a5: 'Skein1024-552',\\n 0xb3a6: 'Skein1024-560',\\n 0xb3a7: 'Skein1024-568',\\n 0xb3a8: 'Skein1024-576',\\n 0xb3a9: 'Skein1024-584',\\n 0xb3aa: 'Skein1024-592',\\n 0xb3ab: 'Skein1024-600',\\n 0xb3ac: 'Skein1024-608',\\n 0xb3ad: 'Skein1024-616',\\n 0xb3ae: 'Skein1024-624',\\n 0xb3af: 'Skein1024-632',\\n 0xb3b0: 'Skein1024-640',\\n 0xb3b1: 'Skein1024-648',\\n 0xb3b2: 'Skein1024-656',\\n 0xb3b3: 'Skein1024-664',\\n 0xb3b4: 'Skein1024-672',\\n 0xb3b5: 'Skein1024-680',\\n 0xb3b6: 'Skein1024-688',\\n 0xb3b7: 'Skein1024-696',\\n 0xb3b8: 'Skein1024-704',\\n 0xb3b9: 'Skein1024-712',\\n 0xb3ba: 'Skein1024-720',\\n 0xb3bb: 'Skein1024-728',\\n 0xb3bc: 'Skein1024-736',\\n 0xb3bd: 'Skein1024-744',\\n 0xb3be: 'Skein1024-752',\\n 0xb3bf: 'Skein1024-760',\\n 0xb3c0: 'Skein1024-768',\\n 0xb3c1: 'Skein1024-776',\\n 0xb3c2: 'Skein1024-784',\\n 0xb3c3: 'Skein1024-792',\\n 0xb3c4: 'Skein1024-800',\\n 0xb3c5: 'Skein1024-808',\\n 0xb3c6: 'Skein1024-816',\\n 0xb3c7: 'Skein1024-824',\\n 0xb3c8: 'Skein1024-832',\\n 0xb3c9: 'Skein1024-840',\\n 0xb3ca: 'Skein1024-848',\\n 0xb3cb: 'Skein1024-856',\\n 0xb3cc: 'Skein1024-864',\\n 0xb3cd: 'Skein1024-872',\\n 0xb3ce: 'Skein1024-880',\\n 0xb3cf: 'Skein1024-888',\\n 0xb3d0: 'Skein1024-896',\\n 0xb3d1: 'Skein1024-904',\\n 0xb3d2: 'Skein1024-912',\\n 0xb3d3: 'Skein1024-920',\\n 0xb3d4: 'Skein1024-928',\\n 0xb3d5: 'Skein1024-936',\\n 0xb3d6: 'Skein1024-944',\\n 0xb3d7: 'Skein1024-952',\\n 0xb3d8: 'Skein1024-960',\\n 0xb3d9: 'Skein1024-968',\\n 0xb3da: 'Skein1024-976',\\n 0xb3db: 'Skein1024-984',\\n 0xb3dc: 'Skein1024-992',\\n 0xb3dd: 'Skein1024-1000',\\n 0xb3de: 'Skein1024-1008',\\n 0xb3df: 'Skein1024-1016',\\n 0xb3e0: 'Skein1024-1024'\\n})\\n\\nexports.defaultLengths = Object.freeze({\\n 0x11: 20,\\n 0x12: 32,\\n 0x13: 64,\\n 0x56: 32,\\n 0x17: 28,\\n 0x16: 32,\\n 0x15: 48,\\n 0x14: 64,\\n 0x18: 32,\\n 0x19: 64,\\n 0x1A: 28,\\n 0x1B: 32,\\n 0x1C: 48,\\n 0x1D: 64,\\n 0x22: 32,\\n\\n 0xb201: 0x01,\\n 0xb202: 0x02,\\n 0xb203: 0x03,\\n 0xb204: 0x04,\\n 0xb205: 0x05,\\n 0xb206: 0x06,\\n 0xb207: 0x07,\\n 0xb208: 0x08,\\n 0xb209: 0x09,\\n 0xb20a: 0x0a,\\n 0xb20b: 0x0b,\\n 0xb20c: 0x0c,\\n 0xb20d: 0x0d,\\n 0xb20e: 0x0e,\\n 0xb20f: 0x0f,\\n 0xb210: 0x10,\\n 0xb211: 0x11,\\n 0xb212: 0x12,\\n 0xb213: 0x13,\\n 0xb214: 0x14,\\n 0xb215: 0x15,\\n 0xb216: 0x16,\\n 0xb217: 0x17,\\n 0xb218: 0x18,\\n 0xb219: 0x19,\\n 0xb21a: 0x1a,\\n 0xb21b: 0x1b,\\n 0xb21c: 0x1c,\\n 0xb21d: 0x1d,\\n 0xb21e: 0x1e,\\n 0xb21f: 0x1f,\\n 0xb220: 0x20,\\n 0xb221: 0x21,\\n 0xb222: 0x22,\\n 0xb223: 0x23,\\n 0xb224: 0x24,\\n 0xb225: 0x25,\\n 0xb226: 0x26,\\n 0xb227: 0x27,\\n 0xb228: 0x28,\\n 0xb229: 0x29,\\n 0xb22a: 0x2a,\\n 0xb22b: 0x2b,\\n 0xb22c: 0x2c,\\n 0xb22d: 0x2d,\\n 0xb22e: 0x2e,\\n 0xb22f: 0x2f,\\n 0xb230: 0x30,\\n 0xb231: 0x31,\\n 0xb232: 0x32,\\n 0xb233: 0x33,\\n 0xb234: 0x34,\\n 0xb235: 0x35,\\n 0xb236: 0x36,\\n 0xb237: 0x37,\\n 0xb238: 0x38,\\n 0xb239: 0x39,\\n 0xb23a: 0x3a,\\n 0xb23b: 0x3b,\\n 0xb23c: 0x3c,\\n 0xb23d: 0x3d,\\n 0xb23e: 0x3e,\\n 0xb23f: 0x3f,\\n 0xb240: 0x40,\\n 0xb241: 0x01,\\n 0xb242: 0x02,\\n 0xb243: 0x03,\\n 0xb244: 0x04,\\n 0xb245: 0x05,\\n 0xb246: 0x06,\\n 0xb247: 0x07,\\n 0xb248: 0x08,\\n 0xb249: 0x09,\\n 0xb24a: 0x0a,\\n 0xb24b: 0x0b,\\n 0xb24c: 0x0c,\\n 0xb24d: 0x0d,\\n 0xb24e: 0x0e,\\n 0xb24f: 0x0f,\\n 0xb250: 0x10,\\n 0xb251: 0x11,\\n 0xb252: 0x12,\\n 0xb253: 0x13,\\n 0xb254: 0x14,\\n 0xb255: 0x15,\\n 0xb256: 0x16,\\n 0xb257: 0x17,\\n 0xb258: 0x18,\\n 0xb259: 0x19,\\n 0xb25a: 0x1a,\\n 0xb25b: 0x1b,\\n 0xb25c: 0x1c,\\n 0xb25d: 0x1d,\\n 0xb25e: 0x1e,\\n 0xb25f: 0x1f,\\n 0xb260: 0x20,\\n 0xb301: 0x01,\\n 0xb302: 0x02,\\n 0xb303: 0x03,\\n 0xb304: 0x04,\\n 0xb305: 0x05,\\n 0xb306: 0x06,\\n 0xb307: 0x07,\\n 0xb308: 0x08,\\n 0xb309: 0x09,\\n 0xb30a: 0x0a,\\n 0xb30b: 0x0b,\\n 0xb30c: 0x0c,\\n 0xb30d: 0x0d,\\n 0xb30e: 0x0e,\\n 0xb30f: 0x0f,\\n 0xb310: 0x10,\\n 0xb311: 0x11,\\n 0xb312: 0x12,\\n 0xb313: 0x13,\\n 0xb314: 0x14,\\n 0xb315: 0x15,\\n 0xb316: 0x16,\\n 0xb317: 0x17,\\n 0xb318: 0x18,\\n 0xb319: 0x19,\\n 0xb31a: 0x1a,\\n 0xb31b: 0x1b,\\n 0xb31c: 0x1c,\\n 0xb31d: 0x1d,\\n 0xb31e: 0x1e,\\n 0xb31f: 0x1f,\\n 0xb320: 0x20,\\n 0xb321: 0x01,\\n 0xb322: 0x02,\\n 0xb323: 0x03,\\n 0xb324: 0x04,\\n 0xb325: 0x05,\\n 0xb326: 0x06,\\n 0xb327: 0x07,\\n 0xb328: 0x08,\\n 0xb329: 0x09,\\n 0xb32a: 0x0a,\\n 0xb32b: 0x0b,\\n 0xb32c: 0x0c,\\n 0xb32d: 0x0d,\\n 0xb32e: 0x0e,\\n 0xb32f: 0x0f,\\n 0xb330: 0x10,\\n 0xb331: 0x11,\\n 0xb332: 0x12,\\n 0xb333: 0x13,\\n 0xb334: 0x14,\\n 0xb335: 0x15,\\n 0xb336: 0x16,\\n 0xb337: 0x17,\\n 0xb338: 0x18,\\n 0xb339: 0x19,\\n 0xb33a: 0x1a,\\n 0xb33b: 0x1b,\\n 0xb33c: 0x1c,\\n 0xb33d: 0x1d,\\n 0xb33e: 0x1e,\\n 0xb33f: 0x1f,\\n 0xb340: 0x20,\\n 0xb341: 0x21,\\n 0xb342: 0x22,\\n 0xb343: 0x23,\\n 0xb344: 0x24,\\n 0xb345: 0x25,\\n 0xb346: 0x26,\\n 0xb347: 0x27,\\n 0xb348: 0x28,\\n 0xb349: 0x29,\\n 0xb34a: 0x2a,\\n 0xb34b: 0x2b,\\n 0xb34c: 0x2c,\\n 0xb34d: 0x2d,\\n 0xb34e: 0x2e,\\n 0xb34f: 0x2f,\\n 0xb350: 0x30,\\n 0xb351: 0x31,\\n 0xb352: 0x32,\\n 0xb353: 0x33,\\n 0xb354: 0x34,\\n 0xb355: 0x35,\\n 0xb356: 0x36,\\n 0xb357: 0x37,\\n 0xb358: 0x38,\\n 0xb359: 0x39,\\n 0xb35a: 0x3a,\\n 0xb35b: 0x3b,\\n 0xb35c: 0x3c,\\n 0xb35d: 0x3d,\\n 0xb35e: 0x3e,\\n 0xb35f: 0x3f,\\n 0xb360: 0x40,\\n 0xb361: 0x01,\\n 0xb362: 0x02,\\n 0xb363: 0x03,\\n 0xb364: 0x04,\\n 0xb365: 0x05,\\n 0xb366: 0x06,\\n 0xb367: 0x07,\\n 0xb368: 0x08,\\n 0xb369: 0x09,\\n 0xb36a: 0x0a,\\n 0xb36b: 0x0b,\\n 0xb36c: 0x0c,\\n 0xb36d: 0x0d,\\n 0xb36e: 0x0e,\\n 0xb36f: 0x0f,\\n 0xb370: 0x10,\\n 0xb371: 0x11,\\n 0xb372: 0x12,\\n 0xb373: 0x13,\\n 0xb374: 0x14,\\n 0xb375: 0x15,\\n 0xb376: 0x16,\\n 0xb377: 0x17,\\n 0xb378: 0x18,\\n 0xb379: 0x19,\\n 0xb37a: 0x1a,\\n 0xb37b: 0x1b,\\n 0xb37c: 0x1c,\\n 0xb37d: 0x1d,\\n 0xb37e: 0x1e,\\n 0xb37f: 0x1f,\\n 0xb380: 0x20,\\n 0xb381: 0x21,\\n 0xb382: 0x22,\\n 0xb383: 0x23,\\n 0xb384: 0x24,\\n 0xb385: 0x25,\\n 0xb386: 0x26,\\n 0xb387: 0x27,\\n 0xb388: 0x28,\\n 0xb389: 0x29,\\n 0xb38a: 0x2a,\\n 0xb38b: 0x2b,\\n 0xb38c: 0x2c,\\n 0xb38d: 0x2d,\\n 0xb38e: 0x2e,\\n 0xb38f: 0x2f,\\n 0xb390: 0x30,\\n 0xb391: 0x31,\\n 0xb392: 0x32,\\n 0xb393: 0x33,\\n 0xb394: 0x34,\\n 0xb395: 0x35,\\n 0xb396: 0x36,\\n 0xb397: 0x37,\\n 0xb398: 0x38,\\n 0xb399: 0x39,\\n 0xb39a: 0x3a,\\n 0xb39b: 0x3b,\\n 0xb39c: 0x3c,\\n 0xb39d: 0x3d,\\n 0xb39e: 0x3e,\\n 0xb39f: 0x3f,\\n 0xb3a0: 0x40,\\n 0xb3a1: 0x41,\\n 0xb3a2: 0x42,\\n 0xb3a3: 0x43,\\n 0xb3a4: 0x44,\\n 0xb3a5: 0x45,\\n 0xb3a6: 0x46,\\n 0xb3a7: 0x47,\\n 0xb3a8: 0x48,\\n 0xb3a9: 0x49,\\n 0xb3aa: 0x4a,\\n 0xb3ab: 0x4b,\\n 0xb3ac: 0x4c,\\n 0xb3ad: 0x4d,\\n 0xb3ae: 0x4e,\\n 0xb3af: 0x4f,\\n 0xb3b0: 0x50,\\n 0xb3b1: 0x51,\\n 0xb3b2: 0x52,\\n 0xb3b3: 0x53,\\n 0xb3b4: 0x54,\\n 0xb3b5: 0x55,\\n 0xb3b6: 0x56,\\n 0xb3b7: 0x57,\\n 0xb3b8: 0x58,\\n 0xb3b9: 0x59,\\n 0xb3ba: 0x5a,\\n 0xb3bb: 0x5b,\\n 0xb3bc: 0x5c,\\n 0xb3bd: 0x5d,\\n 0xb3be: 0x5e,\\n 0xb3bf: 0x5f,\\n 0xb3c0: 0x60,\\n 0xb3c1: 0x61,\\n 0xb3c2: 0x62,\\n 0xb3c3: 0x63,\\n 0xb3c4: 0x64,\\n 0xb3c5: 0x65,\\n 0xb3c6: 0x66,\\n 0xb3c7: 0x67,\\n 0xb3c8: 0x68,\\n 0xb3c9: 0x69,\\n 0xb3ca: 0x6a,\\n 0xb3cb: 0x6b,\\n 0xb3cc: 0x6c,\\n 0xb3cd: 0x6d,\\n 0xb3ce: 0x6e,\\n 0xb3cf: 0x6f,\\n 0xb3d0: 0x70,\\n 0xb3d1: 0x71,\\n 0xb3d2: 0x72,\\n 0xb3d3: 0x73,\\n 0xb3d4: 0x74,\\n 0xb3d5: 0x75,\\n 0xb3d6: 0x76,\\n 0xb3d7: 0x77,\\n 0xb3d8: 0x78,\\n 0xb3d9: 0x79,\\n 0xb3da: 0x7a,\\n 0xb3db: 0x7b,\\n 0xb3dc: 0x7c,\\n 0xb3dd: 0x7d,\\n 0xb3de: 0x7e,\\n 0xb3df: 0x7f,\\n 0xb3e0: 0x80\\n})\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/node_modules/multihashes/src/constants.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/node_modules/multihashes/src/index.js\":\n/*!************************************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/node_modules/multihashes/src/index.js ***!\n \\************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {/**\\n * Multihash implementation in JavaScript.\\n *\\n * @module multihash\\n */\\n\\n\\nconst bs58 = __webpack_require__(/*! bs58 */ \\\"./node_modules/bs58/index.js\\\")\\n\\nconst cs = __webpack_require__(/*! ./constants */ \\\"./node_modules/ipld-dag-pb/node_modules/multihashes/src/constants.js\\\")\\n\\nexports.names = cs.names\\nexports.codes = cs.codes\\nexports.defaultLengths = cs.defaultLengths\\n\\nconst varint = __webpack_require__(/*! varint */ \\\"./node_modules/varint/index.js\\\")\\n\\n/**\\n * Convert the given multihash to a hex encoded string.\\n *\\n * @param {Buffer} hash\\n * @returns {string}\\n */\\nexports.toHexString = function toHexString (hash) {\\n if (!Buffer.isBuffer(hash)) {\\n throw new Error('must be passed a buffer')\\n }\\n\\n return hash.toString('hex')\\n}\\n\\n/**\\n * Convert the given hex encoded string to a multihash.\\n *\\n * @param {string} hash\\n * @returns {Buffer}\\n */\\nexports.fromHexString = function fromHexString (hash) {\\n return Buffer.from(hash, 'hex')\\n}\\n\\n/**\\n * Convert the given multihash to a base58 encoded string.\\n *\\n * @param {Buffer} hash\\n * @returns {string}\\n */\\nexports.toB58String = function toB58String (hash) {\\n if (!Buffer.isBuffer(hash)) {\\n throw new Error('must be passed a buffer')\\n }\\n\\n return bs58.encode(hash)\\n}\\n\\n/**\\n * Convert the given base58 encoded string to a multihash.\\n *\\n * @param {string|Buffer} hash\\n * @returns {Buffer}\\n */\\nexports.fromB58String = function fromB58String (hash) {\\n let encoded = hash\\n if (Buffer.isBuffer(hash)) {\\n encoded = hash.toString()\\n }\\n\\n return Buffer.from(bs58.decode(encoded))\\n}\\n\\n/**\\n * Decode a hash from the given multihash.\\n *\\n * @param {Buffer} buf\\n * @returns {{code: number, name: string, length: number, digest: Buffer}} result\\n */\\nexports.decode = function decode (buf) {\\n if (!(Buffer.isBuffer(buf))) {\\n throw new Error('multihash must be a Buffer')\\n }\\n\\n if (buf.length < 3) {\\n throw new Error('multihash too short. must be > 3 bytes.')\\n }\\n\\n const code = varint.decode(buf)\\n if (!exports.isValidCode(code)) {\\n throw new Error(`multihash unknown function code: 0x${code.toString(16)}`)\\n }\\n buf = buf.slice(varint.decode.bytes)\\n\\n const len = varint.decode(buf)\\n if (len < 1) {\\n throw new Error(`multihash invalid length: 0x${len.toString(16)}`)\\n }\\n buf = buf.slice(varint.decode.bytes)\\n\\n if (buf.length !== len) {\\n throw new Error(`multihash length inconsistent: 0x${buf.toString('hex')}`)\\n }\\n\\n return {\\n code: code,\\n name: cs.codes[code],\\n length: len,\\n digest: buf\\n }\\n}\\n\\n/**\\n * Encode a hash digest along with the specified function code.\\n *\\n * > **Note:** the length is derived from the length of the digest itself.\\n *\\n * @param {Buffer} digest\\n * @param {string|number} code\\n * @param {number} [length]\\n * @returns {Buffer}\\n */\\nexports.encode = function encode (digest, code, length) {\\n if (!digest || code === undefined) {\\n throw new Error('multihash encode requires at least two args: digest, code')\\n }\\n\\n // ensure it's a hashfunction code.\\n const hashfn = exports.coerceCode(code)\\n\\n if (!(Buffer.isBuffer(digest))) {\\n throw new Error('digest should be a Buffer')\\n }\\n\\n if (length == null) {\\n length = digest.length\\n }\\n\\n if (length && digest.length !== length) {\\n throw new Error('digest length should be equal to specified length.')\\n }\\n\\n return Buffer.concat([\\n Buffer.from(varint.encode(hashfn)),\\n Buffer.from(varint.encode(length)),\\n digest\\n ])\\n}\\n\\n/**\\n * Converts a hash function name into the matching code.\\n * If passed a number it will return the number if it's a valid code.\\n * @param {string|number} name\\n * @returns {number}\\n */\\nexports.coerceCode = function coerceCode (name) {\\n let code = name\\n\\n if (typeof name === 'string') {\\n if (cs.names[name] === undefined) {\\n throw new Error(`Unrecognized hash function named: ${name}`)\\n }\\n code = cs.names[name]\\n }\\n\\n if (typeof code !== 'number') {\\n throw new Error(`Hash function code should be a number. Got: ${code}`)\\n }\\n\\n if (cs.codes[code] === undefined && !exports.isAppCode(code)) {\\n throw new Error(`Unrecognized function code: ${code}`)\\n }\\n\\n return code\\n}\\n\\n/**\\n * Checks wether a code is part of the app range\\n *\\n * @param {number} code\\n * @returns {boolean}\\n */\\nexports.isAppCode = function appCode (code) {\\n return code > 0 && code < 0x10\\n}\\n\\n/**\\n * Checks whether a multihash code is valid.\\n *\\n * @param {number} code\\n * @returns {boolean}\\n */\\nexports.isValidCode = function validCode (code) {\\n if (exports.isAppCode(code)) {\\n return true\\n }\\n\\n if (cs.codes[code]) {\\n return true\\n }\\n\\n return false\\n}\\n\\n/**\\n * Check if the given buffer is a valid multihash. Throws an error if it is not valid.\\n *\\n * @param {Buffer} multihash\\n * @returns {undefined}\\n * @throws {Error}\\n */\\nfunction validate (multihash) {\\n exports.decode(multihash) // throws if bad.\\n}\\nexports.validate = validate\\n\\n/**\\n * Returns a prefix from a valid multihash. Throws an error if it is not valid.\\n *\\n * @param {Buffer} multihash\\n * @returns {undefined}\\n * @throws {Error}\\n */\\nexports.prefix = function prefix (multihash) {\\n validate(multihash)\\n\\n return multihash.slice(0, 2)\\n}\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/node_modules/multihashes/src/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/node_modules/multihashing-async/src/blake.js\":\n/*!*******************************************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/node_modules/multihashing-async/src/blake.js ***!\n \\*******************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst { Buffer } = __webpack_require__(/*! buffer */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\")\\nconst blake = __webpack_require__(/*! blakejs */ \\\"./node_modules/blakejs/index.js\\\")\\n\\nconst minB = 0xb201\\nconst minS = 0xb241\\n\\nconst blake2b = {\\n init: blake.blake2bInit,\\n update: blake.blake2bUpdate,\\n digest: blake.blake2bFinal\\n}\\n\\nconst blake2s = {\\n init: blake.blake2sInit,\\n update: blake.blake2sUpdate,\\n digest: blake.blake2sFinal\\n}\\n\\n// Note that although this function doesn't do any asynchronous work, we mark\\n// the function as async because it must return a Promise to match the API\\n// for other functions that do perform asynchronous work (see sha.browser.js)\\n// eslint-disable-next-line\\nconst makeB2Hash = (size, hf) => async (data) => {\\n const ctx = hf.init(size, null)\\n hf.update(ctx, data)\\n return Buffer.from(hf.digest(ctx))\\n}\\n\\nmodule.exports = (table) => {\\n for (let i = 0; i < 64; i++) {\\n table[minB + i] = makeB2Hash(i + 1, blake2b)\\n }\\n for (let i = 0; i < 32; i++) {\\n table[minS + i] = makeB2Hash(i + 1, blake2s)\\n }\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/node_modules/multihashing-async/src/blake.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/node_modules/multihashing-async/src/crypto.js\":\n/*!********************************************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/node_modules/multihashing-async/src/crypto.js ***!\n \\********************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst { Buffer } = __webpack_require__(/*! buffer */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\")\\nconst sha3 = __webpack_require__(/*! js-sha3 */ \\\"./node_modules/ipld-dag-pb/node_modules/js-sha3/src/sha3.js\\\")\\nconst mur = __webpack_require__(/*! murmurhash3js-revisited */ \\\"./node_modules/murmurhash3js-revisited/index.js\\\")\\nconst sha = __webpack_require__(/*! ./sha */ \\\"./node_modules/ipld-dag-pb/node_modules/multihashing-async/src/sha.browser.js\\\")\\nconst { fromNumberTo32BitBuf } = __webpack_require__(/*! ./utils */ \\\"./node_modules/ipld-dag-pb/node_modules/multihashing-async/src/utils.js\\\")\\n\\n// Note that although this function doesn't do any asynchronous work, we mark\\n// the function as async because it must return a Promise to match the API\\n// for other functions that do perform asynchronous work (see sha.browser.js)\\n// eslint-disable-next-line\\nconst hash = (algorithm) => async (data) => {\\n switch (algorithm) {\\n case 'sha3-224':\\n return Buffer.from(sha3.sha3_224.arrayBuffer(data))\\n case 'sha3-256':\\n return Buffer.from(sha3.sha3_256.arrayBuffer(data))\\n case 'sha3-384':\\n return Buffer.from(sha3.sha3_384.arrayBuffer(data))\\n case 'sha3-512':\\n return Buffer.from(sha3.sha3_512.arrayBuffer(data))\\n case 'shake-128':\\n return Buffer.from(sha3.shake128.create(128).update(data).arrayBuffer())\\n case 'shake-256':\\n return Buffer.from(sha3.shake256.create(256).update(data).arrayBuffer())\\n case 'keccak-224':\\n return Buffer.from(sha3.keccak224.arrayBuffer(data))\\n case 'keccak-256':\\n return Buffer.from(sha3.keccak256.arrayBuffer(data))\\n case 'keccak-384':\\n return Buffer.from(sha3.keccak384.arrayBuffer(data))\\n case 'keccak-512':\\n return Buffer.from(sha3.keccak512.arrayBuffer(data))\\n case 'murmur3-128':\\n return Buffer.from(mur.x64.hash128(data), 'hex')\\n case 'murmur3-32':\\n return fromNumberTo32BitBuf(mur.x86.hash32(data))\\n\\n default:\\n throw new TypeError(`${algorithm} is not a supported algorithm`)\\n }\\n}\\n\\nconst identity = data => Buffer.from(data)\\n\\nmodule.exports = {\\n identity,\\n sha1: sha('sha1'),\\n sha2256: sha('sha2-256'),\\n sha2512: sha('sha2-512'),\\n dblSha2256: sha('dbl-sha2-256'),\\n sha3224: hash('sha3-224'),\\n sha3256: hash('sha3-256'),\\n sha3384: hash('sha3-384'),\\n sha3512: hash('sha3-512'),\\n shake128: hash('shake-128'),\\n shake256: hash('shake-256'),\\n keccak224: hash('keccak-224'),\\n keccak256: hash('keccak-256'),\\n keccak384: hash('keccak-384'),\\n keccak512: hash('keccak-512'),\\n murmur3128: hash('murmur3-128'),\\n murmur332: hash('murmur3-32'),\\n addBlake: __webpack_require__(/*! ./blake */ \\\"./node_modules/ipld-dag-pb/node_modules/multihashing-async/src/blake.js\\\")\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/node_modules/multihashing-async/src/crypto.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/node_modules/multihashing-async/src/index.js\":\n/*!*******************************************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/node_modules/multihashing-async/src/index.js ***!\n \\*******************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst { Buffer } = __webpack_require__(/*! buffer */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\")\\nconst errcode = __webpack_require__(/*! err-code */ \\\"./node_modules/ipld-dag-pb/node_modules/err-code/index.js\\\")\\nconst multihash = __webpack_require__(/*! multihashes */ \\\"./node_modules/ipld-dag-pb/node_modules/multihashes/src/index.js\\\")\\nconst crypto = __webpack_require__(/*! ./crypto */ \\\"./node_modules/ipld-dag-pb/node_modules/multihashing-async/src/crypto.js\\\")\\n\\n/**\\n * Hash the given `buf` using the algorithm specified by `alg`.\\n * @param {Buffer} buf - The value to hash.\\n * @param {number|string} alg - The algorithm to use eg 'sha1'\\n * @param {number} [length] - Optionally trim the result to this length.\\n * @returns {Promise<Buffer>}\\n */\\nasync function Multihashing (buf, alg, length) {\\n const digest = await Multihashing.digest(buf, alg, length)\\n return multihash.encode(digest, alg, length)\\n}\\n\\n/**\\n * The `buffer` module for easy use in the browser.\\n *\\n * @type {Buffer}\\n */\\nMultihashing.Buffer = Buffer // for browser things\\n\\n/**\\n * Expose multihash itself, to avoid silly double requires.\\n */\\nMultihashing.multihash = multihash\\n\\n/**\\n * @param {Buffer} buf - The value to hash.\\n * @param {number|string} alg - The algorithm to use eg 'sha1'\\n * @param {number} [length] - Optionally trim the result to this length.\\n * @returns {Promise<Buffer>}\\n */\\nMultihashing.digest = async (buf, alg, length) => {\\n const hash = Multihashing.createHash(alg)\\n const digest = await hash(buf)\\n return length ? digest.slice(0, length) : digest\\n}\\n\\n/**\\n * Creates a function that hashes with the given algorithm\\n *\\n * @param {string|number} alg - The algorithm to use eg 'sha1'\\n *\\n * @returns {function} - The hash function corresponding to `alg`\\n */\\nMultihashing.createHash = function (alg) {\\n if (!alg) {\\n throw errcode(new Error('hash algorithm must be specified'), 'ERR_HASH_ALGORITHM_NOT_SPECIFIED')\\n }\\n\\n alg = multihash.coerceCode(alg)\\n if (!Multihashing.functions[alg]) {\\n throw errcode(new Error(`multihash function '${alg}' not yet supported`), 'ERR_HASH_ALGORITHM_NOT_SUPPORTED')\\n }\\n\\n return Multihashing.functions[alg]\\n}\\n\\n/**\\n * Mapping of multihash codes to their hashing functions.\\n * @type {Object}\\n */\\nMultihashing.functions = {\\n // identity\\n 0x00: crypto.identity,\\n // sha1\\n 0x11: crypto.sha1,\\n // sha2-256\\n 0x12: crypto.sha2256,\\n // sha2-512\\n 0x13: crypto.sha2512,\\n // sha3-512\\n 0x14: crypto.sha3512,\\n // sha3-384\\n 0x15: crypto.sha3384,\\n // sha3-256\\n 0x16: crypto.sha3256,\\n // sha3-224\\n 0x17: crypto.sha3224,\\n // shake-128\\n 0x18: crypto.shake128,\\n // shake-256\\n 0x19: crypto.shake256,\\n // keccak-224\\n 0x1A: crypto.keccak224,\\n // keccak-256\\n 0x1B: crypto.keccak256,\\n // keccak-384\\n 0x1C: crypto.keccak384,\\n // keccak-512\\n 0x1D: crypto.keccak512,\\n // murmur3-128\\n 0x22: crypto.murmur3128,\\n // murmur3-32\\n 0x23: crypto.murmur332,\\n // dbl-sha2-256\\n 0x56: crypto.dblSha2256\\n}\\n\\n// add blake functions\\ncrypto.addBlake(Multihashing.functions)\\n\\nMultihashing.validate = async (buf, hash) => {\\n const newHash = await Multihashing(buf, multihash.decode(hash).name)\\n\\n return Buffer.compare(hash, newHash) === 0\\n}\\n\\nmodule.exports = Multihashing\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/node_modules/multihashing-async/src/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/node_modules/multihashing-async/src/sha.browser.js\":\n/*!*************************************************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/node_modules/multihashing-async/src/sha.browser.js ***!\n \\*************************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst { Buffer } = __webpack_require__(/*! buffer */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\")\\n\\nconst crypto = self.crypto || self.msCrypto\\n\\nmodule.exports = (algorithm) => {\\n if (typeof self === 'undefined' || (!self.crypto && !self.msCrypto)) {\\n throw new Error(\\n 'Please use a browser with webcrypto support and ensure the code has been delivered securely via HTTPS/TLS and run within a Secure Context'\\n )\\n }\\n\\n return async (data) => {\\n switch (algorithm) {\\n case 'sha1':\\n return Buffer.from(await crypto.subtle.digest({ name: 'SHA-1' }, data))\\n case 'sha2-256':\\n return Buffer.from(await crypto.subtle.digest({ name: 'SHA-256' }, data))\\n case 'sha2-512':\\n return Buffer.from(await crypto.subtle.digest({ name: 'SHA-512' }, data))\\n case 'dbl-sha2-256': {\\n const d = await crypto.subtle.digest({ name: 'SHA-256' }, data)\\n return Buffer.from(await crypto.subtle.digest({ name: 'SHA-256' }, d))\\n }\\n default:\\n throw new Error(`${algorithm} is not a supported algorithm`)\\n }\\n }\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/node_modules/multihashing-async/src/sha.browser.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/node_modules/multihashing-async/src/utils.js\":\n/*!*******************************************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/node_modules/multihashing-async/src/utils.js ***!\n \\*******************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst { Buffer } = __webpack_require__(/*! buffer */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\")\\n\\nconst fromNumberTo32BitBuf = (number) => {\\n const bytes = new Array(4)\\n\\n for (let i = 0; i < 4; i++) {\\n bytes[i] = number & 0xff\\n number = number >> 8\\n }\\n\\n return Buffer.from(bytes)\\n}\\n\\nmodule.exports = {\\n fromNumberTo32BitBuf\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/node_modules/multihashing-async/src/utils.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/src/dag-link/dagLink.js\":\n/*!**********************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/src/dag-link/dagLink.js ***!\n \\**********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {\\n\\nconst CID = __webpack_require__(/*! cids */ \\\"./node_modules/ipld-dag-pb/node_modules/cids/src/index.js\\\")\\nconst assert = __webpack_require__(/*! assert */ \\\"./node_modules/assert/assert.js\\\")\\nconst withIs = __webpack_require__(/*! class-is */ \\\"./node_modules/class-is/index.js\\\")\\n\\n// Link represents an IPFS Merkle DAG Link between Nodes.\\nclass DAGLink {\\n constructor (name, size, cid) {\\n assert(cid, 'A link requires a cid to point to')\\n // assert(size, 'A link requires a size')\\n // note - links should include size, but this assert is disabled\\n // for now to maintain consistency with go-ipfs pinset\\n\\n this._name = name || ''\\n this._nameBuf = null\\n this._size = size\\n this._cid = new CID(cid)\\n }\\n\\n toString () {\\n return `DAGLink <${this._cid.toBaseEncodedString()} - name: \\\"${this.Name}\\\", size: ${this.Tsize}>`\\n }\\n\\n toJSON () {\\n if (!this._json) {\\n this._json = Object.freeze({\\n name: this.Name,\\n size: this.Tsize,\\n cid: this.Hash.toBaseEncodedString()\\n })\\n }\\n\\n return Object.assign({}, this._json)\\n }\\n\\n get Name () {\\n return this._name\\n }\\n\\n // Memoize the Buffer representation of name\\n // We need this to sort the links, otherwise\\n // we will reallocate new buffers every time\\n get nameAsBuffer () {\\n if (this._nameBuf !== null) {\\n return this._nameBuf\\n }\\n\\n this._nameBuf = Buffer.from(this._name)\\n return this._nameBuf\\n }\\n\\n set Name (name) {\\n throw new Error(\\\"Can't set property: 'name' is immutable\\\")\\n }\\n\\n get Tsize () {\\n return this._size\\n }\\n\\n set Tsize (size) {\\n throw new Error(\\\"Can't set property: 'size' is immutable\\\")\\n }\\n\\n get Hash () {\\n return this._cid\\n }\\n\\n set Hash (cid) {\\n throw new Error(\\\"Can't set property: 'cid' is immutable\\\")\\n }\\n}\\n\\nexports = module.exports = withIs(DAGLink, { className: 'DAGLink', symbolName: '@ipld/js-ipld-dag-pb/daglink' })\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/src/dag-link/dagLink.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/src/dag-link/index.js\":\n/*!********************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/src/dag-link/index.js ***!\n \\********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nexports = module.exports = __webpack_require__(/*! ./dagLink */ \\\"./node_modules/ipld-dag-pb/src/dag-link/dagLink.js\\\")\\nexports.util = __webpack_require__(/*! ./util */ \\\"./node_modules/ipld-dag-pb/src/dag-link/util.js\\\")\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/src/dag-link/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/src/dag-link/util.js\":\n/*!*******************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/src/dag-link/util.js ***!\n \\*******************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst DAGLink = __webpack_require__(/*! ./dagLink */ \\\"./node_modules/ipld-dag-pb/src/dag-link/dagLink.js\\\")\\n\\nfunction createDagLinkFromB58EncodedHash (link) {\\n return new DAGLink(\\n link.Name || link.name || '',\\n link.Tsize || link.Size || link.size || 0,\\n link.Hash || link.hash || link.multihash || link.cid\\n )\\n}\\n\\nexports = module.exports\\nexports.createDagLinkFromB58EncodedHash = createDagLinkFromB58EncodedHash\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/src/dag-link/util.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/src/dag-node/addLink.js\":\n/*!**********************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/src/dag-node/addLink.js ***!\n \\**********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst sortLinks = __webpack_require__(/*! ./sortLinks */ \\\"./node_modules/ipld-dag-pb/src/dag-node/sortLinks.js\\\")\\nconst DAGLink = __webpack_require__(/*! ../dag-link */ \\\"./node_modules/ipld-dag-pb/src/dag-link/index.js\\\")\\n\\nconst asDAGLink = (link) => {\\n if (DAGLink.isDAGLink(link)) {\\n // It's a DAGLink instance\\n // no need to do anything\\n return link\\n }\\n\\n // DAGNode.isDagNode() would be more appropriate here, but it can't be used\\n // as it would lead to circular dependencies as `addLink` is called from\\n // within the DAGNode object.\\n if (!('cid' in link ||\\n 'hash' in link ||\\n 'Hash' in link ||\\n 'multihash' in link)) {\\n throw new Error('Link must be a DAGLink or DAGLink-like. Convert the DAGNode into a DAGLink via `node.toDAGLink()`.')\\n }\\n\\n // It's a Object with name, multihash/hash/cid and size\\n return new DAGLink(link.Name || link.name, link.Tsize || link.size, link.Hash || link.multihash || link.hash || link.cid)\\n}\\n\\nconst addLink = (node, link) => {\\n const dagLink = asDAGLink(link)\\n node._links.push(dagLink)\\n node._links = sortLinks(node._links)\\n}\\n\\nmodule.exports = addLink\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/src/dag-node/addLink.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/src/dag-node/dagNode.js\":\n/*!**********************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/src/dag-node/dagNode.js ***!\n \\**********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {\\n\\nconst withIs = __webpack_require__(/*! class-is */ \\\"./node_modules/class-is/index.js\\\")\\nconst sortLinks = __webpack_require__(/*! ./sortLinks */ \\\"./node_modules/ipld-dag-pb/src/dag-node/sortLinks.js\\\")\\nconst DAGLink = __webpack_require__(/*! ../dag-link/dagLink */ \\\"./node_modules/ipld-dag-pb/src/dag-link/dagLink.js\\\")\\nconst { serializeDAGNode } = __webpack_require__(/*! ../serialize.js */ \\\"./node_modules/ipld-dag-pb/src/serialize.js\\\")\\nconst toDAGLink = __webpack_require__(/*! ./toDagLink */ \\\"./node_modules/ipld-dag-pb/src/dag-node/toDagLink.js\\\")\\nconst addLink = __webpack_require__(/*! ./addLink */ \\\"./node_modules/ipld-dag-pb/src/dag-node/addLink.js\\\")\\nconst rmLink = __webpack_require__(/*! ./rmLink */ \\\"./node_modules/ipld-dag-pb/src/dag-node/rmLink.js\\\")\\n\\nclass DAGNode {\\n constructor (data, links = [], serializedSize = null) {\\n if (!data) {\\n data = Buffer.alloc(0)\\n }\\n if (typeof data === 'string') {\\n data = Buffer.from(data)\\n }\\n if (!Buffer.isBuffer(data)) {\\n throw new Error('Passed \\\\'data\\\\' is not a buffer or a string!')\\n }\\n\\n if (serializedSize !== null && typeof serializedSize !== 'number') {\\n throw new Error('Passed \\\\'serializedSize\\\\' must be a number!')\\n }\\n\\n links = links.map((link) => {\\n return DAGLink.isDAGLink(link)\\n ? link\\n : DAGLink.util.createDagLinkFromB58EncodedHash(link)\\n })\\n links = sortLinks(links)\\n\\n this._data = data\\n this._links = links\\n this._serializedSize = serializedSize\\n this._size = null\\n }\\n\\n toJSON () {\\n if (!this._json) {\\n this._json = Object.freeze({\\n data: this.Data,\\n links: this._links.map((l) => l.toJSON()),\\n size: this.size\\n })\\n }\\n\\n return Object.assign({}, this._json)\\n }\\n\\n toString () {\\n return `DAGNode <data: \\\"${this.Data.toString('base64')}\\\", links: ${this.Links.length}, size: ${this.size}>`\\n }\\n\\n _invalidateCached () {\\n this._serializedSize = null\\n this._size = null\\n }\\n\\n addLink (link) {\\n this._invalidateCached()\\n return addLink(this, link)\\n }\\n\\n rmLink (link) {\\n this._invalidateCached()\\n return rmLink(this, link)\\n }\\n\\n // @returns {Promise.<DAGLink>}\\n toDAGLink (options) {\\n return toDAGLink(this, options)\\n }\\n\\n serialize () {\\n return serializeDAGNode({\\n Data: this._data,\\n Links: this._links\\n })\\n }\\n\\n get size () {\\n if (this._size === null) {\\n if (this._serializedSize === null) {\\n this._serializedSize = this.serialize().length\\n }\\n this._size = this._links.reduce((sum, l) => sum + l.Tsize, this._serializedSize)\\n }\\n\\n return this._size\\n }\\n\\n set size (size) {\\n throw new Error(\\\"Can't set property: 'size' is immutable\\\")\\n }\\n\\n // Getters for backwards compatible path resolving\\n get Data () {\\n return this._data\\n }\\n\\n set Data (_) {\\n throw new Error(\\\"Can't set property: 'Data' is immutable\\\")\\n }\\n\\n get Links () {\\n return this._links.map((link) => {\\n return {\\n Name: link.Name,\\n Tsize: link.Tsize,\\n Hash: link.Hash\\n }\\n })\\n }\\n\\n set Links (_) {\\n throw new Error(\\\"Can't set property: 'Links' is immutable\\\")\\n }\\n}\\n\\nexports = module.exports = withIs(DAGNode, { className: 'DAGNode', symbolName: '@ipld/js-ipld-dag-pb/dagnode' })\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/src/dag-node/dagNode.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/src/dag-node/index.js\":\n/*!********************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/src/dag-node/index.js ***!\n \\********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nexports = module.exports = __webpack_require__(/*! ./dagNode */ \\\"./node_modules/ipld-dag-pb/src/dag-node/dagNode.js\\\")\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/src/dag-node/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/src/dag-node/rmLink.js\":\n/*!*********************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/src/dag-node/rmLink.js ***!\n \\*********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {\\n\\nconst CID = __webpack_require__(/*! cids */ \\\"./node_modules/ipld-dag-pb/node_modules/cids/src/index.js\\\")\\n\\nconst rmLink = (dagNode, nameOrCid) => {\\n // It's a name\\n if (typeof nameOrCid === 'string') {\\n dagNode._links = dagNode._links.filter((link) => link.Name !== nameOrCid)\\n } else if (Buffer.isBuffer(nameOrCid) || CID.isCID(nameOrCid)) {\\n dagNode._links = dagNode._links.filter(\\n (link) => !link.Hash.equals(nameOrCid))\\n } else {\\n throw new Error('second arg needs to be a name or CID')\\n }\\n}\\n\\nmodule.exports = rmLink\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/src/dag-node/rmLink.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/src/dag-node/sortLinks.js\":\n/*!************************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/src/dag-node/sortLinks.js ***!\n \\************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {\\n\\nconst sort = __webpack_require__(/*! stable */ \\\"./node_modules/stable/stable.js\\\")\\n\\nconst linkSort = (a, b) => {\\n return Buffer.compare(a.nameAsBuffer, b.nameAsBuffer)\\n}\\n\\nconst sortLinks = (links) => {\\n return sort(links, linkSort)\\n}\\n\\nmodule.exports = sortLinks\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/src/dag-node/sortLinks.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/src/dag-node/toDagLink.js\":\n/*!************************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/src/dag-node/toDagLink.js ***!\n \\************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst DAGLink = __webpack_require__(/*! ../dag-link/dagLink */ \\\"./node_modules/ipld-dag-pb/src/dag-link/dagLink.js\\\")\\nconst genCid = __webpack_require__(/*! ../genCid */ \\\"./node_modules/ipld-dag-pb/src/genCid.js\\\")\\n\\n/*\\n * toDAGLink converts a DAGNode to a DAGLink\\n */\\nconst toDAGLink = async (node, options = {}) => {\\n const nodeCid = await genCid.cid(node.serialize(), options)\\n return new DAGLink(options.name || '', node.size, nodeCid)\\n}\\n\\nmodule.exports = toDAGLink\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/src/dag-node/toDagLink.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/src/dag.proto.js\":\n/*!***************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/src/dag.proto.js ***!\n \\***************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nmodule.exports = `// An IPFS MerkleDAG Link\\nmessage PBLink {\\n\\n // multihash of the target object\\n optional bytes Hash = 1;\\n\\n // utf string name. should be unique per object\\n optional string Name = 2;\\n\\n // cumulative size of target object\\n optional uint64 Tsize = 3;\\n}\\n\\n// An IPFS MerkleDAG Node\\nmessage PBNode {\\n\\n // refs to other objects\\n repeated PBLink Links = 2;\\n\\n // opaque user data\\n optional bytes Data = 1;\\n}`\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/src/dag.proto.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/src/genCid.js\":\n/*!************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/src/genCid.js ***!\n \\************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst CID = __webpack_require__(/*! cids */ \\\"./node_modules/ipld-dag-pb/node_modules/cids/src/index.js\\\")\\nconst multicodec = __webpack_require__(/*! multicodec */ \\\"./node_modules/ipld-dag-pb/node_modules/multicodec/src/index.js\\\")\\nconst multihashing = __webpack_require__(/*! multihashing-async */ \\\"./node_modules/ipld-dag-pb/node_modules/multihashing-async/src/index.js\\\")\\n\\nexports = module.exports\\n\\nexports.codec = multicodec.DAG_PB\\nexports.defaultHashAlg = multicodec.SHA2_256\\n\\n/**\\n * Calculate the CID of the binary blob.\\n *\\n * @param {Object} binaryBlob - Encoded IPLD Node\\n * @param {Object} [userOptions] - Options to create the CID\\n * @param {number} [userOptions.cidVersion=1] - CID version number\\n * @param {string} [UserOptions.hashAlg] - Defaults to the defaultHashAlg of the format\\n * @returns {Promise.<CID>}\\n */\\nconst cid = async (binaryBlob, userOptions) => {\\n const defaultOptions = { cidVersion: 1, hashAlg: exports.defaultHashAlg }\\n const options = Object.assign(defaultOptions, userOptions)\\n\\n const multihash = await multihashing(binaryBlob, options.hashAlg)\\n const codecName = multicodec.print[exports.codec]\\n const cid = new CID(options.cidVersion, codecName, multihash)\\n\\n return cid\\n}\\n\\nexports.cid = cid\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/src/genCid.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/src/index.js\":\n/*!***********************************************!*\\\n !*** ./node_modules/ipld-dag-pb/src/index.js ***!\n \\***********************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nexports.DAGNode = __webpack_require__(/*! ./dag-node */ \\\"./node_modules/ipld-dag-pb/src/dag-node/index.js\\\")\\nexports.DAGLink = __webpack_require__(/*! ./dag-link */ \\\"./node_modules/ipld-dag-pb/src/dag-link/index.js\\\")\\n\\n/*\\n * Functions to fulfil IPLD Format interface\\n * https://github.com/ipld/interface-ipld-format\\n */\\nexports.resolver = __webpack_require__(/*! ./resolver */ \\\"./node_modules/ipld-dag-pb/src/resolver.js\\\")\\nexports.util = __webpack_require__(/*! ./util */ \\\"./node_modules/ipld-dag-pb/src/util.js\\\")\\nexports.codec = exports.util.codec\\nexports.defaultHashAlg = exports.util.defaultHashAlg\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/src/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/src/resolver.js\":\n/*!**************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/src/resolver.js ***!\n \\**************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst CID = __webpack_require__(/*! cids */ \\\"./node_modules/ipld-dag-pb/node_modules/cids/src/index.js\\\")\\n\\nconst util = __webpack_require__(/*! ./util */ \\\"./node_modules/ipld-dag-pb/src/util.js\\\")\\n\\n/**\\n * Resolves a path within a PB block.\\n *\\n * Returns the value or a link and the partial mising path. This way the\\n * IPLD Resolver can fetch the link and continue to resolve.\\n *\\n * @param {Buffer} binaryBlob - Binary representation of a PB block\\n * @param {string} [path='/'] - Path that should be resolved\\n * @returns {Object} result - Result of the path it it was resolved successfully\\n * @returns {*} result.value - Value the path resolves to\\n * @returns {string} result.remainderPath - If the path resolves half-way to a\\n * link, then the `remainderPath` is the part after the link that can be used\\n * for further resolving\\n */\\nexports.resolve = (binaryBlob, path) => {\\n let node = util.deserialize(binaryBlob)\\n\\n const parts = path.split('/').filter(Boolean)\\n while (parts.length) {\\n const key = parts.shift()\\n if (node[key] === undefined) {\\n // There might be a matching named link\\n for (const link of node.Links) {\\n if (link.Name === key) {\\n return {\\n value: link.Hash,\\n remainderPath: parts.join('/')\\n }\\n }\\n }\\n\\n // There wasn't even a matching named link\\n throw new Error(`Object has no property '${key}'`)\\n }\\n\\n node = node[key]\\n if (CID.isCID(node)) {\\n return {\\n value: node,\\n remainderPath: parts.join('/')\\n }\\n }\\n }\\n\\n return {\\n value: node,\\n remainderPath: ''\\n }\\n}\\n\\n/**\\n * Return all available paths of a block.\\n *\\n * @generator\\n * @param {Buffer} binaryBlob - Binary representation of a PB block\\n * @yields {string} - A single path\\n */\\nexports.tree = function * (binaryBlob) {\\n const node = util.deserialize(binaryBlob)\\n\\n // There is always a `Data` and `Links` property\\n yield 'Data'\\n yield 'Links'\\n for (let ii = 0; ii < node.Links.length; ii++) {\\n yield `Links/${ii}`\\n yield `Links/${ii}/Name`\\n yield `Links/${ii}/Tsize`\\n yield `Links/${ii}/Hash`\\n }\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/src/resolver.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/src/serialize.js\":\n/*!***************************************************!*\\\n !*** ./node_modules/ipld-dag-pb/src/serialize.js ***!\n \\***************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst protons = __webpack_require__(/*! protons */ \\\"./node_modules/protons/src/index.js\\\")\\nconst proto = protons(__webpack_require__(/*! ./dag.proto.js */ \\\"./node_modules/ipld-dag-pb/src/dag.proto.js\\\"))\\nconst DAGLink = __webpack_require__(/*! ./dag-link/dagLink */ \\\"./node_modules/ipld-dag-pb/src/dag-link/dagLink.js\\\")\\n\\nexports = module.exports\\n\\nconst toProtoBuf = (node) => {\\n const pbn = {}\\n\\n if (node.Data && node.Data.length > 0) {\\n pbn.Data = node.Data\\n } else {\\n // NOTE: this has to be null in order to match go-ipfs serialization\\n // `null !== new Buffer(0)`\\n pbn.Data = null\\n }\\n\\n if (node.Links && node.Links.length > 0) {\\n pbn.Links = node.Links\\n .map((link) => ({\\n Hash: link.Hash.buffer,\\n Name: link.Name,\\n Tsize: link.Tsize\\n }))\\n } else {\\n pbn.Links = null\\n }\\n\\n return pbn\\n}\\n\\n/**\\n * Serialize internal representation into a binary PB block.\\n *\\n * @param {Object} node - Internal representation of a PB block\\n * @returns {Buffer} - The encoded binary representation\\n */\\nconst serializeDAGNode = (node) => {\\n const data = node.Data\\n const links = node.Links || []\\n\\n const serialized = proto.PBNode.encode(toProtoBuf({\\n Data: data,\\n Links: links\\n }))\\n\\n return serialized\\n}\\n\\n// Serialize an object where the `Links` might not be a `DAGLink` instance yet\\nconst serializeDAGNodeLike = (data, links = []) => {\\n const node = { Data: data }\\n node.Links = links.map((link) => {\\n return DAGLink.isDAGLink(link)\\n ? link\\n : DAGLink.util.createDagLinkFromB58EncodedHash(link)\\n })\\n return serializeDAGNode(node)\\n}\\n\\nexports.serializeDAGNode = serializeDAGNode\\nexports.serializeDAGNodeLike = serializeDAGNodeLike\\n\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/src/serialize.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/ipld-dag-pb/src/util.js\":\n/*!**********************************************!*\\\n !*** ./node_modules/ipld-dag-pb/src/util.js ***!\n \\**********************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {\\n\\nconst protons = __webpack_require__(/*! protons */ \\\"./node_modules/protons/src/index.js\\\")\\nconst proto = protons(__webpack_require__(/*! ./dag.proto */ \\\"./node_modules/ipld-dag-pb/src/dag.proto.js\\\"))\\nconst DAGLink = __webpack_require__(/*! ./dag-link/dagLink */ \\\"./node_modules/ipld-dag-pb/src/dag-link/dagLink.js\\\")\\nconst DAGNode = __webpack_require__(/*! ./dag-node/dagNode */ \\\"./node_modules/ipld-dag-pb/src/dag-node/dagNode.js\\\")\\nconst { serializeDAGNodeLike } = __webpack_require__(/*! ./serialize */ \\\"./node_modules/ipld-dag-pb/src/serialize.js\\\")\\nconst genCid = __webpack_require__(/*! ./genCid */ \\\"./node_modules/ipld-dag-pb/src/genCid.js\\\")\\n\\nexports = module.exports\\n\\nexports.codec = genCid.codec\\nexports.defaultHashAlg = genCid.defaultHashAlg\\n\\n/**\\n * Calculate the CID of the binary blob.\\n *\\n * @param {Object} binaryBlob - Encoded IPLD Node\\n * @param {Object} [userOptions] - Options to create the CID\\n * @param {number} [userOptions.cidVersion=1] - CID version number\\n * @param {string} [UserOptions.hashAlg] - Defaults to the defaultHashAlg of the format\\n * @returns {Promise.<CID>}\\n */\\nconst cid = (binaryBlob, userOptions) => {\\n return genCid.cid(binaryBlob, userOptions)\\n}\\n\\n/**\\n * Serialize internal representation into a binary PB block.\\n *\\n * @param {Object} node - Internal representation of a CBOR block\\n * @returns {Buffer} - The encoded binary representation\\n */\\nconst serialize = (node) => {\\n if (DAGNode.isDAGNode(node)) {\\n return node.serialize()\\n } else {\\n return serializeDAGNodeLike(node.Data, node.Links)\\n }\\n}\\n\\n/**\\n * Deserialize PB block into the internal representation.\\n *\\n * @param {Buffer} buffer - Binary representation of a PB block\\n * @returns {Object} - An object that conforms to the IPLD Data Model\\n */\\nconst deserialize = (buffer) => {\\n const pbn = proto.PBNode.decode(buffer)\\n\\n const links = pbn.Links.map((link) => {\\n return new DAGLink(link.Name, link.Tsize, link.Hash)\\n })\\n\\n const data = pbn.Data == null ? Buffer.alloc(0) : pbn.Data\\n\\n return new DAGNode(data, links, buffer.length)\\n}\\n\\nexports.serialize = serialize\\nexports.deserialize = deserialize\\nexports.cid = cid\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/ipld-dag-pb/src/util.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/isarray/index.js\":\n/*!***************************************!*\\\n !*** ./node_modules/isarray/index.js ***!\n \\***************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"var toString = {}.toString;\\n\\nmodule.exports = Array.isArray || function (arr) {\\n return toString.call(arr) == '[object Array]';\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/isarray/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/js-sha256/src/sha256.js\":\n/*!**********************************************!*\\\n !*** ./node_modules/js-sha256/src/sha256.js ***!\n \\**********************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"/* WEBPACK VAR INJECTION */(function(process, global) {var __WEBPACK_AMD_DEFINE_RESULT__;/**\\n * [js-sha256]{@link https://github.com/emn178/js-sha256}\\n *\\n * @version 0.9.0\\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\\n * @copyright Chen, Yi-Cyuan 2014-2017\\n * @license MIT\\n */\\n/*jslint bitwise: true */\\n(function () {\\n 'use strict';\\n\\n var ERROR = 'input is invalid type';\\n var WINDOW = typeof window === 'object';\\n var root = WINDOW ? window : {};\\n if (root.JS_SHA256_NO_WINDOW) {\\n WINDOW = false;\\n }\\n var WEB_WORKER = !WINDOW && typeof self === 'object';\\n var NODE_JS = !root.JS_SHA256_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\\n if (NODE_JS) {\\n root = global;\\n } else if (WEB_WORKER) {\\n root = self;\\n }\\n var COMMON_JS = !root.JS_SHA256_NO_COMMON_JS && typeof module === 'object' && module.exports;\\n var AMD = true && __webpack_require__(/*! !webpack amd options */ \\\"./node_modules/webpack/buildin/amd-options.js\\\");\\n var ARRAY_BUFFER = !root.JS_SHA256_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\\n var HEX_CHARS = '0123456789abcdef'.split('');\\n var EXTRA = [-2147483648, 8388608, 32768, 128];\\n var SHIFT = [24, 16, 8, 0];\\n var K = [\\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\\n ];\\n var OUTPUT_TYPES = ['hex', 'array', 'digest', 'arrayBuffer'];\\n\\n var blocks = [];\\n\\n if (root.JS_SHA256_NO_NODE_JS || !Array.isArray) {\\n Array.isArray = function (obj) {\\n return Object.prototype.toString.call(obj) === '[object Array]';\\n };\\n }\\n\\n if (ARRAY_BUFFER && (root.JS_SHA256_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {\\n ArrayBuffer.isView = function (obj) {\\n return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\\n };\\n }\\n\\n var createOutputMethod = function (outputType, is224) {\\n return function (message) {\\n return new Sha256(is224, true).update(message)[outputType]();\\n };\\n };\\n\\n var createMethod = function (is224) {\\n var method = createOutputMethod('hex', is224);\\n if (NODE_JS) {\\n method = nodeWrap(method, is224);\\n }\\n method.create = function () {\\n return new Sha256(is224);\\n };\\n method.update = function (message) {\\n return method.create().update(message);\\n };\\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\\n var type = OUTPUT_TYPES[i];\\n method[type] = createOutputMethod(type, is224);\\n }\\n return method;\\n };\\n\\n var nodeWrap = function (method, is224) {\\n var crypto = eval(\\\"require('crypto')\\\");\\n var Buffer = eval(\\\"require('buffer').Buffer\\\");\\n var algorithm = is224 ? 'sha224' : 'sha256';\\n var nodeMethod = function (message) {\\n if (typeof message === 'string') {\\n return crypto.createHash(algorithm).update(message, 'utf8').digest('hex');\\n } else {\\n if (message === null || message === undefined) {\\n throw new Error(ERROR);\\n } else if (message.constructor === ArrayBuffer) {\\n message = new Uint8Array(message);\\n }\\n }\\n if (Array.isArray(message) || ArrayBuffer.isView(message) ||\\n message.constructor === Buffer) {\\n return crypto.createHash(algorithm).update(new Buffer(message)).digest('hex');\\n } else {\\n return method(message);\\n }\\n };\\n return nodeMethod;\\n };\\n\\n var createHmacOutputMethod = function (outputType, is224) {\\n return function (key, message) {\\n return new HmacSha256(key, is224, true).update(message)[outputType]();\\n };\\n };\\n\\n var createHmacMethod = function (is224) {\\n var method = createHmacOutputMethod('hex', is224);\\n method.create = function (key) {\\n return new HmacSha256(key, is224);\\n };\\n method.update = function (key, message) {\\n return method.create(key).update(message);\\n };\\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\\n var type = OUTPUT_TYPES[i];\\n method[type] = createHmacOutputMethod(type, is224);\\n }\\n return method;\\n };\\n\\n function Sha256(is224, sharedMemory) {\\n if (sharedMemory) {\\n blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =\\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\\n this.blocks = blocks;\\n } else {\\n this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\\n }\\n\\n if (is224) {\\n this.h0 = 0xc1059ed8;\\n this.h1 = 0x367cd507;\\n this.h2 = 0x3070dd17;\\n this.h3 = 0xf70e5939;\\n this.h4 = 0xffc00b31;\\n this.h5 = 0x68581511;\\n this.h6 = 0x64f98fa7;\\n this.h7 = 0xbefa4fa4;\\n } else { // 256\\n this.h0 = 0x6a09e667;\\n this.h1 = 0xbb67ae85;\\n this.h2 = 0x3c6ef372;\\n this.h3 = 0xa54ff53a;\\n this.h4 = 0x510e527f;\\n this.h5 = 0x9b05688c;\\n this.h6 = 0x1f83d9ab;\\n this.h7 = 0x5be0cd19;\\n }\\n\\n this.block = this.start = this.bytes = this.hBytes = 0;\\n this.finalized = this.hashed = false;\\n this.first = true;\\n this.is224 = is224;\\n }\\n\\n Sha256.prototype.update = function (message) {\\n if (this.finalized) {\\n return;\\n }\\n var notString, type = typeof message;\\n if (type !== 'string') {\\n if (type === 'object') {\\n if (message === null) {\\n throw new Error(ERROR);\\n } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\\n message = new Uint8Array(message);\\n } else if (!Array.isArray(message)) {\\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {\\n throw new Error(ERROR);\\n }\\n }\\n } else {\\n throw new Error(ERROR);\\n }\\n notString = true;\\n }\\n var code, index = 0, i, length = message.length, blocks = this.blocks;\\n\\n while (index < length) {\\n if (this.hashed) {\\n this.hashed = false;\\n blocks[0] = this.block;\\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\\n }\\n\\n if (notString) {\\n for (i = this.start; index < length && i < 64; ++index) {\\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\\n }\\n } else {\\n for (i = this.start; index < length && i < 64; ++index) {\\n code = message.charCodeAt(index);\\n if (code < 0x80) {\\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\\n } else if (code < 0x800) {\\n blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\\n } else if (code < 0xd800 || code >= 0xe000) {\\n blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\\n } else {\\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\\n blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\\n blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\\n }\\n }\\n }\\n\\n this.lastByteIndex = i;\\n this.bytes += i - this.start;\\n if (i >= 64) {\\n this.block = blocks[16];\\n this.start = i - 64;\\n this.hash();\\n this.hashed = true;\\n } else {\\n this.start = i;\\n }\\n }\\n if (this.bytes > 4294967295) {\\n this.hBytes += this.bytes / 4294967296 << 0;\\n this.bytes = this.bytes % 4294967296;\\n }\\n return this;\\n };\\n\\n Sha256.prototype.finalize = function () {\\n if (this.finalized) {\\n return;\\n }\\n this.finalized = true;\\n var blocks = this.blocks, i = this.lastByteIndex;\\n blocks[16] = this.block;\\n blocks[i >> 2] |= EXTRA[i & 3];\\n this.block = blocks[16];\\n if (i >= 56) {\\n if (!this.hashed) {\\n this.hash();\\n }\\n blocks[0] = this.block;\\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\\n }\\n blocks[14] = this.hBytes << 3 | this.bytes >>> 29;\\n blocks[15] = this.bytes << 3;\\n this.hash();\\n };\\n\\n Sha256.prototype.hash = function () {\\n var a = this.h0, b = this.h1, c = this.h2, d = this.h3, e = this.h4, f = this.h5, g = this.h6,\\n h = this.h7, blocks = this.blocks, j, s0, s1, maj, t1, t2, ch, ab, da, cd, bc;\\n\\n for (j = 16; j < 64; ++j) {\\n // rightrotate\\n t1 = blocks[j - 15];\\n s0 = ((t1 >>> 7) | (t1 << 25)) ^ ((t1 >>> 18) | (t1 << 14)) ^ (t1 >>> 3);\\n t1 = blocks[j - 2];\\n s1 = ((t1 >>> 17) | (t1 << 15)) ^ ((t1 >>> 19) | (t1 << 13)) ^ (t1 >>> 10);\\n blocks[j] = blocks[j - 16] + s0 + blocks[j - 7] + s1 << 0;\\n }\\n\\n bc = b & c;\\n for (j = 0; j < 64; j += 4) {\\n if (this.first) {\\n if (this.is224) {\\n ab = 300032;\\n t1 = blocks[0] - 1413257819;\\n h = t1 - 150054599 << 0;\\n d = t1 + 24177077 << 0;\\n } else {\\n ab = 704751109;\\n t1 = blocks[0] - 210244248;\\n h = t1 - 1521486534 << 0;\\n d = t1 + 143694565 << 0;\\n }\\n this.first = false;\\n } else {\\n s0 = ((a >>> 2) | (a << 30)) ^ ((a >>> 13) | (a << 19)) ^ ((a >>> 22) | (a << 10));\\n s1 = ((e >>> 6) | (e << 26)) ^ ((e >>> 11) | (e << 21)) ^ ((e >>> 25) | (e << 7));\\n ab = a & b;\\n maj = ab ^ (a & c) ^ bc;\\n ch = (e & f) ^ (~e & g);\\n t1 = h + s1 + ch + K[j] + blocks[j];\\n t2 = s0 + maj;\\n h = d + t1 << 0;\\n d = t1 + t2 << 0;\\n }\\n s0 = ((d >>> 2) | (d << 30)) ^ ((d >>> 13) | (d << 19)) ^ ((d >>> 22) | (d << 10));\\n s1 = ((h >>> 6) | (h << 26)) ^ ((h >>> 11) | (h << 21)) ^ ((h >>> 25) | (h << 7));\\n da = d & a;\\n maj = da ^ (d & b) ^ ab;\\n ch = (h & e) ^ (~h & f);\\n t1 = g + s1 + ch + K[j + 1] + blocks[j + 1];\\n t2 = s0 + maj;\\n g = c + t1 << 0;\\n c = t1 + t2 << 0;\\n s0 = ((c >>> 2) | (c << 30)) ^ ((c >>> 13) | (c << 19)) ^ ((c >>> 22) | (c << 10));\\n s1 = ((g >>> 6) | (g << 26)) ^ ((g >>> 11) | (g << 21)) ^ ((g >>> 25) | (g << 7));\\n cd = c & d;\\n maj = cd ^ (c & a) ^ da;\\n ch = (g & h) ^ (~g & e);\\n t1 = f + s1 + ch + K[j + 2] + blocks[j + 2];\\n t2 = s0 + maj;\\n f = b + t1 << 0;\\n b = t1 + t2 << 0;\\n s0 = ((b >>> 2) | (b << 30)) ^ ((b >>> 13) | (b << 19)) ^ ((b >>> 22) | (b << 10));\\n s1 = ((f >>> 6) | (f << 26)) ^ ((f >>> 11) | (f << 21)) ^ ((f >>> 25) | (f << 7));\\n bc = b & c;\\n maj = bc ^ (b & d) ^ cd;\\n ch = (f & g) ^ (~f & h);\\n t1 = e + s1 + ch + K[j + 3] + blocks[j + 3];\\n t2 = s0 + maj;\\n e = a + t1 << 0;\\n a = t1 + t2 << 0;\\n }\\n\\n this.h0 = this.h0 + a << 0;\\n this.h1 = this.h1 + b << 0;\\n this.h2 = this.h2 + c << 0;\\n this.h3 = this.h3 + d << 0;\\n this.h4 = this.h4 + e << 0;\\n this.h5 = this.h5 + f << 0;\\n this.h6 = this.h6 + g << 0;\\n this.h7 = this.h7 + h << 0;\\n };\\n\\n Sha256.prototype.hex = function () {\\n this.finalize();\\n\\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3, h4 = this.h4, h5 = this.h5,\\n h6 = this.h6, h7 = this.h7;\\n\\n var hex = HEX_CHARS[(h0 >> 28) & 0x0F] + HEX_CHARS[(h0 >> 24) & 0x0F] +\\n HEX_CHARS[(h0 >> 20) & 0x0F] + HEX_CHARS[(h0 >> 16) & 0x0F] +\\n HEX_CHARS[(h0 >> 12) & 0x0F] + HEX_CHARS[(h0 >> 8) & 0x0F] +\\n HEX_CHARS[(h0 >> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +\\n HEX_CHARS[(h1 >> 28) & 0x0F] + HEX_CHARS[(h1 >> 24) & 0x0F] +\\n HEX_CHARS[(h1 >> 20) & 0x0F] + HEX_CHARS[(h1 >> 16) & 0x0F] +\\n HEX_CHARS[(h1 >> 12) & 0x0F] + HEX_CHARS[(h1 >> 8) & 0x0F] +\\n HEX_CHARS[(h1 >> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +\\n HEX_CHARS[(h2 >> 28) & 0x0F] + HEX_CHARS[(h2 >> 24) & 0x0F] +\\n HEX_CHARS[(h2 >> 20) & 0x0F] + HEX_CHARS[(h2 >> 16) & 0x0F] +\\n HEX_CHARS[(h2 >> 12) & 0x0F] + HEX_CHARS[(h2 >> 8) & 0x0F] +\\n HEX_CHARS[(h2 >> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +\\n HEX_CHARS[(h3 >> 28) & 0x0F] + HEX_CHARS[(h3 >> 24) & 0x0F] +\\n HEX_CHARS[(h3 >> 20) & 0x0F] + HEX_CHARS[(h3 >> 16) & 0x0F] +\\n HEX_CHARS[(h3 >> 12) & 0x0F] + HEX_CHARS[(h3 >> 8) & 0x0F] +\\n HEX_CHARS[(h3 >> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +\\n HEX_CHARS[(h4 >> 28) & 0x0F] + HEX_CHARS[(h4 >> 24) & 0x0F] +\\n HEX_CHARS[(h4 >> 20) & 0x0F] + HEX_CHARS[(h4 >> 16) & 0x0F] +\\n HEX_CHARS[(h4 >> 12) & 0x0F] + HEX_CHARS[(h4 >> 8) & 0x0F] +\\n HEX_CHARS[(h4 >> 4) & 0x0F] + HEX_CHARS[h4 & 0x0F] +\\n HEX_CHARS[(h5 >> 28) & 0x0F] + HEX_CHARS[(h5 >> 24) & 0x0F] +\\n HEX_CHARS[(h5 >> 20) & 0x0F] + HEX_CHARS[(h5 >> 16) & 0x0F] +\\n HEX_CHARS[(h5 >> 12) & 0x0F] + HEX_CHARS[(h5 >> 8) & 0x0F] +\\n HEX_CHARS[(h5 >> 4) & 0x0F] + HEX_CHARS[h5 & 0x0F] +\\n HEX_CHARS[(h6 >> 28) & 0x0F] + HEX_CHARS[(h6 >> 24) & 0x0F] +\\n HEX_CHARS[(h6 >> 20) & 0x0F] + HEX_CHARS[(h6 >> 16) & 0x0F] +\\n HEX_CHARS[(h6 >> 12) & 0x0F] + HEX_CHARS[(h6 >> 8) & 0x0F] +\\n HEX_CHARS[(h6 >> 4) & 0x0F] + HEX_CHARS[h6 & 0x0F];\\n if (!this.is224) {\\n hex += HEX_CHARS[(h7 >> 28) & 0x0F] + HEX_CHARS[(h7 >> 24) & 0x0F] +\\n HEX_CHARS[(h7 >> 20) & 0x0F] + HEX_CHARS[(h7 >> 16) & 0x0F] +\\n HEX_CHARS[(h7 >> 12) & 0x0F] + HEX_CHARS[(h7 >> 8) & 0x0F] +\\n HEX_CHARS[(h7 >> 4) & 0x0F] + HEX_CHARS[h7 & 0x0F];\\n }\\n return hex;\\n };\\n\\n Sha256.prototype.toString = Sha256.prototype.hex;\\n\\n Sha256.prototype.digest = function () {\\n this.finalize();\\n\\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3, h4 = this.h4, h5 = this.h5,\\n h6 = this.h6, h7 = this.h7;\\n\\n var arr = [\\n (h0 >> 24) & 0xFF, (h0 >> 16) & 0xFF, (h0 >> 8) & 0xFF, h0 & 0xFF,\\n (h1 >> 24) & 0xFF, (h1 >> 16) & 0xFF, (h1 >> 8) & 0xFF, h1 & 0xFF,\\n (h2 >> 24) & 0xFF, (h2 >> 16) & 0xFF, (h2 >> 8) & 0xFF, h2 & 0xFF,\\n (h3 >> 24) & 0xFF, (h3 >> 16) & 0xFF, (h3 >> 8) & 0xFF, h3 & 0xFF,\\n (h4 >> 24) & 0xFF, (h4 >> 16) & 0xFF, (h4 >> 8) & 0xFF, h4 & 0xFF,\\n (h5 >> 24) & 0xFF, (h5 >> 16) & 0xFF, (h5 >> 8) & 0xFF, h5 & 0xFF,\\n (h6 >> 24) & 0xFF, (h6 >> 16) & 0xFF, (h6 >> 8) & 0xFF, h6 & 0xFF\\n ];\\n if (!this.is224) {\\n arr.push((h7 >> 24) & 0xFF, (h7 >> 16) & 0xFF, (h7 >> 8) & 0xFF, h7 & 0xFF);\\n }\\n return arr;\\n };\\n\\n Sha256.prototype.array = Sha256.prototype.digest;\\n\\n Sha256.prototype.arrayBuffer = function () {\\n this.finalize();\\n\\n var buffer = new ArrayBuffer(this.is224 ? 28 : 32);\\n var dataView = new DataView(buffer);\\n dataView.setUint32(0, this.h0);\\n dataView.setUint32(4, this.h1);\\n dataView.setUint32(8, this.h2);\\n dataView.setUint32(12, this.h3);\\n dataView.setUint32(16, this.h4);\\n dataView.setUint32(20, this.h5);\\n dataView.setUint32(24, this.h6);\\n if (!this.is224) {\\n dataView.setUint32(28, this.h7);\\n }\\n return buffer;\\n };\\n\\n function HmacSha256(key, is224, sharedMemory) {\\n var i, type = typeof key;\\n if (type === 'string') {\\n var bytes = [], length = key.length, index = 0, code;\\n for (i = 0; i < length; ++i) {\\n code = key.charCodeAt(i);\\n if (code < 0x80) {\\n bytes[index++] = code;\\n } else if (code < 0x800) {\\n bytes[index++] = (0xc0 | (code >> 6));\\n bytes[index++] = (0x80 | (code & 0x3f));\\n } else if (code < 0xd800 || code >= 0xe000) {\\n bytes[index++] = (0xe0 | (code >> 12));\\n bytes[index++] = (0x80 | ((code >> 6) & 0x3f));\\n bytes[index++] = (0x80 | (code & 0x3f));\\n } else {\\n code = 0x10000 + (((code & 0x3ff) << 10) | (key.charCodeAt(++i) & 0x3ff));\\n bytes[index++] = (0xf0 | (code >> 18));\\n bytes[index++] = (0x80 | ((code >> 12) & 0x3f));\\n bytes[index++] = (0x80 | ((code >> 6) & 0x3f));\\n bytes[index++] = (0x80 | (code & 0x3f));\\n }\\n }\\n key = bytes;\\n } else {\\n if (type === 'object') {\\n if (key === null) {\\n throw new Error(ERROR);\\n } else if (ARRAY_BUFFER && key.constructor === ArrayBuffer) {\\n key = new Uint8Array(key);\\n } else if (!Array.isArray(key)) {\\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(key)) {\\n throw new Error(ERROR);\\n }\\n }\\n } else {\\n throw new Error(ERROR);\\n }\\n }\\n\\n if (key.length > 64) {\\n key = (new Sha256(is224, true)).update(key).array();\\n }\\n\\n var oKeyPad = [], iKeyPad = [];\\n for (i = 0; i < 64; ++i) {\\n var b = key[i] || 0;\\n oKeyPad[i] = 0x5c ^ b;\\n iKeyPad[i] = 0x36 ^ b;\\n }\\n\\n Sha256.call(this, is224, sharedMemory);\\n\\n this.update(iKeyPad);\\n this.oKeyPad = oKeyPad;\\n this.inner = true;\\n this.sharedMemory = sharedMemory;\\n }\\n HmacSha256.prototype = new Sha256();\\n\\n HmacSha256.prototype.finalize = function () {\\n Sha256.prototype.finalize.call(this);\\n if (this.inner) {\\n this.inner = false;\\n var innerHash = this.array();\\n Sha256.call(this, this.is224, this.sharedMemory);\\n this.update(this.oKeyPad);\\n this.update(innerHash);\\n Sha256.prototype.finalize.call(this);\\n }\\n };\\n\\n var exports = createMethod();\\n exports.sha256 = exports;\\n exports.sha224 = createMethod(true);\\n exports.sha256.hmac = createHmacMethod();\\n exports.sha224.hmac = createHmacMethod(true);\\n\\n if (COMMON_JS) {\\n module.exports = exports;\\n } else {\\n root.sha256 = exports.sha256;\\n root.sha224 = exports.sha224;\\n if (AMD) {\\n !(__WEBPACK_AMD_DEFINE_RESULT__ = (function () {\\n return exports;\\n }).call(exports, __webpack_require__, exports, module),\\n\\t\\t\\t\\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\\n }\\n }\\n})();\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../process/browser.js */ \\\"./node_modules/process/browser.js\\\"), __webpack_require__(/*! ./../../webpack/buildin/global.js */ \\\"./node_modules/webpack/buildin/global.js\\\")))\\n\\n//# sourceURL=webpack:///./node_modules/js-sha256/src/sha256.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/js-sha3/src/sha3.js\":\n/*!******************************************!*\\\n !*** ./node_modules/js-sha3/src/sha3.js ***!\n \\******************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"/* WEBPACK VAR INJECTION */(function(process, global) {/**\\r\\n * [js-sha3]{@link https://github.com/emn178/js-sha3}\\r\\n *\\r\\n * @version 0.5.7\\r\\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\\r\\n * @copyright Chen, Yi-Cyuan 2015-2016\\r\\n * @license MIT\\r\\n */\\r\\n/*jslint bitwise: true */\\r\\n(function () {\\r\\n 'use strict';\\r\\n\\r\\n var root = typeof window === 'object' ? window : {};\\r\\n var NODE_JS = !root.JS_SHA3_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\\r\\n if (NODE_JS) {\\r\\n root = global;\\r\\n }\\r\\n var COMMON_JS = !root.JS_SHA3_NO_COMMON_JS && typeof module === 'object' && module.exports;\\r\\n var HEX_CHARS = '0123456789abcdef'.split('');\\r\\n var SHAKE_PADDING = [31, 7936, 2031616, 520093696];\\r\\n var KECCAK_PADDING = [1, 256, 65536, 16777216];\\r\\n var PADDING = [6, 1536, 393216, 100663296];\\r\\n var SHIFT = [0, 8, 16, 24];\\r\\n var RC = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649,\\r\\n 0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0,\\r\\n 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771,\\r\\n 2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648,\\r\\n 2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648];\\r\\n var BITS = [224, 256, 384, 512];\\r\\n var SHAKE_BITS = [128, 256];\\r\\n var OUTPUT_TYPES = ['hex', 'buffer', 'arrayBuffer', 'array'];\\r\\n\\r\\n var createOutputMethod = function (bits, padding, outputType) {\\r\\n return function (message) {\\r\\n return new Keccak(bits, padding, bits).update(message)[outputType]();\\r\\n };\\r\\n };\\r\\n\\r\\n var createShakeOutputMethod = function (bits, padding, outputType) {\\r\\n return function (message, outputBits) {\\r\\n return new Keccak(bits, padding, outputBits).update(message)[outputType]();\\r\\n };\\r\\n };\\r\\n\\r\\n var createMethod = function (bits, padding) {\\r\\n var method = createOutputMethod(bits, padding, 'hex');\\r\\n method.create = function () {\\r\\n return new Keccak(bits, padding, bits);\\r\\n };\\r\\n method.update = function (message) {\\r\\n return method.create().update(message);\\r\\n };\\r\\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\\r\\n var type = OUTPUT_TYPES[i];\\r\\n method[type] = createOutputMethod(bits, padding, type);\\r\\n }\\r\\n return method;\\r\\n };\\r\\n\\r\\n var createShakeMethod = function (bits, padding) {\\r\\n var method = createShakeOutputMethod(bits, padding, 'hex');\\r\\n method.create = function (outputBits) {\\r\\n return new Keccak(bits, padding, outputBits);\\r\\n };\\r\\n method.update = function (message, outputBits) {\\r\\n return method.create(outputBits).update(message);\\r\\n };\\r\\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\\r\\n var type = OUTPUT_TYPES[i];\\r\\n method[type] = createShakeOutputMethod(bits, padding, type);\\r\\n }\\r\\n return method;\\r\\n };\\r\\n\\r\\n var algorithms = [\\r\\n {name: 'keccak', padding: KECCAK_PADDING, bits: BITS, createMethod: createMethod},\\r\\n {name: 'sha3', padding: PADDING, bits: BITS, createMethod: createMethod},\\r\\n {name: 'shake', padding: SHAKE_PADDING, bits: SHAKE_BITS, createMethod: createShakeMethod}\\r\\n ];\\r\\n\\r\\n var methods = {}, methodNames = [];\\r\\n\\r\\n for (var i = 0; i < algorithms.length; ++i) {\\r\\n var algorithm = algorithms[i];\\r\\n var bits = algorithm.bits;\\r\\n for (var j = 0; j < bits.length; ++j) {\\r\\n var methodName = algorithm.name +'_' + bits[j];\\r\\n methodNames.push(methodName);\\r\\n methods[methodName] = algorithm.createMethod(bits[j], algorithm.padding);\\r\\n }\\r\\n }\\r\\n\\r\\n function Keccak(bits, padding, outputBits) {\\r\\n this.blocks = [];\\r\\n this.s = [];\\r\\n this.padding = padding;\\r\\n this.outputBits = outputBits;\\r\\n this.reset = true;\\r\\n this.block = 0;\\r\\n this.start = 0;\\r\\n this.blockCount = (1600 - (bits << 1)) >> 5;\\r\\n this.byteCount = this.blockCount << 2;\\r\\n this.outputBlocks = outputBits >> 5;\\r\\n this.extraBytes = (outputBits & 31) >> 3;\\r\\n\\r\\n for (var i = 0; i < 50; ++i) {\\r\\n this.s[i] = 0;\\r\\n }\\r\\n }\\r\\n\\r\\n Keccak.prototype.update = function (message) {\\r\\n var notString = typeof message !== 'string';\\r\\n if (notString && message.constructor === ArrayBuffer) {\\r\\n message = new Uint8Array(message);\\r\\n }\\r\\n var length = message.length, blocks = this.blocks, byteCount = this.byteCount,\\r\\n blockCount = this.blockCount, index = 0, s = this.s, i, code;\\r\\n\\r\\n while (index < length) {\\r\\n if (this.reset) {\\r\\n this.reset = false;\\r\\n blocks[0] = this.block;\\r\\n for (i = 1; i < blockCount + 1; ++i) {\\r\\n blocks[i] = 0;\\r\\n }\\r\\n }\\r\\n if (notString) {\\r\\n for (i = this.start; index < length && i < byteCount; ++index) {\\r\\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\\r\\n }\\r\\n } else {\\r\\n for (i = this.start; index < length && i < byteCount; ++index) {\\r\\n code = message.charCodeAt(index);\\r\\n if (code < 0x80) {\\r\\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\\r\\n } else if (code < 0x800) {\\r\\n blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\\r\\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\\r\\n } else if (code < 0xd800 || code >= 0xe000) {\\r\\n blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\\r\\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\\r\\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\\r\\n } else {\\r\\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\\r\\n blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\\r\\n blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\\r\\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\\r\\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\\r\\n }\\r\\n }\\r\\n }\\r\\n this.lastByteIndex = i;\\r\\n if (i >= byteCount) {\\r\\n this.start = i - byteCount;\\r\\n this.block = blocks[blockCount];\\r\\n for (i = 0; i < blockCount; ++i) {\\r\\n s[i] ^= blocks[i];\\r\\n }\\r\\n f(s);\\r\\n this.reset = true;\\r\\n } else {\\r\\n this.start = i;\\r\\n }\\r\\n }\\r\\n return this;\\r\\n };\\r\\n\\r\\n Keccak.prototype.finalize = function () {\\r\\n var blocks = this.blocks, i = this.lastByteIndex, blockCount = this.blockCount, s = this.s;\\r\\n blocks[i >> 2] |= this.padding[i & 3];\\r\\n if (this.lastByteIndex === this.byteCount) {\\r\\n blocks[0] = blocks[blockCount];\\r\\n for (i = 1; i < blockCount + 1; ++i) {\\r\\n blocks[i] = 0;\\r\\n }\\r\\n }\\r\\n blocks[blockCount - 1] |= 0x80000000;\\r\\n for (i = 0; i < blockCount; ++i) {\\r\\n s[i] ^= blocks[i];\\r\\n }\\r\\n f(s);\\r\\n };\\r\\n\\r\\n Keccak.prototype.toString = Keccak.prototype.hex = function () {\\r\\n this.finalize();\\r\\n\\r\\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\\r\\n extraBytes = this.extraBytes, i = 0, j = 0;\\r\\n var hex = '', block;\\r\\n while (j < outputBlocks) {\\r\\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\\r\\n block = s[i];\\r\\n hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F] +\\r\\n HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F] +\\r\\n HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F] +\\r\\n HEX_CHARS[(block >> 28) & 0x0F] + HEX_CHARS[(block >> 24) & 0x0F];\\r\\n }\\r\\n if (j % blockCount === 0) {\\r\\n f(s);\\r\\n i = 0;\\r\\n }\\r\\n }\\r\\n if (extraBytes) {\\r\\n block = s[i];\\r\\n if (extraBytes > 0) {\\r\\n hex += HEX_CHARS[(block >> 4) & 0x0F] + HEX_CHARS[block & 0x0F];\\r\\n }\\r\\n if (extraBytes > 1) {\\r\\n hex += HEX_CHARS[(block >> 12) & 0x0F] + HEX_CHARS[(block >> 8) & 0x0F];\\r\\n }\\r\\n if (extraBytes > 2) {\\r\\n hex += HEX_CHARS[(block >> 20) & 0x0F] + HEX_CHARS[(block >> 16) & 0x0F];\\r\\n }\\r\\n }\\r\\n return hex;\\r\\n };\\r\\n\\r\\n Keccak.prototype.arrayBuffer = function () {\\r\\n this.finalize();\\r\\n\\r\\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\\r\\n extraBytes = this.extraBytes, i = 0, j = 0;\\r\\n var bytes = this.outputBits >> 3;\\r\\n var buffer;\\r\\n if (extraBytes) {\\r\\n buffer = new ArrayBuffer((outputBlocks + 1) << 2);\\r\\n } else {\\r\\n buffer = new ArrayBuffer(bytes);\\r\\n }\\r\\n var array = new Uint32Array(buffer);\\r\\n while (j < outputBlocks) {\\r\\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\\r\\n array[j] = s[i];\\r\\n }\\r\\n if (j % blockCount === 0) {\\r\\n f(s);\\r\\n }\\r\\n }\\r\\n if (extraBytes) {\\r\\n array[i] = s[i];\\r\\n buffer = buffer.slice(0, bytes);\\r\\n }\\r\\n return buffer;\\r\\n };\\r\\n\\r\\n Keccak.prototype.buffer = Keccak.prototype.arrayBuffer;\\r\\n\\r\\n Keccak.prototype.digest = Keccak.prototype.array = function () {\\r\\n this.finalize();\\r\\n\\r\\n var blockCount = this.blockCount, s = this.s, outputBlocks = this.outputBlocks,\\r\\n extraBytes = this.extraBytes, i = 0, j = 0;\\r\\n var array = [], offset, block;\\r\\n while (j < outputBlocks) {\\r\\n for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {\\r\\n offset = j << 2;\\r\\n block = s[i];\\r\\n array[offset] = block & 0xFF;\\r\\n array[offset + 1] = (block >> 8) & 0xFF;\\r\\n array[offset + 2] = (block >> 16) & 0xFF;\\r\\n array[offset + 3] = (block >> 24) & 0xFF;\\r\\n }\\r\\n if (j % blockCount === 0) {\\r\\n f(s);\\r\\n }\\r\\n }\\r\\n if (extraBytes) {\\r\\n offset = j << 2;\\r\\n block = s[i];\\r\\n if (extraBytes > 0) {\\r\\n array[offset] = block & 0xFF;\\r\\n }\\r\\n if (extraBytes > 1) {\\r\\n array[offset + 1] = (block >> 8) & 0xFF;\\r\\n }\\r\\n if (extraBytes > 2) {\\r\\n array[offset + 2] = (block >> 16) & 0xFF;\\r\\n }\\r\\n }\\r\\n return array;\\r\\n };\\r\\n\\r\\n var f = function (s) {\\r\\n var h, l, n, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9,\\r\\n b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17,\\r\\n b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33,\\r\\n b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49;\\r\\n for (n = 0; n < 48; n += 2) {\\r\\n c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40];\\r\\n c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41];\\r\\n c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42];\\r\\n c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43];\\r\\n c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44];\\r\\n c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45];\\r\\n c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46];\\r\\n c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47];\\r\\n c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48];\\r\\n c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49];\\r\\n\\r\\n h = c8 ^ ((c2 << 1) | (c3 >>> 31));\\r\\n l = c9 ^ ((c3 << 1) | (c2 >>> 31));\\r\\n s[0] ^= h;\\r\\n s[1] ^= l;\\r\\n s[10] ^= h;\\r\\n s[11] ^= l;\\r\\n s[20] ^= h;\\r\\n s[21] ^= l;\\r\\n s[30] ^= h;\\r\\n s[31] ^= l;\\r\\n s[40] ^= h;\\r\\n s[41] ^= l;\\r\\n h = c0 ^ ((c4 << 1) | (c5 >>> 31));\\r\\n l = c1 ^ ((c5 << 1) | (c4 >>> 31));\\r\\n s[2] ^= h;\\r\\n s[3] ^= l;\\r\\n s[12] ^= h;\\r\\n s[13] ^= l;\\r\\n s[22] ^= h;\\r\\n s[23] ^= l;\\r\\n s[32] ^= h;\\r\\n s[33] ^= l;\\r\\n s[42] ^= h;\\r\\n s[43] ^= l;\\r\\n h = c2 ^ ((c6 << 1) | (c7 >>> 31));\\r\\n l = c3 ^ ((c7 << 1) | (c6 >>> 31));\\r\\n s[4] ^= h;\\r\\n s[5] ^= l;\\r\\n s[14] ^= h;\\r\\n s[15] ^= l;\\r\\n s[24] ^= h;\\r\\n s[25] ^= l;\\r\\n s[34] ^= h;\\r\\n s[35] ^= l;\\r\\n s[44] ^= h;\\r\\n s[45] ^= l;\\r\\n h = c4 ^ ((c8 << 1) | (c9 >>> 31));\\r\\n l = c5 ^ ((c9 << 1) | (c8 >>> 31));\\r\\n s[6] ^= h;\\r\\n s[7] ^= l;\\r\\n s[16] ^= h;\\r\\n s[17] ^= l;\\r\\n s[26] ^= h;\\r\\n s[27] ^= l;\\r\\n s[36] ^= h;\\r\\n s[37] ^= l;\\r\\n s[46] ^= h;\\r\\n s[47] ^= l;\\r\\n h = c6 ^ ((c0 << 1) | (c1 >>> 31));\\r\\n l = c7 ^ ((c1 << 1) | (c0 >>> 31));\\r\\n s[8] ^= h;\\r\\n s[9] ^= l;\\r\\n s[18] ^= h;\\r\\n s[19] ^= l;\\r\\n s[28] ^= h;\\r\\n s[29] ^= l;\\r\\n s[38] ^= h;\\r\\n s[39] ^= l;\\r\\n s[48] ^= h;\\r\\n s[49] ^= l;\\r\\n\\r\\n b0 = s[0];\\r\\n b1 = s[1];\\r\\n b32 = (s[11] << 4) | (s[10] >>> 28);\\r\\n b33 = (s[10] << 4) | (s[11] >>> 28);\\r\\n b14 = (s[20] << 3) | (s[21] >>> 29);\\r\\n b15 = (s[21] << 3) | (s[20] >>> 29);\\r\\n b46 = (s[31] << 9) | (s[30] >>> 23);\\r\\n b47 = (s[30] << 9) | (s[31] >>> 23);\\r\\n b28 = (s[40] << 18) | (s[41] >>> 14);\\r\\n b29 = (s[41] << 18) | (s[40] >>> 14);\\r\\n b20 = (s[2] << 1) | (s[3] >>> 31);\\r\\n b21 = (s[3] << 1) | (s[2] >>> 31);\\r\\n b2 = (s[13] << 12) | (s[12] >>> 20);\\r\\n b3 = (s[12] << 12) | (s[13] >>> 20);\\r\\n b34 = (s[22] << 10) | (s[23] >>> 22);\\r\\n b35 = (s[23] << 10) | (s[22] >>> 22);\\r\\n b16 = (s[33] << 13) | (s[32] >>> 19);\\r\\n b17 = (s[32] << 13) | (s[33] >>> 19);\\r\\n b48 = (s[42] << 2) | (s[43] >>> 30);\\r\\n b49 = (s[43] << 2) | (s[42] >>> 30);\\r\\n b40 = (s[5] << 30) | (s[4] >>> 2);\\r\\n b41 = (s[4] << 30) | (s[5] >>> 2);\\r\\n b22 = (s[14] << 6) | (s[15] >>> 26);\\r\\n b23 = (s[15] << 6) | (s[14] >>> 26);\\r\\n b4 = (s[25] << 11) | (s[24] >>> 21);\\r\\n b5 = (s[24] << 11) | (s[25] >>> 21);\\r\\n b36 = (s[34] << 15) | (s[35] >>> 17);\\r\\n b37 = (s[35] << 15) | (s[34] >>> 17);\\r\\n b18 = (s[45] << 29) | (s[44] >>> 3);\\r\\n b19 = (s[44] << 29) | (s[45] >>> 3);\\r\\n b10 = (s[6] << 28) | (s[7] >>> 4);\\r\\n b11 = (s[7] << 28) | (s[6] >>> 4);\\r\\n b42 = (s[17] << 23) | (s[16] >>> 9);\\r\\n b43 = (s[16] << 23) | (s[17] >>> 9);\\r\\n b24 = (s[26] << 25) | (s[27] >>> 7);\\r\\n b25 = (s[27] << 25) | (s[26] >>> 7);\\r\\n b6 = (s[36] << 21) | (s[37] >>> 11);\\r\\n b7 = (s[37] << 21) | (s[36] >>> 11);\\r\\n b38 = (s[47] << 24) | (s[46] >>> 8);\\r\\n b39 = (s[46] << 24) | (s[47] >>> 8);\\r\\n b30 = (s[8] << 27) | (s[9] >>> 5);\\r\\n b31 = (s[9] << 27) | (s[8] >>> 5);\\r\\n b12 = (s[18] << 20) | (s[19] >>> 12);\\r\\n b13 = (s[19] << 20) | (s[18] >>> 12);\\r\\n b44 = (s[29] << 7) | (s[28] >>> 25);\\r\\n b45 = (s[28] << 7) | (s[29] >>> 25);\\r\\n b26 = (s[38] << 8) | (s[39] >>> 24);\\r\\n b27 = (s[39] << 8) | (s[38] >>> 24);\\r\\n b8 = (s[48] << 14) | (s[49] >>> 18);\\r\\n b9 = (s[49] << 14) | (s[48] >>> 18);\\r\\n\\r\\n s[0] = b0 ^ (~b2 & b4);\\r\\n s[1] = b1 ^ (~b3 & b5);\\r\\n s[10] = b10 ^ (~b12 & b14);\\r\\n s[11] = b11 ^ (~b13 & b15);\\r\\n s[20] = b20 ^ (~b22 & b24);\\r\\n s[21] = b21 ^ (~b23 & b25);\\r\\n s[30] = b30 ^ (~b32 & b34);\\r\\n s[31] = b31 ^ (~b33 & b35);\\r\\n s[40] = b40 ^ (~b42 & b44);\\r\\n s[41] = b41 ^ (~b43 & b45);\\r\\n s[2] = b2 ^ (~b4 & b6);\\r\\n s[3] = b3 ^ (~b5 & b7);\\r\\n s[12] = b12 ^ (~b14 & b16);\\r\\n s[13] = b13 ^ (~b15 & b17);\\r\\n s[22] = b22 ^ (~b24 & b26);\\r\\n s[23] = b23 ^ (~b25 & b27);\\r\\n s[32] = b32 ^ (~b34 & b36);\\r\\n s[33] = b33 ^ (~b35 & b37);\\r\\n s[42] = b42 ^ (~b44 & b46);\\r\\n s[43] = b43 ^ (~b45 & b47);\\r\\n s[4] = b4 ^ (~b6 & b8);\\r\\n s[5] = b5 ^ (~b7 & b9);\\r\\n s[14] = b14 ^ (~b16 & b18);\\r\\n s[15] = b15 ^ (~b17 & b19);\\r\\n s[24] = b24 ^ (~b26 & b28);\\r\\n s[25] = b25 ^ (~b27 & b29);\\r\\n s[34] = b34 ^ (~b36 & b38);\\r\\n s[35] = b35 ^ (~b37 & b39);\\r\\n s[44] = b44 ^ (~b46 & b48);\\r\\n s[45] = b45 ^ (~b47 & b49);\\r\\n s[6] = b6 ^ (~b8 & b0);\\r\\n s[7] = b7 ^ (~b9 & b1);\\r\\n s[16] = b16 ^ (~b18 & b10);\\r\\n s[17] = b17 ^ (~b19 & b11);\\r\\n s[26] = b26 ^ (~b28 & b20);\\r\\n s[27] = b27 ^ (~b29 & b21);\\r\\n s[36] = b36 ^ (~b38 & b30);\\r\\n s[37] = b37 ^ (~b39 & b31);\\r\\n s[46] = b46 ^ (~b48 & b40);\\r\\n s[47] = b47 ^ (~b49 & b41);\\r\\n s[8] = b8 ^ (~b0 & b2);\\r\\n s[9] = b9 ^ (~b1 & b3);\\r\\n s[18] = b18 ^ (~b10 & b12);\\r\\n s[19] = b19 ^ (~b11 & b13);\\r\\n s[28] = b28 ^ (~b20 & b22);\\r\\n s[29] = b29 ^ (~b21 & b23);\\r\\n s[38] = b38 ^ (~b30 & b32);\\r\\n s[39] = b39 ^ (~b31 & b33);\\r\\n s[48] = b48 ^ (~b40 & b42);\\r\\n s[49] = b49 ^ (~b41 & b43);\\r\\n\\r\\n s[0] ^= RC[n];\\r\\n s[1] ^= RC[n + 1];\\r\\n }\\r\\n };\\r\\n\\r\\n if (COMMON_JS) {\\r\\n module.exports = methods;\\r\\n } else {\\r\\n for (var i = 0; i < methodNames.length; ++i) {\\r\\n root[methodNames[i]] = methods[methodNames[i]];\\r\\n }\\r\\n }\\r\\n})();\\r\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../process/browser.js */ \\\"./node_modules/process/browser.js\\\"), __webpack_require__(/*! ./../../webpack/buildin/global.js */ \\\"./node_modules/webpack/buildin/global.js\\\")))\\n\\n//# sourceURL=webpack:///./node_modules/js-sha3/src/sha3.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/json-stringify-deterministic/lib/defaults.js\":\n/*!*******************************************************************!*\\\n !*** ./node_modules/json-stringify-deterministic/lib/defaults.js ***!\n \\*******************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"module.exports = {\\n space: '',\\n cycles: false,\\n replacer: (k, v) => v,\\n stringify: JSON.stringify\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/json-stringify-deterministic/lib/defaults.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/json-stringify-deterministic/lib/index.js\":\n/*!****************************************************************!*\\\n !*** ./node_modules/json-stringify-deterministic/lib/index.js ***!\n \\****************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst DEFAULTS = __webpack_require__(/*! ./defaults */ \\\"./node_modules/json-stringify-deterministic/lib/defaults.js\\\")\\nconst isFunction = __webpack_require__(/*! ./util */ \\\"./node_modules/json-stringify-deterministic/lib/util.js\\\").isFunction\\nconst isBoolean = __webpack_require__(/*! ./util */ \\\"./node_modules/json-stringify-deterministic/lib/util.js\\\").isBoolean\\nconst isObject = __webpack_require__(/*! ./util */ \\\"./node_modules/json-stringify-deterministic/lib/util.js\\\").isObject\\nconst isArray = __webpack_require__(/*! ./util */ \\\"./node_modules/json-stringify-deterministic/lib/util.js\\\").isArray\\nconst isRegex = __webpack_require__(/*! ./util */ \\\"./node_modules/json-stringify-deterministic/lib/util.js\\\").isRegex\\nconst assign = __webpack_require__(/*! ./util */ \\\"./node_modules/json-stringify-deterministic/lib/util.js\\\").assign\\nconst keys = __webpack_require__(/*! ./util */ \\\"./node_modules/json-stringify-deterministic/lib/util.js\\\").keys\\n\\nfunction serialize (obj) {\\n if (obj === null || obj === undefined) return obj\\n if (isRegex(obj)) return obj.toString()\\n return obj.toJSON ? obj.toJSON() : obj\\n}\\n\\nfunction stringifyDeterministic (obj, opts) {\\n opts = opts || assign({}, DEFAULTS)\\n\\n if (isFunction(opts)) opts = { compare: opts }\\n\\n const space = opts.space || DEFAULTS.space\\n const cycles = isBoolean(opts.cycles) ? opts.cycles : DEFAULTS.cycles\\n const replacer = opts.replacer || DEFAULTS.replacer\\n const stringify = opts.stringify || DEFAULTS.stringify\\n\\n const compare = opts.compare && (function (f) {\\n return function (node) {\\n return function (a, b) {\\n const aobj = {key: a, value: node[a]}\\n const bobj = {key: b, value: node[b]}\\n return f(aobj, bobj)\\n }\\n }\\n })(opts.compare)\\n\\n // Detect circular structure in obj and raise error efficiently.\\n if (!cycles) stringify(obj)\\n\\n const seen = []\\n\\n return (function _deterministic (parent, key, node, level) {\\n const indent = space ? ('\\\\n' + new Array(level + 1).join(space)) : ''\\n const colonSeparator = space ? ': ' : ':'\\n\\n node = serialize(node)\\n node = replacer.call(parent, key, node)\\n\\n if (node === undefined) return\\n\\n if (!isObject(node) || node === null) return stringify(node)\\n\\n if (isArray(node)) {\\n const out = []\\n for (let i = 0; i < node.length; i++) {\\n const item = _deterministic(node, i, node[i], level + 1) || stringify(null)\\n out.push(indent + space + item)\\n }\\n return '[' + out.join(',') + indent + ']'\\n } else {\\n if (cycles) {\\n if (seen.indexOf(node) !== -1) {\\n return stringify('[Circular]')\\n } else {\\n seen.push(node)\\n }\\n }\\n\\n const nodeKeys = keys(node).sort(compare && compare(node))\\n const out = []\\n for (let i = 0; i < nodeKeys.length; i++) {\\n const key = nodeKeys[i]\\n const value = _deterministic(node, key, node[key], level + 1)\\n\\n if (!value) continue\\n\\n const keyValue = stringify(key) + colonSeparator + value\\n out.push(indent + space + keyValue)\\n }\\n seen.splice(seen.indexOf(node), 1)\\n return '{' + out.join(',') + indent + '}'\\n }\\n })({ '': obj }, '', obj, 0)\\n}\\n\\nmodule.exports = stringifyDeterministic\\n\\n\\n//# sourceURL=webpack:///./node_modules/json-stringify-deterministic/lib/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/json-stringify-deterministic/lib/util.js\":\n/*!***************************************************************!*\\\n !*** ./node_modules/json-stringify-deterministic/lib/util.js ***!\n \\***************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nmodule.exports = {\\n isArray: Array.isArray,\\n assign: Object.assign,\\n isObject: v => typeof v === 'object',\\n isFunction: v => typeof v === 'function',\\n isBoolean: v => typeof v === 'boolean',\\n isRegex: v => v instanceof RegExp,\\n keys: Object.keys\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/json-stringify-deterministic/lib/util.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/minimalistic-assert/index.js\":\n/*!***************************************************!*\\\n !*** ./node_modules/minimalistic-assert/index.js ***!\n \\***************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"module.exports = assert;\\n\\nfunction assert(val, msg) {\\n if (!val)\\n throw new Error(msg || 'Assertion failed');\\n}\\n\\nassert.equal = function assertEqual(l, r, msg) {\\n if (l != r)\\n throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/minimalistic-assert/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/minimalistic-crypto-utils/lib/utils.js\":\n/*!*************************************************************!*\\\n !*** ./node_modules/minimalistic-crypto-utils/lib/utils.js ***!\n \\*************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar utils = exports;\\n\\nfunction toArray(msg, enc) {\\n if (Array.isArray(msg))\\n return msg.slice();\\n if (!msg)\\n return [];\\n var res = [];\\n if (typeof msg !== 'string') {\\n for (var i = 0; i < msg.length; i++)\\n res[i] = msg[i] | 0;\\n return res;\\n }\\n if (enc === 'hex') {\\n msg = msg.replace(/[^a-z0-9]+/ig, '');\\n if (msg.length % 2 !== 0)\\n msg = '0' + msg;\\n for (var i = 0; i < msg.length; i += 2)\\n res.push(parseInt(msg[i] + msg[i + 1], 16));\\n } else {\\n for (var i = 0; i < msg.length; i++) {\\n var c = msg.charCodeAt(i);\\n var hi = c >> 8;\\n var lo = c & 0xff;\\n if (hi)\\n res.push(hi, lo);\\n else\\n res.push(lo);\\n }\\n }\\n return res;\\n}\\nutils.toArray = toArray;\\n\\nfunction zero2(word) {\\n if (word.length === 1)\\n return '0' + word;\\n else\\n return word;\\n}\\nutils.zero2 = zero2;\\n\\nfunction toHex(msg) {\\n var res = '';\\n for (var i = 0; i < msg.length; i++)\\n res += zero2(msg[i].toString(16));\\n return res;\\n}\\nutils.toHex = toHex;\\n\\nutils.encode = function encode(arr, enc) {\\n if (enc === 'hex')\\n return toHex(arr);\\n else\\n return arr;\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/minimalistic-crypto-utils/lib/utils.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/multibase/src/base.js\":\n/*!********************************************!*\\\n !*** ./node_modules/multibase/src/base.js ***!\n \\********************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nclass Base {\\n constructor (name, code, implementation, alphabet) {\\n this.name = name\\n this.code = code\\n this.alphabet = alphabet\\n if (implementation && alphabet) {\\n this.engine = implementation(alphabet)\\n }\\n }\\n\\n encode (stringOrBuffer) {\\n return this.engine.encode(stringOrBuffer)\\n }\\n\\n decode (stringOrBuffer) {\\n return this.engine.decode(stringOrBuffer)\\n }\\n\\n isImplemented () {\\n return this.engine\\n }\\n}\\n\\nmodule.exports = Base\\n\\n\\n//# sourceURL=webpack:///./node_modules/multibase/src/base.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/multibase/src/base16.js\":\n/*!**********************************************!*\\\n !*** ./node_modules/multibase/src/base16.js ***!\n \\**********************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {\\n\\nmodule.exports = function base16 (alphabet) {\\n return {\\n encode (input) {\\n if (typeof input === 'string') {\\n return Buffer.from(input).toString('hex')\\n }\\n return input.toString('hex')\\n },\\n decode (input) {\\n for (let char of input) {\\n if (alphabet.indexOf(char) < 0) {\\n throw new Error('invalid base16 character')\\n }\\n }\\n return Buffer.from(input, 'hex')\\n }\\n }\\n}\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/multibase/src/base16.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/multibase/src/base32.js\":\n/*!**********************************************!*\\\n !*** ./node_modules/multibase/src/base32.js ***!\n \\**********************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {\\n\\nfunction decode (input, alphabet) {\\n input = input.replace(new RegExp('=', 'g'), '')\\n let length = input.length\\n\\n let bits = 0\\n let value = 0\\n\\n let index = 0\\n let output = new Uint8Array((length * 5 / 8) | 0)\\n\\n for (let i = 0; i < length; i++) {\\n value = (value << 5) | alphabet.indexOf(input[i])\\n bits += 5\\n\\n if (bits >= 8) {\\n output[index++] = (value >>> (bits - 8)) & 255\\n bits -= 8\\n }\\n }\\n\\n return output.buffer\\n}\\n\\nfunction encode (buffer, alphabet) {\\n let length = buffer.byteLength\\n let view = new Uint8Array(buffer)\\n let padding = alphabet.indexOf('=') === alphabet.length - 1\\n\\n if (padding) {\\n alphabet = alphabet.substring(0, alphabet.length - 2)\\n }\\n\\n let bits = 0\\n let value = 0\\n let output = ''\\n\\n for (let i = 0; i < length; i++) {\\n value = (value << 8) | view[i]\\n bits += 8\\n\\n while (bits >= 5) {\\n output += alphabet[(value >>> (bits - 5)) & 31]\\n bits -= 5\\n }\\n }\\n\\n if (bits > 0) {\\n output += alphabet[(value << (5 - bits)) & 31]\\n }\\n\\n if (padding) {\\n while ((output.length % 8) !== 0) {\\n output += '='\\n }\\n }\\n\\n return output\\n}\\n\\nmodule.exports = function base32 (alphabet) {\\n return {\\n encode (input) {\\n if (typeof input === 'string') {\\n return encode(Buffer.from(input), alphabet)\\n }\\n\\n return encode(input, alphabet)\\n },\\n decode (input) {\\n for (let char of input) {\\n if (alphabet.indexOf(char) < 0) {\\n throw new Error('invalid base32 character')\\n }\\n }\\n\\n return decode(input, alphabet)\\n }\\n }\\n}\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/multibase/src/base32.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/multibase/src/base64.js\":\n/*!**********************************************!*\\\n !*** ./node_modules/multibase/src/base64.js ***!\n \\**********************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {\\n\\nmodule.exports = function base64 (alphabet) {\\n // The alphabet is only used to know:\\n // 1. If padding is enabled (must contain '=')\\n // 2. If the output must be url-safe (must contain '-' and '_')\\n // 3. If the input of the output function is valid\\n // The alphabets from RFC 4648 are always used.\\n const padding = alphabet.indexOf('=') > -1\\n const url = alphabet.indexOf('-') > -1 && alphabet.indexOf('_') > -1\\n\\n return {\\n encode (input) {\\n let output = ''\\n\\n if (typeof input === 'string') {\\n output = Buffer.from(input).toString('base64')\\n } else {\\n output = input.toString('base64')\\n }\\n\\n if (url) {\\n output = output.replace(/\\\\+/g, '-').replace(/\\\\//g, '_')\\n }\\n\\n const pad = output.indexOf('=')\\n if (pad > 0 && !padding) {\\n output = output.substring(0, pad)\\n }\\n\\n return output\\n },\\n decode (input) {\\n for (let char of input) {\\n if (alphabet.indexOf(char) < 0) {\\n throw new Error('invalid base64 character')\\n }\\n }\\n\\n return Buffer.from(input, 'base64')\\n }\\n }\\n}\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/multibase/src/base64.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/multibase/src/constants.js\":\n/*!*************************************************!*\\\n !*** ./node_modules/multibase/src/constants.js ***!\n \\*************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst Base = __webpack_require__(/*! ./base.js */ \\\"./node_modules/multibase/src/base.js\\\")\\nconst baseX = __webpack_require__(/*! base-x */ \\\"./node_modules/base-x/index.js\\\")\\nconst base16 = __webpack_require__(/*! ./base16 */ \\\"./node_modules/multibase/src/base16.js\\\")\\nconst base32 = __webpack_require__(/*! ./base32 */ \\\"./node_modules/multibase/src/base32.js\\\")\\nconst base64 = __webpack_require__(/*! ./base64 */ \\\"./node_modules/multibase/src/base64.js\\\")\\n\\n// name, code, implementation, alphabet\\nconst constants = [\\n ['base1', '1', '', '1'],\\n ['base2', '0', baseX, '01'],\\n ['base8', '7', baseX, '01234567'],\\n ['base10', '9', baseX, '0123456789'],\\n ['base16', 'f', base16, '0123456789abcdef'],\\n ['base32', 'b', base32, 'abcdefghijklmnopqrstuvwxyz234567'],\\n ['base32pad', 'c', base32, 'abcdefghijklmnopqrstuvwxyz234567='],\\n ['base32hex', 'v', base32, '0123456789abcdefghijklmnopqrstuv'],\\n ['base32hexpad', 't', base32, '0123456789abcdefghijklmnopqrstuv='],\\n ['base32z', 'h', base32, 'ybndrfg8ejkmcpqxot1uwisza345h769'],\\n ['base58flickr', 'Z', baseX, '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'],\\n ['base58btc', 'z', baseX, '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'],\\n ['base64', 'm', base64, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'],\\n ['base64pad', 'M', base64, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='],\\n ['base64url', 'u', base64, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'],\\n ['base64urlpad', 'U', base64, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=']\\n]\\n\\nconst names = constants.reduce((prev, tupple) => {\\n prev[tupple[0]] = new Base(tupple[0], tupple[1], tupple[2], tupple[3])\\n return prev\\n}, {})\\n\\nconst codes = constants.reduce((prev, tupple) => {\\n prev[tupple[1]] = names[tupple[0]]\\n return prev\\n}, {})\\n\\nmodule.exports = {\\n names: names,\\n codes: codes\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/multibase/src/constants.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/multibase/src/index.js\":\n/*!*********************************************!*\\\n !*** ./node_modules/multibase/src/index.js ***!\n \\*********************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {/**\\n * Implementation of the [multibase](https://github.com/multiformats/multibase) specification.\\n * @module Multibase\\n */\\n\\n\\nconst constants = __webpack_require__(/*! ./constants */ \\\"./node_modules/multibase/src/constants.js\\\")\\n\\nexports = module.exports = multibase\\nexports.encode = encode\\nexports.decode = decode\\nexports.isEncoded = isEncoded\\nexports.names = Object.freeze(Object.keys(constants.names))\\nexports.codes = Object.freeze(Object.keys(constants.codes))\\n\\nconst errNotSupported = new Error('Unsupported encoding')\\n\\n/**\\n * Create a new buffer with the multibase varint+code.\\n *\\n * @param {string|number} nameOrCode - The multibase name or code number.\\n * @param {Buffer} buf - The data to be prefixed with multibase.\\n * @memberof Multibase\\n * @returns {Buffer}\\n */\\nfunction multibase (nameOrCode, buf) {\\n if (!buf) {\\n throw new Error('requires an encoded buffer')\\n }\\n const base = getBase(nameOrCode)\\n const codeBuf = Buffer.from(base.code)\\n\\n const name = base.name\\n validEncode(name, buf)\\n return Buffer.concat([codeBuf, buf])\\n}\\n\\n/**\\n * Encode data with the specified base and add the multibase prefix.\\n *\\n * @param {string|number} nameOrCode - The multibase name or code number.\\n * @param {Buffer} buf - The data to be encoded.\\n * @returns {Buffer}\\n * @memberof Multibase\\n */\\nfunction encode (nameOrCode, buf) {\\n const base = getBase(nameOrCode)\\n const name = base.name\\n\\n return multibase(name, Buffer.from(base.encode(buf)))\\n}\\n\\n/**\\n * Takes a buffer or string encoded with multibase header, decodes it and\\n * returns the decoded buffer\\n *\\n * @param {Buffer|string} bufOrString\\n * @returns {Buffer}\\n * @memberof Multibase\\n *\\n */\\nfunction decode (bufOrString) {\\n if (Buffer.isBuffer(bufOrString)) {\\n bufOrString = bufOrString.toString()\\n }\\n\\n const code = bufOrString.substring(0, 1)\\n bufOrString = bufOrString.substring(1, bufOrString.length)\\n\\n if (typeof bufOrString === 'string') {\\n bufOrString = Buffer.from(bufOrString)\\n }\\n\\n const base = getBase(code)\\n return Buffer.from(base.decode(bufOrString.toString()))\\n}\\n\\n/**\\n * Is the given data multibase encoded?\\n *\\n * @param {Buffer|string} bufOrString\\n * @returns {boolean}\\n * @memberof Multibase\\n */\\nfunction isEncoded (bufOrString) {\\n if (Buffer.isBuffer(bufOrString)) {\\n bufOrString = bufOrString.toString()\\n }\\n\\n // Ensure bufOrString is a string\\n if (Object.prototype.toString.call(bufOrString) !== '[object String]') {\\n return false\\n }\\n\\n const code = bufOrString.substring(0, 1)\\n try {\\n const base = getBase(code)\\n return base.name\\n } catch (err) {\\n return false\\n }\\n}\\n\\n/**\\n * @param {string} name\\n * @param {Buffer} buf\\n * @private\\n * @returns {undefined}\\n */\\nfunction validEncode (name, buf) {\\n const base = getBase(name)\\n base.decode(buf.toString())\\n}\\n\\nfunction getBase (nameOrCode) {\\n let base\\n\\n if (constants.names[nameOrCode]) {\\n base = constants.names[nameOrCode]\\n } else if (constants.codes[nameOrCode]) {\\n base = constants.codes[nameOrCode]\\n } else {\\n throw errNotSupported\\n }\\n\\n if (!base.isImplemented()) {\\n throw new Error('Base ' + nameOrCode + ' is not implemented yet')\\n }\\n\\n return base\\n}\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/multibase/src/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/multihashes/src/constants.js\":\n/*!***************************************************!*\\\n !*** ./node_modules/multihashes/src/constants.js ***!\n \\***************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* eslint quote-props: off */\\n/* eslint key-spacing: off */\\n\\n\\nexports.names = Object.freeze({\\n 'id': 0x0,\\n 'sha1': 0x11,\\n 'sha2-256': 0x12,\\n 'sha2-512': 0x13,\\n 'dbl-sha2-256': 0x56,\\n 'sha3-224': 0x17,\\n 'sha3-256': 0x16,\\n 'sha3-384': 0x15,\\n 'sha3-512': 0x14,\\n 'shake-128': 0x18,\\n 'shake-256': 0x19,\\n 'keccak-224': 0x1A,\\n 'keccak-256': 0x1B,\\n 'keccak-384': 0x1C,\\n 'keccak-512': 0x1D,\\n 'murmur3-128': 0x22,\\n 'murmur3-32': 0x23,\\n 'blake2b-8': 0xb201,\\n 'blake2b-16': 0xb202,\\n 'blake2b-24': 0xb203,\\n 'blake2b-32': 0xb204,\\n 'blake2b-40': 0xb205,\\n 'blake2b-48': 0xb206,\\n 'blake2b-56': 0xb207,\\n 'blake2b-64': 0xb208,\\n 'blake2b-72': 0xb209,\\n 'blake2b-80': 0xb20a,\\n 'blake2b-88': 0xb20b,\\n 'blake2b-96': 0xb20c,\\n 'blake2b-104': 0xb20d,\\n 'blake2b-112': 0xb20e,\\n 'blake2b-120': 0xb20f,\\n 'blake2b-128': 0xb210,\\n 'blake2b-136': 0xb211,\\n 'blake2b-144': 0xb212,\\n 'blake2b-152': 0xb213,\\n 'blake2b-160': 0xb214,\\n 'blake2b-168': 0xb215,\\n 'blake2b-176': 0xb216,\\n 'blake2b-184': 0xb217,\\n 'blake2b-192': 0xb218,\\n 'blake2b-200': 0xb219,\\n 'blake2b-208': 0xb21a,\\n 'blake2b-216': 0xb21b,\\n 'blake2b-224': 0xb21c,\\n 'blake2b-232': 0xb21d,\\n 'blake2b-240': 0xb21e,\\n 'blake2b-248': 0xb21f,\\n 'blake2b-256': 0xb220,\\n 'blake2b-264': 0xb221,\\n 'blake2b-272': 0xb222,\\n 'blake2b-280': 0xb223,\\n 'blake2b-288': 0xb224,\\n 'blake2b-296': 0xb225,\\n 'blake2b-304': 0xb226,\\n 'blake2b-312': 0xb227,\\n 'blake2b-320': 0xb228,\\n 'blake2b-328': 0xb229,\\n 'blake2b-336': 0xb22a,\\n 'blake2b-344': 0xb22b,\\n 'blake2b-352': 0xb22c,\\n 'blake2b-360': 0xb22d,\\n 'blake2b-368': 0xb22e,\\n 'blake2b-376': 0xb22f,\\n 'blake2b-384': 0xb230,\\n 'blake2b-392': 0xb231,\\n 'blake2b-400': 0xb232,\\n 'blake2b-408': 0xb233,\\n 'blake2b-416': 0xb234,\\n 'blake2b-424': 0xb235,\\n 'blake2b-432': 0xb236,\\n 'blake2b-440': 0xb237,\\n 'blake2b-448': 0xb238,\\n 'blake2b-456': 0xb239,\\n 'blake2b-464': 0xb23a,\\n 'blake2b-472': 0xb23b,\\n 'blake2b-480': 0xb23c,\\n 'blake2b-488': 0xb23d,\\n 'blake2b-496': 0xb23e,\\n 'blake2b-504': 0xb23f,\\n 'blake2b-512': 0xb240,\\n 'blake2s-8': 0xb241,\\n 'blake2s-16': 0xb242,\\n 'blake2s-24': 0xb243,\\n 'blake2s-32': 0xb244,\\n 'blake2s-40': 0xb245,\\n 'blake2s-48': 0xb246,\\n 'blake2s-56': 0xb247,\\n 'blake2s-64': 0xb248,\\n 'blake2s-72': 0xb249,\\n 'blake2s-80': 0xb24a,\\n 'blake2s-88': 0xb24b,\\n 'blake2s-96': 0xb24c,\\n 'blake2s-104': 0xb24d,\\n 'blake2s-112': 0xb24e,\\n 'blake2s-120': 0xb24f,\\n 'blake2s-128': 0xb250,\\n 'blake2s-136': 0xb251,\\n 'blake2s-144': 0xb252,\\n 'blake2s-152': 0xb253,\\n 'blake2s-160': 0xb254,\\n 'blake2s-168': 0xb255,\\n 'blake2s-176': 0xb256,\\n 'blake2s-184': 0xb257,\\n 'blake2s-192': 0xb258,\\n 'blake2s-200': 0xb259,\\n 'blake2s-208': 0xb25a,\\n 'blake2s-216': 0xb25b,\\n 'blake2s-224': 0xb25c,\\n 'blake2s-232': 0xb25d,\\n 'blake2s-240': 0xb25e,\\n 'blake2s-248': 0xb25f,\\n 'blake2s-256': 0xb260,\\n 'Skein256-8': 0xb301,\\n 'Skein256-16': 0xb302,\\n 'Skein256-24': 0xb303,\\n 'Skein256-32': 0xb304,\\n 'Skein256-40': 0xb305,\\n 'Skein256-48': 0xb306,\\n 'Skein256-56': 0xb307,\\n 'Skein256-64': 0xb308,\\n 'Skein256-72': 0xb309,\\n 'Skein256-80': 0xb30a,\\n 'Skein256-88': 0xb30b,\\n 'Skein256-96': 0xb30c,\\n 'Skein256-104': 0xb30d,\\n 'Skein256-112': 0xb30e,\\n 'Skein256-120': 0xb30f,\\n 'Skein256-128': 0xb310,\\n 'Skein256-136': 0xb311,\\n 'Skein256-144': 0xb312,\\n 'Skein256-152': 0xb313,\\n 'Skein256-160': 0xb314,\\n 'Skein256-168': 0xb315,\\n 'Skein256-176': 0xb316,\\n 'Skein256-184': 0xb317,\\n 'Skein256-192': 0xb318,\\n 'Skein256-200': 0xb319,\\n 'Skein256-208': 0xb31a,\\n 'Skein256-216': 0xb31b,\\n 'Skein256-224': 0xb31c,\\n 'Skein256-232': 0xb31d,\\n 'Skein256-240': 0xb31e,\\n 'Skein256-248': 0xb31f,\\n 'Skein256-256': 0xb320,\\n 'Skein512-8': 0xb321,\\n 'Skein512-16': 0xb322,\\n 'Skein512-24': 0xb323,\\n 'Skein512-32': 0xb324,\\n 'Skein512-40': 0xb325,\\n 'Skein512-48': 0xb326,\\n 'Skein512-56': 0xb327,\\n 'Skein512-64': 0xb328,\\n 'Skein512-72': 0xb329,\\n 'Skein512-80': 0xb32a,\\n 'Skein512-88': 0xb32b,\\n 'Skein512-96': 0xb32c,\\n 'Skein512-104': 0xb32d,\\n 'Skein512-112': 0xb32e,\\n 'Skein512-120': 0xb32f,\\n 'Skein512-128': 0xb330,\\n 'Skein512-136': 0xb331,\\n 'Skein512-144': 0xb332,\\n 'Skein512-152': 0xb333,\\n 'Skein512-160': 0xb334,\\n 'Skein512-168': 0xb335,\\n 'Skein512-176': 0xb336,\\n 'Skein512-184': 0xb337,\\n 'Skein512-192': 0xb338,\\n 'Skein512-200': 0xb339,\\n 'Skein512-208': 0xb33a,\\n 'Skein512-216': 0xb33b,\\n 'Skein512-224': 0xb33c,\\n 'Skein512-232': 0xb33d,\\n 'Skein512-240': 0xb33e,\\n 'Skein512-248': 0xb33f,\\n 'Skein512-256': 0xb340,\\n 'Skein512-264': 0xb341,\\n 'Skein512-272': 0xb342,\\n 'Skein512-280': 0xb343,\\n 'Skein512-288': 0xb344,\\n 'Skein512-296': 0xb345,\\n 'Skein512-304': 0xb346,\\n 'Skein512-312': 0xb347,\\n 'Skein512-320': 0xb348,\\n 'Skein512-328': 0xb349,\\n 'Skein512-336': 0xb34a,\\n 'Skein512-344': 0xb34b,\\n 'Skein512-352': 0xb34c,\\n 'Skein512-360': 0xb34d,\\n 'Skein512-368': 0xb34e,\\n 'Skein512-376': 0xb34f,\\n 'Skein512-384': 0xb350,\\n 'Skein512-392': 0xb351,\\n 'Skein512-400': 0xb352,\\n 'Skein512-408': 0xb353,\\n 'Skein512-416': 0xb354,\\n 'Skein512-424': 0xb355,\\n 'Skein512-432': 0xb356,\\n 'Skein512-440': 0xb357,\\n 'Skein512-448': 0xb358,\\n 'Skein512-456': 0xb359,\\n 'Skein512-464': 0xb35a,\\n 'Skein512-472': 0xb35b,\\n 'Skein512-480': 0xb35c,\\n 'Skein512-488': 0xb35d,\\n 'Skein512-496': 0xb35e,\\n 'Skein512-504': 0xb35f,\\n 'Skein512-512': 0xb360,\\n 'Skein1024-8': 0xb361,\\n 'Skein1024-16': 0xb362,\\n 'Skein1024-24': 0xb363,\\n 'Skein1024-32': 0xb364,\\n 'Skein1024-40': 0xb365,\\n 'Skein1024-48': 0xb366,\\n 'Skein1024-56': 0xb367,\\n 'Skein1024-64': 0xb368,\\n 'Skein1024-72': 0xb369,\\n 'Skein1024-80': 0xb36a,\\n 'Skein1024-88': 0xb36b,\\n 'Skein1024-96': 0xb36c,\\n 'Skein1024-104': 0xb36d,\\n 'Skein1024-112': 0xb36e,\\n 'Skein1024-120': 0xb36f,\\n 'Skein1024-128': 0xb370,\\n 'Skein1024-136': 0xb371,\\n 'Skein1024-144': 0xb372,\\n 'Skein1024-152': 0xb373,\\n 'Skein1024-160': 0xb374,\\n 'Skein1024-168': 0xb375,\\n 'Skein1024-176': 0xb376,\\n 'Skein1024-184': 0xb377,\\n 'Skein1024-192': 0xb378,\\n 'Skein1024-200': 0xb379,\\n 'Skein1024-208': 0xb37a,\\n 'Skein1024-216': 0xb37b,\\n 'Skein1024-224': 0xb37c,\\n 'Skein1024-232': 0xb37d,\\n 'Skein1024-240': 0xb37e,\\n 'Skein1024-248': 0xb37f,\\n 'Skein1024-256': 0xb380,\\n 'Skein1024-264': 0xb381,\\n 'Skein1024-272': 0xb382,\\n 'Skein1024-280': 0xb383,\\n 'Skein1024-288': 0xb384,\\n 'Skein1024-296': 0xb385,\\n 'Skein1024-304': 0xb386,\\n 'Skein1024-312': 0xb387,\\n 'Skein1024-320': 0xb388,\\n 'Skein1024-328': 0xb389,\\n 'Skein1024-336': 0xb38a,\\n 'Skein1024-344': 0xb38b,\\n 'Skein1024-352': 0xb38c,\\n 'Skein1024-360': 0xb38d,\\n 'Skein1024-368': 0xb38e,\\n 'Skein1024-376': 0xb38f,\\n 'Skein1024-384': 0xb390,\\n 'Skein1024-392': 0xb391,\\n 'Skein1024-400': 0xb392,\\n 'Skein1024-408': 0xb393,\\n 'Skein1024-416': 0xb394,\\n 'Skein1024-424': 0xb395,\\n 'Skein1024-432': 0xb396,\\n 'Skein1024-440': 0xb397,\\n 'Skein1024-448': 0xb398,\\n 'Skein1024-456': 0xb399,\\n 'Skein1024-464': 0xb39a,\\n 'Skein1024-472': 0xb39b,\\n 'Skein1024-480': 0xb39c,\\n 'Skein1024-488': 0xb39d,\\n 'Skein1024-496': 0xb39e,\\n 'Skein1024-504': 0xb39f,\\n 'Skein1024-512': 0xb3a0,\\n 'Skein1024-520': 0xb3a1,\\n 'Skein1024-528': 0xb3a2,\\n 'Skein1024-536': 0xb3a3,\\n 'Skein1024-544': 0xb3a4,\\n 'Skein1024-552': 0xb3a5,\\n 'Skein1024-560': 0xb3a6,\\n 'Skein1024-568': 0xb3a7,\\n 'Skein1024-576': 0xb3a8,\\n 'Skein1024-584': 0xb3a9,\\n 'Skein1024-592': 0xb3aa,\\n 'Skein1024-600': 0xb3ab,\\n 'Skein1024-608': 0xb3ac,\\n 'Skein1024-616': 0xb3ad,\\n 'Skein1024-624': 0xb3ae,\\n 'Skein1024-632': 0xb3af,\\n 'Skein1024-640': 0xb3b0,\\n 'Skein1024-648': 0xb3b1,\\n 'Skein1024-656': 0xb3b2,\\n 'Skein1024-664': 0xb3b3,\\n 'Skein1024-672': 0xb3b4,\\n 'Skein1024-680': 0xb3b5,\\n 'Skein1024-688': 0xb3b6,\\n 'Skein1024-696': 0xb3b7,\\n 'Skein1024-704': 0xb3b8,\\n 'Skein1024-712': 0xb3b9,\\n 'Skein1024-720': 0xb3ba,\\n 'Skein1024-728': 0xb3bb,\\n 'Skein1024-736': 0xb3bc,\\n 'Skein1024-744': 0xb3bd,\\n 'Skein1024-752': 0xb3be,\\n 'Skein1024-760': 0xb3bf,\\n 'Skein1024-768': 0xb3c0,\\n 'Skein1024-776': 0xb3c1,\\n 'Skein1024-784': 0xb3c2,\\n 'Skein1024-792': 0xb3c3,\\n 'Skein1024-800': 0xb3c4,\\n 'Skein1024-808': 0xb3c5,\\n 'Skein1024-816': 0xb3c6,\\n 'Skein1024-824': 0xb3c7,\\n 'Skein1024-832': 0xb3c8,\\n 'Skein1024-840': 0xb3c9,\\n 'Skein1024-848': 0xb3ca,\\n 'Skein1024-856': 0xb3cb,\\n 'Skein1024-864': 0xb3cc,\\n 'Skein1024-872': 0xb3cd,\\n 'Skein1024-880': 0xb3ce,\\n 'Skein1024-888': 0xb3cf,\\n 'Skein1024-896': 0xb3d0,\\n 'Skein1024-904': 0xb3d1,\\n 'Skein1024-912': 0xb3d2,\\n 'Skein1024-920': 0xb3d3,\\n 'Skein1024-928': 0xb3d4,\\n 'Skein1024-936': 0xb3d5,\\n 'Skein1024-944': 0xb3d6,\\n 'Skein1024-952': 0xb3d7,\\n 'Skein1024-960': 0xb3d8,\\n 'Skein1024-968': 0xb3d9,\\n 'Skein1024-976': 0xb3da,\\n 'Skein1024-984': 0xb3db,\\n 'Skein1024-992': 0xb3dc,\\n 'Skein1024-1000': 0xb3dd,\\n 'Skein1024-1008': 0xb3de,\\n 'Skein1024-1016': 0xb3df,\\n 'Skein1024-1024': 0xb3e0\\n})\\n\\nexports.codes = Object.freeze({\\n 0x11: 'sha1',\\n 0x12: 'sha2-256',\\n 0x13: 'sha2-512',\\n 0x56: 'dbl-sha2-256',\\n 0x17: 'sha3-224',\\n 0x16: 'sha3-256',\\n 0x15: 'sha3-384',\\n 0x14: 'sha3-512',\\n 0x18: 'shake-128',\\n 0x19: 'shake-256',\\n 0x1A: 'keccak-224',\\n 0x1B: 'keccak-256',\\n 0x1C: 'keccak-384',\\n 0x1D: 'keccak-512',\\n 0x22: 'murmur3-128',\\n 0x23: 'murmur3-32',\\n\\n // blake2\\n 0xb201: 'blake2b-8',\\n 0xb202: 'blake2b-16',\\n 0xb203: 'blake2b-24',\\n 0xb204: 'blake2b-32',\\n 0xb205: 'blake2b-40',\\n 0xb206: 'blake2b-48',\\n 0xb207: 'blake2b-56',\\n 0xb208: 'blake2b-64',\\n 0xb209: 'blake2b-72',\\n 0xb20a: 'blake2b-80',\\n 0xb20b: 'blake2b-88',\\n 0xb20c: 'blake2b-96',\\n 0xb20d: 'blake2b-104',\\n 0xb20e: 'blake2b-112',\\n 0xb20f: 'blake2b-120',\\n 0xb210: 'blake2b-128',\\n 0xb211: 'blake2b-136',\\n 0xb212: 'blake2b-144',\\n 0xb213: 'blake2b-152',\\n 0xb214: 'blake2b-160',\\n 0xb215: 'blake2b-168',\\n 0xb216: 'blake2b-176',\\n 0xb217: 'blake2b-184',\\n 0xb218: 'blake2b-192',\\n 0xb219: 'blake2b-200',\\n 0xb21a: 'blake2b-208',\\n 0xb21b: 'blake2b-216',\\n 0xb21c: 'blake2b-224',\\n 0xb21d: 'blake2b-232',\\n 0xb21e: 'blake2b-240',\\n 0xb21f: 'blake2b-248',\\n 0xb220: 'blake2b-256',\\n 0xb221: 'blake2b-264',\\n 0xb222: 'blake2b-272',\\n 0xb223: 'blake2b-280',\\n 0xb224: 'blake2b-288',\\n 0xb225: 'blake2b-296',\\n 0xb226: 'blake2b-304',\\n 0xb227: 'blake2b-312',\\n 0xb228: 'blake2b-320',\\n 0xb229: 'blake2b-328',\\n 0xb22a: 'blake2b-336',\\n 0xb22b: 'blake2b-344',\\n 0xb22c: 'blake2b-352',\\n 0xb22d: 'blake2b-360',\\n 0xb22e: 'blake2b-368',\\n 0xb22f: 'blake2b-376',\\n 0xb230: 'blake2b-384',\\n 0xb231: 'blake2b-392',\\n 0xb232: 'blake2b-400',\\n 0xb233: 'blake2b-408',\\n 0xb234: 'blake2b-416',\\n 0xb235: 'blake2b-424',\\n 0xb236: 'blake2b-432',\\n 0xb237: 'blake2b-440',\\n 0xb238: 'blake2b-448',\\n 0xb239: 'blake2b-456',\\n 0xb23a: 'blake2b-464',\\n 0xb23b: 'blake2b-472',\\n 0xb23c: 'blake2b-480',\\n 0xb23d: 'blake2b-488',\\n 0xb23e: 'blake2b-496',\\n 0xb23f: 'blake2b-504',\\n 0xb240: 'blake2b-512',\\n 0xb241: 'blake2s-8',\\n 0xb242: 'blake2s-16',\\n 0xb243: 'blake2s-24',\\n 0xb244: 'blake2s-32',\\n 0xb245: 'blake2s-40',\\n 0xb246: 'blake2s-48',\\n 0xb247: 'blake2s-56',\\n 0xb248: 'blake2s-64',\\n 0xb249: 'blake2s-72',\\n 0xb24a: 'blake2s-80',\\n 0xb24b: 'blake2s-88',\\n 0xb24c: 'blake2s-96',\\n 0xb24d: 'blake2s-104',\\n 0xb24e: 'blake2s-112',\\n 0xb24f: 'blake2s-120',\\n 0xb250: 'blake2s-128',\\n 0xb251: 'blake2s-136',\\n 0xb252: 'blake2s-144',\\n 0xb253: 'blake2s-152',\\n 0xb254: 'blake2s-160',\\n 0xb255: 'blake2s-168',\\n 0xb256: 'blake2s-176',\\n 0xb257: 'blake2s-184',\\n 0xb258: 'blake2s-192',\\n 0xb259: 'blake2s-200',\\n 0xb25a: 'blake2s-208',\\n 0xb25b: 'blake2s-216',\\n 0xb25c: 'blake2s-224',\\n 0xb25d: 'blake2s-232',\\n 0xb25e: 'blake2s-240',\\n 0xb25f: 'blake2s-248',\\n 0xb260: 'blake2s-256',\\n\\n // skein\\n 0xb301: 'Skein256-8',\\n 0xb302: 'Skein256-16',\\n 0xb303: 'Skein256-24',\\n 0xb304: 'Skein256-32',\\n 0xb305: 'Skein256-40',\\n 0xb306: 'Skein256-48',\\n 0xb307: 'Skein256-56',\\n 0xb308: 'Skein256-64',\\n 0xb309: 'Skein256-72',\\n 0xb30a: 'Skein256-80',\\n 0xb30b: 'Skein256-88',\\n 0xb30c: 'Skein256-96',\\n 0xb30d: 'Skein256-104',\\n 0xb30e: 'Skein256-112',\\n 0xb30f: 'Skein256-120',\\n 0xb310: 'Skein256-128',\\n 0xb311: 'Skein256-136',\\n 0xb312: 'Skein256-144',\\n 0xb313: 'Skein256-152',\\n 0xb314: 'Skein256-160',\\n 0xb315: 'Skein256-168',\\n 0xb316: 'Skein256-176',\\n 0xb317: 'Skein256-184',\\n 0xb318: 'Skein256-192',\\n 0xb319: 'Skein256-200',\\n 0xb31a: 'Skein256-208',\\n 0xb31b: 'Skein256-216',\\n 0xb31c: 'Skein256-224',\\n 0xb31d: 'Skein256-232',\\n 0xb31e: 'Skein256-240',\\n 0xb31f: 'Skein256-248',\\n 0xb320: 'Skein256-256',\\n 0xb321: 'Skein512-8',\\n 0xb322: 'Skein512-16',\\n 0xb323: 'Skein512-24',\\n 0xb324: 'Skein512-32',\\n 0xb325: 'Skein512-40',\\n 0xb326: 'Skein512-48',\\n 0xb327: 'Skein512-56',\\n 0xb328: 'Skein512-64',\\n 0xb329: 'Skein512-72',\\n 0xb32a: 'Skein512-80',\\n 0xb32b: 'Skein512-88',\\n 0xb32c: 'Skein512-96',\\n 0xb32d: 'Skein512-104',\\n 0xb32e: 'Skein512-112',\\n 0xb32f: 'Skein512-120',\\n 0xb330: 'Skein512-128',\\n 0xb331: 'Skein512-136',\\n 0xb332: 'Skein512-144',\\n 0xb333: 'Skein512-152',\\n 0xb334: 'Skein512-160',\\n 0xb335: 'Skein512-168',\\n 0xb336: 'Skein512-176',\\n 0xb337: 'Skein512-184',\\n 0xb338: 'Skein512-192',\\n 0xb339: 'Skein512-200',\\n 0xb33a: 'Skein512-208',\\n 0xb33b: 'Skein512-216',\\n 0xb33c: 'Skein512-224',\\n 0xb33d: 'Skein512-232',\\n 0xb33e: 'Skein512-240',\\n 0xb33f: 'Skein512-248',\\n 0xb340: 'Skein512-256',\\n 0xb341: 'Skein512-264',\\n 0xb342: 'Skein512-272',\\n 0xb343: 'Skein512-280',\\n 0xb344: 'Skein512-288',\\n 0xb345: 'Skein512-296',\\n 0xb346: 'Skein512-304',\\n 0xb347: 'Skein512-312',\\n 0xb348: 'Skein512-320',\\n 0xb349: 'Skein512-328',\\n 0xb34a: 'Skein512-336',\\n 0xb34b: 'Skein512-344',\\n 0xb34c: 'Skein512-352',\\n 0xb34d: 'Skein512-360',\\n 0xb34e: 'Skein512-368',\\n 0xb34f: 'Skein512-376',\\n 0xb350: 'Skein512-384',\\n 0xb351: 'Skein512-392',\\n 0xb352: 'Skein512-400',\\n 0xb353: 'Skein512-408',\\n 0xb354: 'Skein512-416',\\n 0xb355: 'Skein512-424',\\n 0xb356: 'Skein512-432',\\n 0xb357: 'Skein512-440',\\n 0xb358: 'Skein512-448',\\n 0xb359: 'Skein512-456',\\n 0xb35a: 'Skein512-464',\\n 0xb35b: 'Skein512-472',\\n 0xb35c: 'Skein512-480',\\n 0xb35d: 'Skein512-488',\\n 0xb35e: 'Skein512-496',\\n 0xb35f: 'Skein512-504',\\n 0xb360: 'Skein512-512',\\n 0xb361: 'Skein1024-8',\\n 0xb362: 'Skein1024-16',\\n 0xb363: 'Skein1024-24',\\n 0xb364: 'Skein1024-32',\\n 0xb365: 'Skein1024-40',\\n 0xb366: 'Skein1024-48',\\n 0xb367: 'Skein1024-56',\\n 0xb368: 'Skein1024-64',\\n 0xb369: 'Skein1024-72',\\n 0xb36a: 'Skein1024-80',\\n 0xb36b: 'Skein1024-88',\\n 0xb36c: 'Skein1024-96',\\n 0xb36d: 'Skein1024-104',\\n 0xb36e: 'Skein1024-112',\\n 0xb36f: 'Skein1024-120',\\n 0xb370: 'Skein1024-128',\\n 0xb371: 'Skein1024-136',\\n 0xb372: 'Skein1024-144',\\n 0xb373: 'Skein1024-152',\\n 0xb374: 'Skein1024-160',\\n 0xb375: 'Skein1024-168',\\n 0xb376: 'Skein1024-176',\\n 0xb377: 'Skein1024-184',\\n 0xb378: 'Skein1024-192',\\n 0xb379: 'Skein1024-200',\\n 0xb37a: 'Skein1024-208',\\n 0xb37b: 'Skein1024-216',\\n 0xb37c: 'Skein1024-224',\\n 0xb37d: 'Skein1024-232',\\n 0xb37e: 'Skein1024-240',\\n 0xb37f: 'Skein1024-248',\\n 0xb380: 'Skein1024-256',\\n 0xb381: 'Skein1024-264',\\n 0xb382: 'Skein1024-272',\\n 0xb383: 'Skein1024-280',\\n 0xb384: 'Skein1024-288',\\n 0xb385: 'Skein1024-296',\\n 0xb386: 'Skein1024-304',\\n 0xb387: 'Skein1024-312',\\n 0xb388: 'Skein1024-320',\\n 0xb389: 'Skein1024-328',\\n 0xb38a: 'Skein1024-336',\\n 0xb38b: 'Skein1024-344',\\n 0xb38c: 'Skein1024-352',\\n 0xb38d: 'Skein1024-360',\\n 0xb38e: 'Skein1024-368',\\n 0xb38f: 'Skein1024-376',\\n 0xb390: 'Skein1024-384',\\n 0xb391: 'Skein1024-392',\\n 0xb392: 'Skein1024-400',\\n 0xb393: 'Skein1024-408',\\n 0xb394: 'Skein1024-416',\\n 0xb395: 'Skein1024-424',\\n 0xb396: 'Skein1024-432',\\n 0xb397: 'Skein1024-440',\\n 0xb398: 'Skein1024-448',\\n 0xb399: 'Skein1024-456',\\n 0xb39a: 'Skein1024-464',\\n 0xb39b: 'Skein1024-472',\\n 0xb39c: 'Skein1024-480',\\n 0xb39d: 'Skein1024-488',\\n 0xb39e: 'Skein1024-496',\\n 0xb39f: 'Skein1024-504',\\n 0xb3a0: 'Skein1024-512',\\n 0xb3a1: 'Skein1024-520',\\n 0xb3a2: 'Skein1024-528',\\n 0xb3a3: 'Skein1024-536',\\n 0xb3a4: 'Skein1024-544',\\n 0xb3a5: 'Skein1024-552',\\n 0xb3a6: 'Skein1024-560',\\n 0xb3a7: 'Skein1024-568',\\n 0xb3a8: 'Skein1024-576',\\n 0xb3a9: 'Skein1024-584',\\n 0xb3aa: 'Skein1024-592',\\n 0xb3ab: 'Skein1024-600',\\n 0xb3ac: 'Skein1024-608',\\n 0xb3ad: 'Skein1024-616',\\n 0xb3ae: 'Skein1024-624',\\n 0xb3af: 'Skein1024-632',\\n 0xb3b0: 'Skein1024-640',\\n 0xb3b1: 'Skein1024-648',\\n 0xb3b2: 'Skein1024-656',\\n 0xb3b3: 'Skein1024-664',\\n 0xb3b4: 'Skein1024-672',\\n 0xb3b5: 'Skein1024-680',\\n 0xb3b6: 'Skein1024-688',\\n 0xb3b7: 'Skein1024-696',\\n 0xb3b8: 'Skein1024-704',\\n 0xb3b9: 'Skein1024-712',\\n 0xb3ba: 'Skein1024-720',\\n 0xb3bb: 'Skein1024-728',\\n 0xb3bc: 'Skein1024-736',\\n 0xb3bd: 'Skein1024-744',\\n 0xb3be: 'Skein1024-752',\\n 0xb3bf: 'Skein1024-760',\\n 0xb3c0: 'Skein1024-768',\\n 0xb3c1: 'Skein1024-776',\\n 0xb3c2: 'Skein1024-784',\\n 0xb3c3: 'Skein1024-792',\\n 0xb3c4: 'Skein1024-800',\\n 0xb3c5: 'Skein1024-808',\\n 0xb3c6: 'Skein1024-816',\\n 0xb3c7: 'Skein1024-824',\\n 0xb3c8: 'Skein1024-832',\\n 0xb3c9: 'Skein1024-840',\\n 0xb3ca: 'Skein1024-848',\\n 0xb3cb: 'Skein1024-856',\\n 0xb3cc: 'Skein1024-864',\\n 0xb3cd: 'Skein1024-872',\\n 0xb3ce: 'Skein1024-880',\\n 0xb3cf: 'Skein1024-888',\\n 0xb3d0: 'Skein1024-896',\\n 0xb3d1: 'Skein1024-904',\\n 0xb3d2: 'Skein1024-912',\\n 0xb3d3: 'Skein1024-920',\\n 0xb3d4: 'Skein1024-928',\\n 0xb3d5: 'Skein1024-936',\\n 0xb3d6: 'Skein1024-944',\\n 0xb3d7: 'Skein1024-952',\\n 0xb3d8: 'Skein1024-960',\\n 0xb3d9: 'Skein1024-968',\\n 0xb3da: 'Skein1024-976',\\n 0xb3db: 'Skein1024-984',\\n 0xb3dc: 'Skein1024-992',\\n 0xb3dd: 'Skein1024-1000',\\n 0xb3de: 'Skein1024-1008',\\n 0xb3df: 'Skein1024-1016',\\n 0xb3e0: 'Skein1024-1024'\\n})\\n\\nexports.defaultLengths = Object.freeze({\\n 0x11: 20,\\n 0x12: 32,\\n 0x13: 64,\\n 0x56: 32,\\n 0x17: 28,\\n 0x16: 32,\\n 0x15: 48,\\n 0x14: 64,\\n 0x18: 32,\\n 0x19: 64,\\n 0x1A: 28,\\n 0x1B: 32,\\n 0x1C: 48,\\n 0x1D: 64,\\n 0x22: 32,\\n\\n 0xb201: 0x01,\\n 0xb202: 0x02,\\n 0xb203: 0x03,\\n 0xb204: 0x04,\\n 0xb205: 0x05,\\n 0xb206: 0x06,\\n 0xb207: 0x07,\\n 0xb208: 0x08,\\n 0xb209: 0x09,\\n 0xb20a: 0x0a,\\n 0xb20b: 0x0b,\\n 0xb20c: 0x0c,\\n 0xb20d: 0x0d,\\n 0xb20e: 0x0e,\\n 0xb20f: 0x0f,\\n 0xb210: 0x10,\\n 0xb211: 0x11,\\n 0xb212: 0x12,\\n 0xb213: 0x13,\\n 0xb214: 0x14,\\n 0xb215: 0x15,\\n 0xb216: 0x16,\\n 0xb217: 0x17,\\n 0xb218: 0x18,\\n 0xb219: 0x19,\\n 0xb21a: 0x1a,\\n 0xb21b: 0x1b,\\n 0xb21c: 0x1c,\\n 0xb21d: 0x1d,\\n 0xb21e: 0x1e,\\n 0xb21f: 0x1f,\\n 0xb220: 0x20,\\n 0xb221: 0x21,\\n 0xb222: 0x22,\\n 0xb223: 0x23,\\n 0xb224: 0x24,\\n 0xb225: 0x25,\\n 0xb226: 0x26,\\n 0xb227: 0x27,\\n 0xb228: 0x28,\\n 0xb229: 0x29,\\n 0xb22a: 0x2a,\\n 0xb22b: 0x2b,\\n 0xb22c: 0x2c,\\n 0xb22d: 0x2d,\\n 0xb22e: 0x2e,\\n 0xb22f: 0x2f,\\n 0xb230: 0x30,\\n 0xb231: 0x31,\\n 0xb232: 0x32,\\n 0xb233: 0x33,\\n 0xb234: 0x34,\\n 0xb235: 0x35,\\n 0xb236: 0x36,\\n 0xb237: 0x37,\\n 0xb238: 0x38,\\n 0xb239: 0x39,\\n 0xb23a: 0x3a,\\n 0xb23b: 0x3b,\\n 0xb23c: 0x3c,\\n 0xb23d: 0x3d,\\n 0xb23e: 0x3e,\\n 0xb23f: 0x3f,\\n 0xb240: 0x40,\\n 0xb241: 0x01,\\n 0xb242: 0x02,\\n 0xb243: 0x03,\\n 0xb244: 0x04,\\n 0xb245: 0x05,\\n 0xb246: 0x06,\\n 0xb247: 0x07,\\n 0xb248: 0x08,\\n 0xb249: 0x09,\\n 0xb24a: 0x0a,\\n 0xb24b: 0x0b,\\n 0xb24c: 0x0c,\\n 0xb24d: 0x0d,\\n 0xb24e: 0x0e,\\n 0xb24f: 0x0f,\\n 0xb250: 0x10,\\n 0xb251: 0x11,\\n 0xb252: 0x12,\\n 0xb253: 0x13,\\n 0xb254: 0x14,\\n 0xb255: 0x15,\\n 0xb256: 0x16,\\n 0xb257: 0x17,\\n 0xb258: 0x18,\\n 0xb259: 0x19,\\n 0xb25a: 0x1a,\\n 0xb25b: 0x1b,\\n 0xb25c: 0x1c,\\n 0xb25d: 0x1d,\\n 0xb25e: 0x1e,\\n 0xb25f: 0x1f,\\n 0xb260: 0x20,\\n 0xb301: 0x01,\\n 0xb302: 0x02,\\n 0xb303: 0x03,\\n 0xb304: 0x04,\\n 0xb305: 0x05,\\n 0xb306: 0x06,\\n 0xb307: 0x07,\\n 0xb308: 0x08,\\n 0xb309: 0x09,\\n 0xb30a: 0x0a,\\n 0xb30b: 0x0b,\\n 0xb30c: 0x0c,\\n 0xb30d: 0x0d,\\n 0xb30e: 0x0e,\\n 0xb30f: 0x0f,\\n 0xb310: 0x10,\\n 0xb311: 0x11,\\n 0xb312: 0x12,\\n 0xb313: 0x13,\\n 0xb314: 0x14,\\n 0xb315: 0x15,\\n 0xb316: 0x16,\\n 0xb317: 0x17,\\n 0xb318: 0x18,\\n 0xb319: 0x19,\\n 0xb31a: 0x1a,\\n 0xb31b: 0x1b,\\n 0xb31c: 0x1c,\\n 0xb31d: 0x1d,\\n 0xb31e: 0x1e,\\n 0xb31f: 0x1f,\\n 0xb320: 0x20,\\n 0xb321: 0x01,\\n 0xb322: 0x02,\\n 0xb323: 0x03,\\n 0xb324: 0x04,\\n 0xb325: 0x05,\\n 0xb326: 0x06,\\n 0xb327: 0x07,\\n 0xb328: 0x08,\\n 0xb329: 0x09,\\n 0xb32a: 0x0a,\\n 0xb32b: 0x0b,\\n 0xb32c: 0x0c,\\n 0xb32d: 0x0d,\\n 0xb32e: 0x0e,\\n 0xb32f: 0x0f,\\n 0xb330: 0x10,\\n 0xb331: 0x11,\\n 0xb332: 0x12,\\n 0xb333: 0x13,\\n 0xb334: 0x14,\\n 0xb335: 0x15,\\n 0xb336: 0x16,\\n 0xb337: 0x17,\\n 0xb338: 0x18,\\n 0xb339: 0x19,\\n 0xb33a: 0x1a,\\n 0xb33b: 0x1b,\\n 0xb33c: 0x1c,\\n 0xb33d: 0x1d,\\n 0xb33e: 0x1e,\\n 0xb33f: 0x1f,\\n 0xb340: 0x20,\\n 0xb341: 0x21,\\n 0xb342: 0x22,\\n 0xb343: 0x23,\\n 0xb344: 0x24,\\n 0xb345: 0x25,\\n 0xb346: 0x26,\\n 0xb347: 0x27,\\n 0xb348: 0x28,\\n 0xb349: 0x29,\\n 0xb34a: 0x2a,\\n 0xb34b: 0x2b,\\n 0xb34c: 0x2c,\\n 0xb34d: 0x2d,\\n 0xb34e: 0x2e,\\n 0xb34f: 0x2f,\\n 0xb350: 0x30,\\n 0xb351: 0x31,\\n 0xb352: 0x32,\\n 0xb353: 0x33,\\n 0xb354: 0x34,\\n 0xb355: 0x35,\\n 0xb356: 0x36,\\n 0xb357: 0x37,\\n 0xb358: 0x38,\\n 0xb359: 0x39,\\n 0xb35a: 0x3a,\\n 0xb35b: 0x3b,\\n 0xb35c: 0x3c,\\n 0xb35d: 0x3d,\\n 0xb35e: 0x3e,\\n 0xb35f: 0x3f,\\n 0xb360: 0x40,\\n 0xb361: 0x01,\\n 0xb362: 0x02,\\n 0xb363: 0x03,\\n 0xb364: 0x04,\\n 0xb365: 0x05,\\n 0xb366: 0x06,\\n 0xb367: 0x07,\\n 0xb368: 0x08,\\n 0xb369: 0x09,\\n 0xb36a: 0x0a,\\n 0xb36b: 0x0b,\\n 0xb36c: 0x0c,\\n 0xb36d: 0x0d,\\n 0xb36e: 0x0e,\\n 0xb36f: 0x0f,\\n 0xb370: 0x10,\\n 0xb371: 0x11,\\n 0xb372: 0x12,\\n 0xb373: 0x13,\\n 0xb374: 0x14,\\n 0xb375: 0x15,\\n 0xb376: 0x16,\\n 0xb377: 0x17,\\n 0xb378: 0x18,\\n 0xb379: 0x19,\\n 0xb37a: 0x1a,\\n 0xb37b: 0x1b,\\n 0xb37c: 0x1c,\\n 0xb37d: 0x1d,\\n 0xb37e: 0x1e,\\n 0xb37f: 0x1f,\\n 0xb380: 0x20,\\n 0xb381: 0x21,\\n 0xb382: 0x22,\\n 0xb383: 0x23,\\n 0xb384: 0x24,\\n 0xb385: 0x25,\\n 0xb386: 0x26,\\n 0xb387: 0x27,\\n 0xb388: 0x28,\\n 0xb389: 0x29,\\n 0xb38a: 0x2a,\\n 0xb38b: 0x2b,\\n 0xb38c: 0x2c,\\n 0xb38d: 0x2d,\\n 0xb38e: 0x2e,\\n 0xb38f: 0x2f,\\n 0xb390: 0x30,\\n 0xb391: 0x31,\\n 0xb392: 0x32,\\n 0xb393: 0x33,\\n 0xb394: 0x34,\\n 0xb395: 0x35,\\n 0xb396: 0x36,\\n 0xb397: 0x37,\\n 0xb398: 0x38,\\n 0xb399: 0x39,\\n 0xb39a: 0x3a,\\n 0xb39b: 0x3b,\\n 0xb39c: 0x3c,\\n 0xb39d: 0x3d,\\n 0xb39e: 0x3e,\\n 0xb39f: 0x3f,\\n 0xb3a0: 0x40,\\n 0xb3a1: 0x41,\\n 0xb3a2: 0x42,\\n 0xb3a3: 0x43,\\n 0xb3a4: 0x44,\\n 0xb3a5: 0x45,\\n 0xb3a6: 0x46,\\n 0xb3a7: 0x47,\\n 0xb3a8: 0x48,\\n 0xb3a9: 0x49,\\n 0xb3aa: 0x4a,\\n 0xb3ab: 0x4b,\\n 0xb3ac: 0x4c,\\n 0xb3ad: 0x4d,\\n 0xb3ae: 0x4e,\\n 0xb3af: 0x4f,\\n 0xb3b0: 0x50,\\n 0xb3b1: 0x51,\\n 0xb3b2: 0x52,\\n 0xb3b3: 0x53,\\n 0xb3b4: 0x54,\\n 0xb3b5: 0x55,\\n 0xb3b6: 0x56,\\n 0xb3b7: 0x57,\\n 0xb3b8: 0x58,\\n 0xb3b9: 0x59,\\n 0xb3ba: 0x5a,\\n 0xb3bb: 0x5b,\\n 0xb3bc: 0x5c,\\n 0xb3bd: 0x5d,\\n 0xb3be: 0x5e,\\n 0xb3bf: 0x5f,\\n 0xb3c0: 0x60,\\n 0xb3c1: 0x61,\\n 0xb3c2: 0x62,\\n 0xb3c3: 0x63,\\n 0xb3c4: 0x64,\\n 0xb3c5: 0x65,\\n 0xb3c6: 0x66,\\n 0xb3c7: 0x67,\\n 0xb3c8: 0x68,\\n 0xb3c9: 0x69,\\n 0xb3ca: 0x6a,\\n 0xb3cb: 0x6b,\\n 0xb3cc: 0x6c,\\n 0xb3cd: 0x6d,\\n 0xb3ce: 0x6e,\\n 0xb3cf: 0x6f,\\n 0xb3d0: 0x70,\\n 0xb3d1: 0x71,\\n 0xb3d2: 0x72,\\n 0xb3d3: 0x73,\\n 0xb3d4: 0x74,\\n 0xb3d5: 0x75,\\n 0xb3d6: 0x76,\\n 0xb3d7: 0x77,\\n 0xb3d8: 0x78,\\n 0xb3d9: 0x79,\\n 0xb3da: 0x7a,\\n 0xb3db: 0x7b,\\n 0xb3dc: 0x7c,\\n 0xb3dd: 0x7d,\\n 0xb3de: 0x7e,\\n 0xb3df: 0x7f,\\n 0xb3e0: 0x80\\n})\\n\\n\\n//# sourceURL=webpack:///./node_modules/multihashes/src/constants.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/multihashes/src/index.js\":\n/*!***********************************************!*\\\n !*** ./node_modules/multihashes/src/index.js ***!\n \\***********************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {/**\\n * Multihash implementation in JavaScript.\\n *\\n * @module multihash\\n */\\n\\n\\nconst bs58 = __webpack_require__(/*! bs58 */ \\\"./node_modules/bs58/index.js\\\")\\n\\nconst cs = __webpack_require__(/*! ./constants */ \\\"./node_modules/multihashes/src/constants.js\\\")\\n\\nexports.names = cs.names\\nexports.codes = cs.codes\\nexports.defaultLengths = cs.defaultLengths\\n\\nconst varint = __webpack_require__(/*! varint */ \\\"./node_modules/varint/index.js\\\")\\n\\n/**\\n * Convert the given multihash to a hex encoded string.\\n *\\n * @param {Buffer} hash\\n * @returns {string}\\n */\\nexports.toHexString = function toHexString (hash) {\\n if (!Buffer.isBuffer(hash)) {\\n throw new Error('must be passed a buffer')\\n }\\n\\n return hash.toString('hex')\\n}\\n\\n/**\\n * Convert the given hex encoded string to a multihash.\\n *\\n * @param {string} hash\\n * @returns {Buffer}\\n */\\nexports.fromHexString = function fromHexString (hash) {\\n return Buffer.from(hash, 'hex')\\n}\\n\\n/**\\n * Convert the given multihash to a base58 encoded string.\\n *\\n * @param {Buffer} hash\\n * @returns {string}\\n */\\nexports.toB58String = function toB58String (hash) {\\n if (!Buffer.isBuffer(hash)) {\\n throw new Error('must be passed a buffer')\\n }\\n\\n return bs58.encode(hash)\\n}\\n\\n/**\\n * Convert the given base58 encoded string to a multihash.\\n *\\n * @param {string|Buffer} hash\\n * @returns {Buffer}\\n */\\nexports.fromB58String = function fromB58String (hash) {\\n let encoded = hash\\n if (Buffer.isBuffer(hash)) {\\n encoded = hash.toString()\\n }\\n\\n return Buffer.from(bs58.decode(encoded))\\n}\\n\\n/**\\n * Decode a hash from the given multihash.\\n *\\n * @param {Buffer} buf\\n * @returns {{code: number, name: string, length: number, digest: Buffer}} result\\n */\\nexports.decode = function decode (buf) {\\n if (!(Buffer.isBuffer(buf))) {\\n throw new Error('multihash must be a Buffer')\\n }\\n\\n if (buf.length < 3) {\\n throw new Error('multihash too short. must be > 3 bytes.')\\n }\\n\\n let code = varint.decode(buf)\\n if (!exports.isValidCode(code)) {\\n throw new Error(`multihash unknown function code: 0x${code.toString(16)}`)\\n }\\n buf = buf.slice(varint.decode.bytes)\\n\\n let len = varint.decode(buf)\\n if (len < 1) {\\n throw new Error(`multihash invalid length: 0x${len.toString(16)}`)\\n }\\n buf = buf.slice(varint.decode.bytes)\\n\\n if (buf.length !== len) {\\n throw new Error(`multihash length inconsistent: 0x${buf.toString('hex')}`)\\n }\\n\\n return {\\n code: code,\\n name: cs.codes[code],\\n length: len,\\n digest: buf\\n }\\n}\\n\\n/**\\n * Encode a hash digest along with the specified function code.\\n *\\n * > **Note:** the length is derived from the length of the digest itself.\\n *\\n * @param {Buffer} digest\\n * @param {string|number} code\\n * @param {number} [length]\\n * @returns {Buffer}\\n */\\nexports.encode = function encode (digest, code, length) {\\n if (!digest || !code) {\\n throw new Error('multihash encode requires at least two args: digest, code')\\n }\\n\\n // ensure it's a hashfunction code.\\n const hashfn = exports.coerceCode(code)\\n\\n if (!(Buffer.isBuffer(digest))) {\\n throw new Error('digest should be a Buffer')\\n }\\n\\n if (length == null) {\\n length = digest.length\\n }\\n\\n if (length && digest.length !== length) {\\n throw new Error('digest length should be equal to specified length.')\\n }\\n\\n return Buffer.concat([\\n Buffer.from(varint.encode(hashfn)),\\n Buffer.from(varint.encode(length)),\\n digest\\n ])\\n}\\n\\n/**\\n * Converts a hash function name into the matching code.\\n * If passed a number it will return the number if it's a valid code.\\n * @param {string|number} name\\n * @returns {number}\\n */\\nexports.coerceCode = function coerceCode (name) {\\n let code = name\\n\\n if (typeof name === 'string') {\\n if (!cs.names[name]) {\\n throw new Error(`Unrecognized hash function named: ${name}`)\\n }\\n code = cs.names[name]\\n }\\n\\n if (typeof code !== 'number') {\\n throw new Error(`Hash function code should be a number. Got: ${code}`)\\n }\\n\\n if (!cs.codes[code] && !exports.isAppCode(code)) {\\n throw new Error(`Unrecognized function code: ${code}`)\\n }\\n\\n return code\\n}\\n\\n/**\\n * Checks wether a code is part of the app range\\n *\\n * @param {number} code\\n * @returns {boolean}\\n */\\nexports.isAppCode = function appCode (code) {\\n return code > 0 && code < 0x10\\n}\\n\\n/**\\n * Checks whether a multihash code is valid.\\n *\\n * @param {number} code\\n * @returns {boolean}\\n */\\nexports.isValidCode = function validCode (code) {\\n if (exports.isAppCode(code)) {\\n return true\\n }\\n\\n if (cs.codes[code]) {\\n return true\\n }\\n\\n return false\\n}\\n\\n/**\\n * Check if the given buffer is a valid multihash. Throws an error if it is not valid.\\n *\\n * @param {Buffer} multihash\\n * @returns {undefined}\\n * @throws {Error}\\n */\\nfunction validate (multihash) {\\n exports.decode(multihash) // throws if bad.\\n}\\nexports.validate = validate\\n\\n/**\\n * Returns a prefix from a valid multihash. Throws an error if it is not valid.\\n *\\n * @param {Buffer} multihash\\n * @returns {undefined}\\n * @throws {Error}\\n */\\nexports.prefix = function prefix (multihash) {\\n validate(multihash)\\n\\n return multihash.slice(0, 2)\\n}\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/multihashes/src/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/muport-did-resolver/lib/register.js\":\n/*!**********************************************************!*\\\n !*** ./node_modules/muport-did-resolver/lib/register.js ***!\n \\**********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ \\\"./node_modules/@babel/runtime/helpers/interopRequireDefault.js\\\");\\n\\nvar _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ \\\"./node_modules/@babel/runtime/regenerator/index.js\\\"));\\n\\nvar _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \\\"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\\\"));\\n\\nvar _didResolver = __webpack_require__(/*! did-resolver */ \\\"./node_modules/did-resolver/lib/resolver.js\\\");\\n\\nvar _nodeFetch = _interopRequireDefault(__webpack_require__(/*! node-fetch */ \\\"./node_modules/node-fetch/browser.js\\\"));\\n\\nvar INFURA = 'https://ipfs.infura.io/ipfs/';\\n\\nfunction register(ipfs) {\\n var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\\n\\n function resolve(_x, _x2) {\\n return _resolve.apply(this, arguments);\\n }\\n\\n function _resolve() {\\n _resolve = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee(did, parsed) {\\n var doc;\\n return _regenerator[\\\"default\\\"].wrap(function _callee$(_context) {\\n while (1) {\\n switch (_context.prev = _context.next) {\\n case 0:\\n _context.next = 2;\\n return fetchMuPortDoc(ipfs, parsed.id);\\n\\n case 2:\\n doc = _context.sent;\\n return _context.abrupt(\\\"return\\\", wrapDocument(did, doc));\\n\\n case 4:\\n case \\\"end\\\":\\n return _context.stop();\\n }\\n }\\n }, _callee);\\n }));\\n return _resolve.apply(this, arguments);\\n }\\n\\n (0, _didResolver.registerMethod)('muport', resolve);\\n}\\n\\nfunction fetchMuPortDoc(_x3, _x4) {\\n return _fetchMuPortDoc.apply(this, arguments);\\n}\\n\\nfunction _fetchMuPortDoc() {\\n _fetchMuPortDoc = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee2(ipfs, ipfsHash) {\\n var doc;\\n return _regenerator[\\\"default\\\"].wrap(function _callee2$(_context2) {\\n while (1) {\\n switch (_context2.prev = _context2.next) {\\n case 0:\\n _context2.prev = 0;\\n\\n if (!ipfs) {\\n _context2.next = 9;\\n break;\\n }\\n\\n _context2.t1 = JSON;\\n _context2.next = 5;\\n return ipfs.cat(ipfsHash);\\n\\n case 5:\\n _context2.t2 = _context2.sent;\\n _context2.t0 = _context2.t1.parse.call(_context2.t1, _context2.t2);\\n _context2.next = 12;\\n break;\\n\\n case 9:\\n _context2.next = 11;\\n return httpFetch(ipfsHash);\\n\\n case 11:\\n _context2.t0 = _context2.sent;\\n\\n case 12:\\n doc = _context2.t0;\\n _context2.next = 17;\\n break;\\n\\n case 15:\\n _context2.prev = 15;\\n _context2.t3 = _context2[\\\"catch\\\"](0);\\n\\n case 17:\\n if (!(!doc || doc.version !== 1 || !doc.signingKey || !doc.managementKey || !doc.asymEncryptionKey)) {\\n _context2.next = 27;\\n break;\\n }\\n\\n _context2.prev = 18;\\n\\n if (!ipfs) {\\n _context2.next = 22;\\n break;\\n }\\n\\n _context2.next = 22;\\n return ipfs.pin.rm(ipfsHash);\\n\\n case 22:\\n _context2.next = 26;\\n break;\\n\\n case 24:\\n _context2.prev = 24;\\n _context2.t4 = _context2[\\\"catch\\\"](18);\\n\\n case 26:\\n throw new Error('Invalid muport did');\\n\\n case 27:\\n return _context2.abrupt(\\\"return\\\", doc);\\n\\n case 28:\\n case \\\"end\\\":\\n return _context2.stop();\\n }\\n }\\n }, _callee2, null, [[0, 15], [18, 24]]);\\n }));\\n return _fetchMuPortDoc.apply(this, arguments);\\n}\\n\\nfunction httpFetch(_x5) {\\n return _httpFetch.apply(this, arguments);\\n}\\n\\nfunction _httpFetch() {\\n _httpFetch = (0, _asyncToGenerator2[\\\"default\\\"])(\\n /*#__PURE__*/\\n _regenerator[\\\"default\\\"].mark(function _callee3(cid) {\\n return _regenerator[\\\"default\\\"].wrap(function _callee3$(_context3) {\\n while (1) {\\n switch (_context3.prev = _context3.next) {\\n case 0:\\n _context3.next = 2;\\n return (0, _nodeFetch[\\\"default\\\"])(INFURA + cid);\\n\\n case 2:\\n return _context3.abrupt(\\\"return\\\", _context3.sent.json());\\n\\n case 3:\\n case \\\"end\\\":\\n return _context3.stop();\\n }\\n }\\n }, _callee3);\\n }));\\n return _httpFetch.apply(this, arguments);\\n}\\n\\nfunction wrapDocument(did, muportDocument) {\\n var doc = {\\n \\\"@context\\\": \\\"https://w3id.org/did/v1\\\",\\n \\\"id\\\": did,\\n \\\"publicKey\\\": [{\\n \\\"id\\\": did + \\\"#signingKey\\\",\\n \\\"type\\\": \\\"Secp256k1VerificationKey2018\\\",\\n \\\"owner\\\": did,\\n \\\"publicKeyHex\\\": muportDocument.signingKey\\n }, {\\n \\\"id\\\": did + \\\"#managementKey\\\",\\n \\\"type\\\": \\\"Secp256k1VerificationKey2018\\\",\\n \\\"owner\\\": did\\n }, {\\n \\\"id\\\": did + \\\"#encryptionKey\\\",\\n \\\"type\\\": \\\"Curve25519EncryptionPublicKey\\\",\\n \\\"owner\\\": did,\\n \\\"publicKeyBase64\\\": muportDocument.asymEncryptionKey\\n }],\\n \\\"authentication\\\": [{\\n \\\"type\\\": \\\"Secp256k1SignatureAuthentication2018\\\",\\n \\\"publicKey\\\": did + \\\"#signingKey\\\"\\n }],\\n \\\"muportData\\\": {}\\n };\\n\\n if (muportDocument.managementKey.length === 42) {\\n doc.publicKey[1].ethereumAddress = muportDocument.managementKey;\\n } else {\\n doc.publicKey[1].publicKeyHex = muportDocument.managementKey;\\n }\\n\\n if (muportDocument.publicProfile) doc.uportProfile = muportDocument.publicProfile;\\n if (muportDocument.symEncryptedData) doc.muportData.symEncryptedData = muportDocument.symEncryptedData;\\n if (muportDocument.recoveryNetwork) doc.muportData.recoveryNetwork = muportDocument.recoveryNetwork;\\n return doc;\\n}\\n\\nmodule.exports = register;\\n\\n//# sourceURL=webpack:///./node_modules/muport-did-resolver/lib/register.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/murmurhash3js-revisited/index.js\":\n/*!*******************************************************!*\\\n !*** ./node_modules/murmurhash3js-revisited/index.js ***!\n \\*******************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"module.exports = __webpack_require__(/*! ./lib/murmurHash3js */ \\\"./node_modules/murmurhash3js-revisited/lib/murmurHash3js.js\\\");\\n\\n\\n//# sourceURL=webpack:///./node_modules/murmurhash3js-revisited/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/murmurhash3js-revisited/lib/murmurHash3js.js\":\n/*!*******************************************************************!*\\\n !*** ./node_modules/murmurhash3js-revisited/lib/murmurHash3js.js ***!\n \\*******************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"/* jshint -W086: true */\\n// +----------------------------------------------------------------------+\\n// | murmurHash3js.js v3.0.1 // https://github.com/pid/murmurHash3js\\n// | A javascript implementation of MurmurHash3's x86 hashing algorithms. |\\n// |----------------------------------------------------------------------|\\n// | Copyright (c) 2012-2015 Karan Lyons |\\n// | https://github.com/karanlyons/murmurHash3.js/blob/c1778f75792abef7bdd74bc85d2d4e1a3d25cfe9/murmurHash3.js |\\n// | Freely distributable under the MIT license. |\\n// +----------------------------------------------------------------------+\\n\\n;(function (root, undefined) {\\n 'use strict';\\n\\n // Create a local object that'll be exported or referenced globally.\\n var library = {\\n 'version': '3.0.0',\\n 'x86': {},\\n 'x64': {},\\n 'inputValidation': true\\n };\\n\\n // PRIVATE FUNCTIONS\\n // -----------------\\n\\n function _validBytes(bytes) {\\n // check the input is an array or a typed array\\n if (!Array.isArray(bytes) && !ArrayBuffer.isView(bytes)) {\\n return false;\\n }\\n\\n // check all bytes are actually bytes\\n for (var i = 0; i < bytes.length; i++) {\\n if (!Number.isInteger(bytes[i]) || bytes[i] < 0 || bytes[i] > 255) {\\n return false;\\n }\\n }\\n return true;\\n }\\n\\n function _x86Multiply(m, n) {\\n //\\n // Given two 32bit ints, returns the two multiplied together as a\\n // 32bit int.\\n //\\n\\n return ((m & 0xffff) * n) + ((((m >>> 16) * n) & 0xffff) << 16);\\n }\\n\\n function _x86Rotl(m, n) {\\n //\\n // Given a 32bit int and an int representing a number of bit positions,\\n // returns the 32bit int rotated left by that number of positions.\\n //\\n\\n return (m << n) | (m >>> (32 - n));\\n }\\n\\n function _x86Fmix(h) {\\n //\\n // Given a block, returns murmurHash3's final x86 mix of that block.\\n //\\n\\n h ^= h >>> 16;\\n h = _x86Multiply(h, 0x85ebca6b);\\n h ^= h >>> 13;\\n h = _x86Multiply(h, 0xc2b2ae35);\\n h ^= h >>> 16;\\n\\n return h;\\n }\\n\\n function _x64Add(m, n) {\\n //\\n // Given two 64bit ints (as an array of two 32bit ints) returns the two\\n // added together as a 64bit int (as an array of two 32bit ints).\\n //\\n\\n m = [m[0] >>> 16, m[0] & 0xffff, m[1] >>> 16, m[1] & 0xffff];\\n n = [n[0] >>> 16, n[0] & 0xffff, n[1] >>> 16, n[1] & 0xffff];\\n var o = [0, 0, 0, 0];\\n\\n o[3] += m[3] + n[3];\\n o[2] += o[3] >>> 16;\\n o[3] &= 0xffff;\\n\\n o[2] += m[2] + n[2];\\n o[1] += o[2] >>> 16;\\n o[2] &= 0xffff;\\n\\n o[1] += m[1] + n[1];\\n o[0] += o[1] >>> 16;\\n o[1] &= 0xffff;\\n\\n o[0] += m[0] + n[0];\\n o[0] &= 0xffff;\\n\\n return [(o[0] << 16) | o[1], (o[2] << 16) | o[3]];\\n }\\n\\n function _x64Multiply(m, n) {\\n //\\n // Given two 64bit ints (as an array of two 32bit ints) returns the two\\n // multiplied together as a 64bit int (as an array of two 32bit ints).\\n //\\n\\n m = [m[0] >>> 16, m[0] & 0xffff, m[1] >>> 16, m[1] & 0xffff];\\n n = [n[0] >>> 16, n[0] & 0xffff, n[1] >>> 16, n[1] & 0xffff];\\n var o = [0, 0, 0, 0];\\n\\n o[3] += m[3] * n[3];\\n o[2] += o[3] >>> 16;\\n o[3] &= 0xffff;\\n\\n o[2] += m[2] * n[3];\\n o[1] += o[2] >>> 16;\\n o[2] &= 0xffff;\\n\\n o[2] += m[3] * n[2];\\n o[1] += o[2] >>> 16;\\n o[2] &= 0xffff;\\n\\n o[1] += m[1] * n[3];\\n o[0] += o[1] >>> 16;\\n o[1] &= 0xffff;\\n\\n o[1] += m[2] * n[2];\\n o[0] += o[1] >>> 16;\\n o[1] &= 0xffff;\\n\\n o[1] += m[3] * n[1];\\n o[0] += o[1] >>> 16;\\n o[1] &= 0xffff;\\n\\n o[0] += (m[0] * n[3]) + (m[1] * n[2]) + (m[2] * n[1]) + (m[3] * n[0]);\\n o[0] &= 0xffff;\\n\\n return [(o[0] << 16) | o[1], (o[2] << 16) | o[3]];\\n }\\n\\n function _x64Rotl(m, n) {\\n //\\n // Given a 64bit int (as an array of two 32bit ints) and an int\\n // representing a number of bit positions, returns the 64bit int (as an\\n // array of two 32bit ints) rotated left by that number of positions.\\n //\\n\\n n %= 64;\\n\\n if (n === 32) {\\n return [m[1], m[0]];\\n } else if (n < 32) {\\n return [(m[0] << n) | (m[1] >>> (32 - n)), (m[1] << n) | (m[0] >>> (32 - n))];\\n } else {\\n n -= 32;\\n return [(m[1] << n) | (m[0] >>> (32 - n)), (m[0] << n) | (m[1] >>> (32 - n))];\\n }\\n }\\n\\n function _x64LeftShift(m, n) {\\n //\\n // Given a 64bit int (as an array of two 32bit ints) and an int\\n // representing a number of bit positions, returns the 64bit int (as an\\n // array of two 32bit ints) shifted left by that number of positions.\\n //\\n\\n n %= 64;\\n\\n if (n === 0) {\\n return m;\\n } else if (n < 32) {\\n return [(m[0] << n) | (m[1] >>> (32 - n)), m[1] << n];\\n } else {\\n return [m[1] << (n - 32), 0];\\n }\\n }\\n\\n function _x64Xor(m, n) {\\n //\\n // Given two 64bit ints (as an array of two 32bit ints) returns the two\\n // xored together as a 64bit int (as an array of two 32bit ints).\\n //\\n\\n return [m[0] ^ n[0], m[1] ^ n[1]];\\n }\\n\\n function _x64Fmix(h) {\\n //\\n // Given a block, returns murmurHash3's final x64 mix of that block.\\n // (`[0, h[0] >>> 1]` is a 33 bit unsigned right shift. This is the\\n // only place where we need to right shift 64bit ints.)\\n //\\n\\n h = _x64Xor(h, [0, h[0] >>> 1]);\\n h = _x64Multiply(h, [0xff51afd7, 0xed558ccd]);\\n h = _x64Xor(h, [0, h[0] >>> 1]);\\n h = _x64Multiply(h, [0xc4ceb9fe, 0x1a85ec53]);\\n h = _x64Xor(h, [0, h[0] >>> 1]);\\n\\n return h;\\n }\\n\\n // PUBLIC FUNCTIONS\\n // ----------------\\n\\n library.x86.hash32 = function (bytes, seed) {\\n //\\n // Given a string and an optional seed as an int, returns a 32 bit hash\\n // using the x86 flavor of MurmurHash3, as an unsigned int.\\n //\\n if (library.inputValidation && !_validBytes(bytes)) {\\n return undefined;\\n }\\n seed = seed || 0;\\n\\n var remainder = bytes.length % 4;\\n var blocks = bytes.length - remainder;\\n\\n var h1 = seed;\\n\\n var k1 = 0;\\n\\n var c1 = 0xcc9e2d51;\\n var c2 = 0x1b873593;\\n\\n for (var i = 0; i < blocks; i = i + 4) {\\n k1 = (bytes[i]) | (bytes[i + 1] << 8) | (bytes[i + 2] << 16) | (bytes[i + 3] << 24);\\n\\n k1 = _x86Multiply(k1, c1);\\n k1 = _x86Rotl(k1, 15);\\n k1 = _x86Multiply(k1, c2);\\n\\n h1 ^= k1;\\n h1 = _x86Rotl(h1, 13);\\n h1 = _x86Multiply(h1, 5) + 0xe6546b64;\\n }\\n\\n k1 = 0;\\n\\n switch (remainder) {\\n case 3:\\n k1 ^= bytes[i + 2] << 16;\\n\\n case 2:\\n k1 ^= bytes[i + 1] << 8;\\n\\n case 1:\\n k1 ^= bytes[i];\\n k1 = _x86Multiply(k1, c1);\\n k1 = _x86Rotl(k1, 15);\\n k1 = _x86Multiply(k1, c2);\\n h1 ^= k1;\\n }\\n\\n h1 ^= bytes.length;\\n h1 = _x86Fmix(h1);\\n\\n return h1 >>> 0;\\n };\\n\\n library.x86.hash128 = function (bytes, seed) {\\n //\\n // Given a string and an optional seed as an int, returns a 128 bit\\n // hash using the x86 flavor of MurmurHash3, as an unsigned hex.\\n //\\n if (library.inputValidation && !_validBytes(bytes)) {\\n return undefined;\\n }\\n\\n seed = seed || 0;\\n var remainder = bytes.length % 16;\\n var blocks = bytes.length - remainder;\\n\\n var h1 = seed;\\n var h2 = seed;\\n var h3 = seed;\\n var h4 = seed;\\n\\n var k1 = 0;\\n var k2 = 0;\\n var k3 = 0;\\n var k4 = 0;\\n\\n var c1 = 0x239b961b;\\n var c2 = 0xab0e9789;\\n var c3 = 0x38b34ae5;\\n var c4 = 0xa1e38b93;\\n\\n for (var i = 0; i < blocks; i = i + 16) {\\n k1 = (bytes[i]) | (bytes[i + 1] << 8) | (bytes[i + 2] << 16) | (bytes[i + 3] << 24);\\n k2 = (bytes[i + 4]) | (bytes[i + 5] << 8) | (bytes[i + 6] << 16) | (bytes[i + 7] << 24);\\n k3 = (bytes[i + 8]) | (bytes[i + 9] << 8) | (bytes[i + 10] << 16) | (bytes[i + 11] << 24);\\n k4 = (bytes[i + 12]) | (bytes[i + 13] << 8) | (bytes[i + 14] << 16) | (bytes[i + 15] << 24);\\n\\n k1 = _x86Multiply(k1, c1);\\n k1 = _x86Rotl(k1, 15);\\n k1 = _x86Multiply(k1, c2);\\n h1 ^= k1;\\n\\n h1 = _x86Rotl(h1, 19);\\n h1 += h2;\\n h1 = _x86Multiply(h1, 5) + 0x561ccd1b;\\n\\n k2 = _x86Multiply(k2, c2);\\n k2 = _x86Rotl(k2, 16);\\n k2 = _x86Multiply(k2, c3);\\n h2 ^= k2;\\n\\n h2 = _x86Rotl(h2, 17);\\n h2 += h3;\\n h2 = _x86Multiply(h2, 5) + 0x0bcaa747;\\n\\n k3 = _x86Multiply(k3, c3);\\n k3 = _x86Rotl(k3, 17);\\n k3 = _x86Multiply(k3, c4);\\n h3 ^= k3;\\n\\n h3 = _x86Rotl(h3, 15);\\n h3 += h4;\\n h3 = _x86Multiply(h3, 5) + 0x96cd1c35;\\n\\n k4 = _x86Multiply(k4, c4);\\n k4 = _x86Rotl(k4, 18);\\n k4 = _x86Multiply(k4, c1);\\n h4 ^= k4;\\n\\n h4 = _x86Rotl(h4, 13);\\n h4 += h1;\\n h4 = _x86Multiply(h4, 5) + 0x32ac3b17;\\n }\\n\\n k1 = 0;\\n k2 = 0;\\n k3 = 0;\\n k4 = 0;\\n\\n switch (remainder) {\\n case 15:\\n k4 ^= bytes[i + 14] << 16;\\n\\n case 14:\\n k4 ^= bytes[i + 13] << 8;\\n\\n case 13:\\n k4 ^= bytes[i + 12];\\n k4 = _x86Multiply(k4, c4);\\n k4 = _x86Rotl(k4, 18);\\n k4 = _x86Multiply(k4, c1);\\n h4 ^= k4;\\n\\n case 12:\\n k3 ^= bytes[i + 11] << 24;\\n\\n case 11:\\n k3 ^= bytes[i + 10] << 16;\\n\\n case 10:\\n k3 ^= bytes[i + 9] << 8;\\n\\n case 9:\\n k3 ^= bytes[i + 8];\\n k3 = _x86Multiply(k3, c3);\\n k3 = _x86Rotl(k3, 17);\\n k3 = _x86Multiply(k3, c4);\\n h3 ^= k3;\\n\\n case 8:\\n k2 ^= bytes[i + 7] << 24;\\n\\n case 7:\\n k2 ^= bytes[i + 6] << 16;\\n\\n case 6:\\n k2 ^= bytes[i + 5] << 8;\\n\\n case 5:\\n k2 ^= bytes[i + 4];\\n k2 = _x86Multiply(k2, c2);\\n k2 = _x86Rotl(k2, 16);\\n k2 = _x86Multiply(k2, c3);\\n h2 ^= k2;\\n\\n case 4:\\n k1 ^= bytes[i + 3] << 24;\\n\\n case 3:\\n k1 ^= bytes[i + 2] << 16;\\n\\n case 2:\\n k1 ^= bytes[i + 1] << 8;\\n\\n case 1:\\n k1 ^= bytes[i];\\n k1 = _x86Multiply(k1, c1);\\n k1 = _x86Rotl(k1, 15);\\n k1 = _x86Multiply(k1, c2);\\n h1 ^= k1;\\n }\\n\\n h1 ^= bytes.length;\\n h2 ^= bytes.length;\\n h3 ^= bytes.length;\\n h4 ^= bytes.length;\\n\\n h1 += h2;\\n h1 += h3;\\n h1 += h4;\\n h2 += h1;\\n h3 += h1;\\n h4 += h1;\\n\\n h1 = _x86Fmix(h1);\\n h2 = _x86Fmix(h2);\\n h3 = _x86Fmix(h3);\\n h4 = _x86Fmix(h4);\\n\\n h1 += h2;\\n h1 += h3;\\n h1 += h4;\\n h2 += h1;\\n h3 += h1;\\n h4 += h1;\\n\\n return (\\\"00000000\\\" + (h1 >>> 0).toString(16)).slice(-8) + (\\\"00000000\\\" + (h2 >>> 0).toString(16)).slice(-8) + (\\\"00000000\\\" + (h3 >>> 0).toString(16)).slice(-8) + (\\\"00000000\\\" + (h4 >>> 0).toString(16)).slice(-8);\\n };\\n\\n library.x64.hash128 = function (bytes, seed) {\\n //\\n // Given a string and an optional seed as an int, returns a 128 bit\\n // hash using the x64 flavor of MurmurHash3, as an unsigned hex.\\n //\\n if (library.inputValidation && !_validBytes(bytes)) {\\n return undefined;\\n }\\n seed = seed || 0;\\n\\n var remainder = bytes.length % 16;\\n var blocks = bytes.length - remainder;\\n\\n var h1 = [0, seed];\\n var h2 = [0, seed];\\n\\n var k1 = [0, 0];\\n var k2 = [0, 0];\\n\\n var c1 = [0x87c37b91, 0x114253d5];\\n var c2 = [0x4cf5ad43, 0x2745937f];\\n\\n for (var i = 0; i < blocks; i = i + 16) {\\n k1 = [(bytes[i + 4]) | (bytes[i + 5] << 8) | (bytes[i + 6] << 16) | (bytes[i + 7] << 24), (bytes[i]) |\\n (bytes[i + 1] << 8) | (bytes[i + 2] << 16) | (bytes[i + 3] << 24)];\\n k2 = [(bytes[i + 12]) | (bytes[i + 13] << 8) | (bytes[i + 14] << 16) | (bytes[i + 15] << 24), (bytes[i + 8]) |\\n (bytes[i + 9] << 8) | (bytes[i + 10] << 16) | (bytes[i + 11] << 24)];\\n\\n k1 = _x64Multiply(k1, c1);\\n k1 = _x64Rotl(k1, 31);\\n k1 = _x64Multiply(k1, c2);\\n h1 = _x64Xor(h1, k1);\\n\\n h1 = _x64Rotl(h1, 27);\\n h1 = _x64Add(h1, h2);\\n h1 = _x64Add(_x64Multiply(h1, [0, 5]), [0, 0x52dce729]);\\n\\n k2 = _x64Multiply(k2, c2);\\n k2 = _x64Rotl(k2, 33);\\n k2 = _x64Multiply(k2, c1);\\n h2 = _x64Xor(h2, k2);\\n\\n h2 = _x64Rotl(h2, 31);\\n h2 = _x64Add(h2, h1);\\n h2 = _x64Add(_x64Multiply(h2, [0, 5]), [0, 0x38495ab5]);\\n }\\n\\n k1 = [0, 0];\\n k2 = [0, 0];\\n\\n switch (remainder) {\\n case 15:\\n k2 = _x64Xor(k2, _x64LeftShift([0, bytes[i + 14]], 48));\\n\\n case 14:\\n k2 = _x64Xor(k2, _x64LeftShift([0, bytes[i + 13]], 40));\\n\\n case 13:\\n k2 = _x64Xor(k2, _x64LeftShift([0, bytes[i + 12]], 32));\\n\\n case 12:\\n k2 = _x64Xor(k2, _x64LeftShift([0, bytes[i + 11]], 24));\\n\\n case 11:\\n k2 = _x64Xor(k2, _x64LeftShift([0, bytes[i + 10]], 16));\\n\\n case 10:\\n k2 = _x64Xor(k2, _x64LeftShift([0, bytes[i + 9]], 8));\\n\\n case 9:\\n k2 = _x64Xor(k2, [0, bytes[i + 8]]);\\n k2 = _x64Multiply(k2, c2);\\n k2 = _x64Rotl(k2, 33);\\n k2 = _x64Multiply(k2, c1);\\n h2 = _x64Xor(h2, k2);\\n\\n case 8:\\n k1 = _x64Xor(k1, _x64LeftShift([0, bytes[i + 7]], 56));\\n\\n case 7:\\n k1 = _x64Xor(k1, _x64LeftShift([0, bytes[i + 6]], 48));\\n\\n case 6:\\n k1 = _x64Xor(k1, _x64LeftShift([0, bytes[i + 5]], 40));\\n\\n case 5:\\n k1 = _x64Xor(k1, _x64LeftShift([0, bytes[i + 4]], 32));\\n\\n case 4:\\n k1 = _x64Xor(k1, _x64LeftShift([0, bytes[i + 3]], 24));\\n\\n case 3:\\n k1 = _x64Xor(k1, _x64LeftShift([0, bytes[i + 2]], 16));\\n\\n case 2:\\n k1 = _x64Xor(k1, _x64LeftShift([0, bytes[i + 1]], 8));\\n\\n case 1:\\n k1 = _x64Xor(k1, [0, bytes[i]]);\\n k1 = _x64Multiply(k1, c1);\\n k1 = _x64Rotl(k1, 31);\\n k1 = _x64Multiply(k1, c2);\\n h1 = _x64Xor(h1, k1);\\n }\\n\\n h1 = _x64Xor(h1, [0, bytes.length]);\\n h2 = _x64Xor(h2, [0, bytes.length]);\\n\\n h1 = _x64Add(h1, h2);\\n h2 = _x64Add(h2, h1);\\n\\n h1 = _x64Fmix(h1);\\n h2 = _x64Fmix(h2);\\n\\n h1 = _x64Add(h1, h2);\\n h2 = _x64Add(h2, h1);\\n\\n return (\\\"00000000\\\" + (h1[0] >>> 0).toString(16)).slice(-8) + (\\\"00000000\\\" + (h1[1] >>> 0).toString(16)).slice(-8) + (\\\"00000000\\\" + (h2[0] >>> 0).toString(16)).slice(-8) + (\\\"00000000\\\" + (h2[1] >>> 0).toString(16)).slice(-8);\\n };\\n\\n // INITIALIZATION\\n // --------------\\n\\n // Export murmurHash3 for CommonJS, either as an AMD module or just as part\\n // of the global object.\\n if (true) {\\n\\n if ( true && module.exports) {\\n exports = module.exports = library;\\n }\\n\\n exports.murmurHash3 = library;\\n\\n } else {}\\n})(this);\\n\\n\\n//# sourceURL=webpack:///./node_modules/murmurhash3js-revisited/lib/murmurHash3js.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/node-fetch/browser.js\":\n/*!********************************************!*\\\n !*** ./node_modules/node-fetch/browser.js ***!\n \\********************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\n// ref: https://github.com/tc39/proposal-global\\nvar getGlobal = function () {\\n\\t// the only reliable means to get the global object is\\n\\t// `Function('return this')()`\\n\\t// However, this causes CSP violations in Chrome apps.\\n\\tif (typeof self !== 'undefined') { return self; }\\n\\tif (typeof window !== 'undefined') { return window; }\\n\\tif (typeof global !== 'undefined') { return global; }\\n\\tthrow new Error('unable to locate global object');\\n}\\n\\nvar global = getGlobal();\\n\\nmodule.exports = exports = global.fetch;\\n\\n// Needed for TypeScript and Webpack.\\nexports.default = global.fetch.bind(global);\\n\\nexports.Headers = global.Headers;\\nexports.Request = global.Request;\\nexports.Response = global.Response;\\n\\n//# sourceURL=webpack:///./node_modules/node-fetch/browser.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/node-libs-browser/node_modules/buffer/index.js\":\n/*!*********************************************************************!*\\\n !*** ./node_modules/node-libs-browser/node_modules/buffer/index.js ***!\n \\*********************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(global) {/*!\\n * The buffer module from node.js, for the browser.\\n *\\n * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\\n * @license MIT\\n */\\n/* eslint-disable no-proto */\\n\\n\\n\\nvar base64 = __webpack_require__(/*! base64-js */ \\\"./node_modules/base64-js/index.js\\\")\\nvar ieee754 = __webpack_require__(/*! ieee754 */ \\\"./node_modules/ieee754/index.js\\\")\\nvar isArray = __webpack_require__(/*! isarray */ \\\"./node_modules/isarray/index.js\\\")\\n\\nexports.Buffer = Buffer\\nexports.SlowBuffer = SlowBuffer\\nexports.INSPECT_MAX_BYTES = 50\\n\\n/**\\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\\n * === true Use Uint8Array implementation (fastest)\\n * === false Use Object implementation (most compatible, even IE6)\\n *\\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\\n * Opera 11.6+, iOS 4.2+.\\n *\\n * Due to various browser bugs, sometimes the Object implementation will be used even\\n * when the browser supports typed arrays.\\n *\\n * Note:\\n *\\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\\n *\\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\\n *\\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\\n * incorrect length in some situations.\\n\\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\\n * get the Object implementation, which is slower but behaves correctly.\\n */\\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\\n ? global.TYPED_ARRAY_SUPPORT\\n : typedArraySupport()\\n\\n/*\\n * Export kMaxLength after typed array support is determined.\\n */\\nexports.kMaxLength = kMaxLength()\\n\\nfunction typedArraySupport () {\\n try {\\n var arr = new Uint8Array(1)\\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\\n return arr.foo() === 42 && // typed array instances can be augmented\\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\\n } catch (e) {\\n return false\\n }\\n}\\n\\nfunction kMaxLength () {\\n return Buffer.TYPED_ARRAY_SUPPORT\\n ? 0x7fffffff\\n : 0x3fffffff\\n}\\n\\nfunction createBuffer (that, length) {\\n if (kMaxLength() < length) {\\n throw new RangeError('Invalid typed array length')\\n }\\n if (Buffer.TYPED_ARRAY_SUPPORT) {\\n // Return an augmented `Uint8Array` instance, for best performance\\n that = new Uint8Array(length)\\n that.__proto__ = Buffer.prototype\\n } else {\\n // Fallback: Return an object instance of the Buffer class\\n if (that === null) {\\n that = new Buffer(length)\\n }\\n that.length = length\\n }\\n\\n return that\\n}\\n\\n/**\\n * The Buffer constructor returns instances of `Uint8Array` that have their\\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\\n * returns a single octet.\\n *\\n * The `Uint8Array` prototype remains unmodified.\\n */\\n\\nfunction Buffer (arg, encodingOrOffset, length) {\\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\\n return new Buffer(arg, encodingOrOffset, length)\\n }\\n\\n // Common case.\\n if (typeof arg === 'number') {\\n if (typeof encodingOrOffset === 'string') {\\n throw new Error(\\n 'If encoding is specified then the first argument must be a string'\\n )\\n }\\n return allocUnsafe(this, arg)\\n }\\n return from(this, arg, encodingOrOffset, length)\\n}\\n\\nBuffer.poolSize = 8192 // not used by this implementation\\n\\n// TODO: Legacy, not needed anymore. Remove in next major version.\\nBuffer._augment = function (arr) {\\n arr.__proto__ = Buffer.prototype\\n return arr\\n}\\n\\nfunction from (that, value, encodingOrOffset, length) {\\n if (typeof value === 'number') {\\n throw new TypeError('\\\"value\\\" argument must not be a number')\\n }\\n\\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\\n return fromArrayBuffer(that, value, encodingOrOffset, length)\\n }\\n\\n if (typeof value === 'string') {\\n return fromString(that, value, encodingOrOffset)\\n }\\n\\n return fromObject(that, value)\\n}\\n\\n/**\\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\\n * if value is a number.\\n * Buffer.from(str[, encoding])\\n * Buffer.from(array)\\n * Buffer.from(buffer)\\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\\n **/\\nBuffer.from = function (value, encodingOrOffset, length) {\\n return from(null, value, encodingOrOffset, length)\\n}\\n\\nif (Buffer.TYPED_ARRAY_SUPPORT) {\\n Buffer.prototype.__proto__ = Uint8Array.prototype\\n Buffer.__proto__ = Uint8Array\\n if (typeof Symbol !== 'undefined' && Symbol.species &&\\n Buffer[Symbol.species] === Buffer) {\\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\\n Object.defineProperty(Buffer, Symbol.species, {\\n value: null,\\n configurable: true\\n })\\n }\\n}\\n\\nfunction assertSize (size) {\\n if (typeof size !== 'number') {\\n throw new TypeError('\\\"size\\\" argument must be a number')\\n } else if (size < 0) {\\n throw new RangeError('\\\"size\\\" argument must not be negative')\\n }\\n}\\n\\nfunction alloc (that, size, fill, encoding) {\\n assertSize(size)\\n if (size <= 0) {\\n return createBuffer(that, size)\\n }\\n if (fill !== undefined) {\\n // Only pay attention to encoding if it's a string. This\\n // prevents accidentally sending in a number that would\\n // be interpretted as a start offset.\\n return typeof encoding === 'string'\\n ? createBuffer(that, size).fill(fill, encoding)\\n : createBuffer(that, size).fill(fill)\\n }\\n return createBuffer(that, size)\\n}\\n\\n/**\\n * Creates a new filled Buffer instance.\\n * alloc(size[, fill[, encoding]])\\n **/\\nBuffer.alloc = function (size, fill, encoding) {\\n return alloc(null, size, fill, encoding)\\n}\\n\\nfunction allocUnsafe (that, size) {\\n assertSize(size)\\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\\n for (var i = 0; i < size; ++i) {\\n that[i] = 0\\n }\\n }\\n return that\\n}\\n\\n/**\\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\\n * */\\nBuffer.allocUnsafe = function (size) {\\n return allocUnsafe(null, size)\\n}\\n/**\\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\\n */\\nBuffer.allocUnsafeSlow = function (size) {\\n return allocUnsafe(null, size)\\n}\\n\\nfunction fromString (that, string, encoding) {\\n if (typeof encoding !== 'string' || encoding === '') {\\n encoding = 'utf8'\\n }\\n\\n if (!Buffer.isEncoding(encoding)) {\\n throw new TypeError('\\\"encoding\\\" must be a valid string encoding')\\n }\\n\\n var length = byteLength(string, encoding) | 0\\n that = createBuffer(that, length)\\n\\n var actual = that.write(string, encoding)\\n\\n if (actual !== length) {\\n // Writing a hex string, for example, that contains invalid characters will\\n // cause everything after the first invalid character to be ignored. (e.g.\\n // 'abxxcd' will be treated as 'ab')\\n that = that.slice(0, actual)\\n }\\n\\n return that\\n}\\n\\nfunction fromArrayLike (that, array) {\\n var length = array.length < 0 ? 0 : checked(array.length) | 0\\n that = createBuffer(that, length)\\n for (var i = 0; i < length; i += 1) {\\n that[i] = array[i] & 255\\n }\\n return that\\n}\\n\\nfunction fromArrayBuffer (that, array, byteOffset, length) {\\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\\n\\n if (byteOffset < 0 || array.byteLength < byteOffset) {\\n throw new RangeError('\\\\'offset\\\\' is out of bounds')\\n }\\n\\n if (array.byteLength < byteOffset + (length || 0)) {\\n throw new RangeError('\\\\'length\\\\' is out of bounds')\\n }\\n\\n if (byteOffset === undefined && length === undefined) {\\n array = new Uint8Array(array)\\n } else if (length === undefined) {\\n array = new Uint8Array(array, byteOffset)\\n } else {\\n array = new Uint8Array(array, byteOffset, length)\\n }\\n\\n if (Buffer.TYPED_ARRAY_SUPPORT) {\\n // Return an augmented `Uint8Array` instance, for best performance\\n that = array\\n that.__proto__ = Buffer.prototype\\n } else {\\n // Fallback: Return an object instance of the Buffer class\\n that = fromArrayLike(that, array)\\n }\\n return that\\n}\\n\\nfunction fromObject (that, obj) {\\n if (Buffer.isBuffer(obj)) {\\n var len = checked(obj.length) | 0\\n that = createBuffer(that, len)\\n\\n if (that.length === 0) {\\n return that\\n }\\n\\n obj.copy(that, 0, 0, len)\\n return that\\n }\\n\\n if (obj) {\\n if ((typeof ArrayBuffer !== 'undefined' &&\\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\\n return createBuffer(that, 0)\\n }\\n return fromArrayLike(that, obj)\\n }\\n\\n if (obj.type === 'Buffer' && isArray(obj.data)) {\\n return fromArrayLike(that, obj.data)\\n }\\n }\\n\\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\\n}\\n\\nfunction checked (length) {\\n // Note: cannot use `length < kMaxLength()` here because that fails when\\n // length is NaN (which is otherwise coerced to zero.)\\n if (length >= kMaxLength()) {\\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\\n }\\n return length | 0\\n}\\n\\nfunction SlowBuffer (length) {\\n if (+length != length) { // eslint-disable-line eqeqeq\\n length = 0\\n }\\n return Buffer.alloc(+length)\\n}\\n\\nBuffer.isBuffer = function isBuffer (b) {\\n return !!(b != null && b._isBuffer)\\n}\\n\\nBuffer.compare = function compare (a, b) {\\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\\n throw new TypeError('Arguments must be Buffers')\\n }\\n\\n if (a === b) return 0\\n\\n var x = a.length\\n var y = b.length\\n\\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\\n if (a[i] !== b[i]) {\\n x = a[i]\\n y = b[i]\\n break\\n }\\n }\\n\\n if (x < y) return -1\\n if (y < x) return 1\\n return 0\\n}\\n\\nBuffer.isEncoding = function isEncoding (encoding) {\\n switch (String(encoding).toLowerCase()) {\\n case 'hex':\\n case 'utf8':\\n case 'utf-8':\\n case 'ascii':\\n case 'latin1':\\n case 'binary':\\n case 'base64':\\n case 'ucs2':\\n case 'ucs-2':\\n case 'utf16le':\\n case 'utf-16le':\\n return true\\n default:\\n return false\\n }\\n}\\n\\nBuffer.concat = function concat (list, length) {\\n if (!isArray(list)) {\\n throw new TypeError('\\\"list\\\" argument must be an Array of Buffers')\\n }\\n\\n if (list.length === 0) {\\n return Buffer.alloc(0)\\n }\\n\\n var i\\n if (length === undefined) {\\n length = 0\\n for (i = 0; i < list.length; ++i) {\\n length += list[i].length\\n }\\n }\\n\\n var buffer = Buffer.allocUnsafe(length)\\n var pos = 0\\n for (i = 0; i < list.length; ++i) {\\n var buf = list[i]\\n if (!Buffer.isBuffer(buf)) {\\n throw new TypeError('\\\"list\\\" argument must be an Array of Buffers')\\n }\\n buf.copy(buffer, pos)\\n pos += buf.length\\n }\\n return buffer\\n}\\n\\nfunction byteLength (string, encoding) {\\n if (Buffer.isBuffer(string)) {\\n return string.length\\n }\\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\\n return string.byteLength\\n }\\n if (typeof string !== 'string') {\\n string = '' + string\\n }\\n\\n var len = string.length\\n if (len === 0) return 0\\n\\n // Use a for loop to avoid recursion\\n var loweredCase = false\\n for (;;) {\\n switch (encoding) {\\n case 'ascii':\\n case 'latin1':\\n case 'binary':\\n return len\\n case 'utf8':\\n case 'utf-8':\\n case undefined:\\n return utf8ToBytes(string).length\\n case 'ucs2':\\n case 'ucs-2':\\n case 'utf16le':\\n case 'utf-16le':\\n return len * 2\\n case 'hex':\\n return len >>> 1\\n case 'base64':\\n return base64ToBytes(string).length\\n default:\\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\\n encoding = ('' + encoding).toLowerCase()\\n loweredCase = true\\n }\\n }\\n}\\nBuffer.byteLength = byteLength\\n\\nfunction slowToString (encoding, start, end) {\\n var loweredCase = false\\n\\n // No need to verify that \\\"this.length <= MAX_UINT32\\\" since it's a read-only\\n // property of a typed array.\\n\\n // This behaves neither like String nor Uint8Array in that we set start/end\\n // to their upper/lower bounds if the value passed is out of range.\\n // undefined is handled specially as per ECMA-262 6th Edition,\\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\\n if (start === undefined || start < 0) {\\n start = 0\\n }\\n // Return early if start > this.length. Done here to prevent potential uint32\\n // coercion fail below.\\n if (start > this.length) {\\n return ''\\n }\\n\\n if (end === undefined || end > this.length) {\\n end = this.length\\n }\\n\\n if (end <= 0) {\\n return ''\\n }\\n\\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\\n end >>>= 0\\n start >>>= 0\\n\\n if (end <= start) {\\n return ''\\n }\\n\\n if (!encoding) encoding = 'utf8'\\n\\n while (true) {\\n switch (encoding) {\\n case 'hex':\\n return hexSlice(this, start, end)\\n\\n case 'utf8':\\n case 'utf-8':\\n return utf8Slice(this, start, end)\\n\\n case 'ascii':\\n return asciiSlice(this, start, end)\\n\\n case 'latin1':\\n case 'binary':\\n return latin1Slice(this, start, end)\\n\\n case 'base64':\\n return base64Slice(this, start, end)\\n\\n case 'ucs2':\\n case 'ucs-2':\\n case 'utf16le':\\n case 'utf-16le':\\n return utf16leSlice(this, start, end)\\n\\n default:\\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\\n encoding = (encoding + '').toLowerCase()\\n loweredCase = true\\n }\\n }\\n}\\n\\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\\n// Buffer instances.\\nBuffer.prototype._isBuffer = true\\n\\nfunction swap (b, n, m) {\\n var i = b[n]\\n b[n] = b[m]\\n b[m] = i\\n}\\n\\nBuffer.prototype.swap16 = function swap16 () {\\n var len = this.length\\n if (len % 2 !== 0) {\\n throw new RangeError('Buffer size must be a multiple of 16-bits')\\n }\\n for (var i = 0; i < len; i += 2) {\\n swap(this, i, i + 1)\\n }\\n return this\\n}\\n\\nBuffer.prototype.swap32 = function swap32 () {\\n var len = this.length\\n if (len % 4 !== 0) {\\n throw new RangeError('Buffer size must be a multiple of 32-bits')\\n }\\n for (var i = 0; i < len; i += 4) {\\n swap(this, i, i + 3)\\n swap(this, i + 1, i + 2)\\n }\\n return this\\n}\\n\\nBuffer.prototype.swap64 = function swap64 () {\\n var len = this.length\\n if (len % 8 !== 0) {\\n throw new RangeError('Buffer size must be a multiple of 64-bits')\\n }\\n for (var i = 0; i < len; i += 8) {\\n swap(this, i, i + 7)\\n swap(this, i + 1, i + 6)\\n swap(this, i + 2, i + 5)\\n swap(this, i + 3, i + 4)\\n }\\n return this\\n}\\n\\nBuffer.prototype.toString = function toString () {\\n var length = this.length | 0\\n if (length === 0) return ''\\n if (arguments.length === 0) return utf8Slice(this, 0, length)\\n return slowToString.apply(this, arguments)\\n}\\n\\nBuffer.prototype.equals = function equals (b) {\\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\\n if (this === b) return true\\n return Buffer.compare(this, b) === 0\\n}\\n\\nBuffer.prototype.inspect = function inspect () {\\n var str = ''\\n var max = exports.INSPECT_MAX_BYTES\\n if (this.length > 0) {\\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\\n if (this.length > max) str += ' ... '\\n }\\n return '<Buffer ' + str + '>'\\n}\\n\\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\\n if (!Buffer.isBuffer(target)) {\\n throw new TypeError('Argument must be a Buffer')\\n }\\n\\n if (start === undefined) {\\n start = 0\\n }\\n if (end === undefined) {\\n end = target ? target.length : 0\\n }\\n if (thisStart === undefined) {\\n thisStart = 0\\n }\\n if (thisEnd === undefined) {\\n thisEnd = this.length\\n }\\n\\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\\n throw new RangeError('out of range index')\\n }\\n\\n if (thisStart >= thisEnd && start >= end) {\\n return 0\\n }\\n if (thisStart >= thisEnd) {\\n return -1\\n }\\n if (start >= end) {\\n return 1\\n }\\n\\n start >>>= 0\\n end >>>= 0\\n thisStart >>>= 0\\n thisEnd >>>= 0\\n\\n if (this === target) return 0\\n\\n var x = thisEnd - thisStart\\n var y = end - start\\n var len = Math.min(x, y)\\n\\n var thisCopy = this.slice(thisStart, thisEnd)\\n var targetCopy = target.slice(start, end)\\n\\n for (var i = 0; i < len; ++i) {\\n if (thisCopy[i] !== targetCopy[i]) {\\n x = thisCopy[i]\\n y = targetCopy[i]\\n break\\n }\\n }\\n\\n if (x < y) return -1\\n if (y < x) return 1\\n return 0\\n}\\n\\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\\n//\\n// Arguments:\\n// - buffer - a Buffer to search\\n// - val - a string, Buffer, or number\\n// - byteOffset - an index into `buffer`; will be clamped to an int32\\n// - encoding - an optional encoding, relevant is val is a string\\n// - dir - true for indexOf, false for lastIndexOf\\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\\n // Empty buffer means no match\\n if (buffer.length === 0) return -1\\n\\n // Normalize byteOffset\\n if (typeof byteOffset === 'string') {\\n encoding = byteOffset\\n byteOffset = 0\\n } else if (byteOffset > 0x7fffffff) {\\n byteOffset = 0x7fffffff\\n } else if (byteOffset < -0x80000000) {\\n byteOffset = -0x80000000\\n }\\n byteOffset = +byteOffset // Coerce to Number.\\n if (isNaN(byteOffset)) {\\n // byteOffset: it it's undefined, null, NaN, \\\"foo\\\", etc, search whole buffer\\n byteOffset = dir ? 0 : (buffer.length - 1)\\n }\\n\\n // Normalize byteOffset: negative offsets start from the end of the buffer\\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\\n if (byteOffset >= buffer.length) {\\n if (dir) return -1\\n else byteOffset = buffer.length - 1\\n } else if (byteOffset < 0) {\\n if (dir) byteOffset = 0\\n else return -1\\n }\\n\\n // Normalize val\\n if (typeof val === 'string') {\\n val = Buffer.from(val, encoding)\\n }\\n\\n // Finally, search either indexOf (if dir is true) or lastIndexOf\\n if (Buffer.isBuffer(val)) {\\n // Special case: looking for empty string/buffer always fails\\n if (val.length === 0) {\\n return -1\\n }\\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\\n } else if (typeof val === 'number') {\\n val = val & 0xFF // Search for a byte value [0-255]\\n if (Buffer.TYPED_ARRAY_SUPPORT &&\\n typeof Uint8Array.prototype.indexOf === 'function') {\\n if (dir) {\\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\\n } else {\\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\\n }\\n }\\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\\n }\\n\\n throw new TypeError('val must be string, number or Buffer')\\n}\\n\\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\\n var indexSize = 1\\n var arrLength = arr.length\\n var valLength = val.length\\n\\n if (encoding !== undefined) {\\n encoding = String(encoding).toLowerCase()\\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\\n encoding === 'utf16le' || encoding === 'utf-16le') {\\n if (arr.length < 2 || val.length < 2) {\\n return -1\\n }\\n indexSize = 2\\n arrLength /= 2\\n valLength /= 2\\n byteOffset /= 2\\n }\\n }\\n\\n function read (buf, i) {\\n if (indexSize === 1) {\\n return buf[i]\\n } else {\\n return buf.readUInt16BE(i * indexSize)\\n }\\n }\\n\\n var i\\n if (dir) {\\n var foundIndex = -1\\n for (i = byteOffset; i < arrLength; i++) {\\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\\n if (foundIndex === -1) foundIndex = i\\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\\n } else {\\n if (foundIndex !== -1) i -= i - foundIndex\\n foundIndex = -1\\n }\\n }\\n } else {\\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\\n for (i = byteOffset; i >= 0; i--) {\\n var found = true\\n for (var j = 0; j < valLength; j++) {\\n if (read(arr, i + j) !== read(val, j)) {\\n found = false\\n break\\n }\\n }\\n if (found) return i\\n }\\n }\\n\\n return -1\\n}\\n\\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\\n return this.indexOf(val, byteOffset, encoding) !== -1\\n}\\n\\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\\n}\\n\\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\\n}\\n\\nfunction hexWrite (buf, string, offset, length) {\\n offset = Number(offset) || 0\\n var remaining = buf.length - offset\\n if (!length) {\\n length = remaining\\n } else {\\n length = Number(length)\\n if (length > remaining) {\\n length = remaining\\n }\\n }\\n\\n // must be an even number of digits\\n var strLen = string.length\\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\\n\\n if (length > strLen / 2) {\\n length = strLen / 2\\n }\\n for (var i = 0; i < length; ++i) {\\n var parsed = parseInt(string.substr(i * 2, 2), 16)\\n if (isNaN(parsed)) return i\\n buf[offset + i] = parsed\\n }\\n return i\\n}\\n\\nfunction utf8Write (buf, string, offset, length) {\\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\\n}\\n\\nfunction asciiWrite (buf, string, offset, length) {\\n return blitBuffer(asciiToBytes(string), buf, offset, length)\\n}\\n\\nfunction latin1Write (buf, string, offset, length) {\\n return asciiWrite(buf, string, offset, length)\\n}\\n\\nfunction base64Write (buf, string, offset, length) {\\n return blitBuffer(base64ToBytes(string), buf, offset, length)\\n}\\n\\nfunction ucs2Write (buf, string, offset, length) {\\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\\n}\\n\\nBuffer.prototype.write = function write (string, offset, length, encoding) {\\n // Buffer#write(string)\\n if (offset === undefined) {\\n encoding = 'utf8'\\n length = this.length\\n offset = 0\\n // Buffer#write(string, encoding)\\n } else if (length === undefined && typeof offset === 'string') {\\n encoding = offset\\n length = this.length\\n offset = 0\\n // Buffer#write(string, offset[, length][, encoding])\\n } else if (isFinite(offset)) {\\n offset = offset | 0\\n if (isFinite(length)) {\\n length = length | 0\\n if (encoding === undefined) encoding = 'utf8'\\n } else {\\n encoding = length\\n length = undefined\\n }\\n // legacy write(string, encoding, offset, length) - remove in v0.13\\n } else {\\n throw new Error(\\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\\n )\\n }\\n\\n var remaining = this.length - offset\\n if (length === undefined || length > remaining) length = remaining\\n\\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\\n throw new RangeError('Attempt to write outside buffer bounds')\\n }\\n\\n if (!encoding) encoding = 'utf8'\\n\\n var loweredCase = false\\n for (;;) {\\n switch (encoding) {\\n case 'hex':\\n return hexWrite(this, string, offset, length)\\n\\n case 'utf8':\\n case 'utf-8':\\n return utf8Write(this, string, offset, length)\\n\\n case 'ascii':\\n return asciiWrite(this, string, offset, length)\\n\\n case 'latin1':\\n case 'binary':\\n return latin1Write(this, string, offset, length)\\n\\n case 'base64':\\n // Warning: maxLength not taken into account in base64Write\\n return base64Write(this, string, offset, length)\\n\\n case 'ucs2':\\n case 'ucs-2':\\n case 'utf16le':\\n case 'utf-16le':\\n return ucs2Write(this, string, offset, length)\\n\\n default:\\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\\n encoding = ('' + encoding).toLowerCase()\\n loweredCase = true\\n }\\n }\\n}\\n\\nBuffer.prototype.toJSON = function toJSON () {\\n return {\\n type: 'Buffer',\\n data: Array.prototype.slice.call(this._arr || this, 0)\\n }\\n}\\n\\nfunction base64Slice (buf, start, end) {\\n if (start === 0 && end === buf.length) {\\n return base64.fromByteArray(buf)\\n } else {\\n return base64.fromByteArray(buf.slice(start, end))\\n }\\n}\\n\\nfunction utf8Slice (buf, start, end) {\\n end = Math.min(buf.length, end)\\n var res = []\\n\\n var i = start\\n while (i < end) {\\n var firstByte = buf[i]\\n var codePoint = null\\n var bytesPerSequence = (firstByte > 0xEF) ? 4\\n : (firstByte > 0xDF) ? 3\\n : (firstByte > 0xBF) ? 2\\n : 1\\n\\n if (i + bytesPerSequence <= end) {\\n var secondByte, thirdByte, fourthByte, tempCodePoint\\n\\n switch (bytesPerSequence) {\\n case 1:\\n if (firstByte < 0x80) {\\n codePoint = firstByte\\n }\\n break\\n case 2:\\n secondByte = buf[i + 1]\\n if ((secondByte & 0xC0) === 0x80) {\\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\\n if (tempCodePoint > 0x7F) {\\n codePoint = tempCodePoint\\n }\\n }\\n break\\n case 3:\\n secondByte = buf[i + 1]\\n thirdByte = buf[i + 2]\\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\\n codePoint = tempCodePoint\\n }\\n }\\n break\\n case 4:\\n secondByte = buf[i + 1]\\n thirdByte = buf[i + 2]\\n fourthByte = buf[i + 3]\\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\\n codePoint = tempCodePoint\\n }\\n }\\n }\\n }\\n\\n if (codePoint === null) {\\n // we did not generate a valid codePoint so insert a\\n // replacement char (U+FFFD) and advance only 1 byte\\n codePoint = 0xFFFD\\n bytesPerSequence = 1\\n } else if (codePoint > 0xFFFF) {\\n // encode to utf16 (surrogate pair dance)\\n codePoint -= 0x10000\\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\\n codePoint = 0xDC00 | codePoint & 0x3FF\\n }\\n\\n res.push(codePoint)\\n i += bytesPerSequence\\n }\\n\\n return decodeCodePointsArray(res)\\n}\\n\\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\\n// the lowest limit is Chrome, with 0x10000 args.\\n// We go 1 magnitude less, for safety\\nvar MAX_ARGUMENTS_LENGTH = 0x1000\\n\\nfunction decodeCodePointsArray (codePoints) {\\n var len = codePoints.length\\n if (len <= MAX_ARGUMENTS_LENGTH) {\\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\\n }\\n\\n // Decode in chunks to avoid \\\"call stack size exceeded\\\".\\n var res = ''\\n var i = 0\\n while (i < len) {\\n res += String.fromCharCode.apply(\\n String,\\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\\n )\\n }\\n return res\\n}\\n\\nfunction asciiSlice (buf, start, end) {\\n var ret = ''\\n end = Math.min(buf.length, end)\\n\\n for (var i = start; i < end; ++i) {\\n ret += String.fromCharCode(buf[i] & 0x7F)\\n }\\n return ret\\n}\\n\\nfunction latin1Slice (buf, start, end) {\\n var ret = ''\\n end = Math.min(buf.length, end)\\n\\n for (var i = start; i < end; ++i) {\\n ret += String.fromCharCode(buf[i])\\n }\\n return ret\\n}\\n\\nfunction hexSlice (buf, start, end) {\\n var len = buf.length\\n\\n if (!start || start < 0) start = 0\\n if (!end || end < 0 || end > len) end = len\\n\\n var out = ''\\n for (var i = start; i < end; ++i) {\\n out += toHex(buf[i])\\n }\\n return out\\n}\\n\\nfunction utf16leSlice (buf, start, end) {\\n var bytes = buf.slice(start, end)\\n var res = ''\\n for (var i = 0; i < bytes.length; i += 2) {\\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\\n }\\n return res\\n}\\n\\nBuffer.prototype.slice = function slice (start, end) {\\n var len = this.length\\n start = ~~start\\n end = end === undefined ? len : ~~end\\n\\n if (start < 0) {\\n start += len\\n if (start < 0) start = 0\\n } else if (start > len) {\\n start = len\\n }\\n\\n if (end < 0) {\\n end += len\\n if (end < 0) end = 0\\n } else if (end > len) {\\n end = len\\n }\\n\\n if (end < start) end = start\\n\\n var newBuf\\n if (Buffer.TYPED_ARRAY_SUPPORT) {\\n newBuf = this.subarray(start, end)\\n newBuf.__proto__ = Buffer.prototype\\n } else {\\n var sliceLen = end - start\\n newBuf = new Buffer(sliceLen, undefined)\\n for (var i = 0; i < sliceLen; ++i) {\\n newBuf[i] = this[i + start]\\n }\\n }\\n\\n return newBuf\\n}\\n\\n/*\\n * Need to make sure that buffer isn't trying to write out of bounds.\\n */\\nfunction checkOffset (offset, ext, length) {\\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\\n}\\n\\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\\n offset = offset | 0\\n byteLength = byteLength | 0\\n if (!noAssert) checkOffset(offset, byteLength, this.length)\\n\\n var val = this[offset]\\n var mul = 1\\n var i = 0\\n while (++i < byteLength && (mul *= 0x100)) {\\n val += this[offset + i] * mul\\n }\\n\\n return val\\n}\\n\\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\\n offset = offset | 0\\n byteLength = byteLength | 0\\n if (!noAssert) {\\n checkOffset(offset, byteLength, this.length)\\n }\\n\\n var val = this[offset + --byteLength]\\n var mul = 1\\n while (byteLength > 0 && (mul *= 0x100)) {\\n val += this[offset + --byteLength] * mul\\n }\\n\\n return val\\n}\\n\\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\\n if (!noAssert) checkOffset(offset, 1, this.length)\\n return this[offset]\\n}\\n\\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\\n if (!noAssert) checkOffset(offset, 2, this.length)\\n return this[offset] | (this[offset + 1] << 8)\\n}\\n\\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\\n if (!noAssert) checkOffset(offset, 2, this.length)\\n return (this[offset] << 8) | this[offset + 1]\\n}\\n\\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\\n if (!noAssert) checkOffset(offset, 4, this.length)\\n\\n return ((this[offset]) |\\n (this[offset + 1] << 8) |\\n (this[offset + 2] << 16)) +\\n (this[offset + 3] * 0x1000000)\\n}\\n\\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\\n if (!noAssert) checkOffset(offset, 4, this.length)\\n\\n return (this[offset] * 0x1000000) +\\n ((this[offset + 1] << 16) |\\n (this[offset + 2] << 8) |\\n this[offset + 3])\\n}\\n\\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\\n offset = offset | 0\\n byteLength = byteLength | 0\\n if (!noAssert) checkOffset(offset, byteLength, this.length)\\n\\n var val = this[offset]\\n var mul = 1\\n var i = 0\\n while (++i < byteLength && (mul *= 0x100)) {\\n val += this[offset + i] * mul\\n }\\n mul *= 0x80\\n\\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\\n\\n return val\\n}\\n\\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\\n offset = offset | 0\\n byteLength = byteLength | 0\\n if (!noAssert) checkOffset(offset, byteLength, this.length)\\n\\n var i = byteLength\\n var mul = 1\\n var val = this[offset + --i]\\n while (i > 0 && (mul *= 0x100)) {\\n val += this[offset + --i] * mul\\n }\\n mul *= 0x80\\n\\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\\n\\n return val\\n}\\n\\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\\n if (!noAssert) checkOffset(offset, 1, this.length)\\n if (!(this[offset] & 0x80)) return (this[offset])\\n return ((0xff - this[offset] + 1) * -1)\\n}\\n\\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\\n if (!noAssert) checkOffset(offset, 2, this.length)\\n var val = this[offset] | (this[offset + 1] << 8)\\n return (val & 0x8000) ? val | 0xFFFF0000 : val\\n}\\n\\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\\n if (!noAssert) checkOffset(offset, 2, this.length)\\n var val = this[offset + 1] | (this[offset] << 8)\\n return (val & 0x8000) ? val | 0xFFFF0000 : val\\n}\\n\\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\\n if (!noAssert) checkOffset(offset, 4, this.length)\\n\\n return (this[offset]) |\\n (this[offset + 1] << 8) |\\n (this[offset + 2] << 16) |\\n (this[offset + 3] << 24)\\n}\\n\\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\\n if (!noAssert) checkOffset(offset, 4, this.length)\\n\\n return (this[offset] << 24) |\\n (this[offset + 1] << 16) |\\n (this[offset + 2] << 8) |\\n (this[offset + 3])\\n}\\n\\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\\n if (!noAssert) checkOffset(offset, 4, this.length)\\n return ieee754.read(this, offset, true, 23, 4)\\n}\\n\\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\\n if (!noAssert) checkOffset(offset, 4, this.length)\\n return ieee754.read(this, offset, false, 23, 4)\\n}\\n\\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\\n if (!noAssert) checkOffset(offset, 8, this.length)\\n return ieee754.read(this, offset, true, 52, 8)\\n}\\n\\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\\n if (!noAssert) checkOffset(offset, 8, this.length)\\n return ieee754.read(this, offset, false, 52, 8)\\n}\\n\\nfunction checkInt (buf, value, offset, ext, max, min) {\\n if (!Buffer.isBuffer(buf)) throw new TypeError('\\\"buffer\\\" argument must be a Buffer instance')\\n if (value > max || value < min) throw new RangeError('\\\"value\\\" argument is out of bounds')\\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\\n}\\n\\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\\n value = +value\\n offset = offset | 0\\n byteLength = byteLength | 0\\n if (!noAssert) {\\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\\n checkInt(this, value, offset, byteLength, maxBytes, 0)\\n }\\n\\n var mul = 1\\n var i = 0\\n this[offset] = value & 0xFF\\n while (++i < byteLength && (mul *= 0x100)) {\\n this[offset + i] = (value / mul) & 0xFF\\n }\\n\\n return offset + byteLength\\n}\\n\\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\\n value = +value\\n offset = offset | 0\\n byteLength = byteLength | 0\\n if (!noAssert) {\\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\\n checkInt(this, value, offset, byteLength, maxBytes, 0)\\n }\\n\\n var i = byteLength - 1\\n var mul = 1\\n this[offset + i] = value & 0xFF\\n while (--i >= 0 && (mul *= 0x100)) {\\n this[offset + i] = (value / mul) & 0xFF\\n }\\n\\n return offset + byteLength\\n}\\n\\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\\n value = +value\\n offset = offset | 0\\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\\n this[offset] = (value & 0xff)\\n return offset + 1\\n}\\n\\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\\n if (value < 0) value = 0xffff + value + 1\\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\\n (littleEndian ? i : 1 - i) * 8\\n }\\n}\\n\\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\\n value = +value\\n offset = offset | 0\\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\\n if (Buffer.TYPED_ARRAY_SUPPORT) {\\n this[offset] = (value & 0xff)\\n this[offset + 1] = (value >>> 8)\\n } else {\\n objectWriteUInt16(this, value, offset, true)\\n }\\n return offset + 2\\n}\\n\\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\\n value = +value\\n offset = offset | 0\\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\\n if (Buffer.TYPED_ARRAY_SUPPORT) {\\n this[offset] = (value >>> 8)\\n this[offset + 1] = (value & 0xff)\\n } else {\\n objectWriteUInt16(this, value, offset, false)\\n }\\n return offset + 2\\n}\\n\\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\\n if (value < 0) value = 0xffffffff + value + 1\\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\\n }\\n}\\n\\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\\n value = +value\\n offset = offset | 0\\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\\n if (Buffer.TYPED_ARRAY_SUPPORT) {\\n this[offset + 3] = (value >>> 24)\\n this[offset + 2] = (value >>> 16)\\n this[offset + 1] = (value >>> 8)\\n this[offset] = (value & 0xff)\\n } else {\\n objectWriteUInt32(this, value, offset, true)\\n }\\n return offset + 4\\n}\\n\\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\\n value = +value\\n offset = offset | 0\\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\\n if (Buffer.TYPED_ARRAY_SUPPORT) {\\n this[offset] = (value >>> 24)\\n this[offset + 1] = (value >>> 16)\\n this[offset + 2] = (value >>> 8)\\n this[offset + 3] = (value & 0xff)\\n } else {\\n objectWriteUInt32(this, value, offset, false)\\n }\\n return offset + 4\\n}\\n\\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\\n value = +value\\n offset = offset | 0\\n if (!noAssert) {\\n var limit = Math.pow(2, 8 * byteLength - 1)\\n\\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\\n }\\n\\n var i = 0\\n var mul = 1\\n var sub = 0\\n this[offset] = value & 0xFF\\n while (++i < byteLength && (mul *= 0x100)) {\\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\\n sub = 1\\n }\\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\\n }\\n\\n return offset + byteLength\\n}\\n\\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\\n value = +value\\n offset = offset | 0\\n if (!noAssert) {\\n var limit = Math.pow(2, 8 * byteLength - 1)\\n\\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\\n }\\n\\n var i = byteLength - 1\\n var mul = 1\\n var sub = 0\\n this[offset + i] = value & 0xFF\\n while (--i >= 0 && (mul *= 0x100)) {\\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\\n sub = 1\\n }\\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\\n }\\n\\n return offset + byteLength\\n}\\n\\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\\n value = +value\\n offset = offset | 0\\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\\n if (value < 0) value = 0xff + value + 1\\n this[offset] = (value & 0xff)\\n return offset + 1\\n}\\n\\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\\n value = +value\\n offset = offset | 0\\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\\n if (Buffer.TYPED_ARRAY_SUPPORT) {\\n this[offset] = (value & 0xff)\\n this[offset + 1] = (value >>> 8)\\n } else {\\n objectWriteUInt16(this, value, offset, true)\\n }\\n return offset + 2\\n}\\n\\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\\n value = +value\\n offset = offset | 0\\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\\n if (Buffer.TYPED_ARRAY_SUPPORT) {\\n this[offset] = (value >>> 8)\\n this[offset + 1] = (value & 0xff)\\n } else {\\n objectWriteUInt16(this, value, offset, false)\\n }\\n return offset + 2\\n}\\n\\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\\n value = +value\\n offset = offset | 0\\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\\n if (Buffer.TYPED_ARRAY_SUPPORT) {\\n this[offset] = (value & 0xff)\\n this[offset + 1] = (value >>> 8)\\n this[offset + 2] = (value >>> 16)\\n this[offset + 3] = (value >>> 24)\\n } else {\\n objectWriteUInt32(this, value, offset, true)\\n }\\n return offset + 4\\n}\\n\\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\\n value = +value\\n offset = offset | 0\\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\\n if (value < 0) value = 0xffffffff + value + 1\\n if (Buffer.TYPED_ARRAY_SUPPORT) {\\n this[offset] = (value >>> 24)\\n this[offset + 1] = (value >>> 16)\\n this[offset + 2] = (value >>> 8)\\n this[offset + 3] = (value & 0xff)\\n } else {\\n objectWriteUInt32(this, value, offset, false)\\n }\\n return offset + 4\\n}\\n\\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\\n if (offset < 0) throw new RangeError('Index out of range')\\n}\\n\\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\\n if (!noAssert) {\\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\\n }\\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\\n return offset + 4\\n}\\n\\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\\n return writeFloat(this, value, offset, true, noAssert)\\n}\\n\\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\\n return writeFloat(this, value, offset, false, noAssert)\\n}\\n\\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\\n if (!noAssert) {\\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\\n }\\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\\n return offset + 8\\n}\\n\\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\\n return writeDouble(this, value, offset, true, noAssert)\\n}\\n\\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\\n return writeDouble(this, value, offset, false, noAssert)\\n}\\n\\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\\n if (!start) start = 0\\n if (!end && end !== 0) end = this.length\\n if (targetStart >= target.length) targetStart = target.length\\n if (!targetStart) targetStart = 0\\n if (end > 0 && end < start) end = start\\n\\n // Copy 0 bytes; we're done\\n if (end === start) return 0\\n if (target.length === 0 || this.length === 0) return 0\\n\\n // Fatal error conditions\\n if (targetStart < 0) {\\n throw new RangeError('targetStart out of bounds')\\n }\\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\\n\\n // Are we oob?\\n if (end > this.length) end = this.length\\n if (target.length - targetStart < end - start) {\\n end = target.length - targetStart + start\\n }\\n\\n var len = end - start\\n var i\\n\\n if (this === target && start < targetStart && targetStart < end) {\\n // descending copy from end\\n for (i = len - 1; i >= 0; --i) {\\n target[i + targetStart] = this[i + start]\\n }\\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\\n // ascending copy from start\\n for (i = 0; i < len; ++i) {\\n target[i + targetStart] = this[i + start]\\n }\\n } else {\\n Uint8Array.prototype.set.call(\\n target,\\n this.subarray(start, start + len),\\n targetStart\\n )\\n }\\n\\n return len\\n}\\n\\n// Usage:\\n// buffer.fill(number[, offset[, end]])\\n// buffer.fill(buffer[, offset[, end]])\\n// buffer.fill(string[, offset[, end]][, encoding])\\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\\n // Handle string cases:\\n if (typeof val === 'string') {\\n if (typeof start === 'string') {\\n encoding = start\\n start = 0\\n end = this.length\\n } else if (typeof end === 'string') {\\n encoding = end\\n end = this.length\\n }\\n if (val.length === 1) {\\n var code = val.charCodeAt(0)\\n if (code < 256) {\\n val = code\\n }\\n }\\n if (encoding !== undefined && typeof encoding !== 'string') {\\n throw new TypeError('encoding must be a string')\\n }\\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\\n throw new TypeError('Unknown encoding: ' + encoding)\\n }\\n } else if (typeof val === 'number') {\\n val = val & 255\\n }\\n\\n // Invalid ranges are not set to a default, so can range check early.\\n if (start < 0 || this.length < start || this.length < end) {\\n throw new RangeError('Out of range index')\\n }\\n\\n if (end <= start) {\\n return this\\n }\\n\\n start = start >>> 0\\n end = end === undefined ? this.length : end >>> 0\\n\\n if (!val) val = 0\\n\\n var i\\n if (typeof val === 'number') {\\n for (i = start; i < end; ++i) {\\n this[i] = val\\n }\\n } else {\\n var bytes = Buffer.isBuffer(val)\\n ? val\\n : utf8ToBytes(new Buffer(val, encoding).toString())\\n var len = bytes.length\\n for (i = 0; i < end - start; ++i) {\\n this[i + start] = bytes[i % len]\\n }\\n }\\n\\n return this\\n}\\n\\n// HELPER FUNCTIONS\\n// ================\\n\\nvar INVALID_BASE64_RE = /[^+\\\\/0-9A-Za-z-_]/g\\n\\nfunction base64clean (str) {\\n // Node strips out invalid characters like \\\\n and \\\\t from the string, base64-js does not\\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\\n // Node converts strings with length < 2 to ''\\n if (str.length < 2) return ''\\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\\n while (str.length % 4 !== 0) {\\n str = str + '='\\n }\\n return str\\n}\\n\\nfunction stringtrim (str) {\\n if (str.trim) return str.trim()\\n return str.replace(/^\\\\s+|\\\\s+$/g, '')\\n}\\n\\nfunction toHex (n) {\\n if (n < 16) return '0' + n.toString(16)\\n return n.toString(16)\\n}\\n\\nfunction utf8ToBytes (string, units) {\\n units = units || Infinity\\n var codePoint\\n var length = string.length\\n var leadSurrogate = null\\n var bytes = []\\n\\n for (var i = 0; i < length; ++i) {\\n codePoint = string.charCodeAt(i)\\n\\n // is surrogate component\\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\\n // last char was a lead\\n if (!leadSurrogate) {\\n // no lead yet\\n if (codePoint > 0xDBFF) {\\n // unexpected trail\\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\\n continue\\n } else if (i + 1 === length) {\\n // unpaired lead\\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\\n continue\\n }\\n\\n // valid lead\\n leadSurrogate = codePoint\\n\\n continue\\n }\\n\\n // 2 leads in a row\\n if (codePoint < 0xDC00) {\\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\\n leadSurrogate = codePoint\\n continue\\n }\\n\\n // valid surrogate pair\\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\\n } else if (leadSurrogate) {\\n // valid bmp char, but last char was a lead\\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\\n }\\n\\n leadSurrogate = null\\n\\n // encode utf8\\n if (codePoint < 0x80) {\\n if ((units -= 1) < 0) break\\n bytes.push(codePoint)\\n } else if (codePoint < 0x800) {\\n if ((units -= 2) < 0) break\\n bytes.push(\\n codePoint >> 0x6 | 0xC0,\\n codePoint & 0x3F | 0x80\\n )\\n } else if (codePoint < 0x10000) {\\n if ((units -= 3) < 0) break\\n bytes.push(\\n codePoint >> 0xC | 0xE0,\\n codePoint >> 0x6 & 0x3F | 0x80,\\n codePoint & 0x3F | 0x80\\n )\\n } else if (codePoint < 0x110000) {\\n if ((units -= 4) < 0) break\\n bytes.push(\\n codePoint >> 0x12 | 0xF0,\\n codePoint >> 0xC & 0x3F | 0x80,\\n codePoint >> 0x6 & 0x3F | 0x80,\\n codePoint & 0x3F | 0x80\\n )\\n } else {\\n throw new Error('Invalid code point')\\n }\\n }\\n\\n return bytes\\n}\\n\\nfunction asciiToBytes (str) {\\n var byteArray = []\\n for (var i = 0; i < str.length; ++i) {\\n // Node's code seems to be doing this and not & 0x7F..\\n byteArray.push(str.charCodeAt(i) & 0xFF)\\n }\\n return byteArray\\n}\\n\\nfunction utf16leToBytes (str, units) {\\n var c, hi, lo\\n var byteArray = []\\n for (var i = 0; i < str.length; ++i) {\\n if ((units -= 2) < 0) break\\n\\n c = str.charCodeAt(i)\\n hi = c >> 8\\n lo = c % 256\\n byteArray.push(lo)\\n byteArray.push(hi)\\n }\\n\\n return byteArray\\n}\\n\\nfunction base64ToBytes (str) {\\n return base64.toByteArray(base64clean(str))\\n}\\n\\nfunction blitBuffer (src, dst, offset, length) {\\n for (var i = 0; i < length; ++i) {\\n if ((i + offset >= dst.length) || (i >= src.length)) break\\n dst[i + offset] = src[i]\\n }\\n return i\\n}\\n\\nfunction isnan (val) {\\n return val !== val // eslint-disable-line no-self-compare\\n}\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/global.js */ \\\"./node_modules/webpack/buildin/global.js\\\")))\\n\\n//# sourceURL=webpack:///./node_modules/node-libs-browser/node_modules/buffer/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/orbit-db-io/index.js\":\n/*!*******************************************!*\\\n !*** ./node_modules/orbit-db-io/index.js ***!\n \\*******************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {const CID = __webpack_require__(/*! cids */ \\\"./node_modules/orbit-db-io/node_modules/cids/src/index.js\\\")\\nconst dagPB = __webpack_require__(/*! ipld-dag-pb */ \\\"./node_modules/ipld-dag-pb/src/index.js\\\")\\nconst defaultBase = 'base58btc'\\n\\nconst cidifyString = (str) => {\\n if (!str) {\\n return str\\n }\\n\\n if (Array.isArray(str)) {\\n return str.map(cidifyString)\\n }\\n\\n return new CID(str)\\n}\\n\\nconst stringifyCid = (cid, options) => {\\n if (!cid || typeof cid === 'string') {\\n return cid\\n }\\n\\n if (Array.isArray(cid)) {\\n return cid.map(stringifyCid)\\n }\\n\\n if (cid['/']) {\\n return cid['/']\\n }\\n\\n const base = options.base || defaultBase\\n return cid.toBaseEncodedString(base)\\n}\\n\\nconst writePb = async (ipfs, obj, options) => {\\n const buffer = Buffer.from(JSON.stringify(obj))\\n const dagNode = new dagPB.DAGNode(buffer)\\n const cid = await ipfs.dag.put(dagNode, {\\n format: 'dag-pb',\\n hashAlg: 'sha2-256'\\n })\\n\\n const res = cid.toV0().toBaseEncodedString()\\n const pin = options.pin || false\\n if (pin) {\\n await ipfs.pin.add(res)\\n }\\n\\n return res\\n}\\n\\nconst readPb = async (ipfs, cid) => {\\n const result = await ipfs.dag.get(cid)\\n const dagNode = result.value\\n\\n return JSON.parse(dagNode.toJSON().data)\\n}\\n\\nconst writeCbor = async (ipfs, obj, options) => {\\n const dagNode = Object.assign({}, obj)\\n const links = options.links || []\\n links.forEach((prop) => {\\n if (dagNode[prop]) {\\n dagNode[prop] = cidifyString(dagNode[prop])\\n }\\n })\\n\\n const base = options.base || defaultBase\\n const onlyHash = options.onlyHash || false\\n const cid = await ipfs.dag.put(dagNode, { onlyHash })\\n const res = cid.toBaseEncodedString(base)\\n const pin = options.pin || false\\n if (pin) {\\n await ipfs.pin.add(res)\\n }\\n return res\\n}\\n\\nconst readCbor = async (ipfs, cid, options) => {\\n const result = await ipfs.dag.get(cid)\\n const obj = result.value\\n const links = options.links || []\\n links.forEach((prop) => {\\n if (obj[prop]) {\\n obj[prop] = stringifyCid(obj[prop], options)\\n }\\n })\\n\\n return obj\\n}\\n\\nconst writeObj = async (ipfs, obj, options) => {\\n const onlyHash = options.onlyHash || false\\n const base = options.base || defaultBase\\n const opts = Object.assign({}, { onlyHash: onlyHash }, options.format ? { format: options.format, hashAlg: 'sha2-256' } : {})\\n if (opts.format === 'dag-pb') {\\n obj = new dagPB.DAGNode(obj)\\n }\\n\\n const cid = await ipfs.dag.put(obj, opts)\\n const res = cid.toBaseEncodedString(base)\\n const pin = options.pin || false\\n if (pin) {\\n await ipfs.pin.add(res)\\n }\\n return res\\n}\\n\\nconst formats = {\\n 'dag-pb': { read: readPb, write: writePb },\\n 'dag-cbor': { write: writeCbor, read: readCbor },\\n 'raw': { write: writeObj }\\n}\\n\\nconst write = (ipfs, codec, obj, options = {}) => {\\n const format = formats[codec]\\n if (!format) throw new Error('Unsupported codec')\\n\\n return format.write(ipfs, obj, options)\\n}\\n\\nconst read = (ipfs, cid, options = {}) => {\\n cid = new CID(cid)\\n const format = formats[cid.codec]\\n\\n if (!format) throw new Error('Unsupported codec')\\n\\n return format.read(ipfs, cid, options)\\n}\\n\\nmodule.exports = {\\n read,\\n write\\n}\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/orbit-db-io/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/orbit-db-io/node_modules/cids/src/cid-util.js\":\n/*!********************************************************************!*\\\n !*** ./node_modules/orbit-db-io/node_modules/cids/src/cid-util.js ***!\n \\********************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {\\n\\nconst mh = __webpack_require__(/*! multihashes */ \\\"./node_modules/orbit-db-io/node_modules/multihashes/src/index.js\\\")\\n\\nvar CIDUtil = {\\n /**\\n * Test if the given input is a valid CID object.\\n * Returns an error message if it is not.\\n * Returns undefined if it is a valid CID.\\n *\\n * @param {any} other\\n * @returns {string}\\n */\\n checkCIDComponents: function (other) {\\n if (other == null) {\\n return 'null values are not valid CIDs'\\n }\\n\\n if (!(other.version === 0 || other.version === 1)) {\\n return 'Invalid version, must be a number equal to 1 or 0'\\n }\\n\\n if (typeof other.codec !== 'string') {\\n return 'codec must be string'\\n }\\n\\n if (other.version === 0) {\\n if (other.codec !== 'dag-pb') {\\n return \\\"codec must be 'dag-pb' for CIDv0\\\"\\n }\\n if (other.multibaseName !== 'base58btc') {\\n return \\\"multibaseName must be 'base58btc' for CIDv0\\\"\\n }\\n }\\n\\n if (!Buffer.isBuffer(other.multihash)) {\\n return 'multihash must be a Buffer'\\n }\\n\\n try {\\n mh.validate(other.multihash)\\n } catch (err) {\\n let errorMsg = err.message\\n if (!errorMsg) { // Just in case mh.validate() throws an error with empty error message\\n errorMsg = 'Multihash validation failed'\\n }\\n return errorMsg\\n }\\n }\\n}\\n\\nmodule.exports = CIDUtil\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/orbit-db-io/node_modules/cids/src/cid-util.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/orbit-db-io/node_modules/cids/src/index.js\":\n/*!*****************************************************************!*\\\n !*** ./node_modules/orbit-db-io/node_modules/cids/src/index.js ***!\n \\*****************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {\\n\\nconst mh = __webpack_require__(/*! multihashes */ \\\"./node_modules/orbit-db-io/node_modules/multihashes/src/index.js\\\")\\nconst multibase = __webpack_require__(/*! multibase */ \\\"./node_modules/multibase/src/index.js\\\")\\nconst multicodec = __webpack_require__(/*! multicodec */ \\\"./node_modules/orbit-db-io/node_modules/multicodec/src/index.js\\\")\\nconst codecs = __webpack_require__(/*! multicodec/src/base-table.json */ \\\"./node_modules/orbit-db-io/node_modules/multicodec/src/base-table.json\\\")\\nconst CIDUtil = __webpack_require__(/*! ./cid-util */ \\\"./node_modules/orbit-db-io/node_modules/cids/src/cid-util.js\\\")\\nconst withIs = __webpack_require__(/*! class-is */ \\\"./node_modules/class-is/index.js\\\")\\n\\n/**\\n * @typedef {Object} SerializedCID\\n * @param {string} codec\\n * @param {number} version\\n * @param {Buffer} multihash\\n */\\n\\n/**\\n * Test if the given input is a CID.\\n * @function isCID\\n * @memberof CID\\n * @static\\n * @param {any} other\\n * @returns {bool}\\n */\\n\\n/**\\n * Class representing a CID `<mbase><version><mcodec><mhash>`\\n * , as defined in [ipld/cid](https://github.com/multiformats/cid).\\n * @class CID\\n */\\nclass CID {\\n /**\\n * Create a new CID.\\n *\\n * The algorithm for argument input is roughly:\\n * ```\\n * if (cid)\\n * -> create a copy\\n * else if (str)\\n * if (1st char is on multibase table) -> CID String\\n * else -> bs58 encoded multihash\\n * else if (Buffer)\\n * if (1st byte is 0 or 1) -> CID\\n * else -> multihash\\n * else if (Number)\\n * -> construct CID by parts\\n * ```\\n *\\n * @param {string|Buffer|CID} version\\n * @param {string} [codec]\\n * @param {Buffer} [multihash]\\n * @param {string} [multibaseName]\\n *\\n * @example\\n * new CID(<version>, <codec>, <multihash>, <multibaseName>)\\n * new CID(<cidStr>)\\n * new CID(<cid.buffer>)\\n * new CID(<multihash>)\\n * new CID(<bs58 encoded multihash>)\\n * new CID(<cid>)\\n */\\n constructor (version, codec, multihash, multibaseName) {\\n if (_CID.isCID(version)) {\\n // version is an exising CID instance\\n const cid = version\\n this.version = cid.version\\n this.codec = cid.codec\\n this.multihash = Buffer.from(cid.multihash)\\n // Default guard for when a CID < 0.7 is passed with no multibaseName\\n this.multibaseName = cid.multibaseName || (cid.version === 0 ? 'base58btc' : 'base32')\\n return\\n }\\n\\n if (typeof version === 'string') {\\n // e.g. 'base32' or false\\n const baseName = multibase.isEncoded(version)\\n if (baseName) {\\n // version is a CID String encoded with multibase, so v1\\n const cid = multibase.decode(version)\\n this.version = parseInt(cid.slice(0, 1).toString('hex'), 16)\\n this.codec = multicodec.getCodec(cid.slice(1))\\n this.multihash = multicodec.rmPrefix(cid.slice(1))\\n this.multibaseName = baseName\\n } else {\\n // version is a base58btc string multihash, so v0\\n this.version = 0\\n this.codec = 'dag-pb'\\n this.multihash = mh.fromB58String(version)\\n this.multibaseName = 'base58btc'\\n }\\n CID.validateCID(this)\\n Object.defineProperty(this, 'string', { value: version })\\n return\\n }\\n\\n if (Buffer.isBuffer(version)) {\\n const firstByte = version.slice(0, 1)\\n const v = parseInt(firstByte.toString('hex'), 16)\\n if (v === 1) {\\n // version is a CID buffer\\n const cid = version\\n this.version = v\\n this.codec = multicodec.getCodec(cid.slice(1))\\n this.multihash = multicodec.rmPrefix(cid.slice(1))\\n this.multibaseName = 'base32'\\n } else {\\n // version is a raw multihash buffer, so v0\\n this.version = 0\\n this.codec = 'dag-pb'\\n this.multihash = version\\n this.multibaseName = 'base58btc'\\n }\\n CID.validateCID(this)\\n return\\n }\\n\\n // otherwise, assemble the CID from the parameters\\n\\n /**\\n * @type {number}\\n */\\n this.version = version\\n\\n /**\\n * @type {string}\\n */\\n this.codec = codec\\n\\n /**\\n * @type {Buffer}\\n */\\n this.multihash = multihash\\n\\n /**\\n * @type {string}\\n */\\n this.multibaseName = multibaseName || (version === 0 ? 'base58btc' : 'base32')\\n\\n CID.validateCID(this)\\n }\\n\\n /**\\n * The CID as a `Buffer`\\n *\\n * @return {Buffer}\\n * @readonly\\n *\\n * @memberOf CID\\n */\\n get buffer () {\\n let buffer = this._buffer\\n\\n if (!buffer) {\\n if (this.version === 0) {\\n buffer = this.multihash\\n } else if (this.version === 1) {\\n buffer = Buffer.concat([\\n Buffer.from('01', 'hex'),\\n multicodec.getCodeVarint(this.codec),\\n this.multihash\\n ])\\n } else {\\n throw new Error('unsupported version')\\n }\\n\\n // Cache this buffer so it doesn't have to be recreated\\n Object.defineProperty(this, '_buffer', { value: buffer })\\n }\\n\\n return buffer\\n }\\n\\n /**\\n * Get the prefix of the CID.\\n *\\n * @returns {Buffer}\\n * @readonly\\n */\\n get prefix () {\\n return Buffer.concat([\\n Buffer.from(`0${this.version}`, 'hex'),\\n multicodec.getCodeVarint(this.codec),\\n mh.prefix(this.multihash)\\n ])\\n }\\n\\n /**\\n * Convert to a CID of version `0`.\\n *\\n * @returns {CID}\\n */\\n toV0 () {\\n if (this.codec !== 'dag-pb') {\\n throw new Error('Cannot convert a non dag-pb CID to CIDv0')\\n }\\n\\n const { name, length } = mh.decode(this.multihash)\\n\\n if (name !== 'sha2-256') {\\n throw new Error('Cannot convert non sha2-256 multihash CID to CIDv0')\\n }\\n\\n if (length !== 32) {\\n throw new Error('Cannot convert non 32 byte multihash CID to CIDv0')\\n }\\n\\n return new _CID(0, this.codec, this.multihash)\\n }\\n\\n /**\\n * Convert to a CID of version `1`.\\n *\\n * @returns {CID}\\n */\\n toV1 () {\\n return new _CID(1, this.codec, this.multihash)\\n }\\n\\n /**\\n * Encode the CID into a string.\\n *\\n * @param {string} [base=this.multibaseName] - Base encoding to use.\\n * @returns {string}\\n */\\n toBaseEncodedString (base = this.multibaseName) {\\n if (this.string && base === this.multibaseName) {\\n return this.string\\n }\\n let str = null\\n if (this.version === 0) {\\n if (base !== 'base58btc') {\\n throw new Error('not supported with CIDv0, to support different bases, please migrate the instance do CIDv1, you can do that through cid.toV1()')\\n }\\n str = mh.toB58String(this.multihash)\\n } else if (this.version === 1) {\\n str = multibase.encode(base, this.buffer).toString()\\n } else {\\n throw new Error('unsupported version')\\n }\\n if (base === this.multibaseName) {\\n // cache the string value\\n Object.defineProperty(this, 'string', { value: str })\\n }\\n return str\\n }\\n\\n toString (base) {\\n return this.toBaseEncodedString(base)\\n }\\n\\n /**\\n * Serialize to a plain object.\\n *\\n * @returns {SerializedCID}\\n */\\n toJSON () {\\n return {\\n codec: this.codec,\\n version: this.version,\\n hash: this.multihash\\n }\\n }\\n\\n /**\\n * Compare equality with another CID.\\n *\\n * @param {CID} other\\n * @returns {bool}\\n */\\n equals (other) {\\n return this.codec === other.codec &&\\n this.version === other.version &&\\n this.multihash.equals(other.multihash)\\n }\\n\\n /**\\n * Test if the given input is a valid CID object.\\n * Throws if it is not.\\n *\\n * @param {any} other\\n * @returns {void}\\n */\\n static validateCID (other) {\\n const errorMsg = CIDUtil.checkCIDComponents(other)\\n if (errorMsg) {\\n throw new Error(errorMsg)\\n }\\n }\\n}\\n\\nconst _CID = withIs(CID, {\\n className: 'CID',\\n symbolName: '@ipld/js-cid/CID'\\n})\\n\\n_CID.codecs = codecs\\n\\nmodule.exports = _CID\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/orbit-db-io/node_modules/cids/src/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/orbit-db-io/node_modules/multicodec/src/base-table.json\":\n/*!******************************************************************************!*\\\n !*** ./node_modules/orbit-db-io/node_modules/multicodec/src/base-table.json ***!\n \\******************************************************************************/\n/*! exports provided: identity, ip4, tcp, sha1, sha2-256, sha2-512, sha3-512, sha3-384, sha3-256, sha3-224, shake-128, shake-256, keccak-224, keccak-256, keccak-384, keccak-512, dccp, murmur3-128, murmur3-32, ip6, ip6zone, path, multicodec, multihash, multiaddr, multibase, dns, dns4, dns6, dnsaddr, protobuf, cbor, raw, dbl-sha2-256, rlp, bencode, dag-pb, dag-cbor, libp2p-key, git-raw, torrent-info, torrent-file, leofcoin-block, leofcoin-tx, leofcoin-pr, sctp, eth-block, eth-block-list, eth-tx-trie, eth-tx, eth-tx-receipt-trie, eth-tx-receipt, eth-state-trie, eth-account-snapshot, eth-storage-trie, bitcoin-block, bitcoin-tx, zcash-block, zcash-tx, stellar-block, stellar-tx, md4, md5, bmt, decred-block, decred-tx, ipld-ns, ipfs-ns, swarm-ns, ipns-ns, zeronet, ed25519-pub, dash-block, dash-tx, swarm-manifest, swarm-feed, udp, p2p-webrtc-star, p2p-webrtc-direct, p2p-stardust, p2p-circuit, dag-json, udt, utp, unix, p2p, ipfs, https, onion, onion3, garlic64, garlic32, tls, quic, ws, wss, p2p-websocket-star, http, json, messagepack, x11, blake2b-8, blake2b-16, blake2b-24, blake2b-32, blake2b-40, blake2b-48, blake2b-56, blake2b-64, blake2b-72, blake2b-80, blake2b-88, blake2b-96, blake2b-104, blake2b-112, blake2b-120, blake2b-128, blake2b-136, blake2b-144, blake2b-152, blake2b-160, blake2b-168, blake2b-176, blake2b-184, blake2b-192, blake2b-200, blake2b-208, blake2b-216, blake2b-224, blake2b-232, blake2b-240, blake2b-248, blake2b-256, blake2b-264, blake2b-272, blake2b-280, blake2b-288, blake2b-296, blake2b-304, blake2b-312, blake2b-320, blake2b-328, blake2b-336, blake2b-344, blake2b-352, blake2b-360, blake2b-368, blake2b-376, blake2b-384, blake2b-392, blake2b-400, blake2b-408, blake2b-416, blake2b-424, blake2b-432, blake2b-440, blake2b-448, blake2b-456, blake2b-464, blake2b-472, blake2b-480, blake2b-488, blake2b-496, blake2b-504, blake2b-512, blake2s-8, blake2s-16, blake2s-24, blake2s-32, blake2s-40, blake2s-48, blake2s-56, blake2s-64, blake2s-72, blake2s-80, blake2s-88, blake2s-96, blake2s-104, blake2s-112, blake2s-120, blake2s-128, blake2s-136, blake2s-144, blake2s-152, blake2s-160, blake2s-168, blake2s-176, blake2s-184, blake2s-192, blake2s-200, blake2s-208, blake2s-216, blake2s-224, blake2s-232, blake2s-240, blake2s-248, blake2s-256, skein256-8, skein256-16, skein256-24, skein256-32, skein256-40, skein256-48, skein256-56, skein256-64, skein256-72, skein256-80, skein256-88, skein256-96, skein256-104, skein256-112, skein256-120, skein256-128, skein256-136, skein256-144, skein256-152, skein256-160, skein256-168, skein256-176, skein256-184, skein256-192, skein256-200, skein256-208, skein256-216, skein256-224, skein256-232, skein256-240, skein256-248, skein256-256, skein512-8, skein512-16, skein512-24, skein512-32, skein512-40, skein512-48, skein512-56, skein512-64, skein512-72, skein512-80, skein512-88, skein512-96, skein512-104, skein512-112, skein512-120, skein512-128, skein512-136, skein512-144, skein512-152, skein512-160, skein512-168, skein512-176, skein512-184, skein512-192, skein512-200, skein512-208, skein512-216, skein512-224, skein512-232, skein512-240, skein512-248, skein512-256, skein512-264, skein512-272, skein512-280, skein512-288, skein512-296, skein512-304, skein512-312, skein512-320, skein512-328, skein512-336, skein512-344, skein512-352, skein512-360, skein512-368, skein512-376, skein512-384, skein512-392, skein512-400, skein512-408, skein512-416, skein512-424, skein512-432, skein512-440, skein512-448, skein512-456, skein512-464, skein512-472, skein512-480, skein512-488, skein512-496, skein512-504, skein512-512, skein1024-8, skein1024-16, skein1024-24, skein1024-32, skein1024-40, skein1024-48, skein1024-56, skein1024-64, skein1024-72, skein1024-80, skein1024-88, skein1024-96, skein1024-104, skein1024-112, skein1024-120, skein1024-128, skein1024-136, skein1024-144, skein1024-152, skein1024-160, skein1024-168, skein1024-176, skein1024-184, skein1024-192, skein1024-200, skein1024-208, skein1024-216, skein1024-224, skein1024-232, skein1024-240, skein1024-248, skein1024-256, skein1024-264, skein1024-272, skein1024-280, skein1024-288, skein1024-296, skein1024-304, skein1024-312, skein1024-320, skein1024-328, skein1024-336, skein1024-344, skein1024-352, skein1024-360, skein1024-368, skein1024-376, skein1024-384, skein1024-392, skein1024-400, skein1024-408, skein1024-416, skein1024-424, skein1024-432, skein1024-440, skein1024-448, skein1024-456, skein1024-464, skein1024-472, skein1024-480, skein1024-488, skein1024-496, skein1024-504, skein1024-512, skein1024-520, skein1024-528, skein1024-536, skein1024-544, skein1024-552, skein1024-560, skein1024-568, skein1024-576, skein1024-584, skein1024-592, skein1024-600, skein1024-608, skein1024-616, skein1024-624, skein1024-632, skein1024-640, skein1024-648, skein1024-656, skein1024-664, skein1024-672, skein1024-680, skein1024-688, skein1024-696, skein1024-704, skein1024-712, skein1024-720, skein1024-728, skein1024-736, skein1024-744, skein1024-752, skein1024-760, skein1024-768, skein1024-776, skein1024-784, skein1024-792, skein1024-800, skein1024-808, skein1024-816, skein1024-824, skein1024-832, skein1024-840, skein1024-848, skein1024-856, skein1024-864, skein1024-872, skein1024-880, skein1024-888, skein1024-896, skein1024-904, skein1024-912, skein1024-920, skein1024-928, skein1024-936, skein1024-944, skein1024-952, skein1024-960, skein1024-968, skein1024-976, skein1024-984, skein1024-992, skein1024-1000, skein1024-1008, skein1024-1016, skein1024-1024, holochain-adr-v0, holochain-adr-v1, holochain-key-v0, holochain-key-v1, holochain-sig-v0, holochain-sig-v1, default */\n/***/ (function(module) {\n\neval(\"module.exports = {\\\"identity\\\":0,\\\"ip4\\\":4,\\\"tcp\\\":6,\\\"sha1\\\":17,\\\"sha2-256\\\":18,\\\"sha2-512\\\":19,\\\"sha3-512\\\":20,\\\"sha3-384\\\":21,\\\"sha3-256\\\":22,\\\"sha3-224\\\":23,\\\"shake-128\\\":24,\\\"shake-256\\\":25,\\\"keccak-224\\\":26,\\\"keccak-256\\\":27,\\\"keccak-384\\\":28,\\\"keccak-512\\\":29,\\\"dccp\\\":33,\\\"murmur3-128\\\":34,\\\"murmur3-32\\\":35,\\\"ip6\\\":41,\\\"ip6zone\\\":42,\\\"path\\\":47,\\\"multicodec\\\":48,\\\"multihash\\\":49,\\\"multiaddr\\\":50,\\\"multibase\\\":51,\\\"dns\\\":53,\\\"dns4\\\":54,\\\"dns6\\\":55,\\\"dnsaddr\\\":56,\\\"protobuf\\\":80,\\\"cbor\\\":81,\\\"raw\\\":85,\\\"dbl-sha2-256\\\":86,\\\"rlp\\\":96,\\\"bencode\\\":99,\\\"dag-pb\\\":112,\\\"dag-cbor\\\":113,\\\"libp2p-key\\\":114,\\\"git-raw\\\":120,\\\"torrent-info\\\":123,\\\"torrent-file\\\":124,\\\"leofcoin-block\\\":129,\\\"leofcoin-tx\\\":130,\\\"leofcoin-pr\\\":131,\\\"sctp\\\":132,\\\"eth-block\\\":144,\\\"eth-block-list\\\":145,\\\"eth-tx-trie\\\":146,\\\"eth-tx\\\":147,\\\"eth-tx-receipt-trie\\\":148,\\\"eth-tx-receipt\\\":149,\\\"eth-state-trie\\\":150,\\\"eth-account-snapshot\\\":151,\\\"eth-storage-trie\\\":152,\\\"bitcoin-block\\\":176,\\\"bitcoin-tx\\\":177,\\\"zcash-block\\\":192,\\\"zcash-tx\\\":193,\\\"stellar-block\\\":208,\\\"stellar-tx\\\":209,\\\"md4\\\":212,\\\"md5\\\":213,\\\"bmt\\\":214,\\\"decred-block\\\":224,\\\"decred-tx\\\":225,\\\"ipld-ns\\\":226,\\\"ipfs-ns\\\":227,\\\"swarm-ns\\\":228,\\\"ipns-ns\\\":229,\\\"zeronet\\\":230,\\\"ed25519-pub\\\":237,\\\"dash-block\\\":240,\\\"dash-tx\\\":241,\\\"swarm-manifest\\\":250,\\\"swarm-feed\\\":251,\\\"udp\\\":273,\\\"p2p-webrtc-star\\\":275,\\\"p2p-webrtc-direct\\\":276,\\\"p2p-stardust\\\":277,\\\"p2p-circuit\\\":290,\\\"dag-json\\\":297,\\\"udt\\\":301,\\\"utp\\\":302,\\\"unix\\\":400,\\\"p2p\\\":421,\\\"ipfs\\\":421,\\\"https\\\":443,\\\"onion\\\":444,\\\"onion3\\\":445,\\\"garlic64\\\":446,\\\"garlic32\\\":447,\\\"tls\\\":448,\\\"quic\\\":460,\\\"ws\\\":477,\\\"wss\\\":478,\\\"p2p-websocket-star\\\":479,\\\"http\\\":480,\\\"json\\\":512,\\\"messagepack\\\":513,\\\"x11\\\":4352,\\\"blake2b-8\\\":45569,\\\"blake2b-16\\\":45570,\\\"blake2b-24\\\":45571,\\\"blake2b-32\\\":45572,\\\"blake2b-40\\\":45573,\\\"blake2b-48\\\":45574,\\\"blake2b-56\\\":45575,\\\"blake2b-64\\\":45576,\\\"blake2b-72\\\":45577,\\\"blake2b-80\\\":45578,\\\"blake2b-88\\\":45579,\\\"blake2b-96\\\":45580,\\\"blake2b-104\\\":45581,\\\"blake2b-112\\\":45582,\\\"blake2b-120\\\":45583,\\\"blake2b-128\\\":45584,\\\"blake2b-136\\\":45585,\\\"blake2b-144\\\":45586,\\\"blake2b-152\\\":45587,\\\"blake2b-160\\\":45588,\\\"blake2b-168\\\":45589,\\\"blake2b-176\\\":45590,\\\"blake2b-184\\\":45591,\\\"blake2b-192\\\":45592,\\\"blake2b-200\\\":45593,\\\"blake2b-208\\\":45594,\\\"blake2b-216\\\":45595,\\\"blake2b-224\\\":45596,\\\"blake2b-232\\\":45597,\\\"blake2b-240\\\":45598,\\\"blake2b-248\\\":45599,\\\"blake2b-256\\\":45600,\\\"blake2b-264\\\":45601,\\\"blake2b-272\\\":45602,\\\"blake2b-280\\\":45603,\\\"blake2b-288\\\":45604,\\\"blake2b-296\\\":45605,\\\"blake2b-304\\\":45606,\\\"blake2b-312\\\":45607,\\\"blake2b-320\\\":45608,\\\"blake2b-328\\\":45609,\\\"blake2b-336\\\":45610,\\\"blake2b-344\\\":45611,\\\"blake2b-352\\\":45612,\\\"blake2b-360\\\":45613,\\\"blake2b-368\\\":45614,\\\"blake2b-376\\\":45615,\\\"blake2b-384\\\":45616,\\\"blake2b-392\\\":45617,\\\"blake2b-400\\\":45618,\\\"blake2b-408\\\":45619,\\\"blake2b-416\\\":45620,\\\"blake2b-424\\\":45621,\\\"blake2b-432\\\":45622,\\\"blake2b-440\\\":45623,\\\"blake2b-448\\\":45624,\\\"blake2b-456\\\":45625,\\\"blake2b-464\\\":45626,\\\"blake2b-472\\\":45627,\\\"blake2b-480\\\":45628,\\\"blake2b-488\\\":45629,\\\"blake2b-496\\\":45630,\\\"blake2b-504\\\":45631,\\\"blake2b-512\\\":45632,\\\"blake2s-8\\\":45633,\\\"blake2s-16\\\":45634,\\\"blake2s-24\\\":45635,\\\"blake2s-32\\\":45636,\\\"blake2s-40\\\":45637,\\\"blake2s-48\\\":45638,\\\"blake2s-56\\\":45639,\\\"blake2s-64\\\":45640,\\\"blake2s-72\\\":45641,\\\"blake2s-80\\\":45642,\\\"blake2s-88\\\":45643,\\\"blake2s-96\\\":45644,\\\"blake2s-104\\\":45645,\\\"blake2s-112\\\":45646,\\\"blake2s-120\\\":45647,\\\"blake2s-128\\\":45648,\\\"blake2s-136\\\":45649,\\\"blake2s-144\\\":45650,\\\"blake2s-152\\\":45651,\\\"blake2s-160\\\":45652,\\\"blake2s-168\\\":45653,\\\"blake2s-176\\\":45654,\\\"blake2s-184\\\":45655,\\\"blake2s-192\\\":45656,\\\"blake2s-200\\\":45657,\\\"blake2s-208\\\":45658,\\\"blake2s-216\\\":45659,\\\"blake2s-224\\\":45660,\\\"blake2s-232\\\":45661,\\\"blake2s-240\\\":45662,\\\"blake2s-248\\\":45663,\\\"blake2s-256\\\":45664,\\\"skein256-8\\\":45825,\\\"skein256-16\\\":45826,\\\"skein256-24\\\":45827,\\\"skein256-32\\\":45828,\\\"skein256-40\\\":45829,\\\"skein256-48\\\":45830,\\\"skein256-56\\\":45831,\\\"skein256-64\\\":45832,\\\"skein256-72\\\":45833,\\\"skein256-80\\\":45834,\\\"skein256-88\\\":45835,\\\"skein256-96\\\":45836,\\\"skein256-104\\\":45837,\\\"skein256-112\\\":45838,\\\"skein256-120\\\":45839,\\\"skein256-128\\\":45840,\\\"skein256-136\\\":45841,\\\"skein256-144\\\":45842,\\\"skein256-152\\\":45843,\\\"skein256-160\\\":45844,\\\"skein256-168\\\":45845,\\\"skein256-176\\\":45846,\\\"skein256-184\\\":45847,\\\"skein256-192\\\":45848,\\\"skein256-200\\\":45849,\\\"skein256-208\\\":45850,\\\"skein256-216\\\":45851,\\\"skein256-224\\\":45852,\\\"skein256-232\\\":45853,\\\"skein256-240\\\":45854,\\\"skein256-248\\\":45855,\\\"skein256-256\\\":45856,\\\"skein512-8\\\":45857,\\\"skein512-16\\\":45858,\\\"skein512-24\\\":45859,\\\"skein512-32\\\":45860,\\\"skein512-40\\\":45861,\\\"skein512-48\\\":45862,\\\"skein512-56\\\":45863,\\\"skein512-64\\\":45864,\\\"skein512-72\\\":45865,\\\"skein512-80\\\":45866,\\\"skein512-88\\\":45867,\\\"skein512-96\\\":45868,\\\"skein512-104\\\":45869,\\\"skein512-112\\\":45870,\\\"skein512-120\\\":45871,\\\"skein512-128\\\":45872,\\\"skein512-136\\\":45873,\\\"skein512-144\\\":45874,\\\"skein512-152\\\":45875,\\\"skein512-160\\\":45876,\\\"skein512-168\\\":45877,\\\"skein512-176\\\":45878,\\\"skein512-184\\\":45879,\\\"skein512-192\\\":45880,\\\"skein512-200\\\":45881,\\\"skein512-208\\\":45882,\\\"skein512-216\\\":45883,\\\"skein512-224\\\":45884,\\\"skein512-232\\\":45885,\\\"skein512-240\\\":45886,\\\"skein512-248\\\":45887,\\\"skein512-256\\\":45888,\\\"skein512-264\\\":45889,\\\"skein512-272\\\":45890,\\\"skein512-280\\\":45891,\\\"skein512-288\\\":45892,\\\"skein512-296\\\":45893,\\\"skein512-304\\\":45894,\\\"skein512-312\\\":45895,\\\"skein512-320\\\":45896,\\\"skein512-328\\\":45897,\\\"skein512-336\\\":45898,\\\"skein512-344\\\":45899,\\\"skein512-352\\\":45900,\\\"skein512-360\\\":45901,\\\"skein512-368\\\":45902,\\\"skein512-376\\\":45903,\\\"skein512-384\\\":45904,\\\"skein512-392\\\":45905,\\\"skein512-400\\\":45906,\\\"skein512-408\\\":45907,\\\"skein512-416\\\":45908,\\\"skein512-424\\\":45909,\\\"skein512-432\\\":45910,\\\"skein512-440\\\":45911,\\\"skein512-448\\\":45912,\\\"skein512-456\\\":45913,\\\"skein512-464\\\":45914,\\\"skein512-472\\\":45915,\\\"skein512-480\\\":45916,\\\"skein512-488\\\":45917,\\\"skein512-496\\\":45918,\\\"skein512-504\\\":45919,\\\"skein512-512\\\":45920,\\\"skein1024-8\\\":45921,\\\"skein1024-16\\\":45922,\\\"skein1024-24\\\":45923,\\\"skein1024-32\\\":45924,\\\"skein1024-40\\\":45925,\\\"skein1024-48\\\":45926,\\\"skein1024-56\\\":45927,\\\"skein1024-64\\\":45928,\\\"skein1024-72\\\":45929,\\\"skein1024-80\\\":45930,\\\"skein1024-88\\\":45931,\\\"skein1024-96\\\":45932,\\\"skein1024-104\\\":45933,\\\"skein1024-112\\\":45934,\\\"skein1024-120\\\":45935,\\\"skein1024-128\\\":45936,\\\"skein1024-136\\\":45937,\\\"skein1024-144\\\":45938,\\\"skein1024-152\\\":45939,\\\"skein1024-160\\\":45940,\\\"skein1024-168\\\":45941,\\\"skein1024-176\\\":45942,\\\"skein1024-184\\\":45943,\\\"skein1024-192\\\":45944,\\\"skein1024-200\\\":45945,\\\"skein1024-208\\\":45946,\\\"skein1024-216\\\":45947,\\\"skein1024-224\\\":45948,\\\"skein1024-232\\\":45949,\\\"skein1024-240\\\":45950,\\\"skein1024-248\\\":45951,\\\"skein1024-256\\\":45952,\\\"skein1024-264\\\":45953,\\\"skein1024-272\\\":45954,\\\"skein1024-280\\\":45955,\\\"skein1024-288\\\":45956,\\\"skein1024-296\\\":45957,\\\"skein1024-304\\\":45958,\\\"skein1024-312\\\":45959,\\\"skein1024-320\\\":45960,\\\"skein1024-328\\\":45961,\\\"skein1024-336\\\":45962,\\\"skein1024-344\\\":45963,\\\"skein1024-352\\\":45964,\\\"skein1024-360\\\":45965,\\\"skein1024-368\\\":45966,\\\"skein1024-376\\\":45967,\\\"skein1024-384\\\":45968,\\\"skein1024-392\\\":45969,\\\"skein1024-400\\\":45970,\\\"skein1024-408\\\":45971,\\\"skein1024-416\\\":45972,\\\"skein1024-424\\\":45973,\\\"skein1024-432\\\":45974,\\\"skein1024-440\\\":45975,\\\"skein1024-448\\\":45976,\\\"skein1024-456\\\":45977,\\\"skein1024-464\\\":45978,\\\"skein1024-472\\\":45979,\\\"skein1024-480\\\":45980,\\\"skein1024-488\\\":45981,\\\"skein1024-496\\\":45982,\\\"skein1024-504\\\":45983,\\\"skein1024-512\\\":45984,\\\"skein1024-520\\\":45985,\\\"skein1024-528\\\":45986,\\\"skein1024-536\\\":45987,\\\"skein1024-544\\\":45988,\\\"skein1024-552\\\":45989,\\\"skein1024-560\\\":45990,\\\"skein1024-568\\\":45991,\\\"skein1024-576\\\":45992,\\\"skein1024-584\\\":45993,\\\"skein1024-592\\\":45994,\\\"skein1024-600\\\":45995,\\\"skein1024-608\\\":45996,\\\"skein1024-616\\\":45997,\\\"skein1024-624\\\":45998,\\\"skein1024-632\\\":45999,\\\"skein1024-640\\\":46000,\\\"skein1024-648\\\":46001,\\\"skein1024-656\\\":46002,\\\"skein1024-664\\\":46003,\\\"skein1024-672\\\":46004,\\\"skein1024-680\\\":46005,\\\"skein1024-688\\\":46006,\\\"skein1024-696\\\":46007,\\\"skein1024-704\\\":46008,\\\"skein1024-712\\\":46009,\\\"skein1024-720\\\":46010,\\\"skein1024-728\\\":46011,\\\"skein1024-736\\\":46012,\\\"skein1024-744\\\":46013,\\\"skein1024-752\\\":46014,\\\"skein1024-760\\\":46015,\\\"skein1024-768\\\":46016,\\\"skein1024-776\\\":46017,\\\"skein1024-784\\\":46018,\\\"skein1024-792\\\":46019,\\\"skein1024-800\\\":46020,\\\"skein1024-808\\\":46021,\\\"skein1024-816\\\":46022,\\\"skein1024-824\\\":46023,\\\"skein1024-832\\\":46024,\\\"skein1024-840\\\":46025,\\\"skein1024-848\\\":46026,\\\"skein1024-856\\\":46027,\\\"skein1024-864\\\":46028,\\\"skein1024-872\\\":46029,\\\"skein1024-880\\\":46030,\\\"skein1024-888\\\":46031,\\\"skein1024-896\\\":46032,\\\"skein1024-904\\\":46033,\\\"skein1024-912\\\":46034,\\\"skein1024-920\\\":46035,\\\"skein1024-928\\\":46036,\\\"skein1024-936\\\":46037,\\\"skein1024-944\\\":46038,\\\"skein1024-952\\\":46039,\\\"skein1024-960\\\":46040,\\\"skein1024-968\\\":46041,\\\"skein1024-976\\\":46042,\\\"skein1024-984\\\":46043,\\\"skein1024-992\\\":46044,\\\"skein1024-1000\\\":46045,\\\"skein1024-1008\\\":46046,\\\"skein1024-1016\\\":46047,\\\"skein1024-1024\\\":46048,\\\"holochain-adr-v0\\\":8417572,\\\"holochain-adr-v1\\\":8483108,\\\"holochain-key-v0\\\":9728292,\\\"holochain-key-v1\\\":9793828,\\\"holochain-sig-v0\\\":10645796,\\\"holochain-sig-v1\\\":10711332};\\n\\n//# sourceURL=webpack:///./node_modules/orbit-db-io/node_modules/multicodec/src/base-table.json?\");\n\n/***/ }),\n\n/***/ \"./node_modules/orbit-db-io/node_modules/multicodec/src/constants.js\":\n/*!***************************************************************************!*\\\n !*** ./node_modules/orbit-db-io/node_modules/multicodec/src/constants.js ***!\n \\***************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst table = __webpack_require__(/*! ./base-table.json */ \\\"./node_modules/orbit-db-io/node_modules/multicodec/src/base-table.json\\\")\\n\\n// map for codecConstant -> code\\nconst constants = {}\\n\\nfor (const [name, code] of Object.entries(table)) {\\n constants[name.toUpperCase().replace(/-/g, '_')] = code\\n}\\n\\nmodule.exports = Object.freeze(constants)\\n\\n\\n//# sourceURL=webpack:///./node_modules/orbit-db-io/node_modules/multicodec/src/constants.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/orbit-db-io/node_modules/multicodec/src/index.js\":\n/*!***********************************************************************!*\\\n !*** ./node_modules/orbit-db-io/node_modules/multicodec/src/index.js ***!\n \\***********************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {/**\\n * Implementation of the multicodec specification.\\n *\\n * @module multicodec\\n * @example\\n * const multicodec = require('multicodec')\\n *\\n * const prefixedProtobuf = multicodec.addPrefix('protobuf', protobufBuffer)\\n * // prefixedProtobuf 0x50...\\n *\\n */\\n\\n\\nconst varint = __webpack_require__(/*! varint */ \\\"./node_modules/varint/index.js\\\")\\nconst intTable = __webpack_require__(/*! ./int-table */ \\\"./node_modules/orbit-db-io/node_modules/multicodec/src/int-table.js\\\")\\nconst codecNameToCodeVarint = __webpack_require__(/*! ./varint-table */ \\\"./node_modules/orbit-db-io/node_modules/multicodec/src/varint-table.js\\\")\\nconst util = __webpack_require__(/*! ./util */ \\\"./node_modules/orbit-db-io/node_modules/multicodec/src/util.js\\\")\\n\\nexports = module.exports\\n\\n/**\\n * Prefix a buffer with a multicodec-packed.\\n *\\n * @param {string|number} multicodecStrOrCode\\n * @param {Buffer} data\\n * @returns {Buffer}\\n */\\nexports.addPrefix = (multicodecStrOrCode, data) => {\\n let prefix\\n\\n if (Buffer.isBuffer(multicodecStrOrCode)) {\\n prefix = util.varintBufferEncode(multicodecStrOrCode)\\n } else {\\n if (codecNameToCodeVarint[multicodecStrOrCode]) {\\n prefix = codecNameToCodeVarint[multicodecStrOrCode]\\n } else {\\n throw new Error('multicodec not recognized')\\n }\\n }\\n return Buffer.concat([prefix, data])\\n}\\n\\n/**\\n * Decapsulate the multicodec-packed prefix from the data.\\n *\\n * @param {Buffer} data\\n * @returns {Buffer}\\n */\\nexports.rmPrefix = (data) => {\\n varint.decode(data)\\n return data.slice(varint.decode.bytes)\\n}\\n\\n/**\\n * Get the codec of the prefixed data.\\n * @param {Buffer} prefixedData\\n * @returns {string}\\n */\\nexports.getCodec = (prefixedData) => {\\n const code = varint.decode(prefixedData)\\n const codecName = intTable.get(code)\\n if (codecName === undefined) {\\n throw new Error(`Code ${code} not found`)\\n }\\n return codecName\\n}\\n\\n/**\\n * Get the name of the codec.\\n * @param {number} codec\\n * @returns {string}\\n */\\nexports.getName = (codec) => {\\n return intTable.get(codec)\\n}\\n\\n/**\\n * Get the code of the codec\\n * @param {string} name\\n * @returns {number}\\n */\\nexports.getNumber = (name) => {\\n const code = codecNameToCodeVarint[name]\\n if (code === undefined) {\\n throw new Error('Codec `' + name + '` not found')\\n }\\n return util.varintBufferDecode(code)[0]\\n}\\n\\n/**\\n * Get the code of the prefixed data.\\n * @param {Buffer} prefixedData\\n * @returns {number}\\n */\\nexports.getCode = (prefixedData) => {\\n return varint.decode(prefixedData)\\n}\\n\\n/**\\n * Get the code as varint of a codec name.\\n * @param {string} codecName\\n * @returns {Buffer}\\n */\\nexports.getCodeVarint = (codecName) => {\\n const code = codecNameToCodeVarint[codecName]\\n if (code === undefined) {\\n throw new Error('Codec `' + codecName + '` not found')\\n }\\n return code\\n}\\n\\n/**\\n * Get the varint of a code.\\n * @param {Number} code\\n * @returns {Array.<number>}\\n */\\nexports.getVarint = (code) => {\\n return varint.encode(code)\\n}\\n\\n// Make the constants top-level constants\\nconst constants = __webpack_require__(/*! ./constants */ \\\"./node_modules/orbit-db-io/node_modules/multicodec/src/constants.js\\\")\\nObject.assign(exports, constants)\\n\\n// Human friendly names for printing, e.g. in error messages\\nexports.print = __webpack_require__(/*! ./print */ \\\"./node_modules/orbit-db-io/node_modules/multicodec/src/print.js\\\")\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/orbit-db-io/node_modules/multicodec/src/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/orbit-db-io/node_modules/multicodec/src/int-table.js\":\n/*!***************************************************************************!*\\\n !*** ./node_modules/orbit-db-io/node_modules/multicodec/src/int-table.js ***!\n \\***************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nconst baseTable = __webpack_require__(/*! ./base-table.json */ \\\"./node_modules/orbit-db-io/node_modules/multicodec/src/base-table.json\\\")\\n\\n// map for hexString -> codecName\\nconst nameTable = new Map()\\n\\nfor (const encodingName in baseTable) {\\n const code = baseTable[encodingName]\\n nameTable.set(code, encodingName)\\n}\\n\\nmodule.exports = Object.freeze(nameTable)\\n\\n\\n//# sourceURL=webpack:///./node_modules/orbit-db-io/node_modules/multicodec/src/int-table.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/orbit-db-io/node_modules/multicodec/src/print.js\":\n/*!***********************************************************************!*\\\n !*** ./node_modules/orbit-db-io/node_modules/multicodec/src/print.js ***!\n \\***********************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst table = __webpack_require__(/*! ./base-table.json */ \\\"./node_modules/orbit-db-io/node_modules/multicodec/src/base-table.json\\\")\\n\\n// map for code -> print friendly name\\nconst tableByCode = {}\\n\\nfor (const [name, code] of Object.entries(table)) {\\n if (tableByCode[code] === undefined) tableByCode[code] = name\\n}\\n\\nmodule.exports = Object.freeze(tableByCode)\\n\\n\\n//# sourceURL=webpack:///./node_modules/orbit-db-io/node_modules/multicodec/src/print.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/orbit-db-io/node_modules/multicodec/src/util.js\":\n/*!**********************************************************************!*\\\n !*** ./node_modules/orbit-db-io/node_modules/multicodec/src/util.js ***!\n \\**********************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {\\nconst varint = __webpack_require__(/*! varint */ \\\"./node_modules/varint/index.js\\\")\\n\\nmodule.exports = {\\n numberToBuffer,\\n bufferToNumber,\\n varintBufferEncode,\\n varintBufferDecode,\\n varintEncode\\n}\\n\\nfunction bufferToNumber (buf) {\\n return parseInt(buf.toString('hex'), 16)\\n}\\n\\nfunction numberToBuffer (num) {\\n let hexString = num.toString(16)\\n if (hexString.length % 2 === 1) {\\n hexString = '0' + hexString\\n }\\n return Buffer.from(hexString, 'hex')\\n}\\n\\nfunction varintBufferEncode (input) {\\n return Buffer.from(varint.encode(bufferToNumber(input)))\\n}\\n\\nfunction varintBufferDecode (input) {\\n return numberToBuffer(varint.decode(input))\\n}\\n\\nfunction varintEncode (num) {\\n return Buffer.from(varint.encode(num))\\n}\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/orbit-db-io/node_modules/multicodec/src/util.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/orbit-db-io/node_modules/multicodec/src/varint-table.js\":\n/*!******************************************************************************!*\\\n !*** ./node_modules/orbit-db-io/node_modules/multicodec/src/varint-table.js ***!\n \\******************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst baseTable = __webpack_require__(/*! ./base-table.json */ \\\"./node_modules/orbit-db-io/node_modules/multicodec/src/base-table.json\\\")\\nconst varintEncode = __webpack_require__(/*! ./util */ \\\"./node_modules/orbit-db-io/node_modules/multicodec/src/util.js\\\").varintEncode\\n\\n// map for codecName -> codeVarintBuffer\\nconst varintTable = {}\\n\\nfor (const encodingName in baseTable) {\\n const code = baseTable[encodingName]\\n varintTable[encodingName] = varintEncode(code)\\n}\\n\\nmodule.exports = Object.freeze(varintTable)\\n\\n\\n//# sourceURL=webpack:///./node_modules/orbit-db-io/node_modules/multicodec/src/varint-table.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/orbit-db-io/node_modules/multihashes/src/constants.js\":\n/*!****************************************************************************!*\\\n !*** ./node_modules/orbit-db-io/node_modules/multihashes/src/constants.js ***!\n \\****************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* eslint quote-props: off */\\n/* eslint key-spacing: off */\\n\\n\\nexports.names = Object.freeze({\\n 'identity': 0x0,\\n 'sha1': 0x11,\\n 'sha2-256': 0x12,\\n 'sha2-512': 0x13,\\n 'dbl-sha2-256': 0x56,\\n 'sha3-224': 0x17,\\n 'sha3-256': 0x16,\\n 'sha3-384': 0x15,\\n 'sha3-512': 0x14,\\n 'shake-128': 0x18,\\n 'shake-256': 0x19,\\n 'keccak-224': 0x1A,\\n 'keccak-256': 0x1B,\\n 'keccak-384': 0x1C,\\n 'keccak-512': 0x1D,\\n 'murmur3-128': 0x22,\\n 'murmur3-32': 0x23,\\n 'blake2b-8': 0xb201,\\n 'blake2b-16': 0xb202,\\n 'blake2b-24': 0xb203,\\n 'blake2b-32': 0xb204,\\n 'blake2b-40': 0xb205,\\n 'blake2b-48': 0xb206,\\n 'blake2b-56': 0xb207,\\n 'blake2b-64': 0xb208,\\n 'blake2b-72': 0xb209,\\n 'blake2b-80': 0xb20a,\\n 'blake2b-88': 0xb20b,\\n 'blake2b-96': 0xb20c,\\n 'blake2b-104': 0xb20d,\\n 'blake2b-112': 0xb20e,\\n 'blake2b-120': 0xb20f,\\n 'blake2b-128': 0xb210,\\n 'blake2b-136': 0xb211,\\n 'blake2b-144': 0xb212,\\n 'blake2b-152': 0xb213,\\n 'blake2b-160': 0xb214,\\n 'blake2b-168': 0xb215,\\n 'blake2b-176': 0xb216,\\n 'blake2b-184': 0xb217,\\n 'blake2b-192': 0xb218,\\n 'blake2b-200': 0xb219,\\n 'blake2b-208': 0xb21a,\\n 'blake2b-216': 0xb21b,\\n 'blake2b-224': 0xb21c,\\n 'blake2b-232': 0xb21d,\\n 'blake2b-240': 0xb21e,\\n 'blake2b-248': 0xb21f,\\n 'blake2b-256': 0xb220,\\n 'blake2b-264': 0xb221,\\n 'blake2b-272': 0xb222,\\n 'blake2b-280': 0xb223,\\n 'blake2b-288': 0xb224,\\n 'blake2b-296': 0xb225,\\n 'blake2b-304': 0xb226,\\n 'blake2b-312': 0xb227,\\n 'blake2b-320': 0xb228,\\n 'blake2b-328': 0xb229,\\n 'blake2b-336': 0xb22a,\\n 'blake2b-344': 0xb22b,\\n 'blake2b-352': 0xb22c,\\n 'blake2b-360': 0xb22d,\\n 'blake2b-368': 0xb22e,\\n 'blake2b-376': 0xb22f,\\n 'blake2b-384': 0xb230,\\n 'blake2b-392': 0xb231,\\n 'blake2b-400': 0xb232,\\n 'blake2b-408': 0xb233,\\n 'blake2b-416': 0xb234,\\n 'blake2b-424': 0xb235,\\n 'blake2b-432': 0xb236,\\n 'blake2b-440': 0xb237,\\n 'blake2b-448': 0xb238,\\n 'blake2b-456': 0xb239,\\n 'blake2b-464': 0xb23a,\\n 'blake2b-472': 0xb23b,\\n 'blake2b-480': 0xb23c,\\n 'blake2b-488': 0xb23d,\\n 'blake2b-496': 0xb23e,\\n 'blake2b-504': 0xb23f,\\n 'blake2b-512': 0xb240,\\n 'blake2s-8': 0xb241,\\n 'blake2s-16': 0xb242,\\n 'blake2s-24': 0xb243,\\n 'blake2s-32': 0xb244,\\n 'blake2s-40': 0xb245,\\n 'blake2s-48': 0xb246,\\n 'blake2s-56': 0xb247,\\n 'blake2s-64': 0xb248,\\n 'blake2s-72': 0xb249,\\n 'blake2s-80': 0xb24a,\\n 'blake2s-88': 0xb24b,\\n 'blake2s-96': 0xb24c,\\n 'blake2s-104': 0xb24d,\\n 'blake2s-112': 0xb24e,\\n 'blake2s-120': 0xb24f,\\n 'blake2s-128': 0xb250,\\n 'blake2s-136': 0xb251,\\n 'blake2s-144': 0xb252,\\n 'blake2s-152': 0xb253,\\n 'blake2s-160': 0xb254,\\n 'blake2s-168': 0xb255,\\n 'blake2s-176': 0xb256,\\n 'blake2s-184': 0xb257,\\n 'blake2s-192': 0xb258,\\n 'blake2s-200': 0xb259,\\n 'blake2s-208': 0xb25a,\\n 'blake2s-216': 0xb25b,\\n 'blake2s-224': 0xb25c,\\n 'blake2s-232': 0xb25d,\\n 'blake2s-240': 0xb25e,\\n 'blake2s-248': 0xb25f,\\n 'blake2s-256': 0xb260,\\n 'Skein256-8': 0xb301,\\n 'Skein256-16': 0xb302,\\n 'Skein256-24': 0xb303,\\n 'Skein256-32': 0xb304,\\n 'Skein256-40': 0xb305,\\n 'Skein256-48': 0xb306,\\n 'Skein256-56': 0xb307,\\n 'Skein256-64': 0xb308,\\n 'Skein256-72': 0xb309,\\n 'Skein256-80': 0xb30a,\\n 'Skein256-88': 0xb30b,\\n 'Skein256-96': 0xb30c,\\n 'Skein256-104': 0xb30d,\\n 'Skein256-112': 0xb30e,\\n 'Skein256-120': 0xb30f,\\n 'Skein256-128': 0xb310,\\n 'Skein256-136': 0xb311,\\n 'Skein256-144': 0xb312,\\n 'Skein256-152': 0xb313,\\n 'Skein256-160': 0xb314,\\n 'Skein256-168': 0xb315,\\n 'Skein256-176': 0xb316,\\n 'Skein256-184': 0xb317,\\n 'Skein256-192': 0xb318,\\n 'Skein256-200': 0xb319,\\n 'Skein256-208': 0xb31a,\\n 'Skein256-216': 0xb31b,\\n 'Skein256-224': 0xb31c,\\n 'Skein256-232': 0xb31d,\\n 'Skein256-240': 0xb31e,\\n 'Skein256-248': 0xb31f,\\n 'Skein256-256': 0xb320,\\n 'Skein512-8': 0xb321,\\n 'Skein512-16': 0xb322,\\n 'Skein512-24': 0xb323,\\n 'Skein512-32': 0xb324,\\n 'Skein512-40': 0xb325,\\n 'Skein512-48': 0xb326,\\n 'Skein512-56': 0xb327,\\n 'Skein512-64': 0xb328,\\n 'Skein512-72': 0xb329,\\n 'Skein512-80': 0xb32a,\\n 'Skein512-88': 0xb32b,\\n 'Skein512-96': 0xb32c,\\n 'Skein512-104': 0xb32d,\\n 'Skein512-112': 0xb32e,\\n 'Skein512-120': 0xb32f,\\n 'Skein512-128': 0xb330,\\n 'Skein512-136': 0xb331,\\n 'Skein512-144': 0xb332,\\n 'Skein512-152': 0xb333,\\n 'Skein512-160': 0xb334,\\n 'Skein512-168': 0xb335,\\n 'Skein512-176': 0xb336,\\n 'Skein512-184': 0xb337,\\n 'Skein512-192': 0xb338,\\n 'Skein512-200': 0xb339,\\n 'Skein512-208': 0xb33a,\\n 'Skein512-216': 0xb33b,\\n 'Skein512-224': 0xb33c,\\n 'Skein512-232': 0xb33d,\\n 'Skein512-240': 0xb33e,\\n 'Skein512-248': 0xb33f,\\n 'Skein512-256': 0xb340,\\n 'Skein512-264': 0xb341,\\n 'Skein512-272': 0xb342,\\n 'Skein512-280': 0xb343,\\n 'Skein512-288': 0xb344,\\n 'Skein512-296': 0xb345,\\n 'Skein512-304': 0xb346,\\n 'Skein512-312': 0xb347,\\n 'Skein512-320': 0xb348,\\n 'Skein512-328': 0xb349,\\n 'Skein512-336': 0xb34a,\\n 'Skein512-344': 0xb34b,\\n 'Skein512-352': 0xb34c,\\n 'Skein512-360': 0xb34d,\\n 'Skein512-368': 0xb34e,\\n 'Skein512-376': 0xb34f,\\n 'Skein512-384': 0xb350,\\n 'Skein512-392': 0xb351,\\n 'Skein512-400': 0xb352,\\n 'Skein512-408': 0xb353,\\n 'Skein512-416': 0xb354,\\n 'Skein512-424': 0xb355,\\n 'Skein512-432': 0xb356,\\n 'Skein512-440': 0xb357,\\n 'Skein512-448': 0xb358,\\n 'Skein512-456': 0xb359,\\n 'Skein512-464': 0xb35a,\\n 'Skein512-472': 0xb35b,\\n 'Skein512-480': 0xb35c,\\n 'Skein512-488': 0xb35d,\\n 'Skein512-496': 0xb35e,\\n 'Skein512-504': 0xb35f,\\n 'Skein512-512': 0xb360,\\n 'Skein1024-8': 0xb361,\\n 'Skein1024-16': 0xb362,\\n 'Skein1024-24': 0xb363,\\n 'Skein1024-32': 0xb364,\\n 'Skein1024-40': 0xb365,\\n 'Skein1024-48': 0xb366,\\n 'Skein1024-56': 0xb367,\\n 'Skein1024-64': 0xb368,\\n 'Skein1024-72': 0xb369,\\n 'Skein1024-80': 0xb36a,\\n 'Skein1024-88': 0xb36b,\\n 'Skein1024-96': 0xb36c,\\n 'Skein1024-104': 0xb36d,\\n 'Skein1024-112': 0xb36e,\\n 'Skein1024-120': 0xb36f,\\n 'Skein1024-128': 0xb370,\\n 'Skein1024-136': 0xb371,\\n 'Skein1024-144': 0xb372,\\n 'Skein1024-152': 0xb373,\\n 'Skein1024-160': 0xb374,\\n 'Skein1024-168': 0xb375,\\n 'Skein1024-176': 0xb376,\\n 'Skein1024-184': 0xb377,\\n 'Skein1024-192': 0xb378,\\n 'Skein1024-200': 0xb379,\\n 'Skein1024-208': 0xb37a,\\n 'Skein1024-216': 0xb37b,\\n 'Skein1024-224': 0xb37c,\\n 'Skein1024-232': 0xb37d,\\n 'Skein1024-240': 0xb37e,\\n 'Skein1024-248': 0xb37f,\\n 'Skein1024-256': 0xb380,\\n 'Skein1024-264': 0xb381,\\n 'Skein1024-272': 0xb382,\\n 'Skein1024-280': 0xb383,\\n 'Skein1024-288': 0xb384,\\n 'Skein1024-296': 0xb385,\\n 'Skein1024-304': 0xb386,\\n 'Skein1024-312': 0xb387,\\n 'Skein1024-320': 0xb388,\\n 'Skein1024-328': 0xb389,\\n 'Skein1024-336': 0xb38a,\\n 'Skein1024-344': 0xb38b,\\n 'Skein1024-352': 0xb38c,\\n 'Skein1024-360': 0xb38d,\\n 'Skein1024-368': 0xb38e,\\n 'Skein1024-376': 0xb38f,\\n 'Skein1024-384': 0xb390,\\n 'Skein1024-392': 0xb391,\\n 'Skein1024-400': 0xb392,\\n 'Skein1024-408': 0xb393,\\n 'Skein1024-416': 0xb394,\\n 'Skein1024-424': 0xb395,\\n 'Skein1024-432': 0xb396,\\n 'Skein1024-440': 0xb397,\\n 'Skein1024-448': 0xb398,\\n 'Skein1024-456': 0xb399,\\n 'Skein1024-464': 0xb39a,\\n 'Skein1024-472': 0xb39b,\\n 'Skein1024-480': 0xb39c,\\n 'Skein1024-488': 0xb39d,\\n 'Skein1024-496': 0xb39e,\\n 'Skein1024-504': 0xb39f,\\n 'Skein1024-512': 0xb3a0,\\n 'Skein1024-520': 0xb3a1,\\n 'Skein1024-528': 0xb3a2,\\n 'Skein1024-536': 0xb3a3,\\n 'Skein1024-544': 0xb3a4,\\n 'Skein1024-552': 0xb3a5,\\n 'Skein1024-560': 0xb3a6,\\n 'Skein1024-568': 0xb3a7,\\n 'Skein1024-576': 0xb3a8,\\n 'Skein1024-584': 0xb3a9,\\n 'Skein1024-592': 0xb3aa,\\n 'Skein1024-600': 0xb3ab,\\n 'Skein1024-608': 0xb3ac,\\n 'Skein1024-616': 0xb3ad,\\n 'Skein1024-624': 0xb3ae,\\n 'Skein1024-632': 0xb3af,\\n 'Skein1024-640': 0xb3b0,\\n 'Skein1024-648': 0xb3b1,\\n 'Skein1024-656': 0xb3b2,\\n 'Skein1024-664': 0xb3b3,\\n 'Skein1024-672': 0xb3b4,\\n 'Skein1024-680': 0xb3b5,\\n 'Skein1024-688': 0xb3b6,\\n 'Skein1024-696': 0xb3b7,\\n 'Skein1024-704': 0xb3b8,\\n 'Skein1024-712': 0xb3b9,\\n 'Skein1024-720': 0xb3ba,\\n 'Skein1024-728': 0xb3bb,\\n 'Skein1024-736': 0xb3bc,\\n 'Skein1024-744': 0xb3bd,\\n 'Skein1024-752': 0xb3be,\\n 'Skein1024-760': 0xb3bf,\\n 'Skein1024-768': 0xb3c0,\\n 'Skein1024-776': 0xb3c1,\\n 'Skein1024-784': 0xb3c2,\\n 'Skein1024-792': 0xb3c3,\\n 'Skein1024-800': 0xb3c4,\\n 'Skein1024-808': 0xb3c5,\\n 'Skein1024-816': 0xb3c6,\\n 'Skein1024-824': 0xb3c7,\\n 'Skein1024-832': 0xb3c8,\\n 'Skein1024-840': 0xb3c9,\\n 'Skein1024-848': 0xb3ca,\\n 'Skein1024-856': 0xb3cb,\\n 'Skein1024-864': 0xb3cc,\\n 'Skein1024-872': 0xb3cd,\\n 'Skein1024-880': 0xb3ce,\\n 'Skein1024-888': 0xb3cf,\\n 'Skein1024-896': 0xb3d0,\\n 'Skein1024-904': 0xb3d1,\\n 'Skein1024-912': 0xb3d2,\\n 'Skein1024-920': 0xb3d3,\\n 'Skein1024-928': 0xb3d4,\\n 'Skein1024-936': 0xb3d5,\\n 'Skein1024-944': 0xb3d6,\\n 'Skein1024-952': 0xb3d7,\\n 'Skein1024-960': 0xb3d8,\\n 'Skein1024-968': 0xb3d9,\\n 'Skein1024-976': 0xb3da,\\n 'Skein1024-984': 0xb3db,\\n 'Skein1024-992': 0xb3dc,\\n 'Skein1024-1000': 0xb3dd,\\n 'Skein1024-1008': 0xb3de,\\n 'Skein1024-1016': 0xb3df,\\n 'Skein1024-1024': 0xb3e0\\n})\\n\\nexports.codes = Object.freeze({\\n 0x0: 'identity',\\n\\n // sha family\\n 0x11: 'sha1',\\n 0x12: 'sha2-256',\\n 0x13: 'sha2-512',\\n 0x56: 'dbl-sha2-256',\\n 0x17: 'sha3-224',\\n 0x16: 'sha3-256',\\n 0x15: 'sha3-384',\\n 0x14: 'sha3-512',\\n 0x18: 'shake-128',\\n 0x19: 'shake-256',\\n 0x1A: 'keccak-224',\\n 0x1B: 'keccak-256',\\n 0x1C: 'keccak-384',\\n 0x1D: 'keccak-512',\\n\\n 0x22: 'murmur3-128',\\n 0x23: 'murmur3-32',\\n\\n // blake2\\n 0xb201: 'blake2b-8',\\n 0xb202: 'blake2b-16',\\n 0xb203: 'blake2b-24',\\n 0xb204: 'blake2b-32',\\n 0xb205: 'blake2b-40',\\n 0xb206: 'blake2b-48',\\n 0xb207: 'blake2b-56',\\n 0xb208: 'blake2b-64',\\n 0xb209: 'blake2b-72',\\n 0xb20a: 'blake2b-80',\\n 0xb20b: 'blake2b-88',\\n 0xb20c: 'blake2b-96',\\n 0xb20d: 'blake2b-104',\\n 0xb20e: 'blake2b-112',\\n 0xb20f: 'blake2b-120',\\n 0xb210: 'blake2b-128',\\n 0xb211: 'blake2b-136',\\n 0xb212: 'blake2b-144',\\n 0xb213: 'blake2b-152',\\n 0xb214: 'blake2b-160',\\n 0xb215: 'blake2b-168',\\n 0xb216: 'blake2b-176',\\n 0xb217: 'blake2b-184',\\n 0xb218: 'blake2b-192',\\n 0xb219: 'blake2b-200',\\n 0xb21a: 'blake2b-208',\\n 0xb21b: 'blake2b-216',\\n 0xb21c: 'blake2b-224',\\n 0xb21d: 'blake2b-232',\\n 0xb21e: 'blake2b-240',\\n 0xb21f: 'blake2b-248',\\n 0xb220: 'blake2b-256',\\n 0xb221: 'blake2b-264',\\n 0xb222: 'blake2b-272',\\n 0xb223: 'blake2b-280',\\n 0xb224: 'blake2b-288',\\n 0xb225: 'blake2b-296',\\n 0xb226: 'blake2b-304',\\n 0xb227: 'blake2b-312',\\n 0xb228: 'blake2b-320',\\n 0xb229: 'blake2b-328',\\n 0xb22a: 'blake2b-336',\\n 0xb22b: 'blake2b-344',\\n 0xb22c: 'blake2b-352',\\n 0xb22d: 'blake2b-360',\\n 0xb22e: 'blake2b-368',\\n 0xb22f: 'blake2b-376',\\n 0xb230: 'blake2b-384',\\n 0xb231: 'blake2b-392',\\n 0xb232: 'blake2b-400',\\n 0xb233: 'blake2b-408',\\n 0xb234: 'blake2b-416',\\n 0xb235: 'blake2b-424',\\n 0xb236: 'blake2b-432',\\n 0xb237: 'blake2b-440',\\n 0xb238: 'blake2b-448',\\n 0xb239: 'blake2b-456',\\n 0xb23a: 'blake2b-464',\\n 0xb23b: 'blake2b-472',\\n 0xb23c: 'blake2b-480',\\n 0xb23d: 'blake2b-488',\\n 0xb23e: 'blake2b-496',\\n 0xb23f: 'blake2b-504',\\n 0xb240: 'blake2b-512',\\n 0xb241: 'blake2s-8',\\n 0xb242: 'blake2s-16',\\n 0xb243: 'blake2s-24',\\n 0xb244: 'blake2s-32',\\n 0xb245: 'blake2s-40',\\n 0xb246: 'blake2s-48',\\n 0xb247: 'blake2s-56',\\n 0xb248: 'blake2s-64',\\n 0xb249: 'blake2s-72',\\n 0xb24a: 'blake2s-80',\\n 0xb24b: 'blake2s-88',\\n 0xb24c: 'blake2s-96',\\n 0xb24d: 'blake2s-104',\\n 0xb24e: 'blake2s-112',\\n 0xb24f: 'blake2s-120',\\n 0xb250: 'blake2s-128',\\n 0xb251: 'blake2s-136',\\n 0xb252: 'blake2s-144',\\n 0xb253: 'blake2s-152',\\n 0xb254: 'blake2s-160',\\n 0xb255: 'blake2s-168',\\n 0xb256: 'blake2s-176',\\n 0xb257: 'blake2s-184',\\n 0xb258: 'blake2s-192',\\n 0xb259: 'blake2s-200',\\n 0xb25a: 'blake2s-208',\\n 0xb25b: 'blake2s-216',\\n 0xb25c: 'blake2s-224',\\n 0xb25d: 'blake2s-232',\\n 0xb25e: 'blake2s-240',\\n 0xb25f: 'blake2s-248',\\n 0xb260: 'blake2s-256',\\n\\n // skein\\n 0xb301: 'Skein256-8',\\n 0xb302: 'Skein256-16',\\n 0xb303: 'Skein256-24',\\n 0xb304: 'Skein256-32',\\n 0xb305: 'Skein256-40',\\n 0xb306: 'Skein256-48',\\n 0xb307: 'Skein256-56',\\n 0xb308: 'Skein256-64',\\n 0xb309: 'Skein256-72',\\n 0xb30a: 'Skein256-80',\\n 0xb30b: 'Skein256-88',\\n 0xb30c: 'Skein256-96',\\n 0xb30d: 'Skein256-104',\\n 0xb30e: 'Skein256-112',\\n 0xb30f: 'Skein256-120',\\n 0xb310: 'Skein256-128',\\n 0xb311: 'Skein256-136',\\n 0xb312: 'Skein256-144',\\n 0xb313: 'Skein256-152',\\n 0xb314: 'Skein256-160',\\n 0xb315: 'Skein256-168',\\n 0xb316: 'Skein256-176',\\n 0xb317: 'Skein256-184',\\n 0xb318: 'Skein256-192',\\n 0xb319: 'Skein256-200',\\n 0xb31a: 'Skein256-208',\\n 0xb31b: 'Skein256-216',\\n 0xb31c: 'Skein256-224',\\n 0xb31d: 'Skein256-232',\\n 0xb31e: 'Skein256-240',\\n 0xb31f: 'Skein256-248',\\n 0xb320: 'Skein256-256',\\n 0xb321: 'Skein512-8',\\n 0xb322: 'Skein512-16',\\n 0xb323: 'Skein512-24',\\n 0xb324: 'Skein512-32',\\n 0xb325: 'Skein512-40',\\n 0xb326: 'Skein512-48',\\n 0xb327: 'Skein512-56',\\n 0xb328: 'Skein512-64',\\n 0xb329: 'Skein512-72',\\n 0xb32a: 'Skein512-80',\\n 0xb32b: 'Skein512-88',\\n 0xb32c: 'Skein512-96',\\n 0xb32d: 'Skein512-104',\\n 0xb32e: 'Skein512-112',\\n 0xb32f: 'Skein512-120',\\n 0xb330: 'Skein512-128',\\n 0xb331: 'Skein512-136',\\n 0xb332: 'Skein512-144',\\n 0xb333: 'Skein512-152',\\n 0xb334: 'Skein512-160',\\n 0xb335: 'Skein512-168',\\n 0xb336: 'Skein512-176',\\n 0xb337: 'Skein512-184',\\n 0xb338: 'Skein512-192',\\n 0xb339: 'Skein512-200',\\n 0xb33a: 'Skein512-208',\\n 0xb33b: 'Skein512-216',\\n 0xb33c: 'Skein512-224',\\n 0xb33d: 'Skein512-232',\\n 0xb33e: 'Skein512-240',\\n 0xb33f: 'Skein512-248',\\n 0xb340: 'Skein512-256',\\n 0xb341: 'Skein512-264',\\n 0xb342: 'Skein512-272',\\n 0xb343: 'Skein512-280',\\n 0xb344: 'Skein512-288',\\n 0xb345: 'Skein512-296',\\n 0xb346: 'Skein512-304',\\n 0xb347: 'Skein512-312',\\n 0xb348: 'Skein512-320',\\n 0xb349: 'Skein512-328',\\n 0xb34a: 'Skein512-336',\\n 0xb34b: 'Skein512-344',\\n 0xb34c: 'Skein512-352',\\n 0xb34d: 'Skein512-360',\\n 0xb34e: 'Skein512-368',\\n 0xb34f: 'Skein512-376',\\n 0xb350: 'Skein512-384',\\n 0xb351: 'Skein512-392',\\n 0xb352: 'Skein512-400',\\n 0xb353: 'Skein512-408',\\n 0xb354: 'Skein512-416',\\n 0xb355: 'Skein512-424',\\n 0xb356: 'Skein512-432',\\n 0xb357: 'Skein512-440',\\n 0xb358: 'Skein512-448',\\n 0xb359: 'Skein512-456',\\n 0xb35a: 'Skein512-464',\\n 0xb35b: 'Skein512-472',\\n 0xb35c: 'Skein512-480',\\n 0xb35d: 'Skein512-488',\\n 0xb35e: 'Skein512-496',\\n 0xb35f: 'Skein512-504',\\n 0xb360: 'Skein512-512',\\n 0xb361: 'Skein1024-8',\\n 0xb362: 'Skein1024-16',\\n 0xb363: 'Skein1024-24',\\n 0xb364: 'Skein1024-32',\\n 0xb365: 'Skein1024-40',\\n 0xb366: 'Skein1024-48',\\n 0xb367: 'Skein1024-56',\\n 0xb368: 'Skein1024-64',\\n 0xb369: 'Skein1024-72',\\n 0xb36a: 'Skein1024-80',\\n 0xb36b: 'Skein1024-88',\\n 0xb36c: 'Skein1024-96',\\n 0xb36d: 'Skein1024-104',\\n 0xb36e: 'Skein1024-112',\\n 0xb36f: 'Skein1024-120',\\n 0xb370: 'Skein1024-128',\\n 0xb371: 'Skein1024-136',\\n 0xb372: 'Skein1024-144',\\n 0xb373: 'Skein1024-152',\\n 0xb374: 'Skein1024-160',\\n 0xb375: 'Skein1024-168',\\n 0xb376: 'Skein1024-176',\\n 0xb377: 'Skein1024-184',\\n 0xb378: 'Skein1024-192',\\n 0xb379: 'Skein1024-200',\\n 0xb37a: 'Skein1024-208',\\n 0xb37b: 'Skein1024-216',\\n 0xb37c: 'Skein1024-224',\\n 0xb37d: 'Skein1024-232',\\n 0xb37e: 'Skein1024-240',\\n 0xb37f: 'Skein1024-248',\\n 0xb380: 'Skein1024-256',\\n 0xb381: 'Skein1024-264',\\n 0xb382: 'Skein1024-272',\\n 0xb383: 'Skein1024-280',\\n 0xb384: 'Skein1024-288',\\n 0xb385: 'Skein1024-296',\\n 0xb386: 'Skein1024-304',\\n 0xb387: 'Skein1024-312',\\n 0xb388: 'Skein1024-320',\\n 0xb389: 'Skein1024-328',\\n 0xb38a: 'Skein1024-336',\\n 0xb38b: 'Skein1024-344',\\n 0xb38c: 'Skein1024-352',\\n 0xb38d: 'Skein1024-360',\\n 0xb38e: 'Skein1024-368',\\n 0xb38f: 'Skein1024-376',\\n 0xb390: 'Skein1024-384',\\n 0xb391: 'Skein1024-392',\\n 0xb392: 'Skein1024-400',\\n 0xb393: 'Skein1024-408',\\n 0xb394: 'Skein1024-416',\\n 0xb395: 'Skein1024-424',\\n 0xb396: 'Skein1024-432',\\n 0xb397: 'Skein1024-440',\\n 0xb398: 'Skein1024-448',\\n 0xb399: 'Skein1024-456',\\n 0xb39a: 'Skein1024-464',\\n 0xb39b: 'Skein1024-472',\\n 0xb39c: 'Skein1024-480',\\n 0xb39d: 'Skein1024-488',\\n 0xb39e: 'Skein1024-496',\\n 0xb39f: 'Skein1024-504',\\n 0xb3a0: 'Skein1024-512',\\n 0xb3a1: 'Skein1024-520',\\n 0xb3a2: 'Skein1024-528',\\n 0xb3a3: 'Skein1024-536',\\n 0xb3a4: 'Skein1024-544',\\n 0xb3a5: 'Skein1024-552',\\n 0xb3a6: 'Skein1024-560',\\n 0xb3a7: 'Skein1024-568',\\n 0xb3a8: 'Skein1024-576',\\n 0xb3a9: 'Skein1024-584',\\n 0xb3aa: 'Skein1024-592',\\n 0xb3ab: 'Skein1024-600',\\n 0xb3ac: 'Skein1024-608',\\n 0xb3ad: 'Skein1024-616',\\n 0xb3ae: 'Skein1024-624',\\n 0xb3af: 'Skein1024-632',\\n 0xb3b0: 'Skein1024-640',\\n 0xb3b1: 'Skein1024-648',\\n 0xb3b2: 'Skein1024-656',\\n 0xb3b3: 'Skein1024-664',\\n 0xb3b4: 'Skein1024-672',\\n 0xb3b5: 'Skein1024-680',\\n 0xb3b6: 'Skein1024-688',\\n 0xb3b7: 'Skein1024-696',\\n 0xb3b8: 'Skein1024-704',\\n 0xb3b9: 'Skein1024-712',\\n 0xb3ba: 'Skein1024-720',\\n 0xb3bb: 'Skein1024-728',\\n 0xb3bc: 'Skein1024-736',\\n 0xb3bd: 'Skein1024-744',\\n 0xb3be: 'Skein1024-752',\\n 0xb3bf: 'Skein1024-760',\\n 0xb3c0: 'Skein1024-768',\\n 0xb3c1: 'Skein1024-776',\\n 0xb3c2: 'Skein1024-784',\\n 0xb3c3: 'Skein1024-792',\\n 0xb3c4: 'Skein1024-800',\\n 0xb3c5: 'Skein1024-808',\\n 0xb3c6: 'Skein1024-816',\\n 0xb3c7: 'Skein1024-824',\\n 0xb3c8: 'Skein1024-832',\\n 0xb3c9: 'Skein1024-840',\\n 0xb3ca: 'Skein1024-848',\\n 0xb3cb: 'Skein1024-856',\\n 0xb3cc: 'Skein1024-864',\\n 0xb3cd: 'Skein1024-872',\\n 0xb3ce: 'Skein1024-880',\\n 0xb3cf: 'Skein1024-888',\\n 0xb3d0: 'Skein1024-896',\\n 0xb3d1: 'Skein1024-904',\\n 0xb3d2: 'Skein1024-912',\\n 0xb3d3: 'Skein1024-920',\\n 0xb3d4: 'Skein1024-928',\\n 0xb3d5: 'Skein1024-936',\\n 0xb3d6: 'Skein1024-944',\\n 0xb3d7: 'Skein1024-952',\\n 0xb3d8: 'Skein1024-960',\\n 0xb3d9: 'Skein1024-968',\\n 0xb3da: 'Skein1024-976',\\n 0xb3db: 'Skein1024-984',\\n 0xb3dc: 'Skein1024-992',\\n 0xb3dd: 'Skein1024-1000',\\n 0xb3de: 'Skein1024-1008',\\n 0xb3df: 'Skein1024-1016',\\n 0xb3e0: 'Skein1024-1024'\\n})\\n\\nexports.defaultLengths = Object.freeze({\\n 0x11: 20,\\n 0x12: 32,\\n 0x13: 64,\\n 0x56: 32,\\n 0x17: 28,\\n 0x16: 32,\\n 0x15: 48,\\n 0x14: 64,\\n 0x18: 32,\\n 0x19: 64,\\n 0x1A: 28,\\n 0x1B: 32,\\n 0x1C: 48,\\n 0x1D: 64,\\n 0x22: 32,\\n\\n 0xb201: 0x01,\\n 0xb202: 0x02,\\n 0xb203: 0x03,\\n 0xb204: 0x04,\\n 0xb205: 0x05,\\n 0xb206: 0x06,\\n 0xb207: 0x07,\\n 0xb208: 0x08,\\n 0xb209: 0x09,\\n 0xb20a: 0x0a,\\n 0xb20b: 0x0b,\\n 0xb20c: 0x0c,\\n 0xb20d: 0x0d,\\n 0xb20e: 0x0e,\\n 0xb20f: 0x0f,\\n 0xb210: 0x10,\\n 0xb211: 0x11,\\n 0xb212: 0x12,\\n 0xb213: 0x13,\\n 0xb214: 0x14,\\n 0xb215: 0x15,\\n 0xb216: 0x16,\\n 0xb217: 0x17,\\n 0xb218: 0x18,\\n 0xb219: 0x19,\\n 0xb21a: 0x1a,\\n 0xb21b: 0x1b,\\n 0xb21c: 0x1c,\\n 0xb21d: 0x1d,\\n 0xb21e: 0x1e,\\n 0xb21f: 0x1f,\\n 0xb220: 0x20,\\n 0xb221: 0x21,\\n 0xb222: 0x22,\\n 0xb223: 0x23,\\n 0xb224: 0x24,\\n 0xb225: 0x25,\\n 0xb226: 0x26,\\n 0xb227: 0x27,\\n 0xb228: 0x28,\\n 0xb229: 0x29,\\n 0xb22a: 0x2a,\\n 0xb22b: 0x2b,\\n 0xb22c: 0x2c,\\n 0xb22d: 0x2d,\\n 0xb22e: 0x2e,\\n 0xb22f: 0x2f,\\n 0xb230: 0x30,\\n 0xb231: 0x31,\\n 0xb232: 0x32,\\n 0xb233: 0x33,\\n 0xb234: 0x34,\\n 0xb235: 0x35,\\n 0xb236: 0x36,\\n 0xb237: 0x37,\\n 0xb238: 0x38,\\n 0xb239: 0x39,\\n 0xb23a: 0x3a,\\n 0xb23b: 0x3b,\\n 0xb23c: 0x3c,\\n 0xb23d: 0x3d,\\n 0xb23e: 0x3e,\\n 0xb23f: 0x3f,\\n 0xb240: 0x40,\\n 0xb241: 0x01,\\n 0xb242: 0x02,\\n 0xb243: 0x03,\\n 0xb244: 0x04,\\n 0xb245: 0x05,\\n 0xb246: 0x06,\\n 0xb247: 0x07,\\n 0xb248: 0x08,\\n 0xb249: 0x09,\\n 0xb24a: 0x0a,\\n 0xb24b: 0x0b,\\n 0xb24c: 0x0c,\\n 0xb24d: 0x0d,\\n 0xb24e: 0x0e,\\n 0xb24f: 0x0f,\\n 0xb250: 0x10,\\n 0xb251: 0x11,\\n 0xb252: 0x12,\\n 0xb253: 0x13,\\n 0xb254: 0x14,\\n 0xb255: 0x15,\\n 0xb256: 0x16,\\n 0xb257: 0x17,\\n 0xb258: 0x18,\\n 0xb259: 0x19,\\n 0xb25a: 0x1a,\\n 0xb25b: 0x1b,\\n 0xb25c: 0x1c,\\n 0xb25d: 0x1d,\\n 0xb25e: 0x1e,\\n 0xb25f: 0x1f,\\n 0xb260: 0x20,\\n 0xb301: 0x01,\\n 0xb302: 0x02,\\n 0xb303: 0x03,\\n 0xb304: 0x04,\\n 0xb305: 0x05,\\n 0xb306: 0x06,\\n 0xb307: 0x07,\\n 0xb308: 0x08,\\n 0xb309: 0x09,\\n 0xb30a: 0x0a,\\n 0xb30b: 0x0b,\\n 0xb30c: 0x0c,\\n 0xb30d: 0x0d,\\n 0xb30e: 0x0e,\\n 0xb30f: 0x0f,\\n 0xb310: 0x10,\\n 0xb311: 0x11,\\n 0xb312: 0x12,\\n 0xb313: 0x13,\\n 0xb314: 0x14,\\n 0xb315: 0x15,\\n 0xb316: 0x16,\\n 0xb317: 0x17,\\n 0xb318: 0x18,\\n 0xb319: 0x19,\\n 0xb31a: 0x1a,\\n 0xb31b: 0x1b,\\n 0xb31c: 0x1c,\\n 0xb31d: 0x1d,\\n 0xb31e: 0x1e,\\n 0xb31f: 0x1f,\\n 0xb320: 0x20,\\n 0xb321: 0x01,\\n 0xb322: 0x02,\\n 0xb323: 0x03,\\n 0xb324: 0x04,\\n 0xb325: 0x05,\\n 0xb326: 0x06,\\n 0xb327: 0x07,\\n 0xb328: 0x08,\\n 0xb329: 0x09,\\n 0xb32a: 0x0a,\\n 0xb32b: 0x0b,\\n 0xb32c: 0x0c,\\n 0xb32d: 0x0d,\\n 0xb32e: 0x0e,\\n 0xb32f: 0x0f,\\n 0xb330: 0x10,\\n 0xb331: 0x11,\\n 0xb332: 0x12,\\n 0xb333: 0x13,\\n 0xb334: 0x14,\\n 0xb335: 0x15,\\n 0xb336: 0x16,\\n 0xb337: 0x17,\\n 0xb338: 0x18,\\n 0xb339: 0x19,\\n 0xb33a: 0x1a,\\n 0xb33b: 0x1b,\\n 0xb33c: 0x1c,\\n 0xb33d: 0x1d,\\n 0xb33e: 0x1e,\\n 0xb33f: 0x1f,\\n 0xb340: 0x20,\\n 0xb341: 0x21,\\n 0xb342: 0x22,\\n 0xb343: 0x23,\\n 0xb344: 0x24,\\n 0xb345: 0x25,\\n 0xb346: 0x26,\\n 0xb347: 0x27,\\n 0xb348: 0x28,\\n 0xb349: 0x29,\\n 0xb34a: 0x2a,\\n 0xb34b: 0x2b,\\n 0xb34c: 0x2c,\\n 0xb34d: 0x2d,\\n 0xb34e: 0x2e,\\n 0xb34f: 0x2f,\\n 0xb350: 0x30,\\n 0xb351: 0x31,\\n 0xb352: 0x32,\\n 0xb353: 0x33,\\n 0xb354: 0x34,\\n 0xb355: 0x35,\\n 0xb356: 0x36,\\n 0xb357: 0x37,\\n 0xb358: 0x38,\\n 0xb359: 0x39,\\n 0xb35a: 0x3a,\\n 0xb35b: 0x3b,\\n 0xb35c: 0x3c,\\n 0xb35d: 0x3d,\\n 0xb35e: 0x3e,\\n 0xb35f: 0x3f,\\n 0xb360: 0x40,\\n 0xb361: 0x01,\\n 0xb362: 0x02,\\n 0xb363: 0x03,\\n 0xb364: 0x04,\\n 0xb365: 0x05,\\n 0xb366: 0x06,\\n 0xb367: 0x07,\\n 0xb368: 0x08,\\n 0xb369: 0x09,\\n 0xb36a: 0x0a,\\n 0xb36b: 0x0b,\\n 0xb36c: 0x0c,\\n 0xb36d: 0x0d,\\n 0xb36e: 0x0e,\\n 0xb36f: 0x0f,\\n 0xb370: 0x10,\\n 0xb371: 0x11,\\n 0xb372: 0x12,\\n 0xb373: 0x13,\\n 0xb374: 0x14,\\n 0xb375: 0x15,\\n 0xb376: 0x16,\\n 0xb377: 0x17,\\n 0xb378: 0x18,\\n 0xb379: 0x19,\\n 0xb37a: 0x1a,\\n 0xb37b: 0x1b,\\n 0xb37c: 0x1c,\\n 0xb37d: 0x1d,\\n 0xb37e: 0x1e,\\n 0xb37f: 0x1f,\\n 0xb380: 0x20,\\n 0xb381: 0x21,\\n 0xb382: 0x22,\\n 0xb383: 0x23,\\n 0xb384: 0x24,\\n 0xb385: 0x25,\\n 0xb386: 0x26,\\n 0xb387: 0x27,\\n 0xb388: 0x28,\\n 0xb389: 0x29,\\n 0xb38a: 0x2a,\\n 0xb38b: 0x2b,\\n 0xb38c: 0x2c,\\n 0xb38d: 0x2d,\\n 0xb38e: 0x2e,\\n 0xb38f: 0x2f,\\n 0xb390: 0x30,\\n 0xb391: 0x31,\\n 0xb392: 0x32,\\n 0xb393: 0x33,\\n 0xb394: 0x34,\\n 0xb395: 0x35,\\n 0xb396: 0x36,\\n 0xb397: 0x37,\\n 0xb398: 0x38,\\n 0xb399: 0x39,\\n 0xb39a: 0x3a,\\n 0xb39b: 0x3b,\\n 0xb39c: 0x3c,\\n 0xb39d: 0x3d,\\n 0xb39e: 0x3e,\\n 0xb39f: 0x3f,\\n 0xb3a0: 0x40,\\n 0xb3a1: 0x41,\\n 0xb3a2: 0x42,\\n 0xb3a3: 0x43,\\n 0xb3a4: 0x44,\\n 0xb3a5: 0x45,\\n 0xb3a6: 0x46,\\n 0xb3a7: 0x47,\\n 0xb3a8: 0x48,\\n 0xb3a9: 0x49,\\n 0xb3aa: 0x4a,\\n 0xb3ab: 0x4b,\\n 0xb3ac: 0x4c,\\n 0xb3ad: 0x4d,\\n 0xb3ae: 0x4e,\\n 0xb3af: 0x4f,\\n 0xb3b0: 0x50,\\n 0xb3b1: 0x51,\\n 0xb3b2: 0x52,\\n 0xb3b3: 0x53,\\n 0xb3b4: 0x54,\\n 0xb3b5: 0x55,\\n 0xb3b6: 0x56,\\n 0xb3b7: 0x57,\\n 0xb3b8: 0x58,\\n 0xb3b9: 0x59,\\n 0xb3ba: 0x5a,\\n 0xb3bb: 0x5b,\\n 0xb3bc: 0x5c,\\n 0xb3bd: 0x5d,\\n 0xb3be: 0x5e,\\n 0xb3bf: 0x5f,\\n 0xb3c0: 0x60,\\n 0xb3c1: 0x61,\\n 0xb3c2: 0x62,\\n 0xb3c3: 0x63,\\n 0xb3c4: 0x64,\\n 0xb3c5: 0x65,\\n 0xb3c6: 0x66,\\n 0xb3c7: 0x67,\\n 0xb3c8: 0x68,\\n 0xb3c9: 0x69,\\n 0xb3ca: 0x6a,\\n 0xb3cb: 0x6b,\\n 0xb3cc: 0x6c,\\n 0xb3cd: 0x6d,\\n 0xb3ce: 0x6e,\\n 0xb3cf: 0x6f,\\n 0xb3d0: 0x70,\\n 0xb3d1: 0x71,\\n 0xb3d2: 0x72,\\n 0xb3d3: 0x73,\\n 0xb3d4: 0x74,\\n 0xb3d5: 0x75,\\n 0xb3d6: 0x76,\\n 0xb3d7: 0x77,\\n 0xb3d8: 0x78,\\n 0xb3d9: 0x79,\\n 0xb3da: 0x7a,\\n 0xb3db: 0x7b,\\n 0xb3dc: 0x7c,\\n 0xb3dd: 0x7d,\\n 0xb3de: 0x7e,\\n 0xb3df: 0x7f,\\n 0xb3e0: 0x80\\n})\\n\\n\\n//# sourceURL=webpack:///./node_modules/orbit-db-io/node_modules/multihashes/src/constants.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/orbit-db-io/node_modules/multihashes/src/index.js\":\n/*!************************************************************************!*\\\n !*** ./node_modules/orbit-db-io/node_modules/multihashes/src/index.js ***!\n \\************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {/**\\n * Multihash implementation in JavaScript.\\n *\\n * @module multihash\\n */\\n\\n\\nconst bs58 = __webpack_require__(/*! bs58 */ \\\"./node_modules/bs58/index.js\\\")\\n\\nconst cs = __webpack_require__(/*! ./constants */ \\\"./node_modules/orbit-db-io/node_modules/multihashes/src/constants.js\\\")\\n\\nexports.names = cs.names\\nexports.codes = cs.codes\\nexports.defaultLengths = cs.defaultLengths\\n\\nconst varint = __webpack_require__(/*! varint */ \\\"./node_modules/varint/index.js\\\")\\n\\n/**\\n * Convert the given multihash to a hex encoded string.\\n *\\n * @param {Buffer} hash\\n * @returns {string}\\n */\\nexports.toHexString = function toHexString (hash) {\\n if (!Buffer.isBuffer(hash)) {\\n throw new Error('must be passed a buffer')\\n }\\n\\n return hash.toString('hex')\\n}\\n\\n/**\\n * Convert the given hex encoded string to a multihash.\\n *\\n * @param {string} hash\\n * @returns {Buffer}\\n */\\nexports.fromHexString = function fromHexString (hash) {\\n return Buffer.from(hash, 'hex')\\n}\\n\\n/**\\n * Convert the given multihash to a base58 encoded string.\\n *\\n * @param {Buffer} hash\\n * @returns {string}\\n */\\nexports.toB58String = function toB58String (hash) {\\n if (!Buffer.isBuffer(hash)) {\\n throw new Error('must be passed a buffer')\\n }\\n\\n return bs58.encode(hash)\\n}\\n\\n/**\\n * Convert the given base58 encoded string to a multihash.\\n *\\n * @param {string|Buffer} hash\\n * @returns {Buffer}\\n */\\nexports.fromB58String = function fromB58String (hash) {\\n let encoded = hash\\n if (Buffer.isBuffer(hash)) {\\n encoded = hash.toString()\\n }\\n\\n return Buffer.from(bs58.decode(encoded))\\n}\\n\\n/**\\n * Decode a hash from the given multihash.\\n *\\n * @param {Buffer} buf\\n * @returns {{code: number, name: string, length: number, digest: Buffer}} result\\n */\\nexports.decode = function decode (buf) {\\n if (!(Buffer.isBuffer(buf))) {\\n throw new Error('multihash must be a Buffer')\\n }\\n\\n if (buf.length < 3) {\\n throw new Error('multihash too short. must be > 3 bytes.')\\n }\\n\\n const code = varint.decode(buf)\\n if (!exports.isValidCode(code)) {\\n throw new Error(`multihash unknown function code: 0x${code.toString(16)}`)\\n }\\n buf = buf.slice(varint.decode.bytes)\\n\\n const len = varint.decode(buf)\\n if (len < 1) {\\n throw new Error(`multihash invalid length: 0x${len.toString(16)}`)\\n }\\n buf = buf.slice(varint.decode.bytes)\\n\\n if (buf.length !== len) {\\n throw new Error(`multihash length inconsistent: 0x${buf.toString('hex')}`)\\n }\\n\\n return {\\n code: code,\\n name: cs.codes[code],\\n length: len,\\n digest: buf\\n }\\n}\\n\\n/**\\n * Encode a hash digest along with the specified function code.\\n *\\n * > **Note:** the length is derived from the length of the digest itself.\\n *\\n * @param {Buffer} digest\\n * @param {string|number} code\\n * @param {number} [length]\\n * @returns {Buffer}\\n */\\nexports.encode = function encode (digest, code, length) {\\n if (!digest || code === undefined) {\\n throw new Error('multihash encode requires at least two args: digest, code')\\n }\\n\\n // ensure it's a hashfunction code.\\n const hashfn = exports.coerceCode(code)\\n\\n if (!(Buffer.isBuffer(digest))) {\\n throw new Error('digest should be a Buffer')\\n }\\n\\n if (length == null) {\\n length = digest.length\\n }\\n\\n if (length && digest.length !== length) {\\n throw new Error('digest length should be equal to specified length.')\\n }\\n\\n return Buffer.concat([\\n Buffer.from(varint.encode(hashfn)),\\n Buffer.from(varint.encode(length)),\\n digest\\n ])\\n}\\n\\n/**\\n * Converts a hash function name into the matching code.\\n * If passed a number it will return the number if it's a valid code.\\n * @param {string|number} name\\n * @returns {number}\\n */\\nexports.coerceCode = function coerceCode (name) {\\n let code = name\\n\\n if (typeof name === 'string') {\\n if (cs.names[name] === undefined) {\\n throw new Error(`Unrecognized hash function named: ${name}`)\\n }\\n code = cs.names[name]\\n }\\n\\n if (typeof code !== 'number') {\\n throw new Error(`Hash function code should be a number. Got: ${code}`)\\n }\\n\\n if (cs.codes[code] === undefined && !exports.isAppCode(code)) {\\n throw new Error(`Unrecognized function code: ${code}`)\\n }\\n\\n return code\\n}\\n\\n/**\\n * Checks wether a code is part of the app range\\n *\\n * @param {number} code\\n * @returns {boolean}\\n */\\nexports.isAppCode = function appCode (code) {\\n return code > 0 && code < 0x10\\n}\\n\\n/**\\n * Checks whether a multihash code is valid.\\n *\\n * @param {number} code\\n * @returns {boolean}\\n */\\nexports.isValidCode = function validCode (code) {\\n if (exports.isAppCode(code)) {\\n return true\\n }\\n\\n if (cs.codes[code]) {\\n return true\\n }\\n\\n return false\\n}\\n\\n/**\\n * Check if the given buffer is a valid multihash. Throws an error if it is not valid.\\n *\\n * @param {Buffer} multihash\\n * @returns {undefined}\\n * @throws {Error}\\n */\\nfunction validate (multihash) {\\n exports.decode(multihash) // throws if bad.\\n}\\nexports.validate = validate\\n\\n/**\\n * Returns a prefix from a valid multihash. Throws an error if it is not valid.\\n *\\n * @param {Buffer} multihash\\n * @returns {undefined}\\n * @throws {Error}\\n */\\nexports.prefix = function prefix (multihash) {\\n validate(multihash)\\n\\n return multihash.slice(0, 2)\\n}\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/orbit-db-io/node_modules/multihashes/src/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/p-do-whilst/index.js\":\n/*!*******************************************!*\\\n !*** ./node_modules/p-do-whilst/index.js ***!\n \\*******************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nconst pDoWhilst = async (action, condition) => {\\n\\tconst actionResult = await action();\\n\\n\\tif (condition(actionResult)) {\\n\\t\\treturn pDoWhilst(action, condition);\\n\\t}\\n};\\n\\nmodule.exports = pDoWhilst;\\n// TODO: Remove this for the next major release\\nmodule.exports.default = pDoWhilst;\\n\\n\\n//# sourceURL=webpack:///./node_modules/p-do-whilst/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/p-map/index.js\":\n/*!*************************************!*\\\n !*** ./node_modules/p-map/index.js ***!\n \\*************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nmodule.exports = (iterable, mapper, opts) => new Promise((resolve, reject) => {\\n\\topts = Object.assign({\\n\\t\\tconcurrency: Infinity\\n\\t}, opts);\\n\\n\\tif (typeof mapper !== 'function') {\\n\\t\\tthrow new TypeError('Mapper function is required');\\n\\t}\\n\\n\\tconst concurrency = opts.concurrency;\\n\\n\\tif (!(typeof concurrency === 'number' && concurrency >= 1)) {\\n\\t\\tthrow new TypeError(`Expected \\\\`concurrency\\\\` to be a number from 1 and up, got \\\\`${concurrency}\\\\` (${typeof concurrency})`);\\n\\t}\\n\\n\\tconst ret = [];\\n\\tconst iterator = iterable[Symbol.iterator]();\\n\\tlet isRejected = false;\\n\\tlet iterableDone = false;\\n\\tlet resolvingCount = 0;\\n\\tlet currentIdx = 0;\\n\\n\\tconst next = () => {\\n\\t\\tif (isRejected) {\\n\\t\\t\\treturn;\\n\\t\\t}\\n\\n\\t\\tconst nextItem = iterator.next();\\n\\t\\tconst i = currentIdx;\\n\\t\\tcurrentIdx++;\\n\\n\\t\\tif (nextItem.done) {\\n\\t\\t\\titerableDone = true;\\n\\n\\t\\t\\tif (resolvingCount === 0) {\\n\\t\\t\\t\\tresolve(ret);\\n\\t\\t\\t}\\n\\n\\t\\t\\treturn;\\n\\t\\t}\\n\\n\\t\\tresolvingCount++;\\n\\n\\t\\tPromise.resolve(nextItem.value)\\n\\t\\t\\t.then(el => mapper(el, i))\\n\\t\\t\\t.then(\\n\\t\\t\\t\\tval => {\\n\\t\\t\\t\\t\\tret[i] = val;\\n\\t\\t\\t\\t\\tresolvingCount--;\\n\\t\\t\\t\\t\\tnext();\\n\\t\\t\\t\\t},\\n\\t\\t\\t\\terr => {\\n\\t\\t\\t\\t\\tisRejected = true;\\n\\t\\t\\t\\t\\treject(err);\\n\\t\\t\\t\\t}\\n\\t\\t\\t);\\n\\t};\\n\\n\\tfor (let i = 0; i < concurrency; i++) {\\n\\t\\tnext();\\n\\n\\t\\tif (iterableDone) {\\n\\t\\t\\tbreak;\\n\\t\\t}\\n\\t}\\n});\\n\\n\\n//# sourceURL=webpack:///./node_modules/p-map/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/process/browser.js\":\n/*!*****************************************!*\\\n !*** ./node_modules/process/browser.js ***!\n \\*****************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"// shim for using process in browser\\nvar process = module.exports = {};\\n\\n// cached from whatever global is present so that test runners that stub it\\n// don't break things. But we need to wrap it in a try catch in case it is\\n// wrapped in strict mode code which doesn't define any globals. It's inside a\\n// function because try/catches deoptimize in certain engines.\\n\\nvar cachedSetTimeout;\\nvar cachedClearTimeout;\\n\\nfunction defaultSetTimout() {\\n throw new Error('setTimeout has not been defined');\\n}\\nfunction defaultClearTimeout () {\\n throw new Error('clearTimeout has not been defined');\\n}\\n(function () {\\n try {\\n if (typeof setTimeout === 'function') {\\n cachedSetTimeout = setTimeout;\\n } else {\\n cachedSetTimeout = defaultSetTimout;\\n }\\n } catch (e) {\\n cachedSetTimeout = defaultSetTimout;\\n }\\n try {\\n if (typeof clearTimeout === 'function') {\\n cachedClearTimeout = clearTimeout;\\n } else {\\n cachedClearTimeout = defaultClearTimeout;\\n }\\n } catch (e) {\\n cachedClearTimeout = defaultClearTimeout;\\n }\\n} ())\\nfunction runTimeout(fun) {\\n if (cachedSetTimeout === setTimeout) {\\n //normal enviroments in sane situations\\n return setTimeout(fun, 0);\\n }\\n // if setTimeout wasn't available but was latter defined\\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\\n cachedSetTimeout = setTimeout;\\n return setTimeout(fun, 0);\\n }\\n try {\\n // when when somebody has screwed with setTimeout but no I.E. maddness\\n return cachedSetTimeout(fun, 0);\\n } catch(e){\\n try {\\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\\n return cachedSetTimeout.call(null, fun, 0);\\n } catch(e){\\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\\n return cachedSetTimeout.call(this, fun, 0);\\n }\\n }\\n\\n\\n}\\nfunction runClearTimeout(marker) {\\n if (cachedClearTimeout === clearTimeout) {\\n //normal enviroments in sane situations\\n return clearTimeout(marker);\\n }\\n // if clearTimeout wasn't available but was latter defined\\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\\n cachedClearTimeout = clearTimeout;\\n return clearTimeout(marker);\\n }\\n try {\\n // when when somebody has screwed with setTimeout but no I.E. maddness\\n return cachedClearTimeout(marker);\\n } catch (e){\\n try {\\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\\n return cachedClearTimeout.call(null, marker);\\n } catch (e){\\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\\n return cachedClearTimeout.call(this, marker);\\n }\\n }\\n\\n\\n\\n}\\nvar queue = [];\\nvar draining = false;\\nvar currentQueue;\\nvar queueIndex = -1;\\n\\nfunction cleanUpNextTick() {\\n if (!draining || !currentQueue) {\\n return;\\n }\\n draining = false;\\n if (currentQueue.length) {\\n queue = currentQueue.concat(queue);\\n } else {\\n queueIndex = -1;\\n }\\n if (queue.length) {\\n drainQueue();\\n }\\n}\\n\\nfunction drainQueue() {\\n if (draining) {\\n return;\\n }\\n var timeout = runTimeout(cleanUpNextTick);\\n draining = true;\\n\\n var len = queue.length;\\n while(len) {\\n currentQueue = queue;\\n queue = [];\\n while (++queueIndex < len) {\\n if (currentQueue) {\\n currentQueue[queueIndex].run();\\n }\\n }\\n queueIndex = -1;\\n len = queue.length;\\n }\\n currentQueue = null;\\n draining = false;\\n runClearTimeout(timeout);\\n}\\n\\nprocess.nextTick = function (fun) {\\n var args = new Array(arguments.length - 1);\\n if (arguments.length > 1) {\\n for (var i = 1; i < arguments.length; i++) {\\n args[i - 1] = arguments[i];\\n }\\n }\\n queue.push(new Item(fun, args));\\n if (queue.length === 1 && !draining) {\\n runTimeout(drainQueue);\\n }\\n};\\n\\n// v8 likes predictible objects\\nfunction Item(fun, array) {\\n this.fun = fun;\\n this.array = array;\\n}\\nItem.prototype.run = function () {\\n this.fun.apply(null, this.array);\\n};\\nprocess.title = 'browser';\\nprocess.browser = true;\\nprocess.env = {};\\nprocess.argv = [];\\nprocess.version = ''; // empty string to avoid regexp issues\\nprocess.versions = {};\\n\\nfunction noop() {}\\n\\nprocess.on = noop;\\nprocess.addListener = noop;\\nprocess.once = noop;\\nprocess.off = noop;\\nprocess.removeListener = noop;\\nprocess.removeAllListeners = noop;\\nprocess.emit = noop;\\nprocess.prependListener = noop;\\nprocess.prependOnceListener = noop;\\n\\nprocess.listeners = function (name) { return [] }\\n\\nprocess.binding = function (name) {\\n throw new Error('process.binding is not supported');\\n};\\n\\nprocess.cwd = function () { return '/' };\\nprocess.chdir = function (dir) {\\n throw new Error('process.chdir is not supported');\\n};\\nprocess.umask = function() { return 0; };\\n\\n\\n//# sourceURL=webpack:///./node_modules/process/browser.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/prop-types/checkPropTypes.js\":\n/*!***************************************************!*\\\n !*** ./node_modules/prop-types/checkPropTypes.js ***!\n \\***************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/**\\n * Copyright (c) 2013-present, Facebook, Inc.\\n *\\n * This source code is licensed under the MIT license found in the\\n * LICENSE file in the root directory of this source tree.\\n */\\n\\n\\n\\nvar printWarning = function() {};\\n\\nif (true) {\\n var ReactPropTypesSecret = __webpack_require__(/*! ./lib/ReactPropTypesSecret */ \\\"./node_modules/prop-types/lib/ReactPropTypesSecret.js\\\");\\n var loggedTypeFailures = {};\\n\\n printWarning = function(text) {\\n var message = 'Warning: ' + text;\\n if (typeof console !== 'undefined') {\\n console.error(message);\\n }\\n try {\\n // --- Welcome to debugging React ---\\n // This error was thrown as a convenience so that you can use this stack\\n // to find the callsite that caused this warning to fire.\\n throw new Error(message);\\n } catch (x) {}\\n };\\n}\\n\\n/**\\n * Assert that the values match with the type specs.\\n * Error messages are memorized and will only be shown once.\\n *\\n * @param {object} typeSpecs Map of name to a ReactPropType\\n * @param {object} values Runtime values that need to be type-checked\\n * @param {string} location e.g. \\\"prop\\\", \\\"context\\\", \\\"child context\\\"\\n * @param {string} componentName Name of the component for error messages.\\n * @param {?Function} getStack Returns the component stack.\\n * @private\\n */\\nfunction checkPropTypes(typeSpecs, values, location, componentName, getStack) {\\n if (true) {\\n for (var typeSpecName in typeSpecs) {\\n if (typeSpecs.hasOwnProperty(typeSpecName)) {\\n var error;\\n // Prop type validation may throw. In case they do, we don't want to\\n // fail the render phase where it didn't fail before. So we log it.\\n // After these have been cleaned up, we'll let them throw.\\n try {\\n // This is intentionally an invariant that gets caught. It's the same\\n // behavior as without this statement except with a better message.\\n if (typeof typeSpecs[typeSpecName] !== 'function') {\\n var err = Error(\\n (componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' +\\n 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.'\\n );\\n err.name = 'Invariant Violation';\\n throw err;\\n }\\n error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);\\n } catch (ex) {\\n error = ex;\\n }\\n if (error && !(error instanceof Error)) {\\n printWarning(\\n (componentName || 'React class') + ': type specification of ' +\\n location + ' `' + typeSpecName + '` is invalid; the type checker ' +\\n 'function must return `null` or an `Error` but returned a ' + typeof error + '. ' +\\n 'You may have forgotten to pass an argument to the type checker ' +\\n 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' +\\n 'shape all require an argument).'\\n )\\n\\n }\\n if (error instanceof Error && !(error.message in loggedTypeFailures)) {\\n // Only monitor this failure once because there tends to be a lot of the\\n // same error.\\n loggedTypeFailures[error.message] = true;\\n\\n var stack = getStack ? getStack() : '';\\n\\n printWarning(\\n 'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '')\\n );\\n }\\n }\\n }\\n }\\n}\\n\\nmodule.exports = checkPropTypes;\\n\\n\\n//# sourceURL=webpack:///./node_modules/prop-types/checkPropTypes.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/prop-types/factoryWithTypeCheckers.js\":\n/*!************************************************************!*\\\n !*** ./node_modules/prop-types/factoryWithTypeCheckers.js ***!\n \\************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/**\\n * Copyright (c) 2013-present, Facebook, Inc.\\n *\\n * This source code is licensed under the MIT license found in the\\n * LICENSE file in the root directory of this source tree.\\n */\\n\\n\\n\\nvar assign = __webpack_require__(/*! object-assign */ \\\"./node_modules/prop-types/node_modules/object-assign/index.js\\\");\\n\\nvar ReactPropTypesSecret = __webpack_require__(/*! ./lib/ReactPropTypesSecret */ \\\"./node_modules/prop-types/lib/ReactPropTypesSecret.js\\\");\\nvar checkPropTypes = __webpack_require__(/*! ./checkPropTypes */ \\\"./node_modules/prop-types/checkPropTypes.js\\\");\\n\\nvar printWarning = function() {};\\n\\nif (true) {\\n printWarning = function(text) {\\n var message = 'Warning: ' + text;\\n if (typeof console !== 'undefined') {\\n console.error(message);\\n }\\n try {\\n // --- Welcome to debugging React ---\\n // This error was thrown as a convenience so that you can use this stack\\n // to find the callsite that caused this warning to fire.\\n throw new Error(message);\\n } catch (x) {}\\n };\\n}\\n\\nfunction emptyFunctionThatReturnsNull() {\\n return null;\\n}\\n\\nmodule.exports = function(isValidElement, throwOnDirectAccess) {\\n /* global Symbol */\\n var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\\n var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.\\n\\n /**\\n * Returns the iterator method function contained on the iterable object.\\n *\\n * Be sure to invoke the function with the iterable as context:\\n *\\n * var iteratorFn = getIteratorFn(myIterable);\\n * if (iteratorFn) {\\n * var iterator = iteratorFn.call(myIterable);\\n * ...\\n * }\\n *\\n * @param {?object} maybeIterable\\n * @return {?function}\\n */\\n function getIteratorFn(maybeIterable) {\\n var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);\\n if (typeof iteratorFn === 'function') {\\n return iteratorFn;\\n }\\n }\\n\\n /**\\n * Collection of methods that allow declaration and validation of props that are\\n * supplied to React components. Example usage:\\n *\\n * var Props = require('ReactPropTypes');\\n * var MyArticle = React.createClass({\\n * propTypes: {\\n * // An optional string prop named \\\"description\\\".\\n * description: Props.string,\\n *\\n * // A required enum prop named \\\"category\\\".\\n * category: Props.oneOf(['News','Photos']).isRequired,\\n *\\n * // A prop named \\\"dialog\\\" that requires an instance of Dialog.\\n * dialog: Props.instanceOf(Dialog).isRequired\\n * },\\n * render: function() { ... }\\n * });\\n *\\n * A more formal specification of how these methods are used:\\n *\\n * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)\\n * decl := ReactPropTypes.{type}(.isRequired)?\\n *\\n * Each and every declaration produces a function with the same signature. This\\n * allows the creation of custom validation functions. For example:\\n *\\n * var MyLink = React.createClass({\\n * propTypes: {\\n * // An optional string or URI prop named \\\"href\\\".\\n * href: function(props, propName, componentName) {\\n * var propValue = props[propName];\\n * if (propValue != null && typeof propValue !== 'string' &&\\n * !(propValue instanceof URI)) {\\n * return new Error(\\n * 'Expected a string or an URI for ' + propName + ' in ' +\\n * componentName\\n * );\\n * }\\n * }\\n * },\\n * render: function() {...}\\n * });\\n *\\n * @internal\\n */\\n\\n var ANONYMOUS = '<<anonymous>>';\\n\\n // Important!\\n // Keep this list in sync with production version in `./factoryWithThrowingShims.js`.\\n var ReactPropTypes = {\\n array: createPrimitiveTypeChecker('array'),\\n bool: createPrimitiveTypeChecker('boolean'),\\n func: createPrimitiveTypeChecker('function'),\\n number: createPrimitiveTypeChecker('number'),\\n object: createPrimitiveTypeChecker('object'),\\n string: createPrimitiveTypeChecker('string'),\\n symbol: createPrimitiveTypeChecker('symbol'),\\n\\n any: createAnyTypeChecker(),\\n arrayOf: createArrayOfTypeChecker,\\n element: createElementTypeChecker(),\\n instanceOf: createInstanceTypeChecker,\\n node: createNodeChecker(),\\n objectOf: createObjectOfTypeChecker,\\n oneOf: createEnumTypeChecker,\\n oneOfType: createUnionTypeChecker,\\n shape: createShapeTypeChecker,\\n exact: createStrictShapeTypeChecker,\\n };\\n\\n /**\\n * inlined Object.is polyfill to avoid requiring consumers ship their own\\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\\n */\\n /*eslint-disable no-self-compare*/\\n function is(x, y) {\\n // SameValue algorithm\\n if (x === y) {\\n // Steps 1-5, 7-10\\n // Steps 6.b-6.e: +0 != -0\\n return x !== 0 || 1 / x === 1 / y;\\n } else {\\n // Step 6.a: NaN == NaN\\n return x !== x && y !== y;\\n }\\n }\\n /*eslint-enable no-self-compare*/\\n\\n /**\\n * We use an Error-like object for backward compatibility as people may call\\n * PropTypes directly and inspect their output. However, we don't use real\\n * Errors anymore. We don't inspect their stack anyway, and creating them\\n * is prohibitively expensive if they are created too often, such as what\\n * happens in oneOfType() for any type before the one that matched.\\n */\\n function PropTypeError(message) {\\n this.message = message;\\n this.stack = '';\\n }\\n // Make `instanceof Error` still work for returned errors.\\n PropTypeError.prototype = Error.prototype;\\n\\n function createChainableTypeChecker(validate) {\\n if (true) {\\n var manualPropTypeCallCache = {};\\n var manualPropTypeWarningCount = 0;\\n }\\n function checkType(isRequired, props, propName, componentName, location, propFullName, secret) {\\n componentName = componentName || ANONYMOUS;\\n propFullName = propFullName || propName;\\n\\n if (secret !== ReactPropTypesSecret) {\\n if (throwOnDirectAccess) {\\n // New behavior only for users of `prop-types` package\\n var err = new Error(\\n 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +\\n 'Use `PropTypes.checkPropTypes()` to call them. ' +\\n 'Read more at http://fb.me/use-check-prop-types'\\n );\\n err.name = 'Invariant Violation';\\n throw err;\\n } else if ( true && typeof console !== 'undefined') {\\n // Old behavior for people using React.PropTypes\\n var cacheKey = componentName + ':' + propName;\\n if (\\n !manualPropTypeCallCache[cacheKey] &&\\n // Avoid spamming the console because they are often not actionable except for lib authors\\n manualPropTypeWarningCount < 3\\n ) {\\n printWarning(\\n 'You are manually calling a React.PropTypes validation ' +\\n 'function for the `' + propFullName + '` prop on `' + componentName + '`. This is deprecated ' +\\n 'and will throw in the standalone `prop-types` package. ' +\\n 'You may be seeing this warning due to a third-party PropTypes ' +\\n 'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.'\\n );\\n manualPropTypeCallCache[cacheKey] = true;\\n manualPropTypeWarningCount++;\\n }\\n }\\n }\\n if (props[propName] == null) {\\n if (isRequired) {\\n if (props[propName] === null) {\\n return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.'));\\n }\\n return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.'));\\n }\\n return null;\\n } else {\\n return validate(props, propName, componentName, location, propFullName);\\n }\\n }\\n\\n var chainedCheckType = checkType.bind(null, false);\\n chainedCheckType.isRequired = checkType.bind(null, true);\\n\\n return chainedCheckType;\\n }\\n\\n function createPrimitiveTypeChecker(expectedType) {\\n function validate(props, propName, componentName, location, propFullName, secret) {\\n var propValue = props[propName];\\n var propType = getPropType(propValue);\\n if (propType !== expectedType) {\\n // `propValue` being instance of, say, date/regexp, pass the 'object'\\n // check, but we can offer a more precise error message here rather than\\n // 'of type `object`'.\\n var preciseType = getPreciseType(propValue);\\n\\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.'));\\n }\\n return null;\\n }\\n return createChainableTypeChecker(validate);\\n }\\n\\n function createAnyTypeChecker() {\\n return createChainableTypeChecker(emptyFunctionThatReturnsNull);\\n }\\n\\n function createArrayOfTypeChecker(typeChecker) {\\n function validate(props, propName, componentName, location, propFullName) {\\n if (typeof typeChecker !== 'function') {\\n return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside arrayOf.');\\n }\\n var propValue = props[propName];\\n if (!Array.isArray(propValue)) {\\n var propType = getPropType(propValue);\\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an array.'));\\n }\\n for (var i = 0; i < propValue.length; i++) {\\n var error = typeChecker(propValue, i, componentName, location, propFullName + '[' + i + ']', ReactPropTypesSecret);\\n if (error instanceof Error) {\\n return error;\\n }\\n }\\n return null;\\n }\\n return createChainableTypeChecker(validate);\\n }\\n\\n function createElementTypeChecker() {\\n function validate(props, propName, componentName, location, propFullName) {\\n var propValue = props[propName];\\n if (!isValidElement(propValue)) {\\n var propType = getPropType(propValue);\\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected a single ReactElement.'));\\n }\\n return null;\\n }\\n return createChainableTypeChecker(validate);\\n }\\n\\n function createInstanceTypeChecker(expectedClass) {\\n function validate(props, propName, componentName, location, propFullName) {\\n if (!(props[propName] instanceof expectedClass)) {\\n var expectedClassName = expectedClass.name || ANONYMOUS;\\n var actualClassName = getClassName(props[propName]);\\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + actualClassName + '` supplied to `' + componentName + '`, expected ') + ('instance of `' + expectedClassName + '`.'));\\n }\\n return null;\\n }\\n return createChainableTypeChecker(validate);\\n }\\n\\n function createEnumTypeChecker(expectedValues) {\\n if (!Array.isArray(expectedValues)) {\\n true ? printWarning('Invalid argument supplied to oneOf, expected an instance of array.') : undefined;\\n return emptyFunctionThatReturnsNull;\\n }\\n\\n function validate(props, propName, componentName, location, propFullName) {\\n var propValue = props[propName];\\n for (var i = 0; i < expectedValues.length; i++) {\\n if (is(propValue, expectedValues[i])) {\\n return null;\\n }\\n }\\n\\n var valuesString = JSON.stringify(expectedValues);\\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of value `' + propValue + '` ' + ('supplied to `' + componentName + '`, expected one of ' + valuesString + '.'));\\n }\\n return createChainableTypeChecker(validate);\\n }\\n\\n function createObjectOfTypeChecker(typeChecker) {\\n function validate(props, propName, componentName, location, propFullName) {\\n if (typeof typeChecker !== 'function') {\\n return new PropTypeError('Property `' + propFullName + '` of component `' + componentName + '` has invalid PropType notation inside objectOf.');\\n }\\n var propValue = props[propName];\\n var propType = getPropType(propValue);\\n if (propType !== 'object') {\\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + propType + '` supplied to `' + componentName + '`, expected an object.'));\\n }\\n for (var key in propValue) {\\n if (propValue.hasOwnProperty(key)) {\\n var error = typeChecker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\\n if (error instanceof Error) {\\n return error;\\n }\\n }\\n }\\n return null;\\n }\\n return createChainableTypeChecker(validate);\\n }\\n\\n function createUnionTypeChecker(arrayOfTypeCheckers) {\\n if (!Array.isArray(arrayOfTypeCheckers)) {\\n true ? printWarning('Invalid argument supplied to oneOfType, expected an instance of array.') : undefined;\\n return emptyFunctionThatReturnsNull;\\n }\\n\\n for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\\n var checker = arrayOfTypeCheckers[i];\\n if (typeof checker !== 'function') {\\n printWarning(\\n 'Invalid argument supplied to oneOfType. Expected an array of check functions, but ' +\\n 'received ' + getPostfixForTypeWarning(checker) + ' at index ' + i + '.'\\n );\\n return emptyFunctionThatReturnsNull;\\n }\\n }\\n\\n function validate(props, propName, componentName, location, propFullName) {\\n for (var i = 0; i < arrayOfTypeCheckers.length; i++) {\\n var checker = arrayOfTypeCheckers[i];\\n if (checker(props, propName, componentName, location, propFullName, ReactPropTypesSecret) == null) {\\n return null;\\n }\\n }\\n\\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`.'));\\n }\\n return createChainableTypeChecker(validate);\\n }\\n\\n function createNodeChecker() {\\n function validate(props, propName, componentName, location, propFullName) {\\n if (!isNode(props[propName])) {\\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` supplied to ' + ('`' + componentName + '`, expected a ReactNode.'));\\n }\\n return null;\\n }\\n return createChainableTypeChecker(validate);\\n }\\n\\n function createShapeTypeChecker(shapeTypes) {\\n function validate(props, propName, componentName, location, propFullName) {\\n var propValue = props[propName];\\n var propType = getPropType(propValue);\\n if (propType !== 'object') {\\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\\n }\\n for (var key in shapeTypes) {\\n var checker = shapeTypes[key];\\n if (!checker) {\\n continue;\\n }\\n var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\\n if (error) {\\n return error;\\n }\\n }\\n return null;\\n }\\n return createChainableTypeChecker(validate);\\n }\\n\\n function createStrictShapeTypeChecker(shapeTypes) {\\n function validate(props, propName, componentName, location, propFullName) {\\n var propValue = props[propName];\\n var propType = getPropType(propValue);\\n if (propType !== 'object') {\\n return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type `' + propType + '` ' + ('supplied to `' + componentName + '`, expected `object`.'));\\n }\\n // We need to check all keys in case some are required but missing from\\n // props.\\n var allKeys = assign({}, props[propName], shapeTypes);\\n for (var key in allKeys) {\\n var checker = shapeTypes[key];\\n if (!checker) {\\n return new PropTypeError(\\n 'Invalid ' + location + ' `' + propFullName + '` key `' + key + '` supplied to `' + componentName + '`.' +\\n '\\\\nBad object: ' + JSON.stringify(props[propName], null, ' ') +\\n '\\\\nValid keys: ' + JSON.stringify(Object.keys(shapeTypes), null, ' ')\\n );\\n }\\n var error = checker(propValue, key, componentName, location, propFullName + '.' + key, ReactPropTypesSecret);\\n if (error) {\\n return error;\\n }\\n }\\n return null;\\n }\\n\\n return createChainableTypeChecker(validate);\\n }\\n\\n function isNode(propValue) {\\n switch (typeof propValue) {\\n case 'number':\\n case 'string':\\n case 'undefined':\\n return true;\\n case 'boolean':\\n return !propValue;\\n case 'object':\\n if (Array.isArray(propValue)) {\\n return propValue.every(isNode);\\n }\\n if (propValue === null || isValidElement(propValue)) {\\n return true;\\n }\\n\\n var iteratorFn = getIteratorFn(propValue);\\n if (iteratorFn) {\\n var iterator = iteratorFn.call(propValue);\\n var step;\\n if (iteratorFn !== propValue.entries) {\\n while (!(step = iterator.next()).done) {\\n if (!isNode(step.value)) {\\n return false;\\n }\\n }\\n } else {\\n // Iterator will provide entry [k,v] tuples rather than values.\\n while (!(step = iterator.next()).done) {\\n var entry = step.value;\\n if (entry) {\\n if (!isNode(entry[1])) {\\n return false;\\n }\\n }\\n }\\n }\\n } else {\\n return false;\\n }\\n\\n return true;\\n default:\\n return false;\\n }\\n }\\n\\n function isSymbol(propType, propValue) {\\n // Native Symbol.\\n if (propType === 'symbol') {\\n return true;\\n }\\n\\n // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol'\\n if (propValue['@@toStringTag'] === 'Symbol') {\\n return true;\\n }\\n\\n // Fallback for non-spec compliant Symbols which are polyfilled.\\n if (typeof Symbol === 'function' && propValue instanceof Symbol) {\\n return true;\\n }\\n\\n return false;\\n }\\n\\n // Equivalent of `typeof` but with special handling for array and regexp.\\n function getPropType(propValue) {\\n var propType = typeof propValue;\\n if (Array.isArray(propValue)) {\\n return 'array';\\n }\\n if (propValue instanceof RegExp) {\\n // Old webkits (at least until Android 4.0) return 'function' rather than\\n // 'object' for typeof a RegExp. We'll normalize this here so that /bla/\\n // passes PropTypes.object.\\n return 'object';\\n }\\n if (isSymbol(propType, propValue)) {\\n return 'symbol';\\n }\\n return propType;\\n }\\n\\n // This handles more types than `getPropType`. Only used for error messages.\\n // See `createPrimitiveTypeChecker`.\\n function getPreciseType(propValue) {\\n if (typeof propValue === 'undefined' || propValue === null) {\\n return '' + propValue;\\n }\\n var propType = getPropType(propValue);\\n if (propType === 'object') {\\n if (propValue instanceof Date) {\\n return 'date';\\n } else if (propValue instanceof RegExp) {\\n return 'regexp';\\n }\\n }\\n return propType;\\n }\\n\\n // Returns a string that is postfixed to a warning about an invalid type.\\n // For example, \\\"undefined\\\" or \\\"of type array\\\"\\n function getPostfixForTypeWarning(value) {\\n var type = getPreciseType(value);\\n switch (type) {\\n case 'array':\\n case 'object':\\n return 'an ' + type;\\n case 'boolean':\\n case 'date':\\n case 'regexp':\\n return 'a ' + type;\\n default:\\n return type;\\n }\\n }\\n\\n // Returns class name of the object, if any.\\n function getClassName(propValue) {\\n if (!propValue.constructor || !propValue.constructor.name) {\\n return ANONYMOUS;\\n }\\n return propValue.constructor.name;\\n }\\n\\n ReactPropTypes.checkPropTypes = checkPropTypes;\\n ReactPropTypes.PropTypes = ReactPropTypes;\\n\\n return ReactPropTypes;\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/prop-types/factoryWithTypeCheckers.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/prop-types/index.js\":\n/*!******************************************!*\\\n !*** ./node_modules/prop-types/index.js ***!\n \\******************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"/**\\n * Copyright (c) 2013-present, Facebook, Inc.\\n *\\n * This source code is licensed under the MIT license found in the\\n * LICENSE file in the root directory of this source tree.\\n */\\n\\nif (true) {\\n var REACT_ELEMENT_TYPE = (typeof Symbol === 'function' &&\\n Symbol.for &&\\n Symbol.for('react.element')) ||\\n 0xeac7;\\n\\n var isValidElement = function(object) {\\n return typeof object === 'object' &&\\n object !== null &&\\n object.$$typeof === REACT_ELEMENT_TYPE;\\n };\\n\\n // By explicitly using `prop-types` you are opting into new development behavior.\\n // http://fb.me/prop-types-in-prod\\n var throwOnDirectAccess = true;\\n module.exports = __webpack_require__(/*! ./factoryWithTypeCheckers */ \\\"./node_modules/prop-types/factoryWithTypeCheckers.js\\\")(isValidElement, throwOnDirectAccess);\\n} else {}\\n\\n\\n//# sourceURL=webpack:///./node_modules/prop-types/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/prop-types/lib/ReactPropTypesSecret.js\":\n/*!*************************************************************!*\\\n !*** ./node_modules/prop-types/lib/ReactPropTypesSecret.js ***!\n \\*************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/**\\n * Copyright (c) 2013-present, Facebook, Inc.\\n *\\n * This source code is licensed under the MIT license found in the\\n * LICENSE file in the root directory of this source tree.\\n */\\n\\n\\n\\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\\n\\nmodule.exports = ReactPropTypesSecret;\\n\\n\\n//# sourceURL=webpack:///./node_modules/prop-types/lib/ReactPropTypesSecret.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/prop-types/node_modules/object-assign/index.js\":\n/*!*********************************************************************!*\\\n !*** ./node_modules/prop-types/node_modules/object-assign/index.js ***!\n \\*********************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/*\\nobject-assign\\n(c) Sindre Sorhus\\n@license MIT\\n*/\\n\\n\\n/* eslint-disable no-unused-vars */\\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\\n\\nfunction toObject(val) {\\n\\tif (val === null || val === undefined) {\\n\\t\\tthrow new TypeError('Object.assign cannot be called with null or undefined');\\n\\t}\\n\\n\\treturn Object(val);\\n}\\n\\nfunction shouldUseNative() {\\n\\ttry {\\n\\t\\tif (!Object.assign) {\\n\\t\\t\\treturn false;\\n\\t\\t}\\n\\n\\t\\t// Detect buggy property enumeration order in older V8 versions.\\n\\n\\t\\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\\n\\t\\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\\n\\t\\ttest1[5] = 'de';\\n\\t\\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\\n\\t\\t\\treturn false;\\n\\t\\t}\\n\\n\\t\\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\\n\\t\\tvar test2 = {};\\n\\t\\tfor (var i = 0; i < 10; i++) {\\n\\t\\t\\ttest2['_' + String.fromCharCode(i)] = i;\\n\\t\\t}\\n\\t\\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\\n\\t\\t\\treturn test2[n];\\n\\t\\t});\\n\\t\\tif (order2.join('') !== '0123456789') {\\n\\t\\t\\treturn false;\\n\\t\\t}\\n\\n\\t\\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\\n\\t\\tvar test3 = {};\\n\\t\\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\\n\\t\\t\\ttest3[letter] = letter;\\n\\t\\t});\\n\\t\\tif (Object.keys(Object.assign({}, test3)).join('') !==\\n\\t\\t\\t\\t'abcdefghijklmnopqrst') {\\n\\t\\t\\treturn false;\\n\\t\\t}\\n\\n\\t\\treturn true;\\n\\t} catch (err) {\\n\\t\\t// We don't expect any of the above to throw, but better to be safe.\\n\\t\\treturn false;\\n\\t}\\n}\\n\\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\\n\\tvar from;\\n\\tvar to = toObject(target);\\n\\tvar symbols;\\n\\n\\tfor (var s = 1; s < arguments.length; s++) {\\n\\t\\tfrom = Object(arguments[s]);\\n\\n\\t\\tfor (var key in from) {\\n\\t\\t\\tif (hasOwnProperty.call(from, key)) {\\n\\t\\t\\t\\tto[key] = from[key];\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\tif (getOwnPropertySymbols) {\\n\\t\\t\\tsymbols = getOwnPropertySymbols(from);\\n\\t\\t\\tfor (var i = 0; i < symbols.length; i++) {\\n\\t\\t\\t\\tif (propIsEnumerable.call(from, symbols[i])) {\\n\\t\\t\\t\\t\\tto[symbols[i]] = from[symbols[i]];\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\treturn to;\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/prop-types/node_modules/object-assign/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/protocol-buffers-schema/index.js\":\n/*!*******************************************************!*\\\n !*** ./node_modules/protocol-buffers-schema/index.js ***!\n \\*******************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"var parse = __webpack_require__(/*! ./parse */ \\\"./node_modules/protocol-buffers-schema/parse.js\\\")\\nvar stringify = __webpack_require__(/*! ./stringify */ \\\"./node_modules/protocol-buffers-schema/stringify.js\\\")\\n\\nmodule.exports = parse\\nmodule.exports.parse = parse\\nmodule.exports.stringify = stringify\\n\\n\\n//# sourceURL=webpack:///./node_modules/protocol-buffers-schema/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/protocol-buffers-schema/parse.js\":\n/*!*******************************************************!*\\\n !*** ./node_modules/protocol-buffers-schema/parse.js ***!\n \\*******************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"var tokenize = __webpack_require__(/*! ./tokenize */ \\\"./node_modules/protocol-buffers-schema/tokenize.js\\\")\\nvar MAX_RANGE = 0x1FFFFFFF\\n\\n// \\\"Only repeated fields of primitive numeric types (types which use the varint, 32-bit, or 64-bit wire types) can be declared \\\"packed\\\".\\\"\\n// https://developers.google.com/protocol-buffers/docs/encoding#optional\\nvar PACKABLE_TYPES = [\\n // varint wire types\\n 'int32', 'int64', 'uint32', 'uint64', 'sint32', 'sint64', 'bool',\\n // + ENUMS\\n // 64-bit wire types\\n 'fixed64', 'sfixed64', 'double',\\n // 32-bit wire types\\n 'fixed32', 'sfixed32', 'float'\\n]\\n\\nvar onfieldoptions = function (tokens) {\\n var opts = {}\\n\\n while (tokens.length) {\\n switch (tokens[0]) {\\n case '[':\\n case ',':\\n tokens.shift()\\n var name = tokens.shift()\\n if (name === '(') { // handling [(A) = B]\\n name = tokens.shift()\\n tokens.shift() // remove the end of bracket\\n }\\n if (tokens[0] !== '=') throw new Error('Unexpected token in field options: ' + tokens[0])\\n tokens.shift()\\n if (tokens[0] === ']') throw new Error('Unexpected ] in field option')\\n opts[name] = tokens.shift()\\n break\\n case ']':\\n tokens.shift()\\n return opts\\n\\n default:\\n throw new Error('Unexpected token in field options: ' + tokens[0])\\n }\\n }\\n\\n throw new Error('No closing tag for field options')\\n}\\n\\nvar onfield = function (tokens) {\\n var field = {\\n name: null,\\n type: null,\\n tag: -1,\\n map: null,\\n oneof: null,\\n required: false,\\n repeated: false,\\n options: {}\\n }\\n\\n while (tokens.length) {\\n switch (tokens[0]) {\\n case '=':\\n tokens.shift()\\n field.tag = Number(tokens.shift())\\n break\\n\\n case 'map':\\n field.type = 'map'\\n field.map = {from: null, to: null}\\n tokens.shift()\\n if (tokens[0] !== '<') throw new Error('Unexpected token in map type: ' + tokens[0])\\n tokens.shift()\\n field.map.from = tokens.shift()\\n if (tokens[0] !== ',') throw new Error('Unexpected token in map type: ' + tokens[0])\\n tokens.shift()\\n field.map.to = tokens.shift()\\n if (tokens[0] !== '>') throw new Error('Unexpected token in map type: ' + tokens[0])\\n tokens.shift()\\n field.name = tokens.shift()\\n break\\n\\n case 'repeated':\\n case 'required':\\n case 'optional':\\n var t = tokens.shift()\\n field.required = t === 'required'\\n field.repeated = t === 'repeated'\\n field.type = tokens.shift()\\n field.name = tokens.shift()\\n break\\n\\n case '[':\\n field.options = onfieldoptions(tokens)\\n break\\n\\n case ';':\\n if (field.name === null) throw new Error('Missing field name')\\n if (field.type === null) throw new Error('Missing type in message field: ' + field.name)\\n if (field.tag === -1) throw new Error('Missing tag number in message field: ' + field.name)\\n tokens.shift()\\n return field\\n\\n default:\\n throw new Error('Unexpected token in message field: ' + tokens[0])\\n }\\n }\\n\\n throw new Error('No ; found for message field')\\n}\\n\\nvar onmessagebody = function (tokens) {\\n var body = {\\n enums: [],\\n messages: [],\\n fields: [],\\n extends: [],\\n extensions: null\\n }\\n\\n while (tokens.length) {\\n switch (tokens[0]) {\\n case 'map':\\n case 'repeated':\\n case 'optional':\\n case 'required':\\n body.fields.push(onfield(tokens))\\n break\\n\\n case 'enum':\\n body.enums.push(onenum(tokens))\\n break\\n\\n case 'message':\\n body.messages.push(onmessage(tokens))\\n break\\n\\n case 'extensions':\\n body.extensions = onextensions(tokens)\\n break\\n\\n case 'oneof':\\n tokens.shift()\\n var name = tokens.shift()\\n if (tokens[0] !== '{') throw new Error('Unexpected token in oneof: ' + tokens[0])\\n tokens.shift()\\n while (tokens[0] !== '}') {\\n tokens.unshift('optional')\\n var field = onfield(tokens)\\n field.oneof = name\\n body.fields.push(field)\\n }\\n tokens.shift()\\n break\\n\\n case 'extend':\\n body.extends.push(onextend(tokens))\\n break\\n\\n case ';':\\n tokens.shift()\\n break\\n\\n case 'reserved':\\n case 'option':\\n tokens.shift()\\n while (tokens[0] !== ';') {\\n tokens.shift()\\n }\\n break\\n\\n default:\\n // proto3 does not require the use of optional/required, assumed as optional\\n // \\\"singular: a well-formed message can have zero or one of this field (but not more than one).\\\"\\n // https://developers.google.com/protocol-buffers/docs/proto3#specifying-field-rules\\n tokens.unshift('optional')\\n body.fields.push(onfield(tokens))\\n }\\n }\\n\\n return body\\n}\\n\\nvar onextend = function (tokens) {\\n var out = {\\n name: tokens[1],\\n message: onmessage(tokens)\\n }\\n return out\\n}\\n\\nvar onextensions = function (tokens) {\\n tokens.shift()\\n var from = Number(tokens.shift())\\n if (isNaN(from)) throw new Error('Invalid from in extensions definition')\\n if (tokens.shift() !== 'to') throw new Error(\\\"Expected keyword 'to' in extensions definition\\\")\\n var to = tokens.shift()\\n if (to === 'max') to = MAX_RANGE\\n to = Number(to)\\n if (isNaN(to)) throw new Error('Invalid to in extensions definition')\\n if (tokens.shift() !== ';') throw new Error('Missing ; in extensions definition')\\n return {from: from, to: to}\\n}\\nvar onmessage = function (tokens) {\\n tokens.shift()\\n\\n var lvl = 1\\n var body = []\\n var msg = {\\n name: tokens.shift(),\\n enums: [],\\n extends: [],\\n messages: [],\\n fields: []\\n }\\n\\n if (tokens[0] !== '{') throw new Error('Expected { but found ' + tokens[0])\\n tokens.shift()\\n\\n while (tokens.length) {\\n if (tokens[0] === '{') lvl++\\n else if (tokens[0] === '}') lvl--\\n\\n if (!lvl) {\\n tokens.shift()\\n body = onmessagebody(body)\\n msg.enums = body.enums\\n msg.messages = body.messages\\n msg.fields = body.fields\\n msg.extends = body.extends\\n msg.extensions = body.extensions\\n return msg\\n }\\n\\n body.push(tokens.shift())\\n }\\n\\n if (lvl) throw new Error('No closing tag for message')\\n}\\n\\nvar onpackagename = function (tokens) {\\n tokens.shift()\\n var name = tokens.shift()\\n if (tokens[0] !== ';') throw new Error('Expected ; but found ' + tokens[0])\\n tokens.shift()\\n return name\\n}\\n\\nvar onsyntaxversion = function (tokens) {\\n tokens.shift()\\n\\n if (tokens[0] !== '=') throw new Error('Expected = but found ' + tokens[0])\\n tokens.shift()\\n\\n var version = tokens.shift()\\n switch (version) {\\n case '\\\"proto2\\\"':\\n version = 2\\n break\\n\\n case '\\\"proto3\\\"':\\n version = 3\\n break\\n\\n default:\\n throw new Error('Expected protobuf syntax version but found ' + version)\\n }\\n\\n if (tokens[0] !== ';') throw new Error('Expected ; but found ' + tokens[0])\\n tokens.shift()\\n\\n return version\\n}\\n\\nvar onenumvalue = function (tokens) {\\n if (tokens.length < 4) throw new Error('Invalid enum value: ' + tokens.slice(0, 3).join(' '))\\n if (tokens[1] !== '=') throw new Error('Expected = but found ' + tokens[1])\\n if (tokens[3] !== ';' && tokens[3] !== '[') throw new Error('Expected ; or [ but found ' + tokens[1])\\n\\n var name = tokens.shift()\\n tokens.shift()\\n var val = {\\n value: null,\\n options: {}\\n }\\n val.value = Number(tokens.shift())\\n if (tokens[0] === '[') {\\n val.options = onfieldoptions(tokens)\\n }\\n tokens.shift() // expecting the semicolon here\\n\\n return {\\n name: name,\\n val: val\\n }\\n}\\n\\nvar onenum = function (tokens) {\\n tokens.shift()\\n var options = {}\\n var e = {\\n name: tokens.shift(),\\n values: {},\\n options: {}\\n }\\n\\n if (tokens[0] !== '{') throw new Error('Expected { but found ' + tokens[0])\\n tokens.shift()\\n\\n while (tokens.length) {\\n if (tokens[0] === '}') {\\n tokens.shift()\\n // there goes optional semicolon after the enclosing \\\"}\\\"\\n if (tokens[0] === ';') tokens.shift()\\n return e\\n }\\n if (tokens[0] === 'option') {\\n options = onoption(tokens)\\n e.options[options.name] = options.value\\n continue\\n }\\n var val = onenumvalue(tokens)\\n e.values[val.name] = val.val\\n }\\n\\n throw new Error('No closing tag for enum')\\n}\\n\\nvar onoption = function (tokens) {\\n var name = null\\n var value = null\\n\\n var parse = function (value) {\\n if (value === 'true') return true\\n if (value === 'false') return false\\n return value.replace(/^\\\"+|\\\"+$/gm, '')\\n }\\n\\n while (tokens.length) {\\n if (tokens[0] === ';') {\\n tokens.shift()\\n return {name: name, value: value}\\n }\\n switch (tokens[0]) {\\n case 'option':\\n tokens.shift()\\n\\n var hasBracket = tokens[0] === '('\\n if (hasBracket) tokens.shift()\\n\\n name = tokens.shift()\\n\\n if (hasBracket) {\\n if (tokens[0] !== ')') throw new Error('Expected ) but found ' + tokens[0])\\n tokens.shift()\\n }\\n\\n if (tokens[0][0] === '.') {\\n name += tokens.shift()\\n }\\n\\n break\\n\\n case '=':\\n tokens.shift()\\n if (name === null) throw new Error('Expected key for option with value: ' + tokens[0])\\n value = parse(tokens.shift())\\n\\n if (name === 'optimize_for' && !/^(SPEED|CODE_SIZE|LITE_RUNTIME)$/.test(value)) {\\n throw new Error('Unexpected value for option optimize_for: ' + value)\\n } else if (value === '{') {\\n // option foo = {bar: baz}\\n value = onoptionMap(tokens)\\n }\\n break\\n\\n default:\\n throw new Error('Unexpected token in option: ' + tokens[0])\\n }\\n }\\n}\\n\\nvar onoptionMap = function (tokens) {\\n var parse = function (value) {\\n if (value === 'true') return true\\n if (value === 'false') return false\\n return value.replace(/^\\\"+|\\\"+$/gm, '')\\n }\\n\\n var map = {}\\n\\n while (tokens.length) {\\n if (tokens[0] === '}') {\\n tokens.shift()\\n return map\\n }\\n\\n var hasBracket = tokens[0] === '('\\n if (hasBracket) tokens.shift()\\n\\n var key = tokens.shift()\\n if (hasBracket) {\\n if (tokens[0] !== ')') throw new Error('Expected ) but found ' + tokens[0])\\n tokens.shift()\\n }\\n\\n var value = null\\n\\n switch (tokens[0]) {\\n case ':':\\n if (map[key] !== undefined) throw new Error('Duplicate option map key ' + key)\\n\\n tokens.shift()\\n\\n value = parse(tokens.shift())\\n\\n if (value === '{') {\\n // option foo = {bar: baz}\\n value = onoptionMap(tokens)\\n }\\n\\n map[key] = value\\n\\n if (tokens[0] === ';') {\\n tokens.shift()\\n }\\n break\\n\\n case '{':\\n tokens.shift()\\n value = onoptionMap(tokens)\\n\\n if (map[key] === undefined) map[key] = []\\n if (!Array.isArray(map[key])) throw new Error('Duplicate option map key ' + key)\\n\\n map[key].push(value)\\n break\\n\\n default:\\n throw new Error('Unexpected token in option map: ' + tokens[0])\\n }\\n }\\n\\n throw new Error('No closing tag for option map')\\n}\\n\\nvar onimport = function (tokens) {\\n tokens.shift()\\n var file = tokens.shift().replace(/^\\\"+|\\\"+$/gm, '')\\n\\n if (tokens[0] !== ';') throw new Error('Unexpected token: ' + tokens[0] + '. Expected \\\";\\\"')\\n\\n tokens.shift()\\n return file\\n}\\n\\nvar onservice = function (tokens) {\\n tokens.shift()\\n\\n var service = {\\n name: tokens.shift(),\\n methods: [],\\n options: {}\\n }\\n\\n if (tokens[0] !== '{') throw new Error('Expected { but found ' + tokens[0])\\n tokens.shift()\\n\\n while (tokens.length) {\\n if (tokens[0] === '}') {\\n tokens.shift()\\n // there goes optional semicolon after the enclosing \\\"}\\\"\\n if (tokens[0] === ';') tokens.shift()\\n return service\\n }\\n\\n switch (tokens[0]) {\\n case 'option':\\n var opt = onoption(tokens)\\n if (service.options[opt.name] !== undefined) throw new Error('Duplicate option ' + opt.name)\\n service.options[opt.name] = opt.value\\n break\\n case 'rpc':\\n service.methods.push(onrpc(tokens))\\n break\\n default:\\n throw new Error('Unexpected token in service: ' + tokens[0])\\n }\\n }\\n\\n throw new Error('No closing tag for service')\\n}\\n\\nvar onrpc = function (tokens) {\\n tokens.shift()\\n\\n var rpc = {\\n name: tokens.shift(),\\n input_type: null,\\n output_type: null,\\n client_streaming: false,\\n server_streaming: false,\\n options: {}\\n }\\n\\n if (tokens[0] !== '(') throw new Error('Expected ( but found ' + tokens[0])\\n tokens.shift()\\n\\n if (tokens[0] === 'stream') {\\n tokens.shift()\\n rpc.client_streaming = true\\n }\\n\\n rpc.input_type = tokens.shift()\\n\\n if (tokens[0] !== ')') throw new Error('Expected ) but found ' + tokens[0])\\n tokens.shift()\\n\\n if (tokens[0] !== 'returns') throw new Error('Expected returns but found ' + tokens[0])\\n tokens.shift()\\n\\n if (tokens[0] !== '(') throw new Error('Expected ( but found ' + tokens[0])\\n tokens.shift()\\n\\n if (tokens[0] === 'stream') {\\n tokens.shift()\\n rpc.server_streaming = true\\n }\\n\\n rpc.output_type = tokens.shift()\\n\\n if (tokens[0] !== ')') throw new Error('Expected ) but found ' + tokens[0])\\n tokens.shift()\\n\\n if (tokens[0] === ';') {\\n tokens.shift()\\n return rpc\\n }\\n\\n if (tokens[0] !== '{') throw new Error('Expected { but found ' + tokens[0])\\n tokens.shift()\\n\\n while (tokens.length) {\\n if (tokens[0] === '}') {\\n tokens.shift()\\n // there goes optional semicolon after the enclosing \\\"}\\\"\\n if (tokens[0] === ';') tokens.shift()\\n return rpc\\n }\\n\\n if (tokens[0] === 'option') {\\n var opt = onoption(tokens)\\n if (rpc.options[opt.name] !== undefined) throw new Error('Duplicate option ' + opt.name)\\n rpc.options[opt.name] = opt.value\\n } else {\\n throw new Error('Unexpected token in rpc options: ' + tokens[0])\\n }\\n }\\n\\n throw new Error('No closing tag for rpc')\\n}\\n\\nvar parse = function (buf) {\\n var tokens = tokenize(buf.toString())\\n // check for isolated strings in tokens by looking for opening quote\\n for (var i = 0; i < tokens.length; i++) {\\n if (/^(\\\"|')([^'\\\"]*)$/.test(tokens[i])) {\\n var j\\n if (tokens[i].length === 1) {\\n j = i + 1\\n } else {\\n j = i\\n }\\n // look ahead for the closing quote and collapse all\\n // in-between tokens into a single token\\n for (j; j < tokens.length; j++) {\\n if (/^([^'\\\"]*)(\\\"|')$/.test(tokens[j])) {\\n tokens = tokens.slice(0, i).concat(tokens.slice(i, j + 1).join('')).concat(tokens.slice(j + 1))\\n break\\n }\\n }\\n }\\n }\\n var schema = {\\n syntax: 3,\\n package: null,\\n imports: [],\\n enums: [],\\n messages: [],\\n options: {},\\n extends: []\\n }\\n\\n var firstline = true\\n\\n while (tokens.length) {\\n switch (tokens[0]) {\\n case 'package':\\n schema.package = onpackagename(tokens)\\n break\\n\\n case 'syntax':\\n if (!firstline) throw new Error('Protobuf syntax version should be first thing in file')\\n schema.syntax = onsyntaxversion(tokens)\\n break\\n\\n case 'message':\\n schema.messages.push(onmessage(tokens))\\n break\\n\\n case 'enum':\\n schema.enums.push(onenum(tokens))\\n break\\n\\n case 'option':\\n var opt = onoption(tokens)\\n if (schema.options[opt.name]) throw new Error('Duplicate option ' + opt.name)\\n schema.options[opt.name] = opt.value\\n break\\n\\n case 'import':\\n schema.imports.push(onimport(tokens))\\n break\\n\\n case 'extend':\\n schema.extends.push(onextend(tokens))\\n break\\n\\n case 'service':\\n if (!schema.services) schema.services = []\\n schema.services.push(onservice(tokens))\\n break\\n\\n default:\\n throw new Error('Unexpected token: ' + tokens[0])\\n }\\n firstline = false\\n }\\n\\n // now iterate over messages and propagate extends\\n schema.extends.forEach(function (ext) {\\n schema.messages.forEach(function (msg) {\\n if (msg.name === ext.name) {\\n ext.message.fields.forEach(function (field) {\\n if (!msg.extensions || field.tag < msg.extensions.from || field.tag > msg.extensions.to) {\\n throw new Error(msg.name + ' does not declare ' + field.tag + ' as an extension number')\\n }\\n msg.fields.push(field)\\n })\\n }\\n })\\n })\\n\\n schema.messages.forEach(function (msg) {\\n msg.fields.forEach(function (field) {\\n var fieldSplit\\n var messageName\\n var nestedEnumName\\n var message\\n\\n function enumNameIsFieldType (en) {\\n return en.name === field.type\\n }\\n\\n function enumNameIsNestedEnumName (en) {\\n return en.name === nestedEnumName\\n }\\n\\n if (field.options && field.options.packed === 'true') {\\n if (PACKABLE_TYPES.indexOf(field.type) === -1) {\\n // let's see if it's an enum\\n if (field.type.indexOf('.') === -1) {\\n if (msg.enums && msg.enums.some(enumNameIsFieldType)) {\\n return\\n }\\n } else {\\n fieldSplit = field.type.split('.')\\n if (fieldSplit.length > 2) {\\n throw new Error('what is this?')\\n }\\n\\n messageName = fieldSplit[0]\\n nestedEnumName = fieldSplit[1]\\n\\n schema.messages.some(function (msg) {\\n if (msg.name === messageName) {\\n message = msg\\n return msg\\n }\\n })\\n\\n if (message && message.enums && message.enums.some(enumNameIsNestedEnumName)) {\\n return\\n }\\n }\\n\\n throw new Error(\\n 'Fields of type ' + field.type + ' cannot be declared [packed=true]. ' +\\n 'Only repeated fields of primitive numeric types (types which use ' +\\n 'the varint, 32-bit, or 64-bit wire types) can be declared \\\"packed\\\". ' +\\n 'See https://developers.google.com/protocol-buffers/docs/encoding#optional'\\n )\\n }\\n }\\n })\\n })\\n\\n return schema\\n}\\n\\nmodule.exports = parse\\n\\n\\n//# sourceURL=webpack:///./node_modules/protocol-buffers-schema/parse.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/protocol-buffers-schema/stringify.js\":\n/*!***********************************************************!*\\\n !*** ./node_modules/protocol-buffers-schema/stringify.js ***!\n \\***********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"var onfield = function (f, result) {\\n var prefix = f.repeated ? 'repeated' : f.required ? 'required' : 'optional'\\n if (f.type === 'map') prefix = 'map<' + f.map.from + ',' + f.map.to + '>'\\n if (f.oneof) prefix = ''\\n\\n var opts = Object.keys(f.options || {}).map(function (key) {\\n return key + ' = ' + f.options[key]\\n }).join(',')\\n\\n if (opts) opts = ' [' + opts + ']'\\n\\n result.push((prefix ? prefix + ' ' : '') + (f.map === 'map' ? '' : f.type + ' ') + f.name + ' = ' + f.tag + opts + ';')\\n return result\\n}\\n\\nvar onmessage = function (m, result) {\\n result.push('message ' + m.name + ' {')\\n\\n if (!m.enums) m.enums = []\\n m.enums.forEach(function (e) {\\n result.push(onenum(e, []))\\n })\\n\\n if (!m.messages) m.messages = []\\n m.messages.forEach(function (m) {\\n result.push(onmessage(m, []))\\n })\\n\\n var oneofs = {}\\n\\n if (!m.fields) m.fields = []\\n m.fields.forEach(function (f) {\\n if (f.oneof) {\\n if (!oneofs[f.oneof]) oneofs[f.oneof] = []\\n oneofs[f.oneof].push(onfield(f, []))\\n } else {\\n result.push(onfield(f, []))\\n }\\n })\\n\\n Object.keys(oneofs).forEach(function (n) {\\n oneofs[n].unshift('oneof ' + n + ' {')\\n oneofs[n].push('}')\\n result.push(oneofs[n])\\n })\\n\\n result.push('}', '')\\n return result\\n}\\n\\nvar onenum = function (e, result) {\\n result.push('enum ' + e.name + ' {')\\n if (!e.options) e.options = {}\\n var options = onoption(e.options, [])\\n if (options.length > 1) {\\n result.push(options.slice(0, -1))\\n }\\n Object.keys(e.values).map(function (v) {\\n var val = onenumvalue(e.values[v])\\n result.push([v + ' = ' + val + ';'])\\n })\\n result.push('}', '')\\n return result\\n}\\n\\nvar onenumvalue = function (v, result) {\\n var opts = Object.keys(v.options || {}).map(function (key) {\\n return key + ' = ' + v.options[key]\\n }).join(',')\\n\\n if (opts) opts = ' [' + opts + ']'\\n var val = v.value + opts\\n return val\\n}\\n\\nvar onoption = function (o, result) {\\n var keys = Object.keys(o)\\n keys.forEach(function (option) {\\n var v = o[option]\\n if (~option.indexOf('.')) option = '(' + option + ')'\\n\\n var type = typeof v\\n\\n if (type === 'object') {\\n v = onoptionMap(v, [])\\n if (v.length) result.push('option ' + option + ' = {', v, '};')\\n } else {\\n if (type === 'string' && option !== 'optimize_for') v = '\\\"' + v + '\\\"'\\n result.push('option ' + option + ' = ' + v + ';')\\n }\\n })\\n if (keys.length > 0) {\\n result.push('')\\n }\\n\\n return result\\n}\\n\\nvar onoptionMap = function (o, result) {\\n var keys = Object.keys(o)\\n keys.forEach(function (k) {\\n var v = o[k]\\n\\n var type = typeof v\\n\\n if (type === 'object') {\\n if (Array.isArray(v)) {\\n v.forEach(function (v) {\\n v = onoptionMap(v, [])\\n if (v.length) result.push(k + ' {', v, '}')\\n })\\n } else {\\n v = onoptionMap(v, [])\\n if (v.length) result.push(k + ' {', v, '}')\\n }\\n } else {\\n if (type === 'string') v = '\\\"' + v + '\\\"'\\n result.push(k + ': ' + v)\\n }\\n })\\n\\n return result\\n}\\n\\nvar onservices = function (s, result) {\\n result.push('service ' + s.name + ' {')\\n\\n if (!s.options) s.options = {}\\n onoption(s.options, result)\\n if (!s.methods) s.methods = []\\n s.methods.forEach(function (m) {\\n result.push(onrpc(m, []))\\n })\\n\\n result.push('}', '')\\n return result\\n}\\n\\nvar onrpc = function (rpc, result) {\\n var def = 'rpc ' + rpc.name + '('\\n if (rpc.client_streaming) def += 'stream '\\n def += rpc.input_type + ') returns ('\\n if (rpc.server_streaming) def += 'stream '\\n def += rpc.output_type + ')'\\n\\n if (!rpc.options) rpc.options = {}\\n\\n var options = onoption(rpc.options, [])\\n if (options.length > 1) {\\n result.push(def + ' {', options.slice(0, -1), '}')\\n } else {\\n result.push(def + ';')\\n }\\n\\n return result\\n}\\n\\nvar indent = function (lvl) {\\n return function (line) {\\n if (Array.isArray(line)) return line.map(indent(lvl + ' ')).join('\\\\n')\\n return lvl + line\\n }\\n}\\n\\nmodule.exports = function (schema) {\\n var result = []\\n\\n result.push('syntax = \\\"proto' + schema.syntax + '\\\";', '')\\n\\n if (schema.package) result.push('package ' + schema.package + ';', '')\\n\\n if (!schema.options) schema.options = {}\\n\\n onoption(schema.options, result)\\n\\n if (!schema.enums) schema.enums = []\\n schema.enums.forEach(function (e) {\\n onenum(e, result)\\n })\\n\\n if (!schema.messages) schema.messages = []\\n schema.messages.forEach(function (m) {\\n onmessage(m, result)\\n })\\n\\n if (schema.services) {\\n schema.services.forEach(function (s) {\\n onservices(s, result)\\n })\\n }\\n return result.map(indent('')).join('\\\\n')\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/protocol-buffers-schema/stringify.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/protocol-buffers-schema/tokenize.js\":\n/*!**********************************************************!*\\\n !*** ./node_modules/protocol-buffers-schema/tokenize.js ***!\n \\**********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"module.exports = function (sch) {\\n var noComments = function (line) {\\n var i = line.indexOf('//')\\n return i > -1 ? line.slice(0, i) : line\\n }\\n\\n var noMultilineComments = function () {\\n var inside = false\\n return function (token) {\\n if (token === '/*') {\\n inside = true\\n return false\\n }\\n if (token === '*/') {\\n inside = false\\n return false\\n }\\n return !inside\\n }\\n }\\n\\n var trim = function (line) {\\n return line.trim()\\n }\\n\\n return sch\\n .replace(/([;,{}()=:[\\\\]<>]|\\\\/\\\\*|\\\\*\\\\/)/g, ' $1 ')\\n .split(/\\\\n/)\\n .map(trim)\\n .filter(Boolean)\\n .map(noComments)\\n .map(trim)\\n .filter(Boolean)\\n .join('\\\\n')\\n .split(/\\\\s+|\\\\n+/gm)\\n .filter(noMultilineComments())\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/protocol-buffers-schema/tokenize.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/protons/src/compile/decode.js\":\n/*!****************************************************!*\\\n !*** ./node_modules/protons/src/compile/decode.js ***!\n \\****************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* eslint max-depth: 1 */\\n\\n\\nvar varint = __webpack_require__(/*! varint */ \\\"./node_modules/varint/index.js\\\")\\nvar defined = __webpack_require__(/*! ./utils */ \\\"./node_modules/protons/src/compile/utils.js\\\").defined\\n\\nfunction compileDecode (m, resolve, enc) {\\n var requiredFields = []\\n var fields = {}\\n var oneofFields = []\\n var vals = []\\n\\n for (var i = 0; i < enc.length; i++) {\\n var field = m.fields[i]\\n\\n fields[field.tag] = i\\n\\n var def = field.options && field.options.default\\n var resolved = resolve(field.type, m.id, false)\\n vals[i] = [def, resolved && resolved.values]\\n\\n m.fields[i].packed = field.repeated && field.options && field.options.packed && field.options.packed !== 'false'\\n\\n if (field.required) {\\n requiredFields.push(field.name)\\n }\\n\\n if (field.oneof) {\\n oneofFields.push(field.name)\\n }\\n }\\n\\n function decodeField (e, field, obj, buf, offset, i) {\\n var name = field.name\\n\\n if (field.oneof) {\\n // clear already defined oneof fields\\n var props = Object.keys(obj)\\n for (var j = 0; j < props.length; j++) {\\n if (oneofFields.indexOf(props[j]) > -1) {\\n delete obj[props[j]]\\n }\\n }\\n }\\n\\n if (e.message) {\\n var len = varint.decode(buf, offset)\\n offset += varint.decode.bytes\\n\\n var decoded = e.decode(buf, offset, offset + len)\\n\\n if (field.map) {\\n obj[name] = obj[name] || {}\\n obj[name][decoded.key] = decoded.value\\n } else if (field.repeated) {\\n obj[name] = obj[name] || []\\n obj[name].push(decoded)\\n } else {\\n obj[name] = decoded\\n }\\n } else {\\n if (field.repeated) {\\n obj[name] = obj[name] || []\\n obj[name].push(e.decode(buf, offset))\\n } else {\\n obj[name] = e.decode(buf, offset)\\n }\\n }\\n\\n offset += e.decode.bytes\\n return offset\\n }\\n\\n return function decode (buf, offset, end) {\\n if (offset == null) {\\n offset = 0\\n }\\n\\n if (end == null) {\\n end = buf.length\\n }\\n\\n if (!(end <= buf.length && offset <= buf.length)) {\\n throw new Error('Decoded message is not valid')\\n }\\n\\n var oldOffset = offset\\n var obj = {}\\n var field\\n\\n while (true) {\\n if (end <= offset) {\\n // finished\\n\\n // check required methods\\n var name = ''\\n var j = 0\\n for (j = 0; j < requiredFields.length; j++) {\\n name = requiredFields[j]\\n if (!defined(obj[name])) {\\n throw new Error('Decoded message is not valid, missing required field: ' + name)\\n }\\n }\\n\\n // fill out missing defaults\\n var val\\n var def\\n for (j = 0; j < enc.length; j++) {\\n field = m.fields[j]\\n def = vals[j][0]\\n val = vals[j][1]\\n name = field.name\\n\\n if (defined(obj[name])) {\\n continue\\n }\\n\\n var done = false\\n if (field.oneof) {\\n var props = Object.keys(obj)\\n for (var k = 0; k < props.length; k++) {\\n if (oneofFields.indexOf(props[k]) > -1) {\\n done = true\\n break\\n }\\n }\\n }\\n\\n if (done) {\\n continue\\n }\\n\\n if (val) { // is enum\\n if (field.repeated) {\\n obj[name] = []\\n } else {\\n def = (def && val[def]) ? val[def].value : val[Object.keys(val)[0]].value\\n obj[name] = parseInt(def || 0, 10)\\n }\\n } else {\\n obj[name] = defaultValue(field, def)\\n }\\n }\\n\\n decode.bytes = offset - oldOffset\\n return obj\\n }\\n\\n var prefix = varint.decode(buf, offset)\\n offset += varint.decode.bytes\\n var tag = prefix >> 3\\n\\n var i = fields[tag]\\n\\n if (i == null) {\\n offset = skip(prefix & 7, buf, offset)\\n continue\\n }\\n\\n var e = enc[i]\\n field = m.fields[i]\\n\\n if (field.packed) {\\n var packedEnd = varint.decode(buf, offset)\\n offset += varint.decode.bytes\\n packedEnd += offset\\n\\n while (offset < packedEnd) {\\n offset = decodeField(e, field, obj, buf, offset, i)\\n }\\n } else {\\n offset = decodeField(e, field, obj, buf, offset, i)\\n }\\n }\\n }\\n}\\n\\nvar skip = function (type, buffer, offset) {\\n switch (type) {\\n case 0:\\n varint.decode(buffer, offset)\\n return offset + varint.decode.bytes\\n\\n case 1:\\n return offset + 8\\n\\n case 2:\\n var len = varint.decode(buffer, offset)\\n return offset + varint.decode.bytes + len\\n\\n case 3:\\n case 4:\\n throw new Error('Groups are not supported')\\n\\n case 5:\\n return offset + 4\\n default:\\n throw new Error('Unknown wire type: ' + type)\\n }\\n}\\n\\nvar defaultValue = function (f, def) {\\n if (f.map) return {}\\n if (f.repeated) return []\\n\\n switch (f.type) {\\n case 'string':\\n return def != null ? def : ''\\n\\n case 'bool':\\n return def === 'true'\\n\\n case 'float':\\n case 'double':\\n case 'sfixed32':\\n case 'fixed32':\\n case 'varint':\\n case 'enum':\\n case 'uint64':\\n case 'uint32':\\n case 'int64':\\n case 'int32':\\n case 'sint64':\\n case 'sint32':\\n return parseInt(def || 0, 10)\\n\\n default:\\n return null\\n }\\n}\\n\\nmodule.exports = compileDecode\\n\\n\\n//# sourceURL=webpack:///./node_modules/protons/src/compile/decode.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/protons/src/compile/encode.js\":\n/*!****************************************************!*\\\n !*** ./node_modules/protons/src/compile/encode.js ***!\n \\****************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {\\n\\nvar defined = __webpack_require__(/*! ./utils */ \\\"./node_modules/protons/src/compile/utils.js\\\").defined\\nvar varint = __webpack_require__(/*! varint */ \\\"./node_modules/varint/index.js\\\")\\n\\nfunction compileEncode (m, resolve, enc, oneofs, encodingLength) {\\n var oneofsKeys = Object.keys(oneofs)\\n var encLength = enc.length\\n var ints = {}\\n for (var i = 0; i < encLength; i++) {\\n ints[i] = {\\n p: varint.encode(m.fields[i].tag << 3 | 2),\\n h: varint.encode(m.fields[i].tag << 3 | enc[i].type)\\n }\\n\\n var field = m.fields[i]\\n m.fields[i].packed = field.repeated && field.options && field.options.packed && field.options.packed !== 'false'\\n }\\n\\n function encodeField (buf, offset, h, e, packed, innerVal) {\\n var j = 0\\n if (!packed) {\\n for (j = 0; j < h.length; j++) {\\n buf[offset++] = h[j]\\n }\\n }\\n\\n if (e.message) {\\n varint.encode(e.encodingLength(innerVal), buf, offset)\\n offset += varint.encode.bytes\\n }\\n\\n e.encode(innerVal, buf, offset)\\n return offset + e.encode.bytes\\n }\\n\\n return function encode (obj, buf, offset) {\\n if (offset == null) {\\n offset = 0\\n }\\n if (buf == null) {\\n buf = Buffer.allocUnsafe(encodingLength(obj))\\n }\\n\\n var oldOffset = offset\\n var objKeys = Object.keys(obj)\\n var i = 0\\n\\n // oneof checks\\n\\n var match = false\\n for (i = 0; i < oneofsKeys.length; i++) {\\n var name = oneofsKeys[i]\\n var prop = oneofs[i]\\n if (objKeys.indexOf(prop) > -1) {\\n if (match) {\\n throw new Error('only one of the properties defined in oneof ' + name + ' can be set')\\n }\\n\\n match = true\\n }\\n }\\n\\n for (i = 0; i < encLength; i++) {\\n var e = enc[i]\\n var field = m.fields[i] // was f\\n var val = obj[field.name]\\n var j = 0\\n\\n if (!defined(val)) {\\n if (field.required) {\\n throw new Error(field.name + ' is required')\\n }\\n continue\\n }\\n var p = ints[i].p\\n var h = ints[i].h\\n\\n var packed = field.packed\\n\\n if (field.map) {\\n var tmp = Object.keys(val)\\n for (j = 0; j < tmp.length; j++) {\\n tmp[j] = {\\n key: tmp[j],\\n value: val[tmp[j]]\\n }\\n }\\n val = tmp\\n }\\n\\n if (packed) {\\n var packedLen = 0\\n for (j = 0; j < val.length; j++) {\\n if (!defined(val[j])) {\\n continue\\n }\\n\\n packedLen += e.encodingLength(val[j])\\n }\\n\\n if (packedLen) {\\n for (j = 0; j < h.length; j++) {\\n buf[offset++] = p[j]\\n }\\n varint.encode(packedLen, buf, offset)\\n offset += varint.encode.bytes\\n }\\n }\\n\\n if (field.repeated) {\\n var innerVal\\n for (j = 0; j < val.length; j++) {\\n innerVal = val[j]\\n if (!defined(innerVal)) {\\n continue\\n }\\n offset = encodeField(buf, offset, h, e, packed, innerVal)\\n }\\n } else {\\n offset = encodeField(buf, offset, h, e, packed, val)\\n }\\n }\\n\\n encode.bytes = offset - oldOffset\\n return buf\\n }\\n}\\n\\nmodule.exports = compileEncode\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/protons/src/compile/encode.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/protons/src/compile/encoding-length.js\":\n/*!*************************************************************!*\\\n !*** ./node_modules/protons/src/compile/encoding-length.js ***!\n \\*************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar defined = __webpack_require__(/*! ./utils */ \\\"./node_modules/protons/src/compile/utils.js\\\").defined\\nvar varint = __webpack_require__(/*! varint */ \\\"./node_modules/varint/index.js\\\")\\n\\nfunction compileEncodingLength (m, enc, oneofs) {\\n var oneofsKeys = Object.keys(oneofs)\\n var encLength = enc.length\\n\\n var hls = new Array(encLength)\\n\\n for (var i = 0; i < m.fields.length; i++) {\\n hls[i] = varint.encodingLength(m.fields[i].tag << 3 | enc[i].type)\\n\\n var field = m.fields[i]\\n m.fields[i].packed = field.repeated && field.options && field.options.packed && field.options.packed !== 'false'\\n }\\n\\n return function encodingLength (obj) {\\n var length = 0\\n var i = 0\\n var j = 0\\n\\n for (i = 0; i < oneofsKeys.length; i++) {\\n var name = oneofsKeys[i]\\n var props = oneofs[name]\\n\\n var match = false\\n for (j = 0; j < props.length; j++) {\\n if (defined(obj[props[j]])) {\\n if (match) {\\n throw new Error('only one of the properties defined in oneof ' + name + ' can be set')\\n }\\n match = true\\n }\\n }\\n }\\n\\n for (i = 0; i < encLength; i++) {\\n var e = enc[i]\\n var field = m.fields[i]\\n var val = obj[field.name]\\n var hl = hls[i]\\n var len\\n\\n if (!defined(val)) {\\n if (field.required) {\\n throw new Error(field.name + ' is required')\\n }\\n\\n continue\\n }\\n\\n if (field.map) {\\n var tmp = Object.keys(val)\\n for (j = 0; j < tmp.length; j++) {\\n tmp[j] = {\\n key: tmp[j],\\n value: val[tmp[j]]\\n }\\n }\\n\\n val = tmp\\n }\\n\\n if (field.packed) {\\n var packedLen = 0\\n for (j = 0; j < val.length; j++) {\\n if (!defined(val[j])) {\\n continue\\n }\\n len = e.encodingLength(val[j])\\n packedLen += len\\n\\n if (e.message) {\\n packedLen += varint.encodingLength(len)\\n }\\n }\\n\\n if (packedLen) {\\n length += hl + packedLen + varint.encodingLength(packedLen)\\n }\\n } else if (field.repeated) {\\n for (j = 0; j < val.length; j++) {\\n if (!defined(val[j])) {\\n continue\\n }\\n\\n len = e.encodingLength(val[j])\\n length += hl + len + (e.message ? varint.encodingLength(len) : 0)\\n }\\n } else {\\n len = e.encodingLength(val)\\n length += hl + len + (e.message ? varint.encodingLength(len) : 0)\\n }\\n }\\n\\n return length\\n }\\n}\\n\\nmodule.exports = compileEncodingLength\\n\\n\\n//# sourceURL=webpack:///./node_modules/protons/src/compile/encoding-length.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/protons/src/compile/encodings.js\":\n/*!*******************************************************!*\\\n !*** ./node_modules/protons/src/compile/encodings.js ***!\n \\*******************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar varint = __webpack_require__(/*! varint */ \\\"./node_modules/varint/index.js\\\")\\nvar svarint = __webpack_require__(/*! signed-varint */ \\\"./node_modules/signed-varint/index.js\\\")\\nvar Buffer = __webpack_require__(/*! safe-buffer */ \\\"./node_modules/safe-buffer/index.js\\\").Buffer\\n\\nvar encoder = function (type, encode, decode, encodingLength) {\\n encode.bytes = decode.bytes = 0\\n\\n return {\\n type: type,\\n encode: encode,\\n decode: decode,\\n encodingLength: encodingLength\\n }\\n}\\n\\nexports.make = encoder\\n\\nexports.bytes = (function (tag) {\\n var bufferLength = function (val) {\\n return Buffer.isBuffer(val) ? val.length : Buffer.byteLength(val)\\n }\\n\\n var encodingLength = function (val) {\\n var len = bufferLength(val)\\n return varint.encodingLength(len) + len\\n }\\n\\n var encode = function (val, buffer, offset) {\\n var oldOffset = offset\\n var len = bufferLength(val)\\n\\n varint.encode(len, buffer, offset)\\n offset += varint.encode.bytes\\n\\n if (Buffer.isBuffer(val)) val.copy(buffer, offset)\\n else buffer.write(val, offset, len)\\n offset += len\\n\\n encode.bytes = offset - oldOffset\\n return buffer\\n }\\n\\n var decode = function (buffer, offset) {\\n var oldOffset = offset\\n\\n var len = varint.decode(buffer, offset)\\n offset += varint.decode.bytes\\n\\n var val = buffer.slice(offset, offset + len)\\n offset += val.length\\n\\n decode.bytes = offset - oldOffset\\n return val\\n }\\n\\n return encoder(2, encode, decode, encodingLength)\\n})()\\n\\nexports.string = (function () {\\n var encodingLength = function (val) {\\n var len = Buffer.byteLength(val)\\n return varint.encodingLength(len) + len\\n }\\n\\n var encode = function (val, buffer, offset) {\\n var oldOffset = offset\\n var len = Buffer.byteLength(val)\\n\\n varint.encode(len, buffer, offset, 'utf-8')\\n offset += varint.encode.bytes\\n\\n buffer.write(val, offset, len)\\n offset += len\\n\\n encode.bytes = offset - oldOffset\\n return buffer\\n }\\n\\n var decode = function (buffer, offset) {\\n var oldOffset = offset\\n\\n var len = varint.decode(buffer, offset)\\n offset += varint.decode.bytes\\n\\n var val = buffer.toString('utf-8', offset, offset + len)\\n offset += len\\n\\n decode.bytes = offset - oldOffset\\n return val\\n }\\n\\n return encoder(2, encode, decode, encodingLength)\\n})()\\n\\nexports.bool = (function () {\\n var encodingLength = function (val) {\\n return 1\\n }\\n\\n var encode = function (val, buffer, offset) {\\n buffer[offset] = val ? 1 : 0\\n encode.bytes = 1\\n return buffer\\n }\\n\\n var decode = function (buffer, offset) {\\n var bool = buffer[offset] > 0\\n decode.bytes = 1\\n return bool\\n }\\n\\n return encoder(0, encode, decode, encodingLength)\\n})()\\n\\nexports.int32 = (function () {\\n var decode = function (buffer, offset) {\\n var val = varint.decode(buffer, offset)\\n decode.bytes = varint.decode.bytes\\n return val > 2147483647 ? val - 4294967296 : val\\n }\\n\\n var encode = function (val, buffer, offset) {\\n varint.encode(val < 0 ? val + 4294967296 : val, buffer, offset)\\n encode.bytes = varint.encode.bytes\\n return buffer\\n }\\n\\n var encodingLength = function (val) {\\n return varint.encodingLength(val < 0 ? val + 4294967296 : val)\\n }\\n\\n return encoder(0, varint.encode, decode, encodingLength)\\n})()\\n\\nexports.int64 = (function () {\\n var decode = function (buffer, offset) {\\n var val = varint.decode(buffer, offset)\\n if (val >= Math.pow(2, 63)) {\\n var limit = 9\\n while (buffer[offset + limit - 1] === 0xff) limit--\\n limit = limit || 9\\n var subset = Buffer.allocUnsafe(limit)\\n buffer.copy(subset, 0, offset, offset + limit)\\n subset[limit - 1] = subset[limit - 1] & 0x7f\\n val = -1 * varint.decode(subset, 0)\\n decode.bytes = 10\\n } else {\\n decode.bytes = varint.decode.bytes\\n }\\n return val\\n }\\n\\n var encode = function (val, buffer, offset) {\\n if (val < 0) {\\n var last = offset + 9\\n varint.encode(val * -1, buffer, offset)\\n offset += varint.encode.bytes - 1\\n buffer[offset] = buffer[offset] | 0x80\\n while (offset < last - 1) {\\n offset++\\n buffer[offset] = 0xff\\n }\\n buffer[last] = 0x01\\n encode.bytes = 10\\n } else {\\n varint.encode(val, buffer, offset)\\n encode.bytes = varint.encode.bytes\\n }\\n return buffer\\n }\\n\\n var encodingLength = function (val) {\\n return val < 0 ? 10 : varint.encodingLength(val)\\n }\\n\\n return encoder(0, encode, decode, encodingLength)\\n})()\\n\\nexports.sint32 =\\nexports.sint64 = (function () {\\n return encoder(0, svarint.encode, svarint.decode, svarint.encodingLength)\\n})()\\n\\nexports.uint32 =\\nexports.uint64 =\\nexports.enum =\\nexports.varint = (function () {\\n return encoder(0, varint.encode, varint.decode, varint.encodingLength)\\n})()\\n\\n// we cannot represent these in javascript so we just use buffers\\nexports.fixed64 =\\nexports.sfixed64 = (function () {\\n var encodingLength = function (val) {\\n return 8\\n }\\n\\n var encode = function (val, buffer, offset) {\\n val.copy(buffer, offset)\\n encode.bytes = 8\\n return buffer\\n }\\n\\n var decode = function (buffer, offset) {\\n var val = buffer.slice(offset, offset + 8)\\n decode.bytes = 8\\n return val\\n }\\n\\n return encoder(1, encode, decode, encodingLength)\\n})()\\n\\nexports.double = (function () {\\n var encodingLength = function (val) {\\n return 8\\n }\\n\\n var encode = function (val, buffer, offset) {\\n buffer.writeDoubleLE(val, offset)\\n encode.bytes = 8\\n return buffer\\n }\\n\\n var decode = function (buffer, offset) {\\n var val = buffer.readDoubleLE(offset)\\n decode.bytes = 8\\n return val\\n }\\n\\n return encoder(1, encode, decode, encodingLength)\\n})()\\n\\nexports.fixed32 = (function () {\\n var encodingLength = function (val) {\\n return 4\\n }\\n\\n var encode = function (val, buffer, offset) {\\n buffer.writeUInt32LE(val, offset)\\n encode.bytes = 4\\n return buffer\\n }\\n\\n var decode = function (buffer, offset) {\\n var val = buffer.readUInt32LE(offset)\\n decode.bytes = 4\\n return val\\n }\\n\\n return encoder(5, encode, decode, encodingLength)\\n})()\\n\\nexports.sfixed32 = (function () {\\n var encodingLength = function (val) {\\n return 4\\n }\\n\\n var encode = function (val, buffer, offset) {\\n buffer.writeInt32LE(val, offset)\\n encode.bytes = 4\\n return buffer\\n }\\n\\n var decode = function (buffer, offset) {\\n var val = buffer.readInt32LE(offset)\\n decode.bytes = 4\\n return val\\n }\\n\\n return encoder(5, encode, decode, encodingLength)\\n})()\\n\\nexports.float = (function () {\\n var encodingLength = function (val) {\\n return 4\\n }\\n\\n var encode = function (val, buffer, offset) {\\n buffer.writeFloatLE(val, offset)\\n encode.bytes = 4\\n return buffer\\n }\\n\\n var decode = function (buffer, offset) {\\n var val = buffer.readFloatLE(offset)\\n decode.bytes = 4\\n return val\\n }\\n\\n return encoder(5, encode, decode, encodingLength)\\n})()\\n\\n\\n//# sourceURL=webpack:///./node_modules/protons/src/compile/encodings.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/protons/src/compile/index.js\":\n/*!***************************************************!*\\\n !*** ./node_modules/protons/src/compile/index.js ***!\n \\***************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nvar encodings = __webpack_require__(/*! ./encodings */ \\\"./node_modules/protons/src/compile/encodings.js\\\")\\nvar compileDecode = __webpack_require__(/*! ./decode */ \\\"./node_modules/protons/src/compile/decode.js\\\")\\nvar compileEncode = __webpack_require__(/*! ./encode */ \\\"./node_modules/protons/src/compile/encode.js\\\")\\nvar compileEncodingLength = __webpack_require__(/*! ./encoding-length */ \\\"./node_modules/protons/src/compile/encoding-length.js\\\")\\nvar varint = __webpack_require__(/*! varint */ \\\"./node_modules/varint/index.js\\\")\\n\\nvar flatten = function (values) {\\n if (!values) return null\\n var result = {}\\n Object.keys(values).forEach(function (k) {\\n result[k] = values[k].value\\n })\\n return result\\n}\\n\\nmodule.exports = function (schema, extraEncodings) {\\n var messages = {}\\n var enums = {}\\n var cache = {}\\n\\n var visit = function (schema, prefix) {\\n if (schema.enums) {\\n schema.enums.forEach(function (e) {\\n e.id = prefix + (prefix ? '.' : '') + e.name\\n enums[e.id] = e\\n visit(e, e.id)\\n })\\n }\\n if (schema.messages) {\\n schema.messages.forEach(function (m) {\\n m.id = prefix + (prefix ? '.' : '') + m.name\\n messages[m.id] = m\\n m.fields.forEach(function (f) {\\n if (!f.map) return\\n\\n var name = 'Map_' + f.map.from + '_' + f.map.to\\n var map = {\\n name: name,\\n enums: [],\\n messages: [],\\n fields: [{\\n name: 'key',\\n type: f.map.from,\\n tag: 1,\\n repeated: false,\\n required: true\\n }, {\\n name: 'value',\\n type: f.map.to,\\n tag: 2,\\n repeated: false,\\n required: false\\n }],\\n extensions: null,\\n id: prefix + (prefix ? '.' : '') + name\\n }\\n\\n if (!messages[map.id]) {\\n messages[map.id] = map\\n schema.messages.push(map)\\n }\\n f.type = name\\n f.repeated = true\\n })\\n visit(m, m.id)\\n })\\n }\\n }\\n\\n visit(schema, '')\\n\\n var compileEnum = function (e) {\\n var values = Object.keys(e.values || []).map(function (k) {\\n return parseInt(e.values[k].value, 10)\\n })\\n\\n var encode = function encode (val, buf, offset) {\\n if (!values.length || values.indexOf(val) === -1) {\\n throw new Error('Invalid enum value: ' + val)\\n }\\n varint.encode(val, buf, offset)\\n encode.bytes = varint.encode.bytes\\n return buf\\n }\\n\\n var decode = function decode (buf, offset) {\\n var val = varint.decode(buf, offset)\\n if (!values.length || values.indexOf(val) === -1) {\\n throw new Error('Invalid enum value: ' + val)\\n }\\n decode.bytes = varint.decode.bytes\\n return val\\n }\\n\\n return encodings.make(0, encode, decode, varint.encodingLength)\\n }\\n\\n var compileMessage = function (m, exports) {\\n m.messages.forEach(function (nested) {\\n exports[nested.name] = resolve(nested.name, m.id)\\n })\\n\\n m.enums.forEach(function (val) {\\n exports[val.name] = flatten(val.values)\\n })\\n\\n exports.type = 2\\n exports.message = true\\n exports.name = m.name\\n\\n var oneofs = {}\\n\\n m.fields.forEach(function (f) {\\n if (!f.oneof) return\\n if (!oneofs[f.oneof]) oneofs[f.oneof] = []\\n oneofs[f.oneof].push(f.name)\\n })\\n\\n var enc = m.fields.map(function (f) {\\n return resolve(f.type, m.id)\\n })\\n\\n var encodingLength = compileEncodingLength(m, enc, oneofs)\\n var encode = compileEncode(m, resolve, enc, oneofs, encodingLength)\\n var decode = compileDecode(m, resolve, enc)\\n\\n // end of compilation - return all the things\\n\\n encode.bytes = decode.bytes = 0\\n\\n exports.buffer = true\\n exports.encode = encode\\n exports.decode = decode\\n exports.encodingLength = encodingLength\\n\\n return exports\\n }\\n\\n var resolve = function (name, from, compile) {\\n if (extraEncodings && extraEncodings[name]) return extraEncodings[name]\\n if (encodings[name]) return encodings[name]\\n\\n var m = (from ? from + '.' + name : name).split('.')\\n .map(function (part, i, list) {\\n return list.slice(0, i).concat(name).join('.')\\n })\\n .reverse()\\n .reduce(function (result, id) {\\n return result || messages[id] || enums[id]\\n }, null)\\n\\n if (compile === false) return m\\n if (!m) throw new Error('Could not resolve ' + name)\\n\\n if (m.values) return compileEnum(m)\\n var res = cache[m.id] || compileMessage(m, cache[m.id] = {})\\n return res\\n }\\n\\n return (schema.enums || []).concat((schema.messages || []).map(function (message) {\\n return resolve(message.id)\\n }))\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/protons/src/compile/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/protons/src/compile/utils.js\":\n/*!***************************************************!*\\\n !*** ./node_modules/protons/src/compile/utils.js ***!\n \\***************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nexports.defined = function (val) {\\n return val !== null && val !== undefined && (typeof val !== 'number' || !isNaN(val))\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/protons/src/compile/utils.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/protons/src/index.js\":\n/*!*******************************************!*\\\n !*** ./node_modules/protons/src/index.js ***!\n \\*******************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {\\n\\nvar schema = __webpack_require__(/*! protocol-buffers-schema */ \\\"./node_modules/protocol-buffers-schema/index.js\\\")\\nvar compile = __webpack_require__(/*! ./compile */ \\\"./node_modules/protons/src/compile/index.js\\\")\\n\\nvar flatten = function (values) {\\n if (!values) return null\\n var result = {}\\n Object.keys(values).forEach(function (k) {\\n result[k] = values[k].value\\n })\\n return result\\n}\\n\\nmodule.exports = function (proto, opts) {\\n if (!opts) opts = {}\\n if (!proto) throw new Error('Pass in a .proto string or a protobuf-schema parsed object')\\n\\n var sch = (typeof proto === 'object' && !Buffer.isBuffer(proto)) ? proto : schema.parse(proto)\\n\\n // to not make toString,toJSON enumarable we make a fire-and-forget prototype\\n var Messages = function () {\\n var self = this\\n\\n compile(sch, opts.encodings || {}).forEach(function (m) {\\n self[m.name] = flatten(m.values) || m\\n })\\n }\\n\\n Messages.prototype.toString = function () {\\n return schema.stringify(sch)\\n }\\n\\n Messages.prototype.toJSON = function () {\\n return sch\\n }\\n\\n return new Messages()\\n}\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/protons/src/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/react/cjs/react.development.js\":\n/*!*****************************************************!*\\\n !*** ./node_modules/react/cjs/react.development.js ***!\n \\*****************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/** @license React v16.8.6\\n * react.development.js\\n *\\n * Copyright (c) Facebook, Inc. and its affiliates.\\n *\\n * This source code is licensed under the MIT license found in the\\n * LICENSE file in the root directory of this source tree.\\n */\\n\\n\\n\\n\\n\\nif (true) {\\n (function() {\\n'use strict';\\n\\nvar _assign = __webpack_require__(/*! object-assign */ \\\"./node_modules/react/node_modules/object-assign/index.js\\\");\\nvar checkPropTypes = __webpack_require__(/*! prop-types/checkPropTypes */ \\\"./node_modules/prop-types/checkPropTypes.js\\\");\\n\\n// TODO: this is special because it gets imported during build.\\n\\nvar ReactVersion = '16.8.6';\\n\\n// The Symbol used to tag the ReactElement-like types. If there is no native Symbol\\n// nor polyfill, then a plain number is used for performance.\\nvar hasSymbol = typeof Symbol === 'function' && Symbol.for;\\n\\nvar REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;\\nvar REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;\\nvar REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;\\nvar REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;\\nvar REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;\\nvar REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;\\nvar REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace;\\n\\nvar REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;\\nvar REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;\\nvar REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;\\nvar REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;\\nvar REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;\\n\\nvar MAYBE_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\\n\\nfunction getIteratorFn(maybeIterable) {\\n if (maybeIterable === null || typeof maybeIterable !== 'object') {\\n return null;\\n }\\n var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\\n if (typeof maybeIterator === 'function') {\\n return maybeIterator;\\n }\\n return null;\\n}\\n\\n/**\\n * Use invariant() to assert state which your program assumes to be true.\\n *\\n * Provide sprintf-style format (only %s is supported) and arguments\\n * to provide information about what broke and what you were\\n * expecting.\\n *\\n * The invariant message will be stripped in production, but the invariant\\n * will remain to ensure logic does not differ in production.\\n */\\n\\nvar validateFormat = function () {};\\n\\n{\\n validateFormat = function (format) {\\n if (format === undefined) {\\n throw new Error('invariant requires an error message argument');\\n }\\n };\\n}\\n\\nfunction invariant(condition, format, a, b, c, d, e, f) {\\n validateFormat(format);\\n\\n if (!condition) {\\n var error = void 0;\\n if (format === undefined) {\\n error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');\\n } else {\\n var args = [a, b, c, d, e, f];\\n var argIndex = 0;\\n error = new Error(format.replace(/%s/g, function () {\\n return args[argIndex++];\\n }));\\n error.name = 'Invariant Violation';\\n }\\n\\n error.framesToPop = 1; // we don't care about invariant's own frame\\n throw error;\\n }\\n}\\n\\n// Relying on the `invariant()` implementation lets us\\n// preserve the format and params in the www builds.\\n\\n/**\\n * Forked from fbjs/warning:\\n * https://github.com/facebook/fbjs/blob/e66ba20ad5be433eb54423f2b097d829324d9de6/packages/fbjs/src/__forks__/warning.js\\n *\\n * Only change is we use console.warn instead of console.error,\\n * and do nothing when 'console' is not supported.\\n * This really simplifies the code.\\n * ---\\n * Similar to invariant but only logs a warning if the condition is not met.\\n * This can be used to log issues in development environments in critical\\n * paths. Removing the logging code for production environments will keep the\\n * same logic and follow the same code paths.\\n */\\n\\nvar lowPriorityWarning = function () {};\\n\\n{\\n var printWarning = function (format) {\\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\\n args[_key - 1] = arguments[_key];\\n }\\n\\n var argIndex = 0;\\n var message = 'Warning: ' + format.replace(/%s/g, function () {\\n return args[argIndex++];\\n });\\n if (typeof console !== 'undefined') {\\n console.warn(message);\\n }\\n try {\\n // --- Welcome to debugging React ---\\n // This error was thrown as a convenience so that you can use this stack\\n // to find the callsite that caused this warning to fire.\\n throw new Error(message);\\n } catch (x) {}\\n };\\n\\n lowPriorityWarning = function (condition, format) {\\n if (format === undefined) {\\n throw new Error('`lowPriorityWarning(condition, format, ...args)` requires a warning ' + 'message argument');\\n }\\n if (!condition) {\\n for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {\\n args[_key2 - 2] = arguments[_key2];\\n }\\n\\n printWarning.apply(undefined, [format].concat(args));\\n }\\n };\\n}\\n\\nvar lowPriorityWarning$1 = lowPriorityWarning;\\n\\n/**\\n * Similar to invariant but only logs a warning if the condition is not met.\\n * This can be used to log issues in development environments in critical\\n * paths. Removing the logging code for production environments will keep the\\n * same logic and follow the same code paths.\\n */\\n\\nvar warningWithoutStack = function () {};\\n\\n{\\n warningWithoutStack = function (condition, format) {\\n for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\\n args[_key - 2] = arguments[_key];\\n }\\n\\n if (format === undefined) {\\n throw new Error('`warningWithoutStack(condition, format, ...args)` requires a warning ' + 'message argument');\\n }\\n if (args.length > 8) {\\n // Check before the condition to catch violations early.\\n throw new Error('warningWithoutStack() currently supports at most 8 arguments.');\\n }\\n if (condition) {\\n return;\\n }\\n if (typeof console !== 'undefined') {\\n var argsWithFormat = args.map(function (item) {\\n return '' + item;\\n });\\n argsWithFormat.unshift('Warning: ' + format);\\n\\n // We intentionally don't use spread (or .apply) directly because it\\n // breaks IE9: https://github.com/facebook/react/issues/13610\\n Function.prototype.apply.call(console.error, console, argsWithFormat);\\n }\\n try {\\n // --- Welcome to debugging React ---\\n // This error was thrown as a convenience so that you can use this stack\\n // to find the callsite that caused this warning to fire.\\n var argIndex = 0;\\n var message = 'Warning: ' + format.replace(/%s/g, function () {\\n return args[argIndex++];\\n });\\n throw new Error(message);\\n } catch (x) {}\\n };\\n}\\n\\nvar warningWithoutStack$1 = warningWithoutStack;\\n\\nvar didWarnStateUpdateForUnmountedComponent = {};\\n\\nfunction warnNoop(publicInstance, callerName) {\\n {\\n var _constructor = publicInstance.constructor;\\n var componentName = _constructor && (_constructor.displayName || _constructor.name) || 'ReactClass';\\n var warningKey = componentName + '.' + callerName;\\n if (didWarnStateUpdateForUnmountedComponent[warningKey]) {\\n return;\\n }\\n warningWithoutStack$1(false, \\\"Can't call %s on a component that is not yet mounted. \\\" + 'This is a no-op, but it might indicate a bug in your application. ' + 'Instead, assign to `this.state` directly or define a `state = {};` ' + 'class property with the desired state in the %s component.', callerName, componentName);\\n didWarnStateUpdateForUnmountedComponent[warningKey] = true;\\n }\\n}\\n\\n/**\\n * This is the abstract API for an update queue.\\n */\\nvar ReactNoopUpdateQueue = {\\n /**\\n * Checks whether or not this composite component is mounted.\\n * @param {ReactClass} publicInstance The instance we want to test.\\n * @return {boolean} True if mounted, false otherwise.\\n * @protected\\n * @final\\n */\\n isMounted: function (publicInstance) {\\n return false;\\n },\\n\\n /**\\n * Forces an update. This should only be invoked when it is known with\\n * certainty that we are **not** in a DOM transaction.\\n *\\n * You may want to call this when you know that some deeper aspect of the\\n * component's state has changed but `setState` was not called.\\n *\\n * This will not invoke `shouldComponentUpdate`, but it will invoke\\n * `componentWillUpdate` and `componentDidUpdate`.\\n *\\n * @param {ReactClass} publicInstance The instance that should rerender.\\n * @param {?function} callback Called after component is updated.\\n * @param {?string} callerName name of the calling function in the public API.\\n * @internal\\n */\\n enqueueForceUpdate: function (publicInstance, callback, callerName) {\\n warnNoop(publicInstance, 'forceUpdate');\\n },\\n\\n /**\\n * Replaces all of the state. Always use this or `setState` to mutate state.\\n * You should treat `this.state` as immutable.\\n *\\n * There is no guarantee that `this.state` will be immediately updated, so\\n * accessing `this.state` after calling this method may return the old value.\\n *\\n * @param {ReactClass} publicInstance The instance that should rerender.\\n * @param {object} completeState Next state.\\n * @param {?function} callback Called after component is updated.\\n * @param {?string} callerName name of the calling function in the public API.\\n * @internal\\n */\\n enqueueReplaceState: function (publicInstance, completeState, callback, callerName) {\\n warnNoop(publicInstance, 'replaceState');\\n },\\n\\n /**\\n * Sets a subset of the state. This only exists because _pendingState is\\n * internal. This provides a merging strategy that is not available to deep\\n * properties which is confusing. TODO: Expose pendingState or don't use it\\n * during the merge.\\n *\\n * @param {ReactClass} publicInstance The instance that should rerender.\\n * @param {object} partialState Next partial state to be merged with state.\\n * @param {?function} callback Called after component is updated.\\n * @param {?string} Name of the calling function in the public API.\\n * @internal\\n */\\n enqueueSetState: function (publicInstance, partialState, callback, callerName) {\\n warnNoop(publicInstance, 'setState');\\n }\\n};\\n\\nvar emptyObject = {};\\n{\\n Object.freeze(emptyObject);\\n}\\n\\n/**\\n * Base class helpers for the updating state of a component.\\n */\\nfunction Component(props, context, updater) {\\n this.props = props;\\n this.context = context;\\n // If a component has string refs, we will assign a different object later.\\n this.refs = emptyObject;\\n // We initialize the default updater but the real one gets injected by the\\n // renderer.\\n this.updater = updater || ReactNoopUpdateQueue;\\n}\\n\\nComponent.prototype.isReactComponent = {};\\n\\n/**\\n * Sets a subset of the state. Always use this to mutate\\n * state. You should treat `this.state` as immutable.\\n *\\n * There is no guarantee that `this.state` will be immediately updated, so\\n * accessing `this.state` after calling this method may return the old value.\\n *\\n * There is no guarantee that calls to `setState` will run synchronously,\\n * as they may eventually be batched together. You can provide an optional\\n * callback that will be executed when the call to setState is actually\\n * completed.\\n *\\n * When a function is provided to setState, it will be called at some point in\\n * the future (not synchronously). It will be called with the up to date\\n * component arguments (state, props, context). These values can be different\\n * from this.* because your function may be called after receiveProps but before\\n * shouldComponentUpdate, and this new state, props, and context will not yet be\\n * assigned to this.\\n *\\n * @param {object|function} partialState Next partial state or function to\\n * produce next partial state to be merged with current state.\\n * @param {?function} callback Called after state is updated.\\n * @final\\n * @protected\\n */\\nComponent.prototype.setState = function (partialState, callback) {\\n !(typeof partialState === 'object' || typeof partialState === 'function' || partialState == null) ? invariant(false, 'setState(...): takes an object of state variables to update or a function which returns an object of state variables.') : void 0;\\n this.updater.enqueueSetState(this, partialState, callback, 'setState');\\n};\\n\\n/**\\n * Forces an update. This should only be invoked when it is known with\\n * certainty that we are **not** in a DOM transaction.\\n *\\n * You may want to call this when you know that some deeper aspect of the\\n * component's state has changed but `setState` was not called.\\n *\\n * This will not invoke `shouldComponentUpdate`, but it will invoke\\n * `componentWillUpdate` and `componentDidUpdate`.\\n *\\n * @param {?function} callback Called after update is complete.\\n * @final\\n * @protected\\n */\\nComponent.prototype.forceUpdate = function (callback) {\\n this.updater.enqueueForceUpdate(this, callback, 'forceUpdate');\\n};\\n\\n/**\\n * Deprecated APIs. These APIs used to exist on classic React classes but since\\n * we would like to deprecate them, we're not going to move them over to this\\n * modern base class. Instead, we define a getter that warns if it's accessed.\\n */\\n{\\n var deprecatedAPIs = {\\n isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'],\\n replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).']\\n };\\n var defineDeprecationWarning = function (methodName, info) {\\n Object.defineProperty(Component.prototype, methodName, {\\n get: function () {\\n lowPriorityWarning$1(false, '%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]);\\n return undefined;\\n }\\n });\\n };\\n for (var fnName in deprecatedAPIs) {\\n if (deprecatedAPIs.hasOwnProperty(fnName)) {\\n defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);\\n }\\n }\\n}\\n\\nfunction ComponentDummy() {}\\nComponentDummy.prototype = Component.prototype;\\n\\n/**\\n * Convenience component with default shallow equality check for sCU.\\n */\\nfunction PureComponent(props, context, updater) {\\n this.props = props;\\n this.context = context;\\n // If a component has string refs, we will assign a different object later.\\n this.refs = emptyObject;\\n this.updater = updater || ReactNoopUpdateQueue;\\n}\\n\\nvar pureComponentPrototype = PureComponent.prototype = new ComponentDummy();\\npureComponentPrototype.constructor = PureComponent;\\n// Avoid an extra prototype jump for these methods.\\n_assign(pureComponentPrototype, Component.prototype);\\npureComponentPrototype.isPureReactComponent = true;\\n\\n// an immutable object with a single mutable value\\nfunction createRef() {\\n var refObject = {\\n current: null\\n };\\n {\\n Object.seal(refObject);\\n }\\n return refObject;\\n}\\n\\n/**\\n * Keeps track of the current dispatcher.\\n */\\nvar ReactCurrentDispatcher = {\\n /**\\n * @internal\\n * @type {ReactComponent}\\n */\\n current: null\\n};\\n\\n/**\\n * Keeps track of the current owner.\\n *\\n * The current owner is the component who should own any components that are\\n * currently being constructed.\\n */\\nvar ReactCurrentOwner = {\\n /**\\n * @internal\\n * @type {ReactComponent}\\n */\\n current: null\\n};\\n\\nvar BEFORE_SLASH_RE = /^(.*)[\\\\\\\\\\\\/]/;\\n\\nvar describeComponentFrame = function (name, source, ownerName) {\\n var sourceInfo = '';\\n if (source) {\\n var path = source.fileName;\\n var fileName = path.replace(BEFORE_SLASH_RE, '');\\n {\\n // In DEV, include code for a common special case:\\n // prefer \\\"folder/index.js\\\" instead of just \\\"index.js\\\".\\n if (/^index\\\\./.test(fileName)) {\\n var match = path.match(BEFORE_SLASH_RE);\\n if (match) {\\n var pathBeforeSlash = match[1];\\n if (pathBeforeSlash) {\\n var folderName = pathBeforeSlash.replace(BEFORE_SLASH_RE, '');\\n fileName = folderName + '/' + fileName;\\n }\\n }\\n }\\n }\\n sourceInfo = ' (at ' + fileName + ':' + source.lineNumber + ')';\\n } else if (ownerName) {\\n sourceInfo = ' (created by ' + ownerName + ')';\\n }\\n return '\\\\n in ' + (name || 'Unknown') + sourceInfo;\\n};\\n\\nvar Resolved = 1;\\n\\n\\nfunction refineResolvedLazyComponent(lazyComponent) {\\n return lazyComponent._status === Resolved ? lazyComponent._result : null;\\n}\\n\\nfunction getWrappedName(outerType, innerType, wrapperName) {\\n var functionName = innerType.displayName || innerType.name || '';\\n return outerType.displayName || (functionName !== '' ? wrapperName + '(' + functionName + ')' : wrapperName);\\n}\\n\\nfunction getComponentName(type) {\\n if (type == null) {\\n // Host root, text node or just invalid type.\\n return null;\\n }\\n {\\n if (typeof type.tag === 'number') {\\n warningWithoutStack$1(false, 'Received an unexpected object in getComponentName(). ' + 'This is likely a bug in React. Please file an issue.');\\n }\\n }\\n if (typeof type === 'function') {\\n return type.displayName || type.name || null;\\n }\\n if (typeof type === 'string') {\\n return type;\\n }\\n switch (type) {\\n case REACT_CONCURRENT_MODE_TYPE:\\n return 'ConcurrentMode';\\n case REACT_FRAGMENT_TYPE:\\n return 'Fragment';\\n case REACT_PORTAL_TYPE:\\n return 'Portal';\\n case REACT_PROFILER_TYPE:\\n return 'Profiler';\\n case REACT_STRICT_MODE_TYPE:\\n return 'StrictMode';\\n case REACT_SUSPENSE_TYPE:\\n return 'Suspense';\\n }\\n if (typeof type === 'object') {\\n switch (type.$$typeof) {\\n case REACT_CONTEXT_TYPE:\\n return 'Context.Consumer';\\n case REACT_PROVIDER_TYPE:\\n return 'Context.Provider';\\n case REACT_FORWARD_REF_TYPE:\\n return getWrappedName(type, type.render, 'ForwardRef');\\n case REACT_MEMO_TYPE:\\n return getComponentName(type.type);\\n case REACT_LAZY_TYPE:\\n {\\n var thenable = type;\\n var resolvedThenable = refineResolvedLazyComponent(thenable);\\n if (resolvedThenable) {\\n return getComponentName(resolvedThenable);\\n }\\n }\\n }\\n }\\n return null;\\n}\\n\\nvar ReactDebugCurrentFrame = {};\\n\\nvar currentlyValidatingElement = null;\\n\\nfunction setCurrentlyValidatingElement(element) {\\n {\\n currentlyValidatingElement = element;\\n }\\n}\\n\\n{\\n // Stack implementation injected by the current renderer.\\n ReactDebugCurrentFrame.getCurrentStack = null;\\n\\n ReactDebugCurrentFrame.getStackAddendum = function () {\\n var stack = '';\\n\\n // Add an extra top frame while an element is being validated\\n if (currentlyValidatingElement) {\\n var name = getComponentName(currentlyValidatingElement.type);\\n var owner = currentlyValidatingElement._owner;\\n stack += describeComponentFrame(name, currentlyValidatingElement._source, owner && getComponentName(owner.type));\\n }\\n\\n // Delegate to the injected renderer-specific implementation\\n var impl = ReactDebugCurrentFrame.getCurrentStack;\\n if (impl) {\\n stack += impl() || '';\\n }\\n\\n return stack;\\n };\\n}\\n\\nvar ReactSharedInternals = {\\n ReactCurrentDispatcher: ReactCurrentDispatcher,\\n ReactCurrentOwner: ReactCurrentOwner,\\n // Used by renderers to avoid bundling object-assign twice in UMD bundles:\\n assign: _assign\\n};\\n\\n{\\n _assign(ReactSharedInternals, {\\n // These should not be included in production.\\n ReactDebugCurrentFrame: ReactDebugCurrentFrame,\\n // Shim for React DOM 16.0.0 which still destructured (but not used) this.\\n // TODO: remove in React 17.0.\\n ReactComponentTreeHook: {}\\n });\\n}\\n\\n/**\\n * Similar to invariant but only logs a warning if the condition is not met.\\n * This can be used to log issues in development environments in critical\\n * paths. Removing the logging code for production environments will keep the\\n * same logic and follow the same code paths.\\n */\\n\\nvar warning = warningWithoutStack$1;\\n\\n{\\n warning = function (condition, format) {\\n if (condition) {\\n return;\\n }\\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\\n var stack = ReactDebugCurrentFrame.getStackAddendum();\\n // eslint-disable-next-line react-internal/warning-and-invariant-args\\n\\n for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\\n args[_key - 2] = arguments[_key];\\n }\\n\\n warningWithoutStack$1.apply(undefined, [false, format + '%s'].concat(args, [stack]));\\n };\\n}\\n\\nvar warning$1 = warning;\\n\\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\\n\\nvar RESERVED_PROPS = {\\n key: true,\\n ref: true,\\n __self: true,\\n __source: true\\n};\\n\\nvar specialPropKeyWarningShown = void 0;\\nvar specialPropRefWarningShown = void 0;\\n\\nfunction hasValidRef(config) {\\n {\\n if (hasOwnProperty.call(config, 'ref')) {\\n var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\\n if (getter && getter.isReactWarning) {\\n return false;\\n }\\n }\\n }\\n return config.ref !== undefined;\\n}\\n\\nfunction hasValidKey(config) {\\n {\\n if (hasOwnProperty.call(config, 'key')) {\\n var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\\n if (getter && getter.isReactWarning) {\\n return false;\\n }\\n }\\n }\\n return config.key !== undefined;\\n}\\n\\nfunction defineKeyPropWarningGetter(props, displayName) {\\n var warnAboutAccessingKey = function () {\\n if (!specialPropKeyWarningShown) {\\n specialPropKeyWarningShown = true;\\n warningWithoutStack$1(false, '%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', displayName);\\n }\\n };\\n warnAboutAccessingKey.isReactWarning = true;\\n Object.defineProperty(props, 'key', {\\n get: warnAboutAccessingKey,\\n configurable: true\\n });\\n}\\n\\nfunction defineRefPropWarningGetter(props, displayName) {\\n var warnAboutAccessingRef = function () {\\n if (!specialPropRefWarningShown) {\\n specialPropRefWarningShown = true;\\n warningWithoutStack$1(false, '%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', displayName);\\n }\\n };\\n warnAboutAccessingRef.isReactWarning = true;\\n Object.defineProperty(props, 'ref', {\\n get: warnAboutAccessingRef,\\n configurable: true\\n });\\n}\\n\\n/**\\n * Factory method to create a new React element. This no longer adheres to\\n * the class pattern, so do not use new to call it. Also, no instanceof check\\n * will work. Instead test $$typeof field against Symbol.for('react.element') to check\\n * if something is a React Element.\\n *\\n * @param {*} type\\n * @param {*} key\\n * @param {string|object} ref\\n * @param {*} self A *temporary* helper to detect places where `this` is\\n * different from the `owner` when React.createElement is called, so that we\\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\\n * functions, and as long as `this` and owner are the same, there will be no\\n * change in behavior.\\n * @param {*} source An annotation object (added by a transpiler or otherwise)\\n * indicating filename, line number, and/or other information.\\n * @param {*} owner\\n * @param {*} props\\n * @internal\\n */\\nvar ReactElement = function (type, key, ref, self, source, owner, props) {\\n var element = {\\n // This tag allows us to uniquely identify this as a React Element\\n $$typeof: REACT_ELEMENT_TYPE,\\n\\n // Built-in properties that belong on the element\\n type: type,\\n key: key,\\n ref: ref,\\n props: props,\\n\\n // Record the component responsible for creating this element.\\n _owner: owner\\n };\\n\\n {\\n // The validation flag is currently mutative. We put it on\\n // an external backing store so that we can freeze the whole object.\\n // This can be replaced with a WeakMap once they are implemented in\\n // commonly used development environments.\\n element._store = {};\\n\\n // To make comparing ReactElements easier for testing purposes, we make\\n // the validation flag non-enumerable (where possible, which should\\n // include every environment we run tests in), so the test framework\\n // ignores it.\\n Object.defineProperty(element._store, 'validated', {\\n configurable: false,\\n enumerable: false,\\n writable: true,\\n value: false\\n });\\n // self and source are DEV only properties.\\n Object.defineProperty(element, '_self', {\\n configurable: false,\\n enumerable: false,\\n writable: false,\\n value: self\\n });\\n // Two elements created in two different places should be considered\\n // equal for testing purposes and therefore we hide it from enumeration.\\n Object.defineProperty(element, '_source', {\\n configurable: false,\\n enumerable: false,\\n writable: false,\\n value: source\\n });\\n if (Object.freeze) {\\n Object.freeze(element.props);\\n Object.freeze(element);\\n }\\n }\\n\\n return element;\\n};\\n\\n/**\\n * Create and return a new ReactElement of the given type.\\n * See https://reactjs.org/docs/react-api.html#createelement\\n */\\nfunction createElement(type, config, children) {\\n var propName = void 0;\\n\\n // Reserved names are extracted\\n var props = {};\\n\\n var key = null;\\n var ref = null;\\n var self = null;\\n var source = null;\\n\\n if (config != null) {\\n if (hasValidRef(config)) {\\n ref = config.ref;\\n }\\n if (hasValidKey(config)) {\\n key = '' + config.key;\\n }\\n\\n self = config.__self === undefined ? null : config.__self;\\n source = config.__source === undefined ? null : config.__source;\\n // Remaining properties are added to a new props object\\n for (propName in config) {\\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\\n props[propName] = config[propName];\\n }\\n }\\n }\\n\\n // Children can be more than one argument, and those are transferred onto\\n // the newly allocated props object.\\n var childrenLength = arguments.length - 2;\\n if (childrenLength === 1) {\\n props.children = children;\\n } else if (childrenLength > 1) {\\n var childArray = Array(childrenLength);\\n for (var i = 0; i < childrenLength; i++) {\\n childArray[i] = arguments[i + 2];\\n }\\n {\\n if (Object.freeze) {\\n Object.freeze(childArray);\\n }\\n }\\n props.children = childArray;\\n }\\n\\n // Resolve default props\\n if (type && type.defaultProps) {\\n var defaultProps = type.defaultProps;\\n for (propName in defaultProps) {\\n if (props[propName] === undefined) {\\n props[propName] = defaultProps[propName];\\n }\\n }\\n }\\n {\\n if (key || ref) {\\n var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\\n if (key) {\\n defineKeyPropWarningGetter(props, displayName);\\n }\\n if (ref) {\\n defineRefPropWarningGetter(props, displayName);\\n }\\n }\\n }\\n return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\\n}\\n\\n/**\\n * Return a function that produces ReactElements of a given type.\\n * See https://reactjs.org/docs/react-api.html#createfactory\\n */\\n\\n\\nfunction cloneAndReplaceKey(oldElement, newKey) {\\n var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props);\\n\\n return newElement;\\n}\\n\\n/**\\n * Clone and return a new ReactElement using element as the starting point.\\n * See https://reactjs.org/docs/react-api.html#cloneelement\\n */\\nfunction cloneElement(element, config, children) {\\n !!(element === null || element === undefined) ? invariant(false, 'React.cloneElement(...): The argument must be a React element, but you passed %s.', element) : void 0;\\n\\n var propName = void 0;\\n\\n // Original props are copied\\n var props = _assign({}, element.props);\\n\\n // Reserved names are extracted\\n var key = element.key;\\n var ref = element.ref;\\n // Self is preserved since the owner is preserved.\\n var self = element._self;\\n // Source is preserved since cloneElement is unlikely to be targeted by a\\n // transpiler, and the original source is probably a better indicator of the\\n // true owner.\\n var source = element._source;\\n\\n // Owner will be preserved, unless ref is overridden\\n var owner = element._owner;\\n\\n if (config != null) {\\n if (hasValidRef(config)) {\\n // Silently steal the ref from the parent.\\n ref = config.ref;\\n owner = ReactCurrentOwner.current;\\n }\\n if (hasValidKey(config)) {\\n key = '' + config.key;\\n }\\n\\n // Remaining properties override existing props\\n var defaultProps = void 0;\\n if (element.type && element.type.defaultProps) {\\n defaultProps = element.type.defaultProps;\\n }\\n for (propName in config) {\\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\\n if (config[propName] === undefined && defaultProps !== undefined) {\\n // Resolve default props\\n props[propName] = defaultProps[propName];\\n } else {\\n props[propName] = config[propName];\\n }\\n }\\n }\\n }\\n\\n // Children can be more than one argument, and those are transferred onto\\n // the newly allocated props object.\\n var childrenLength = arguments.length - 2;\\n if (childrenLength === 1) {\\n props.children = children;\\n } else if (childrenLength > 1) {\\n var childArray = Array(childrenLength);\\n for (var i = 0; i < childrenLength; i++) {\\n childArray[i] = arguments[i + 2];\\n }\\n props.children = childArray;\\n }\\n\\n return ReactElement(element.type, key, ref, self, source, owner, props);\\n}\\n\\n/**\\n * Verifies the object is a ReactElement.\\n * See https://reactjs.org/docs/react-api.html#isvalidelement\\n * @param {?object} object\\n * @return {boolean} True if `object` is a ReactElement.\\n * @final\\n */\\nfunction isValidElement(object) {\\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\\n}\\n\\nvar SEPARATOR = '.';\\nvar SUBSEPARATOR = ':';\\n\\n/**\\n * Escape and wrap key so it is safe to use as a reactid\\n *\\n * @param {string} key to be escaped.\\n * @return {string} the escaped key.\\n */\\nfunction escape(key) {\\n var escapeRegex = /[=:]/g;\\n var escaperLookup = {\\n '=': '=0',\\n ':': '=2'\\n };\\n var escapedString = ('' + key).replace(escapeRegex, function (match) {\\n return escaperLookup[match];\\n });\\n\\n return '$' + escapedString;\\n}\\n\\n/**\\n * TODO: Test that a single child and an array with one item have the same key\\n * pattern.\\n */\\n\\nvar didWarnAboutMaps = false;\\n\\nvar userProvidedKeyEscapeRegex = /\\\\/+/g;\\nfunction escapeUserProvidedKey(text) {\\n return ('' + text).replace(userProvidedKeyEscapeRegex, '$&/');\\n}\\n\\nvar POOL_SIZE = 10;\\nvar traverseContextPool = [];\\nfunction getPooledTraverseContext(mapResult, keyPrefix, mapFunction, mapContext) {\\n if (traverseContextPool.length) {\\n var traverseContext = traverseContextPool.pop();\\n traverseContext.result = mapResult;\\n traverseContext.keyPrefix = keyPrefix;\\n traverseContext.func = mapFunction;\\n traverseContext.context = mapContext;\\n traverseContext.count = 0;\\n return traverseContext;\\n } else {\\n return {\\n result: mapResult,\\n keyPrefix: keyPrefix,\\n func: mapFunction,\\n context: mapContext,\\n count: 0\\n };\\n }\\n}\\n\\nfunction releaseTraverseContext(traverseContext) {\\n traverseContext.result = null;\\n traverseContext.keyPrefix = null;\\n traverseContext.func = null;\\n traverseContext.context = null;\\n traverseContext.count = 0;\\n if (traverseContextPool.length < POOL_SIZE) {\\n traverseContextPool.push(traverseContext);\\n }\\n}\\n\\n/**\\n * @param {?*} children Children tree container.\\n * @param {!string} nameSoFar Name of the key path so far.\\n * @param {!function} callback Callback to invoke with each child found.\\n * @param {?*} traverseContext Used to pass information throughout the traversal\\n * process.\\n * @return {!number} The number of children in this subtree.\\n */\\nfunction traverseAllChildrenImpl(children, nameSoFar, callback, traverseContext) {\\n var type = typeof children;\\n\\n if (type === 'undefined' || type === 'boolean') {\\n // All of the above are perceived as null.\\n children = null;\\n }\\n\\n var invokeCallback = false;\\n\\n if (children === null) {\\n invokeCallback = true;\\n } else {\\n switch (type) {\\n case 'string':\\n case 'number':\\n invokeCallback = true;\\n break;\\n case 'object':\\n switch (children.$$typeof) {\\n case REACT_ELEMENT_TYPE:\\n case REACT_PORTAL_TYPE:\\n invokeCallback = true;\\n }\\n }\\n }\\n\\n if (invokeCallback) {\\n callback(traverseContext, children,\\n // If it's the only child, treat the name as if it was wrapped in an array\\n // so that it's consistent if the number of children grows.\\n nameSoFar === '' ? SEPARATOR + getComponentKey(children, 0) : nameSoFar);\\n return 1;\\n }\\n\\n var child = void 0;\\n var nextName = void 0;\\n var subtreeCount = 0; // Count of children found in the current subtree.\\n var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR;\\n\\n if (Array.isArray(children)) {\\n for (var i = 0; i < children.length; i++) {\\n child = children[i];\\n nextName = nextNamePrefix + getComponentKey(child, i);\\n subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\\n }\\n } else {\\n var iteratorFn = getIteratorFn(children);\\n if (typeof iteratorFn === 'function') {\\n {\\n // Warn about using Maps as children\\n if (iteratorFn === children.entries) {\\n !didWarnAboutMaps ? warning$1(false, 'Using Maps as children is unsupported and will likely yield ' + 'unexpected results. Convert it to a sequence/iterable of keyed ' + 'ReactElements instead.') : void 0;\\n didWarnAboutMaps = true;\\n }\\n }\\n\\n var iterator = iteratorFn.call(children);\\n var step = void 0;\\n var ii = 0;\\n while (!(step = iterator.next()).done) {\\n child = step.value;\\n nextName = nextNamePrefix + getComponentKey(child, ii++);\\n subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\\n }\\n } else if (type === 'object') {\\n var addendum = '';\\n {\\n addendum = ' If you meant to render a collection of children, use an array ' + 'instead.' + ReactDebugCurrentFrame.getStackAddendum();\\n }\\n var childrenString = '' + children;\\n invariant(false, 'Objects are not valid as a React child (found: %s).%s', childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString, addendum);\\n }\\n }\\n\\n return subtreeCount;\\n}\\n\\n/**\\n * Traverses children that are typically specified as `props.children`, but\\n * might also be specified through attributes:\\n *\\n * - `traverseAllChildren(this.props.children, ...)`\\n * - `traverseAllChildren(this.props.leftPanelChildren, ...)`\\n *\\n * The `traverseContext` is an optional argument that is passed through the\\n * entire traversal. It can be used to store accumulations or anything else that\\n * the callback might find relevant.\\n *\\n * @param {?*} children Children tree object.\\n * @param {!function} callback To invoke upon traversing each child.\\n * @param {?*} traverseContext Context for traversal.\\n * @return {!number} The number of children in this subtree.\\n */\\nfunction traverseAllChildren(children, callback, traverseContext) {\\n if (children == null) {\\n return 0;\\n }\\n\\n return traverseAllChildrenImpl(children, '', callback, traverseContext);\\n}\\n\\n/**\\n * Generate a key string that identifies a component within a set.\\n *\\n * @param {*} component A component that could contain a manual key.\\n * @param {number} index Index that is used if a manual key is not provided.\\n * @return {string}\\n */\\nfunction getComponentKey(component, index) {\\n // Do some typechecking here since we call this blindly. We want to ensure\\n // that we don't block potential future ES APIs.\\n if (typeof component === 'object' && component !== null && component.key != null) {\\n // Explicit key\\n return escape(component.key);\\n }\\n // Implicit key determined by the index in the set\\n return index.toString(36);\\n}\\n\\nfunction forEachSingleChild(bookKeeping, child, name) {\\n var func = bookKeeping.func,\\n context = bookKeeping.context;\\n\\n func.call(context, child, bookKeeping.count++);\\n}\\n\\n/**\\n * Iterates through children that are typically specified as `props.children`.\\n *\\n * See https://reactjs.org/docs/react-api.html#reactchildrenforeach\\n *\\n * The provided forEachFunc(child, index) will be called for each\\n * leaf child.\\n *\\n * @param {?*} children Children tree container.\\n * @param {function(*, int)} forEachFunc\\n * @param {*} forEachContext Context for forEachContext.\\n */\\nfunction forEachChildren(children, forEachFunc, forEachContext) {\\n if (children == null) {\\n return children;\\n }\\n var traverseContext = getPooledTraverseContext(null, null, forEachFunc, forEachContext);\\n traverseAllChildren(children, forEachSingleChild, traverseContext);\\n releaseTraverseContext(traverseContext);\\n}\\n\\nfunction mapSingleChildIntoContext(bookKeeping, child, childKey) {\\n var result = bookKeeping.result,\\n keyPrefix = bookKeeping.keyPrefix,\\n func = bookKeeping.func,\\n context = bookKeeping.context;\\n\\n\\n var mappedChild = func.call(context, child, bookKeeping.count++);\\n if (Array.isArray(mappedChild)) {\\n mapIntoWithKeyPrefixInternal(mappedChild, result, childKey, function (c) {\\n return c;\\n });\\n } else if (mappedChild != null) {\\n if (isValidElement(mappedChild)) {\\n mappedChild = cloneAndReplaceKey(mappedChild,\\n // Keep both the (mapped) and old keys if they differ, just as\\n // traverseAllChildren used to do for objects as children\\n keyPrefix + (mappedChild.key && (!child || child.key !== mappedChild.key) ? escapeUserProvidedKey(mappedChild.key) + '/' : '') + childKey);\\n }\\n result.push(mappedChild);\\n }\\n}\\n\\nfunction mapIntoWithKeyPrefixInternal(children, array, prefix, func, context) {\\n var escapedPrefix = '';\\n if (prefix != null) {\\n escapedPrefix = escapeUserProvidedKey(prefix) + '/';\\n }\\n var traverseContext = getPooledTraverseContext(array, escapedPrefix, func, context);\\n traverseAllChildren(children, mapSingleChildIntoContext, traverseContext);\\n releaseTraverseContext(traverseContext);\\n}\\n\\n/**\\n * Maps children that are typically specified as `props.children`.\\n *\\n * See https://reactjs.org/docs/react-api.html#reactchildrenmap\\n *\\n * The provided mapFunction(child, key, index) will be called for each\\n * leaf child.\\n *\\n * @param {?*} children Children tree container.\\n * @param {function(*, int)} func The map function.\\n * @param {*} context Context for mapFunction.\\n * @return {object} Object containing the ordered map of results.\\n */\\nfunction mapChildren(children, func, context) {\\n if (children == null) {\\n return children;\\n }\\n var result = [];\\n mapIntoWithKeyPrefixInternal(children, result, null, func, context);\\n return result;\\n}\\n\\n/**\\n * Count the number of children that are typically specified as\\n * `props.children`.\\n *\\n * See https://reactjs.org/docs/react-api.html#reactchildrencount\\n *\\n * @param {?*} children Children tree container.\\n * @return {number} The number of children.\\n */\\nfunction countChildren(children) {\\n return traverseAllChildren(children, function () {\\n return null;\\n }, null);\\n}\\n\\n/**\\n * Flatten a children object (typically specified as `props.children`) and\\n * return an array with appropriately re-keyed children.\\n *\\n * See https://reactjs.org/docs/react-api.html#reactchildrentoarray\\n */\\nfunction toArray(children) {\\n var result = [];\\n mapIntoWithKeyPrefixInternal(children, result, null, function (child) {\\n return child;\\n });\\n return result;\\n}\\n\\n/**\\n * Returns the first child in a collection of children and verifies that there\\n * is only one child in the collection.\\n *\\n * See https://reactjs.org/docs/react-api.html#reactchildrenonly\\n *\\n * The current implementation of this function assumes that a single child gets\\n * passed without a wrapper, but the purpose of this helper function is to\\n * abstract away the particular structure of children.\\n *\\n * @param {?object} children Child collection structure.\\n * @return {ReactElement} The first and only `ReactElement` contained in the\\n * structure.\\n */\\nfunction onlyChild(children) {\\n !isValidElement(children) ? invariant(false, 'React.Children.only expected to receive a single React element child.') : void 0;\\n return children;\\n}\\n\\nfunction createContext(defaultValue, calculateChangedBits) {\\n if (calculateChangedBits === undefined) {\\n calculateChangedBits = null;\\n } else {\\n {\\n !(calculateChangedBits === null || typeof calculateChangedBits === 'function') ? warningWithoutStack$1(false, 'createContext: Expected the optional second argument to be a ' + 'function. Instead received: %s', calculateChangedBits) : void 0;\\n }\\n }\\n\\n var context = {\\n $$typeof: REACT_CONTEXT_TYPE,\\n _calculateChangedBits: calculateChangedBits,\\n // As a workaround to support multiple concurrent renderers, we categorize\\n // some renderers as primary and others as secondary. We only expect\\n // there to be two concurrent renderers at most: React Native (primary) and\\n // Fabric (secondary); React DOM (primary) and React ART (secondary).\\n // Secondary renderers store their context values on separate fields.\\n _currentValue: defaultValue,\\n _currentValue2: defaultValue,\\n // Used to track how many concurrent renderers this context currently\\n // supports within in a single renderer. Such as parallel server rendering.\\n _threadCount: 0,\\n // These are circular\\n Provider: null,\\n Consumer: null\\n };\\n\\n context.Provider = {\\n $$typeof: REACT_PROVIDER_TYPE,\\n _context: context\\n };\\n\\n var hasWarnedAboutUsingNestedContextConsumers = false;\\n var hasWarnedAboutUsingConsumerProvider = false;\\n\\n {\\n // A separate object, but proxies back to the original context object for\\n // backwards compatibility. It has a different $$typeof, so we can properly\\n // warn for the incorrect usage of Context as a Consumer.\\n var Consumer = {\\n $$typeof: REACT_CONTEXT_TYPE,\\n _context: context,\\n _calculateChangedBits: context._calculateChangedBits\\n };\\n // $FlowFixMe: Flow complains about not setting a value, which is intentional here\\n Object.defineProperties(Consumer, {\\n Provider: {\\n get: function () {\\n if (!hasWarnedAboutUsingConsumerProvider) {\\n hasWarnedAboutUsingConsumerProvider = true;\\n warning$1(false, 'Rendering <Context.Consumer.Provider> is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Provider> instead?');\\n }\\n return context.Provider;\\n },\\n set: function (_Provider) {\\n context.Provider = _Provider;\\n }\\n },\\n _currentValue: {\\n get: function () {\\n return context._currentValue;\\n },\\n set: function (_currentValue) {\\n context._currentValue = _currentValue;\\n }\\n },\\n _currentValue2: {\\n get: function () {\\n return context._currentValue2;\\n },\\n set: function (_currentValue2) {\\n context._currentValue2 = _currentValue2;\\n }\\n },\\n _threadCount: {\\n get: function () {\\n return context._threadCount;\\n },\\n set: function (_threadCount) {\\n context._threadCount = _threadCount;\\n }\\n },\\n Consumer: {\\n get: function () {\\n if (!hasWarnedAboutUsingNestedContextConsumers) {\\n hasWarnedAboutUsingNestedContextConsumers = true;\\n warning$1(false, 'Rendering <Context.Consumer.Consumer> is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Consumer> instead?');\\n }\\n return context.Consumer;\\n }\\n }\\n });\\n // $FlowFixMe: Flow complains about missing properties because it doesn't understand defineProperty\\n context.Consumer = Consumer;\\n }\\n\\n {\\n context._currentRenderer = null;\\n context._currentRenderer2 = null;\\n }\\n\\n return context;\\n}\\n\\nfunction lazy(ctor) {\\n var lazyType = {\\n $$typeof: REACT_LAZY_TYPE,\\n _ctor: ctor,\\n // React uses these fields to store the result.\\n _status: -1,\\n _result: null\\n };\\n\\n {\\n // In production, this would just set it on the object.\\n var defaultProps = void 0;\\n var propTypes = void 0;\\n Object.defineProperties(lazyType, {\\n defaultProps: {\\n configurable: true,\\n get: function () {\\n return defaultProps;\\n },\\n set: function (newDefaultProps) {\\n warning$1(false, 'React.lazy(...): It is not supported to assign `defaultProps` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.');\\n defaultProps = newDefaultProps;\\n // Match production behavior more closely:\\n Object.defineProperty(lazyType, 'defaultProps', {\\n enumerable: true\\n });\\n }\\n },\\n propTypes: {\\n configurable: true,\\n get: function () {\\n return propTypes;\\n },\\n set: function (newPropTypes) {\\n warning$1(false, 'React.lazy(...): It is not supported to assign `propTypes` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.');\\n propTypes = newPropTypes;\\n // Match production behavior more closely:\\n Object.defineProperty(lazyType, 'propTypes', {\\n enumerable: true\\n });\\n }\\n }\\n });\\n }\\n\\n return lazyType;\\n}\\n\\nfunction forwardRef(render) {\\n {\\n if (render != null && render.$$typeof === REACT_MEMO_TYPE) {\\n warningWithoutStack$1(false, 'forwardRef requires a render function but received a `memo` ' + 'component. Instead of forwardRef(memo(...)), use ' + 'memo(forwardRef(...)).');\\n } else if (typeof render !== 'function') {\\n warningWithoutStack$1(false, 'forwardRef requires a render function but was given %s.', render === null ? 'null' : typeof render);\\n } else {\\n !(\\n // Do not warn for 0 arguments because it could be due to usage of the 'arguments' object\\n render.length === 0 || render.length === 2) ? warningWithoutStack$1(false, 'forwardRef render functions accept exactly two parameters: props and ref. %s', render.length === 1 ? 'Did you forget to use the ref parameter?' : 'Any additional parameter will be undefined.') : void 0;\\n }\\n\\n if (render != null) {\\n !(render.defaultProps == null && render.propTypes == null) ? warningWithoutStack$1(false, 'forwardRef render functions do not support propTypes or defaultProps. ' + 'Did you accidentally pass a React component?') : void 0;\\n }\\n }\\n\\n return {\\n $$typeof: REACT_FORWARD_REF_TYPE,\\n render: render\\n };\\n}\\n\\nfunction isValidElementType(type) {\\n return typeof type === 'string' || typeof type === 'function' ||\\n // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.\\n type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE);\\n}\\n\\nfunction memo(type, compare) {\\n {\\n if (!isValidElementType(type)) {\\n warningWithoutStack$1(false, 'memo: The first argument must be a component. Instead ' + 'received: %s', type === null ? 'null' : typeof type);\\n }\\n }\\n return {\\n $$typeof: REACT_MEMO_TYPE,\\n type: type,\\n compare: compare === undefined ? null : compare\\n };\\n}\\n\\nfunction resolveDispatcher() {\\n var dispatcher = ReactCurrentDispatcher.current;\\n !(dispatcher !== null) ? invariant(false, 'Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\\\\n1. You might have mismatching versions of React and the renderer (such as React DOM)\\\\n2. You might be breaking the Rules of Hooks\\\\n3. You might have more than one copy of React in the same app\\\\nSee https://fb.me/react-invalid-hook-call for tips about how to debug and fix this problem.') : void 0;\\n return dispatcher;\\n}\\n\\nfunction useContext(Context, unstable_observedBits) {\\n var dispatcher = resolveDispatcher();\\n {\\n !(unstable_observedBits === undefined) ? warning$1(false, 'useContext() second argument is reserved for future ' + 'use in React. Passing it is not supported. ' + 'You passed: %s.%s', unstable_observedBits, typeof unstable_observedBits === 'number' && Array.isArray(arguments[2]) ? '\\\\n\\\\nDid you call array.map(useContext)? ' + 'Calling Hooks inside a loop is not supported. ' + 'Learn more at https://fb.me/rules-of-hooks' : '') : void 0;\\n\\n // TODO: add a more generic warning for invalid values.\\n if (Context._context !== undefined) {\\n var realContext = Context._context;\\n // Don't deduplicate because this legitimately causes bugs\\n // and nobody should be using this in existing code.\\n if (realContext.Consumer === Context) {\\n warning$1(false, 'Calling useContext(Context.Consumer) is not supported, may cause bugs, and will be ' + 'removed in a future major release. Did you mean to call useContext(Context) instead?');\\n } else if (realContext.Provider === Context) {\\n warning$1(false, 'Calling useContext(Context.Provider) is not supported. ' + 'Did you mean to call useContext(Context) instead?');\\n }\\n }\\n }\\n return dispatcher.useContext(Context, unstable_observedBits);\\n}\\n\\nfunction useState(initialState) {\\n var dispatcher = resolveDispatcher();\\n return dispatcher.useState(initialState);\\n}\\n\\nfunction useReducer(reducer, initialArg, init) {\\n var dispatcher = resolveDispatcher();\\n return dispatcher.useReducer(reducer, initialArg, init);\\n}\\n\\nfunction useRef(initialValue) {\\n var dispatcher = resolveDispatcher();\\n return dispatcher.useRef(initialValue);\\n}\\n\\nfunction useEffect(create, inputs) {\\n var dispatcher = resolveDispatcher();\\n return dispatcher.useEffect(create, inputs);\\n}\\n\\nfunction useLayoutEffect(create, inputs) {\\n var dispatcher = resolveDispatcher();\\n return dispatcher.useLayoutEffect(create, inputs);\\n}\\n\\nfunction useCallback(callback, inputs) {\\n var dispatcher = resolveDispatcher();\\n return dispatcher.useCallback(callback, inputs);\\n}\\n\\nfunction useMemo(create, inputs) {\\n var dispatcher = resolveDispatcher();\\n return dispatcher.useMemo(create, inputs);\\n}\\n\\nfunction useImperativeHandle(ref, create, inputs) {\\n var dispatcher = resolveDispatcher();\\n return dispatcher.useImperativeHandle(ref, create, inputs);\\n}\\n\\nfunction useDebugValue(value, formatterFn) {\\n {\\n var dispatcher = resolveDispatcher();\\n return dispatcher.useDebugValue(value, formatterFn);\\n }\\n}\\n\\n/**\\n * ReactElementValidator provides a wrapper around a element factory\\n * which validates the props passed to the element. This is intended to be\\n * used only in DEV and could be replaced by a static type checker for languages\\n * that support it.\\n */\\n\\nvar propTypesMisspellWarningShown = void 0;\\n\\n{\\n propTypesMisspellWarningShown = false;\\n}\\n\\nfunction getDeclarationErrorAddendum() {\\n if (ReactCurrentOwner.current) {\\n var name = getComponentName(ReactCurrentOwner.current.type);\\n if (name) {\\n return '\\\\n\\\\nCheck the render method of `' + name + '`.';\\n }\\n }\\n return '';\\n}\\n\\nfunction getSourceInfoErrorAddendum(elementProps) {\\n if (elementProps !== null && elementProps !== undefined && elementProps.__source !== undefined) {\\n var source = elementProps.__source;\\n var fileName = source.fileName.replace(/^.*[\\\\\\\\\\\\/]/, '');\\n var lineNumber = source.lineNumber;\\n return '\\\\n\\\\nCheck your code at ' + fileName + ':' + lineNumber + '.';\\n }\\n return '';\\n}\\n\\n/**\\n * Warn if there's no key explicitly set on dynamic arrays of children or\\n * object keys are not valid. This allows us to keep track of children between\\n * updates.\\n */\\nvar ownerHasKeyUseWarning = {};\\n\\nfunction getCurrentComponentErrorInfo(parentType) {\\n var info = getDeclarationErrorAddendum();\\n\\n if (!info) {\\n var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\\n if (parentName) {\\n info = '\\\\n\\\\nCheck the top-level render call using <' + parentName + '>.';\\n }\\n }\\n return info;\\n}\\n\\n/**\\n * Warn if the element doesn't have an explicit key assigned to it.\\n * This element is in an array. The array could grow and shrink or be\\n * reordered. All children that haven't already been validated are required to\\n * have a \\\"key\\\" property assigned to it. Error statuses are cached so a warning\\n * will only be shown once.\\n *\\n * @internal\\n * @param {ReactElement} element Element that requires a key.\\n * @param {*} parentType element's parent's type.\\n */\\nfunction validateExplicitKey(element, parentType) {\\n if (!element._store || element._store.validated || element.key != null) {\\n return;\\n }\\n element._store.validated = true;\\n\\n var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\\n if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\\n return;\\n }\\n ownerHasKeyUseWarning[currentComponentErrorInfo] = true;\\n\\n // Usually the current owner is the offender, but if it accepts children as a\\n // property, it may be the creator of the child that's responsible for\\n // assigning it a key.\\n var childOwner = '';\\n if (element && element._owner && element._owner !== ReactCurrentOwner.current) {\\n // Give the component that originally created this child.\\n childOwner = ' It was passed a child from ' + getComponentName(element._owner.type) + '.';\\n }\\n\\n setCurrentlyValidatingElement(element);\\n {\\n warning$1(false, 'Each child in a list should have a unique \\\"key\\\" prop.' + '%s%s See https://fb.me/react-warning-keys for more information.', currentComponentErrorInfo, childOwner);\\n }\\n setCurrentlyValidatingElement(null);\\n}\\n\\n/**\\n * Ensure that every element either is passed in a static location, in an\\n * array with an explicit keys property defined, or in an object literal\\n * with valid key property.\\n *\\n * @internal\\n * @param {ReactNode} node Statically passed child of any type.\\n * @param {*} parentType node's parent's type.\\n */\\nfunction validateChildKeys(node, parentType) {\\n if (typeof node !== 'object') {\\n return;\\n }\\n if (Array.isArray(node)) {\\n for (var i = 0; i < node.length; i++) {\\n var child = node[i];\\n if (isValidElement(child)) {\\n validateExplicitKey(child, parentType);\\n }\\n }\\n } else if (isValidElement(node)) {\\n // This element was passed in a valid location.\\n if (node._store) {\\n node._store.validated = true;\\n }\\n } else if (node) {\\n var iteratorFn = getIteratorFn(node);\\n if (typeof iteratorFn === 'function') {\\n // Entry iterators used to provide implicit keys,\\n // but now we print a separate warning for them later.\\n if (iteratorFn !== node.entries) {\\n var iterator = iteratorFn.call(node);\\n var step = void 0;\\n while (!(step = iterator.next()).done) {\\n if (isValidElement(step.value)) {\\n validateExplicitKey(step.value, parentType);\\n }\\n }\\n }\\n }\\n }\\n}\\n\\n/**\\n * Given an element, validate that its props follow the propTypes definition,\\n * provided by the type.\\n *\\n * @param {ReactElement} element\\n */\\nfunction validatePropTypes(element) {\\n var type = element.type;\\n if (type === null || type === undefined || typeof type === 'string') {\\n return;\\n }\\n var name = getComponentName(type);\\n var propTypes = void 0;\\n if (typeof type === 'function') {\\n propTypes = type.propTypes;\\n } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE ||\\n // Note: Memo only checks outer props here.\\n // Inner props are checked in the reconciler.\\n type.$$typeof === REACT_MEMO_TYPE)) {\\n propTypes = type.propTypes;\\n } else {\\n return;\\n }\\n if (propTypes) {\\n setCurrentlyValidatingElement(element);\\n checkPropTypes(propTypes, element.props, 'prop', name, ReactDebugCurrentFrame.getStackAddendum);\\n setCurrentlyValidatingElement(null);\\n } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {\\n propTypesMisspellWarningShown = true;\\n warningWithoutStack$1(false, 'Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', name || 'Unknown');\\n }\\n if (typeof type.getDefaultProps === 'function') {\\n !type.getDefaultProps.isReactClassApproved ? warningWithoutStack$1(false, 'getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.') : void 0;\\n }\\n}\\n\\n/**\\n * Given a fragment, validate that it can only be provided with fragment props\\n * @param {ReactElement} fragment\\n */\\nfunction validateFragmentProps(fragment) {\\n setCurrentlyValidatingElement(fragment);\\n\\n var keys = Object.keys(fragment.props);\\n for (var i = 0; i < keys.length; i++) {\\n var key = keys[i];\\n if (key !== 'children' && key !== 'key') {\\n warning$1(false, 'Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\\n break;\\n }\\n }\\n\\n if (fragment.ref !== null) {\\n warning$1(false, 'Invalid attribute `ref` supplied to `React.Fragment`.');\\n }\\n\\n setCurrentlyValidatingElement(null);\\n}\\n\\nfunction createElementWithValidation(type, props, children) {\\n var validType = isValidElementType(type);\\n\\n // We warn in this case but don't throw. We expect the element creation to\\n // succeed and there will likely be errors in render.\\n if (!validType) {\\n var info = '';\\n if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\\n info += ' You likely forgot to export your component from the file ' + \\\"it's defined in, or you might have mixed up default and named imports.\\\";\\n }\\n\\n var sourceInfo = getSourceInfoErrorAddendum(props);\\n if (sourceInfo) {\\n info += sourceInfo;\\n } else {\\n info += getDeclarationErrorAddendum();\\n }\\n\\n var typeString = void 0;\\n if (type === null) {\\n typeString = 'null';\\n } else if (Array.isArray(type)) {\\n typeString = 'array';\\n } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\\n typeString = '<' + (getComponentName(type.type) || 'Unknown') + ' />';\\n info = ' Did you accidentally export a JSX literal instead of a component?';\\n } else {\\n typeString = typeof type;\\n }\\n\\n warning$1(false, 'React.createElement: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\\n }\\n\\n var element = createElement.apply(this, arguments);\\n\\n // The result can be nullish if a mock or a custom function is used.\\n // TODO: Drop this when these are no longer allowed as the type argument.\\n if (element == null) {\\n return element;\\n }\\n\\n // Skip key warning if the type isn't valid since our key validation logic\\n // doesn't expect a non-string/function type and can throw confusing errors.\\n // We don't want exception behavior to differ between dev and prod.\\n // (Rendering will throw with a helpful message and as soon as the type is\\n // fixed, the key warnings will appear.)\\n if (validType) {\\n for (var i = 2; i < arguments.length; i++) {\\n validateChildKeys(arguments[i], type);\\n }\\n }\\n\\n if (type === REACT_FRAGMENT_TYPE) {\\n validateFragmentProps(element);\\n } else {\\n validatePropTypes(element);\\n }\\n\\n return element;\\n}\\n\\nfunction createFactoryWithValidation(type) {\\n var validatedFactory = createElementWithValidation.bind(null, type);\\n validatedFactory.type = type;\\n // Legacy hook: remove it\\n {\\n Object.defineProperty(validatedFactory, 'type', {\\n enumerable: false,\\n get: function () {\\n lowPriorityWarning$1(false, 'Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.');\\n Object.defineProperty(this, 'type', {\\n value: type\\n });\\n return type;\\n }\\n });\\n }\\n\\n return validatedFactory;\\n}\\n\\nfunction cloneElementWithValidation(element, props, children) {\\n var newElement = cloneElement.apply(this, arguments);\\n for (var i = 2; i < arguments.length; i++) {\\n validateChildKeys(arguments[i], newElement.type);\\n }\\n validatePropTypes(newElement);\\n return newElement;\\n}\\n\\n// Helps identify side effects in begin-phase lifecycle hooks and setState reducers:\\n\\n\\n// In some cases, StrictMode should also double-render lifecycles.\\n// This can be confusing for tests though,\\n// And it can be bad for performance in production.\\n// This feature flag can be used to control the behavior:\\n\\n\\n// To preserve the \\\"Pause on caught exceptions\\\" behavior of the debugger, we\\n// replay the begin phase of a failed component inside invokeGuardedCallback.\\n\\n\\n// Warn about deprecated, async-unsafe lifecycles; relates to RFC #6:\\n\\n\\n// Gather advanced timing metrics for Profiler subtrees.\\n\\n\\n// Trace which interactions trigger each commit.\\n\\n\\n// Only used in www builds.\\n // TODO: true? Here it might just be false.\\n\\n// Only used in www builds.\\n\\n\\n// Only used in www builds.\\n\\n\\n// React Fire: prevent the value and checked attributes from syncing\\n// with their related DOM properties\\n\\n\\n// These APIs will no longer be \\\"unstable\\\" in the upcoming 16.7 release,\\n// Control this behavior with a flag to support 16.6 minor releases in the meanwhile.\\nvar enableStableConcurrentModeAPIs = false;\\n\\nvar React = {\\n Children: {\\n map: mapChildren,\\n forEach: forEachChildren,\\n count: countChildren,\\n toArray: toArray,\\n only: onlyChild\\n },\\n\\n createRef: createRef,\\n Component: Component,\\n PureComponent: PureComponent,\\n\\n createContext: createContext,\\n forwardRef: forwardRef,\\n lazy: lazy,\\n memo: memo,\\n\\n useCallback: useCallback,\\n useContext: useContext,\\n useEffect: useEffect,\\n useImperativeHandle: useImperativeHandle,\\n useDebugValue: useDebugValue,\\n useLayoutEffect: useLayoutEffect,\\n useMemo: useMemo,\\n useReducer: useReducer,\\n useRef: useRef,\\n useState: useState,\\n\\n Fragment: REACT_FRAGMENT_TYPE,\\n StrictMode: REACT_STRICT_MODE_TYPE,\\n Suspense: REACT_SUSPENSE_TYPE,\\n\\n createElement: createElementWithValidation,\\n cloneElement: cloneElementWithValidation,\\n createFactory: createFactoryWithValidation,\\n isValidElement: isValidElement,\\n\\n version: ReactVersion,\\n\\n unstable_ConcurrentMode: REACT_CONCURRENT_MODE_TYPE,\\n unstable_Profiler: REACT_PROFILER_TYPE,\\n\\n __SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: ReactSharedInternals\\n};\\n\\n// Note: some APIs are added with feature flags.\\n// Make sure that stable builds for open source\\n// don't modify the React object to avoid deopts.\\n// Also let's not expose their names in stable builds.\\n\\nif (enableStableConcurrentModeAPIs) {\\n React.ConcurrentMode = REACT_CONCURRENT_MODE_TYPE;\\n React.Profiler = REACT_PROFILER_TYPE;\\n React.unstable_ConcurrentMode = undefined;\\n React.unstable_Profiler = undefined;\\n}\\n\\n\\n\\nvar React$2 = Object.freeze({\\n\\tdefault: React\\n});\\n\\nvar React$3 = ( React$2 && React ) || React$2;\\n\\n// TODO: decide on the top-level export form.\\n// This is hacky but makes it work with both Rollup and Jest.\\nvar react = React$3.default || React$3;\\n\\nmodule.exports = react;\\n })();\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/react/cjs/react.development.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/react/index.js\":\n/*!*************************************!*\\\n !*** ./node_modules/react/index.js ***!\n \\*************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\n\\nif (false) {} else {\\n module.exports = __webpack_require__(/*! ./cjs/react.development.js */ \\\"./node_modules/react/cjs/react.development.js\\\");\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/react/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/react/node_modules/object-assign/index.js\":\n/*!****************************************************************!*\\\n !*** ./node_modules/react/node_modules/object-assign/index.js ***!\n \\****************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/*\\nobject-assign\\n(c) Sindre Sorhus\\n@license MIT\\n*/\\n\\n\\n/* eslint-disable no-unused-vars */\\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\\n\\nfunction toObject(val) {\\n\\tif (val === null || val === undefined) {\\n\\t\\tthrow new TypeError('Object.assign cannot be called with null or undefined');\\n\\t}\\n\\n\\treturn Object(val);\\n}\\n\\nfunction shouldUseNative() {\\n\\ttry {\\n\\t\\tif (!Object.assign) {\\n\\t\\t\\treturn false;\\n\\t\\t}\\n\\n\\t\\t// Detect buggy property enumeration order in older V8 versions.\\n\\n\\t\\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\\n\\t\\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\\n\\t\\ttest1[5] = 'de';\\n\\t\\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\\n\\t\\t\\treturn false;\\n\\t\\t}\\n\\n\\t\\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\\n\\t\\tvar test2 = {};\\n\\t\\tfor (var i = 0; i < 10; i++) {\\n\\t\\t\\ttest2['_' + String.fromCharCode(i)] = i;\\n\\t\\t}\\n\\t\\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\\n\\t\\t\\treturn test2[n];\\n\\t\\t});\\n\\t\\tif (order2.join('') !== '0123456789') {\\n\\t\\t\\treturn false;\\n\\t\\t}\\n\\n\\t\\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\\n\\t\\tvar test3 = {};\\n\\t\\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\\n\\t\\t\\ttest3[letter] = letter;\\n\\t\\t});\\n\\t\\tif (Object.keys(Object.assign({}, test3)).join('') !==\\n\\t\\t\\t\\t'abcdefghijklmnopqrst') {\\n\\t\\t\\treturn false;\\n\\t\\t}\\n\\n\\t\\treturn true;\\n\\t} catch (err) {\\n\\t\\t// We don't expect any of the above to throw, but better to be safe.\\n\\t\\treturn false;\\n\\t}\\n}\\n\\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\\n\\tvar from;\\n\\tvar to = toObject(target);\\n\\tvar symbols;\\n\\n\\tfor (var s = 1; s < arguments.length; s++) {\\n\\t\\tfrom = Object(arguments[s]);\\n\\n\\t\\tfor (var key in from) {\\n\\t\\t\\tif (hasOwnProperty.call(from, key)) {\\n\\t\\t\\t\\tto[key] = from[key];\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\tif (getOwnPropertySymbols) {\\n\\t\\t\\tsymbols = getOwnPropertySymbols(from);\\n\\t\\t\\tfor (var i = 0; i < symbols.length; i++) {\\n\\t\\t\\t\\tif (propIsEnumerable.call(from, symbols[i])) {\\n\\t\\t\\t\\t\\tto[symbols[i]] = from[symbols[i]];\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\treturn to;\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/react/node_modules/object-assign/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/regenerator-runtime/runtime.js\":\n/*!*****************************************************!*\\\n !*** ./node_modules/regenerator-runtime/runtime.js ***!\n \\*****************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"/**\\n * Copyright (c) 2014-present, Facebook, Inc.\\n *\\n * This source code is licensed under the MIT license found in the\\n * LICENSE file in the root directory of this source tree.\\n */\\n\\nvar runtime = (function (exports) {\\n \\\"use strict\\\";\\n\\n var Op = Object.prototype;\\n var hasOwn = Op.hasOwnProperty;\\n var undefined; // More compressible than void 0.\\n var $Symbol = typeof Symbol === \\\"function\\\" ? Symbol : {};\\n var iteratorSymbol = $Symbol.iterator || \\\"@@iterator\\\";\\n var asyncIteratorSymbol = $Symbol.asyncIterator || \\\"@@asyncIterator\\\";\\n var toStringTagSymbol = $Symbol.toStringTag || \\\"@@toStringTag\\\";\\n\\n function wrap(innerFn, outerFn, self, tryLocsList) {\\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\\n var generator = Object.create(protoGenerator.prototype);\\n var context = new Context(tryLocsList || []);\\n\\n // The ._invoke method unifies the implementations of the .next,\\n // .throw, and .return methods.\\n generator._invoke = makeInvokeMethod(innerFn, self, context);\\n\\n return generator;\\n }\\n exports.wrap = wrap;\\n\\n // Try/catch helper to minimize deoptimizations. Returns a completion\\n // record like context.tryEntries[i].completion. This interface could\\n // have been (and was previously) designed to take a closure to be\\n // invoked without arguments, but in all the cases we care about we\\n // already have an existing method we want to call, so there's no need\\n // to create a new function object. We can even get away with assuming\\n // the method takes exactly one argument, since that happens to be true\\n // in every case, so we don't have to touch the arguments object. The\\n // only additional allocation required is the completion record, which\\n // has a stable shape and so hopefully should be cheap to allocate.\\n function tryCatch(fn, obj, arg) {\\n try {\\n return { type: \\\"normal\\\", arg: fn.call(obj, arg) };\\n } catch (err) {\\n return { type: \\\"throw\\\", arg: err };\\n }\\n }\\n\\n var GenStateSuspendedStart = \\\"suspendedStart\\\";\\n var GenStateSuspendedYield = \\\"suspendedYield\\\";\\n var GenStateExecuting = \\\"executing\\\";\\n var GenStateCompleted = \\\"completed\\\";\\n\\n // Returning this object from the innerFn has the same effect as\\n // breaking out of the dispatch switch statement.\\n var ContinueSentinel = {};\\n\\n // Dummy constructor functions that we use as the .constructor and\\n // .constructor.prototype properties for functions that return Generator\\n // objects. For full spec compliance, you may wish to configure your\\n // minifier not to mangle the names of these two functions.\\n function Generator() {}\\n function GeneratorFunction() {}\\n function GeneratorFunctionPrototype() {}\\n\\n // This is a polyfill for %IteratorPrototype% for environments that\\n // don't natively support it.\\n var IteratorPrototype = {};\\n IteratorPrototype[iteratorSymbol] = function () {\\n return this;\\n };\\n\\n var getProto = Object.getPrototypeOf;\\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\\n if (NativeIteratorPrototype &&\\n NativeIteratorPrototype !== Op &&\\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\\n // This environment has a native %IteratorPrototype%; use it instead\\n // of the polyfill.\\n IteratorPrototype = NativeIteratorPrototype;\\n }\\n\\n var Gp = GeneratorFunctionPrototype.prototype =\\n Generator.prototype = Object.create(IteratorPrototype);\\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\\n GeneratorFunctionPrototype[toStringTagSymbol] =\\n GeneratorFunction.displayName = \\\"GeneratorFunction\\\";\\n\\n // Helper for defining the .next, .throw, and .return methods of the\\n // Iterator interface in terms of a single ._invoke method.\\n function defineIteratorMethods(prototype) {\\n [\\\"next\\\", \\\"throw\\\", \\\"return\\\"].forEach(function(method) {\\n prototype[method] = function(arg) {\\n return this._invoke(method, arg);\\n };\\n });\\n }\\n\\n exports.isGeneratorFunction = function(genFun) {\\n var ctor = typeof genFun === \\\"function\\\" && genFun.constructor;\\n return ctor\\n ? ctor === GeneratorFunction ||\\n // For the native GeneratorFunction constructor, the best we can\\n // do is to check its .name property.\\n (ctor.displayName || ctor.name) === \\\"GeneratorFunction\\\"\\n : false;\\n };\\n\\n exports.mark = function(genFun) {\\n if (Object.setPrototypeOf) {\\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\\n } else {\\n genFun.__proto__ = GeneratorFunctionPrototype;\\n if (!(toStringTagSymbol in genFun)) {\\n genFun[toStringTagSymbol] = \\\"GeneratorFunction\\\";\\n }\\n }\\n genFun.prototype = Object.create(Gp);\\n return genFun;\\n };\\n\\n // Within the body of any async function, `await x` is transformed to\\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\\n // `hasOwn.call(value, \\\"__await\\\")` to determine if the yielded value is\\n // meant to be awaited.\\n exports.awrap = function(arg) {\\n return { __await: arg };\\n };\\n\\n function AsyncIterator(generator, PromiseImpl) {\\n function invoke(method, arg, resolve, reject) {\\n var record = tryCatch(generator[method], generator, arg);\\n if (record.type === \\\"throw\\\") {\\n reject(record.arg);\\n } else {\\n var result = record.arg;\\n var value = result.value;\\n if (value &&\\n typeof value === \\\"object\\\" &&\\n hasOwn.call(value, \\\"__await\\\")) {\\n return PromiseImpl.resolve(value.__await).then(function(value) {\\n invoke(\\\"next\\\", value, resolve, reject);\\n }, function(err) {\\n invoke(\\\"throw\\\", err, resolve, reject);\\n });\\n }\\n\\n return PromiseImpl.resolve(value).then(function(unwrapped) {\\n // When a yielded Promise is resolved, its final value becomes\\n // the .value of the Promise<{value,done}> result for the\\n // current iteration.\\n result.value = unwrapped;\\n resolve(result);\\n }, function(error) {\\n // If a rejected Promise was yielded, throw the rejection back\\n // into the async generator function so it can be handled there.\\n return invoke(\\\"throw\\\", error, resolve, reject);\\n });\\n }\\n }\\n\\n var previousPromise;\\n\\n function enqueue(method, arg) {\\n function callInvokeWithMethodAndArg() {\\n return new PromiseImpl(function(resolve, reject) {\\n invoke(method, arg, resolve, reject);\\n });\\n }\\n\\n return previousPromise =\\n // If enqueue has been called before, then we want to wait until\\n // all previous Promises have been resolved before calling invoke,\\n // so that results are always delivered in the correct order. If\\n // enqueue has not been called before, then it is important to\\n // call invoke immediately, without waiting on a callback to fire,\\n // so that the async generator function has the opportunity to do\\n // any necessary setup in a predictable way. This predictability\\n // is why the Promise constructor synchronously invokes its\\n // executor callback, and why async functions synchronously\\n // execute code before the first await. Since we implement simple\\n // async functions in terms of async generators, it is especially\\n // important to get this right, even though it requires care.\\n previousPromise ? previousPromise.then(\\n callInvokeWithMethodAndArg,\\n // Avoid propagating failures to Promises returned by later\\n // invocations of the iterator.\\n callInvokeWithMethodAndArg\\n ) : callInvokeWithMethodAndArg();\\n }\\n\\n // Define the unified helper method that is used to implement .next,\\n // .throw, and .return (see defineIteratorMethods).\\n this._invoke = enqueue;\\n }\\n\\n defineIteratorMethods(AsyncIterator.prototype);\\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\\n return this;\\n };\\n exports.AsyncIterator = AsyncIterator;\\n\\n // Note that simple async functions are implemented on top of\\n // AsyncIterator objects; they just return a Promise for the value of\\n // the final result produced by the iterator.\\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\\n if (PromiseImpl === void 0) PromiseImpl = Promise;\\n\\n var iter = new AsyncIterator(\\n wrap(innerFn, outerFn, self, tryLocsList),\\n PromiseImpl\\n );\\n\\n return exports.isGeneratorFunction(outerFn)\\n ? iter // If outerFn is a generator, return the full iterator.\\n : iter.next().then(function(result) {\\n return result.done ? result.value : iter.next();\\n });\\n };\\n\\n function makeInvokeMethod(innerFn, self, context) {\\n var state = GenStateSuspendedStart;\\n\\n return function invoke(method, arg) {\\n if (state === GenStateExecuting) {\\n throw new Error(\\\"Generator is already running\\\");\\n }\\n\\n if (state === GenStateCompleted) {\\n if (method === \\\"throw\\\") {\\n throw arg;\\n }\\n\\n // Be forgiving, per 25.3.3.3.3 of the spec:\\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\\n return doneResult();\\n }\\n\\n context.method = method;\\n context.arg = arg;\\n\\n while (true) {\\n var delegate = context.delegate;\\n if (delegate) {\\n var delegateResult = maybeInvokeDelegate(delegate, context);\\n if (delegateResult) {\\n if (delegateResult === ContinueSentinel) continue;\\n return delegateResult;\\n }\\n }\\n\\n if (context.method === \\\"next\\\") {\\n // Setting context._sent for legacy support of Babel's\\n // function.sent implementation.\\n context.sent = context._sent = context.arg;\\n\\n } else if (context.method === \\\"throw\\\") {\\n if (state === GenStateSuspendedStart) {\\n state = GenStateCompleted;\\n throw context.arg;\\n }\\n\\n context.dispatchException(context.arg);\\n\\n } else if (context.method === \\\"return\\\") {\\n context.abrupt(\\\"return\\\", context.arg);\\n }\\n\\n state = GenStateExecuting;\\n\\n var record = tryCatch(innerFn, self, context);\\n if (record.type === \\\"normal\\\") {\\n // If an exception is thrown from innerFn, we leave state ===\\n // GenStateExecuting and loop back for another invocation.\\n state = context.done\\n ? GenStateCompleted\\n : GenStateSuspendedYield;\\n\\n if (record.arg === ContinueSentinel) {\\n continue;\\n }\\n\\n return {\\n value: record.arg,\\n done: context.done\\n };\\n\\n } else if (record.type === \\\"throw\\\") {\\n state = GenStateCompleted;\\n // Dispatch the exception by looping back around to the\\n // context.dispatchException(context.arg) call above.\\n context.method = \\\"throw\\\";\\n context.arg = record.arg;\\n }\\n }\\n };\\n }\\n\\n // Call delegate.iterator[context.method](context.arg) and handle the\\n // result, either by returning a { value, done } result from the\\n // delegate iterator, or by modifying context.method and context.arg,\\n // setting context.delegate to null, and returning the ContinueSentinel.\\n function maybeInvokeDelegate(delegate, context) {\\n var method = delegate.iterator[context.method];\\n if (method === undefined) {\\n // A .throw or .return when the delegate iterator has no .throw\\n // method always terminates the yield* loop.\\n context.delegate = null;\\n\\n if (context.method === \\\"throw\\\") {\\n // Note: [\\\"return\\\"] must be used for ES3 parsing compatibility.\\n if (delegate.iterator[\\\"return\\\"]) {\\n // If the delegate iterator has a return method, give it a\\n // chance to clean up.\\n context.method = \\\"return\\\";\\n context.arg = undefined;\\n maybeInvokeDelegate(delegate, context);\\n\\n if (context.method === \\\"throw\\\") {\\n // If maybeInvokeDelegate(context) changed context.method from\\n // \\\"return\\\" to \\\"throw\\\", let that override the TypeError below.\\n return ContinueSentinel;\\n }\\n }\\n\\n context.method = \\\"throw\\\";\\n context.arg = new TypeError(\\n \\\"The iterator does not provide a 'throw' method\\\");\\n }\\n\\n return ContinueSentinel;\\n }\\n\\n var record = tryCatch(method, delegate.iterator, context.arg);\\n\\n if (record.type === \\\"throw\\\") {\\n context.method = \\\"throw\\\";\\n context.arg = record.arg;\\n context.delegate = null;\\n return ContinueSentinel;\\n }\\n\\n var info = record.arg;\\n\\n if (! info) {\\n context.method = \\\"throw\\\";\\n context.arg = new TypeError(\\\"iterator result is not an object\\\");\\n context.delegate = null;\\n return ContinueSentinel;\\n }\\n\\n if (info.done) {\\n // Assign the result of the finished delegate to the temporary\\n // variable specified by delegate.resultName (see delegateYield).\\n context[delegate.resultName] = info.value;\\n\\n // Resume execution at the desired location (see delegateYield).\\n context.next = delegate.nextLoc;\\n\\n // If context.method was \\\"throw\\\" but the delegate handled the\\n // exception, let the outer generator proceed normally. If\\n // context.method was \\\"next\\\", forget context.arg since it has been\\n // \\\"consumed\\\" by the delegate iterator. If context.method was\\n // \\\"return\\\", allow the original .return call to continue in the\\n // outer generator.\\n if (context.method !== \\\"return\\\") {\\n context.method = \\\"next\\\";\\n context.arg = undefined;\\n }\\n\\n } else {\\n // Re-yield the result returned by the delegate method.\\n return info;\\n }\\n\\n // The delegate iterator is finished, so forget it and continue with\\n // the outer generator.\\n context.delegate = null;\\n return ContinueSentinel;\\n }\\n\\n // Define Generator.prototype.{next,throw,return} in terms of the\\n // unified ._invoke helper method.\\n defineIteratorMethods(Gp);\\n\\n Gp[toStringTagSymbol] = \\\"Generator\\\";\\n\\n // A Generator should always return itself as the iterator object when the\\n // @@iterator function is called on it. Some browsers' implementations of the\\n // iterator prototype chain incorrectly implement this, causing the Generator\\n // object to not be returned from this call. This ensures that doesn't happen.\\n // See https://github.com/facebook/regenerator/issues/274 for more details.\\n Gp[iteratorSymbol] = function() {\\n return this;\\n };\\n\\n Gp.toString = function() {\\n return \\\"[object Generator]\\\";\\n };\\n\\n function pushTryEntry(locs) {\\n var entry = { tryLoc: locs[0] };\\n\\n if (1 in locs) {\\n entry.catchLoc = locs[1];\\n }\\n\\n if (2 in locs) {\\n entry.finallyLoc = locs[2];\\n entry.afterLoc = locs[3];\\n }\\n\\n this.tryEntries.push(entry);\\n }\\n\\n function resetTryEntry(entry) {\\n var record = entry.completion || {};\\n record.type = \\\"normal\\\";\\n delete record.arg;\\n entry.completion = record;\\n }\\n\\n function Context(tryLocsList) {\\n // The root entry object (effectively a try statement without a catch\\n // or a finally block) gives us a place to store values thrown from\\n // locations where there is no enclosing try statement.\\n this.tryEntries = [{ tryLoc: \\\"root\\\" }];\\n tryLocsList.forEach(pushTryEntry, this);\\n this.reset(true);\\n }\\n\\n exports.keys = function(object) {\\n var keys = [];\\n for (var key in object) {\\n keys.push(key);\\n }\\n keys.reverse();\\n\\n // Rather than returning an object with a next method, we keep\\n // things simple and return the next function itself.\\n return function next() {\\n while (keys.length) {\\n var key = keys.pop();\\n if (key in object) {\\n next.value = key;\\n next.done = false;\\n return next;\\n }\\n }\\n\\n // To avoid creating an additional object, we just hang the .value\\n // and .done properties off the next function object itself. This\\n // also ensures that the minifier will not anonymize the function.\\n next.done = true;\\n return next;\\n };\\n };\\n\\n function values(iterable) {\\n if (iterable) {\\n var iteratorMethod = iterable[iteratorSymbol];\\n if (iteratorMethod) {\\n return iteratorMethod.call(iterable);\\n }\\n\\n if (typeof iterable.next === \\\"function\\\") {\\n return iterable;\\n }\\n\\n if (!isNaN(iterable.length)) {\\n var i = -1, next = function next() {\\n while (++i < iterable.length) {\\n if (hasOwn.call(iterable, i)) {\\n next.value = iterable[i];\\n next.done = false;\\n return next;\\n }\\n }\\n\\n next.value = undefined;\\n next.done = true;\\n\\n return next;\\n };\\n\\n return next.next = next;\\n }\\n }\\n\\n // Return an iterator with no values.\\n return { next: doneResult };\\n }\\n exports.values = values;\\n\\n function doneResult() {\\n return { value: undefined, done: true };\\n }\\n\\n Context.prototype = {\\n constructor: Context,\\n\\n reset: function(skipTempReset) {\\n this.prev = 0;\\n this.next = 0;\\n // Resetting context._sent for legacy support of Babel's\\n // function.sent implementation.\\n this.sent = this._sent = undefined;\\n this.done = false;\\n this.delegate = null;\\n\\n this.method = \\\"next\\\";\\n this.arg = undefined;\\n\\n this.tryEntries.forEach(resetTryEntry);\\n\\n if (!skipTempReset) {\\n for (var name in this) {\\n // Not sure about the optimal order of these conditions:\\n if (name.charAt(0) === \\\"t\\\" &&\\n hasOwn.call(this, name) &&\\n !isNaN(+name.slice(1))) {\\n this[name] = undefined;\\n }\\n }\\n }\\n },\\n\\n stop: function() {\\n this.done = true;\\n\\n var rootEntry = this.tryEntries[0];\\n var rootRecord = rootEntry.completion;\\n if (rootRecord.type === \\\"throw\\\") {\\n throw rootRecord.arg;\\n }\\n\\n return this.rval;\\n },\\n\\n dispatchException: function(exception) {\\n if (this.done) {\\n throw exception;\\n }\\n\\n var context = this;\\n function handle(loc, caught) {\\n record.type = \\\"throw\\\";\\n record.arg = exception;\\n context.next = loc;\\n\\n if (caught) {\\n // If the dispatched exception was caught by a catch block,\\n // then let that catch block handle the exception normally.\\n context.method = \\\"next\\\";\\n context.arg = undefined;\\n }\\n\\n return !! caught;\\n }\\n\\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\\n var entry = this.tryEntries[i];\\n var record = entry.completion;\\n\\n if (entry.tryLoc === \\\"root\\\") {\\n // Exception thrown outside of any try block that could handle\\n // it, so set the completion value of the entire function to\\n // throw the exception.\\n return handle(\\\"end\\\");\\n }\\n\\n if (entry.tryLoc <= this.prev) {\\n var hasCatch = hasOwn.call(entry, \\\"catchLoc\\\");\\n var hasFinally = hasOwn.call(entry, \\\"finallyLoc\\\");\\n\\n if (hasCatch && hasFinally) {\\n if (this.prev < entry.catchLoc) {\\n return handle(entry.catchLoc, true);\\n } else if (this.prev < entry.finallyLoc) {\\n return handle(entry.finallyLoc);\\n }\\n\\n } else if (hasCatch) {\\n if (this.prev < entry.catchLoc) {\\n return handle(entry.catchLoc, true);\\n }\\n\\n } else if (hasFinally) {\\n if (this.prev < entry.finallyLoc) {\\n return handle(entry.finallyLoc);\\n }\\n\\n } else {\\n throw new Error(\\\"try statement without catch or finally\\\");\\n }\\n }\\n }\\n },\\n\\n abrupt: function(type, arg) {\\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\\n var entry = this.tryEntries[i];\\n if (entry.tryLoc <= this.prev &&\\n hasOwn.call(entry, \\\"finallyLoc\\\") &&\\n this.prev < entry.finallyLoc) {\\n var finallyEntry = entry;\\n break;\\n }\\n }\\n\\n if (finallyEntry &&\\n (type === \\\"break\\\" ||\\n type === \\\"continue\\\") &&\\n finallyEntry.tryLoc <= arg &&\\n arg <= finallyEntry.finallyLoc) {\\n // Ignore the finally entry if control is not jumping to a\\n // location outside the try/catch block.\\n finallyEntry = null;\\n }\\n\\n var record = finallyEntry ? finallyEntry.completion : {};\\n record.type = type;\\n record.arg = arg;\\n\\n if (finallyEntry) {\\n this.method = \\\"next\\\";\\n this.next = finallyEntry.finallyLoc;\\n return ContinueSentinel;\\n }\\n\\n return this.complete(record);\\n },\\n\\n complete: function(record, afterLoc) {\\n if (record.type === \\\"throw\\\") {\\n throw record.arg;\\n }\\n\\n if (record.type === \\\"break\\\" ||\\n record.type === \\\"continue\\\") {\\n this.next = record.arg;\\n } else if (record.type === \\\"return\\\") {\\n this.rval = this.arg = record.arg;\\n this.method = \\\"return\\\";\\n this.next = \\\"end\\\";\\n } else if (record.type === \\\"normal\\\" && afterLoc) {\\n this.next = afterLoc;\\n }\\n\\n return ContinueSentinel;\\n },\\n\\n finish: function(finallyLoc) {\\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\\n var entry = this.tryEntries[i];\\n if (entry.finallyLoc === finallyLoc) {\\n this.complete(entry.completion, entry.afterLoc);\\n resetTryEntry(entry);\\n return ContinueSentinel;\\n }\\n }\\n },\\n\\n \\\"catch\\\": function(tryLoc) {\\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\\n var entry = this.tryEntries[i];\\n if (entry.tryLoc === tryLoc) {\\n var record = entry.completion;\\n if (record.type === \\\"throw\\\") {\\n var thrown = record.arg;\\n resetTryEntry(entry);\\n }\\n return thrown;\\n }\\n }\\n\\n // The context.catch method must only be called with a location\\n // argument that corresponds to a known catch block.\\n throw new Error(\\\"illegal catch attempt\\\");\\n },\\n\\n delegateYield: function(iterable, resultName, nextLoc) {\\n this.delegate = {\\n iterator: values(iterable),\\n resultName: resultName,\\n nextLoc: nextLoc\\n };\\n\\n if (this.method === \\\"next\\\") {\\n // Deliberately forget the last sent value so that we don't\\n // accidentally pass it on to the delegate.\\n this.arg = undefined;\\n }\\n\\n return ContinueSentinel;\\n }\\n };\\n\\n // Regardless of whether this script is executing as a CommonJS module\\n // or not, return the runtime object so that we can declare the variable\\n // regeneratorRuntime in the outer scope, which allows this module to be\\n // injected easily by `bin/regenerator --include-runtime script.js`.\\n return exports;\\n\\n}(\\n // If this script is executing as a CommonJS module, use module.exports\\n // as the regeneratorRuntime namespace. Otherwise create a new empty\\n // object. Either way, the resulting object will be used to initialize\\n // the regeneratorRuntime variable at the top of this file.\\n true ? module.exports : undefined\\n));\\n\\ntry {\\n regeneratorRuntime = runtime;\\n} catch (accidentalStrictMode) {\\n // This module should not be running in strict mode, so the above\\n // assignment should always work unless something is misconfigured. Just\\n // in case runtime.js accidentally runs in strict mode, we can escape\\n // strict mode using a global Function call. This could conceivably fail\\n // if a Content Security Policy forbids using Function, but in that case\\n // the proper solution is to fix the accidental strict mode problem. If\\n // you've misconfigured your bundler to force strict mode and applied a\\n // CSP to forbid Function, and you're not willing to fix either of those\\n // problems, please detail your unique predicament in a GitHub issue.\\n Function(\\\"r\\\", \\\"regeneratorRuntime = r\\\")(runtime);\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/regenerator-runtime/runtime.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/safe-buffer/index.js\":\n/*!*******************************************!*\\\n !*** ./node_modules/safe-buffer/index.js ***!\n \\*******************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"/* eslint-disable node/no-deprecated-api */\\nvar buffer = __webpack_require__(/*! buffer */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\")\\nvar Buffer = buffer.Buffer\\n\\n// alternative to using Object.keys for old browsers\\nfunction copyProps (src, dst) {\\n for (var key in src) {\\n dst[key] = src[key]\\n }\\n}\\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\\n module.exports = buffer\\n} else {\\n // Copy properties from require('buffer')\\n copyProps(buffer, exports)\\n exports.Buffer = SafeBuffer\\n}\\n\\nfunction SafeBuffer (arg, encodingOrOffset, length) {\\n return Buffer(arg, encodingOrOffset, length)\\n}\\n\\n// Copy static methods from Buffer\\ncopyProps(Buffer, SafeBuffer)\\n\\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\\n if (typeof arg === 'number') {\\n throw new TypeError('Argument must not be a number')\\n }\\n return Buffer(arg, encodingOrOffset, length)\\n}\\n\\nSafeBuffer.alloc = function (size, fill, encoding) {\\n if (typeof size !== 'number') {\\n throw new TypeError('Argument must be a number')\\n }\\n var buf = Buffer(size)\\n if (fill !== undefined) {\\n if (typeof encoding === 'string') {\\n buf.fill(fill, encoding)\\n } else {\\n buf.fill(fill)\\n }\\n } else {\\n buf.fill(0)\\n }\\n return buf\\n}\\n\\nSafeBuffer.allocUnsafe = function (size) {\\n if (typeof size !== 'number') {\\n throw new TypeError('Argument must be a number')\\n }\\n return Buffer(size)\\n}\\n\\nSafeBuffer.allocUnsafeSlow = function (size) {\\n if (typeof size !== 'number') {\\n throw new TypeError('Argument must be a number')\\n }\\n return buffer.SlowBuffer(size)\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/safe-buffer/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/scrypt-js/scrypt.js\":\n/*!******************************************!*\\\n !*** ./node_modules/scrypt-js/scrypt.js ***!\n \\******************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"/* WEBPACK VAR INJECTION */(function(setImmediate) {\\n\\n(function(root) {\\n const MAX_VALUE = 0x7fffffff;\\n\\n // The SHA256 and PBKDF2 implementation are from scrypt-async-js:\\n // See: https://github.com/dchest/scrypt-async-js\\n function SHA256(m) {\\n const K = new Uint32Array([\\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b,\\n 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01,\\n 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7,\\n 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,\\n 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152,\\n 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,\\n 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc,\\n 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,\\n 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08,\\n 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f,\\n 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,\\n 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\\n ]);\\n\\n let h0 = 0x6a09e667, h1 = 0xbb67ae85, h2 = 0x3c6ef372, h3 = 0xa54ff53a;\\n let h4 = 0x510e527f, h5 = 0x9b05688c, h6 = 0x1f83d9ab, h7 = 0x5be0cd19;\\n const w = new Uint32Array(64);\\n\\n function blocks(p) {\\n let off = 0, len = p.length;\\n while (len >= 64) {\\n let a = h0, b = h1, c = h2, d = h3, e = h4, f = h5, g = h6, h = h7, u, i, j, t1, t2;\\n\\n for (i = 0; i < 16; i++) {\\n j = off + i*4;\\n w[i] = ((p[j] & 0xff)<<24) | ((p[j+1] & 0xff)<<16) |\\n ((p[j+2] & 0xff)<<8) | (p[j+3] & 0xff);\\n }\\n\\n for (i = 16; i < 64; i++) {\\n u = w[i-2];\\n t1 = ((u>>>17) | (u<<(32-17))) ^ ((u>>>19) | (u<<(32-19))) ^ (u>>>10);\\n\\n u = w[i-15];\\n t2 = ((u>>>7) | (u<<(32-7))) ^ ((u>>>18) | (u<<(32-18))) ^ (u>>>3);\\n\\n w[i] = (((t1 + w[i-7]) | 0) + ((t2 + w[i-16]) | 0)) | 0;\\n }\\n\\n for (i = 0; i < 64; i++) {\\n t1 = ((((((e>>>6) | (e<<(32-6))) ^ ((e>>>11) | (e<<(32-11))) ^\\n ((e>>>25) | (e<<(32-25)))) + ((e & f) ^ (~e & g))) | 0) +\\n ((h + ((K[i] + w[i]) | 0)) | 0)) | 0;\\n\\n t2 = ((((a>>>2) | (a<<(32-2))) ^ ((a>>>13) | (a<<(32-13))) ^\\n ((a>>>22) | (a<<(32-22)))) + ((a & b) ^ (a & c) ^ (b & c))) | 0;\\n\\n h = g;\\n g = f;\\n f = e;\\n e = (d + t1) | 0;\\n d = c;\\n c = b;\\n b = a;\\n a = (t1 + t2) | 0;\\n }\\n\\n h0 = (h0 + a) | 0;\\n h1 = (h1 + b) | 0;\\n h2 = (h2 + c) | 0;\\n h3 = (h3 + d) | 0;\\n h4 = (h4 + e) | 0;\\n h5 = (h5 + f) | 0;\\n h6 = (h6 + g) | 0;\\n h7 = (h7 + h) | 0;\\n\\n off += 64;\\n len -= 64;\\n }\\n }\\n\\n blocks(m);\\n\\n let i, bytesLeft = m.length % 64,\\n bitLenHi = (m.length / 0x20000000) | 0,\\n bitLenLo = m.length << 3,\\n numZeros = (bytesLeft < 56) ? 56 : 120,\\n p = m.slice(m.length - bytesLeft, m.length);\\n\\n p.push(0x80);\\n for (i = bytesLeft + 1; i < numZeros; i++) { p.push(0); }\\n p.push((bitLenHi >>> 24) & 0xff);\\n p.push((bitLenHi >>> 16) & 0xff);\\n p.push((bitLenHi >>> 8) & 0xff);\\n p.push((bitLenHi >>> 0) & 0xff);\\n p.push((bitLenLo >>> 24) & 0xff);\\n p.push((bitLenLo >>> 16) & 0xff);\\n p.push((bitLenLo >>> 8) & 0xff);\\n p.push((bitLenLo >>> 0) & 0xff);\\n\\n blocks(p);\\n\\n return [\\n (h0 >>> 24) & 0xff, (h0 >>> 16) & 0xff, (h0 >>> 8) & 0xff, (h0 >>> 0) & 0xff,\\n (h1 >>> 24) & 0xff, (h1 >>> 16) & 0xff, (h1 >>> 8) & 0xff, (h1 >>> 0) & 0xff,\\n (h2 >>> 24) & 0xff, (h2 >>> 16) & 0xff, (h2 >>> 8) & 0xff, (h2 >>> 0) & 0xff,\\n (h3 >>> 24) & 0xff, (h3 >>> 16) & 0xff, (h3 >>> 8) & 0xff, (h3 >>> 0) & 0xff,\\n (h4 >>> 24) & 0xff, (h4 >>> 16) & 0xff, (h4 >>> 8) & 0xff, (h4 >>> 0) & 0xff,\\n (h5 >>> 24) & 0xff, (h5 >>> 16) & 0xff, (h5 >>> 8) & 0xff, (h5 >>> 0) & 0xff,\\n (h6 >>> 24) & 0xff, (h6 >>> 16) & 0xff, (h6 >>> 8) & 0xff, (h6 >>> 0) & 0xff,\\n (h7 >>> 24) & 0xff, (h7 >>> 16) & 0xff, (h7 >>> 8) & 0xff, (h7 >>> 0) & 0xff\\n ];\\n }\\n\\n function PBKDF2_HMAC_SHA256_OneIter(password, salt, dkLen) {\\n // compress password if it's longer than hash block length\\n password = (password.length <= 64) ? password : SHA256(password);\\n\\n const innerLen = 64 + salt.length + 4;\\n const inner = new Array(innerLen);\\n const outerKey = new Array(64);\\n\\n let i;\\n let dk = [];\\n\\n // inner = (password ^ ipad) || salt || counter\\n for (i = 0; i < 64; i++) { inner[i] = 0x36; }\\n for (i = 0; i < password.length; i++) { inner[i] ^= password[i]; }\\n for (i = 0; i < salt.length; i++) { inner[64 + i] = salt[i]; }\\n for (i = innerLen - 4; i < innerLen; i++) { inner[i] = 0; }\\n\\n // outerKey = password ^ opad\\n for (i = 0; i < 64; i++) outerKey[i] = 0x5c;\\n for (i = 0; i < password.length; i++) outerKey[i] ^= password[i];\\n\\n // increments counter inside inner\\n function incrementCounter() {\\n for (let i = innerLen - 1; i >= innerLen - 4; i--) {\\n inner[i]++;\\n if (inner[i] <= 0xff) return;\\n inner[i] = 0;\\n }\\n }\\n\\n // output blocks = SHA256(outerKey || SHA256(inner)) ...\\n while (dkLen >= 32) {\\n incrementCounter();\\n dk = dk.concat(SHA256(outerKey.concat(SHA256(inner))));\\n dkLen -= 32;\\n }\\n if (dkLen > 0) {\\n incrementCounter();\\n dk = dk.concat(SHA256(outerKey.concat(SHA256(inner))).slice(0, dkLen));\\n }\\n\\n return dk;\\n }\\n\\n // The following is an adaptation of scryptsy\\n // See: https://www.npmjs.com/package/scryptsy\\n function blockmix_salsa8(BY, Yi, r, x, _X) {\\n let i;\\n\\n arraycopy(BY, (2 * r - 1) * 16, _X, 0, 16);\\n for (i = 0; i < 2 * r; i++) {\\n blockxor(BY, i * 16, _X, 16);\\n salsa20_8(_X, x);\\n arraycopy(_X, 0, BY, Yi + (i * 16), 16);\\n }\\n\\n for (i = 0; i < r; i++) {\\n arraycopy(BY, Yi + (i * 2) * 16, BY, (i * 16), 16);\\n }\\n\\n for (i = 0; i < r; i++) {\\n arraycopy(BY, Yi + (i * 2 + 1) * 16, BY, (i + r) * 16, 16);\\n }\\n }\\n\\n function R(a, b) {\\n return (a << b) | (a >>> (32 - b));\\n }\\n\\n function salsa20_8(B, x) {\\n arraycopy(B, 0, x, 0, 16);\\n\\n for (let i = 8; i > 0; i -= 2) {\\n x[ 4] ^= R(x[ 0] + x[12], 7);\\n x[ 8] ^= R(x[ 4] + x[ 0], 9);\\n x[12] ^= R(x[ 8] + x[ 4], 13);\\n x[ 0] ^= R(x[12] + x[ 8], 18);\\n x[ 9] ^= R(x[ 5] + x[ 1], 7);\\n x[13] ^= R(x[ 9] + x[ 5], 9);\\n x[ 1] ^= R(x[13] + x[ 9], 13);\\n x[ 5] ^= R(x[ 1] + x[13], 18);\\n x[14] ^= R(x[10] + x[ 6], 7);\\n x[ 2] ^= R(x[14] + x[10], 9);\\n x[ 6] ^= R(x[ 2] + x[14], 13);\\n x[10] ^= R(x[ 6] + x[ 2], 18);\\n x[ 3] ^= R(x[15] + x[11], 7);\\n x[ 7] ^= R(x[ 3] + x[15], 9);\\n x[11] ^= R(x[ 7] + x[ 3], 13);\\n x[15] ^= R(x[11] + x[ 7], 18);\\n x[ 1] ^= R(x[ 0] + x[ 3], 7);\\n x[ 2] ^= R(x[ 1] + x[ 0], 9);\\n x[ 3] ^= R(x[ 2] + x[ 1], 13);\\n x[ 0] ^= R(x[ 3] + x[ 2], 18);\\n x[ 6] ^= R(x[ 5] + x[ 4], 7);\\n x[ 7] ^= R(x[ 6] + x[ 5], 9);\\n x[ 4] ^= R(x[ 7] + x[ 6], 13);\\n x[ 5] ^= R(x[ 4] + x[ 7], 18);\\n x[11] ^= R(x[10] + x[ 9], 7);\\n x[ 8] ^= R(x[11] + x[10], 9);\\n x[ 9] ^= R(x[ 8] + x[11], 13);\\n x[10] ^= R(x[ 9] + x[ 8], 18);\\n x[12] ^= R(x[15] + x[14], 7);\\n x[13] ^= R(x[12] + x[15], 9);\\n x[14] ^= R(x[13] + x[12], 13);\\n x[15] ^= R(x[14] + x[13], 18);\\n }\\n\\n for (let i = 0; i < 16; ++i) {\\n B[i] += x[i];\\n }\\n }\\n\\n // naive approach... going back to loop unrolling may yield additional performance\\n function blockxor(S, Si, D, len) {\\n for (let i = 0; i < len; i++) {\\n D[i] ^= S[Si + i]\\n }\\n }\\n\\n function arraycopy(src, srcPos, dest, destPos, length) {\\n while (length--) {\\n dest[destPos++] = src[srcPos++];\\n }\\n }\\n\\n function checkBufferish(o) {\\n if (!o || typeof(o.length) !== 'number') { return false; }\\n\\n for (let i = 0; i < o.length; i++) {\\n const v = o[i];\\n if (typeof(v) !== 'number' || v % 1 || v < 0 || v >= 256) {\\n return false;\\n }\\n }\\n\\n return true;\\n }\\n\\n function ensureInteger(value, name) {\\n if (typeof(value) !== \\\"number\\\" || (value % 1)) { throw new Error('invalid ' + name); }\\n return value;\\n }\\n\\n // N = Cpu cost, r = Memory cost, p = parallelization cost\\n // callback(error, progress, key)\\n function _scrypt(password, salt, N, r, p, dkLen, callback) {\\n\\n N = ensureInteger(N, 'N');\\n r = ensureInteger(r, 'r');\\n p = ensureInteger(p, 'p');\\n\\n dkLen = ensureInteger(dkLen, 'dkLen');\\n\\n if (N === 0 || (N & (N - 1)) !== 0) { throw new Error('N must be power of 2'); }\\n\\n if (N > MAX_VALUE / 128 / r) { throw new Error('N too large'); }\\n if (r > MAX_VALUE / 128 / p) { throw new Error('r too large'); }\\n\\n if (!checkBufferish(password)) {\\n throw new Error('password must be an array or buffer');\\n }\\n password = Array.prototype.slice.call(password);\\n\\n if (!checkBufferish(salt)) {\\n throw new Error('salt must be an array or buffer');\\n }\\n salt = Array.prototype.slice.call(salt);\\n\\n let b = PBKDF2_HMAC_SHA256_OneIter(password, salt, p * 128 * r);\\n const B = new Uint32Array(p * 32 * r)\\n for (let i = 0; i < B.length; i++) {\\n const j = i * 4;\\n B[i] = ((b[j + 3] & 0xff) << 24) |\\n ((b[j + 2] & 0xff) << 16) |\\n ((b[j + 1] & 0xff) << 8) |\\n ((b[j + 0] & 0xff) << 0);\\n }\\n\\n const XY = new Uint32Array(64 * r);\\n const V = new Uint32Array(32 * r * N);\\n\\n const Yi = 32 * r;\\n\\n // scratch space\\n const x = new Uint32Array(16); // salsa20_8\\n const _X = new Uint32Array(16); // blockmix_salsa8\\n\\n const totalOps = p * N * 2;\\n let currentOp = 0;\\n let lastPercent10 = null;\\n\\n // Set this to true to abandon the scrypt on the next step\\n let stop = false;\\n\\n // State information\\n let state = 0;\\n let i0 = 0, i1;\\n let Bi;\\n\\n // How many blockmix_salsa8 can we do per step?\\n const limit = callback ? parseInt(1000 / r): 0xffffffff;\\n\\n // Trick from scrypt-async; if there is a setImmediate shim in place, use it\\n const nextTick = (typeof(setImmediate) !== 'undefined') ? setImmediate : setTimeout;\\n\\n // This is really all I changed; making scryptsy a state machine so we occasionally\\n // stop and give other evnts on the evnt loop a chance to run. ~RicMoo\\n const incrementalSMix = function() {\\n if (stop) {\\n return callback(new Error('cancelled'), currentOp / totalOps);\\n }\\n\\n let steps;\\n\\n switch (state) {\\n case 0:\\n // for (var i = 0; i < p; i++)...\\n Bi = i0 * 32 * r;\\n\\n arraycopy(B, Bi, XY, 0, Yi); // ROMix - 1\\n\\n state = 1; // Move to ROMix 2\\n i1 = 0;\\n\\n // Fall through\\n\\n case 1:\\n\\n // Run up to 1000 steps of the first inner smix loop\\n steps = N - i1;\\n if (steps > limit) { steps = limit; }\\n for (let i = 0; i < steps; i++) { // ROMix - 2\\n arraycopy(XY, 0, V, (i1 + i) * Yi, Yi) // ROMix - 3\\n blockmix_salsa8(XY, Yi, r, x, _X); // ROMix - 4\\n }\\n\\n // for (var i = 0; i < N; i++)\\n i1 += steps;\\n currentOp += steps;\\n\\n if (callback) {\\n // Call the callback with the progress (optionally stopping us)\\n const percent10 = parseInt(1000 * currentOp / totalOps);\\n if (percent10 !== lastPercent10) {\\n stop = callback(null, currentOp / totalOps);\\n if (stop) { break; }\\n lastPercent10 = percent10;\\n }\\n }\\n\\n if (i1 < N) { break; }\\n\\n i1 = 0; // Move to ROMix 6\\n state = 2;\\n\\n // Fall through\\n\\n case 2:\\n\\n // Run up to 1000 steps of the second inner smix loop\\n steps = N - i1;\\n if (steps > limit) { steps = limit; }\\n for (let i = 0; i < steps; i++) { // ROMix - 6\\n const offset = (2 * r - 1) * 16; // ROMix - 7\\n const j = XY[offset] & (N - 1);\\n blockxor(V, j * Yi, XY, Yi); // ROMix - 8 (inner)\\n blockmix_salsa8(XY, Yi, r, x, _X); // ROMix - 9 (outer)\\n }\\n\\n // for (var i = 0; i < N; i++)...\\n i1 += steps;\\n currentOp += steps;\\n\\n // Call the callback with the progress (optionally stopping us)\\n if (callback) {\\n const percent10 = parseInt(1000 * currentOp / totalOps);\\n if (percent10 !== lastPercent10) {\\n stop = callback(null, currentOp / totalOps);\\n if (stop) { break; }\\n lastPercent10 = percent10;\\n }\\n }\\n\\n if (i1 < N) { break; }\\n\\n arraycopy(XY, 0, B, Bi, Yi); // ROMix - 10\\n\\n // for (var i = 0; i < p; i++)...\\n i0++;\\n if (i0 < p) {\\n state = 0;\\n break;\\n }\\n\\n b = [];\\n for (let i = 0; i < B.length; i++) {\\n b.push((B[i] >> 0) & 0xff);\\n b.push((B[i] >> 8) & 0xff);\\n b.push((B[i] >> 16) & 0xff);\\n b.push((B[i] >> 24) & 0xff);\\n }\\n\\n const derivedKey = PBKDF2_HMAC_SHA256_OneIter(password, b, dkLen);\\n\\n // Send the result to the callback\\n if (callback) { callback(null, 1.0, derivedKey); }\\n\\n // Done; don't break (which would reschedule)\\n return derivedKey;\\n }\\n\\n // Schedule the next steps\\n if (callback) { nextTick(incrementalSMix); }\\n }\\n\\n // Run the smix state machine until completion\\n if (!callback) {\\n while (true) {\\n const derivedKey = incrementalSMix();\\n if (derivedKey != undefined) { return derivedKey; }\\n }\\n }\\n\\n // Bootstrap the async incremental smix\\n incrementalSMix();\\n }\\n\\n const lib = {\\n scrypt: function(password, salt, N, r, p, dkLen, progressCallback) {\\n return new Promise(function(resolve, reject) {\\n let lastProgress = 0;\\n if (progressCallback) { progressCallback(0); }\\n _scrypt(password, salt, N, r, p, dkLen, function(error, progress, key) {\\n if (error) {\\n reject(error);\\n } else if (key) {\\n if (progressCallback && lastProgress !== 1) {\\n progressCallback(1);\\n }\\n resolve(new Uint8Array(key));\\n } else if (progressCallback && progress !== lastProgress) {\\n lastProgress = progress;\\n return progressCallback(progress);\\n }\\n });\\n });\\n },\\n syncScrypt: function(password, salt, N, r, p, dkLen) {\\n return new Uint8Array(_scrypt(password, salt, N, r, p, dkLen));\\n }\\n };\\n\\n // node.js\\n if (true) {\\n module.exports = lib;\\n\\n // RequireJS/AMD\\n // http://www.requirejs.org/docs/api.html\\n // https://github.com/amdjs/amdjs-api/wiki/AMD\\n } else {}\\n\\n})(this);\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../timers-browserify/main.js */ \\\"./node_modules/timers-browserify/main.js\\\").setImmediate))\\n\\n//# sourceURL=webpack:///./node_modules/scrypt-js/scrypt.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/setimmediate/setImmediate.js\":\n/*!***************************************************!*\\\n !*** ./node_modules/setimmediate/setImmediate.js ***!\n \\***************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"/* WEBPACK VAR INJECTION */(function(global, process) {(function (global, undefined) {\\n \\\"use strict\\\";\\n\\n if (global.setImmediate) {\\n return;\\n }\\n\\n var nextHandle = 1; // Spec says greater than zero\\n var tasksByHandle = {};\\n var currentlyRunningATask = false;\\n var doc = global.document;\\n var setImmediate;\\n\\n function addFromSetImmediateArguments(args) {\\n tasksByHandle[nextHandle] = partiallyApplied.apply(undefined, args);\\n return nextHandle++;\\n }\\n\\n // This function accepts the same arguments as setImmediate, but\\n // returns a function that requires no arguments.\\n function partiallyApplied(handler) {\\n var args = [].slice.call(arguments, 1);\\n return function() {\\n if (typeof handler === \\\"function\\\") {\\n handler.apply(undefined, args);\\n } else {\\n (new Function(\\\"\\\" + handler))();\\n }\\n };\\n }\\n\\n function runIfPresent(handle) {\\n // From the spec: \\\"Wait until any invocations of this algorithm started before this one have completed.\\\"\\n // So if we're currently running a task, we'll need to delay this invocation.\\n if (currentlyRunningATask) {\\n // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\\n // \\\"too much recursion\\\" error.\\n setTimeout(partiallyApplied(runIfPresent, handle), 0);\\n } else {\\n var task = tasksByHandle[handle];\\n if (task) {\\n currentlyRunningATask = true;\\n try {\\n task();\\n } finally {\\n clearImmediate(handle);\\n currentlyRunningATask = false;\\n }\\n }\\n }\\n }\\n\\n function clearImmediate(handle) {\\n delete tasksByHandle[handle];\\n }\\n\\n function installNextTickImplementation() {\\n setImmediate = function() {\\n var handle = addFromSetImmediateArguments(arguments);\\n process.nextTick(partiallyApplied(runIfPresent, handle));\\n return handle;\\n };\\n }\\n\\n function canUsePostMessage() {\\n // The test against `importScripts` prevents this implementation from being installed inside a web worker,\\n // where `global.postMessage` means something completely different and can't be used for this purpose.\\n if (global.postMessage && !global.importScripts) {\\n var postMessageIsAsynchronous = true;\\n var oldOnMessage = global.onmessage;\\n global.onmessage = function() {\\n postMessageIsAsynchronous = false;\\n };\\n global.postMessage(\\\"\\\", \\\"*\\\");\\n global.onmessage = oldOnMessage;\\n return postMessageIsAsynchronous;\\n }\\n }\\n\\n function installPostMessageImplementation() {\\n // Installs an event handler on `global` for the `message` event: see\\n // * https://developer.mozilla.org/en/DOM/window.postMessage\\n // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\\n\\n var messagePrefix = \\\"setImmediate$\\\" + Math.random() + \\\"$\\\";\\n var onGlobalMessage = function(event) {\\n if (event.source === global &&\\n typeof event.data === \\\"string\\\" &&\\n event.data.indexOf(messagePrefix) === 0) {\\n runIfPresent(+event.data.slice(messagePrefix.length));\\n }\\n };\\n\\n if (global.addEventListener) {\\n global.addEventListener(\\\"message\\\", onGlobalMessage, false);\\n } else {\\n global.attachEvent(\\\"onmessage\\\", onGlobalMessage);\\n }\\n\\n setImmediate = function() {\\n var handle = addFromSetImmediateArguments(arguments);\\n global.postMessage(messagePrefix + handle, \\\"*\\\");\\n return handle;\\n };\\n }\\n\\n function installMessageChannelImplementation() {\\n var channel = new MessageChannel();\\n channel.port1.onmessage = function(event) {\\n var handle = event.data;\\n runIfPresent(handle);\\n };\\n\\n setImmediate = function() {\\n var handle = addFromSetImmediateArguments(arguments);\\n channel.port2.postMessage(handle);\\n return handle;\\n };\\n }\\n\\n function installReadyStateChangeImplementation() {\\n var html = doc.documentElement;\\n setImmediate = function() {\\n var handle = addFromSetImmediateArguments(arguments);\\n // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\\n var script = doc.createElement(\\\"script\\\");\\n script.onreadystatechange = function () {\\n runIfPresent(handle);\\n script.onreadystatechange = null;\\n html.removeChild(script);\\n script = null;\\n };\\n html.appendChild(script);\\n return handle;\\n };\\n }\\n\\n function installSetTimeoutImplementation() {\\n setImmediate = function() {\\n var handle = addFromSetImmediateArguments(arguments);\\n setTimeout(partiallyApplied(runIfPresent, handle), 0);\\n return handle;\\n };\\n }\\n\\n // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.\\n var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);\\n attachTo = attachTo && attachTo.setTimeout ? attachTo : global;\\n\\n // Don't get fooled by e.g. browserify environments.\\n if ({}.toString.call(global.process) === \\\"[object process]\\\") {\\n // For Node.js before 0.9\\n installNextTickImplementation();\\n\\n } else if (canUsePostMessage()) {\\n // For non-IE10 modern browsers\\n installPostMessageImplementation();\\n\\n } else if (global.MessageChannel) {\\n // For web workers, where supported\\n installMessageChannelImplementation();\\n\\n } else if (doc && \\\"onreadystatechange\\\" in doc.createElement(\\\"script\\\")) {\\n // For IE 6–8\\n installReadyStateChangeImplementation();\\n\\n } else {\\n // For older browsers\\n installSetTimeoutImplementation();\\n }\\n\\n attachTo.setImmediate = setImmediate;\\n attachTo.clearImmediate = clearImmediate;\\n}(typeof self === \\\"undefined\\\" ? typeof global === \\\"undefined\\\" ? this : global : self));\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ \\\"./node_modules/webpack/buildin/global.js\\\"), __webpack_require__(/*! ./../process/browser.js */ \\\"./node_modules/process/browser.js\\\")))\\n\\n//# sourceURL=webpack:///./node_modules/setimmediate/setImmediate.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/signed-varint/index.js\":\n/*!*********************************************!*\\\n !*** ./node_modules/signed-varint/index.js ***!\n \\*********************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"var varint = __webpack_require__(/*! varint */ \\\"./node_modules/varint/index.js\\\")\\nexports.encode = function encode (v, b, o) {\\n v = v >= 0 ? v*2 : v*-2 - 1\\n var r = varint.encode(v, b, o)\\n encode.bytes = varint.encode.bytes\\n return r\\n}\\nexports.decode = function decode (b, o) {\\n var v = varint.decode(b, o)\\n decode.bytes = varint.decode.bytes\\n return v & 1 ? (v+1) / -2 : v / 2\\n}\\n\\nexports.encodingLength = function (v) {\\n return varint.encodingLength(v >= 0 ? v*2 : v*-2 - 1)\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/signed-varint/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/stable/stable.js\":\n/*!***************************************!*\\\n !*** ./node_modules/stable/stable.js ***!\n \\***************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"//! stable.js 0.1.8, https://github.com/Two-Screen/stable\\n//! © 2018 Angry Bytes and contributors. MIT licensed.\\n\\n(function (global, factory) {\\n true ? module.exports = factory() :\\n undefined;\\n}(this, (function () { 'use strict';\\n\\n // A stable array sort, because `Array#sort()` is not guaranteed stable.\\n // This is an implementation of merge sort, without recursion.\\n\\n var stable = function (arr, comp) {\\n return exec(arr.slice(), comp)\\n };\\n\\n stable.inplace = function (arr, comp) {\\n var result = exec(arr, comp);\\n\\n // This simply copies back if the result isn't in the original array,\\n // which happens on an odd number of passes.\\n if (result !== arr) {\\n pass(result, null, arr.length, arr);\\n }\\n\\n return arr\\n };\\n\\n // Execute the sort using the input array and a second buffer as work space.\\n // Returns one of those two, containing the final result.\\n function exec(arr, comp) {\\n if (typeof(comp) !== 'function') {\\n comp = function (a, b) {\\n return String(a).localeCompare(b)\\n };\\n }\\n\\n // Short-circuit when there's nothing to sort.\\n var len = arr.length;\\n if (len <= 1) {\\n return arr\\n }\\n\\n // Rather than dividing input, simply iterate chunks of 1, 2, 4, 8, etc.\\n // Chunks are the size of the left or right hand in merge sort.\\n // Stop when the left-hand covers all of the array.\\n var buffer = new Array(len);\\n for (var chk = 1; chk < len; chk *= 2) {\\n pass(arr, comp, chk, buffer);\\n\\n var tmp = arr;\\n arr = buffer;\\n buffer = tmp;\\n }\\n\\n return arr\\n }\\n\\n // Run a single pass with the given chunk size.\\n var pass = function (arr, comp, chk, result) {\\n var len = arr.length;\\n var i = 0;\\n // Step size / double chunk size.\\n var dbl = chk * 2;\\n // Bounds of the left and right chunks.\\n var l, r, e;\\n // Iterators over the left and right chunk.\\n var li, ri;\\n\\n // Iterate over pairs of chunks.\\n for (l = 0; l < len; l += dbl) {\\n r = l + chk;\\n e = r + chk;\\n if (r > len) r = len;\\n if (e > len) e = len;\\n\\n // Iterate both chunks in parallel.\\n li = l;\\n ri = r;\\n while (true) {\\n // Compare the chunks.\\n if (li < r && ri < e) {\\n // This works for a regular `sort()` compatible comparator,\\n // but also for a simple comparator like: `a > b`\\n if (comp(arr[li], arr[ri]) <= 0) {\\n result[i++] = arr[li++];\\n }\\n else {\\n result[i++] = arr[ri++];\\n }\\n }\\n // Nothing to compare, just flush what's left.\\n else if (li < r) {\\n result[i++] = arr[li++];\\n }\\n else if (ri < e) {\\n result[i++] = arr[ri++];\\n }\\n // Both iterators are at the chunk ends.\\n else {\\n break\\n }\\n }\\n }\\n };\\n\\n return stable;\\n\\n})));\\n\\n\\n//# sourceURL=webpack:///./node_modules/stable/stable.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/style-loader/index.js!./src/style.less\":\n/*!****************************************************!*\\\n !*** ./node_modules/style-loader!./src/style.less ***!\n \\****************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"\\nvar content = __webpack_require__(/*! !../node_modules/css-loader/dist/cjs.js??ref--5-0!../node_modules/less-loader/dist/cjs.js!./style.less */ \\\"./node_modules/css-loader/dist/cjs.js?!./node_modules/less-loader/dist/cjs.js!./src/style.less\\\");\\n\\nif(typeof content === 'string') content = [[module.i, content, '']];\\n\\nvar transform;\\nvar insertInto;\\n\\n\\n\\nvar options = {\\\"hmr\\\":true}\\n\\noptions.transform = transform\\noptions.insertInto = undefined;\\n\\nvar update = __webpack_require__(/*! ../node_modules/style-loader/lib/addStyles.js */ \\\"./node_modules/style-loader/lib/addStyles.js\\\")(content, options);\\n\\nif(content.locals) module.exports = content.locals;\\n\\nif(false) {}\\n\\n//# sourceURL=webpack:///./src/style.less?./node_modules/style-loader\");\n\n/***/ }),\n\n/***/ \"./node_modules/style-loader/lib/addStyles.js\":\n/*!****************************************************!*\\\n !*** ./node_modules/style-loader/lib/addStyles.js ***!\n \\****************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"/*\\n\\tMIT License http://www.opensource.org/licenses/mit-license.php\\n\\tAuthor Tobias Koppers @sokra\\n*/\\n\\nvar stylesInDom = {};\\n\\nvar\\tmemoize = function (fn) {\\n\\tvar memo;\\n\\n\\treturn function () {\\n\\t\\tif (typeof memo === \\\"undefined\\\") memo = fn.apply(this, arguments);\\n\\t\\treturn memo;\\n\\t};\\n};\\n\\nvar isOldIE = memoize(function () {\\n\\t// Test for IE <= 9 as proposed by Browserhacks\\n\\t// @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\\n\\t// Tests for existence of standard globals is to allow style-loader\\n\\t// to operate correctly into non-standard environments\\n\\t// @see https://github.com/webpack-contrib/style-loader/issues/177\\n\\treturn window && document && document.all && !window.atob;\\n});\\n\\nvar getTarget = function (target, parent) {\\n if (parent){\\n return parent.querySelector(target);\\n }\\n return document.querySelector(target);\\n};\\n\\nvar getElement = (function (fn) {\\n\\tvar memo = {};\\n\\n\\treturn function(target, parent) {\\n // If passing function in options, then use it for resolve \\\"head\\\" element.\\n // Useful for Shadow Root style i.e\\n // {\\n // insertInto: function () { return document.querySelector(\\\"#foo\\\").shadowRoot }\\n // }\\n if (typeof target === 'function') {\\n return target();\\n }\\n if (typeof memo[target] === \\\"undefined\\\") {\\n\\t\\t\\tvar styleTarget = getTarget.call(this, target, parent);\\n\\t\\t\\t// Special case to return head of iframe instead of iframe itself\\n\\t\\t\\tif (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\\n\\t\\t\\t\\ttry {\\n\\t\\t\\t\\t\\t// This will throw an exception if access to iframe is blocked\\n\\t\\t\\t\\t\\t// due to cross-origin restrictions\\n\\t\\t\\t\\t\\tstyleTarget = styleTarget.contentDocument.head;\\n\\t\\t\\t\\t} catch(e) {\\n\\t\\t\\t\\t\\tstyleTarget = null;\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\tmemo[target] = styleTarget;\\n\\t\\t}\\n\\t\\treturn memo[target]\\n\\t};\\n})();\\n\\nvar singleton = null;\\nvar\\tsingletonCounter = 0;\\nvar\\tstylesInsertedAtTop = [];\\n\\nvar\\tfixUrls = __webpack_require__(/*! ./urls */ \\\"./node_modules/style-loader/lib/urls.js\\\");\\n\\nmodule.exports = function(list, options) {\\n\\tif (typeof DEBUG !== \\\"undefined\\\" && DEBUG) {\\n\\t\\tif (typeof document !== \\\"object\\\") throw new Error(\\\"The style-loader cannot be used in a non-browser environment\\\");\\n\\t}\\n\\n\\toptions = options || {};\\n\\n\\toptions.attrs = typeof options.attrs === \\\"object\\\" ? options.attrs : {};\\n\\n\\t// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>\\n\\t// tags it will allow on a page\\n\\tif (!options.singleton && typeof options.singleton !== \\\"boolean\\\") options.singleton = isOldIE();\\n\\n\\t// By default, add <style> tags to the <head> element\\n if (!options.insertInto) options.insertInto = \\\"head\\\";\\n\\n\\t// By default, add <style> tags to the bottom of the target\\n\\tif (!options.insertAt) options.insertAt = \\\"bottom\\\";\\n\\n\\tvar styles = listToStyles(list, options);\\n\\n\\taddStylesToDom(styles, options);\\n\\n\\treturn function update (newList) {\\n\\t\\tvar mayRemove = [];\\n\\n\\t\\tfor (var i = 0; i < styles.length; i++) {\\n\\t\\t\\tvar item = styles[i];\\n\\t\\t\\tvar domStyle = stylesInDom[item.id];\\n\\n\\t\\t\\tdomStyle.refs--;\\n\\t\\t\\tmayRemove.push(domStyle);\\n\\t\\t}\\n\\n\\t\\tif(newList) {\\n\\t\\t\\tvar newStyles = listToStyles(newList, options);\\n\\t\\t\\taddStylesToDom(newStyles, options);\\n\\t\\t}\\n\\n\\t\\tfor (var i = 0; i < mayRemove.length; i++) {\\n\\t\\t\\tvar domStyle = mayRemove[i];\\n\\n\\t\\t\\tif(domStyle.refs === 0) {\\n\\t\\t\\t\\tfor (var j = 0; j < domStyle.parts.length; j++) domStyle.parts[j]();\\n\\n\\t\\t\\t\\tdelete stylesInDom[domStyle.id];\\n\\t\\t\\t}\\n\\t\\t}\\n\\t};\\n};\\n\\nfunction addStylesToDom (styles, options) {\\n\\tfor (var i = 0; i < styles.length; i++) {\\n\\t\\tvar item = styles[i];\\n\\t\\tvar domStyle = stylesInDom[item.id];\\n\\n\\t\\tif(domStyle) {\\n\\t\\t\\tdomStyle.refs++;\\n\\n\\t\\t\\tfor(var j = 0; j < domStyle.parts.length; j++) {\\n\\t\\t\\t\\tdomStyle.parts[j](item.parts[j]);\\n\\t\\t\\t}\\n\\n\\t\\t\\tfor(; j < item.parts.length; j++) {\\n\\t\\t\\t\\tdomStyle.parts.push(addStyle(item.parts[j], options));\\n\\t\\t\\t}\\n\\t\\t} else {\\n\\t\\t\\tvar parts = [];\\n\\n\\t\\t\\tfor(var j = 0; j < item.parts.length; j++) {\\n\\t\\t\\t\\tparts.push(addStyle(item.parts[j], options));\\n\\t\\t\\t}\\n\\n\\t\\t\\tstylesInDom[item.id] = {id: item.id, refs: 1, parts: parts};\\n\\t\\t}\\n\\t}\\n}\\n\\nfunction listToStyles (list, options) {\\n\\tvar styles = [];\\n\\tvar newStyles = {};\\n\\n\\tfor (var i = 0; i < list.length; i++) {\\n\\t\\tvar item = list[i];\\n\\t\\tvar id = options.base ? item[0] + options.base : item[0];\\n\\t\\tvar css = item[1];\\n\\t\\tvar media = item[2];\\n\\t\\tvar sourceMap = item[3];\\n\\t\\tvar part = {css: css, media: media, sourceMap: sourceMap};\\n\\n\\t\\tif(!newStyles[id]) styles.push(newStyles[id] = {id: id, parts: [part]});\\n\\t\\telse newStyles[id].parts.push(part);\\n\\t}\\n\\n\\treturn styles;\\n}\\n\\nfunction insertStyleElement (options, style) {\\n\\tvar target = getElement(options.insertInto)\\n\\n\\tif (!target) {\\n\\t\\tthrow new Error(\\\"Couldn't find a style target. This probably means that the value for the 'insertInto' parameter is invalid.\\\");\\n\\t}\\n\\n\\tvar lastStyleElementInsertedAtTop = stylesInsertedAtTop[stylesInsertedAtTop.length - 1];\\n\\n\\tif (options.insertAt === \\\"top\\\") {\\n\\t\\tif (!lastStyleElementInsertedAtTop) {\\n\\t\\t\\ttarget.insertBefore(style, target.firstChild);\\n\\t\\t} else if (lastStyleElementInsertedAtTop.nextSibling) {\\n\\t\\t\\ttarget.insertBefore(style, lastStyleElementInsertedAtTop.nextSibling);\\n\\t\\t} else {\\n\\t\\t\\ttarget.appendChild(style);\\n\\t\\t}\\n\\t\\tstylesInsertedAtTop.push(style);\\n\\t} else if (options.insertAt === \\\"bottom\\\") {\\n\\t\\ttarget.appendChild(style);\\n\\t} else if (typeof options.insertAt === \\\"object\\\" && options.insertAt.before) {\\n\\t\\tvar nextSibling = getElement(options.insertAt.before, target);\\n\\t\\ttarget.insertBefore(style, nextSibling);\\n\\t} else {\\n\\t\\tthrow new Error(\\\"[Style Loader]\\\\n\\\\n Invalid value for parameter 'insertAt' ('options.insertAt') found.\\\\n Must be 'top', 'bottom', or Object.\\\\n (https://github.com/webpack-contrib/style-loader#insertat)\\\\n\\\");\\n\\t}\\n}\\n\\nfunction removeStyleElement (style) {\\n\\tif (style.parentNode === null) return false;\\n\\tstyle.parentNode.removeChild(style);\\n\\n\\tvar idx = stylesInsertedAtTop.indexOf(style);\\n\\tif(idx >= 0) {\\n\\t\\tstylesInsertedAtTop.splice(idx, 1);\\n\\t}\\n}\\n\\nfunction createStyleElement (options) {\\n\\tvar style = document.createElement(\\\"style\\\");\\n\\n\\tif(options.attrs.type === undefined) {\\n\\t\\toptions.attrs.type = \\\"text/css\\\";\\n\\t}\\n\\n\\tif(options.attrs.nonce === undefined) {\\n\\t\\tvar nonce = getNonce();\\n\\t\\tif (nonce) {\\n\\t\\t\\toptions.attrs.nonce = nonce;\\n\\t\\t}\\n\\t}\\n\\n\\taddAttrs(style, options.attrs);\\n\\tinsertStyleElement(options, style);\\n\\n\\treturn style;\\n}\\n\\nfunction createLinkElement (options) {\\n\\tvar link = document.createElement(\\\"link\\\");\\n\\n\\tif(options.attrs.type === undefined) {\\n\\t\\toptions.attrs.type = \\\"text/css\\\";\\n\\t}\\n\\toptions.attrs.rel = \\\"stylesheet\\\";\\n\\n\\taddAttrs(link, options.attrs);\\n\\tinsertStyleElement(options, link);\\n\\n\\treturn link;\\n}\\n\\nfunction addAttrs (el, attrs) {\\n\\tObject.keys(attrs).forEach(function (key) {\\n\\t\\tel.setAttribute(key, attrs[key]);\\n\\t});\\n}\\n\\nfunction getNonce() {\\n\\tif (false) {}\\n\\n\\treturn __webpack_require__.nc;\\n}\\n\\nfunction addStyle (obj, options) {\\n\\tvar style, update, remove, result;\\n\\n\\t// If a transform function was defined, run it on the css\\n\\tif (options.transform && obj.css) {\\n\\t result = typeof options.transform === 'function'\\n\\t\\t ? options.transform(obj.css) \\n\\t\\t : options.transform.default(obj.css);\\n\\n\\t if (result) {\\n\\t \\t// If transform returns a value, use that instead of the original css.\\n\\t \\t// This allows running runtime transformations on the css.\\n\\t \\tobj.css = result;\\n\\t } else {\\n\\t \\t// If the transform function returns a falsy value, don't add this css.\\n\\t \\t// This allows conditional loading of css\\n\\t \\treturn function() {\\n\\t \\t\\t// noop\\n\\t \\t};\\n\\t }\\n\\t}\\n\\n\\tif (options.singleton) {\\n\\t\\tvar styleIndex = singletonCounter++;\\n\\n\\t\\tstyle = singleton || (singleton = createStyleElement(options));\\n\\n\\t\\tupdate = applyToSingletonTag.bind(null, style, styleIndex, false);\\n\\t\\tremove = applyToSingletonTag.bind(null, style, styleIndex, true);\\n\\n\\t} else if (\\n\\t\\tobj.sourceMap &&\\n\\t\\ttypeof URL === \\\"function\\\" &&\\n\\t\\ttypeof URL.createObjectURL === \\\"function\\\" &&\\n\\t\\ttypeof URL.revokeObjectURL === \\\"function\\\" &&\\n\\t\\ttypeof Blob === \\\"function\\\" &&\\n\\t\\ttypeof btoa === \\\"function\\\"\\n\\t) {\\n\\t\\tstyle = createLinkElement(options);\\n\\t\\tupdate = updateLink.bind(null, style, options);\\n\\t\\tremove = function () {\\n\\t\\t\\tremoveStyleElement(style);\\n\\n\\t\\t\\tif(style.href) URL.revokeObjectURL(style.href);\\n\\t\\t};\\n\\t} else {\\n\\t\\tstyle = createStyleElement(options);\\n\\t\\tupdate = applyToTag.bind(null, style);\\n\\t\\tremove = function () {\\n\\t\\t\\tremoveStyleElement(style);\\n\\t\\t};\\n\\t}\\n\\n\\tupdate(obj);\\n\\n\\treturn function updateStyle (newObj) {\\n\\t\\tif (newObj) {\\n\\t\\t\\tif (\\n\\t\\t\\t\\tnewObj.css === obj.css &&\\n\\t\\t\\t\\tnewObj.media === obj.media &&\\n\\t\\t\\t\\tnewObj.sourceMap === obj.sourceMap\\n\\t\\t\\t) {\\n\\t\\t\\t\\treturn;\\n\\t\\t\\t}\\n\\n\\t\\t\\tupdate(obj = newObj);\\n\\t\\t} else {\\n\\t\\t\\tremove();\\n\\t\\t}\\n\\t};\\n}\\n\\nvar replaceText = (function () {\\n\\tvar textStore = [];\\n\\n\\treturn function (index, replacement) {\\n\\t\\ttextStore[index] = replacement;\\n\\n\\t\\treturn textStore.filter(Boolean).join('\\\\n');\\n\\t};\\n})();\\n\\nfunction applyToSingletonTag (style, index, remove, obj) {\\n\\tvar css = remove ? \\\"\\\" : obj.css;\\n\\n\\tif (style.styleSheet) {\\n\\t\\tstyle.styleSheet.cssText = replaceText(index, css);\\n\\t} else {\\n\\t\\tvar cssNode = document.createTextNode(css);\\n\\t\\tvar childNodes = style.childNodes;\\n\\n\\t\\tif (childNodes[index]) style.removeChild(childNodes[index]);\\n\\n\\t\\tif (childNodes.length) {\\n\\t\\t\\tstyle.insertBefore(cssNode, childNodes[index]);\\n\\t\\t} else {\\n\\t\\t\\tstyle.appendChild(cssNode);\\n\\t\\t}\\n\\t}\\n}\\n\\nfunction applyToTag (style, obj) {\\n\\tvar css = obj.css;\\n\\tvar media = obj.media;\\n\\n\\tif(media) {\\n\\t\\tstyle.setAttribute(\\\"media\\\", media)\\n\\t}\\n\\n\\tif(style.styleSheet) {\\n\\t\\tstyle.styleSheet.cssText = css;\\n\\t} else {\\n\\t\\twhile(style.firstChild) {\\n\\t\\t\\tstyle.removeChild(style.firstChild);\\n\\t\\t}\\n\\n\\t\\tstyle.appendChild(document.createTextNode(css));\\n\\t}\\n}\\n\\nfunction updateLink (link, options, obj) {\\n\\tvar css = obj.css;\\n\\tvar sourceMap = obj.sourceMap;\\n\\n\\t/*\\n\\t\\tIf convertToAbsoluteUrls isn't defined, but sourcemaps are enabled\\n\\t\\tand there is no publicPath defined then lets turn convertToAbsoluteUrls\\n\\t\\ton by default. Otherwise default to the convertToAbsoluteUrls option\\n\\t\\tdirectly\\n\\t*/\\n\\tvar autoFixUrls = options.convertToAbsoluteUrls === undefined && sourceMap;\\n\\n\\tif (options.convertToAbsoluteUrls || autoFixUrls) {\\n\\t\\tcss = fixUrls(css);\\n\\t}\\n\\n\\tif (sourceMap) {\\n\\t\\t// http://stackoverflow.com/a/26603875\\n\\t\\tcss += \\\"\\\\n/*# sourceMappingURL=data:application/json;base64,\\\" + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + \\\" */\\\";\\n\\t}\\n\\n\\tvar blob = new Blob([css], { type: \\\"text/css\\\" });\\n\\n\\tvar oldSrc = link.href;\\n\\n\\tlink.href = URL.createObjectURL(blob);\\n\\n\\tif(oldSrc) URL.revokeObjectURL(oldSrc);\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/style-loader/lib/addStyles.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/style-loader/lib/urls.js\":\n/*!***********************************************!*\\\n !*** ./node_modules/style-loader/lib/urls.js ***!\n \\***********************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"\\n/**\\n * When source maps are enabled, `style-loader` uses a link element with a data-uri to\\n * embed the css on the page. This breaks all relative urls because now they are relative to a\\n * bundle instead of the current page.\\n *\\n * One solution is to only use full urls, but that may be impossible.\\n *\\n * Instead, this function \\\"fixes\\\" the relative urls to be absolute according to the current page location.\\n *\\n * A rudimentary test suite is located at `test/fixUrls.js` and can be run via the `npm test` command.\\n *\\n */\\n\\nmodule.exports = function (css) {\\n // get current location\\n var location = typeof window !== \\\"undefined\\\" && window.location;\\n\\n if (!location) {\\n throw new Error(\\\"fixUrls requires window.location\\\");\\n }\\n\\n\\t// blank or null?\\n\\tif (!css || typeof css !== \\\"string\\\") {\\n\\t return css;\\n }\\n\\n var baseUrl = location.protocol + \\\"//\\\" + location.host;\\n var currentDir = baseUrl + location.pathname.replace(/\\\\/[^\\\\/]*$/, \\\"/\\\");\\n\\n\\t// convert each url(...)\\n\\t/*\\n\\tThis regular expression is just a way to recursively match brackets within\\n\\ta string.\\n\\n\\t /url\\\\s*\\\\( = Match on the word \\\"url\\\" with any whitespace after it and then a parens\\n\\t ( = Start a capturing group\\n\\t (?: = Start a non-capturing group\\n\\t [^)(] = Match anything that isn't a parentheses\\n\\t | = OR\\n\\t \\\\( = Match a start parentheses\\n\\t (?: = Start another non-capturing groups\\n\\t [^)(]+ = Match anything that isn't a parentheses\\n\\t | = OR\\n\\t \\\\( = Match a start parentheses\\n\\t [^)(]* = Match anything that isn't a parentheses\\n\\t \\\\) = Match a end parentheses\\n\\t ) = End Group\\n *\\\\) = Match anything and then a close parens\\n ) = Close non-capturing group\\n * = Match anything\\n ) = Close capturing group\\n\\t \\\\) = Match a close parens\\n\\n\\t /gi = Get all matches, not the first. Be case insensitive.\\n\\t */\\n\\tvar fixedCss = css.replace(/url\\\\s*\\\\(((?:[^)(]|\\\\((?:[^)(]+|\\\\([^)(]*\\\\))*\\\\))*)\\\\)/gi, function(fullMatch, origUrl) {\\n\\t\\t// strip quotes (if they exist)\\n\\t\\tvar unquotedOrigUrl = origUrl\\n\\t\\t\\t.trim()\\n\\t\\t\\t.replace(/^\\\"(.*)\\\"$/, function(o, $1){ return $1; })\\n\\t\\t\\t.replace(/^'(.*)'$/, function(o, $1){ return $1; });\\n\\n\\t\\t// already a full url? no change\\n\\t\\tif (/^(#|data:|http:\\\\/\\\\/|https:\\\\/\\\\/|file:\\\\/\\\\/\\\\/|\\\\s*$)/i.test(unquotedOrigUrl)) {\\n\\t\\t return fullMatch;\\n\\t\\t}\\n\\n\\t\\t// convert the url to a full url\\n\\t\\tvar newUrl;\\n\\n\\t\\tif (unquotedOrigUrl.indexOf(\\\"//\\\") === 0) {\\n\\t\\t \\t//TODO: should we add protocol?\\n\\t\\t\\tnewUrl = unquotedOrigUrl;\\n\\t\\t} else if (unquotedOrigUrl.indexOf(\\\"/\\\") === 0) {\\n\\t\\t\\t// path should be relative to the base url\\n\\t\\t\\tnewUrl = baseUrl + unquotedOrigUrl; // already starts with '/'\\n\\t\\t} else {\\n\\t\\t\\t// path should be relative to current directory\\n\\t\\t\\tnewUrl = currentDir + unquotedOrigUrl.replace(/^\\\\.\\\\//, \\\"\\\"); // Strip leading './'\\n\\t\\t}\\n\\n\\t\\t// send back the fixed url(...)\\n\\t\\treturn \\\"url(\\\" + JSON.stringify(newUrl) + \\\")\\\";\\n\\t});\\n\\n\\t// send back the fixed css\\n\\treturn fixedCss;\\n};\\n\\n\\n//# sourceURL=webpack:///./node_modules/style-loader/lib/urls.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/timers-browserify/main.js\":\n/*!************************************************!*\\\n !*** ./node_modules/timers-browserify/main.js ***!\n \\************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"/* WEBPACK VAR INJECTION */(function(global) {var scope = (typeof global !== \\\"undefined\\\" && global) ||\\n (typeof self !== \\\"undefined\\\" && self) ||\\n window;\\nvar apply = Function.prototype.apply;\\n\\n// DOM APIs, for completeness\\n\\nexports.setTimeout = function() {\\n return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);\\n};\\nexports.setInterval = function() {\\n return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);\\n};\\nexports.clearTimeout =\\nexports.clearInterval = function(timeout) {\\n if (timeout) {\\n timeout.close();\\n }\\n};\\n\\nfunction Timeout(id, clearFn) {\\n this._id = id;\\n this._clearFn = clearFn;\\n}\\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\\nTimeout.prototype.close = function() {\\n this._clearFn.call(scope, this._id);\\n};\\n\\n// Does not start the time, just sets up the members needed.\\nexports.enroll = function(item, msecs) {\\n clearTimeout(item._idleTimeoutId);\\n item._idleTimeout = msecs;\\n};\\n\\nexports.unenroll = function(item) {\\n clearTimeout(item._idleTimeoutId);\\n item._idleTimeout = -1;\\n};\\n\\nexports._unrefActive = exports.active = function(item) {\\n clearTimeout(item._idleTimeoutId);\\n\\n var msecs = item._idleTimeout;\\n if (msecs >= 0) {\\n item._idleTimeoutId = setTimeout(function onTimeout() {\\n if (item._onTimeout)\\n item._onTimeout();\\n }, msecs);\\n }\\n};\\n\\n// setimmediate attaches itself to the global object\\n__webpack_require__(/*! setimmediate */ \\\"./node_modules/setimmediate/setImmediate.js\\\");\\n// On some exotic environments, it's not clear which object `setimmediate` was\\n// able to install onto. Search each possibility in the same order as the\\n// `setimmediate` library.\\nexports.setImmediate = (typeof self !== \\\"undefined\\\" && self.setImmediate) ||\\n (typeof global !== \\\"undefined\\\" && global.setImmediate) ||\\n (this && this.setImmediate);\\nexports.clearImmediate = (typeof self !== \\\"undefined\\\" && self.clearImmediate) ||\\n (typeof global !== \\\"undefined\\\" && global.clearImmediate) ||\\n (this && this.clearImmediate);\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ \\\"./node_modules/webpack/buildin/global.js\\\")))\\n\\n//# sourceURL=webpack:///./node_modules/timers-browserify/main.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/tweetnacl-util/nacl-util.js\":\n/*!**************************************************!*\\\n !*** ./node_modules/tweetnacl-util/nacl-util.js ***!\n \\**************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"/* WEBPACK VAR INJECTION */(function(Buffer) {// Written in 2014-2016 by Dmitry Chestnykh and Devi Mandiri.\\n// Public domain.\\n(function(root, f) {\\n 'use strict';\\n if ( true && module.exports) module.exports = f();\\n else if (root.nacl) root.nacl.util = f();\\n else {\\n root.nacl = {};\\n root.nacl.util = f();\\n }\\n}(this, function() {\\n 'use strict';\\n\\n var util = {};\\n\\n function validateBase64(s) {\\n if (!(/^(?:[A-Za-z0-9+\\\\/]{2}[A-Za-z0-9+\\\\/]{2})*(?:[A-Za-z0-9+\\\\/]{2}==|[A-Za-z0-9+\\\\/]{3}=)?$/.test(s))) {\\n throw new TypeError('invalid encoding');\\n }\\n }\\n\\n util.decodeUTF8 = function(s) {\\n if (typeof s !== 'string') throw new TypeError('expected string');\\n var i, d = unescape(encodeURIComponent(s)), b = new Uint8Array(d.length);\\n for (i = 0; i < d.length; i++) b[i] = d.charCodeAt(i);\\n return b;\\n };\\n\\n util.encodeUTF8 = function(arr) {\\n var i, s = [];\\n for (i = 0; i < arr.length; i++) s.push(String.fromCharCode(arr[i]));\\n return decodeURIComponent(escape(s.join('')));\\n };\\n\\n if (typeof atob === 'undefined') {\\n // Node.js\\n\\n if (typeof Buffer.from !== 'undefined') {\\n // Node v6 and later\\n util.encodeBase64 = function (arr) { // v6 and later\\n return Buffer.from(arr).toString('base64');\\n };\\n\\n util.decodeBase64 = function (s) {\\n validateBase64(s);\\n return new Uint8Array(Array.prototype.slice.call(Buffer.from(s, 'base64'), 0));\\n };\\n\\n } else {\\n // Node earlier than v6\\n util.encodeBase64 = function (arr) { // v6 and later\\n return (new Buffer(arr)).toString('base64');\\n };\\n\\n util.decodeBase64 = function(s) {\\n validateBase64(s);\\n return new Uint8Array(Array.prototype.slice.call(new Buffer(s, 'base64'), 0));\\n };\\n }\\n\\n } else {\\n // Browsers\\n\\n util.encodeBase64 = function(arr) {\\n var i, s = [], len = arr.length;\\n for (i = 0; i < len; i++) s.push(String.fromCharCode(arr[i]));\\n return btoa(s.join(''));\\n };\\n\\n util.decodeBase64 = function(s) {\\n validateBase64(s);\\n var i, d = atob(s), b = new Uint8Array(d.length);\\n for (i = 0; i < d.length; i++) b[i] = d.charCodeAt(i);\\n return b;\\n };\\n\\n }\\n\\n return util;\\n\\n}));\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../node-libs-browser/node_modules/buffer/index.js */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\").Buffer))\\n\\n//# sourceURL=webpack:///./node_modules/tweetnacl-util/nacl-util.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/tweetnacl/nacl-fast.js\":\n/*!*********************************************!*\\\n !*** ./node_modules/tweetnacl/nacl-fast.js ***!\n \\*********************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"(function(nacl) {\\n'use strict';\\n\\n// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri.\\n// Public domain.\\n//\\n// Implementation derived from TweetNaCl version 20140427.\\n// See for details: http://tweetnacl.cr.yp.to/\\n\\nvar gf = function(init) {\\n var i, r = new Float64Array(16);\\n if (init) for (i = 0; i < init.length; i++) r[i] = init[i];\\n return r;\\n};\\n\\n// Pluggable, initialized in high-level API below.\\nvar randombytes = function(/* x, n */) { throw new Error('no PRNG'); };\\n\\nvar _0 = new Uint8Array(16);\\nvar _9 = new Uint8Array(32); _9[0] = 9;\\n\\nvar gf0 = gf(),\\n gf1 = gf([1]),\\n _121665 = gf([0xdb41, 1]),\\n D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]),\\n D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]),\\n X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]),\\n Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]),\\n I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]);\\n\\nfunction ts64(x, i, h, l) {\\n x[i] = (h >> 24) & 0xff;\\n x[i+1] = (h >> 16) & 0xff;\\n x[i+2] = (h >> 8) & 0xff;\\n x[i+3] = h & 0xff;\\n x[i+4] = (l >> 24) & 0xff;\\n x[i+5] = (l >> 16) & 0xff;\\n x[i+6] = (l >> 8) & 0xff;\\n x[i+7] = l & 0xff;\\n}\\n\\nfunction vn(x, xi, y, yi, n) {\\n var i,d = 0;\\n for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i];\\n return (1 & ((d - 1) >>> 8)) - 1;\\n}\\n\\nfunction crypto_verify_16(x, xi, y, yi) {\\n return vn(x,xi,y,yi,16);\\n}\\n\\nfunction crypto_verify_32(x, xi, y, yi) {\\n return vn(x,xi,y,yi,32);\\n}\\n\\nfunction core_salsa20(o, p, k, c) {\\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\\n\\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\\n x15 = j15, u;\\n\\n for (var i = 0; i < 20; i += 2) {\\n u = x0 + x12 | 0;\\n x4 ^= u<<7 | u>>>(32-7);\\n u = x4 + x0 | 0;\\n x8 ^= u<<9 | u>>>(32-9);\\n u = x8 + x4 | 0;\\n x12 ^= u<<13 | u>>>(32-13);\\n u = x12 + x8 | 0;\\n x0 ^= u<<18 | u>>>(32-18);\\n\\n u = x5 + x1 | 0;\\n x9 ^= u<<7 | u>>>(32-7);\\n u = x9 + x5 | 0;\\n x13 ^= u<<9 | u>>>(32-9);\\n u = x13 + x9 | 0;\\n x1 ^= u<<13 | u>>>(32-13);\\n u = x1 + x13 | 0;\\n x5 ^= u<<18 | u>>>(32-18);\\n\\n u = x10 + x6 | 0;\\n x14 ^= u<<7 | u>>>(32-7);\\n u = x14 + x10 | 0;\\n x2 ^= u<<9 | u>>>(32-9);\\n u = x2 + x14 | 0;\\n x6 ^= u<<13 | u>>>(32-13);\\n u = x6 + x2 | 0;\\n x10 ^= u<<18 | u>>>(32-18);\\n\\n u = x15 + x11 | 0;\\n x3 ^= u<<7 | u>>>(32-7);\\n u = x3 + x15 | 0;\\n x7 ^= u<<9 | u>>>(32-9);\\n u = x7 + x3 | 0;\\n x11 ^= u<<13 | u>>>(32-13);\\n u = x11 + x7 | 0;\\n x15 ^= u<<18 | u>>>(32-18);\\n\\n u = x0 + x3 | 0;\\n x1 ^= u<<7 | u>>>(32-7);\\n u = x1 + x0 | 0;\\n x2 ^= u<<9 | u>>>(32-9);\\n u = x2 + x1 | 0;\\n x3 ^= u<<13 | u>>>(32-13);\\n u = x3 + x2 | 0;\\n x0 ^= u<<18 | u>>>(32-18);\\n\\n u = x5 + x4 | 0;\\n x6 ^= u<<7 | u>>>(32-7);\\n u = x6 + x5 | 0;\\n x7 ^= u<<9 | u>>>(32-9);\\n u = x7 + x6 | 0;\\n x4 ^= u<<13 | u>>>(32-13);\\n u = x4 + x7 | 0;\\n x5 ^= u<<18 | u>>>(32-18);\\n\\n u = x10 + x9 | 0;\\n x11 ^= u<<7 | u>>>(32-7);\\n u = x11 + x10 | 0;\\n x8 ^= u<<9 | u>>>(32-9);\\n u = x8 + x11 | 0;\\n x9 ^= u<<13 | u>>>(32-13);\\n u = x9 + x8 | 0;\\n x10 ^= u<<18 | u>>>(32-18);\\n\\n u = x15 + x14 | 0;\\n x12 ^= u<<7 | u>>>(32-7);\\n u = x12 + x15 | 0;\\n x13 ^= u<<9 | u>>>(32-9);\\n u = x13 + x12 | 0;\\n x14 ^= u<<13 | u>>>(32-13);\\n u = x14 + x13 | 0;\\n x15 ^= u<<18 | u>>>(32-18);\\n }\\n x0 = x0 + j0 | 0;\\n x1 = x1 + j1 | 0;\\n x2 = x2 + j2 | 0;\\n x3 = x3 + j3 | 0;\\n x4 = x4 + j4 | 0;\\n x5 = x5 + j5 | 0;\\n x6 = x6 + j6 | 0;\\n x7 = x7 + j7 | 0;\\n x8 = x8 + j8 | 0;\\n x9 = x9 + j9 | 0;\\n x10 = x10 + j10 | 0;\\n x11 = x11 + j11 | 0;\\n x12 = x12 + j12 | 0;\\n x13 = x13 + j13 | 0;\\n x14 = x14 + j14 | 0;\\n x15 = x15 + j15 | 0;\\n\\n o[ 0] = x0 >>> 0 & 0xff;\\n o[ 1] = x0 >>> 8 & 0xff;\\n o[ 2] = x0 >>> 16 & 0xff;\\n o[ 3] = x0 >>> 24 & 0xff;\\n\\n o[ 4] = x1 >>> 0 & 0xff;\\n o[ 5] = x1 >>> 8 & 0xff;\\n o[ 6] = x1 >>> 16 & 0xff;\\n o[ 7] = x1 >>> 24 & 0xff;\\n\\n o[ 8] = x2 >>> 0 & 0xff;\\n o[ 9] = x2 >>> 8 & 0xff;\\n o[10] = x2 >>> 16 & 0xff;\\n o[11] = x2 >>> 24 & 0xff;\\n\\n o[12] = x3 >>> 0 & 0xff;\\n o[13] = x3 >>> 8 & 0xff;\\n o[14] = x3 >>> 16 & 0xff;\\n o[15] = x3 >>> 24 & 0xff;\\n\\n o[16] = x4 >>> 0 & 0xff;\\n o[17] = x4 >>> 8 & 0xff;\\n o[18] = x4 >>> 16 & 0xff;\\n o[19] = x4 >>> 24 & 0xff;\\n\\n o[20] = x5 >>> 0 & 0xff;\\n o[21] = x5 >>> 8 & 0xff;\\n o[22] = x5 >>> 16 & 0xff;\\n o[23] = x5 >>> 24 & 0xff;\\n\\n o[24] = x6 >>> 0 & 0xff;\\n o[25] = x6 >>> 8 & 0xff;\\n o[26] = x6 >>> 16 & 0xff;\\n o[27] = x6 >>> 24 & 0xff;\\n\\n o[28] = x7 >>> 0 & 0xff;\\n o[29] = x7 >>> 8 & 0xff;\\n o[30] = x7 >>> 16 & 0xff;\\n o[31] = x7 >>> 24 & 0xff;\\n\\n o[32] = x8 >>> 0 & 0xff;\\n o[33] = x8 >>> 8 & 0xff;\\n o[34] = x8 >>> 16 & 0xff;\\n o[35] = x8 >>> 24 & 0xff;\\n\\n o[36] = x9 >>> 0 & 0xff;\\n o[37] = x9 >>> 8 & 0xff;\\n o[38] = x9 >>> 16 & 0xff;\\n o[39] = x9 >>> 24 & 0xff;\\n\\n o[40] = x10 >>> 0 & 0xff;\\n o[41] = x10 >>> 8 & 0xff;\\n o[42] = x10 >>> 16 & 0xff;\\n o[43] = x10 >>> 24 & 0xff;\\n\\n o[44] = x11 >>> 0 & 0xff;\\n o[45] = x11 >>> 8 & 0xff;\\n o[46] = x11 >>> 16 & 0xff;\\n o[47] = x11 >>> 24 & 0xff;\\n\\n o[48] = x12 >>> 0 & 0xff;\\n o[49] = x12 >>> 8 & 0xff;\\n o[50] = x12 >>> 16 & 0xff;\\n o[51] = x12 >>> 24 & 0xff;\\n\\n o[52] = x13 >>> 0 & 0xff;\\n o[53] = x13 >>> 8 & 0xff;\\n o[54] = x13 >>> 16 & 0xff;\\n o[55] = x13 >>> 24 & 0xff;\\n\\n o[56] = x14 >>> 0 & 0xff;\\n o[57] = x14 >>> 8 & 0xff;\\n o[58] = x14 >>> 16 & 0xff;\\n o[59] = x14 >>> 24 & 0xff;\\n\\n o[60] = x15 >>> 0 & 0xff;\\n o[61] = x15 >>> 8 & 0xff;\\n o[62] = x15 >>> 16 & 0xff;\\n o[63] = x15 >>> 24 & 0xff;\\n}\\n\\nfunction core_hsalsa20(o,p,k,c) {\\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\\n\\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\\n x15 = j15, u;\\n\\n for (var i = 0; i < 20; i += 2) {\\n u = x0 + x12 | 0;\\n x4 ^= u<<7 | u>>>(32-7);\\n u = x4 + x0 | 0;\\n x8 ^= u<<9 | u>>>(32-9);\\n u = x8 + x4 | 0;\\n x12 ^= u<<13 | u>>>(32-13);\\n u = x12 + x8 | 0;\\n x0 ^= u<<18 | u>>>(32-18);\\n\\n u = x5 + x1 | 0;\\n x9 ^= u<<7 | u>>>(32-7);\\n u = x9 + x5 | 0;\\n x13 ^= u<<9 | u>>>(32-9);\\n u = x13 + x9 | 0;\\n x1 ^= u<<13 | u>>>(32-13);\\n u = x1 + x13 | 0;\\n x5 ^= u<<18 | u>>>(32-18);\\n\\n u = x10 + x6 | 0;\\n x14 ^= u<<7 | u>>>(32-7);\\n u = x14 + x10 | 0;\\n x2 ^= u<<9 | u>>>(32-9);\\n u = x2 + x14 | 0;\\n x6 ^= u<<13 | u>>>(32-13);\\n u = x6 + x2 | 0;\\n x10 ^= u<<18 | u>>>(32-18);\\n\\n u = x15 + x11 | 0;\\n x3 ^= u<<7 | u>>>(32-7);\\n u = x3 + x15 | 0;\\n x7 ^= u<<9 | u>>>(32-9);\\n u = x7 + x3 | 0;\\n x11 ^= u<<13 | u>>>(32-13);\\n u = x11 + x7 | 0;\\n x15 ^= u<<18 | u>>>(32-18);\\n\\n u = x0 + x3 | 0;\\n x1 ^= u<<7 | u>>>(32-7);\\n u = x1 + x0 | 0;\\n x2 ^= u<<9 | u>>>(32-9);\\n u = x2 + x1 | 0;\\n x3 ^= u<<13 | u>>>(32-13);\\n u = x3 + x2 | 0;\\n x0 ^= u<<18 | u>>>(32-18);\\n\\n u = x5 + x4 | 0;\\n x6 ^= u<<7 | u>>>(32-7);\\n u = x6 + x5 | 0;\\n x7 ^= u<<9 | u>>>(32-9);\\n u = x7 + x6 | 0;\\n x4 ^= u<<13 | u>>>(32-13);\\n u = x4 + x7 | 0;\\n x5 ^= u<<18 | u>>>(32-18);\\n\\n u = x10 + x9 | 0;\\n x11 ^= u<<7 | u>>>(32-7);\\n u = x11 + x10 | 0;\\n x8 ^= u<<9 | u>>>(32-9);\\n u = x8 + x11 | 0;\\n x9 ^= u<<13 | u>>>(32-13);\\n u = x9 + x8 | 0;\\n x10 ^= u<<18 | u>>>(32-18);\\n\\n u = x15 + x14 | 0;\\n x12 ^= u<<7 | u>>>(32-7);\\n u = x12 + x15 | 0;\\n x13 ^= u<<9 | u>>>(32-9);\\n u = x13 + x12 | 0;\\n x14 ^= u<<13 | u>>>(32-13);\\n u = x14 + x13 | 0;\\n x15 ^= u<<18 | u>>>(32-18);\\n }\\n\\n o[ 0] = x0 >>> 0 & 0xff;\\n o[ 1] = x0 >>> 8 & 0xff;\\n o[ 2] = x0 >>> 16 & 0xff;\\n o[ 3] = x0 >>> 24 & 0xff;\\n\\n o[ 4] = x5 >>> 0 & 0xff;\\n o[ 5] = x5 >>> 8 & 0xff;\\n o[ 6] = x5 >>> 16 & 0xff;\\n o[ 7] = x5 >>> 24 & 0xff;\\n\\n o[ 8] = x10 >>> 0 & 0xff;\\n o[ 9] = x10 >>> 8 & 0xff;\\n o[10] = x10 >>> 16 & 0xff;\\n o[11] = x10 >>> 24 & 0xff;\\n\\n o[12] = x15 >>> 0 & 0xff;\\n o[13] = x15 >>> 8 & 0xff;\\n o[14] = x15 >>> 16 & 0xff;\\n o[15] = x15 >>> 24 & 0xff;\\n\\n o[16] = x6 >>> 0 & 0xff;\\n o[17] = x6 >>> 8 & 0xff;\\n o[18] = x6 >>> 16 & 0xff;\\n o[19] = x6 >>> 24 & 0xff;\\n\\n o[20] = x7 >>> 0 & 0xff;\\n o[21] = x7 >>> 8 & 0xff;\\n o[22] = x7 >>> 16 & 0xff;\\n o[23] = x7 >>> 24 & 0xff;\\n\\n o[24] = x8 >>> 0 & 0xff;\\n o[25] = x8 >>> 8 & 0xff;\\n o[26] = x8 >>> 16 & 0xff;\\n o[27] = x8 >>> 24 & 0xff;\\n\\n o[28] = x9 >>> 0 & 0xff;\\n o[29] = x9 >>> 8 & 0xff;\\n o[30] = x9 >>> 16 & 0xff;\\n o[31] = x9 >>> 24 & 0xff;\\n}\\n\\nfunction crypto_core_salsa20(out,inp,k,c) {\\n core_salsa20(out,inp,k,c);\\n}\\n\\nfunction crypto_core_hsalsa20(out,inp,k,c) {\\n core_hsalsa20(out,inp,k,c);\\n}\\n\\nvar sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]);\\n // \\\"expand 32-byte k\\\"\\n\\nfunction crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) {\\n var z = new Uint8Array(16), x = new Uint8Array(64);\\n var u, i;\\n for (i = 0; i < 16; i++) z[i] = 0;\\n for (i = 0; i < 8; i++) z[i] = n[i];\\n while (b >= 64) {\\n crypto_core_salsa20(x,z,k,sigma);\\n for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i];\\n u = 1;\\n for (i = 8; i < 16; i++) {\\n u = u + (z[i] & 0xff) | 0;\\n z[i] = u & 0xff;\\n u >>>= 8;\\n }\\n b -= 64;\\n cpos += 64;\\n mpos += 64;\\n }\\n if (b > 0) {\\n crypto_core_salsa20(x,z,k,sigma);\\n for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i];\\n }\\n return 0;\\n}\\n\\nfunction crypto_stream_salsa20(c,cpos,b,n,k) {\\n var z = new Uint8Array(16), x = new Uint8Array(64);\\n var u, i;\\n for (i = 0; i < 16; i++) z[i] = 0;\\n for (i = 0; i < 8; i++) z[i] = n[i];\\n while (b >= 64) {\\n crypto_core_salsa20(x,z,k,sigma);\\n for (i = 0; i < 64; i++) c[cpos+i] = x[i];\\n u = 1;\\n for (i = 8; i < 16; i++) {\\n u = u + (z[i] & 0xff) | 0;\\n z[i] = u & 0xff;\\n u >>>= 8;\\n }\\n b -= 64;\\n cpos += 64;\\n }\\n if (b > 0) {\\n crypto_core_salsa20(x,z,k,sigma);\\n for (i = 0; i < b; i++) c[cpos+i] = x[i];\\n }\\n return 0;\\n}\\n\\nfunction crypto_stream(c,cpos,d,n,k) {\\n var s = new Uint8Array(32);\\n crypto_core_hsalsa20(s,n,k,sigma);\\n var sn = new Uint8Array(8);\\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\\n return crypto_stream_salsa20(c,cpos,d,sn,s);\\n}\\n\\nfunction crypto_stream_xor(c,cpos,m,mpos,d,n,k) {\\n var s = new Uint8Array(32);\\n crypto_core_hsalsa20(s,n,k,sigma);\\n var sn = new Uint8Array(8);\\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\\n return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s);\\n}\\n\\n/*\\n* Port of Andrew Moon's Poly1305-donna-16. Public domain.\\n* https://github.com/floodyberry/poly1305-donna\\n*/\\n\\nvar poly1305 = function(key) {\\n this.buffer = new Uint8Array(16);\\n this.r = new Uint16Array(10);\\n this.h = new Uint16Array(10);\\n this.pad = new Uint16Array(8);\\n this.leftover = 0;\\n this.fin = 0;\\n\\n var t0, t1, t2, t3, t4, t5, t6, t7;\\n\\n t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0 ) & 0x1fff;\\n t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\\n t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03;\\n t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\\n t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff;\\n this.r[5] = ((t4 >>> 1)) & 0x1ffe;\\n t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\\n t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81;\\n t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\\n this.r[9] = ((t7 >>> 5)) & 0x007f;\\n\\n this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8;\\n this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8;\\n this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8;\\n this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8;\\n this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8;\\n this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8;\\n this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8;\\n this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8;\\n};\\n\\npoly1305.prototype.blocks = function(m, mpos, bytes) {\\n var hibit = this.fin ? 0 : (1 << 11);\\n var t0, t1, t2, t3, t4, t5, t6, t7, c;\\n var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9;\\n\\n var h0 = this.h[0],\\n h1 = this.h[1],\\n h2 = this.h[2],\\n h3 = this.h[3],\\n h4 = this.h[4],\\n h5 = this.h[5],\\n h6 = this.h[6],\\n h7 = this.h[7],\\n h8 = this.h[8],\\n h9 = this.h[9];\\n\\n var r0 = this.r[0],\\n r1 = this.r[1],\\n r2 = this.r[2],\\n r3 = this.r[3],\\n r4 = this.r[4],\\n r5 = this.r[5],\\n r6 = this.r[6],\\n r7 = this.r[7],\\n r8 = this.r[8],\\n r9 = this.r[9];\\n\\n while (bytes >= 16) {\\n t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0 ) & 0x1fff;\\n t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\\n t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 << 6)) & 0x1fff;\\n t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\\n t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>> 4) | (t4 << 12)) & 0x1fff;\\n h5 += ((t4 >>> 1)) & 0x1fff;\\n t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\\n t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 << 5)) & 0x1fff;\\n t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\\n h9 += ((t7 >>> 5)) | hibit;\\n\\n c = 0;\\n\\n d0 = c;\\n d0 += h0 * r0;\\n d0 += h1 * (5 * r9);\\n d0 += h2 * (5 * r8);\\n d0 += h3 * (5 * r7);\\n d0 += h4 * (5 * r6);\\n c = (d0 >>> 13); d0 &= 0x1fff;\\n d0 += h5 * (5 * r5);\\n d0 += h6 * (5 * r4);\\n d0 += h7 * (5 * r3);\\n d0 += h8 * (5 * r2);\\n d0 += h9 * (5 * r1);\\n c += (d0 >>> 13); d0 &= 0x1fff;\\n\\n d1 = c;\\n d1 += h0 * r1;\\n d1 += h1 * r0;\\n d1 += h2 * (5 * r9);\\n d1 += h3 * (5 * r8);\\n d1 += h4 * (5 * r7);\\n c = (d1 >>> 13); d1 &= 0x1fff;\\n d1 += h5 * (5 * r6);\\n d1 += h6 * (5 * r5);\\n d1 += h7 * (5 * r4);\\n d1 += h8 * (5 * r3);\\n d1 += h9 * (5 * r2);\\n c += (d1 >>> 13); d1 &= 0x1fff;\\n\\n d2 = c;\\n d2 += h0 * r2;\\n d2 += h1 * r1;\\n d2 += h2 * r0;\\n d2 += h3 * (5 * r9);\\n d2 += h4 * (5 * r8);\\n c = (d2 >>> 13); d2 &= 0x1fff;\\n d2 += h5 * (5 * r7);\\n d2 += h6 * (5 * r6);\\n d2 += h7 * (5 * r5);\\n d2 += h8 * (5 * r4);\\n d2 += h9 * (5 * r3);\\n c += (d2 >>> 13); d2 &= 0x1fff;\\n\\n d3 = c;\\n d3 += h0 * r3;\\n d3 += h1 * r2;\\n d3 += h2 * r1;\\n d3 += h3 * r0;\\n d3 += h4 * (5 * r9);\\n c = (d3 >>> 13); d3 &= 0x1fff;\\n d3 += h5 * (5 * r8);\\n d3 += h6 * (5 * r7);\\n d3 += h7 * (5 * r6);\\n d3 += h8 * (5 * r5);\\n d3 += h9 * (5 * r4);\\n c += (d3 >>> 13); d3 &= 0x1fff;\\n\\n d4 = c;\\n d4 += h0 * r4;\\n d4 += h1 * r3;\\n d4 += h2 * r2;\\n d4 += h3 * r1;\\n d4 += h4 * r0;\\n c = (d4 >>> 13); d4 &= 0x1fff;\\n d4 += h5 * (5 * r9);\\n d4 += h6 * (5 * r8);\\n d4 += h7 * (5 * r7);\\n d4 += h8 * (5 * r6);\\n d4 += h9 * (5 * r5);\\n c += (d4 >>> 13); d4 &= 0x1fff;\\n\\n d5 = c;\\n d5 += h0 * r5;\\n d5 += h1 * r4;\\n d5 += h2 * r3;\\n d5 += h3 * r2;\\n d5 += h4 * r1;\\n c = (d5 >>> 13); d5 &= 0x1fff;\\n d5 += h5 * r0;\\n d5 += h6 * (5 * r9);\\n d5 += h7 * (5 * r8);\\n d5 += h8 * (5 * r7);\\n d5 += h9 * (5 * r6);\\n c += (d5 >>> 13); d5 &= 0x1fff;\\n\\n d6 = c;\\n d6 += h0 * r6;\\n d6 += h1 * r5;\\n d6 += h2 * r4;\\n d6 += h3 * r3;\\n d6 += h4 * r2;\\n c = (d6 >>> 13); d6 &= 0x1fff;\\n d6 += h5 * r1;\\n d6 += h6 * r0;\\n d6 += h7 * (5 * r9);\\n d6 += h8 * (5 * r8);\\n d6 += h9 * (5 * r7);\\n c += (d6 >>> 13); d6 &= 0x1fff;\\n\\n d7 = c;\\n d7 += h0 * r7;\\n d7 += h1 * r6;\\n d7 += h2 * r5;\\n d7 += h3 * r4;\\n d7 += h4 * r3;\\n c = (d7 >>> 13); d7 &= 0x1fff;\\n d7 += h5 * r2;\\n d7 += h6 * r1;\\n d7 += h7 * r0;\\n d7 += h8 * (5 * r9);\\n d7 += h9 * (5 * r8);\\n c += (d7 >>> 13); d7 &= 0x1fff;\\n\\n d8 = c;\\n d8 += h0 * r8;\\n d8 += h1 * r7;\\n d8 += h2 * r6;\\n d8 += h3 * r5;\\n d8 += h4 * r4;\\n c = (d8 >>> 13); d8 &= 0x1fff;\\n d8 += h5 * r3;\\n d8 += h6 * r2;\\n d8 += h7 * r1;\\n d8 += h8 * r0;\\n d8 += h9 * (5 * r9);\\n c += (d8 >>> 13); d8 &= 0x1fff;\\n\\n d9 = c;\\n d9 += h0 * r9;\\n d9 += h1 * r8;\\n d9 += h2 * r7;\\n d9 += h3 * r6;\\n d9 += h4 * r5;\\n c = (d9 >>> 13); d9 &= 0x1fff;\\n d9 += h5 * r4;\\n d9 += h6 * r3;\\n d9 += h7 * r2;\\n d9 += h8 * r1;\\n d9 += h9 * r0;\\n c += (d9 >>> 13); d9 &= 0x1fff;\\n\\n c = (((c << 2) + c)) | 0;\\n c = (c + d0) | 0;\\n d0 = c & 0x1fff;\\n c = (c >>> 13);\\n d1 += c;\\n\\n h0 = d0;\\n h1 = d1;\\n h2 = d2;\\n h3 = d3;\\n h4 = d4;\\n h5 = d5;\\n h6 = d6;\\n h7 = d7;\\n h8 = d8;\\n h9 = d9;\\n\\n mpos += 16;\\n bytes -= 16;\\n }\\n this.h[0] = h0;\\n this.h[1] = h1;\\n this.h[2] = h2;\\n this.h[3] = h3;\\n this.h[4] = h4;\\n this.h[5] = h5;\\n this.h[6] = h6;\\n this.h[7] = h7;\\n this.h[8] = h8;\\n this.h[9] = h9;\\n};\\n\\npoly1305.prototype.finish = function(mac, macpos) {\\n var g = new Uint16Array(10);\\n var c, mask, f, i;\\n\\n if (this.leftover) {\\n i = this.leftover;\\n this.buffer[i++] = 1;\\n for (; i < 16; i++) this.buffer[i] = 0;\\n this.fin = 1;\\n this.blocks(this.buffer, 0, 16);\\n }\\n\\n c = this.h[1] >>> 13;\\n this.h[1] &= 0x1fff;\\n for (i = 2; i < 10; i++) {\\n this.h[i] += c;\\n c = this.h[i] >>> 13;\\n this.h[i] &= 0x1fff;\\n }\\n this.h[0] += (c * 5);\\n c = this.h[0] >>> 13;\\n this.h[0] &= 0x1fff;\\n this.h[1] += c;\\n c = this.h[1] >>> 13;\\n this.h[1] &= 0x1fff;\\n this.h[2] += c;\\n\\n g[0] = this.h[0] + 5;\\n c = g[0] >>> 13;\\n g[0] &= 0x1fff;\\n for (i = 1; i < 10; i++) {\\n g[i] = this.h[i] + c;\\n c = g[i] >>> 13;\\n g[i] &= 0x1fff;\\n }\\n g[9] -= (1 << 13);\\n\\n mask = (c ^ 1) - 1;\\n for (i = 0; i < 10; i++) g[i] &= mask;\\n mask = ~mask;\\n for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i];\\n\\n this.h[0] = ((this.h[0] ) | (this.h[1] << 13) ) & 0xffff;\\n this.h[1] = ((this.h[1] >>> 3) | (this.h[2] << 10) ) & 0xffff;\\n this.h[2] = ((this.h[2] >>> 6) | (this.h[3] << 7) ) & 0xffff;\\n this.h[3] = ((this.h[3] >>> 9) | (this.h[4] << 4) ) & 0xffff;\\n this.h[4] = ((this.h[4] >>> 12) | (this.h[5] << 1) | (this.h[6] << 14)) & 0xffff;\\n this.h[5] = ((this.h[6] >>> 2) | (this.h[7] << 11) ) & 0xffff;\\n this.h[6] = ((this.h[7] >>> 5) | (this.h[8] << 8) ) & 0xffff;\\n this.h[7] = ((this.h[8] >>> 8) | (this.h[9] << 5) ) & 0xffff;\\n\\n f = this.h[0] + this.pad[0];\\n this.h[0] = f & 0xffff;\\n for (i = 1; i < 8; i++) {\\n f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0;\\n this.h[i] = f & 0xffff;\\n }\\n\\n mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff;\\n mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff;\\n mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff;\\n mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff;\\n mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff;\\n mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff;\\n mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff;\\n mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff;\\n mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff;\\n mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff;\\n mac[macpos+10] = (this.h[5] >>> 0) & 0xff;\\n mac[macpos+11] = (this.h[5] >>> 8) & 0xff;\\n mac[macpos+12] = (this.h[6] >>> 0) & 0xff;\\n mac[macpos+13] = (this.h[6] >>> 8) & 0xff;\\n mac[macpos+14] = (this.h[7] >>> 0) & 0xff;\\n mac[macpos+15] = (this.h[7] >>> 8) & 0xff;\\n};\\n\\npoly1305.prototype.update = function(m, mpos, bytes) {\\n var i, want;\\n\\n if (this.leftover) {\\n want = (16 - this.leftover);\\n if (want > bytes)\\n want = bytes;\\n for (i = 0; i < want; i++)\\n this.buffer[this.leftover + i] = m[mpos+i];\\n bytes -= want;\\n mpos += want;\\n this.leftover += want;\\n if (this.leftover < 16)\\n return;\\n this.blocks(this.buffer, 0, 16);\\n this.leftover = 0;\\n }\\n\\n if (bytes >= 16) {\\n want = bytes - (bytes % 16);\\n this.blocks(m, mpos, want);\\n mpos += want;\\n bytes -= want;\\n }\\n\\n if (bytes) {\\n for (i = 0; i < bytes; i++)\\n this.buffer[this.leftover + i] = m[mpos+i];\\n this.leftover += bytes;\\n }\\n};\\n\\nfunction crypto_onetimeauth(out, outpos, m, mpos, n, k) {\\n var s = new poly1305(k);\\n s.update(m, mpos, n);\\n s.finish(out, outpos);\\n return 0;\\n}\\n\\nfunction crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) {\\n var x = new Uint8Array(16);\\n crypto_onetimeauth(x,0,m,mpos,n,k);\\n return crypto_verify_16(h,hpos,x,0);\\n}\\n\\nfunction crypto_secretbox(c,m,d,n,k) {\\n var i;\\n if (d < 32) return -1;\\n crypto_stream_xor(c,0,m,0,d,n,k);\\n crypto_onetimeauth(c, 16, c, 32, d - 32, c);\\n for (i = 0; i < 16; i++) c[i] = 0;\\n return 0;\\n}\\n\\nfunction crypto_secretbox_open(m,c,d,n,k) {\\n var i;\\n var x = new Uint8Array(32);\\n if (d < 32) return -1;\\n crypto_stream(x,0,32,n,k);\\n if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1;\\n crypto_stream_xor(m,0,c,0,d,n,k);\\n for (i = 0; i < 32; i++) m[i] = 0;\\n return 0;\\n}\\n\\nfunction set25519(r, a) {\\n var i;\\n for (i = 0; i < 16; i++) r[i] = a[i]|0;\\n}\\n\\nfunction car25519(o) {\\n var i, v, c = 1;\\n for (i = 0; i < 16; i++) {\\n v = o[i] + c + 65535;\\n c = Math.floor(v / 65536);\\n o[i] = v - c * 65536;\\n }\\n o[0] += c-1 + 37 * (c-1);\\n}\\n\\nfunction sel25519(p, q, b) {\\n var t, c = ~(b-1);\\n for (var i = 0; i < 16; i++) {\\n t = c & (p[i] ^ q[i]);\\n p[i] ^= t;\\n q[i] ^= t;\\n }\\n}\\n\\nfunction pack25519(o, n) {\\n var i, j, b;\\n var m = gf(), t = gf();\\n for (i = 0; i < 16; i++) t[i] = n[i];\\n car25519(t);\\n car25519(t);\\n car25519(t);\\n for (j = 0; j < 2; j++) {\\n m[0] = t[0] - 0xffed;\\n for (i = 1; i < 15; i++) {\\n m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1);\\n m[i-1] &= 0xffff;\\n }\\n m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1);\\n b = (m[15]>>16) & 1;\\n m[14] &= 0xffff;\\n sel25519(t, m, 1-b);\\n }\\n for (i = 0; i < 16; i++) {\\n o[2*i] = t[i] & 0xff;\\n o[2*i+1] = t[i]>>8;\\n }\\n}\\n\\nfunction neq25519(a, b) {\\n var c = new Uint8Array(32), d = new Uint8Array(32);\\n pack25519(c, a);\\n pack25519(d, b);\\n return crypto_verify_32(c, 0, d, 0);\\n}\\n\\nfunction par25519(a) {\\n var d = new Uint8Array(32);\\n pack25519(d, a);\\n return d[0] & 1;\\n}\\n\\nfunction unpack25519(o, n) {\\n var i;\\n for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8);\\n o[15] &= 0x7fff;\\n}\\n\\nfunction A(o, a, b) {\\n for (var i = 0; i < 16; i++) o[i] = a[i] + b[i];\\n}\\n\\nfunction Z(o, a, b) {\\n for (var i = 0; i < 16; i++) o[i] = a[i] - b[i];\\n}\\n\\nfunction M(o, a, b) {\\n var v, c,\\n t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0,\\n t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0,\\n t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0,\\n t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0,\\n b0 = b[0],\\n b1 = b[1],\\n b2 = b[2],\\n b3 = b[3],\\n b4 = b[4],\\n b5 = b[5],\\n b6 = b[6],\\n b7 = b[7],\\n b8 = b[8],\\n b9 = b[9],\\n b10 = b[10],\\n b11 = b[11],\\n b12 = b[12],\\n b13 = b[13],\\n b14 = b[14],\\n b15 = b[15];\\n\\n v = a[0];\\n t0 += v * b0;\\n t1 += v * b1;\\n t2 += v * b2;\\n t3 += v * b3;\\n t4 += v * b4;\\n t5 += v * b5;\\n t6 += v * b6;\\n t7 += v * b7;\\n t8 += v * b8;\\n t9 += v * b9;\\n t10 += v * b10;\\n t11 += v * b11;\\n t12 += v * b12;\\n t13 += v * b13;\\n t14 += v * b14;\\n t15 += v * b15;\\n v = a[1];\\n t1 += v * b0;\\n t2 += v * b1;\\n t3 += v * b2;\\n t4 += v * b3;\\n t5 += v * b4;\\n t6 += v * b5;\\n t7 += v * b6;\\n t8 += v * b7;\\n t9 += v * b8;\\n t10 += v * b9;\\n t11 += v * b10;\\n t12 += v * b11;\\n t13 += v * b12;\\n t14 += v * b13;\\n t15 += v * b14;\\n t16 += v * b15;\\n v = a[2];\\n t2 += v * b0;\\n t3 += v * b1;\\n t4 += v * b2;\\n t5 += v * b3;\\n t6 += v * b4;\\n t7 += v * b5;\\n t8 += v * b6;\\n t9 += v * b7;\\n t10 += v * b8;\\n t11 += v * b9;\\n t12 += v * b10;\\n t13 += v * b11;\\n t14 += v * b12;\\n t15 += v * b13;\\n t16 += v * b14;\\n t17 += v * b15;\\n v = a[3];\\n t3 += v * b0;\\n t4 += v * b1;\\n t5 += v * b2;\\n t6 += v * b3;\\n t7 += v * b4;\\n t8 += v * b5;\\n t9 += v * b6;\\n t10 += v * b7;\\n t11 += v * b8;\\n t12 += v * b9;\\n t13 += v * b10;\\n t14 += v * b11;\\n t15 += v * b12;\\n t16 += v * b13;\\n t17 += v * b14;\\n t18 += v * b15;\\n v = a[4];\\n t4 += v * b0;\\n t5 += v * b1;\\n t6 += v * b2;\\n t7 += v * b3;\\n t8 += v * b4;\\n t9 += v * b5;\\n t10 += v * b6;\\n t11 += v * b7;\\n t12 += v * b8;\\n t13 += v * b9;\\n t14 += v * b10;\\n t15 += v * b11;\\n t16 += v * b12;\\n t17 += v * b13;\\n t18 += v * b14;\\n t19 += v * b15;\\n v = a[5];\\n t5 += v * b0;\\n t6 += v * b1;\\n t7 += v * b2;\\n t8 += v * b3;\\n t9 += v * b4;\\n t10 += v * b5;\\n t11 += v * b6;\\n t12 += v * b7;\\n t13 += v * b8;\\n t14 += v * b9;\\n t15 += v * b10;\\n t16 += v * b11;\\n t17 += v * b12;\\n t18 += v * b13;\\n t19 += v * b14;\\n t20 += v * b15;\\n v = a[6];\\n t6 += v * b0;\\n t7 += v * b1;\\n t8 += v * b2;\\n t9 += v * b3;\\n t10 += v * b4;\\n t11 += v * b5;\\n t12 += v * b6;\\n t13 += v * b7;\\n t14 += v * b8;\\n t15 += v * b9;\\n t16 += v * b10;\\n t17 += v * b11;\\n t18 += v * b12;\\n t19 += v * b13;\\n t20 += v * b14;\\n t21 += v * b15;\\n v = a[7];\\n t7 += v * b0;\\n t8 += v * b1;\\n t9 += v * b2;\\n t10 += v * b3;\\n t11 += v * b4;\\n t12 += v * b5;\\n t13 += v * b6;\\n t14 += v * b7;\\n t15 += v * b8;\\n t16 += v * b9;\\n t17 += v * b10;\\n t18 += v * b11;\\n t19 += v * b12;\\n t20 += v * b13;\\n t21 += v * b14;\\n t22 += v * b15;\\n v = a[8];\\n t8 += v * b0;\\n t9 += v * b1;\\n t10 += v * b2;\\n t11 += v * b3;\\n t12 += v * b4;\\n t13 += v * b5;\\n t14 += v * b6;\\n t15 += v * b7;\\n t16 += v * b8;\\n t17 += v * b9;\\n t18 += v * b10;\\n t19 += v * b11;\\n t20 += v * b12;\\n t21 += v * b13;\\n t22 += v * b14;\\n t23 += v * b15;\\n v = a[9];\\n t9 += v * b0;\\n t10 += v * b1;\\n t11 += v * b2;\\n t12 += v * b3;\\n t13 += v * b4;\\n t14 += v * b5;\\n t15 += v * b6;\\n t16 += v * b7;\\n t17 += v * b8;\\n t18 += v * b9;\\n t19 += v * b10;\\n t20 += v * b11;\\n t21 += v * b12;\\n t22 += v * b13;\\n t23 += v * b14;\\n t24 += v * b15;\\n v = a[10];\\n t10 += v * b0;\\n t11 += v * b1;\\n t12 += v * b2;\\n t13 += v * b3;\\n t14 += v * b4;\\n t15 += v * b5;\\n t16 += v * b6;\\n t17 += v * b7;\\n t18 += v * b8;\\n t19 += v * b9;\\n t20 += v * b10;\\n t21 += v * b11;\\n t22 += v * b12;\\n t23 += v * b13;\\n t24 += v * b14;\\n t25 += v * b15;\\n v = a[11];\\n t11 += v * b0;\\n t12 += v * b1;\\n t13 += v * b2;\\n t14 += v * b3;\\n t15 += v * b4;\\n t16 += v * b5;\\n t17 += v * b6;\\n t18 += v * b7;\\n t19 += v * b8;\\n t20 += v * b9;\\n t21 += v * b10;\\n t22 += v * b11;\\n t23 += v * b12;\\n t24 += v * b13;\\n t25 += v * b14;\\n t26 += v * b15;\\n v = a[12];\\n t12 += v * b0;\\n t13 += v * b1;\\n t14 += v * b2;\\n t15 += v * b3;\\n t16 += v * b4;\\n t17 += v * b5;\\n t18 += v * b6;\\n t19 += v * b7;\\n t20 += v * b8;\\n t21 += v * b9;\\n t22 += v * b10;\\n t23 += v * b11;\\n t24 += v * b12;\\n t25 += v * b13;\\n t26 += v * b14;\\n t27 += v * b15;\\n v = a[13];\\n t13 += v * b0;\\n t14 += v * b1;\\n t15 += v * b2;\\n t16 += v * b3;\\n t17 += v * b4;\\n t18 += v * b5;\\n t19 += v * b6;\\n t20 += v * b7;\\n t21 += v * b8;\\n t22 += v * b9;\\n t23 += v * b10;\\n t24 += v * b11;\\n t25 += v * b12;\\n t26 += v * b13;\\n t27 += v * b14;\\n t28 += v * b15;\\n v = a[14];\\n t14 += v * b0;\\n t15 += v * b1;\\n t16 += v * b2;\\n t17 += v * b3;\\n t18 += v * b4;\\n t19 += v * b5;\\n t20 += v * b6;\\n t21 += v * b7;\\n t22 += v * b8;\\n t23 += v * b9;\\n t24 += v * b10;\\n t25 += v * b11;\\n t26 += v * b12;\\n t27 += v * b13;\\n t28 += v * b14;\\n t29 += v * b15;\\n v = a[15];\\n t15 += v * b0;\\n t16 += v * b1;\\n t17 += v * b2;\\n t18 += v * b3;\\n t19 += v * b4;\\n t20 += v * b5;\\n t21 += v * b6;\\n t22 += v * b7;\\n t23 += v * b8;\\n t24 += v * b9;\\n t25 += v * b10;\\n t26 += v * b11;\\n t27 += v * b12;\\n t28 += v * b13;\\n t29 += v * b14;\\n t30 += v * b15;\\n\\n t0 += 38 * t16;\\n t1 += 38 * t17;\\n t2 += 38 * t18;\\n t3 += 38 * t19;\\n t4 += 38 * t20;\\n t5 += 38 * t21;\\n t6 += 38 * t22;\\n t7 += 38 * t23;\\n t8 += 38 * t24;\\n t9 += 38 * t25;\\n t10 += 38 * t26;\\n t11 += 38 * t27;\\n t12 += 38 * t28;\\n t13 += 38 * t29;\\n t14 += 38 * t30;\\n // t15 left as is\\n\\n // first car\\n c = 1;\\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\\n t0 += c-1 + 37 * (c-1);\\n\\n // second car\\n c = 1;\\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\\n t0 += c-1 + 37 * (c-1);\\n\\n o[ 0] = t0;\\n o[ 1] = t1;\\n o[ 2] = t2;\\n o[ 3] = t3;\\n o[ 4] = t4;\\n o[ 5] = t5;\\n o[ 6] = t6;\\n o[ 7] = t7;\\n o[ 8] = t8;\\n o[ 9] = t9;\\n o[10] = t10;\\n o[11] = t11;\\n o[12] = t12;\\n o[13] = t13;\\n o[14] = t14;\\n o[15] = t15;\\n}\\n\\nfunction S(o, a) {\\n M(o, a, a);\\n}\\n\\nfunction inv25519(o, i) {\\n var c = gf();\\n var a;\\n for (a = 0; a < 16; a++) c[a] = i[a];\\n for (a = 253; a >= 0; a--) {\\n S(c, c);\\n if(a !== 2 && a !== 4) M(c, c, i);\\n }\\n for (a = 0; a < 16; a++) o[a] = c[a];\\n}\\n\\nfunction pow2523(o, i) {\\n var c = gf();\\n var a;\\n for (a = 0; a < 16; a++) c[a] = i[a];\\n for (a = 250; a >= 0; a--) {\\n S(c, c);\\n if(a !== 1) M(c, c, i);\\n }\\n for (a = 0; a < 16; a++) o[a] = c[a];\\n}\\n\\nfunction crypto_scalarmult(q, n, p) {\\n var z = new Uint8Array(32);\\n var x = new Float64Array(80), r, i;\\n var a = gf(), b = gf(), c = gf(),\\n d = gf(), e = gf(), f = gf();\\n for (i = 0; i < 31; i++) z[i] = n[i];\\n z[31]=(n[31]&127)|64;\\n z[0]&=248;\\n unpack25519(x,p);\\n for (i = 0; i < 16; i++) {\\n b[i]=x[i];\\n d[i]=a[i]=c[i]=0;\\n }\\n a[0]=d[0]=1;\\n for (i=254; i>=0; --i) {\\n r=(z[i>>>3]>>>(i&7))&1;\\n sel25519(a,b,r);\\n sel25519(c,d,r);\\n A(e,a,c);\\n Z(a,a,c);\\n A(c,b,d);\\n Z(b,b,d);\\n S(d,e);\\n S(f,a);\\n M(a,c,a);\\n M(c,b,e);\\n A(e,a,c);\\n Z(a,a,c);\\n S(b,a);\\n Z(c,d,f);\\n M(a,c,_121665);\\n A(a,a,d);\\n M(c,c,a);\\n M(a,d,f);\\n M(d,b,x);\\n S(b,e);\\n sel25519(a,b,r);\\n sel25519(c,d,r);\\n }\\n for (i = 0; i < 16; i++) {\\n x[i+16]=a[i];\\n x[i+32]=c[i];\\n x[i+48]=b[i];\\n x[i+64]=d[i];\\n }\\n var x32 = x.subarray(32);\\n var x16 = x.subarray(16);\\n inv25519(x32,x32);\\n M(x16,x16,x32);\\n pack25519(q,x16);\\n return 0;\\n}\\n\\nfunction crypto_scalarmult_base(q, n) {\\n return crypto_scalarmult(q, n, _9);\\n}\\n\\nfunction crypto_box_keypair(y, x) {\\n randombytes(x, 32);\\n return crypto_scalarmult_base(y, x);\\n}\\n\\nfunction crypto_box_beforenm(k, y, x) {\\n var s = new Uint8Array(32);\\n crypto_scalarmult(s, x, y);\\n return crypto_core_hsalsa20(k, _0, s, sigma);\\n}\\n\\nvar crypto_box_afternm = crypto_secretbox;\\nvar crypto_box_open_afternm = crypto_secretbox_open;\\n\\nfunction crypto_box(c, m, d, n, y, x) {\\n var k = new Uint8Array(32);\\n crypto_box_beforenm(k, y, x);\\n return crypto_box_afternm(c, m, d, n, k);\\n}\\n\\nfunction crypto_box_open(m, c, d, n, y, x) {\\n var k = new Uint8Array(32);\\n crypto_box_beforenm(k, y, x);\\n return crypto_box_open_afternm(m, c, d, n, k);\\n}\\n\\nvar K = [\\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\\n];\\n\\nfunction crypto_hashblocks_hl(hh, hl, m, n) {\\n var wh = new Int32Array(16), wl = new Int32Array(16),\\n bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7,\\n bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7,\\n th, tl, i, j, h, l, a, b, c, d;\\n\\n var ah0 = hh[0],\\n ah1 = hh[1],\\n ah2 = hh[2],\\n ah3 = hh[3],\\n ah4 = hh[4],\\n ah5 = hh[5],\\n ah6 = hh[6],\\n ah7 = hh[7],\\n\\n al0 = hl[0],\\n al1 = hl[1],\\n al2 = hl[2],\\n al3 = hl[3],\\n al4 = hl[4],\\n al5 = hl[5],\\n al6 = hl[6],\\n al7 = hl[7];\\n\\n var pos = 0;\\n while (n >= 128) {\\n for (i = 0; i < 16; i++) {\\n j = 8 * i + pos;\\n wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3];\\n wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7];\\n }\\n for (i = 0; i < 80; i++) {\\n bh0 = ah0;\\n bh1 = ah1;\\n bh2 = ah2;\\n bh3 = ah3;\\n bh4 = ah4;\\n bh5 = ah5;\\n bh6 = ah6;\\n bh7 = ah7;\\n\\n bl0 = al0;\\n bl1 = al1;\\n bl2 = al2;\\n bl3 = al3;\\n bl4 = al4;\\n bl5 = al5;\\n bl6 = al6;\\n bl7 = al7;\\n\\n // add\\n h = ah7;\\n l = al7;\\n\\n a = l & 0xffff; b = l >>> 16;\\n c = h & 0xffff; d = h >>> 16;\\n\\n // Sigma1\\n h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32))));\\n l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32))));\\n\\n a += l & 0xffff; b += l >>> 16;\\n c += h & 0xffff; d += h >>> 16;\\n\\n // Ch\\n h = (ah4 & ah5) ^ (~ah4 & ah6);\\n l = (al4 & al5) ^ (~al4 & al6);\\n\\n a += l & 0xffff; b += l >>> 16;\\n c += h & 0xffff; d += h >>> 16;\\n\\n // K\\n h = K[i*2];\\n l = K[i*2+1];\\n\\n a += l & 0xffff; b += l >>> 16;\\n c += h & 0xffff; d += h >>> 16;\\n\\n // w\\n h = wh[i%16];\\n l = wl[i%16];\\n\\n a += l & 0xffff; b += l >>> 16;\\n c += h & 0xffff; d += h >>> 16;\\n\\n b += a >>> 16;\\n c += b >>> 16;\\n d += c >>> 16;\\n\\n th = c & 0xffff | d << 16;\\n tl = a & 0xffff | b << 16;\\n\\n // add\\n h = th;\\n l = tl;\\n\\n a = l & 0xffff; b = l >>> 16;\\n c = h & 0xffff; d = h >>> 16;\\n\\n // Sigma0\\n h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32))));\\n l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32))));\\n\\n a += l & 0xffff; b += l >>> 16;\\n c += h & 0xffff; d += h >>> 16;\\n\\n // Maj\\n h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2);\\n l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2);\\n\\n a += l & 0xffff; b += l >>> 16;\\n c += h & 0xffff; d += h >>> 16;\\n\\n b += a >>> 16;\\n c += b >>> 16;\\n d += c >>> 16;\\n\\n bh7 = (c & 0xffff) | (d << 16);\\n bl7 = (a & 0xffff) | (b << 16);\\n\\n // add\\n h = bh3;\\n l = bl3;\\n\\n a = l & 0xffff; b = l >>> 16;\\n c = h & 0xffff; d = h >>> 16;\\n\\n h = th;\\n l = tl;\\n\\n a += l & 0xffff; b += l >>> 16;\\n c += h & 0xffff; d += h >>> 16;\\n\\n b += a >>> 16;\\n c += b >>> 16;\\n d += c >>> 16;\\n\\n bh3 = (c & 0xffff) | (d << 16);\\n bl3 = (a & 0xffff) | (b << 16);\\n\\n ah1 = bh0;\\n ah2 = bh1;\\n ah3 = bh2;\\n ah4 = bh3;\\n ah5 = bh4;\\n ah6 = bh5;\\n ah7 = bh6;\\n ah0 = bh7;\\n\\n al1 = bl0;\\n al2 = bl1;\\n al3 = bl2;\\n al4 = bl3;\\n al5 = bl4;\\n al6 = bl5;\\n al7 = bl6;\\n al0 = bl7;\\n\\n if (i%16 === 15) {\\n for (j = 0; j < 16; j++) {\\n // add\\n h = wh[j];\\n l = wl[j];\\n\\n a = l & 0xffff; b = l >>> 16;\\n c = h & 0xffff; d = h >>> 16;\\n\\n h = wh[(j+9)%16];\\n l = wl[(j+9)%16];\\n\\n a += l & 0xffff; b += l >>> 16;\\n c += h & 0xffff; d += h >>> 16;\\n\\n // sigma0\\n th = wh[(j+1)%16];\\n tl = wl[(j+1)%16];\\n h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7);\\n l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7)));\\n\\n a += l & 0xffff; b += l >>> 16;\\n c += h & 0xffff; d += h >>> 16;\\n\\n // sigma1\\n th = wh[(j+14)%16];\\n tl = wl[(j+14)%16];\\n h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6);\\n l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6)));\\n\\n a += l & 0xffff; b += l >>> 16;\\n c += h & 0xffff; d += h >>> 16;\\n\\n b += a >>> 16;\\n c += b >>> 16;\\n d += c >>> 16;\\n\\n wh[j] = (c & 0xffff) | (d << 16);\\n wl[j] = (a & 0xffff) | (b << 16);\\n }\\n }\\n }\\n\\n // add\\n h = ah0;\\n l = al0;\\n\\n a = l & 0xffff; b = l >>> 16;\\n c = h & 0xffff; d = h >>> 16;\\n\\n h = hh[0];\\n l = hl[0];\\n\\n a += l & 0xffff; b += l >>> 16;\\n c += h & 0xffff; d += h >>> 16;\\n\\n b += a >>> 16;\\n c += b >>> 16;\\n d += c >>> 16;\\n\\n hh[0] = ah0 = (c & 0xffff) | (d << 16);\\n hl[0] = al0 = (a & 0xffff) | (b << 16);\\n\\n h = ah1;\\n l = al1;\\n\\n a = l & 0xffff; b = l >>> 16;\\n c = h & 0xffff; d = h >>> 16;\\n\\n h = hh[1];\\n l = hl[1];\\n\\n a += l & 0xffff; b += l >>> 16;\\n c += h & 0xffff; d += h >>> 16;\\n\\n b += a >>> 16;\\n c += b >>> 16;\\n d += c >>> 16;\\n\\n hh[1] = ah1 = (c & 0xffff) | (d << 16);\\n hl[1] = al1 = (a & 0xffff) | (b << 16);\\n\\n h = ah2;\\n l = al2;\\n\\n a = l & 0xffff; b = l >>> 16;\\n c = h & 0xffff; d = h >>> 16;\\n\\n h = hh[2];\\n l = hl[2];\\n\\n a += l & 0xffff; b += l >>> 16;\\n c += h & 0xffff; d += h >>> 16;\\n\\n b += a >>> 16;\\n c += b >>> 16;\\n d += c >>> 16;\\n\\n hh[2] = ah2 = (c & 0xffff) | (d << 16);\\n hl[2] = al2 = (a & 0xffff) | (b << 16);\\n\\n h = ah3;\\n l = al3;\\n\\n a = l & 0xffff; b = l >>> 16;\\n c = h & 0xffff; d = h >>> 16;\\n\\n h = hh[3];\\n l = hl[3];\\n\\n a += l & 0xffff; b += l >>> 16;\\n c += h & 0xffff; d += h >>> 16;\\n\\n b += a >>> 16;\\n c += b >>> 16;\\n d += c >>> 16;\\n\\n hh[3] = ah3 = (c & 0xffff) | (d << 16);\\n hl[3] = al3 = (a & 0xffff) | (b << 16);\\n\\n h = ah4;\\n l = al4;\\n\\n a = l & 0xffff; b = l >>> 16;\\n c = h & 0xffff; d = h >>> 16;\\n\\n h = hh[4];\\n l = hl[4];\\n\\n a += l & 0xffff; b += l >>> 16;\\n c += h & 0xffff; d += h >>> 16;\\n\\n b += a >>> 16;\\n c += b >>> 16;\\n d += c >>> 16;\\n\\n hh[4] = ah4 = (c & 0xffff) | (d << 16);\\n hl[4] = al4 = (a & 0xffff) | (b << 16);\\n\\n h = ah5;\\n l = al5;\\n\\n a = l & 0xffff; b = l >>> 16;\\n c = h & 0xffff; d = h >>> 16;\\n\\n h = hh[5];\\n l = hl[5];\\n\\n a += l & 0xffff; b += l >>> 16;\\n c += h & 0xffff; d += h >>> 16;\\n\\n b += a >>> 16;\\n c += b >>> 16;\\n d += c >>> 16;\\n\\n hh[5] = ah5 = (c & 0xffff) | (d << 16);\\n hl[5] = al5 = (a & 0xffff) | (b << 16);\\n\\n h = ah6;\\n l = al6;\\n\\n a = l & 0xffff; b = l >>> 16;\\n c = h & 0xffff; d = h >>> 16;\\n\\n h = hh[6];\\n l = hl[6];\\n\\n a += l & 0xffff; b += l >>> 16;\\n c += h & 0xffff; d += h >>> 16;\\n\\n b += a >>> 16;\\n c += b >>> 16;\\n d += c >>> 16;\\n\\n hh[6] = ah6 = (c & 0xffff) | (d << 16);\\n hl[6] = al6 = (a & 0xffff) | (b << 16);\\n\\n h = ah7;\\n l = al7;\\n\\n a = l & 0xffff; b = l >>> 16;\\n c = h & 0xffff; d = h >>> 16;\\n\\n h = hh[7];\\n l = hl[7];\\n\\n a += l & 0xffff; b += l >>> 16;\\n c += h & 0xffff; d += h >>> 16;\\n\\n b += a >>> 16;\\n c += b >>> 16;\\n d += c >>> 16;\\n\\n hh[7] = ah7 = (c & 0xffff) | (d << 16);\\n hl[7] = al7 = (a & 0xffff) | (b << 16);\\n\\n pos += 128;\\n n -= 128;\\n }\\n\\n return n;\\n}\\n\\nfunction crypto_hash(out, m, n) {\\n var hh = new Int32Array(8),\\n hl = new Int32Array(8),\\n x = new Uint8Array(256),\\n i, b = n;\\n\\n hh[0] = 0x6a09e667;\\n hh[1] = 0xbb67ae85;\\n hh[2] = 0x3c6ef372;\\n hh[3] = 0xa54ff53a;\\n hh[4] = 0x510e527f;\\n hh[5] = 0x9b05688c;\\n hh[6] = 0x1f83d9ab;\\n hh[7] = 0x5be0cd19;\\n\\n hl[0] = 0xf3bcc908;\\n hl[1] = 0x84caa73b;\\n hl[2] = 0xfe94f82b;\\n hl[3] = 0x5f1d36f1;\\n hl[4] = 0xade682d1;\\n hl[5] = 0x2b3e6c1f;\\n hl[6] = 0xfb41bd6b;\\n hl[7] = 0x137e2179;\\n\\n crypto_hashblocks_hl(hh, hl, m, n);\\n n %= 128;\\n\\n for (i = 0; i < n; i++) x[i] = m[b-n+i];\\n x[n] = 128;\\n\\n n = 256-128*(n<112?1:0);\\n x[n-9] = 0;\\n ts64(x, n-8, (b / 0x20000000) | 0, b << 3);\\n crypto_hashblocks_hl(hh, hl, x, n);\\n\\n for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]);\\n\\n return 0;\\n}\\n\\nfunction add(p, q) {\\n var a = gf(), b = gf(), c = gf(),\\n d = gf(), e = gf(), f = gf(),\\n g = gf(), h = gf(), t = gf();\\n\\n Z(a, p[1], p[0]);\\n Z(t, q[1], q[0]);\\n M(a, a, t);\\n A(b, p[0], p[1]);\\n A(t, q[0], q[1]);\\n M(b, b, t);\\n M(c, p[3], q[3]);\\n M(c, c, D2);\\n M(d, p[2], q[2]);\\n A(d, d, d);\\n Z(e, b, a);\\n Z(f, d, c);\\n A(g, d, c);\\n A(h, b, a);\\n\\n M(p[0], e, f);\\n M(p[1], h, g);\\n M(p[2], g, f);\\n M(p[3], e, h);\\n}\\n\\nfunction cswap(p, q, b) {\\n var i;\\n for (i = 0; i < 4; i++) {\\n sel25519(p[i], q[i], b);\\n }\\n}\\n\\nfunction pack(r, p) {\\n var tx = gf(), ty = gf(), zi = gf();\\n inv25519(zi, p[2]);\\n M(tx, p[0], zi);\\n M(ty, p[1], zi);\\n pack25519(r, ty);\\n r[31] ^= par25519(tx) << 7;\\n}\\n\\nfunction scalarmult(p, q, s) {\\n var b, i;\\n set25519(p[0], gf0);\\n set25519(p[1], gf1);\\n set25519(p[2], gf1);\\n set25519(p[3], gf0);\\n for (i = 255; i >= 0; --i) {\\n b = (s[(i/8)|0] >> (i&7)) & 1;\\n cswap(p, q, b);\\n add(q, p);\\n add(p, p);\\n cswap(p, q, b);\\n }\\n}\\n\\nfunction scalarbase(p, s) {\\n var q = [gf(), gf(), gf(), gf()];\\n set25519(q[0], X);\\n set25519(q[1], Y);\\n set25519(q[2], gf1);\\n M(q[3], X, Y);\\n scalarmult(p, q, s);\\n}\\n\\nfunction crypto_sign_keypair(pk, sk, seeded) {\\n var d = new Uint8Array(64);\\n var p = [gf(), gf(), gf(), gf()];\\n var i;\\n\\n if (!seeded) randombytes(sk, 32);\\n crypto_hash(d, sk, 32);\\n d[0] &= 248;\\n d[31] &= 127;\\n d[31] |= 64;\\n\\n scalarbase(p, d);\\n pack(pk, p);\\n\\n for (i = 0; i < 32; i++) sk[i+32] = pk[i];\\n return 0;\\n}\\n\\nvar L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]);\\n\\nfunction modL(r, x) {\\n var carry, i, j, k;\\n for (i = 63; i >= 32; --i) {\\n carry = 0;\\n for (j = i - 32, k = i - 12; j < k; ++j) {\\n x[j] += carry - 16 * x[i] * L[j - (i - 32)];\\n carry = (x[j] + 128) >> 8;\\n x[j] -= carry * 256;\\n }\\n x[j] += carry;\\n x[i] = 0;\\n }\\n carry = 0;\\n for (j = 0; j < 32; j++) {\\n x[j] += carry - (x[31] >> 4) * L[j];\\n carry = x[j] >> 8;\\n x[j] &= 255;\\n }\\n for (j = 0; j < 32; j++) x[j] -= carry * L[j];\\n for (i = 0; i < 32; i++) {\\n x[i+1] += x[i] >> 8;\\n r[i] = x[i] & 255;\\n }\\n}\\n\\nfunction reduce(r) {\\n var x = new Float64Array(64), i;\\n for (i = 0; i < 64; i++) x[i] = r[i];\\n for (i = 0; i < 64; i++) r[i] = 0;\\n modL(r, x);\\n}\\n\\n// Note: difference from C - smlen returned, not passed as argument.\\nfunction crypto_sign(sm, m, n, sk) {\\n var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64);\\n var i, j, x = new Float64Array(64);\\n var p = [gf(), gf(), gf(), gf()];\\n\\n crypto_hash(d, sk, 32);\\n d[0] &= 248;\\n d[31] &= 127;\\n d[31] |= 64;\\n\\n var smlen = n + 64;\\n for (i = 0; i < n; i++) sm[64 + i] = m[i];\\n for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i];\\n\\n crypto_hash(r, sm.subarray(32), n+32);\\n reduce(r);\\n scalarbase(p, r);\\n pack(sm, p);\\n\\n for (i = 32; i < 64; i++) sm[i] = sk[i];\\n crypto_hash(h, sm, n + 64);\\n reduce(h);\\n\\n for (i = 0; i < 64; i++) x[i] = 0;\\n for (i = 0; i < 32; i++) x[i] = r[i];\\n for (i = 0; i < 32; i++) {\\n for (j = 0; j < 32; j++) {\\n x[i+j] += h[i] * d[j];\\n }\\n }\\n\\n modL(sm.subarray(32), x);\\n return smlen;\\n}\\n\\nfunction unpackneg(r, p) {\\n var t = gf(), chk = gf(), num = gf(),\\n den = gf(), den2 = gf(), den4 = gf(),\\n den6 = gf();\\n\\n set25519(r[2], gf1);\\n unpack25519(r[1], p);\\n S(num, r[1]);\\n M(den, num, D);\\n Z(num, num, r[2]);\\n A(den, r[2], den);\\n\\n S(den2, den);\\n S(den4, den2);\\n M(den6, den4, den2);\\n M(t, den6, num);\\n M(t, t, den);\\n\\n pow2523(t, t);\\n M(t, t, num);\\n M(t, t, den);\\n M(t, t, den);\\n M(r[0], t, den);\\n\\n S(chk, r[0]);\\n M(chk, chk, den);\\n if (neq25519(chk, num)) M(r[0], r[0], I);\\n\\n S(chk, r[0]);\\n M(chk, chk, den);\\n if (neq25519(chk, num)) return -1;\\n\\n if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]);\\n\\n M(r[3], r[0], r[1]);\\n return 0;\\n}\\n\\nfunction crypto_sign_open(m, sm, n, pk) {\\n var i, mlen;\\n var t = new Uint8Array(32), h = new Uint8Array(64);\\n var p = [gf(), gf(), gf(), gf()],\\n q = [gf(), gf(), gf(), gf()];\\n\\n mlen = -1;\\n if (n < 64) return -1;\\n\\n if (unpackneg(q, pk)) return -1;\\n\\n for (i = 0; i < n; i++) m[i] = sm[i];\\n for (i = 0; i < 32; i++) m[i+32] = pk[i];\\n crypto_hash(h, m, n);\\n reduce(h);\\n scalarmult(p, q, h);\\n\\n scalarbase(q, sm.subarray(32));\\n add(p, q);\\n pack(t, p);\\n\\n n -= 64;\\n if (crypto_verify_32(sm, 0, t, 0)) {\\n for (i = 0; i < n; i++) m[i] = 0;\\n return -1;\\n }\\n\\n for (i = 0; i < n; i++) m[i] = sm[i + 64];\\n mlen = n;\\n return mlen;\\n}\\n\\nvar crypto_secretbox_KEYBYTES = 32,\\n crypto_secretbox_NONCEBYTES = 24,\\n crypto_secretbox_ZEROBYTES = 32,\\n crypto_secretbox_BOXZEROBYTES = 16,\\n crypto_scalarmult_BYTES = 32,\\n crypto_scalarmult_SCALARBYTES = 32,\\n crypto_box_PUBLICKEYBYTES = 32,\\n crypto_box_SECRETKEYBYTES = 32,\\n crypto_box_BEFORENMBYTES = 32,\\n crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES,\\n crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES,\\n crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES,\\n crypto_sign_BYTES = 64,\\n crypto_sign_PUBLICKEYBYTES = 32,\\n crypto_sign_SECRETKEYBYTES = 64,\\n crypto_sign_SEEDBYTES = 32,\\n crypto_hash_BYTES = 64;\\n\\nnacl.lowlevel = {\\n crypto_core_hsalsa20: crypto_core_hsalsa20,\\n crypto_stream_xor: crypto_stream_xor,\\n crypto_stream: crypto_stream,\\n crypto_stream_salsa20_xor: crypto_stream_salsa20_xor,\\n crypto_stream_salsa20: crypto_stream_salsa20,\\n crypto_onetimeauth: crypto_onetimeauth,\\n crypto_onetimeauth_verify: crypto_onetimeauth_verify,\\n crypto_verify_16: crypto_verify_16,\\n crypto_verify_32: crypto_verify_32,\\n crypto_secretbox: crypto_secretbox,\\n crypto_secretbox_open: crypto_secretbox_open,\\n crypto_scalarmult: crypto_scalarmult,\\n crypto_scalarmult_base: crypto_scalarmult_base,\\n crypto_box_beforenm: crypto_box_beforenm,\\n crypto_box_afternm: crypto_box_afternm,\\n crypto_box: crypto_box,\\n crypto_box_open: crypto_box_open,\\n crypto_box_keypair: crypto_box_keypair,\\n crypto_hash: crypto_hash,\\n crypto_sign: crypto_sign,\\n crypto_sign_keypair: crypto_sign_keypair,\\n crypto_sign_open: crypto_sign_open,\\n\\n crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES,\\n crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES,\\n crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES,\\n crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES,\\n crypto_scalarmult_BYTES: crypto_scalarmult_BYTES,\\n crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES,\\n crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES,\\n crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES,\\n crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES,\\n crypto_box_NONCEBYTES: crypto_box_NONCEBYTES,\\n crypto_box_ZEROBYTES: crypto_box_ZEROBYTES,\\n crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES,\\n crypto_sign_BYTES: crypto_sign_BYTES,\\n crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES,\\n crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES,\\n crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES,\\n crypto_hash_BYTES: crypto_hash_BYTES\\n};\\n\\n/* High-level API */\\n\\nfunction checkLengths(k, n) {\\n if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size');\\n if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size');\\n}\\n\\nfunction checkBoxLengths(pk, sk) {\\n if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size');\\n if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size');\\n}\\n\\nfunction checkArrayTypes() {\\n for (var i = 0; i < arguments.length; i++) {\\n if (!(arguments[i] instanceof Uint8Array))\\n throw new TypeError('unexpected type, use Uint8Array');\\n }\\n}\\n\\nfunction cleanup(arr) {\\n for (var i = 0; i < arr.length; i++) arr[i] = 0;\\n}\\n\\nnacl.randomBytes = function(n) {\\n var b = new Uint8Array(n);\\n randombytes(b, n);\\n return b;\\n};\\n\\nnacl.secretbox = function(msg, nonce, key) {\\n checkArrayTypes(msg, nonce, key);\\n checkLengths(key, nonce);\\n var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length);\\n var c = new Uint8Array(m.length);\\n for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i];\\n crypto_secretbox(c, m, m.length, nonce, key);\\n return c.subarray(crypto_secretbox_BOXZEROBYTES);\\n};\\n\\nnacl.secretbox.open = function(box, nonce, key) {\\n checkArrayTypes(box, nonce, key);\\n checkLengths(key, nonce);\\n var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length);\\n var m = new Uint8Array(c.length);\\n for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i];\\n if (c.length < 32) return null;\\n if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return null;\\n return m.subarray(crypto_secretbox_ZEROBYTES);\\n};\\n\\nnacl.secretbox.keyLength = crypto_secretbox_KEYBYTES;\\nnacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES;\\nnacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES;\\n\\nnacl.scalarMult = function(n, p) {\\n checkArrayTypes(n, p);\\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\\n if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size');\\n var q = new Uint8Array(crypto_scalarmult_BYTES);\\n crypto_scalarmult(q, n, p);\\n return q;\\n};\\n\\nnacl.scalarMult.base = function(n) {\\n checkArrayTypes(n);\\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\\n var q = new Uint8Array(crypto_scalarmult_BYTES);\\n crypto_scalarmult_base(q, n);\\n return q;\\n};\\n\\nnacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES;\\nnacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES;\\n\\nnacl.box = function(msg, nonce, publicKey, secretKey) {\\n var k = nacl.box.before(publicKey, secretKey);\\n return nacl.secretbox(msg, nonce, k);\\n};\\n\\nnacl.box.before = function(publicKey, secretKey) {\\n checkArrayTypes(publicKey, secretKey);\\n checkBoxLengths(publicKey, secretKey);\\n var k = new Uint8Array(crypto_box_BEFORENMBYTES);\\n crypto_box_beforenm(k, publicKey, secretKey);\\n return k;\\n};\\n\\nnacl.box.after = nacl.secretbox;\\n\\nnacl.box.open = function(msg, nonce, publicKey, secretKey) {\\n var k = nacl.box.before(publicKey, secretKey);\\n return nacl.secretbox.open(msg, nonce, k);\\n};\\n\\nnacl.box.open.after = nacl.secretbox.open;\\n\\nnacl.box.keyPair = function() {\\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\\n var sk = new Uint8Array(crypto_box_SECRETKEYBYTES);\\n crypto_box_keypair(pk, sk);\\n return {publicKey: pk, secretKey: sk};\\n};\\n\\nnacl.box.keyPair.fromSecretKey = function(secretKey) {\\n checkArrayTypes(secretKey);\\n if (secretKey.length !== crypto_box_SECRETKEYBYTES)\\n throw new Error('bad secret key size');\\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\\n crypto_scalarmult_base(pk, secretKey);\\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\\n};\\n\\nnacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES;\\nnacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES;\\nnacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES;\\nnacl.box.nonceLength = crypto_box_NONCEBYTES;\\nnacl.box.overheadLength = nacl.secretbox.overheadLength;\\n\\nnacl.sign = function(msg, secretKey) {\\n checkArrayTypes(msg, secretKey);\\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\\n throw new Error('bad secret key size');\\n var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length);\\n crypto_sign(signedMsg, msg, msg.length, secretKey);\\n return signedMsg;\\n};\\n\\nnacl.sign.open = function(signedMsg, publicKey) {\\n checkArrayTypes(signedMsg, publicKey);\\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\\n throw new Error('bad public key size');\\n var tmp = new Uint8Array(signedMsg.length);\\n var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey);\\n if (mlen < 0) return null;\\n var m = new Uint8Array(mlen);\\n for (var i = 0; i < m.length; i++) m[i] = tmp[i];\\n return m;\\n};\\n\\nnacl.sign.detached = function(msg, secretKey) {\\n var signedMsg = nacl.sign(msg, secretKey);\\n var sig = new Uint8Array(crypto_sign_BYTES);\\n for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i];\\n return sig;\\n};\\n\\nnacl.sign.detached.verify = function(msg, sig, publicKey) {\\n checkArrayTypes(msg, sig, publicKey);\\n if (sig.length !== crypto_sign_BYTES)\\n throw new Error('bad signature size');\\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\\n throw new Error('bad public key size');\\n var sm = new Uint8Array(crypto_sign_BYTES + msg.length);\\n var m = new Uint8Array(crypto_sign_BYTES + msg.length);\\n var i;\\n for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i];\\n for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i];\\n return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0);\\n};\\n\\nnacl.sign.keyPair = function() {\\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\\n crypto_sign_keypair(pk, sk);\\n return {publicKey: pk, secretKey: sk};\\n};\\n\\nnacl.sign.keyPair.fromSecretKey = function(secretKey) {\\n checkArrayTypes(secretKey);\\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\\n throw new Error('bad secret key size');\\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\\n for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i];\\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\\n};\\n\\nnacl.sign.keyPair.fromSeed = function(seed) {\\n checkArrayTypes(seed);\\n if (seed.length !== crypto_sign_SEEDBYTES)\\n throw new Error('bad seed size');\\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\\n for (var i = 0; i < 32; i++) sk[i] = seed[i];\\n crypto_sign_keypair(pk, sk, true);\\n return {publicKey: pk, secretKey: sk};\\n};\\n\\nnacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES;\\nnacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES;\\nnacl.sign.seedLength = crypto_sign_SEEDBYTES;\\nnacl.sign.signatureLength = crypto_sign_BYTES;\\n\\nnacl.hash = function(msg) {\\n checkArrayTypes(msg);\\n var h = new Uint8Array(crypto_hash_BYTES);\\n crypto_hash(h, msg, msg.length);\\n return h;\\n};\\n\\nnacl.hash.hashLength = crypto_hash_BYTES;\\n\\nnacl.verify = function(x, y) {\\n checkArrayTypes(x, y);\\n // Zero length arguments are considered not equal.\\n if (x.length === 0 || y.length === 0) return false;\\n if (x.length !== y.length) return false;\\n return (vn(x, 0, y, 0, x.length) === 0) ? true : false;\\n};\\n\\nnacl.setPRNG = function(fn) {\\n randombytes = fn;\\n};\\n\\n(function() {\\n // Initialize PRNG if environment provides CSPRNG.\\n // If not, methods calling randombytes will throw.\\n var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null;\\n if (crypto && crypto.getRandomValues) {\\n // Browsers.\\n var QUOTA = 65536;\\n nacl.setPRNG(function(x, n) {\\n var i, v = new Uint8Array(n);\\n for (i = 0; i < n; i += QUOTA) {\\n crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA)));\\n }\\n for (i = 0; i < n; i++) x[i] = v[i];\\n cleanup(v);\\n });\\n } else if (true) {\\n // Node.js.\\n crypto = __webpack_require__(/*! crypto */ 2);\\n if (crypto && crypto.randomBytes) {\\n nacl.setPRNG(function(x, n) {\\n var i, v = crypto.randomBytes(n);\\n for (i = 0; i < n; i++) x[i] = v[i];\\n cleanup(v);\\n });\\n }\\n }\\n})();\\n\\n})( true && module.exports ? module.exports : (self.nacl = self.nacl || {}));\\n\\n\\n//# sourceURL=webpack:///./node_modules/tweetnacl/nacl-fast.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/uport-base64url/dist/base64url.js\":\n/*!********************************************************!*\\\n !*** ./node_modules/uport-base64url/dist/base64url.js ***!\n \\********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, \\\"__esModule\\\", { value: true });\\nvar buffer_1 = __webpack_require__(/*! buffer */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\");\\nvar pad_string_1 = __webpack_require__(/*! ./pad-string */ \\\"./node_modules/uport-base64url/dist/pad-string.js\\\");\\nfunction encode(input, encoding) {\\n if (encoding === void 0) { encoding = \\\"utf8\\\"; }\\n if (buffer_1.Buffer.isBuffer(input)) {\\n return fromBase64(input.toString(\\\"base64\\\"));\\n }\\n return fromBase64(buffer_1.Buffer.from(input, encoding).toString(\\\"base64\\\"));\\n}\\n;\\nfunction decode(base64url, encoding) {\\n if (encoding === void 0) { encoding = \\\"utf8\\\"; }\\n return buffer_1.Buffer.from(toBase64(base64url), \\\"base64\\\").toString(encoding);\\n}\\nfunction toBase64(base64url) {\\n base64url = base64url.toString();\\n return pad_string_1.default(base64url)\\n .replace(/\\\\-/g, \\\"+\\\")\\n .replace(/_/g, \\\"/\\\");\\n}\\nfunction fromBase64(base64) {\\n return base64\\n .replace(/=/g, \\\"\\\")\\n .replace(/\\\\+/g, \\\"-\\\")\\n .replace(/\\\\//g, \\\"_\\\");\\n}\\nfunction toBuffer(base64url) {\\n return buffer_1.Buffer.from(toBase64(base64url), \\\"base64\\\");\\n}\\nvar base64url = encode;\\nbase64url.encode = encode;\\nbase64url.decode = decode;\\nbase64url.toBase64 = toBase64;\\nbase64url.fromBase64 = fromBase64;\\nbase64url.toBuffer = toBuffer;\\nexports.default = base64url;\\n\\n\\n//# sourceURL=webpack:///./node_modules/uport-base64url/dist/base64url.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/uport-base64url/dist/pad-string.js\":\n/*!*********************************************************!*\\\n !*** ./node_modules/uport-base64url/dist/pad-string.js ***!\n \\*********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\neval(\"\\nObject.defineProperty(exports, \\\"__esModule\\\", { value: true });\\nvar buffer_1 = __webpack_require__(/*! buffer */ \\\"./node_modules/node-libs-browser/node_modules/buffer/index.js\\\");\\nfunction padString(input) {\\n var segmentLength = 4;\\n var stringLength = input.length;\\n var diff = stringLength % segmentLength;\\n if (!diff) {\\n return input;\\n }\\n var position = stringLength;\\n var padLength = segmentLength - diff;\\n var paddedStringLength = stringLength + padLength;\\n var buffer = buffer_1.Buffer.alloc(paddedStringLength);\\n buffer.write(input);\\n while (padLength--) {\\n buffer.write(\\\"=\\\", position++);\\n }\\n return buffer.toString();\\n}\\nexports.default = padString;\\n\\n\\n//# sourceURL=webpack:///./node_modules/uport-base64url/dist/pad-string.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/uport-base64url/index.js\":\n/*!***********************************************!*\\\n !*** ./node_modules/uport-base64url/index.js ***!\n \\***********************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"module.exports = __webpack_require__(/*! ./dist/base64url */ \\\"./node_modules/uport-base64url/dist/base64url.js\\\").default;\\nmodule.exports.default = module.exports;\\n\\n\\n//# sourceURL=webpack:///./node_modules/uport-base64url/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/util/support/isBufferBrowser.js\":\n/*!******************************************************!*\\\n !*** ./node_modules/util/support/isBufferBrowser.js ***!\n \\******************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"module.exports = function isBuffer(arg) {\\n return arg && typeof arg === 'object'\\n && typeof arg.copy === 'function'\\n && typeof arg.fill === 'function'\\n && typeof arg.readUInt8 === 'function';\\n}\\n\\n//# sourceURL=webpack:///./node_modules/util/support/isBufferBrowser.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/util/util.js\":\n/*!***********************************!*\\\n !*** ./node_modules/util/util.js ***!\n \\***********************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"/* WEBPACK VAR INJECTION */(function(process) {// Copyright Joyent, Inc. and other Node contributors.\\n//\\n// Permission is hereby granted, free of charge, to any person obtaining a\\n// copy of this software and associated documentation files (the\\n// \\\"Software\\\"), to deal in the Software without restriction, including\\n// without limitation the rights to use, copy, modify, merge, publish,\\n// distribute, sublicense, and/or sell copies of the Software, and to permit\\n// persons to whom the Software is furnished to do so, subject to the\\n// following conditions:\\n//\\n// The above copyright notice and this permission notice shall be included\\n// in all copies or substantial portions of the Software.\\n//\\n// THE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\\n\\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\\n function getOwnPropertyDescriptors(obj) {\\n var keys = Object.keys(obj);\\n var descriptors = {};\\n for (var i = 0; i < keys.length; i++) {\\n descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\\n }\\n return descriptors;\\n };\\n\\nvar formatRegExp = /%[sdj%]/g;\\nexports.format = function(f) {\\n if (!isString(f)) {\\n var objects = [];\\n for (var i = 0; i < arguments.length; i++) {\\n objects.push(inspect(arguments[i]));\\n }\\n return objects.join(' ');\\n }\\n\\n var i = 1;\\n var args = arguments;\\n var len = args.length;\\n var str = String(f).replace(formatRegExp, function(x) {\\n if (x === '%%') return '%';\\n if (i >= len) return x;\\n switch (x) {\\n case '%s': return String(args[i++]);\\n case '%d': return Number(args[i++]);\\n case '%j':\\n try {\\n return JSON.stringify(args[i++]);\\n } catch (_) {\\n return '[Circular]';\\n }\\n default:\\n return x;\\n }\\n });\\n for (var x = args[i]; i < len; x = args[++i]) {\\n if (isNull(x) || !isObject(x)) {\\n str += ' ' + x;\\n } else {\\n str += ' ' + inspect(x);\\n }\\n }\\n return str;\\n};\\n\\n\\n// Mark that a method should not be used.\\n// Returns a modified function which warns once by default.\\n// If --no-deprecation is set, then it is a no-op.\\nexports.deprecate = function(fn, msg) {\\n if (typeof process !== 'undefined' && process.noDeprecation === true) {\\n return fn;\\n }\\n\\n // Allow for deprecating things in the process of starting up.\\n if (typeof process === 'undefined') {\\n return function() {\\n return exports.deprecate(fn, msg).apply(this, arguments);\\n };\\n }\\n\\n var warned = false;\\n function deprecated() {\\n if (!warned) {\\n if (process.throwDeprecation) {\\n throw new Error(msg);\\n } else if (process.traceDeprecation) {\\n console.trace(msg);\\n } else {\\n console.error(msg);\\n }\\n warned = true;\\n }\\n return fn.apply(this, arguments);\\n }\\n\\n return deprecated;\\n};\\n\\n\\nvar debugs = {};\\nvar debugEnviron;\\nexports.debuglog = function(set) {\\n if (isUndefined(debugEnviron))\\n debugEnviron = process.env.NODE_DEBUG || '';\\n set = set.toUpperCase();\\n if (!debugs[set]) {\\n if (new RegExp('\\\\\\\\b' + set + '\\\\\\\\b', 'i').test(debugEnviron)) {\\n var pid = process.pid;\\n debugs[set] = function() {\\n var msg = exports.format.apply(exports, arguments);\\n console.error('%s %d: %s', set, pid, msg);\\n };\\n } else {\\n debugs[set] = function() {};\\n }\\n }\\n return debugs[set];\\n};\\n\\n\\n/**\\n * Echos the value of a value. Trys to print the value out\\n * in the best way possible given the different types.\\n *\\n * @param {Object} obj The object to print out.\\n * @param {Object} opts Optional options object that alters the output.\\n */\\n/* legacy: obj, showHidden, depth, colors*/\\nfunction inspect(obj, opts) {\\n // default options\\n var ctx = {\\n seen: [],\\n stylize: stylizeNoColor\\n };\\n // legacy...\\n if (arguments.length >= 3) ctx.depth = arguments[2];\\n if (arguments.length >= 4) ctx.colors = arguments[3];\\n if (isBoolean(opts)) {\\n // legacy...\\n ctx.showHidden = opts;\\n } else if (opts) {\\n // got an \\\"options\\\" object\\n exports._extend(ctx, opts);\\n }\\n // set default options\\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\\n if (isUndefined(ctx.depth)) ctx.depth = 2;\\n if (isUndefined(ctx.colors)) ctx.colors = false;\\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\\n if (ctx.colors) ctx.stylize = stylizeWithColor;\\n return formatValue(ctx, obj, ctx.depth);\\n}\\nexports.inspect = inspect;\\n\\n\\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\\ninspect.colors = {\\n 'bold' : [1, 22],\\n 'italic' : [3, 23],\\n 'underline' : [4, 24],\\n 'inverse' : [7, 27],\\n 'white' : [37, 39],\\n 'grey' : [90, 39],\\n 'black' : [30, 39],\\n 'blue' : [34, 39],\\n 'cyan' : [36, 39],\\n 'green' : [32, 39],\\n 'magenta' : [35, 39],\\n 'red' : [31, 39],\\n 'yellow' : [33, 39]\\n};\\n\\n// Don't use 'blue' not visible on cmd.exe\\ninspect.styles = {\\n 'special': 'cyan',\\n 'number': 'yellow',\\n 'boolean': 'yellow',\\n 'undefined': 'grey',\\n 'null': 'bold',\\n 'string': 'green',\\n 'date': 'magenta',\\n // \\\"name\\\": intentionally not styling\\n 'regexp': 'red'\\n};\\n\\n\\nfunction stylizeWithColor(str, styleType) {\\n var style = inspect.styles[styleType];\\n\\n if (style) {\\n return '\\\\u001b[' + inspect.colors[style][0] + 'm' + str +\\n '\\\\u001b[' + inspect.colors[style][1] + 'm';\\n } else {\\n return str;\\n }\\n}\\n\\n\\nfunction stylizeNoColor(str, styleType) {\\n return str;\\n}\\n\\n\\nfunction arrayToHash(array) {\\n var hash = {};\\n\\n array.forEach(function(val, idx) {\\n hash[val] = true;\\n });\\n\\n return hash;\\n}\\n\\n\\nfunction formatValue(ctx, value, recurseTimes) {\\n // Provide a hook for user-specified inspect functions.\\n // Check that value is an object with an inspect function on it\\n if (ctx.customInspect &&\\n value &&\\n isFunction(value.inspect) &&\\n // Filter out the util module, it's inspect function is special\\n value.inspect !== exports.inspect &&\\n // Also filter out any prototype objects using the circular check.\\n !(value.constructor && value.constructor.prototype === value)) {\\n var ret = value.inspect(recurseTimes, ctx);\\n if (!isString(ret)) {\\n ret = formatValue(ctx, ret, recurseTimes);\\n }\\n return ret;\\n }\\n\\n // Primitive types cannot have properties\\n var primitive = formatPrimitive(ctx, value);\\n if (primitive) {\\n return primitive;\\n }\\n\\n // Look up the keys of the object.\\n var keys = Object.keys(value);\\n var visibleKeys = arrayToHash(keys);\\n\\n if (ctx.showHidden) {\\n keys = Object.getOwnPropertyNames(value);\\n }\\n\\n // IE doesn't make error fields non-enumerable\\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\\n if (isError(value)\\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\\n return formatError(value);\\n }\\n\\n // Some type of object without properties can be shortcutted.\\n if (keys.length === 0) {\\n if (isFunction(value)) {\\n var name = value.name ? ': ' + value.name : '';\\n return ctx.stylize('[Function' + name + ']', 'special');\\n }\\n if (isRegExp(value)) {\\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\\n }\\n if (isDate(value)) {\\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\\n }\\n if (isError(value)) {\\n return formatError(value);\\n }\\n }\\n\\n var base = '', array = false, braces = ['{', '}'];\\n\\n // Make Array say that they are Array\\n if (isArray(value)) {\\n array = true;\\n braces = ['[', ']'];\\n }\\n\\n // Make functions say that they are functions\\n if (isFunction(value)) {\\n var n = value.name ? ': ' + value.name : '';\\n base = ' [Function' + n + ']';\\n }\\n\\n // Make RegExps say that they are RegExps\\n if (isRegExp(value)) {\\n base = ' ' + RegExp.prototype.toString.call(value);\\n }\\n\\n // Make dates with properties first say the date\\n if (isDate(value)) {\\n base = ' ' + Date.prototype.toUTCString.call(value);\\n }\\n\\n // Make error with message first say the error\\n if (isError(value)) {\\n base = ' ' + formatError(value);\\n }\\n\\n if (keys.length === 0 && (!array || value.length == 0)) {\\n return braces[0] + base + braces[1];\\n }\\n\\n if (recurseTimes < 0) {\\n if (isRegExp(value)) {\\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\\n } else {\\n return ctx.stylize('[Object]', 'special');\\n }\\n }\\n\\n ctx.seen.push(value);\\n\\n var output;\\n if (array) {\\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\\n } else {\\n output = keys.map(function(key) {\\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\\n });\\n }\\n\\n ctx.seen.pop();\\n\\n return reduceToSingleString(output, base, braces);\\n}\\n\\n\\nfunction formatPrimitive(ctx, value) {\\n if (isUndefined(value))\\n return ctx.stylize('undefined', 'undefined');\\n if (isString(value)) {\\n var simple = '\\\\'' + JSON.stringify(value).replace(/^\\\"|\\\"$/g, '')\\n .replace(/'/g, \\\"\\\\\\\\'\\\")\\n .replace(/\\\\\\\\\\\"/g, '\\\"') + '\\\\'';\\n return ctx.stylize(simple, 'string');\\n }\\n if (isNumber(value))\\n return ctx.stylize('' + value, 'number');\\n if (isBoolean(value))\\n return ctx.stylize('' + value, 'boolean');\\n // For some reason typeof null is \\\"object\\\", so special case here.\\n if (isNull(value))\\n return ctx.stylize('null', 'null');\\n}\\n\\n\\nfunction formatError(value) {\\n return '[' + Error.prototype.toString.call(value) + ']';\\n}\\n\\n\\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\\n var output = [];\\n for (var i = 0, l = value.length; i < l; ++i) {\\n if (hasOwnProperty(value, String(i))) {\\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\\n String(i), true));\\n } else {\\n output.push('');\\n }\\n }\\n keys.forEach(function(key) {\\n if (!key.match(/^\\\\d+$/)) {\\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\\n key, true));\\n }\\n });\\n return output;\\n}\\n\\n\\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\\n var name, str, desc;\\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\\n if (desc.get) {\\n if (desc.set) {\\n str = ctx.stylize('[Getter/Setter]', 'special');\\n } else {\\n str = ctx.stylize('[Getter]', 'special');\\n }\\n } else {\\n if (desc.set) {\\n str = ctx.stylize('[Setter]', 'special');\\n }\\n }\\n if (!hasOwnProperty(visibleKeys, key)) {\\n name = '[' + key + ']';\\n }\\n if (!str) {\\n if (ctx.seen.indexOf(desc.value) < 0) {\\n if (isNull(recurseTimes)) {\\n str = formatValue(ctx, desc.value, null);\\n } else {\\n str = formatValue(ctx, desc.value, recurseTimes - 1);\\n }\\n if (str.indexOf('\\\\n') > -1) {\\n if (array) {\\n str = str.split('\\\\n').map(function(line) {\\n return ' ' + line;\\n }).join('\\\\n').substr(2);\\n } else {\\n str = '\\\\n' + str.split('\\\\n').map(function(line) {\\n return ' ' + line;\\n }).join('\\\\n');\\n }\\n }\\n } else {\\n str = ctx.stylize('[Circular]', 'special');\\n }\\n }\\n if (isUndefined(name)) {\\n if (array && key.match(/^\\\\d+$/)) {\\n return str;\\n }\\n name = JSON.stringify('' + key);\\n if (name.match(/^\\\"([a-zA-Z_][a-zA-Z_0-9]*)\\\"$/)) {\\n name = name.substr(1, name.length - 2);\\n name = ctx.stylize(name, 'name');\\n } else {\\n name = name.replace(/'/g, \\\"\\\\\\\\'\\\")\\n .replace(/\\\\\\\\\\\"/g, '\\\"')\\n .replace(/(^\\\"|\\\"$)/g, \\\"'\\\");\\n name = ctx.stylize(name, 'string');\\n }\\n }\\n\\n return name + ': ' + str;\\n}\\n\\n\\nfunction reduceToSingleString(output, base, braces) {\\n var numLinesEst = 0;\\n var length = output.reduce(function(prev, cur) {\\n numLinesEst++;\\n if (cur.indexOf('\\\\n') >= 0) numLinesEst++;\\n return prev + cur.replace(/\\\\u001b\\\\[\\\\d\\\\d?m/g, '').length + 1;\\n }, 0);\\n\\n if (length > 60) {\\n return braces[0] +\\n (base === '' ? '' : base + '\\\\n ') +\\n ' ' +\\n output.join(',\\\\n ') +\\n ' ' +\\n braces[1];\\n }\\n\\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\\n}\\n\\n\\n// NOTE: These type checking functions intentionally don't use `instanceof`\\n// because it is fragile and can be easily faked with `Object.create()`.\\nfunction isArray(ar) {\\n return Array.isArray(ar);\\n}\\nexports.isArray = isArray;\\n\\nfunction isBoolean(arg) {\\n return typeof arg === 'boolean';\\n}\\nexports.isBoolean = isBoolean;\\n\\nfunction isNull(arg) {\\n return arg === null;\\n}\\nexports.isNull = isNull;\\n\\nfunction isNullOrUndefined(arg) {\\n return arg == null;\\n}\\nexports.isNullOrUndefined = isNullOrUndefined;\\n\\nfunction isNumber(arg) {\\n return typeof arg === 'number';\\n}\\nexports.isNumber = isNumber;\\n\\nfunction isString(arg) {\\n return typeof arg === 'string';\\n}\\nexports.isString = isString;\\n\\nfunction isSymbol(arg) {\\n return typeof arg === 'symbol';\\n}\\nexports.isSymbol = isSymbol;\\n\\nfunction isUndefined(arg) {\\n return arg === void 0;\\n}\\nexports.isUndefined = isUndefined;\\n\\nfunction isRegExp(re) {\\n return isObject(re) && objectToString(re) === '[object RegExp]';\\n}\\nexports.isRegExp = isRegExp;\\n\\nfunction isObject(arg) {\\n return typeof arg === 'object' && arg !== null;\\n}\\nexports.isObject = isObject;\\n\\nfunction isDate(d) {\\n return isObject(d) && objectToString(d) === '[object Date]';\\n}\\nexports.isDate = isDate;\\n\\nfunction isError(e) {\\n return isObject(e) &&\\n (objectToString(e) === '[object Error]' || e instanceof Error);\\n}\\nexports.isError = isError;\\n\\nfunction isFunction(arg) {\\n return typeof arg === 'function';\\n}\\nexports.isFunction = isFunction;\\n\\nfunction isPrimitive(arg) {\\n return arg === null ||\\n typeof arg === 'boolean' ||\\n typeof arg === 'number' ||\\n typeof arg === 'string' ||\\n typeof arg === 'symbol' || // ES6 symbol\\n typeof arg === 'undefined';\\n}\\nexports.isPrimitive = isPrimitive;\\n\\nexports.isBuffer = __webpack_require__(/*! ./support/isBuffer */ \\\"./node_modules/util/support/isBufferBrowser.js\\\");\\n\\nfunction objectToString(o) {\\n return Object.prototype.toString.call(o);\\n}\\n\\n\\nfunction pad(n) {\\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\\n}\\n\\n\\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\\n 'Oct', 'Nov', 'Dec'];\\n\\n// 26 Feb 16:19:34\\nfunction timestamp() {\\n var d = new Date();\\n var time = [pad(d.getHours()),\\n pad(d.getMinutes()),\\n pad(d.getSeconds())].join(':');\\n return [d.getDate(), months[d.getMonth()], time].join(' ');\\n}\\n\\n\\n// log is just a thin wrapper to console.log that prepends a timestamp\\nexports.log = function() {\\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\\n};\\n\\n\\n/**\\n * Inherit the prototype methods from one constructor into another.\\n *\\n * The Function.prototype.inherits from lang.js rewritten as a standalone\\n * function (not on Function.prototype). NOTE: If this file is to be loaded\\n * during bootstrapping this function needs to be rewritten using some native\\n * functions as prototype setup using normal JavaScript does not work as\\n * expected during bootstrapping (see mirror.js in r114903).\\n *\\n * @param {function} ctor Constructor function which needs to inherit the\\n * prototype.\\n * @param {function} superCtor Constructor function to inherit prototype from.\\n */\\nexports.inherits = __webpack_require__(/*! inherits */ \\\"./node_modules/inherits/inherits_browser.js\\\");\\n\\nexports._extend = function(origin, add) {\\n // Don't do anything if add isn't an object\\n if (!add || !isObject(add)) return origin;\\n\\n var keys = Object.keys(add);\\n var i = keys.length;\\n while (i--) {\\n origin[keys[i]] = add[keys[i]];\\n }\\n return origin;\\n};\\n\\nfunction hasOwnProperty(obj, prop) {\\n return Object.prototype.hasOwnProperty.call(obj, prop);\\n}\\n\\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\\n\\nexports.promisify = function promisify(original) {\\n if (typeof original !== 'function')\\n throw new TypeError('The \\\"original\\\" argument must be of type Function');\\n\\n if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\\n var fn = original[kCustomPromisifiedSymbol];\\n if (typeof fn !== 'function') {\\n throw new TypeError('The \\\"util.promisify.custom\\\" argument must be of type Function');\\n }\\n Object.defineProperty(fn, kCustomPromisifiedSymbol, {\\n value: fn, enumerable: false, writable: false, configurable: true\\n });\\n return fn;\\n }\\n\\n function fn() {\\n var promiseResolve, promiseReject;\\n var promise = new Promise(function (resolve, reject) {\\n promiseResolve = resolve;\\n promiseReject = reject;\\n });\\n\\n var args = [];\\n for (var i = 0; i < arguments.length; i++) {\\n args.push(arguments[i]);\\n }\\n args.push(function (err, value) {\\n if (err) {\\n promiseReject(err);\\n } else {\\n promiseResolve(value);\\n }\\n });\\n\\n try {\\n original.apply(this, args);\\n } catch (err) {\\n promiseReject(err);\\n }\\n\\n return promise;\\n }\\n\\n Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\\n\\n if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\\n value: fn, enumerable: false, writable: false, configurable: true\\n });\\n return Object.defineProperties(\\n fn,\\n getOwnPropertyDescriptors(original)\\n );\\n}\\n\\nexports.promisify.custom = kCustomPromisifiedSymbol\\n\\nfunction callbackifyOnRejected(reason, cb) {\\n // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\\n // Because `null` is a special error value in callbacks which means \\\"no error\\n // occurred\\\", we error-wrap so the callback consumer can distinguish between\\n // \\\"the promise rejected with null\\\" or \\\"the promise fulfilled with undefined\\\".\\n if (!reason) {\\n var newReason = new Error('Promise was rejected with a falsy value');\\n newReason.reason = reason;\\n reason = newReason;\\n }\\n return cb(reason);\\n}\\n\\nfunction callbackify(original) {\\n if (typeof original !== 'function') {\\n throw new TypeError('The \\\"original\\\" argument must be of type Function');\\n }\\n\\n // We DO NOT return the promise as it gives the user a false sense that\\n // the promise is actually somehow related to the callback's execution\\n // and that the callback throwing will reject the promise.\\n function callbackified() {\\n var args = [];\\n for (var i = 0; i < arguments.length; i++) {\\n args.push(arguments[i]);\\n }\\n\\n var maybeCb = args.pop();\\n if (typeof maybeCb !== 'function') {\\n throw new TypeError('The last argument must be of type Function');\\n }\\n var self = this;\\n var cb = function() {\\n return maybeCb.apply(self, arguments);\\n };\\n // In true node style we process the callback on `nextTick` with all the\\n // implications (stack, `uncaughtException`, `async_hooks`)\\n original.apply(this, args)\\n .then(function(ret) { process.nextTick(cb, null, ret) },\\n function(rej) { process.nextTick(callbackifyOnRejected, rej, cb) });\\n }\\n\\n Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\\n Object.defineProperties(callbackified,\\n getOwnPropertyDescriptors(original));\\n return callbackified;\\n}\\nexports.callbackify = callbackify;\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../process/browser.js */ \\\"./node_modules/process/browser.js\\\")))\\n\\n//# sourceURL=webpack:///./node_modules/util/util.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/uuid/rng-browser.js\":\n/*!******************************************!*\\\n !*** ./node_modules/uuid/rng-browser.js ***!\n \\******************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"/* WEBPACK VAR INJECTION */(function(global) {\\nvar rng;\\n\\nif (global.crypto && crypto.getRandomValues) {\\n // WHATWG crypto-based RNG - http://wiki.whatwg.org/wiki/Crypto\\n // Moderately fast, high quality\\n var _rnds8 = new Uint8Array(16);\\n rng = function whatwgRNG() {\\n crypto.getRandomValues(_rnds8);\\n return _rnds8;\\n };\\n}\\n\\nif (!rng) {\\n // Math.random()-based (RNG)\\n //\\n // If all else fails, use Math.random(). It's fast, but is of unspecified\\n // quality.\\n var _rnds = new Array(16);\\n rng = function() {\\n for (var i = 0, r; i < 16; i++) {\\n if ((i & 0x03) === 0) r = Math.random() * 0x100000000;\\n _rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;\\n }\\n\\n return _rnds;\\n };\\n}\\n\\nmodule.exports = rng;\\n\\n\\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../webpack/buildin/global.js */ \\\"./node_modules/webpack/buildin/global.js\\\")))\\n\\n//# sourceURL=webpack:///./node_modules/uuid/rng-browser.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/uuid/uuid.js\":\n/*!***********************************!*\\\n !*** ./node_modules/uuid/uuid.js ***!\n \\***********************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"// uuid.js\\n//\\n// Copyright (c) 2010-2012 Robert Kieffer\\n// MIT License - http://opensource.org/licenses/mit-license.php\\n\\n// Unique ID creation requires a high quality random # generator. We feature\\n// detect to determine the best RNG source, normalizing to a function that\\n// returns 128-bits of randomness, since that's what's usually required\\nvar _rng = __webpack_require__(/*! ./rng */ \\\"./node_modules/uuid/rng-browser.js\\\");\\n\\n// Maps for number <-> hex string conversion\\nvar _byteToHex = [];\\nvar _hexToByte = {};\\nfor (var i = 0; i < 256; i++) {\\n _byteToHex[i] = (i + 0x100).toString(16).substr(1);\\n _hexToByte[_byteToHex[i]] = i;\\n}\\n\\n// **`parse()` - Parse a UUID into it's component bytes**\\nfunction parse(s, buf, offset) {\\n var i = (buf && offset) || 0, ii = 0;\\n\\n buf = buf || [];\\n s.toLowerCase().replace(/[0-9a-f]{2}/g, function(oct) {\\n if (ii < 16) { // Don't overflow!\\n buf[i + ii++] = _hexToByte[oct];\\n }\\n });\\n\\n // Zero out remaining bytes if string was short\\n while (ii < 16) {\\n buf[i + ii++] = 0;\\n }\\n\\n return buf;\\n}\\n\\n// **`unparse()` - Convert UUID byte array (ala parse()) into a string**\\nfunction unparse(buf, offset) {\\n var i = offset || 0, bth = _byteToHex;\\n return bth[buf[i++]] + bth[buf[i++]] +\\n bth[buf[i++]] + bth[buf[i++]] + '-' +\\n bth[buf[i++]] + bth[buf[i++]] + '-' +\\n bth[buf[i++]] + bth[buf[i++]] + '-' +\\n bth[buf[i++]] + bth[buf[i++]] + '-' +\\n bth[buf[i++]] + bth[buf[i++]] +\\n bth[buf[i++]] + bth[buf[i++]] +\\n bth[buf[i++]] + bth[buf[i++]];\\n}\\n\\n// **`v1()` - Generate time-based UUID**\\n//\\n// Inspired by https://github.com/LiosK/UUID.js\\n// and http://docs.python.org/library/uuid.html\\n\\n// random #'s we need to init node and clockseq\\nvar _seedBytes = _rng();\\n\\n// Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\\nvar _nodeId = [\\n _seedBytes[0] | 0x01,\\n _seedBytes[1], _seedBytes[2], _seedBytes[3], _seedBytes[4], _seedBytes[5]\\n];\\n\\n// Per 4.2.2, randomize (14 bit) clockseq\\nvar _clockseq = (_seedBytes[6] << 8 | _seedBytes[7]) & 0x3fff;\\n\\n// Previous uuid creation time\\nvar _lastMSecs = 0, _lastNSecs = 0;\\n\\n// See https://github.com/broofa/node-uuid for API details\\nfunction v1(options, buf, offset) {\\n var i = buf && offset || 0;\\n var b = buf || [];\\n\\n options = options || {};\\n\\n var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq;\\n\\n // UUID timestamps are 100 nano-second units since the Gregorian epoch,\\n // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so\\n // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\\n // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\\n var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime();\\n\\n // Per 4.2.1.2, use count of uuid's generated during the current clock\\n // cycle to simulate higher resolution clock\\n var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1;\\n\\n // Time since last uuid creation (in msecs)\\n var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000;\\n\\n // Per 4.2.1.2, Bump clockseq on clock regression\\n if (dt < 0 && options.clockseq === undefined) {\\n clockseq = clockseq + 1 & 0x3fff;\\n }\\n\\n // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\\n // time interval\\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\\n nsecs = 0;\\n }\\n\\n // Per 4.2.1.2 Throw error if too many uuids are requested\\n if (nsecs >= 10000) {\\n throw new Error('uuid.v1(): Can\\\\'t create more than 10M uuids/sec');\\n }\\n\\n _lastMSecs = msecs;\\n _lastNSecs = nsecs;\\n _clockseq = clockseq;\\n\\n // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\\n msecs += 12219292800000;\\n\\n // `time_low`\\n var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\\n b[i++] = tl >>> 24 & 0xff;\\n b[i++] = tl >>> 16 & 0xff;\\n b[i++] = tl >>> 8 & 0xff;\\n b[i++] = tl & 0xff;\\n\\n // `time_mid`\\n var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff;\\n b[i++] = tmh >>> 8 & 0xff;\\n b[i++] = tmh & 0xff;\\n\\n // `time_high_and_version`\\n b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\\n b[i++] = tmh >>> 16 & 0xff;\\n\\n // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\\n b[i++] = clockseq >>> 8 | 0x80;\\n\\n // `clock_seq_low`\\n b[i++] = clockseq & 0xff;\\n\\n // `node`\\n var node = options.node || _nodeId;\\n for (var n = 0; n < 6; n++) {\\n b[i + n] = node[n];\\n }\\n\\n return buf ? buf : unparse(b);\\n}\\n\\n// **`v4()` - Generate random UUID**\\n\\n// See https://github.com/broofa/node-uuid for API details\\nfunction v4(options, buf, offset) {\\n // Deprecated - 'format' argument, as supported in v1.2\\n var i = buf && offset || 0;\\n\\n if (typeof(options) == 'string') {\\n buf = options == 'binary' ? new Array(16) : null;\\n options = null;\\n }\\n options = options || {};\\n\\n var rnds = options.random || (options.rng || _rng)();\\n\\n // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\\n\\n // Copy bytes to buffer, if provided\\n if (buf) {\\n for (var ii = 0; ii < 16; ii++) {\\n buf[i + ii] = rnds[ii];\\n }\\n }\\n\\n return buf || unparse(rnds);\\n}\\n\\n// Export public API\\nvar uuid = v4;\\nuuid.v1 = v1;\\nuuid.v4 = v4;\\nuuid.parse = parse;\\nuuid.unparse = unparse;\\n\\nmodule.exports = uuid;\\n\\n\\n//# sourceURL=webpack:///./node_modules/uuid/uuid.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/varint/decode.js\":\n/*!***************************************!*\\\n !*** ./node_modules/varint/decode.js ***!\n \\***************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"module.exports = read\\n\\nvar MSB = 0x80\\n , REST = 0x7F\\n\\nfunction read(buf, offset) {\\n var res = 0\\n , offset = offset || 0\\n , shift = 0\\n , counter = offset\\n , b\\n , l = buf.length\\n\\n do {\\n if (counter >= l) {\\n read.bytes = 0\\n throw new RangeError('Could not decode varint')\\n }\\n b = buf[counter++]\\n res += shift < 28\\n ? (b & REST) << shift\\n : (b & REST) * Math.pow(2, shift)\\n shift += 7\\n } while (b >= MSB)\\n\\n read.bytes = counter - offset\\n\\n return res\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/varint/decode.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/varint/encode.js\":\n/*!***************************************!*\\\n !*** ./node_modules/varint/encode.js ***!\n \\***************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"module.exports = encode\\n\\nvar MSB = 0x80\\n , REST = 0x7F\\n , MSBALL = ~REST\\n , INT = Math.pow(2, 31)\\n\\nfunction encode(num, out, offset) {\\n out = out || []\\n offset = offset || 0\\n var oldOffset = offset\\n\\n while(num >= INT) {\\n out[offset++] = (num & 0xFF) | MSB\\n num /= 128\\n }\\n while(num & MSBALL) {\\n out[offset++] = (num & 0xFF) | MSB\\n num >>>= 7\\n }\\n out[offset] = num | 0\\n \\n encode.bytes = offset - oldOffset + 1\\n \\n return out\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/varint/encode.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/varint/index.js\":\n/*!**************************************!*\\\n !*** ./node_modules/varint/index.js ***!\n \\**************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"module.exports = {\\n encode: __webpack_require__(/*! ./encode.js */ \\\"./node_modules/varint/encode.js\\\")\\n , decode: __webpack_require__(/*! ./decode.js */ \\\"./node_modules/varint/decode.js\\\")\\n , encodingLength: __webpack_require__(/*! ./length.js */ \\\"./node_modules/varint/length.js\\\")\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/varint/index.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/varint/length.js\":\n/*!***************************************!*\\\n !*** ./node_modules/varint/length.js ***!\n \\***************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"\\nvar N1 = Math.pow(2, 7)\\nvar N2 = Math.pow(2, 14)\\nvar N3 = Math.pow(2, 21)\\nvar N4 = Math.pow(2, 28)\\nvar N5 = Math.pow(2, 35)\\nvar N6 = Math.pow(2, 42)\\nvar N7 = Math.pow(2, 49)\\nvar N8 = Math.pow(2, 56)\\nvar N9 = Math.pow(2, 63)\\n\\nmodule.exports = function (value) {\\n return (\\n value < N1 ? 1\\n : value < N2 ? 2\\n : value < N3 ? 3\\n : value < N4 ? 4\\n : value < N5 ? 5\\n : value < N6 ? 6\\n : value < N7 ? 7\\n : value < N8 ? 8\\n : value < N9 ? 9\\n : 10\\n )\\n}\\n\\n\\n//# sourceURL=webpack:///./node_modules/varint/length.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/webpack/buildin/amd-options.js\":\n/*!****************************************!*\\\n !*** (webpack)/buildin/amd-options.js ***!\n \\****************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"/* WEBPACK VAR INJECTION */(function(__webpack_amd_options__) {/* globals __webpack_amd_options__ */\\nmodule.exports = __webpack_amd_options__;\\n\\n/* WEBPACK VAR INJECTION */}.call(this, {}))\\n\\n//# sourceURL=webpack:///(webpack)/buildin/amd-options.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/webpack/buildin/global.js\":\n/*!***********************************!*\\\n !*** (webpack)/buildin/global.js ***!\n \\***********************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"var g;\\n\\n// This works in non-strict mode\\ng = (function() {\\n\\treturn this;\\n})();\\n\\ntry {\\n\\t// This works if eval is allowed (see CSP)\\n\\tg = g || new Function(\\\"return this\\\")();\\n} catch (e) {\\n\\t// This works if the window reference is available\\n\\tif (typeof window === \\\"object\\\") g = window;\\n}\\n\\n// g can still be undefined, but nothing to do about it...\\n// We return undefined, instead of nothing here, so it's\\n// easier to handle this case. if(!global) { ...}\\n\\nmodule.exports = g;\\n\\n\\n//# sourceURL=webpack:///(webpack)/buildin/global.js?\");\n\n/***/ }),\n\n/***/ \"./node_modules/webpack/buildin/module.js\":\n/*!***********************************!*\\\n !*** (webpack)/buildin/module.js ***!\n \\***********************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"module.exports = function(module) {\\n\\tif (!module.webpackPolyfill) {\\n\\t\\tmodule.deprecate = function() {};\\n\\t\\tmodule.paths = [];\\n\\t\\t// module.parent = undefined by default\\n\\t\\tif (!module.children) module.children = [];\\n\\t\\tObject.defineProperty(module, \\\"loaded\\\", {\\n\\t\\t\\tenumerable: true,\\n\\t\\t\\tget: function() {\\n\\t\\t\\t\\treturn module.l;\\n\\t\\t\\t}\\n\\t\\t});\\n\\t\\tObject.defineProperty(module, \\\"id\\\", {\\n\\t\\t\\tenumerable: true,\\n\\t\\t\\tget: function() {\\n\\t\\t\\t\\treturn module.i;\\n\\t\\t\\t}\\n\\t\\t});\\n\\t\\tmodule.webpackPolyfill = 1;\\n\\t}\\n\\treturn module;\\n};\\n\\n\\n//# sourceURL=webpack:///(webpack)/buildin/module.js?\");\n\n/***/ }),\n\n/***/ \"./src/CopyButton_react.jsx\":\n/*!**********************************!*\\\n !*** ./src/CopyButton_react.jsx ***!\n \\**********************************/\n/*! exports provided: CopyButton */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"CopyButton\\\", function() { return CopyButton; });\\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \\\"./node_modules/@babel/runtime/helpers/classCallCheck.js\\\");\\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0__);\\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \\\"./node_modules/@babel/runtime/helpers/createClass.js\\\");\\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1__);\\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \\\"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\\\");\\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2__);\\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \\\"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\\\");\\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3__);\\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \\\"./node_modules/@babel/runtime/helpers/inherits.js\\\");\\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4__);\\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! react */ \\\"./node_modules/react/index.js\\\");\\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_5__);\\n/* harmony import */ var _fortawesome_react_fontawesome__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @fortawesome/react-fontawesome */ \\\"./node_modules/@fortawesome/react-fontawesome/index.es.js\\\");\\n/* harmony import */ var _fortawesome_free_solid_svg_icons_faCheck__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @fortawesome/free-solid-svg-icons/faCheck */ \\\"./node_modules/@fortawesome/free-solid-svg-icons/faCheck.js\\\");\\n/* harmony import */ var _fortawesome_free_solid_svg_icons_faCheck__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_fortawesome_free_solid_svg_icons_faCheck__WEBPACK_IMPORTED_MODULE_7__);\\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./utils */ \\\"./src/utils.js\\\");\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nvar style = __webpack_require__(/*! style-loader!./style.less */ \\\"./node_modules/style-loader/index.js!./src/style.less\\\");\\n\\nvar CopyButton =\\n/*#__PURE__*/\\nfunction (_React$Component) {\\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_4___default()(CopyButton, _React$Component);\\n\\n function CopyButton(props) {\\n var _this;\\n\\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_0___default()(this, CopyButton);\\n\\n _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_2___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_3___default()(CopyButton).call(this, props));\\n _this.state = {\\n showCheck: false\\n };\\n return _this;\\n }\\n\\n _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_1___default()(CopyButton, [{\\n key: \\\"_onClick\\\",\\n value: function _onClick() {\\n var _this2 = this;\\n\\n Object(_utils__WEBPACK_IMPORTED_MODULE_8__[\\\"addToClipboard\\\"])(this.props.address);\\n this.setState({\\n showCheck: true\\n });\\n setTimeout(function () {\\n _this2.setState({\\n showCheck: false\\n });\\n }, 2000);\\n }\\n }, {\\n key: \\\"render\\\",\\n value: function render() {\\n var _this3 = this;\\n\\n var icon = this.state.showCheck ? _fortawesome_free_solid_svg_icons_faCheck__WEBPACK_IMPORTED_MODULE_7__[\\\"faCheck\\\"] : null;\\n return react__WEBPACK_IMPORTED_MODULE_5___default.a.createElement(\\\"div\\\", {\\n className: style.addressAndCheck\\n }, react__WEBPACK_IMPORTED_MODULE_5___default.a.createElement(\\\"div\\\", {\\n className: style.addressWrapper,\\n onClick: function onClick() {\\n return _this3._onClick();\\n }\\n }, react__WEBPACK_IMPORTED_MODULE_5___default.a.createElement(\\\"img\\\", {\\n src: \\\"https://i.imgur.com/zs8M8dg.png\\\",\\n alt: \\\"Wallet\\\"\\n }), react__WEBPACK_IMPORTED_MODULE_5___default.a.createElement(\\\"p\\\", {\\n className: style.address\\n }, \\\"\\\".concat(this.props.address.substr(0, 5), \\\"...\\\").concat(this.props.address.substr(-5)))), icon && react__WEBPACK_IMPORTED_MODULE_5___default.a.createElement(_fortawesome_react_fontawesome__WEBPACK_IMPORTED_MODULE_6__[\\\"FontAwesomeIcon\\\"], {\\n icon: icon\\n }));\\n }\\n }]);\\n\\n return CopyButton;\\n}(react__WEBPACK_IMPORTED_MODULE_5___default.a.Component);\\n;\\n\\n//# sourceURL=webpack:///./src/CopyButton_react.jsx?\");\n\n/***/ }),\n\n/***/ \"./src/ProfileHover.jsx\":\n/*!******************************!*\\\n !*** ./src/ProfileHover.jsx ***!\n \\******************************/\n/*! exports provided: default */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"default\\\", function() { return ProfileHover; });\\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/regenerator */ \\\"./node_modules/@babel/runtime/regenerator/index.js\\\");\\n/* harmony import */ var _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0__);\\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \\\"./node_modules/@babel/runtime/helpers/asyncToGenerator.js\\\");\\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1__);\\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ \\\"./node_modules/@babel/runtime/helpers/classCallCheck.js\\\");\\n/* harmony import */ var _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__);\\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @babel/runtime/helpers/createClass */ \\\"./node_modules/@babel/runtime/helpers/createClass.js\\\");\\n/* harmony import */ var _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__);\\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ \\\"./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js\\\");\\n/* harmony import */ var _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4__);\\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ \\\"./node_modules/@babel/runtime/helpers/getPrototypeOf.js\\\");\\n/* harmony import */ var _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5__);\\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @babel/runtime/helpers/inherits */ \\\"./node_modules/@babel/runtime/helpers/inherits.js\\\");\\n/* harmony import */ var _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6__);\\n/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @babel/runtime/helpers/assertThisInitialized */ \\\"./node_modules/@babel/runtime/helpers/assertThisInitialized.js\\\");\\n/* harmony import */ var _babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_7__);\\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! react */ \\\"./node_modules/react/index.js\\\");\\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_8__);\\n/* harmony import */ var _3box_lib_api__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! 3box/lib/api */ \\\"./node_modules/3box/lib/api.js\\\");\\n/* harmony import */ var _3box_lib_api__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_3box_lib_api__WEBPACK_IMPORTED_MODULE_9__);\\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./utils */ \\\"./src/utils.js\\\");\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\nvar _require = __webpack_require__(/*! ./html */ \\\"./src/html.jsx\\\")({\\n React: react__WEBPACK_IMPORTED_MODULE_8___default.a,\\n Fragment: react__WEBPACK_IMPORTED_MODULE_8__[\\\"Fragment\\\"]\\n}),\\n BaseTemplate = _require.BaseTemplate,\\n LoadingTemplate = _require.LoadingTemplate;\\n\\nvar ProfileHover =\\n/*#__PURE__*/\\nfunction (_React$PureComponent) {\\n _babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_6___default()(ProfileHover, _React$PureComponent);\\n\\n function ProfileHover(props) {\\n var _this;\\n\\n _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default()(this, ProfileHover);\\n\\n _this = _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_4___default()(this, _babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_5___default()(ProfileHover).call(this, props));\\n _this.state = {\\n profile: undefined,\\n verified: undefined,\\n adjustOrientation: undefined,\\n isMobile: false,\\n showHover: false,\\n hasWeb3Mobile: false,\\n copySuccessful: ''\\n };\\n _this.selector = react__WEBPACK_IMPORTED_MODULE_8___default.a.createRef();\\n _this.checkWindowSize = _this.checkWindowSize.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_7___default()(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_7___default()(_this)));\\n _this.handleShowHover = _this.handleShowHover.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_7___default()(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_7___default()(_this)));\\n _this.handleCopySuccessful = _this.handleCopySuccessful.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_7___default()(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_7___default()(_this)));\\n _this.checkHasWeb3Mobile = _this.checkHasWeb3Mobile.bind(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_7___default()(_babel_runtime_helpers_assertThisInitialized__WEBPACK_IMPORTED_MODULE_7___default()(_this)));\\n return _this;\\n }\\n\\n _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default()(ProfileHover, [{\\n key: \\\"componentDidCatch\\\",\\n value: function componentDidCatch(error, info) {\\n console.error({\\n error: error,\\n info: info\\n });\\n }\\n }, {\\n key: \\\"componentDidMount\\\",\\n value: function componentDidMount() {\\n this.setState({\\n isMobile: Object(_utils__WEBPACK_IMPORTED_MODULE_10__[\\\"checkIsMobile\\\"])()\\n });\\n this.checkHasWeb3Mobile();\\n\\n this._fetchProfile();\\n }\\n }, {\\n key: \\\"componentDidUpdate\\\",\\n value: function componentDidUpdate(prevProps) {\\n if (this.props.address !== prevProps.address) {\\n this._fetchProfile();\\n }\\n }\\n }, {\\n key: \\\"_fetchProfile\\\",\\n value: function () {\\n var _fetchProfile2 = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(\\n /*#__PURE__*/\\n _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default.a.mark(function _callee() {\\n var profile, verified;\\n return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default.a.wrap(function _callee$(_context) {\\n while (1) {\\n switch (_context.prev = _context.next) {\\n case 0:\\n _context.prev = 0;\\n _context.next = 3;\\n return Object(_3box_lib_api__WEBPACK_IMPORTED_MODULE_9__[\\\"getProfile\\\"])(this.props.address);\\n\\n case 3:\\n profile = _context.sent;\\n _context.next = 6;\\n return Object(_3box_lib_api__WEBPACK_IMPORTED_MODULE_9__[\\\"getVerifiedAccounts\\\"])(profile);\\n\\n case 6:\\n verified = _context.sent;\\n this.setState({\\n profile: profile,\\n verified: verified,\\n hasUpdated: false\\n });\\n _context.next = 13;\\n break;\\n\\n case 10:\\n _context.prev = 10;\\n _context.t0 = _context[\\\"catch\\\"](0);\\n console.error('3box profile fetch failed', _context.t0);\\n\\n case 13:\\n case \\\"end\\\":\\n return _context.stop();\\n }\\n }\\n }, _callee, this, [[0, 10]]);\\n }));\\n\\n function _fetchProfile() {\\n return _fetchProfile2.apply(this, arguments);\\n }\\n\\n return _fetchProfile;\\n }()\\n }, {\\n key: \\\"checkWindowSize\\\",\\n value: function checkWindowSize(isNotMobile) {\\n try {\\n var hasUpdated = this.state.hasUpdated;\\n\\n if (!hasUpdated && isNotMobile) {\\n var adjustOrientation = this.state.adjustOrientation;\\n var height = window.innerHeight;\\n var rect = this.selector.current.getBoundingClientRect();\\n var elHeight = rect.height;\\n var elY = rect.y;\\n var updateOrientation = adjustOrientation;\\n\\n if (elHeight + elY > height) {\\n updateOrientation = 'top';\\n } else if (elY < 0) {\\n updateOrientation = 'bottom';\\n }\\n\\n this.setState({\\n adjustOrientation: updateOrientation,\\n hasUpdated: true\\n });\\n }\\n } catch (error) {\\n console.error(error);\\n }\\n }\\n }, {\\n key: \\\"checkHasWeb3Mobile\\\",\\n value: function checkHasWeb3Mobile() {\\n var hasWeb3Mobile = Object(_utils__WEBPACK_IMPORTED_MODULE_10__[\\\"checkIsMobile\\\"])() && (typeof window.web3 !== 'undefined' || typeof window.ethereum !== 'undefined');\\n this.setState({\\n hasWeb3Mobile: hasWeb3Mobile\\n });\\n }\\n }, {\\n key: \\\"handleShowHover\\\",\\n value: function handleShowHover(isMobile) {\\n var _this2 = this;\\n\\n var _this$state = this.state,\\n showHover = _this$state.showHover,\\n hasUpdated = _this$state.hasUpdated;\\n if (isMobile) this.setState({\\n showHover: !showHover\\n }, function () {\\n if (!hasUpdated) _this2.checkWindowSize(true);\\n });\\n }\\n }, {\\n key: \\\"handleCopySuccessful\\\",\\n value: function handleCopySuccessful(field) {\\n var _this3 = this;\\n\\n this.setState({\\n copySuccessful: field\\n }, function () {\\n return setTimeout(function () {\\n _this3.setState({\\n copySuccessful: ''\\n });\\n }, 2000);\\n });\\n }\\n }, {\\n key: \\\"render\\\",\\n value: function render() {\\n var _this$props = this.props,\\n address = _this$props.address,\\n fullDisplay = _this$props.fullDisplay,\\n children = _this$props.children,\\n noTheme = _this$props.noTheme,\\n noImgs = _this$props.noImgs,\\n noProfileImg = _this$props.noProfileImg,\\n noCoverImg = _this$props.noCoverImg,\\n orientation = _this$props.orientation,\\n url = _this$props.url,\\n showName = _this$props.showName,\\n tileStyle = _this$props.tileStyle;\\n var _this$state2 = this.state,\\n profile = _this$state2.profile,\\n verified = _this$state2.verified,\\n adjustOrientation = _this$state2.adjustOrientation,\\n isMobile = _this$state2.isMobile,\\n showHover = _this$state2.showHover,\\n hasWeb3Mobile = _this$state2.hasWeb3Mobile,\\n copySuccessful = _this$state2.copySuccessful;\\n\\n if (address == null) {\\n return null;\\n }\\n\\n var opts = {\\n html: noTheme ? children : undefined,\\n noImgs: noImgs,\\n noProfileImg: noProfileImg,\\n noCoverImg: noCoverImg,\\n showName: showName,\\n tileStyle: tileStyle,\\n url: Object(_utils__WEBPACK_IMPORTED_MODULE_10__[\\\"formatUrl\\\"])(url),\\n orientation: adjustOrientation || orientation || 'right'\\n };\\n var addressDisplay = Object(_utils__WEBPACK_IMPORTED_MODULE_10__[\\\"getAddressDisplay\\\"])(address, fullDisplay ? 'full' : undefined);\\n var data = Object(_utils__WEBPACK_IMPORTED_MODULE_10__[\\\"formatProfileData\\\"])(profile, verified, address, addressDisplay);\\n\\n if (profile == null) {\\n return react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement(LoadingTemplate, {\\n data: data,\\n opts: opts,\\n isMobile: isMobile,\\n showHover: showHover,\\n handleShowHover: this.handleShowHover,\\n ref: this.selector,\\n checkWindowSize: this.checkWindowSize\\n });\\n }\\n\\n if (profile.status === 'error') {\\n return react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement(BaseTemplate, {\\n data: data,\\n opts: opts,\\n id: address,\\n isMobile: isMobile,\\n showHover: showHover,\\n checkWindowSize: this.checkWindowSize,\\n ref: this.selector,\\n handleShowHover: this.handleShowHover\\n });\\n }\\n\\n return react__WEBPACK_IMPORTED_MODULE_8___default.a.createElement(BaseTemplate, {\\n data: data,\\n opts: opts,\\n id: address,\\n hasWeb3Mobile: hasWeb3Mobile,\\n isMobile: isMobile,\\n showHover: showHover,\\n ref: this.selector,\\n handleShowHover: this.handleShowHover,\\n checkWindowSize: this.checkWindowSize,\\n handleCopySuccessful: this.handleCopySuccessful,\\n copySuccessful: copySuccessful\\n });\\n }\\n }]);\\n\\n return ProfileHover;\\n}(react__WEBPACK_IMPORTED_MODULE_8___default.a.PureComponent);\\n\\n\\n\\n//# sourceURL=webpack:///./src/ProfileHover.jsx?\");\n\n/***/ }),\n\n/***/ \"./src/html.jsx\":\n/*!**********************!*\\\n !*** ./src/html.jsx ***!\n \\**********************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\neval(\"var _require = __webpack_require__(/*! ./CopyButton */ \\\"./src/CopyButton_react.jsx\\\"),\\n CopyButton = _require.CopyButton;\\n\\nvar _require2 = __webpack_require__(/*! ./utils */ \\\"./src/utils.js\\\"),\\n addToClipBoardLinks = _require2.addToClipBoardLinks;\\n\\nvar _require3 = __webpack_require__(/*! @fortawesome/react-fontawesome */ \\\"./node_modules/@fortawesome/react-fontawesome/index.es.js\\\"),\\n FontAwesomeIcon = _require3.FontAwesomeIcon;\\n\\nvar _require4 = __webpack_require__(/*! @fortawesome/free-solid-svg-icons/faCheck */ \\\"./node_modules/@fortawesome/free-solid-svg-icons/faCheck.js\\\"),\\n faCheck = _require4.faCheck;\\n\\nvar style = __webpack_require__(/*! style-loader!./style.less */ \\\"./node_modules/style-loader/index.js!./src/style.less\\\");\\n\\nmodule.exports = function (_ref) {\\n var dom = _ref.dom,\\n React = _ref.React,\\n Fragment = _ref.Fragment;\\n\\n var BaseTemplate = function BaseTemplate(_ref2, ref) {\\n var _ref2$data = _ref2.data,\\n data = _ref2$data === void 0 ? {} : _ref2$data,\\n _ref2$opts = _ref2.opts,\\n opts = _ref2$opts === void 0 ? {} : _ref2$opts,\\n checkWindowSize = _ref2.checkWindowSize,\\n showHover = _ref2.showHover,\\n isMobile = _ref2.isMobile,\\n handleShowHover = _ref2.handleShowHover,\\n hasWeb3Mobile = _ref2.hasWeb3Mobile,\\n handleCopySuccessful = _ref2.handleCopySuccessful,\\n copySuccessful = _ref2.copySuccessful;\\n return React.createElement(\\\"div\\\", {\\n className: \\\"\\\".concat(style.boxAddressWrap, \\\" \\\").concat(!isMobile ? style.isDesktop : ''),\\n onMouseEnter: function onMouseEnter() {\\n return checkWindowSize(!isMobile);\\n }\\n }, opts.html ? React.createElement(Fragment, null, opts.html, React.createElement(HoverTemplate, {\\n data: data,\\n opts: opts,\\n ref: ref,\\n showHover: showHover,\\n hasWeb3Mobile: hasWeb3Mobile,\\n handleCopySuccessful: handleCopySuccessful,\\n copySuccessful: copySuccessful\\n })) : React.createElement(AddressBarTemplate, {\\n data: data,\\n opts: opts,\\n ref: ref,\\n showHover: showHover,\\n isMobile: isMobile,\\n handleShowHover: handleShowHover,\\n handleCopySuccessful: handleCopySuccessful,\\n hasWeb3Mobile: hasWeb3Mobile,\\n copySuccessful: copySuccessful\\n }), showHover && React.createElement(\\\"div\\\", {\\n className: style.onClickOutsideMobile,\\n onClick: function onClick() {\\n return handleShowHover(true);\\n }\\n }));\\n };\\n\\n if (React) BaseTemplate = React.forwardRef(BaseTemplate);\\n\\n var HoverTemplate = function HoverTemplate(_ref3, ref) {\\n var _ref3$data = _ref3.data,\\n data = _ref3$data === void 0 ? {} : _ref3$data,\\n _ref3$opts = _ref3.opts,\\n opts = _ref3$opts === void 0 ? {} : _ref3$opts,\\n showHover = _ref3.showHover,\\n hasWeb3Mobile = _ref3.hasWeb3Mobile,\\n handleCopySuccessful = _ref3.handleCopySuccessful,\\n copySuccessful = _ref3.copySuccessful,\\n loading = _ref3.loading;\\n return React.createElement(\\\"div\\\", {\\n className: \\\"\\\".concat(style.hoverWrap, \\\" \\\").concat(style[opts.orientation || 'right'], \\\" \\\").concat(showHover ? style.showHoverMobile : '')\\n }, React.createElement(\\\"div\\\", {\\n className: style.hoverProfile,\\n ref: ref\\n }, loading && React.createElement(\\\"div\\\", {\\n className: style.loadingText\\n }, \\\" Loading ... \\\"), data.coverPhoto && React.createElement(CoverPictureTemplate, {\\n data: data,\\n opts: opts\\n }), data.imgSrc && React.createElement(ProfilePictureTemplate, {\\n data: data,\\n opts: opts\\n }), data.name && React.createElement(NameTemplate, {\\n data: data,\\n hasWeb3Mobile: hasWeb3Mobile,\\n handleCopySuccessful: handleCopySuccessful,\\n copySuccessful: copySuccessful\\n }), data.description && React.createElement(DescriptionTemplate, {\\n data: data\\n }), (data.twitter || data.github || data.website) && React.createElement(\\\"div\\\", {\\n className: style.profileDetails\\n }, data.twitter && React.createElement(TwitterTemplate, {\\n data: data,\\n hasWeb3Mobile: hasWeb3Mobile,\\n handleCopySuccessful: handleCopySuccessful,\\n copySuccessful: copySuccessful\\n }), data.github && React.createElement(GithubTemplate, {\\n data: data,\\n hasWeb3Mobile: hasWeb3Mobile,\\n handleCopySuccessful: handleCopySuccessful,\\n copySuccessful: copySuccessful\\n }), data.website && React.createElement(WebsiteTemplate, {\\n data: data,\\n hasWeb3Mobile: hasWeb3Mobile,\\n handleCopySuccessful: handleCopySuccessful,\\n copySuccessful: copySuccessful\\n })), React.createElement(HoverFooterTemplate, {\\n data: data,\\n hasWeb3Mobile: hasWeb3Mobile,\\n handleCopySuccessful: handleCopySuccessful,\\n copySuccessful: copySuccessful\\n })));\\n };\\n\\n if (React) HoverTemplate = React.forwardRef(HoverTemplate);\\n\\n var HoverFooterTemplate = function HoverFooterTemplate(_ref4) {\\n var _ref4$data = _ref4.data,\\n data = _ref4$data === void 0 ? {} : _ref4$data,\\n hasWeb3Mobile = _ref4.hasWeb3Mobile,\\n handleCopySuccessful = _ref4.handleCopySuccessful,\\n copySuccessful = _ref4.copySuccessful;\\n return React.createElement(\\\"div\\\", {\\n className: style.boxLink\\n }, React.createElement(CopyButton, {\\n address: data.address\\n }), hasWeb3Mobile ? React.createElement(HoverFooterWeb3MobileLink, {\\n data: data,\\n handleCopySuccessful: handleCopySuccessful\\n }) : React.createElement(HoverFooterLink, {\\n data: data\\n }), copySuccessful === 'footer' && React.createElement(FontAwesomeIcon, {\\n icon: faCheck,\\n className: style.profileCheck\\n }));\\n };\\n\\n var HoverFooterWeb3MobileLink = function HoverFooterWeb3MobileLink(_ref5) {\\n var data = _ref5.data,\\n handleCopySuccessful = _ref5.handleCopySuccessful;\\n return React.createElement(\\\"p\\\", {\\n onClick: function onClick() {\\n return addToClipBoardLinks(\\\"https://3box.io/\\\".concat(data.address), handleCopySuccessful, 'footer');\\n },\\n className: style.boxLinkText\\n }, \\\"View 3Box\\\", React.createElement(\\\"img\\\", {\\n src: \\\"https://i.imgur.com/bT9PQlL.png\\\",\\n className: style.logo\\n }));\\n };\\n\\n var HoverFooterLink = function HoverFooterLink(_ref6) {\\n var data = _ref6.data;\\n return React.createElement(\\\"a\\\", {\\n className: style.boxLinkText,\\n href: \\\"https://3box.io/\\\".concat(data.address),\\n target: \\\"_blank\\\",\\n rel: \\\"noopener noreferrer\\\"\\n }, \\\"View 3Box\\\", React.createElement(\\\"img\\\", {\\n src: \\\"https://i.imgur.com/bT9PQlL.png\\\",\\n className: style.logo\\n }));\\n };\\n\\n var CoverPictureTemplate = function CoverPictureTemplate(_ref7) {\\n var _ref7$data = _ref7.data,\\n data = _ref7$data === void 0 ? {} : _ref7$data,\\n _ref7$opts = _ref7.opts,\\n opts = _ref7$opts === void 0 ? {} : _ref7$opts;\\n return React.createElement(Fragment, null, !opts.noCoverImg && !opts.noImgs && React.createElement(\\\"div\\\", {\\n className: style.coverPicture\\n }, data.coverPhoto ? React.createElement(\\\"img\\\", {\\n src: data.coverPhoto,\\n className: style.coverPicture_image\\n }) : React.createElement(\\\"div\\\", {\\n className: style.coverPicture_image\\n })));\\n };\\n\\n var AddressBarTemplate = function AddressBarTemplate(_ref8, ref) {\\n var _ref8$data = _ref8.data,\\n data = _ref8$data === void 0 ? {} : _ref8$data,\\n _ref8$opts = _ref8.opts,\\n opts = _ref8$opts === void 0 ? {} : _ref8$opts,\\n showHover = _ref8.showHover,\\n isMobile = _ref8.isMobile,\\n handleShowHover = _ref8.handleShowHover,\\n hasWeb3Mobile = _ref8.hasWeb3Mobile,\\n handleCopySuccessful = _ref8.handleCopySuccessful,\\n copySuccessful = _ref8.copySuccessful,\\n loading = _ref8.loading;\\n return React.createElement(\\\"div\\\", {\\n className: \\\"\\\".concat(style.boxAddress, \\\" \\\").concat(data.addressDisplay.length >= 15 ? style.boxAddressFull : '', \\\" \\\").concat(opts.tileStyle ? style.tileStyle : '')\\n }, React.createElement(\\\"div\\\", {\\n className: \\\"\\\".concat(style.boxAddressContentWrapper, \\\" \\\").concat(opts.url ? style.boxAddressLink : ''),\\n onClick: function onClick() {\\n if (opts.url) window.location = \\\"\\\".concat(opts.url);\\n }\\n }, React.createElement(\\\"div\\\", {\\n className: style.boxImg\\n }, data.imgSrc && React.createElement(\\\"img\\\", {\\n src: data.imgSrc\\n })), React.createElement(\\\"div\\\", {\\n className: style.boxShortAddress\\n }, opts.showName && data.name ? data.name : data.addressDisplay)), isMobile && React.createElement(\\\"button\\\", {\\n className: style.openHover_mobile,\\n onClick: function onClick() {\\n return handleShowHover(true);\\n }\\n }, React.createElement(\\\"div\\\", {\\n className: \\\"far fa-clone clone\\\"\\n })), React.createElement(HoverTemplate, {\\n data: data,\\n opts: opts,\\n ref: ref,\\n showHover: showHover,\\n hasWeb3Mobile: hasWeb3Mobile,\\n handleCopySuccessful: handleCopySuccessful,\\n copySuccessful: copySuccessful,\\n loading: loading\\n }));\\n };\\n\\n if (React) AddressBarTemplate = React.forwardRef(AddressBarTemplate);\\n\\n var ProfilePictureTemplate = function ProfilePictureTemplate(_ref9) {\\n var _ref9$data = _ref9.data,\\n data = _ref9$data === void 0 ? {} : _ref9$data,\\n _ref9$opts = _ref9.opts,\\n opts = _ref9$opts === void 0 ? {} : _ref9$opts;\\n return React.createElement(Fragment, null, !opts.noProfileImg && !opts.noImgs && React.createElement(\\\"div\\\", {\\n className: \\\"\\\".concat(style.profileValuePicture, \\\" \\\").concat(opts.noCoverImg || !data.coverPhoto ? style.noMargin : '')\\n }, React.createElement(\\\"img\\\", {\\n className: \\\"\\\".concat(style.profileValuePicture_image),\\n src: data.imgSrc,\\n height: \\\"32px\\\",\\n width: \\\"32px\\\"\\n })), opts.noProfileImg && !opts.noImgs && React.createElement(\\\"div\\\", {\\n className: style.noProfileImgSpacer\\n }));\\n };\\n\\n var DescriptionTemplate = function DescriptionTemplate(_ref10) {\\n var _ref10$data = _ref10.data,\\n data = _ref10$data === void 0 ? {} : _ref10$data;\\n return React.createElement(\\\"div\\\", {\\n className: style.profileDescription\\n }, React.createElement(\\\"p\\\", {\\n className: style.profileDescription_text\\n }, data.description));\\n };\\n\\n var NameTemplate = function NameTemplate(_ref11) {\\n var _ref11$data = _ref11.data,\\n data = _ref11$data === void 0 ? {} : _ref11$data,\\n hasWeb3Mobile = _ref11.hasWeb3Mobile,\\n handleCopySuccessful = _ref11.handleCopySuccessful,\\n copySuccessful = _ref11.copySuccessful;\\n return React.createElement(\\\"div\\\", {\\n className: \\\"\\\\n \\\".concat(style.profileValueName, \\\" \\\\n \\\").concat(!data.description && !data.twitter && !data.github && !data.website ? style.noContent : '', \\\"\\\\n \\\")\\n }, hasWeb3Mobile ? React.createElement(\\\"p\\\", {\\n onClick: function onClick() {\\n return addToClipBoardLinks(\\\"https://3box.io/\\\".concat(data.address), handleCopySuccessful, 'threeBoxProfile');\\n },\\n className: style.profileText\\n }, data.name) : React.createElement(\\\"a\\\", {\\n href: \\\"https://3box.io/\\\".concat(data.address),\\n className: style.profileText,\\n target: \\\"_blank\\\",\\n rel: \\\"noopener noreferrer\\\"\\n }, data.name), data.emoji && React.createElement(\\\"span\\\", null, data.emoji), copySuccessful === 'threeBoxProfile' && React.createElement(FontAwesomeIcon, {\\n icon: faCheck\\n }));\\n };\\n\\n var WebsiteTemplate = function WebsiteTemplate(_ref12) {\\n var _ref12$data = _ref12.data,\\n data = _ref12$data === void 0 ? {} : _ref12$data,\\n hasWeb3Mobile = _ref12.hasWeb3Mobile,\\n handleCopySuccessful = _ref12.handleCopySuccessful,\\n copySuccessful = _ref12.copySuccessful;\\n return React.createElement(\\\"div\\\", {\\n className: style.profileValue\\n }, React.createElement(\\\"p\\\", {\\n className: style.profileValueKey\\n }, \\\"Website\\\"), React.createElement(\\\"span\\\", {\\n className: style.profileText\\n }, hasWeb3Mobile ? React.createElement(SocialWeb3Link, {\\n handleCopySuccessful: handleCopySuccessful,\\n link: data.websiteUrl,\\n field: \\\"website\\\",\\n handle: data.website\\n }) : React.createElement(\\\"a\\\", {\\n href: data.websiteUrl,\\n target: \\\"_blank\\\"\\n }, data.website)), copySuccessful === 'website' && React.createElement(FontAwesomeIcon, {\\n icon: faCheck\\n }));\\n };\\n\\n var GithubTemplate = function GithubTemplate(_ref13) {\\n var _ref13$data = _ref13.data,\\n data = _ref13$data === void 0 ? {} : _ref13$data,\\n hasWeb3Mobile = _ref13.hasWeb3Mobile,\\n handleCopySuccessful = _ref13.handleCopySuccessful,\\n copySuccessful = _ref13.copySuccessful;\\n return React.createElement(\\\"div\\\", {\\n className: style.profileValue\\n }, React.createElement(\\\"p\\\", {\\n className: style.profileValueKey\\n }, \\\"Github\\\"), React.createElement(\\\"span\\\", {\\n className: style.profileText\\n }, hasWeb3Mobile ? React.createElement(SocialWeb3Link, {\\n handleCopySuccessful: handleCopySuccessful,\\n link: 'https://www.github.com/' + data.github,\\n field: \\\"github\\\",\\n handle: data.github\\n }) : React.createElement(\\\"a\\\", {\\n href: 'https://www.github.com/' + data.github,\\n target: \\\"_blank\\\"\\n }, data.github)), copySuccessful === 'github' && React.createElement(FontAwesomeIcon, {\\n icon: faCheck\\n }));\\n };\\n\\n var TwitterTemplate = function TwitterTemplate(_ref14) {\\n var _ref14$data = _ref14.data,\\n data = _ref14$data === void 0 ? {} : _ref14$data,\\n hasWeb3Mobile = _ref14.hasWeb3Mobile,\\n copySuccessful = _ref14.copySuccessful,\\n handleCopySuccessful = _ref14.handleCopySuccessful;\\n return React.createElement(\\\"div\\\", {\\n className: style.profileValue\\n }, React.createElement(\\\"p\\\", {\\n className: style.profileValueKey\\n }, \\\"Twitter\\\"), React.createElement(\\\"span\\\", {\\n className: style.profileText\\n }, hasWeb3Mobile ? React.createElement(SocialWeb3Link, {\\n handleCopySuccessful: handleCopySuccessful,\\n link: \\\"https://www.twitter.com/\\\".concat(data.twitter),\\n field: \\\"twitter\\\",\\n handle: \\\"@\\\".concat(data.twitter)\\n }) : React.createElement(\\\"a\\\", {\\n href: 'https://www.twitter.com/' + data.twitter,\\n target: \\\"_blank\\\"\\n }, \\\"@\\\".concat(data.twitter))), copySuccessful === 'twitter' && React.createElement(FontAwesomeIcon, {\\n icon: faCheck\\n }));\\n };\\n\\n var SocialWeb3Link = function SocialWeb3Link(_ref15) {\\n var handleCopySuccessful = _ref15.handleCopySuccessful,\\n link = _ref15.link,\\n field = _ref15.field,\\n handle = _ref15.handle;\\n return React.createElement(\\\"p\\\", {\\n onClick: function onClick() {\\n return addToClipBoardLinks(link, handleCopySuccessful, field);\\n }\\n }, handle);\\n };\\n\\n var LoadingTemplate = function LoadingTemplate(_ref16, ref) {\\n var _ref16$data = _ref16.data,\\n data = _ref16$data === void 0 ? {} : _ref16$data,\\n _ref16$opts = _ref16.opts,\\n opts = _ref16$opts === void 0 ? {} : _ref16$opts,\\n showHover = _ref16.showHover,\\n isMobile = _ref16.isMobile,\\n checkWindowSize = _ref16.checkWindowSize;\\n return React.createElement(\\\"div\\\", {\\n className: \\\"\\\".concat(style.boxAddressWrap, \\\" \\\").concat(!isMobile ? style.isDesktop : ''),\\n onMouseEnter: function onMouseEnter() {\\n return checkWindowSize(!isMobile);\\n }\\n }, opts.html ? React.createElement(Fragment, null, React.createElement(\\\"div\\\", {\\n id: \\\"orginal_html_f1kx\\\"\\n }, opts.html), React.createElement(HoverTemplate, {\\n data: data,\\n opts: opts,\\n showHover: showHover,\\n loading: true,\\n ref: ref\\n })) : React.createElement(AddressBarTemplate, {\\n data: data,\\n opts: opts,\\n isMobile: isMobile,\\n loading: true,\\n ref: ref\\n }));\\n };\\n\\n if (React) LoadingTemplate = React.forwardRef(LoadingTemplate);\\n return {\\n BaseTemplate: BaseTemplate,\\n LoadingTemplate: LoadingTemplate\\n };\\n};\\n\\n//# sourceURL=webpack:///./src/html.jsx?\");\n\n/***/ }),\n\n/***/ \"./src/utils.js\":\n/*!**********************!*\\\n !*** ./src/utils.js ***!\n \\**********************/\n/*! exports provided: getAddressDisplay, formatUrl, addToClipBoardLinks, addToClipboard, formatProfileData, checkIsMobile */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\neval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"getAddressDisplay\\\", function() { return getAddressDisplay; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"formatUrl\\\", function() { return formatUrl; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"addToClipBoardLinks\\\", function() { return addToClipBoardLinks; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"addToClipboard\\\", function() { return addToClipboard; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"formatProfileData\\\", function() { return formatProfileData; });\\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \\\"checkIsMobile\\\", function() { return checkIsMobile; });\\n/* harmony import */ var ethereum_blockies_base64__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ethereum-blockies-base64 */ \\\"./node_modules/ethereum-blockies-base64/dist/main.js\\\");\\n/* harmony import */ var ethereum_blockies_base64__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(ethereum_blockies_base64__WEBPACK_IMPORTED_MODULE_0__);\\n/* harmony import */ var _fortawesome_fontawesome_svg_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @fortawesome/fontawesome-svg-core */ \\\"./node_modules/@fortawesome/fontawesome-svg-core/index.es.js\\\");\\n/* harmony import */ var _fortawesome_free_solid_svg_icons_faCheck__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @fortawesome/free-solid-svg-icons/faCheck */ \\\"./node_modules/@fortawesome/free-solid-svg-icons/faCheck.js\\\");\\n/* harmony import */ var _fortawesome_free_solid_svg_icons_faCheck__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_fortawesome_free_solid_svg_icons_faCheck__WEBPACK_IMPORTED_MODULE_2__);\\n/* harmony import */ var _fortawesome_free_solid_svg_icons_faArrowRight__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @fortawesome/free-solid-svg-icons/faArrowRight */ \\\"./node_modules/@fortawesome/free-solid-svg-icons/faArrowRight.js\\\");\\n/* harmony import */ var _fortawesome_free_solid_svg_icons_faArrowRight__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_fortawesome_free_solid_svg_icons_faArrowRight__WEBPACK_IMPORTED_MODULE_3__);\\n/* harmony import */ var _fortawesome_free_solid_svg_icons_faGlobeAmericas__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @fortawesome/free-solid-svg-icons/faGlobeAmericas */ \\\"./node_modules/@fortawesome/free-solid-svg-icons/faGlobeAmericas.js\\\");\\n/* harmony import */ var _fortawesome_free_solid_svg_icons_faGlobeAmericas__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_fortawesome_free_solid_svg_icons_faGlobeAmericas__WEBPACK_IMPORTED_MODULE_4__);\\n/* harmony import */ var _fortawesome_free_brands_svg_icons_faTwitter__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @fortawesome/free-brands-svg-icons/faTwitter */ \\\"./node_modules/@fortawesome/free-brands-svg-icons/faTwitter.js\\\");\\n/* harmony import */ var _fortawesome_free_brands_svg_icons_faTwitter__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_fortawesome_free_brands_svg_icons_faTwitter__WEBPACK_IMPORTED_MODULE_5__);\\n/* harmony import */ var _fortawesome_free_brands_svg_icons_faGithub__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @fortawesome/free-brands-svg-icons/faGithub */ \\\"./node_modules/@fortawesome/free-brands-svg-icons/faGithub.js\\\");\\n/* harmony import */ var _fortawesome_free_brands_svg_icons_faGithub__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_fortawesome_free_brands_svg_icons_faGithub__WEBPACK_IMPORTED_MODULE_6__);\\n/* harmony import */ var _fortawesome_free_regular_svg_icons_faClone__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @fortawesome/free-regular-svg-icons/faClone */ \\\"./node_modules/@fortawesome/free-regular-svg-icons/faClone.js\\\");\\n/* harmony import */ var _fortawesome_free_regular_svg_icons_faClone__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_fortawesome_free_regular_svg_icons_faClone__WEBPACK_IMPORTED_MODULE_7__);\\n\\n\\n\\n\\n\\n\\n\\n\\n_fortawesome_fontawesome_svg_core__WEBPACK_IMPORTED_MODULE_1__[\\\"library\\\"].add(_fortawesome_free_solid_svg_icons_faCheck__WEBPACK_IMPORTED_MODULE_2__[\\\"faCheck\\\"], _fortawesome_free_solid_svg_icons_faArrowRight__WEBPACK_IMPORTED_MODULE_3__[\\\"faArrowRight\\\"], _fortawesome_free_brands_svg_icons_faGithub__WEBPACK_IMPORTED_MODULE_6__[\\\"faGithub\\\"], _fortawesome_free_brands_svg_icons_faTwitter__WEBPACK_IMPORTED_MODULE_5__[\\\"faTwitter\\\"], _fortawesome_free_solid_svg_icons_faGlobeAmericas__WEBPACK_IMPORTED_MODULE_4__[\\\"faGlobeAmericas\\\"], _fortawesome_free_regular_svg_icons_faClone__WEBPACK_IMPORTED_MODULE_7__[\\\"faClone\\\"]);\\n_fortawesome_fontawesome_svg_core__WEBPACK_IMPORTED_MODULE_1__[\\\"dom\\\"].watch();\\nvar getAddressDisplay = function getAddressDisplay(address, display) {\\n var displayShort = display !== 'full';\\n var addressDisplay = displayShort ? getShortAddress(address) : address;\\n return addressDisplay.toLowerCase();\\n};\\n\\nvar getShortAddress = function getShortAddress(address) {\\n return address.substr(0, 6) + '...' + address.substr(-4);\\n};\\n\\nvar getImgSrc = function getImgSrc(profile, address, type) {\\n try {\\n if (!profile.image && type === 'image' && address) return ethereum_blockies_base64__WEBPACK_IMPORTED_MODULE_0___default()(address);\\n if (!profile.coverPhoto && type === 'coverPhoto' && address) return null;\\n var hash = profile[type] ? profile[type][0].contentUrl[\\\"/\\\"] : '';\\n return \\\"https://ipfs.infura.io/ipfs/\\\".concat(hash);\\n } catch (error) {\\n console.log(error);\\n }\\n};\\n\\nvar formatUrl = function formatUrl(url) {\\n if (!url) {\\n return undefined;\\n }\\n\\n return url.includes('http') ? url : \\\"http://\\\".concat(url);\\n};\\nvar addToClipBoardLinks = function addToClipBoardLinks(link, copySuccessfulFunc, key) {\\n addToClipboard(link);\\n copySuccessfulFunc(key);\\n};\\nvar addToClipboard = function addToClipboard(address) {\\n var el = document.createElement('textarea');\\n el.readOnly = true; // prevent zoom on iPhone\\n\\n el.value = address;\\n document.body.appendChild(el);\\n var selection;\\n var range;\\n\\n if (navigator.userAgent.match(/ipad|iphone/i)) {\\n range = document.createRange();\\n range.selectNodeContents(el);\\n selection = window.getSelection();\\n selection.removeAllRanges();\\n selection.addRange(range);\\n el.setSelectionRange(0, 999999);\\n } else {\\n el.select();\\n }\\n\\n document.execCommand('copy');\\n document.body.removeChild(el);\\n};\\nvar formatProfileData = function formatProfileData() {\\n var profile = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\\n var verified = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\\n var address = arguments.length > 2 ? arguments[2] : undefined;\\n var addressDisplay = arguments.length > 3 ? arguments[3] : undefined;\\n\\n try {\\n return {\\n imgSrc: getImgSrc(profile, address, 'image'),\\n address: address,\\n addressDisplay: addressDisplay,\\n github: verified.github ? verified.github.username : undefined,\\n twitter: verified.twitter ? verified.twitter.username : undefined,\\n emoji: profile.emoji,\\n name: profile.name,\\n website: profile.website,\\n description: profile.description,\\n coverPhoto: getImgSrc(profile, address, 'coverPhoto'),\\n websiteUrl: formatUrl(profile.website)\\n };\\n } catch (e) {\\n return {\\n address: address,\\n addressDisplay: addressDisplay.toLowerCase(),\\n imgSrc: ethereum_blockies_base64__WEBPACK_IMPORTED_MODULE_0___default()(address)\\n };\\n }\\n};\\nvar checkIsMobile = function checkIsMobile() {\\n try {\\n if (typeof window.orientation !== \\\"undefined\\\" || navigator.userAgent.indexOf('IEMobile') !== -1) {\\n return true;\\n }\\n\\n ;\\n return false;\\n } catch (error) {\\n console.error(error);\\n }\\n};\\n\\n//# sourceURL=webpack:///./src/utils.js?\");\n\n/***/ }),\n\n/***/ 0:\n/*!************************!*\\\n !*** buffer (ignored) ***!\n \\************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"/* (ignored) */\\n\\n//# sourceURL=webpack:///buffer_(ignored)?\");\n\n/***/ }),\n\n/***/ 1:\n/*!************************!*\\\n !*** crypto (ignored) ***!\n \\************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"/* (ignored) */\\n\\n//# sourceURL=webpack:///crypto_(ignored)?\");\n\n/***/ }),\n\n/***/ 2:\n/*!************************!*\\\n !*** crypto (ignored) ***!\n \\************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"/* (ignored) */\\n\\n//# sourceURL=webpack:///crypto_(ignored)?\");\n\n/***/ }),\n\n/***/ 3:\n/*!********************************!*\\\n !*** xmlhttprequest (ignored) ***!\n \\********************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\neval(\"/* (ignored) */\\n\\n//# sourceURL=webpack:///xmlhttprequest_(ignored)?\");\n\n/***/ })\n\n/******/ });\n},{}],69:[function(require,module,exports){\n(function (process){\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar printWarning = function() {};\n\nif (process.env.NODE_ENV !== 'production') {\n var ReactPropTypesSecret = require('./lib/ReactPropTypesSecret');\n var loggedTypeFailures = {};\n var has = Function.call.bind(Object.prototype.hasOwnProperty);\n\n printWarning = function(text) {\n var message = 'Warning: ' + text;\n if (typeof console !== 'undefined') {\n console.error(message);\n }\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n throw new Error(message);\n } catch (x) {}\n };\n}\n\n/**\n * Assert that the values match with the type specs.\n * Error messages are memorized and will only be shown once.\n *\n * @param {object} typeSpecs Map of name to a ReactPropType\n * @param {object} values Runtime values that need to be type-checked\n * @param {string} location e.g. \"prop\", \"context\", \"child context\"\n * @param {string} componentName Name of the component for error messages.\n * @param {?Function} getStack Returns the component stack.\n * @private\n */\nfunction checkPropTypes(typeSpecs, values, location, componentName, getStack) {\n if (process.env.NODE_ENV !== 'production') {\n for (var typeSpecName in typeSpecs) {\n if (has(typeSpecs, typeSpecName)) {\n var error;\n // Prop type validation may throw. In case they do, we don't want to\n // fail the render phase where it didn't fail before. So we log it.\n // After these have been cleaned up, we'll let them throw.\n try {\n // This is intentionally an invariant that gets caught. It's the same\n // behavior as without this statement except with a better message.\n if (typeof typeSpecs[typeSpecName] !== 'function') {\n var err = Error(\n (componentName || 'React class') + ': ' + location + ' type `' + typeSpecName + '` is invalid; ' +\n 'it must be a function, usually from the `prop-types` package, but received `' + typeof typeSpecs[typeSpecName] + '`.'\n );\n err.name = 'Invariant Violation';\n throw err;\n }\n error = typeSpecs[typeSpecName](values, typeSpecName, componentName, location, null, ReactPropTypesSecret);\n } catch (ex) {\n error = ex;\n }\n if (error && !(error instanceof Error)) {\n printWarning(\n (componentName || 'React class') + ': type specification of ' +\n location + ' `' + typeSpecName + '` is invalid; the type checker ' +\n 'function must return `null` or an `Error` but returned a ' + typeof error + '. ' +\n 'You may have forgotten to pass an argument to the type checker ' +\n 'creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and ' +\n 'shape all require an argument).'\n );\n }\n if (error instanceof Error && !(error.message in loggedTypeFailures)) {\n // Only monitor this failure once because there tends to be a lot of the\n // same error.\n loggedTypeFailures[error.message] = true;\n\n var stack = getStack ? getStack() : '';\n\n printWarning(\n 'Failed ' + location + ' type: ' + error.message + (stack != null ? stack : '')\n );\n }\n }\n }\n }\n}\n\n/**\n * Resets warning cache when testing.\n *\n * @private\n */\ncheckPropTypes.resetWarningCache = function() {\n if (process.env.NODE_ENV !== 'production') {\n loggedTypeFailures = {};\n }\n}\n\nmodule.exports = checkPropTypes;\n\n}).call(this,require('_process'))\n},{\"./lib/ReactPropTypesSecret\":70,\"_process\":67}],70:[function(require,module,exports){\n/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nvar ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';\n\nmodule.exports = ReactPropTypesSecret;\n\n},{}],71:[function(require,module,exports){\n(function (process){\n/** @license React v16.13.1\n * react-dom.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n'use strict';\n\nvar React = require('react');\nvar _assign = require('object-assign');\nvar Scheduler = require('scheduler');\nvar checkPropTypes = require('prop-types/checkPropTypes');\nvar tracing = require('scheduler/tracing');\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED; // Prevent newer renderers from RTE when used with older react package versions.\n// Current owner and dispatcher used to share the same ref,\n// but PR #14548 split them out to better support the react-debug-tools package.\n\nif (!ReactSharedInternals.hasOwnProperty('ReactCurrentDispatcher')) {\n ReactSharedInternals.ReactCurrentDispatcher = {\n current: null\n };\n}\n\nif (!ReactSharedInternals.hasOwnProperty('ReactCurrentBatchConfig')) {\n ReactSharedInternals.ReactCurrentBatchConfig = {\n suspense: null\n };\n}\n\n// by calls to these methods by a Babel plugin.\n//\n// In PROD (or in packages without access to React internals),\n// they are left as they are instead.\n\nfunction warn(format) {\n {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n printWarning('warn', format, args);\n }\n}\nfunction error(format) {\n {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n printWarning('error', format, args);\n }\n}\n\nfunction printWarning(level, format, args) {\n // When changing this logic, you might want to also\n // update consoleWithStackDev.www.js as well.\n {\n var hasExistingStack = args.length > 0 && typeof args[args.length - 1] === 'string' && args[args.length - 1].indexOf('\\n in') === 0;\n\n if (!hasExistingStack) {\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n if (stack !== '') {\n format += '%s';\n args = args.concat([stack]);\n }\n }\n\n var argsWithFormat = args.map(function (item) {\n return '' + item;\n }); // Careful: RN currently depends on this prefix\n\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n // breaks IE9: https://github.com/facebook/react/issues/13610\n // eslint-disable-next-line react-internal/no-production-logging\n\n Function.prototype.apply.call(console[level], console, argsWithFormat);\n\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n var argIndex = 0;\n var message = 'Warning: ' + format.replace(/%s/g, function () {\n return args[argIndex++];\n });\n throw new Error(message);\n } catch (x) {}\n }\n}\n\nif (!React) {\n {\n throw Error( \"ReactDOM was loaded before React. Make sure you load the React package before loading ReactDOM.\" );\n }\n}\n\nvar invokeGuardedCallbackImpl = function (name, func, context, a, b, c, d, e, f) {\n var funcArgs = Array.prototype.slice.call(arguments, 3);\n\n try {\n func.apply(context, funcArgs);\n } catch (error) {\n this.onError(error);\n }\n};\n\n{\n // In DEV mode, we swap out invokeGuardedCallback for a special version\n // that plays more nicely with the browser's DevTools. The idea is to preserve\n // \"Pause on exceptions\" behavior. Because React wraps all user-provided\n // functions in invokeGuardedCallback, and the production version of\n // invokeGuardedCallback uses a try-catch, all user exceptions are treated\n // like caught exceptions, and the DevTools won't pause unless the developer\n // takes the extra step of enabling pause on caught exceptions. This is\n // unintuitive, though, because even though React has caught the error, from\n // the developer's perspective, the error is uncaught.\n //\n // To preserve the expected \"Pause on exceptions\" behavior, we don't use a\n // try-catch in DEV. Instead, we synchronously dispatch a fake event to a fake\n // DOM node, and call the user-provided callback from inside an event handler\n // for that fake event. If the callback throws, the error is \"captured\" using\n // a global event handler. But because the error happens in a different\n // event loop context, it does not interrupt the normal program flow.\n // Effectively, this gives us try-catch behavior without actually using\n // try-catch. Neat!\n // Check that the browser supports the APIs we need to implement our special\n // DEV version of invokeGuardedCallback\n if (typeof window !== 'undefined' && typeof window.dispatchEvent === 'function' && typeof document !== 'undefined' && typeof document.createEvent === 'function') {\n var fakeNode = document.createElement('react');\n\n var invokeGuardedCallbackDev = function (name, func, context, a, b, c, d, e, f) {\n // If document doesn't exist we know for sure we will crash in this method\n // when we call document.createEvent(). However this can cause confusing\n // errors: https://github.com/facebookincubator/create-react-app/issues/3482\n // So we preemptively throw with a better message instead.\n if (!(typeof document !== 'undefined')) {\n {\n throw Error( \"The `document` global was defined when React was initialized, but is not defined anymore. This can happen in a test environment if a component schedules an update from an asynchronous callback, but the test has already finished running. To solve this, you can either unmount the component at the end of your test (and ensure that any asynchronous operations get canceled in `componentWillUnmount`), or you can change the test itself to be asynchronous.\" );\n }\n }\n\n var evt = document.createEvent('Event'); // Keeps track of whether the user-provided callback threw an error. We\n // set this to true at the beginning, then set it to false right after\n // calling the function. If the function errors, `didError` will never be\n // set to false. This strategy works even if the browser is flaky and\n // fails to call our global error handler, because it doesn't rely on\n // the error event at all.\n\n var didError = true; // Keeps track of the value of window.event so that we can reset it\n // during the callback to let user code access window.event in the\n // browsers that support it.\n\n var windowEvent = window.event; // Keeps track of the descriptor of window.event to restore it after event\n // dispatching: https://github.com/facebook/react/issues/13688\n\n var windowEventDescriptor = Object.getOwnPropertyDescriptor(window, 'event'); // Create an event handler for our fake event. We will synchronously\n // dispatch our fake event using `dispatchEvent`. Inside the handler, we\n // call the user-provided callback.\n\n var funcArgs = Array.prototype.slice.call(arguments, 3);\n\n function callCallback() {\n // We immediately remove the callback from event listeners so that\n // nested `invokeGuardedCallback` calls do not clash. Otherwise, a\n // nested call would trigger the fake event handlers of any call higher\n // in the stack.\n fakeNode.removeEventListener(evtType, callCallback, false); // We check for window.hasOwnProperty('event') to prevent the\n // window.event assignment in both IE <= 10 as they throw an error\n // \"Member not found\" in strict mode, and in Firefox which does not\n // support window.event.\n\n if (typeof window.event !== 'undefined' && window.hasOwnProperty('event')) {\n window.event = windowEvent;\n }\n\n func.apply(context, funcArgs);\n didError = false;\n } // Create a global error event handler. We use this to capture the value\n // that was thrown. It's possible that this error handler will fire more\n // than once; for example, if non-React code also calls `dispatchEvent`\n // and a handler for that event throws. We should be resilient to most of\n // those cases. Even if our error event handler fires more than once, the\n // last error event is always used. If the callback actually does error,\n // we know that the last error event is the correct one, because it's not\n // possible for anything else to have happened in between our callback\n // erroring and the code that follows the `dispatchEvent` call below. If\n // the callback doesn't error, but the error event was fired, we know to\n // ignore it because `didError` will be false, as described above.\n\n\n var error; // Use this to track whether the error event is ever called.\n\n var didSetError = false;\n var isCrossOriginError = false;\n\n function handleWindowError(event) {\n error = event.error;\n didSetError = true;\n\n if (error === null && event.colno === 0 && event.lineno === 0) {\n isCrossOriginError = true;\n }\n\n if (event.defaultPrevented) {\n // Some other error handler has prevented default.\n // Browsers silence the error report if this happens.\n // We'll remember this to later decide whether to log it or not.\n if (error != null && typeof error === 'object') {\n try {\n error._suppressLogging = true;\n } catch (inner) {// Ignore.\n }\n }\n }\n } // Create a fake event type.\n\n\n var evtType = \"react-\" + (name ? name : 'invokeguardedcallback'); // Attach our event handlers\n\n window.addEventListener('error', handleWindowError);\n fakeNode.addEventListener(evtType, callCallback, false); // Synchronously dispatch our fake event. If the user-provided function\n // errors, it will trigger our global error handler.\n\n evt.initEvent(evtType, false, false);\n fakeNode.dispatchEvent(evt);\n\n if (windowEventDescriptor) {\n Object.defineProperty(window, 'event', windowEventDescriptor);\n }\n\n if (didError) {\n if (!didSetError) {\n // The callback errored, but the error event never fired.\n error = new Error('An error was thrown inside one of your components, but React ' + \"doesn't know what it was. This is likely due to browser \" + 'flakiness. React does its best to preserve the \"Pause on ' + 'exceptions\" behavior of the DevTools, which requires some ' + \"DEV-mode only tricks. It's possible that these don't work in \" + 'your browser. Try triggering the error in production mode, ' + 'or switching to a modern browser. If you suspect that this is ' + 'actually an issue with React, please file an issue.');\n } else if (isCrossOriginError) {\n error = new Error(\"A cross-origin error was thrown. React doesn't have access to \" + 'the actual error object in development. ' + 'See https://fb.me/react-crossorigin-error for more information.');\n }\n\n this.onError(error);\n } // Remove our event listeners\n\n\n window.removeEventListener('error', handleWindowError);\n };\n\n invokeGuardedCallbackImpl = invokeGuardedCallbackDev;\n }\n}\n\nvar invokeGuardedCallbackImpl$1 = invokeGuardedCallbackImpl;\n\nvar hasError = false;\nvar caughtError = null; // Used by event system to capture/rethrow the first error.\n\nvar hasRethrowError = false;\nvar rethrowError = null;\nvar reporter = {\n onError: function (error) {\n hasError = true;\n caughtError = error;\n }\n};\n/**\n * Call a function while guarding against errors that happens within it.\n * Returns an error if it throws, otherwise null.\n *\n * In production, this is implemented using a try-catch. The reason we don't\n * use a try-catch directly is so that we can swap out a different\n * implementation in DEV mode.\n *\n * @param {String} name of the guard to use for logging or debugging\n * @param {Function} func The function to invoke\n * @param {*} context The context to use when calling the function\n * @param {...*} args Arguments for function\n */\n\nfunction invokeGuardedCallback(name, func, context, a, b, c, d, e, f) {\n hasError = false;\n caughtError = null;\n invokeGuardedCallbackImpl$1.apply(reporter, arguments);\n}\n/**\n * Same as invokeGuardedCallback, but instead of returning an error, it stores\n * it in a global so it can be rethrown by `rethrowCaughtError` later.\n * TODO: See if caughtError and rethrowError can be unified.\n *\n * @param {String} name of the guard to use for logging or debugging\n * @param {Function} func The function to invoke\n * @param {*} context The context to use when calling the function\n * @param {...*} args Arguments for function\n */\n\nfunction invokeGuardedCallbackAndCatchFirstError(name, func, context, a, b, c, d, e, f) {\n invokeGuardedCallback.apply(this, arguments);\n\n if (hasError) {\n var error = clearCaughtError();\n\n if (!hasRethrowError) {\n hasRethrowError = true;\n rethrowError = error;\n }\n }\n}\n/**\n * During execution of guarded functions we will capture the first error which\n * we will rethrow to be handled by the top level error handler.\n */\n\nfunction rethrowCaughtError() {\n if (hasRethrowError) {\n var error = rethrowError;\n hasRethrowError = false;\n rethrowError = null;\n throw error;\n }\n}\nfunction hasCaughtError() {\n return hasError;\n}\nfunction clearCaughtError() {\n if (hasError) {\n var error = caughtError;\n hasError = false;\n caughtError = null;\n return error;\n } else {\n {\n {\n throw Error( \"clearCaughtError was called but no error was captured. This error is likely caused by a bug in React. Please file an issue.\" );\n }\n }\n }\n}\n\nvar getFiberCurrentPropsFromNode = null;\nvar getInstanceFromNode = null;\nvar getNodeFromInstance = null;\nfunction setComponentTree(getFiberCurrentPropsFromNodeImpl, getInstanceFromNodeImpl, getNodeFromInstanceImpl) {\n getFiberCurrentPropsFromNode = getFiberCurrentPropsFromNodeImpl;\n getInstanceFromNode = getInstanceFromNodeImpl;\n getNodeFromInstance = getNodeFromInstanceImpl;\n\n {\n if (!getNodeFromInstance || !getInstanceFromNode) {\n error('EventPluginUtils.setComponentTree(...): Injected ' + 'module is missing getNodeFromInstance or getInstanceFromNode.');\n }\n }\n}\nvar validateEventDispatches;\n\n{\n validateEventDispatches = function (event) {\n var dispatchListeners = event._dispatchListeners;\n var dispatchInstances = event._dispatchInstances;\n var listenersIsArr = Array.isArray(dispatchListeners);\n var listenersLen = listenersIsArr ? dispatchListeners.length : dispatchListeners ? 1 : 0;\n var instancesIsArr = Array.isArray(dispatchInstances);\n var instancesLen = instancesIsArr ? dispatchInstances.length : dispatchInstances ? 1 : 0;\n\n if (instancesIsArr !== listenersIsArr || instancesLen !== listenersLen) {\n error('EventPluginUtils: Invalid `event`.');\n }\n };\n}\n/**\n * Dispatch the event to the listener.\n * @param {SyntheticEvent} event SyntheticEvent to handle\n * @param {function} listener Application-level callback\n * @param {*} inst Internal component instance\n */\n\n\nfunction executeDispatch(event, listener, inst) {\n var type = event.type || 'unknown-event';\n event.currentTarget = getNodeFromInstance(inst);\n invokeGuardedCallbackAndCatchFirstError(type, listener, undefined, event);\n event.currentTarget = null;\n}\n/**\n * Standard/simple iteration through an event's collected dispatches.\n */\n\nfunction executeDispatchesInOrder(event) {\n var dispatchListeners = event._dispatchListeners;\n var dispatchInstances = event._dispatchInstances;\n\n {\n validateEventDispatches(event);\n }\n\n if (Array.isArray(dispatchListeners)) {\n for (var i = 0; i < dispatchListeners.length; i++) {\n if (event.isPropagationStopped()) {\n break;\n } // Listeners and Instances are two parallel arrays that are always in sync.\n\n\n executeDispatch(event, dispatchListeners[i], dispatchInstances[i]);\n }\n } else if (dispatchListeners) {\n executeDispatch(event, dispatchListeners, dispatchInstances);\n }\n\n event._dispatchListeners = null;\n event._dispatchInstances = null;\n}\n\nvar FunctionComponent = 0;\nvar ClassComponent = 1;\nvar IndeterminateComponent = 2; // Before we know whether it is function or class\n\nvar HostRoot = 3; // Root of a host tree. Could be nested inside another node.\n\nvar HostPortal = 4; // A subtree. Could be an entry point to a different renderer.\n\nvar HostComponent = 5;\nvar HostText = 6;\nvar Fragment = 7;\nvar Mode = 8;\nvar ContextConsumer = 9;\nvar ContextProvider = 10;\nvar ForwardRef = 11;\nvar Profiler = 12;\nvar SuspenseComponent = 13;\nvar MemoComponent = 14;\nvar SimpleMemoComponent = 15;\nvar LazyComponent = 16;\nvar IncompleteClassComponent = 17;\nvar DehydratedFragment = 18;\nvar SuspenseListComponent = 19;\nvar FundamentalComponent = 20;\nvar ScopeComponent = 21;\nvar Block = 22;\n\n/**\n * Injectable ordering of event plugins.\n */\nvar eventPluginOrder = null;\n/**\n * Injectable mapping from names to event plugin modules.\n */\n\nvar namesToPlugins = {};\n/**\n * Recomputes the plugin list using the injected plugins and plugin ordering.\n *\n * @private\n */\n\nfunction recomputePluginOrdering() {\n if (!eventPluginOrder) {\n // Wait until an `eventPluginOrder` is injected.\n return;\n }\n\n for (var pluginName in namesToPlugins) {\n var pluginModule = namesToPlugins[pluginName];\n var pluginIndex = eventPluginOrder.indexOf(pluginName);\n\n if (!(pluginIndex > -1)) {\n {\n throw Error( \"EventPluginRegistry: Cannot inject event plugins that do not exist in the plugin ordering, `\" + pluginName + \"`.\" );\n }\n }\n\n if (plugins[pluginIndex]) {\n continue;\n }\n\n if (!pluginModule.extractEvents) {\n {\n throw Error( \"EventPluginRegistry: Event plugins must implement an `extractEvents` method, but `\" + pluginName + \"` does not.\" );\n }\n }\n\n plugins[pluginIndex] = pluginModule;\n var publishedEvents = pluginModule.eventTypes;\n\n for (var eventName in publishedEvents) {\n if (!publishEventForPlugin(publishedEvents[eventName], pluginModule, eventName)) {\n {\n throw Error( \"EventPluginRegistry: Failed to publish event `\" + eventName + \"` for plugin `\" + pluginName + \"`.\" );\n }\n }\n }\n }\n}\n/**\n * Publishes an event so that it can be dispatched by the supplied plugin.\n *\n * @param {object} dispatchConfig Dispatch configuration for the event.\n * @param {object} PluginModule Plugin publishing the event.\n * @return {boolean} True if the event was successfully published.\n * @private\n */\n\n\nfunction publishEventForPlugin(dispatchConfig, pluginModule, eventName) {\n if (!!eventNameDispatchConfigs.hasOwnProperty(eventName)) {\n {\n throw Error( \"EventPluginRegistry: More than one plugin attempted to publish the same event name, `\" + eventName + \"`.\" );\n }\n }\n\n eventNameDispatchConfigs[eventName] = dispatchConfig;\n var phasedRegistrationNames = dispatchConfig.phasedRegistrationNames;\n\n if (phasedRegistrationNames) {\n for (var phaseName in phasedRegistrationNames) {\n if (phasedRegistrationNames.hasOwnProperty(phaseName)) {\n var phasedRegistrationName = phasedRegistrationNames[phaseName];\n publishRegistrationName(phasedRegistrationName, pluginModule, eventName);\n }\n }\n\n return true;\n } else if (dispatchConfig.registrationName) {\n publishRegistrationName(dispatchConfig.registrationName, pluginModule, eventName);\n return true;\n }\n\n return false;\n}\n/**\n * Publishes a registration name that is used to identify dispatched events.\n *\n * @param {string} registrationName Registration name to add.\n * @param {object} PluginModule Plugin publishing the event.\n * @private\n */\n\n\nfunction publishRegistrationName(registrationName, pluginModule, eventName) {\n if (!!registrationNameModules[registrationName]) {\n {\n throw Error( \"EventPluginRegistry: More than one plugin attempted to publish the same registration name, `\" + registrationName + \"`.\" );\n }\n }\n\n registrationNameModules[registrationName] = pluginModule;\n registrationNameDependencies[registrationName] = pluginModule.eventTypes[eventName].dependencies;\n\n {\n var lowerCasedName = registrationName.toLowerCase();\n possibleRegistrationNames[lowerCasedName] = registrationName;\n\n if (registrationName === 'onDoubleClick') {\n possibleRegistrationNames.ondblclick = registrationName;\n }\n }\n}\n/**\n * Registers plugins so that they can extract and dispatch events.\n */\n\n/**\n * Ordered list of injected plugins.\n */\n\n\nvar plugins = [];\n/**\n * Mapping from event name to dispatch config\n */\n\nvar eventNameDispatchConfigs = {};\n/**\n * Mapping from registration name to plugin module\n */\n\nvar registrationNameModules = {};\n/**\n * Mapping from registration name to event name\n */\n\nvar registrationNameDependencies = {};\n/**\n * Mapping from lowercase registration names to the properly cased version,\n * used to warn in the case of missing event handlers. Available\n * only in true.\n * @type {Object}\n */\n\nvar possibleRegistrationNames = {} ; // Trust the developer to only use possibleRegistrationNames in true\n\n/**\n * Injects an ordering of plugins (by plugin name). This allows the ordering\n * to be decoupled from injection of the actual plugins so that ordering is\n * always deterministic regardless of packaging, on-the-fly injection, etc.\n *\n * @param {array} InjectedEventPluginOrder\n * @internal\n */\n\nfunction injectEventPluginOrder(injectedEventPluginOrder) {\n if (!!eventPluginOrder) {\n {\n throw Error( \"EventPluginRegistry: Cannot inject event plugin ordering more than once. You are likely trying to load more than one copy of React.\" );\n }\n } // Clone the ordering so it cannot be dynamically mutated.\n\n\n eventPluginOrder = Array.prototype.slice.call(injectedEventPluginOrder);\n recomputePluginOrdering();\n}\n/**\n * Injects plugins to be used by plugin event system. The plugin names must be\n * in the ordering injected by `injectEventPluginOrder`.\n *\n * Plugins can be injected as part of page initialization or on-the-fly.\n *\n * @param {object} injectedNamesToPlugins Map from names to plugin modules.\n * @internal\n */\n\nfunction injectEventPluginsByName(injectedNamesToPlugins) {\n var isOrderingDirty = false;\n\n for (var pluginName in injectedNamesToPlugins) {\n if (!injectedNamesToPlugins.hasOwnProperty(pluginName)) {\n continue;\n }\n\n var pluginModule = injectedNamesToPlugins[pluginName];\n\n if (!namesToPlugins.hasOwnProperty(pluginName) || namesToPlugins[pluginName] !== pluginModule) {\n if (!!namesToPlugins[pluginName]) {\n {\n throw Error( \"EventPluginRegistry: Cannot inject two different event plugins using the same name, `\" + pluginName + \"`.\" );\n }\n }\n\n namesToPlugins[pluginName] = pluginModule;\n isOrderingDirty = true;\n }\n }\n\n if (isOrderingDirty) {\n recomputePluginOrdering();\n }\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined');\n\nvar PLUGIN_EVENT_SYSTEM = 1;\nvar IS_REPLAYED = 1 << 5;\nvar IS_FIRST_ANCESTOR = 1 << 6;\n\nvar restoreImpl = null;\nvar restoreTarget = null;\nvar restoreQueue = null;\n\nfunction restoreStateOfTarget(target) {\n // We perform this translation at the end of the event loop so that we\n // always receive the correct fiber here\n var internalInstance = getInstanceFromNode(target);\n\n if (!internalInstance) {\n // Unmounted\n return;\n }\n\n if (!(typeof restoreImpl === 'function')) {\n {\n throw Error( \"setRestoreImplementation() needs to be called to handle a target for controlled events. This error is likely caused by a bug in React. Please file an issue.\" );\n }\n }\n\n var stateNode = internalInstance.stateNode; // Guard against Fiber being unmounted.\n\n if (stateNode) {\n var _props = getFiberCurrentPropsFromNode(stateNode);\n\n restoreImpl(internalInstance.stateNode, internalInstance.type, _props);\n }\n}\n\nfunction setRestoreImplementation(impl) {\n restoreImpl = impl;\n}\nfunction enqueueStateRestore(target) {\n if (restoreTarget) {\n if (restoreQueue) {\n restoreQueue.push(target);\n } else {\n restoreQueue = [target];\n }\n } else {\n restoreTarget = target;\n }\n}\nfunction needsStateRestore() {\n return restoreTarget !== null || restoreQueue !== null;\n}\nfunction restoreStateIfNeeded() {\n if (!restoreTarget) {\n return;\n }\n\n var target = restoreTarget;\n var queuedTargets = restoreQueue;\n restoreTarget = null;\n restoreQueue = null;\n restoreStateOfTarget(target);\n\n if (queuedTargets) {\n for (var i = 0; i < queuedTargets.length; i++) {\n restoreStateOfTarget(queuedTargets[i]);\n }\n }\n}\n\nvar enableProfilerTimer = true; // Trace which interactions trigger each commit.\n\nvar enableDeprecatedFlareAPI = false; // Experimental Host Component support.\n\nvar enableFundamentalAPI = false; // Experimental Scope support.\nvar warnAboutStringRefs = false;\n\n// the renderer. Such as when we're dispatching events or if third party\n// libraries need to call batchedUpdates. Eventually, this API will go away when\n// everything is batched by default. We'll then have a similar API to opt-out of\n// scheduled work and instead do synchronous work.\n// Defaults\n\nvar batchedUpdatesImpl = function (fn, bookkeeping) {\n return fn(bookkeeping);\n};\n\nvar discreteUpdatesImpl = function (fn, a, b, c, d) {\n return fn(a, b, c, d);\n};\n\nvar flushDiscreteUpdatesImpl = function () {};\n\nvar batchedEventUpdatesImpl = batchedUpdatesImpl;\nvar isInsideEventHandler = false;\nvar isBatchingEventUpdates = false;\n\nfunction finishEventHandler() {\n // Here we wait until all updates have propagated, which is important\n // when using controlled components within layers:\n // https://github.com/facebook/react/issues/1698\n // Then we restore state of any controlled component.\n var controlledComponentsHavePendingUpdates = needsStateRestore();\n\n if (controlledComponentsHavePendingUpdates) {\n // If a controlled event was fired, we may need to restore the state of\n // the DOM node back to the controlled value. This is necessary when React\n // bails out of the update without touching the DOM.\n flushDiscreteUpdatesImpl();\n restoreStateIfNeeded();\n }\n}\n\nfunction batchedUpdates(fn, bookkeeping) {\n if (isInsideEventHandler) {\n // If we are currently inside another batch, we need to wait until it\n // fully completes before restoring state.\n return fn(bookkeeping);\n }\n\n isInsideEventHandler = true;\n\n try {\n return batchedUpdatesImpl(fn, bookkeeping);\n } finally {\n isInsideEventHandler = false;\n finishEventHandler();\n }\n}\nfunction batchedEventUpdates(fn, a, b) {\n if (isBatchingEventUpdates) {\n // If we are currently inside another batch, we need to wait until it\n // fully completes before restoring state.\n return fn(a, b);\n }\n\n isBatchingEventUpdates = true;\n\n try {\n return batchedEventUpdatesImpl(fn, a, b);\n } finally {\n isBatchingEventUpdates = false;\n finishEventHandler();\n }\n} // This is for the React Flare event system\nfunction discreteUpdates(fn, a, b, c, d) {\n var prevIsInsideEventHandler = isInsideEventHandler;\n isInsideEventHandler = true;\n\n try {\n return discreteUpdatesImpl(fn, a, b, c, d);\n } finally {\n isInsideEventHandler = prevIsInsideEventHandler;\n\n if (!isInsideEventHandler) {\n finishEventHandler();\n }\n }\n}\nfunction flushDiscreteUpdatesIfNeeded(timeStamp) {\n // event.timeStamp isn't overly reliable due to inconsistencies in\n // how different browsers have historically provided the time stamp.\n // Some browsers provide high-resolution time stamps for all events,\n // some provide low-resolution time stamps for all events. FF < 52\n // even mixes both time stamps together. Some browsers even report\n // negative time stamps or time stamps that are 0 (iOS9) in some cases.\n // Given we are only comparing two time stamps with equality (!==),\n // we are safe from the resolution differences. If the time stamp is 0\n // we bail-out of preventing the flush, which can affect semantics,\n // such as if an earlier flush removes or adds event listeners that\n // are fired in the subsequent flush. However, this is the same\n // behaviour as we had before this change, so the risks are low.\n if (!isInsideEventHandler && (!enableDeprecatedFlareAPI )) {\n flushDiscreteUpdatesImpl();\n }\n}\nfunction setBatchingImplementation(_batchedUpdatesImpl, _discreteUpdatesImpl, _flushDiscreteUpdatesImpl, _batchedEventUpdatesImpl) {\n batchedUpdatesImpl = _batchedUpdatesImpl;\n discreteUpdatesImpl = _discreteUpdatesImpl;\n flushDiscreteUpdatesImpl = _flushDiscreteUpdatesImpl;\n batchedEventUpdatesImpl = _batchedEventUpdatesImpl;\n}\n\nvar DiscreteEvent = 0;\nvar UserBlockingEvent = 1;\nvar ContinuousEvent = 2;\n\n// A reserved attribute.\n// It is handled by React separately and shouldn't be written to the DOM.\nvar RESERVED = 0; // A simple string attribute.\n// Attributes that aren't in the whitelist are presumed to have this type.\n\nvar STRING = 1; // A string attribute that accepts booleans in React. In HTML, these are called\n// \"enumerated\" attributes with \"true\" and \"false\" as possible values.\n// When true, it should be set to a \"true\" string.\n// When false, it should be set to a \"false\" string.\n\nvar BOOLEANISH_STRING = 2; // A real boolean attribute.\n// When true, it should be present (set either to an empty string or its name).\n// When false, it should be omitted.\n\nvar BOOLEAN = 3; // An attribute that can be used as a flag as well as with a value.\n// When true, it should be present (set either to an empty string or its name).\n// When false, it should be omitted.\n// For any other value, should be present with that value.\n\nvar OVERLOADED_BOOLEAN = 4; // An attribute that must be numeric or parse as a numeric.\n// When falsy, it should be removed.\n\nvar NUMERIC = 5; // An attribute that must be positive numeric or parse as a positive numeric.\n// When falsy, it should be removed.\n\nvar POSITIVE_NUMERIC = 6;\n\n/* eslint-disable max-len */\nvar ATTRIBUTE_NAME_START_CHAR = \":A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\";\n/* eslint-enable max-len */\n\nvar ATTRIBUTE_NAME_CHAR = ATTRIBUTE_NAME_START_CHAR + \"\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040\";\nvar ROOT_ATTRIBUTE_NAME = 'data-reactroot';\nvar VALID_ATTRIBUTE_NAME_REGEX = new RegExp('^[' + ATTRIBUTE_NAME_START_CHAR + '][' + ATTRIBUTE_NAME_CHAR + ']*$');\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar illegalAttributeNameCache = {};\nvar validatedAttributeNameCache = {};\nfunction isAttributeNameSafe(attributeName) {\n if (hasOwnProperty.call(validatedAttributeNameCache, attributeName)) {\n return true;\n }\n\n if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) {\n return false;\n }\n\n if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) {\n validatedAttributeNameCache[attributeName] = true;\n return true;\n }\n\n illegalAttributeNameCache[attributeName] = true;\n\n {\n error('Invalid attribute name: `%s`', attributeName);\n }\n\n return false;\n}\nfunction shouldIgnoreAttribute(name, propertyInfo, isCustomComponentTag) {\n if (propertyInfo !== null) {\n return propertyInfo.type === RESERVED;\n }\n\n if (isCustomComponentTag) {\n return false;\n }\n\n if (name.length > 2 && (name[0] === 'o' || name[0] === 'O') && (name[1] === 'n' || name[1] === 'N')) {\n return true;\n }\n\n return false;\n}\nfunction shouldRemoveAttributeWithWarning(name, value, propertyInfo, isCustomComponentTag) {\n if (propertyInfo !== null && propertyInfo.type === RESERVED) {\n return false;\n }\n\n switch (typeof value) {\n case 'function': // $FlowIssue symbol is perfectly valid here\n\n case 'symbol':\n // eslint-disable-line\n return true;\n\n case 'boolean':\n {\n if (isCustomComponentTag) {\n return false;\n }\n\n if (propertyInfo !== null) {\n return !propertyInfo.acceptsBooleans;\n } else {\n var prefix = name.toLowerCase().slice(0, 5);\n return prefix !== 'data-' && prefix !== 'aria-';\n }\n }\n\n default:\n return false;\n }\n}\nfunction shouldRemoveAttribute(name, value, propertyInfo, isCustomComponentTag) {\n if (value === null || typeof value === 'undefined') {\n return true;\n }\n\n if (shouldRemoveAttributeWithWarning(name, value, propertyInfo, isCustomComponentTag)) {\n return true;\n }\n\n if (isCustomComponentTag) {\n return false;\n }\n\n if (propertyInfo !== null) {\n switch (propertyInfo.type) {\n case BOOLEAN:\n return !value;\n\n case OVERLOADED_BOOLEAN:\n return value === false;\n\n case NUMERIC:\n return isNaN(value);\n\n case POSITIVE_NUMERIC:\n return isNaN(value) || value < 1;\n }\n }\n\n return false;\n}\nfunction getPropertyInfo(name) {\n return properties.hasOwnProperty(name) ? properties[name] : null;\n}\n\nfunction PropertyInfoRecord(name, type, mustUseProperty, attributeName, attributeNamespace, sanitizeURL) {\n this.acceptsBooleans = type === BOOLEANISH_STRING || type === BOOLEAN || type === OVERLOADED_BOOLEAN;\n this.attributeName = attributeName;\n this.attributeNamespace = attributeNamespace;\n this.mustUseProperty = mustUseProperty;\n this.propertyName = name;\n this.type = type;\n this.sanitizeURL = sanitizeURL;\n} // When adding attributes to this list, be sure to also add them to\n// the `possibleStandardNames` module to ensure casing and incorrect\n// name warnings.\n\n\nvar properties = {}; // These props are reserved by React. They shouldn't be written to the DOM.\n\nvar reservedProps = ['children', 'dangerouslySetInnerHTML', // TODO: This prevents the assignment of defaultValue to regular\n// elements (not just inputs). Now that ReactDOMInput assigns to the\n// defaultValue property -- do we need this?\n'defaultValue', 'defaultChecked', 'innerHTML', 'suppressContentEditableWarning', 'suppressHydrationWarning', 'style'];\n\nreservedProps.forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, RESERVED, false, // mustUseProperty\n name, // attributeName\n null, // attributeNamespace\n false);\n}); // A few React string attributes have a different name.\n// This is a mapping from React prop names to the attribute names.\n\n[['acceptCharset', 'accept-charset'], ['className', 'class'], ['htmlFor', 'for'], ['httpEquiv', 'http-equiv']].forEach(function (_ref) {\n var name = _ref[0],\n attributeName = _ref[1];\n properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n attributeName, // attributeName\n null, // attributeNamespace\n false);\n}); // These are \"enumerated\" HTML attributes that accept \"true\" and \"false\".\n// In React, we let users pass `true` and `false` even though technically\n// these aren't boolean attributes (they are coerced to strings).\n\n['contentEditable', 'draggable', 'spellCheck', 'value'].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, BOOLEANISH_STRING, false, // mustUseProperty\n name.toLowerCase(), // attributeName\n null, // attributeNamespace\n false);\n}); // These are \"enumerated\" SVG attributes that accept \"true\" and \"false\".\n// In React, we let users pass `true` and `false` even though technically\n// these aren't boolean attributes (they are coerced to strings).\n// Since these are SVG attributes, their attribute names are case-sensitive.\n\n['autoReverse', 'externalResourcesRequired', 'focusable', 'preserveAlpha'].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, BOOLEANISH_STRING, false, // mustUseProperty\n name, // attributeName\n null, // attributeNamespace\n false);\n}); // These are HTML boolean attributes.\n\n['allowFullScreen', 'async', // Note: there is a special case that prevents it from being written to the DOM\n// on the client side because the browsers are inconsistent. Instead we call focus().\n'autoFocus', 'autoPlay', 'controls', 'default', 'defer', 'disabled', 'disablePictureInPicture', 'formNoValidate', 'hidden', 'loop', 'noModule', 'noValidate', 'open', 'playsInline', 'readOnly', 'required', 'reversed', 'scoped', 'seamless', // Microdata\n'itemScope'].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, BOOLEAN, false, // mustUseProperty\n name.toLowerCase(), // attributeName\n null, // attributeNamespace\n false);\n}); // These are the few React props that we set as DOM properties\n// rather than attributes. These are all booleans.\n\n['checked', // Note: `option.selected` is not updated if `select.multiple` is\n// disabled with `removeAttribute`. We have special logic for handling this.\n'multiple', 'muted', 'selected' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, BOOLEAN, true, // mustUseProperty\n name, // attributeName\n null, // attributeNamespace\n false);\n}); // These are HTML attributes that are \"overloaded booleans\": they behave like\n// booleans, but can also accept a string value.\n\n['capture', 'download' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, OVERLOADED_BOOLEAN, false, // mustUseProperty\n name, // attributeName\n null, // attributeNamespace\n false);\n}); // These are HTML attributes that must be positive numbers.\n\n['cols', 'rows', 'size', 'span' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, POSITIVE_NUMERIC, false, // mustUseProperty\n name, // attributeName\n null, // attributeNamespace\n false);\n}); // These are HTML attributes that must be numbers.\n\n['rowSpan', 'start'].forEach(function (name) {\n properties[name] = new PropertyInfoRecord(name, NUMERIC, false, // mustUseProperty\n name.toLowerCase(), // attributeName\n null, // attributeNamespace\n false);\n});\nvar CAMELIZE = /[\\-\\:]([a-z])/g;\n\nvar capitalize = function (token) {\n return token[1].toUpperCase();\n}; // This is a list of all SVG attributes that need special casing, namespacing,\n// or boolean value assignment. Regular attributes that just accept strings\n// and have the same names are omitted, just like in the HTML whitelist.\n// Some of these attributes can be hard to find. This list was created by\n// scraping the MDN documentation.\n\n\n['accent-height', 'alignment-baseline', 'arabic-form', 'baseline-shift', 'cap-height', 'clip-path', 'clip-rule', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'dominant-baseline', 'enable-background', 'fill-opacity', 'fill-rule', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'glyph-name', 'glyph-orientation-horizontal', 'glyph-orientation-vertical', 'horiz-adv-x', 'horiz-origin-x', 'image-rendering', 'letter-spacing', 'lighting-color', 'marker-end', 'marker-mid', 'marker-start', 'overline-position', 'overline-thickness', 'paint-order', 'panose-1', 'pointer-events', 'rendering-intent', 'shape-rendering', 'stop-color', 'stop-opacity', 'strikethrough-position', 'strikethrough-thickness', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke-width', 'text-anchor', 'text-decoration', 'text-rendering', 'underline-position', 'underline-thickness', 'unicode-bidi', 'unicode-range', 'units-per-em', 'v-alphabetic', 'v-hanging', 'v-ideographic', 'v-mathematical', 'vector-effect', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'word-spacing', 'writing-mode', 'xmlns:xlink', 'x-height' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (attributeName) {\n var name = attributeName.replace(CAMELIZE, capitalize);\n properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n attributeName, null, // attributeNamespace\n false);\n}); // String SVG attributes with the xlink namespace.\n\n['xlink:actuate', 'xlink:arcrole', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (attributeName) {\n var name = attributeName.replace(CAMELIZE, capitalize);\n properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n attributeName, 'http://www.w3.org/1999/xlink', false);\n}); // String SVG attributes with the xml namespace.\n\n['xml:base', 'xml:lang', 'xml:space' // NOTE: if you add a camelCased prop to this list,\n// you'll need to set attributeName to name.toLowerCase()\n// instead in the assignment below.\n].forEach(function (attributeName) {\n var name = attributeName.replace(CAMELIZE, capitalize);\n properties[name] = new PropertyInfoRecord(name, STRING, false, // mustUseProperty\n attributeName, 'http://www.w3.org/XML/1998/namespace', false);\n}); // These attribute exists both in HTML and SVG.\n// The attribute name is case-sensitive in SVG so we can't just use\n// the React name like we do for attributes that exist only in HTML.\n\n['tabIndex', 'crossOrigin'].forEach(function (attributeName) {\n properties[attributeName] = new PropertyInfoRecord(attributeName, STRING, false, // mustUseProperty\n attributeName.toLowerCase(), // attributeName\n null, // attributeNamespace\n false);\n}); // These attributes accept URLs. These must not allow javascript: URLS.\n// These will also need to accept Trusted Types object in the future.\n\nvar xlinkHref = 'xlinkHref';\nproperties[xlinkHref] = new PropertyInfoRecord('xlinkHref', STRING, false, // mustUseProperty\n'xlink:href', 'http://www.w3.org/1999/xlink', true);\n['src', 'href', 'action', 'formAction'].forEach(function (attributeName) {\n properties[attributeName] = new PropertyInfoRecord(attributeName, STRING, false, // mustUseProperty\n attributeName.toLowerCase(), // attributeName\n null, // attributeNamespace\n true);\n});\n\nvar ReactDebugCurrentFrame = null;\n\n{\n ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n} // A javascript: URL can contain leading C0 control or \\u0020 SPACE,\n// and any newline or tab are filtered out as if they're not part of the URL.\n// https://url.spec.whatwg.org/#url-parsing\n// Tab or newline are defined as \\r\\n\\t:\n// https://infra.spec.whatwg.org/#ascii-tab-or-newline\n// A C0 control is a code point in the range \\u0000 NULL to \\u001F\n// INFORMATION SEPARATOR ONE, inclusive:\n// https://infra.spec.whatwg.org/#c0-control-or-space\n\n/* eslint-disable max-len */\n\n\nvar isJavaScriptProtocol = /^[\\u0000-\\u001F ]*j[\\r\\n\\t]*a[\\r\\n\\t]*v[\\r\\n\\t]*a[\\r\\n\\t]*s[\\r\\n\\t]*c[\\r\\n\\t]*r[\\r\\n\\t]*i[\\r\\n\\t]*p[\\r\\n\\t]*t[\\r\\n\\t]*\\:/i;\nvar didWarn = false;\n\nfunction sanitizeURL(url) {\n {\n if (!didWarn && isJavaScriptProtocol.test(url)) {\n didWarn = true;\n\n error('A future version of React will block javascript: URLs as a security precaution. ' + 'Use event handlers instead if you can. If you need to generate unsafe HTML try ' + 'using dangerouslySetInnerHTML instead. React was passed %s.', JSON.stringify(url));\n }\n }\n}\n\n/**\n * Get the value for a property on a node. Only used in DEV for SSR validation.\n * The \"expected\" argument is used as a hint of what the expected value is.\n * Some properties have multiple equivalent values.\n */\nfunction getValueForProperty(node, name, expected, propertyInfo) {\n {\n if (propertyInfo.mustUseProperty) {\n var propertyName = propertyInfo.propertyName;\n return node[propertyName];\n } else {\n if ( propertyInfo.sanitizeURL) {\n // If we haven't fully disabled javascript: URLs, and if\n // the hydration is successful of a javascript: URL, we\n // still want to warn on the client.\n sanitizeURL('' + expected);\n }\n\n var attributeName = propertyInfo.attributeName;\n var stringValue = null;\n\n if (propertyInfo.type === OVERLOADED_BOOLEAN) {\n if (node.hasAttribute(attributeName)) {\n var value = node.getAttribute(attributeName);\n\n if (value === '') {\n return true;\n }\n\n if (shouldRemoveAttribute(name, expected, propertyInfo, false)) {\n return value;\n }\n\n if (value === '' + expected) {\n return expected;\n }\n\n return value;\n }\n } else if (node.hasAttribute(attributeName)) {\n if (shouldRemoveAttribute(name, expected, propertyInfo, false)) {\n // We had an attribute but shouldn't have had one, so read it\n // for the error message.\n return node.getAttribute(attributeName);\n }\n\n if (propertyInfo.type === BOOLEAN) {\n // If this was a boolean, it doesn't matter what the value is\n // the fact that we have it is the same as the expected.\n return expected;\n } // Even if this property uses a namespace we use getAttribute\n // because we assume its namespaced name is the same as our config.\n // To use getAttributeNS we need the local name which we don't have\n // in our config atm.\n\n\n stringValue = node.getAttribute(attributeName);\n }\n\n if (shouldRemoveAttribute(name, expected, propertyInfo, false)) {\n return stringValue === null ? expected : stringValue;\n } else if (stringValue === '' + expected) {\n return expected;\n } else {\n return stringValue;\n }\n }\n }\n}\n/**\n * Get the value for a attribute on a node. Only used in DEV for SSR validation.\n * The third argument is used as a hint of what the expected value is. Some\n * attributes have multiple equivalent values.\n */\n\nfunction getValueForAttribute(node, name, expected) {\n {\n if (!isAttributeNameSafe(name)) {\n return;\n }\n\n if (!node.hasAttribute(name)) {\n return expected === undefined ? undefined : null;\n }\n\n var value = node.getAttribute(name);\n\n if (value === '' + expected) {\n return expected;\n }\n\n return value;\n }\n}\n/**\n * Sets the value for a property on a node.\n *\n * @param {DOMElement} node\n * @param {string} name\n * @param {*} value\n */\n\nfunction setValueForProperty(node, name, value, isCustomComponentTag) {\n var propertyInfo = getPropertyInfo(name);\n\n if (shouldIgnoreAttribute(name, propertyInfo, isCustomComponentTag)) {\n return;\n }\n\n if (shouldRemoveAttribute(name, value, propertyInfo, isCustomComponentTag)) {\n value = null;\n } // If the prop isn't in the special list, treat it as a simple attribute.\n\n\n if (isCustomComponentTag || propertyInfo === null) {\n if (isAttributeNameSafe(name)) {\n var _attributeName = name;\n\n if (value === null) {\n node.removeAttribute(_attributeName);\n } else {\n node.setAttribute(_attributeName, '' + value);\n }\n }\n\n return;\n }\n\n var mustUseProperty = propertyInfo.mustUseProperty;\n\n if (mustUseProperty) {\n var propertyName = propertyInfo.propertyName;\n\n if (value === null) {\n var type = propertyInfo.type;\n node[propertyName] = type === BOOLEAN ? false : '';\n } else {\n // Contrary to `setAttribute`, object properties are properly\n // `toString`ed by IE8/9.\n node[propertyName] = value;\n }\n\n return;\n } // The rest are treated as attributes with special cases.\n\n\n var attributeName = propertyInfo.attributeName,\n attributeNamespace = propertyInfo.attributeNamespace;\n\n if (value === null) {\n node.removeAttribute(attributeName);\n } else {\n var _type = propertyInfo.type;\n var attributeValue;\n\n if (_type === BOOLEAN || _type === OVERLOADED_BOOLEAN && value === true) {\n // If attribute type is boolean, we know for sure it won't be an execution sink\n // and we won't require Trusted Type here.\n attributeValue = '';\n } else {\n // `setAttribute` with objects becomes only `[object]` in IE8/9,\n // ('' + value) makes it output the correct toString()-value.\n {\n attributeValue = '' + value;\n }\n\n if (propertyInfo.sanitizeURL) {\n sanitizeURL(attributeValue.toString());\n }\n }\n\n if (attributeNamespace) {\n node.setAttributeNS(attributeNamespace, attributeName, attributeValue);\n } else {\n node.setAttribute(attributeName, attributeValue);\n }\n }\n}\n\nvar BEFORE_SLASH_RE = /^(.*)[\\\\\\/]/;\nfunction describeComponentFrame (name, source, ownerName) {\n var sourceInfo = '';\n\n if (source) {\n var path = source.fileName;\n var fileName = path.replace(BEFORE_SLASH_RE, '');\n\n {\n // In DEV, include code for a common special case:\n // prefer \"folder/index.js\" instead of just \"index.js\".\n if (/^index\\./.test(fileName)) {\n var match = path.match(BEFORE_SLASH_RE);\n\n if (match) {\n var pathBeforeSlash = match[1];\n\n if (pathBeforeSlash) {\n var folderName = pathBeforeSlash.replace(BEFORE_SLASH_RE, '');\n fileName = folderName + '/' + fileName;\n }\n }\n }\n }\n\n sourceInfo = ' (at ' + fileName + ':' + source.lineNumber + ')';\n } else if (ownerName) {\n sourceInfo = ' (created by ' + ownerName + ')';\n }\n\n return '\\n in ' + (name || 'Unknown') + sourceInfo;\n}\n\n// The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar hasSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;\nvar REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;\nvar REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;\nvar REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;\nvar REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;\nvar REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;\nvar REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary\nvar REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;\nvar REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;\nvar REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;\nvar REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;\nvar REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;\nvar REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;\nvar REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;\nvar MAYBE_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n if (maybeIterable === null || typeof maybeIterable !== 'object') {\n return null;\n }\n\n var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n if (typeof maybeIterator === 'function') {\n return maybeIterator;\n }\n\n return null;\n}\n\nvar Uninitialized = -1;\nvar Pending = 0;\nvar Resolved = 1;\nvar Rejected = 2;\nfunction refineResolvedLazyComponent(lazyComponent) {\n return lazyComponent._status === Resolved ? lazyComponent._result : null;\n}\nfunction initializeLazyComponentType(lazyComponent) {\n if (lazyComponent._status === Uninitialized) {\n lazyComponent._status = Pending;\n var ctor = lazyComponent._ctor;\n var thenable = ctor();\n lazyComponent._result = thenable;\n thenable.then(function (moduleObject) {\n if (lazyComponent._status === Pending) {\n var defaultExport = moduleObject.default;\n\n {\n if (defaultExport === undefined) {\n error('lazy: Expected the result of a dynamic import() call. ' + 'Instead received: %s\\n\\nYour code should look like: \\n ' + \"const MyComponent = lazy(() => import('./MyComponent'))\", moduleObject);\n }\n }\n\n lazyComponent._status = Resolved;\n lazyComponent._result = defaultExport;\n }\n }, function (error) {\n if (lazyComponent._status === Pending) {\n lazyComponent._status = Rejected;\n lazyComponent._result = error;\n }\n });\n }\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n var functionName = innerType.displayName || innerType.name || '';\n return outerType.displayName || (functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName);\n}\n\nfunction getComponentName(type) {\n if (type == null) {\n // Host root, text node or just invalid type.\n return null;\n }\n\n {\n if (typeof type.tag === 'number') {\n error('Received an unexpected object in getComponentName(). ' + 'This is likely a bug in React. Please file an issue.');\n }\n }\n\n if (typeof type === 'function') {\n return type.displayName || type.name || null;\n }\n\n if (typeof type === 'string') {\n return type;\n }\n\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return 'Fragment';\n\n case REACT_PORTAL_TYPE:\n return 'Portal';\n\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n\n case REACT_STRICT_MODE_TYPE:\n return 'StrictMode';\n\n case REACT_SUSPENSE_TYPE:\n return 'Suspense';\n\n case REACT_SUSPENSE_LIST_TYPE:\n return 'SuspenseList';\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_CONTEXT_TYPE:\n return 'Context.Consumer';\n\n case REACT_PROVIDER_TYPE:\n return 'Context.Provider';\n\n case REACT_FORWARD_REF_TYPE:\n return getWrappedName(type, type.render, 'ForwardRef');\n\n case REACT_MEMO_TYPE:\n return getComponentName(type.type);\n\n case REACT_BLOCK_TYPE:\n return getComponentName(type.render);\n\n case REACT_LAZY_TYPE:\n {\n var thenable = type;\n var resolvedThenable = refineResolvedLazyComponent(thenable);\n\n if (resolvedThenable) {\n return getComponentName(resolvedThenable);\n }\n\n break;\n }\n }\n }\n\n return null;\n}\n\nvar ReactDebugCurrentFrame$1 = ReactSharedInternals.ReactDebugCurrentFrame;\n\nfunction describeFiber(fiber) {\n switch (fiber.tag) {\n case HostRoot:\n case HostPortal:\n case HostText:\n case Fragment:\n case ContextProvider:\n case ContextConsumer:\n return '';\n\n default:\n var owner = fiber._debugOwner;\n var source = fiber._debugSource;\n var name = getComponentName(fiber.type);\n var ownerName = null;\n\n if (owner) {\n ownerName = getComponentName(owner.type);\n }\n\n return describeComponentFrame(name, source, ownerName);\n }\n}\n\nfunction getStackByFiberInDevAndProd(workInProgress) {\n var info = '';\n var node = workInProgress;\n\n do {\n info += describeFiber(node);\n node = node.return;\n } while (node);\n\n return info;\n}\nvar current = null;\nvar isRendering = false;\nfunction getCurrentFiberOwnerNameInDevOrNull() {\n {\n if (current === null) {\n return null;\n }\n\n var owner = current._debugOwner;\n\n if (owner !== null && typeof owner !== 'undefined') {\n return getComponentName(owner.type);\n }\n }\n\n return null;\n}\nfunction getCurrentFiberStackInDev() {\n {\n if (current === null) {\n return '';\n } // Safe because if current fiber exists, we are reconciling,\n // and it is guaranteed to be the work-in-progress version.\n\n\n return getStackByFiberInDevAndProd(current);\n }\n}\nfunction resetCurrentFiber() {\n {\n ReactDebugCurrentFrame$1.getCurrentStack = null;\n current = null;\n isRendering = false;\n }\n}\nfunction setCurrentFiber(fiber) {\n {\n ReactDebugCurrentFrame$1.getCurrentStack = getCurrentFiberStackInDev;\n current = fiber;\n isRendering = false;\n }\n}\nfunction setIsRendering(rendering) {\n {\n isRendering = rendering;\n }\n}\n\n// Flow does not allow string concatenation of most non-string types. To work\n// around this limitation, we use an opaque type that can only be obtained by\n// passing the value through getToStringValue first.\nfunction toString(value) {\n return '' + value;\n}\nfunction getToStringValue(value) {\n switch (typeof value) {\n case 'boolean':\n case 'number':\n case 'object':\n case 'string':\n case 'undefined':\n return value;\n\n default:\n // function, symbol are assigned as empty strings\n return '';\n }\n}\n\nvar ReactDebugCurrentFrame$2 = null;\nvar ReactControlledValuePropTypes = {\n checkPropTypes: null\n};\n\n{\n ReactDebugCurrentFrame$2 = ReactSharedInternals.ReactDebugCurrentFrame;\n var hasReadOnlyValue = {\n button: true,\n checkbox: true,\n image: true,\n hidden: true,\n radio: true,\n reset: true,\n submit: true\n };\n var propTypes = {\n value: function (props, propName, componentName) {\n if (hasReadOnlyValue[props.type] || props.onChange || props.readOnly || props.disabled || props[propName] == null || enableDeprecatedFlareAPI ) {\n return null;\n }\n\n return new Error('You provided a `value` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultValue`. Otherwise, ' + 'set either `onChange` or `readOnly`.');\n },\n checked: function (props, propName, componentName) {\n if (props.onChange || props.readOnly || props.disabled || props[propName] == null || enableDeprecatedFlareAPI ) {\n return null;\n }\n\n return new Error('You provided a `checked` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultChecked`. Otherwise, ' + 'set either `onChange` or `readOnly`.');\n }\n };\n /**\n * Provide a linked `value` attribute for controlled forms. You should not use\n * this outside of the ReactDOM controlled form components.\n */\n\n ReactControlledValuePropTypes.checkPropTypes = function (tagName, props) {\n checkPropTypes(propTypes, props, 'prop', tagName, ReactDebugCurrentFrame$2.getStackAddendum);\n };\n}\n\nfunction isCheckable(elem) {\n var type = elem.type;\n var nodeName = elem.nodeName;\n return nodeName && nodeName.toLowerCase() === 'input' && (type === 'checkbox' || type === 'radio');\n}\n\nfunction getTracker(node) {\n return node._valueTracker;\n}\n\nfunction detachTracker(node) {\n node._valueTracker = null;\n}\n\nfunction getValueFromNode(node) {\n var value = '';\n\n if (!node) {\n return value;\n }\n\n if (isCheckable(node)) {\n value = node.checked ? 'true' : 'false';\n } else {\n value = node.value;\n }\n\n return value;\n}\n\nfunction trackValueOnNode(node) {\n var valueField = isCheckable(node) ? 'checked' : 'value';\n var descriptor = Object.getOwnPropertyDescriptor(node.constructor.prototype, valueField);\n var currentValue = '' + node[valueField]; // if someone has already defined a value or Safari, then bail\n // and don't track value will cause over reporting of changes,\n // but it's better then a hard failure\n // (needed for certain tests that spyOn input values and Safari)\n\n if (node.hasOwnProperty(valueField) || typeof descriptor === 'undefined' || typeof descriptor.get !== 'function' || typeof descriptor.set !== 'function') {\n return;\n }\n\n var get = descriptor.get,\n set = descriptor.set;\n Object.defineProperty(node, valueField, {\n configurable: true,\n get: function () {\n return get.call(this);\n },\n set: function (value) {\n currentValue = '' + value;\n set.call(this, value);\n }\n }); // We could've passed this the first time\n // but it triggers a bug in IE11 and Edge 14/15.\n // Calling defineProperty() again should be equivalent.\n // https://github.com/facebook/react/issues/11768\n\n Object.defineProperty(node, valueField, {\n enumerable: descriptor.enumerable\n });\n var tracker = {\n getValue: function () {\n return currentValue;\n },\n setValue: function (value) {\n currentValue = '' + value;\n },\n stopTracking: function () {\n detachTracker(node);\n delete node[valueField];\n }\n };\n return tracker;\n}\n\nfunction track(node) {\n if (getTracker(node)) {\n return;\n } // TODO: Once it's just Fiber we can move this to node._wrapperState\n\n\n node._valueTracker = trackValueOnNode(node);\n}\nfunction updateValueIfChanged(node) {\n if (!node) {\n return false;\n }\n\n var tracker = getTracker(node); // if there is no tracker at this point it's unlikely\n // that trying again will succeed\n\n if (!tracker) {\n return true;\n }\n\n var lastValue = tracker.getValue();\n var nextValue = getValueFromNode(node);\n\n if (nextValue !== lastValue) {\n tracker.setValue(nextValue);\n return true;\n }\n\n return false;\n}\n\nvar didWarnValueDefaultValue = false;\nvar didWarnCheckedDefaultChecked = false;\nvar didWarnControlledToUncontrolled = false;\nvar didWarnUncontrolledToControlled = false;\n\nfunction isControlled(props) {\n var usesChecked = props.type === 'checkbox' || props.type === 'radio';\n return usesChecked ? props.checked != null : props.value != null;\n}\n/**\n * Implements an <input> host component that allows setting these optional\n * props: `checked`, `value`, `defaultChecked`, and `defaultValue`.\n *\n * If `checked` or `value` are not supplied (or null/undefined), user actions\n * that affect the checked state or value will trigger updates to the element.\n *\n * If they are supplied (and not null/undefined), the rendered element will not\n * trigger updates to the element. Instead, the props must change in order for\n * the rendered element to be updated.\n *\n * The rendered element will be initialized as unchecked (or `defaultChecked`)\n * with an empty value (or `defaultValue`).\n *\n * See http://www.w3.org/TR/2012/WD-html5-20121025/the-input-element.html\n */\n\n\nfunction getHostProps(element, props) {\n var node = element;\n var checked = props.checked;\n\n var hostProps = _assign({}, props, {\n defaultChecked: undefined,\n defaultValue: undefined,\n value: undefined,\n checked: checked != null ? checked : node._wrapperState.initialChecked\n });\n\n return hostProps;\n}\nfunction initWrapperState(element, props) {\n {\n ReactControlledValuePropTypes.checkPropTypes('input', props);\n\n if (props.checked !== undefined && props.defaultChecked !== undefined && !didWarnCheckedDefaultChecked) {\n error('%s contains an input of type %s with both checked and defaultChecked props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the checked prop, or the defaultChecked prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components', getCurrentFiberOwnerNameInDevOrNull() || 'A component', props.type);\n\n didWarnCheckedDefaultChecked = true;\n }\n\n if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValueDefaultValue) {\n error('%s contains an input of type %s with both value and defaultValue props. ' + 'Input elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled input ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components', getCurrentFiberOwnerNameInDevOrNull() || 'A component', props.type);\n\n didWarnValueDefaultValue = true;\n }\n }\n\n var node = element;\n var defaultValue = props.defaultValue == null ? '' : props.defaultValue;\n node._wrapperState = {\n initialChecked: props.checked != null ? props.checked : props.defaultChecked,\n initialValue: getToStringValue(props.value != null ? props.value : defaultValue),\n controlled: isControlled(props)\n };\n}\nfunction updateChecked(element, props) {\n var node = element;\n var checked = props.checked;\n\n if (checked != null) {\n setValueForProperty(node, 'checked', checked, false);\n }\n}\nfunction updateWrapper(element, props) {\n var node = element;\n\n {\n var controlled = isControlled(props);\n\n if (!node._wrapperState.controlled && controlled && !didWarnUncontrolledToControlled) {\n error('A component is changing an uncontrolled input of type %s to be controlled. ' + 'Input elements should not switch from uncontrolled to controlled (or vice versa). ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://fb.me/react-controlled-components', props.type);\n\n didWarnUncontrolledToControlled = true;\n }\n\n if (node._wrapperState.controlled && !controlled && !didWarnControlledToUncontrolled) {\n error('A component is changing a controlled input of type %s to be uncontrolled. ' + 'Input elements should not switch from controlled to uncontrolled (or vice versa). ' + 'Decide between using a controlled or uncontrolled input ' + 'element for the lifetime of the component. More info: https://fb.me/react-controlled-components', props.type);\n\n didWarnControlledToUncontrolled = true;\n }\n }\n\n updateChecked(element, props);\n var value = getToStringValue(props.value);\n var type = props.type;\n\n if (value != null) {\n if (type === 'number') {\n if (value === 0 && node.value === '' || // We explicitly want to coerce to number here if possible.\n // eslint-disable-next-line\n node.value != value) {\n node.value = toString(value);\n }\n } else if (node.value !== toString(value)) {\n node.value = toString(value);\n }\n } else if (type === 'submit' || type === 'reset') {\n // Submit/reset inputs need the attribute removed completely to avoid\n // blank-text buttons.\n node.removeAttribute('value');\n return;\n }\n\n {\n // When syncing the value attribute, the value comes from a cascade of\n // properties:\n // 1. The value React property\n // 2. The defaultValue React property\n // 3. Otherwise there should be no change\n if (props.hasOwnProperty('value')) {\n setDefaultValue(node, props.type, value);\n } else if (props.hasOwnProperty('defaultValue')) {\n setDefaultValue(node, props.type, getToStringValue(props.defaultValue));\n }\n }\n\n {\n // When syncing the checked attribute, it only changes when it needs\n // to be removed, such as transitioning from a checkbox into a text input\n if (props.checked == null && props.defaultChecked != null) {\n node.defaultChecked = !!props.defaultChecked;\n }\n }\n}\nfunction postMountWrapper(element, props, isHydrating) {\n var node = element; // Do not assign value if it is already set. This prevents user text input\n // from being lost during SSR hydration.\n\n if (props.hasOwnProperty('value') || props.hasOwnProperty('defaultValue')) {\n var type = props.type;\n var isButton = type === 'submit' || type === 'reset'; // Avoid setting value attribute on submit/reset inputs as it overrides the\n // default value provided by the browser. See: #12872\n\n if (isButton && (props.value === undefined || props.value === null)) {\n return;\n }\n\n var initialValue = toString(node._wrapperState.initialValue); // Do not assign value if it is already set. This prevents user text input\n // from being lost during SSR hydration.\n\n if (!isHydrating) {\n {\n // When syncing the value attribute, the value property should use\n // the wrapperState._initialValue property. This uses:\n //\n // 1. The value React property when present\n // 2. The defaultValue React property when present\n // 3. An empty string\n if (initialValue !== node.value) {\n node.value = initialValue;\n }\n }\n }\n\n {\n // Otherwise, the value attribute is synchronized to the property,\n // so we assign defaultValue to the same thing as the value property\n // assignment step above.\n node.defaultValue = initialValue;\n }\n } // Normally, we'd just do `node.checked = node.checked` upon initial mount, less this bug\n // this is needed to work around a chrome bug where setting defaultChecked\n // will sometimes influence the value of checked (even after detachment).\n // Reference: https://bugs.chromium.org/p/chromium/issues/detail?id=608416\n // We need to temporarily unset name to avoid disrupting radio button groups.\n\n\n var name = node.name;\n\n if (name !== '') {\n node.name = '';\n }\n\n {\n // When syncing the checked attribute, both the checked property and\n // attribute are assigned at the same time using defaultChecked. This uses:\n //\n // 1. The checked React property when present\n // 2. The defaultChecked React property when present\n // 3. Otherwise, false\n node.defaultChecked = !node.defaultChecked;\n node.defaultChecked = !!node._wrapperState.initialChecked;\n }\n\n if (name !== '') {\n node.name = name;\n }\n}\nfunction restoreControlledState(element, props) {\n var node = element;\n updateWrapper(node, props);\n updateNamedCousins(node, props);\n}\n\nfunction updateNamedCousins(rootNode, props) {\n var name = props.name;\n\n if (props.type === 'radio' && name != null) {\n var queryRoot = rootNode;\n\n while (queryRoot.parentNode) {\n queryRoot = queryRoot.parentNode;\n } // If `rootNode.form` was non-null, then we could try `form.elements`,\n // but that sometimes behaves strangely in IE8. We could also try using\n // `form.getElementsByName`, but that will only return direct children\n // and won't include inputs that use the HTML5 `form=` attribute. Since\n // the input might not even be in a form. It might not even be in the\n // document. Let's just use the local `querySelectorAll` to ensure we don't\n // miss anything.\n\n\n var group = queryRoot.querySelectorAll('input[name=' + JSON.stringify('' + name) + '][type=\"radio\"]');\n\n for (var i = 0; i < group.length; i++) {\n var otherNode = group[i];\n\n if (otherNode === rootNode || otherNode.form !== rootNode.form) {\n continue;\n } // This will throw if radio buttons rendered by different copies of React\n // and the same name are rendered into the same form (same as #1939).\n // That's probably okay; we don't support it just as we don't support\n // mixing React radio buttons with non-React ones.\n\n\n var otherProps = getFiberCurrentPropsFromNode$1(otherNode);\n\n if (!otherProps) {\n {\n throw Error( \"ReactDOMInput: Mixing React and non-React radio inputs with the same `name` is not supported.\" );\n }\n } // We need update the tracked value on the named cousin since the value\n // was changed but the input saw no event or value set\n\n\n updateValueIfChanged(otherNode); // If this is a controlled radio button group, forcing the input that\n // was previously checked to update will cause it to be come re-checked\n // as appropriate.\n\n updateWrapper(otherNode, otherProps);\n }\n }\n} // In Chrome, assigning defaultValue to certain input types triggers input validation.\n// For number inputs, the display value loses trailing decimal points. For email inputs,\n// Chrome raises \"The specified value <x> is not a valid email address\".\n//\n// Here we check to see if the defaultValue has actually changed, avoiding these problems\n// when the user is inputting text\n//\n// https://github.com/facebook/react/issues/7253\n\n\nfunction setDefaultValue(node, type, value) {\n if ( // Focused number inputs synchronize on blur. See ChangeEventPlugin.js\n type !== 'number' || node.ownerDocument.activeElement !== node) {\n if (value == null) {\n node.defaultValue = toString(node._wrapperState.initialValue);\n } else if (node.defaultValue !== toString(value)) {\n node.defaultValue = toString(value);\n }\n }\n}\n\nvar didWarnSelectedSetOnOption = false;\nvar didWarnInvalidChild = false;\n\nfunction flattenChildren(children) {\n var content = ''; // Flatten children. We'll warn if they are invalid\n // during validateProps() which runs for hydration too.\n // Note that this would throw on non-element objects.\n // Elements are stringified (which is normally irrelevant\n // but matters for <fbt>).\n\n React.Children.forEach(children, function (child) {\n if (child == null) {\n return;\n }\n\n content += child; // Note: we don't warn about invalid children here.\n // Instead, this is done separately below so that\n // it happens during the hydration codepath too.\n });\n return content;\n}\n/**\n * Implements an <option> host component that warns when `selected` is set.\n */\n\n\nfunction validateProps(element, props) {\n {\n // This mirrors the codepath above, but runs for hydration too.\n // Warn about invalid children here so that client and hydration are consistent.\n // TODO: this seems like it could cause a DEV-only throw for hydration\n // if children contains a non-element object. We should try to avoid that.\n if (typeof props.children === 'object' && props.children !== null) {\n React.Children.forEach(props.children, function (child) {\n if (child == null) {\n return;\n }\n\n if (typeof child === 'string' || typeof child === 'number') {\n return;\n }\n\n if (typeof child.type !== 'string') {\n return;\n }\n\n if (!didWarnInvalidChild) {\n didWarnInvalidChild = true;\n\n error('Only strings and numbers are supported as <option> children.');\n }\n });\n } // TODO: Remove support for `selected` in <option>.\n\n\n if (props.selected != null && !didWarnSelectedSetOnOption) {\n error('Use the `defaultValue` or `value` props on <select> instead of ' + 'setting `selected` on <option>.');\n\n didWarnSelectedSetOnOption = true;\n }\n }\n}\nfunction postMountWrapper$1(element, props) {\n // value=\"\" should make a value attribute (#6219)\n if (props.value != null) {\n element.setAttribute('value', toString(getToStringValue(props.value)));\n }\n}\nfunction getHostProps$1(element, props) {\n var hostProps = _assign({\n children: undefined\n }, props);\n\n var content = flattenChildren(props.children);\n\n if (content) {\n hostProps.children = content;\n }\n\n return hostProps;\n}\n\nvar didWarnValueDefaultValue$1;\n\n{\n didWarnValueDefaultValue$1 = false;\n}\n\nfunction getDeclarationErrorAddendum() {\n var ownerName = getCurrentFiberOwnerNameInDevOrNull();\n\n if (ownerName) {\n return '\\n\\nCheck the render method of `' + ownerName + '`.';\n }\n\n return '';\n}\n\nvar valuePropNames = ['value', 'defaultValue'];\n/**\n * Validation function for `value` and `defaultValue`.\n */\n\nfunction checkSelectPropTypes(props) {\n {\n ReactControlledValuePropTypes.checkPropTypes('select', props);\n\n for (var i = 0; i < valuePropNames.length; i++) {\n var propName = valuePropNames[i];\n\n if (props[propName] == null) {\n continue;\n }\n\n var isArray = Array.isArray(props[propName]);\n\n if (props.multiple && !isArray) {\n error('The `%s` prop supplied to <select> must be an array if ' + '`multiple` is true.%s', propName, getDeclarationErrorAddendum());\n } else if (!props.multiple && isArray) {\n error('The `%s` prop supplied to <select> must be a scalar ' + 'value if `multiple` is false.%s', propName, getDeclarationErrorAddendum());\n }\n }\n }\n}\n\nfunction updateOptions(node, multiple, propValue, setDefaultSelected) {\n var options = node.options;\n\n if (multiple) {\n var selectedValues = propValue;\n var selectedValue = {};\n\n for (var i = 0; i < selectedValues.length; i++) {\n // Prefix to avoid chaos with special keys.\n selectedValue['$' + selectedValues[i]] = true;\n }\n\n for (var _i = 0; _i < options.length; _i++) {\n var selected = selectedValue.hasOwnProperty('$' + options[_i].value);\n\n if (options[_i].selected !== selected) {\n options[_i].selected = selected;\n }\n\n if (selected && setDefaultSelected) {\n options[_i].defaultSelected = true;\n }\n }\n } else {\n // Do not set `select.value` as exact behavior isn't consistent across all\n // browsers for all cases.\n var _selectedValue = toString(getToStringValue(propValue));\n\n var defaultSelected = null;\n\n for (var _i2 = 0; _i2 < options.length; _i2++) {\n if (options[_i2].value === _selectedValue) {\n options[_i2].selected = true;\n\n if (setDefaultSelected) {\n options[_i2].defaultSelected = true;\n }\n\n return;\n }\n\n if (defaultSelected === null && !options[_i2].disabled) {\n defaultSelected = options[_i2];\n }\n }\n\n if (defaultSelected !== null) {\n defaultSelected.selected = true;\n }\n }\n}\n/**\n * Implements a <select> host component that allows optionally setting the\n * props `value` and `defaultValue`. If `multiple` is false, the prop must be a\n * stringable. If `multiple` is true, the prop must be an array of stringables.\n *\n * If `value` is not supplied (or null/undefined), user actions that change the\n * selected option will trigger updates to the rendered options.\n *\n * If it is supplied (and not null/undefined), the rendered options will not\n * update in response to user actions. Instead, the `value` prop must change in\n * order for the rendered options to update.\n *\n * If `defaultValue` is provided, any options with the supplied values will be\n * selected.\n */\n\n\nfunction getHostProps$2(element, props) {\n return _assign({}, props, {\n value: undefined\n });\n}\nfunction initWrapperState$1(element, props) {\n var node = element;\n\n {\n checkSelectPropTypes(props);\n }\n\n node._wrapperState = {\n wasMultiple: !!props.multiple\n };\n\n {\n if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValueDefaultValue$1) {\n error('Select elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled select ' + 'element and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components');\n\n didWarnValueDefaultValue$1 = true;\n }\n }\n}\nfunction postMountWrapper$2(element, props) {\n var node = element;\n node.multiple = !!props.multiple;\n var value = props.value;\n\n if (value != null) {\n updateOptions(node, !!props.multiple, value, false);\n } else if (props.defaultValue != null) {\n updateOptions(node, !!props.multiple, props.defaultValue, true);\n }\n}\nfunction postUpdateWrapper(element, props) {\n var node = element;\n var wasMultiple = node._wrapperState.wasMultiple;\n node._wrapperState.wasMultiple = !!props.multiple;\n var value = props.value;\n\n if (value != null) {\n updateOptions(node, !!props.multiple, value, false);\n } else if (wasMultiple !== !!props.multiple) {\n // For simplicity, reapply `defaultValue` if `multiple` is toggled.\n if (props.defaultValue != null) {\n updateOptions(node, !!props.multiple, props.defaultValue, true);\n } else {\n // Revert the select back to its default unselected state.\n updateOptions(node, !!props.multiple, props.multiple ? [] : '', false);\n }\n }\n}\nfunction restoreControlledState$1(element, props) {\n var node = element;\n var value = props.value;\n\n if (value != null) {\n updateOptions(node, !!props.multiple, value, false);\n }\n}\n\nvar didWarnValDefaultVal = false;\n\n/**\n * Implements a <textarea> host component that allows setting `value`, and\n * `defaultValue`. This differs from the traditional DOM API because value is\n * usually set as PCDATA children.\n *\n * If `value` is not supplied (or null/undefined), user actions that affect the\n * value will trigger updates to the element.\n *\n * If `value` is supplied (and not null/undefined), the rendered element will\n * not trigger updates to the element. Instead, the `value` prop must change in\n * order for the rendered element to be updated.\n *\n * The rendered element will be initialized with an empty value, the prop\n * `defaultValue` if specified, or the children content (deprecated).\n */\nfunction getHostProps$3(element, props) {\n var node = element;\n\n if (!(props.dangerouslySetInnerHTML == null)) {\n {\n throw Error( \"`dangerouslySetInnerHTML` does not make sense on <textarea>.\" );\n }\n } // Always set children to the same thing. In IE9, the selection range will\n // get reset if `textContent` is mutated. We could add a check in setTextContent\n // to only set the value if/when the value differs from the node value (which would\n // completely solve this IE9 bug), but Sebastian+Sophie seemed to like this\n // solution. The value can be a boolean or object so that's why it's forced\n // to be a string.\n\n\n var hostProps = _assign({}, props, {\n value: undefined,\n defaultValue: undefined,\n children: toString(node._wrapperState.initialValue)\n });\n\n return hostProps;\n}\nfunction initWrapperState$2(element, props) {\n var node = element;\n\n {\n ReactControlledValuePropTypes.checkPropTypes('textarea', props);\n\n if (props.value !== undefined && props.defaultValue !== undefined && !didWarnValDefaultVal) {\n error('%s contains a textarea with both value and defaultValue props. ' + 'Textarea elements must be either controlled or uncontrolled ' + '(specify either the value prop, or the defaultValue prop, but not ' + 'both). Decide between using a controlled or uncontrolled textarea ' + 'and remove one of these props. More info: ' + 'https://fb.me/react-controlled-components', getCurrentFiberOwnerNameInDevOrNull() || 'A component');\n\n didWarnValDefaultVal = true;\n }\n }\n\n var initialValue = props.value; // Only bother fetching default value if we're going to use it\n\n if (initialValue == null) {\n var children = props.children,\n defaultValue = props.defaultValue;\n\n if (children != null) {\n {\n error('Use the `defaultValue` or `value` props instead of setting ' + 'children on <textarea>.');\n }\n\n {\n if (!(defaultValue == null)) {\n {\n throw Error( \"If you supply `defaultValue` on a <textarea>, do not pass children.\" );\n }\n }\n\n if (Array.isArray(children)) {\n if (!(children.length <= 1)) {\n {\n throw Error( \"<textarea> can only have at most one child.\" );\n }\n }\n\n children = children[0];\n }\n\n defaultValue = children;\n }\n }\n\n if (defaultValue == null) {\n defaultValue = '';\n }\n\n initialValue = defaultValue;\n }\n\n node._wrapperState = {\n initialValue: getToStringValue(initialValue)\n };\n}\nfunction updateWrapper$1(element, props) {\n var node = element;\n var value = getToStringValue(props.value);\n var defaultValue = getToStringValue(props.defaultValue);\n\n if (value != null) {\n // Cast `value` to a string to ensure the value is set correctly. While\n // browsers typically do this as necessary, jsdom doesn't.\n var newValue = toString(value); // To avoid side effects (such as losing text selection), only set value if changed\n\n if (newValue !== node.value) {\n node.value = newValue;\n }\n\n if (props.defaultValue == null && node.defaultValue !== newValue) {\n node.defaultValue = newValue;\n }\n }\n\n if (defaultValue != null) {\n node.defaultValue = toString(defaultValue);\n }\n}\nfunction postMountWrapper$3(element, props) {\n var node = element; // This is in postMount because we need access to the DOM node, which is not\n // available until after the component has mounted.\n\n var textContent = node.textContent; // Only set node.value if textContent is equal to the expected\n // initial value. In IE10/IE11 there is a bug where the placeholder attribute\n // will populate textContent as well.\n // https://developer.microsoft.com/microsoft-edge/platform/issues/101525/\n\n if (textContent === node._wrapperState.initialValue) {\n if (textContent !== '' && textContent !== null) {\n node.value = textContent;\n }\n }\n}\nfunction restoreControlledState$2(element, props) {\n // DOM component is still mounted; update\n updateWrapper$1(element, props);\n}\n\nvar HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\nvar MATH_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\nvar SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\nvar Namespaces = {\n html: HTML_NAMESPACE,\n mathml: MATH_NAMESPACE,\n svg: SVG_NAMESPACE\n}; // Assumes there is no parent namespace.\n\nfunction getIntrinsicNamespace(type) {\n switch (type) {\n case 'svg':\n return SVG_NAMESPACE;\n\n case 'math':\n return MATH_NAMESPACE;\n\n default:\n return HTML_NAMESPACE;\n }\n}\nfunction getChildNamespace(parentNamespace, type) {\n if (parentNamespace == null || parentNamespace === HTML_NAMESPACE) {\n // No (or default) parent namespace: potential entry point.\n return getIntrinsicNamespace(type);\n }\n\n if (parentNamespace === SVG_NAMESPACE && type === 'foreignObject') {\n // We're leaving SVG.\n return HTML_NAMESPACE;\n } // By default, pass namespace below.\n\n\n return parentNamespace;\n}\n\n/* globals MSApp */\n\n/**\n * Create a function which has 'unsafe' privileges (required by windows8 apps)\n */\nvar createMicrosoftUnsafeLocalFunction = function (func) {\n if (typeof MSApp !== 'undefined' && MSApp.execUnsafeLocalFunction) {\n return function (arg0, arg1, arg2, arg3) {\n MSApp.execUnsafeLocalFunction(function () {\n return func(arg0, arg1, arg2, arg3);\n });\n };\n } else {\n return func;\n }\n};\n\nvar reusableSVGContainer;\n/**\n * Set the innerHTML property of a node\n *\n * @param {DOMElement} node\n * @param {string} html\n * @internal\n */\n\nvar setInnerHTML = createMicrosoftUnsafeLocalFunction(function (node, html) {\n if (node.namespaceURI === Namespaces.svg) {\n\n if (!('innerHTML' in node)) {\n // IE does not have innerHTML for SVG nodes, so instead we inject the\n // new markup in a temp node and then move the child nodes across into\n // the target node\n reusableSVGContainer = reusableSVGContainer || document.createElement('div');\n reusableSVGContainer.innerHTML = '<svg>' + html.valueOf().toString() + '</svg>';\n var svgNode = reusableSVGContainer.firstChild;\n\n while (node.firstChild) {\n node.removeChild(node.firstChild);\n }\n\n while (svgNode.firstChild) {\n node.appendChild(svgNode.firstChild);\n }\n\n return;\n }\n }\n\n node.innerHTML = html;\n});\n\n/**\n * HTML nodeType values that represent the type of the node\n */\nvar ELEMENT_NODE = 1;\nvar TEXT_NODE = 3;\nvar COMMENT_NODE = 8;\nvar DOCUMENT_NODE = 9;\nvar DOCUMENT_FRAGMENT_NODE = 11;\n\n/**\n * Set the textContent property of a node. For text updates, it's faster\n * to set the `nodeValue` of the Text node directly instead of using\n * `.textContent` which will remove the existing node and create a new one.\n *\n * @param {DOMElement} node\n * @param {string} text\n * @internal\n */\n\nvar setTextContent = function (node, text) {\n if (text) {\n var firstChild = node.firstChild;\n\n if (firstChild && firstChild === node.lastChild && firstChild.nodeType === TEXT_NODE) {\n firstChild.nodeValue = text;\n return;\n }\n }\n\n node.textContent = text;\n};\n\n// Do not use the below two methods directly!\n// Instead use constants exported from DOMTopLevelEventTypes in ReactDOM.\n// (It is the only module that is allowed to access these methods.)\nfunction unsafeCastStringToDOMTopLevelType(topLevelType) {\n return topLevelType;\n}\nfunction unsafeCastDOMTopLevelTypeToString(topLevelType) {\n return topLevelType;\n}\n\n/**\n * Generate a mapping of standard vendor prefixes using the defined style property and event name.\n *\n * @param {string} styleProp\n * @param {string} eventName\n * @returns {object}\n */\n\nfunction makePrefixMap(styleProp, eventName) {\n var prefixes = {};\n prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();\n prefixes['Webkit' + styleProp] = 'webkit' + eventName;\n prefixes['Moz' + styleProp] = 'moz' + eventName;\n return prefixes;\n}\n/**\n * A list of event names to a configurable list of vendor prefixes.\n */\n\n\nvar vendorPrefixes = {\n animationend: makePrefixMap('Animation', 'AnimationEnd'),\n animationiteration: makePrefixMap('Animation', 'AnimationIteration'),\n animationstart: makePrefixMap('Animation', 'AnimationStart'),\n transitionend: makePrefixMap('Transition', 'TransitionEnd')\n};\n/**\n * Event names that have already been detected and prefixed (if applicable).\n */\n\nvar prefixedEventNames = {};\n/**\n * Element to check for prefixes on.\n */\n\nvar style = {};\n/**\n * Bootstrap if a DOM exists.\n */\n\nif (canUseDOM) {\n style = document.createElement('div').style; // On some platforms, in particular some releases of Android 4.x,\n // the un-prefixed \"animation\" and \"transition\" properties are defined on the\n // style object but the events that fire will still be prefixed, so we need\n // to check if the un-prefixed events are usable, and if not remove them from the map.\n\n if (!('AnimationEvent' in window)) {\n delete vendorPrefixes.animationend.animation;\n delete vendorPrefixes.animationiteration.animation;\n delete vendorPrefixes.animationstart.animation;\n } // Same as above\n\n\n if (!('TransitionEvent' in window)) {\n delete vendorPrefixes.transitionend.transition;\n }\n}\n/**\n * Attempts to determine the correct vendor prefixed event name.\n *\n * @param {string} eventName\n * @returns {string}\n */\n\n\nfunction getVendorPrefixedEventName(eventName) {\n if (prefixedEventNames[eventName]) {\n return prefixedEventNames[eventName];\n } else if (!vendorPrefixes[eventName]) {\n return eventName;\n }\n\n var prefixMap = vendorPrefixes[eventName];\n\n for (var styleProp in prefixMap) {\n if (prefixMap.hasOwnProperty(styleProp) && styleProp in style) {\n return prefixedEventNames[eventName] = prefixMap[styleProp];\n }\n }\n\n return eventName;\n}\n\n/**\n * To identify top level events in ReactDOM, we use constants defined by this\n * module. This is the only module that uses the unsafe* methods to express\n * that the constants actually correspond to the browser event names. This lets\n * us save some bundle size by avoiding a top level type -> event name map.\n * The rest of ReactDOM code should import top level types from this file.\n */\n\nvar TOP_ABORT = unsafeCastStringToDOMTopLevelType('abort');\nvar TOP_ANIMATION_END = unsafeCastStringToDOMTopLevelType(getVendorPrefixedEventName('animationend'));\nvar TOP_ANIMATION_ITERATION = unsafeCastStringToDOMTopLevelType(getVendorPrefixedEventName('animationiteration'));\nvar TOP_ANIMATION_START = unsafeCastStringToDOMTopLevelType(getVendorPrefixedEventName('animationstart'));\nvar TOP_BLUR = unsafeCastStringToDOMTopLevelType('blur');\nvar TOP_CAN_PLAY = unsafeCastStringToDOMTopLevelType('canplay');\nvar TOP_CAN_PLAY_THROUGH = unsafeCastStringToDOMTopLevelType('canplaythrough');\nvar TOP_CANCEL = unsafeCastStringToDOMTopLevelType('cancel');\nvar TOP_CHANGE = unsafeCastStringToDOMTopLevelType('change');\nvar TOP_CLICK = unsafeCastStringToDOMTopLevelType('click');\nvar TOP_CLOSE = unsafeCastStringToDOMTopLevelType('close');\nvar TOP_COMPOSITION_END = unsafeCastStringToDOMTopLevelType('compositionend');\nvar TOP_COMPOSITION_START = unsafeCastStringToDOMTopLevelType('compositionstart');\nvar TOP_COMPOSITION_UPDATE = unsafeCastStringToDOMTopLevelType('compositionupdate');\nvar TOP_CONTEXT_MENU = unsafeCastStringToDOMTopLevelType('contextmenu');\nvar TOP_COPY = unsafeCastStringToDOMTopLevelType('copy');\nvar TOP_CUT = unsafeCastStringToDOMTopLevelType('cut');\nvar TOP_DOUBLE_CLICK = unsafeCastStringToDOMTopLevelType('dblclick');\nvar TOP_AUX_CLICK = unsafeCastStringToDOMTopLevelType('auxclick');\nvar TOP_DRAG = unsafeCastStringToDOMTopLevelType('drag');\nvar TOP_DRAG_END = unsafeCastStringToDOMTopLevelType('dragend');\nvar TOP_DRAG_ENTER = unsafeCastStringToDOMTopLevelType('dragenter');\nvar TOP_DRAG_EXIT = unsafeCastStringToDOMTopLevelType('dragexit');\nvar TOP_DRAG_LEAVE = unsafeCastStringToDOMTopLevelType('dragleave');\nvar TOP_DRAG_OVER = unsafeCastStringToDOMTopLevelType('dragover');\nvar TOP_DRAG_START = unsafeCastStringToDOMTopLevelType('dragstart');\nvar TOP_DROP = unsafeCastStringToDOMTopLevelType('drop');\nvar TOP_DURATION_CHANGE = unsafeCastStringToDOMTopLevelType('durationchange');\nvar TOP_EMPTIED = unsafeCastStringToDOMTopLevelType('emptied');\nvar TOP_ENCRYPTED = unsafeCastStringToDOMTopLevelType('encrypted');\nvar TOP_ENDED = unsafeCastStringToDOMTopLevelType('ended');\nvar TOP_ERROR = unsafeCastStringToDOMTopLevelType('error');\nvar TOP_FOCUS = unsafeCastStringToDOMTopLevelType('focus');\nvar TOP_GOT_POINTER_CAPTURE = unsafeCastStringToDOMTopLevelType('gotpointercapture');\nvar TOP_INPUT = unsafeCastStringToDOMTopLevelType('input');\nvar TOP_INVALID = unsafeCastStringToDOMTopLevelType('invalid');\nvar TOP_KEY_DOWN = unsafeCastStringToDOMTopLevelType('keydown');\nvar TOP_KEY_PRESS = unsafeCastStringToDOMTopLevelType('keypress');\nvar TOP_KEY_UP = unsafeCastStringToDOMTopLevelType('keyup');\nvar TOP_LOAD = unsafeCastStringToDOMTopLevelType('load');\nvar TOP_LOAD_START = unsafeCastStringToDOMTopLevelType('loadstart');\nvar TOP_LOADED_DATA = unsafeCastStringToDOMTopLevelType('loadeddata');\nvar TOP_LOADED_METADATA = unsafeCastStringToDOMTopLevelType('loadedmetadata');\nvar TOP_LOST_POINTER_CAPTURE = unsafeCastStringToDOMTopLevelType('lostpointercapture');\nvar TOP_MOUSE_DOWN = unsafeCastStringToDOMTopLevelType('mousedown');\nvar TOP_MOUSE_MOVE = unsafeCastStringToDOMTopLevelType('mousemove');\nvar TOP_MOUSE_OUT = unsafeCastStringToDOMTopLevelType('mouseout');\nvar TOP_MOUSE_OVER = unsafeCastStringToDOMTopLevelType('mouseover');\nvar TOP_MOUSE_UP = unsafeCastStringToDOMTopLevelType('mouseup');\nvar TOP_PASTE = unsafeCastStringToDOMTopLevelType('paste');\nvar TOP_PAUSE = unsafeCastStringToDOMTopLevelType('pause');\nvar TOP_PLAY = unsafeCastStringToDOMTopLevelType('play');\nvar TOP_PLAYING = unsafeCastStringToDOMTopLevelType('playing');\nvar TOP_POINTER_CANCEL = unsafeCastStringToDOMTopLevelType('pointercancel');\nvar TOP_POINTER_DOWN = unsafeCastStringToDOMTopLevelType('pointerdown');\nvar TOP_POINTER_MOVE = unsafeCastStringToDOMTopLevelType('pointermove');\nvar TOP_POINTER_OUT = unsafeCastStringToDOMTopLevelType('pointerout');\nvar TOP_POINTER_OVER = unsafeCastStringToDOMTopLevelType('pointerover');\nvar TOP_POINTER_UP = unsafeCastStringToDOMTopLevelType('pointerup');\nvar TOP_PROGRESS = unsafeCastStringToDOMTopLevelType('progress');\nvar TOP_RATE_CHANGE = unsafeCastStringToDOMTopLevelType('ratechange');\nvar TOP_RESET = unsafeCastStringToDOMTopLevelType('reset');\nvar TOP_SCROLL = unsafeCastStringToDOMTopLevelType('scroll');\nvar TOP_SEEKED = unsafeCastStringToDOMTopLevelType('seeked');\nvar TOP_SEEKING = unsafeCastStringToDOMTopLevelType('seeking');\nvar TOP_SELECTION_CHANGE = unsafeCastStringToDOMTopLevelType('selectionchange');\nvar TOP_STALLED = unsafeCastStringToDOMTopLevelType('stalled');\nvar TOP_SUBMIT = unsafeCastStringToDOMTopLevelType('submit');\nvar TOP_SUSPEND = unsafeCastStringToDOMTopLevelType('suspend');\nvar TOP_TEXT_INPUT = unsafeCastStringToDOMTopLevelType('textInput');\nvar TOP_TIME_UPDATE = unsafeCastStringToDOMTopLevelType('timeupdate');\nvar TOP_TOGGLE = unsafeCastStringToDOMTopLevelType('toggle');\nvar TOP_TOUCH_CANCEL = unsafeCastStringToDOMTopLevelType('touchcancel');\nvar TOP_TOUCH_END = unsafeCastStringToDOMTopLevelType('touchend');\nvar TOP_TOUCH_MOVE = unsafeCastStringToDOMTopLevelType('touchmove');\nvar TOP_TOUCH_START = unsafeCastStringToDOMTopLevelType('touchstart');\nvar TOP_TRANSITION_END = unsafeCastStringToDOMTopLevelType(getVendorPrefixedEventName('transitionend'));\nvar TOP_VOLUME_CHANGE = unsafeCastStringToDOMTopLevelType('volumechange');\nvar TOP_WAITING = unsafeCastStringToDOMTopLevelType('waiting');\nvar TOP_WHEEL = unsafeCastStringToDOMTopLevelType('wheel'); // List of events that need to be individually attached to media elements.\n// Note that events in this list will *not* be listened to at the top level\n// unless they're explicitly whitelisted in `ReactBrowserEventEmitter.listenTo`.\n\nvar mediaEventTypes = [TOP_ABORT, TOP_CAN_PLAY, TOP_CAN_PLAY_THROUGH, TOP_DURATION_CHANGE, TOP_EMPTIED, TOP_ENCRYPTED, TOP_ENDED, TOP_ERROR, TOP_LOADED_DATA, TOP_LOADED_METADATA, TOP_LOAD_START, TOP_PAUSE, TOP_PLAY, TOP_PLAYING, TOP_PROGRESS, TOP_RATE_CHANGE, TOP_SEEKED, TOP_SEEKING, TOP_STALLED, TOP_SUSPEND, TOP_TIME_UPDATE, TOP_VOLUME_CHANGE, TOP_WAITING];\nfunction getRawEventName(topLevelType) {\n return unsafeCastDOMTopLevelTypeToString(topLevelType);\n}\n\nvar PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map; // prettier-ignore\n\nvar elementListenerMap = new PossiblyWeakMap();\nfunction getListenerMapForElement(element) {\n var listenerMap = elementListenerMap.get(element);\n\n if (listenerMap === undefined) {\n listenerMap = new Map();\n elementListenerMap.set(element, listenerMap);\n }\n\n return listenerMap;\n}\n\n/**\n * `ReactInstanceMap` maintains a mapping from a public facing stateful\n * instance (key) and the internal representation (value). This allows public\n * methods to accept the user facing instance as an argument and map them back\n * to internal methods.\n *\n * Note that this module is currently shared and assumed to be stateless.\n * If this becomes an actual Map, that will break.\n */\nfunction get(key) {\n return key._reactInternalFiber;\n}\nfunction has(key) {\n return key._reactInternalFiber !== undefined;\n}\nfunction set(key, value) {\n key._reactInternalFiber = value;\n}\n\n// Don't change these two values. They're used by React Dev Tools.\nvar NoEffect =\n/* */\n0;\nvar PerformedWork =\n/* */\n1; // You can change the rest (and add more).\n\nvar Placement =\n/* */\n2;\nvar Update =\n/* */\n4;\nvar PlacementAndUpdate =\n/* */\n6;\nvar Deletion =\n/* */\n8;\nvar ContentReset =\n/* */\n16;\nvar Callback =\n/* */\n32;\nvar DidCapture =\n/* */\n64;\nvar Ref =\n/* */\n128;\nvar Snapshot =\n/* */\n256;\nvar Passive =\n/* */\n512;\nvar Hydrating =\n/* */\n1024;\nvar HydratingAndUpdate =\n/* */\n1028; // Passive & Update & Callback & Ref & Snapshot\n\nvar LifecycleEffectMask =\n/* */\n932; // Union of all host effects\n\nvar HostEffectMask =\n/* */\n2047;\nvar Incomplete =\n/* */\n2048;\nvar ShouldCapture =\n/* */\n4096;\n\nvar ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;\nfunction getNearestMountedFiber(fiber) {\n var node = fiber;\n var nearestMounted = fiber;\n\n if (!fiber.alternate) {\n // If there is no alternate, this might be a new tree that isn't inserted\n // yet. If it is, then it will have a pending insertion effect on it.\n var nextNode = node;\n\n do {\n node = nextNode;\n\n if ((node.effectTag & (Placement | Hydrating)) !== NoEffect) {\n // This is an insertion or in-progress hydration. The nearest possible\n // mounted fiber is the parent but we need to continue to figure out\n // if that one is still mounted.\n nearestMounted = node.return;\n }\n\n nextNode = node.return;\n } while (nextNode);\n } else {\n while (node.return) {\n node = node.return;\n }\n }\n\n if (node.tag === HostRoot) {\n // TODO: Check if this was a nested HostRoot when used with\n // renderContainerIntoSubtree.\n return nearestMounted;\n } // If we didn't hit the root, that means that we're in an disconnected tree\n // that has been unmounted.\n\n\n return null;\n}\nfunction getSuspenseInstanceFromFiber(fiber) {\n if (fiber.tag === SuspenseComponent) {\n var suspenseState = fiber.memoizedState;\n\n if (suspenseState === null) {\n var current = fiber.alternate;\n\n if (current !== null) {\n suspenseState = current.memoizedState;\n }\n }\n\n if (suspenseState !== null) {\n return suspenseState.dehydrated;\n }\n }\n\n return null;\n}\nfunction getContainerFromFiber(fiber) {\n return fiber.tag === HostRoot ? fiber.stateNode.containerInfo : null;\n}\nfunction isFiberMounted(fiber) {\n return getNearestMountedFiber(fiber) === fiber;\n}\nfunction isMounted(component) {\n {\n var owner = ReactCurrentOwner.current;\n\n if (owner !== null && owner.tag === ClassComponent) {\n var ownerFiber = owner;\n var instance = ownerFiber.stateNode;\n\n if (!instance._warnedAboutRefsInRender) {\n error('%s is accessing isMounted inside its render() function. ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', getComponentName(ownerFiber.type) || 'A component');\n }\n\n instance._warnedAboutRefsInRender = true;\n }\n }\n\n var fiber = get(component);\n\n if (!fiber) {\n return false;\n }\n\n return getNearestMountedFiber(fiber) === fiber;\n}\n\nfunction assertIsMounted(fiber) {\n if (!(getNearestMountedFiber(fiber) === fiber)) {\n {\n throw Error( \"Unable to find node on an unmounted component.\" );\n }\n }\n}\n\nfunction findCurrentFiberUsingSlowPath(fiber) {\n var alternate = fiber.alternate;\n\n if (!alternate) {\n // If there is no alternate, then we only need to check if it is mounted.\n var nearestMounted = getNearestMountedFiber(fiber);\n\n if (!(nearestMounted !== null)) {\n {\n throw Error( \"Unable to find node on an unmounted component.\" );\n }\n }\n\n if (nearestMounted !== fiber) {\n return null;\n }\n\n return fiber;\n } // If we have two possible branches, we'll walk backwards up to the root\n // to see what path the root points to. On the way we may hit one of the\n // special cases and we'll deal with them.\n\n\n var a = fiber;\n var b = alternate;\n\n while (true) {\n var parentA = a.return;\n\n if (parentA === null) {\n // We're at the root.\n break;\n }\n\n var parentB = parentA.alternate;\n\n if (parentB === null) {\n // There is no alternate. This is an unusual case. Currently, it only\n // happens when a Suspense component is hidden. An extra fragment fiber\n // is inserted in between the Suspense fiber and its children. Skip\n // over this extra fragment fiber and proceed to the next parent.\n var nextParent = parentA.return;\n\n if (nextParent !== null) {\n a = b = nextParent;\n continue;\n } // If there's no parent, we're at the root.\n\n\n break;\n } // If both copies of the parent fiber point to the same child, we can\n // assume that the child is current. This happens when we bailout on low\n // priority: the bailed out fiber's child reuses the current child.\n\n\n if (parentA.child === parentB.child) {\n var child = parentA.child;\n\n while (child) {\n if (child === a) {\n // We've determined that A is the current branch.\n assertIsMounted(parentA);\n return fiber;\n }\n\n if (child === b) {\n // We've determined that B is the current branch.\n assertIsMounted(parentA);\n return alternate;\n }\n\n child = child.sibling;\n } // We should never have an alternate for any mounting node. So the only\n // way this could possibly happen is if this was unmounted, if at all.\n\n\n {\n {\n throw Error( \"Unable to find node on an unmounted component.\" );\n }\n }\n }\n\n if (a.return !== b.return) {\n // The return pointer of A and the return pointer of B point to different\n // fibers. We assume that return pointers never criss-cross, so A must\n // belong to the child set of A.return, and B must belong to the child\n // set of B.return.\n a = parentA;\n b = parentB;\n } else {\n // The return pointers point to the same fiber. We'll have to use the\n // default, slow path: scan the child sets of each parent alternate to see\n // which child belongs to which set.\n //\n // Search parent A's child set\n var didFindChild = false;\n var _child = parentA.child;\n\n while (_child) {\n if (_child === a) {\n didFindChild = true;\n a = parentA;\n b = parentB;\n break;\n }\n\n if (_child === b) {\n didFindChild = true;\n b = parentA;\n a = parentB;\n break;\n }\n\n _child = _child.sibling;\n }\n\n if (!didFindChild) {\n // Search parent B's child set\n _child = parentB.child;\n\n while (_child) {\n if (_child === a) {\n didFindChild = true;\n a = parentB;\n b = parentA;\n break;\n }\n\n if (_child === b) {\n didFindChild = true;\n b = parentB;\n a = parentA;\n break;\n }\n\n _child = _child.sibling;\n }\n\n if (!didFindChild) {\n {\n throw Error( \"Child was not found in either parent set. This indicates a bug in React related to the return pointer. Please file an issue.\" );\n }\n }\n }\n }\n\n if (!(a.alternate === b)) {\n {\n throw Error( \"Return fibers should always be each others' alternates. This error is likely caused by a bug in React. Please file an issue.\" );\n }\n }\n } // If the root is not a host container, we're in a disconnected tree. I.e.\n // unmounted.\n\n\n if (!(a.tag === HostRoot)) {\n {\n throw Error( \"Unable to find node on an unmounted component.\" );\n }\n }\n\n if (a.stateNode.current === a) {\n // We've determined that A is the current branch.\n return fiber;\n } // Otherwise B has to be current branch.\n\n\n return alternate;\n}\nfunction findCurrentHostFiber(parent) {\n var currentParent = findCurrentFiberUsingSlowPath(parent);\n\n if (!currentParent) {\n return null;\n } // Next we'll drill down this component to find the first HostComponent/Text.\n\n\n var node = currentParent;\n\n while (true) {\n if (node.tag === HostComponent || node.tag === HostText) {\n return node;\n } else if (node.child) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n\n if (node === currentParent) {\n return null;\n }\n\n while (!node.sibling) {\n if (!node.return || node.return === currentParent) {\n return null;\n }\n\n node = node.return;\n }\n\n node.sibling.return = node.return;\n node = node.sibling;\n } // Flow needs the return null here, but ESLint complains about it.\n // eslint-disable-next-line no-unreachable\n\n\n return null;\n}\nfunction findCurrentHostFiberWithNoPortals(parent) {\n var currentParent = findCurrentFiberUsingSlowPath(parent);\n\n if (!currentParent) {\n return null;\n } // Next we'll drill down this component to find the first HostComponent/Text.\n\n\n var node = currentParent;\n\n while (true) {\n if (node.tag === HostComponent || node.tag === HostText || enableFundamentalAPI ) {\n return node;\n } else if (node.child && node.tag !== HostPortal) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n\n if (node === currentParent) {\n return null;\n }\n\n while (!node.sibling) {\n if (!node.return || node.return === currentParent) {\n return null;\n }\n\n node = node.return;\n }\n\n node.sibling.return = node.return;\n node = node.sibling;\n } // Flow needs the return null here, but ESLint complains about it.\n // eslint-disable-next-line no-unreachable\n\n\n return null;\n}\n\n/**\n * Accumulates items that must not be null or undefined into the first one. This\n * is used to conserve memory by avoiding array allocations, and thus sacrifices\n * API cleanness. Since `current` can be null before being passed in and not\n * null after this function, make sure to assign it back to `current`:\n *\n * `a = accumulateInto(a, b);`\n *\n * This API should be sparingly used. Try `accumulate` for something cleaner.\n *\n * @return {*|array<*>} An accumulation of items.\n */\n\nfunction accumulateInto(current, next) {\n if (!(next != null)) {\n {\n throw Error( \"accumulateInto(...): Accumulated items must not be null or undefined.\" );\n }\n }\n\n if (current == null) {\n return next;\n } // Both are not empty. Warning: Never call x.concat(y) when you are not\n // certain that x is an Array (x could be a string with concat method).\n\n\n if (Array.isArray(current)) {\n if (Array.isArray(next)) {\n current.push.apply(current, next);\n return current;\n }\n\n current.push(next);\n return current;\n }\n\n if (Array.isArray(next)) {\n // A bit too dangerous to mutate `next`.\n return [current].concat(next);\n }\n\n return [current, next];\n}\n\n/**\n * @param {array} arr an \"accumulation\" of items which is either an Array or\n * a single item. Useful when paired with the `accumulate` module. This is a\n * simple utility that allows us to reason about a collection of items, but\n * handling the case when there is exactly one item (and we do not need to\n * allocate an array).\n * @param {function} cb Callback invoked with each element or a collection.\n * @param {?} [scope] Scope used as `this` in a callback.\n */\nfunction forEachAccumulated(arr, cb, scope) {\n if (Array.isArray(arr)) {\n arr.forEach(cb, scope);\n } else if (arr) {\n cb.call(scope, arr);\n }\n}\n\n/**\n * Internal queue of events that have accumulated their dispatches and are\n * waiting to have their dispatches executed.\n */\n\nvar eventQueue = null;\n/**\n * Dispatches an event and releases it back into the pool, unless persistent.\n *\n * @param {?object} event Synthetic event to be dispatched.\n * @private\n */\n\nvar executeDispatchesAndRelease = function (event) {\n if (event) {\n executeDispatchesInOrder(event);\n\n if (!event.isPersistent()) {\n event.constructor.release(event);\n }\n }\n};\n\nvar executeDispatchesAndReleaseTopLevel = function (e) {\n return executeDispatchesAndRelease(e);\n};\n\nfunction runEventsInBatch(events) {\n if (events !== null) {\n eventQueue = accumulateInto(eventQueue, events);\n } // Set `eventQueue` to null before processing it so that we can tell if more\n // events get enqueued while processing.\n\n\n var processingEventQueue = eventQueue;\n eventQueue = null;\n\n if (!processingEventQueue) {\n return;\n }\n\n forEachAccumulated(processingEventQueue, executeDispatchesAndReleaseTopLevel);\n\n if (!!eventQueue) {\n {\n throw Error( \"processEventQueue(): Additional events were enqueued while processing an event queue. Support for this has not yet been implemented.\" );\n }\n } // This would be a good time to rethrow if any of the event handlers threw.\n\n\n rethrowCaughtError();\n}\n\n/**\n * Gets the target node from a native browser event by accounting for\n * inconsistencies in browser DOM APIs.\n *\n * @param {object} nativeEvent Native browser event.\n * @return {DOMEventTarget} Target node.\n */\n\nfunction getEventTarget(nativeEvent) {\n // Fallback to nativeEvent.srcElement for IE9\n // https://github.com/facebook/react/issues/12506\n var target = nativeEvent.target || nativeEvent.srcElement || window; // Normalize SVG <use> element events #4963\n\n if (target.correspondingUseElement) {\n target = target.correspondingUseElement;\n } // Safari may fire events on text nodes (Node.TEXT_NODE is 3).\n // @see http://www.quirksmode.org/js/events_properties.html\n\n\n return target.nodeType === TEXT_NODE ? target.parentNode : target;\n}\n\n/**\n * Checks if an event is supported in the current execution environment.\n *\n * NOTE: This will not work correctly for non-generic events such as `change`,\n * `reset`, `load`, `error`, and `select`.\n *\n * Borrows from Modernizr.\n *\n * @param {string} eventNameSuffix Event name, e.g. \"click\".\n * @return {boolean} True if the event is supported.\n * @internal\n * @license Modernizr 3.0.0pre (Custom Build) | MIT\n */\n\nfunction isEventSupported(eventNameSuffix) {\n if (!canUseDOM) {\n return false;\n }\n\n var eventName = 'on' + eventNameSuffix;\n var isSupported = eventName in document;\n\n if (!isSupported) {\n var element = document.createElement('div');\n element.setAttribute(eventName, 'return;');\n isSupported = typeof element[eventName] === 'function';\n }\n\n return isSupported;\n}\n\n/**\n * Summary of `DOMEventPluginSystem` event handling:\n *\n * - Top-level delegation is used to trap most native browser events. This\n * may only occur in the main thread and is the responsibility of\n * ReactDOMEventListener, which is injected and can therefore support\n * pluggable event sources. This is the only work that occurs in the main\n * thread.\n *\n * - We normalize and de-duplicate events to account for browser quirks. This\n * may be done in the worker thread.\n *\n * - Forward these native events (with the associated top-level type used to\n * trap it) to `EventPluginRegistry`, which in turn will ask plugins if they want\n * to extract any synthetic events.\n *\n * - The `EventPluginRegistry` will then process each event by annotating them with\n * \"dispatches\", a sequence of listeners and IDs that care about that event.\n *\n * - The `EventPluginRegistry` then dispatches the events.\n *\n * Overview of React and the event system:\n *\n * +------------+ .\n * | DOM | .\n * +------------+ .\n * | .\n * v .\n * +------------+ .\n * | ReactEvent | .\n * | Listener | .\n * +------------+ . +-----------+\n * | . +--------+|SimpleEvent|\n * | . | |Plugin |\n * +-----|------+ . v +-----------+\n * | | | . +--------------+ +------------+\n * | +-----------.--->|PluginRegistry| | Event |\n * | | . | | +-----------+ | Propagators|\n * | ReactEvent | . | | |TapEvent | |------------|\n * | Emitter | . | |<---+|Plugin | |other plugin|\n * | | . | | +-----------+ | utilities |\n * | +-----------.--->| | +------------+\n * | | | . +--------------+\n * +-----|------+ . ^ +-----------+\n * | . | |Enter/Leave|\n * + . +-------+|Plugin |\n * +-------------+ . +-----------+\n * | application | .\n * |-------------| .\n * | | .\n * | | .\n * +-------------+ .\n * .\n * React Core . General Purpose Event Plugin System\n */\n\nvar CALLBACK_BOOKKEEPING_POOL_SIZE = 10;\nvar callbackBookkeepingPool = [];\n\nfunction releaseTopLevelCallbackBookKeeping(instance) {\n instance.topLevelType = null;\n instance.nativeEvent = null;\n instance.targetInst = null;\n instance.ancestors.length = 0;\n\n if (callbackBookkeepingPool.length < CALLBACK_BOOKKEEPING_POOL_SIZE) {\n callbackBookkeepingPool.push(instance);\n }\n} // Used to store ancestor hierarchy in top level callback\n\n\nfunction getTopLevelCallbackBookKeeping(topLevelType, nativeEvent, targetInst, eventSystemFlags) {\n if (callbackBookkeepingPool.length) {\n var instance = callbackBookkeepingPool.pop();\n instance.topLevelType = topLevelType;\n instance.eventSystemFlags = eventSystemFlags;\n instance.nativeEvent = nativeEvent;\n instance.targetInst = targetInst;\n return instance;\n }\n\n return {\n topLevelType: topLevelType,\n eventSystemFlags: eventSystemFlags,\n nativeEvent: nativeEvent,\n targetInst: targetInst,\n ancestors: []\n };\n}\n/**\n * Find the deepest React component completely containing the root of the\n * passed-in instance (for use when entire React trees are nested within each\n * other). If React trees are not nested, returns null.\n */\n\n\nfunction findRootContainerNode(inst) {\n if (inst.tag === HostRoot) {\n return inst.stateNode.containerInfo;\n } // TODO: It may be a good idea to cache this to prevent unnecessary DOM\n // traversal, but caching is difficult to do correctly without using a\n // mutation observer to listen for all DOM changes.\n\n\n while (inst.return) {\n inst = inst.return;\n }\n\n if (inst.tag !== HostRoot) {\n // This can happen if we're in a detached tree.\n return null;\n }\n\n return inst.stateNode.containerInfo;\n}\n/**\n * Allows registered plugins an opportunity to extract events from top-level\n * native browser events.\n *\n * @return {*} An accumulation of synthetic events.\n * @internal\n */\n\n\nfunction extractPluginEvents(topLevelType, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags) {\n var events = null;\n\n for (var i = 0; i < plugins.length; i++) {\n // Not every plugin in the ordering may be loaded at runtime.\n var possiblePlugin = plugins[i];\n\n if (possiblePlugin) {\n var extractedEvents = possiblePlugin.extractEvents(topLevelType, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags);\n\n if (extractedEvents) {\n events = accumulateInto(events, extractedEvents);\n }\n }\n }\n\n return events;\n}\n\nfunction runExtractedPluginEventsInBatch(topLevelType, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags) {\n var events = extractPluginEvents(topLevelType, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags);\n runEventsInBatch(events);\n}\n\nfunction handleTopLevel(bookKeeping) {\n var targetInst = bookKeeping.targetInst; // Loop through the hierarchy, in case there's any nested components.\n // It's important that we build the array of ancestors before calling any\n // event handlers, because event handlers can modify the DOM, leading to\n // inconsistencies with ReactMount's node cache. See #1105.\n\n var ancestor = targetInst;\n\n do {\n if (!ancestor) {\n var ancestors = bookKeeping.ancestors;\n ancestors.push(ancestor);\n break;\n }\n\n var root = findRootContainerNode(ancestor);\n\n if (!root) {\n break;\n }\n\n var tag = ancestor.tag;\n\n if (tag === HostComponent || tag === HostText) {\n bookKeeping.ancestors.push(ancestor);\n }\n\n ancestor = getClosestInstanceFromNode(root);\n } while (ancestor);\n\n for (var i = 0; i < bookKeeping.ancestors.length; i++) {\n targetInst = bookKeeping.ancestors[i];\n var eventTarget = getEventTarget(bookKeeping.nativeEvent);\n var topLevelType = bookKeeping.topLevelType;\n var nativeEvent = bookKeeping.nativeEvent;\n var eventSystemFlags = bookKeeping.eventSystemFlags; // If this is the first ancestor, we mark it on the system flags\n\n if (i === 0) {\n eventSystemFlags |= IS_FIRST_ANCESTOR;\n }\n\n runExtractedPluginEventsInBatch(topLevelType, targetInst, nativeEvent, eventTarget, eventSystemFlags);\n }\n}\n\nfunction dispatchEventForLegacyPluginEventSystem(topLevelType, eventSystemFlags, nativeEvent, targetInst) {\n var bookKeeping = getTopLevelCallbackBookKeeping(topLevelType, nativeEvent, targetInst, eventSystemFlags);\n\n try {\n // Event queue being processed in the same cycle allows\n // `preventDefault`.\n batchedEventUpdates(handleTopLevel, bookKeeping);\n } finally {\n releaseTopLevelCallbackBookKeeping(bookKeeping);\n }\n}\n/**\n * We listen for bubbled touch events on the document object.\n *\n * Firefox v8.01 (and possibly others) exhibited strange behavior when\n * mounting `onmousemove` events at some node that was not the document\n * element. The symptoms were that if your mouse is not moving over something\n * contained within that mount point (for example on the background) the\n * top-level listeners for `onmousemove` won't be called. However, if you\n * register the `mousemove` on the document object, then it will of course\n * catch all `mousemove`s. This along with iOS quirks, justifies restricting\n * top-level listeners to the document object only, at least for these\n * movement types of events and possibly all events.\n *\n * @see http://www.quirksmode.org/blog/archives/2010/09/click_event_del.html\n *\n * Also, `keyup`/`keypress`/`keydown` do not bubble to the window on IE, but\n * they bubble to document.\n *\n * @param {string} registrationName Name of listener (e.g. `onClick`).\n * @param {object} mountAt Container where to mount the listener\n */\n\nfunction legacyListenToEvent(registrationName, mountAt) {\n var listenerMap = getListenerMapForElement(mountAt);\n var dependencies = registrationNameDependencies[registrationName];\n\n for (var i = 0; i < dependencies.length; i++) {\n var dependency = dependencies[i];\n legacyListenToTopLevelEvent(dependency, mountAt, listenerMap);\n }\n}\nfunction legacyListenToTopLevelEvent(topLevelType, mountAt, listenerMap) {\n if (!listenerMap.has(topLevelType)) {\n switch (topLevelType) {\n case TOP_SCROLL:\n trapCapturedEvent(TOP_SCROLL, mountAt);\n break;\n\n case TOP_FOCUS:\n case TOP_BLUR:\n trapCapturedEvent(TOP_FOCUS, mountAt);\n trapCapturedEvent(TOP_BLUR, mountAt); // We set the flag for a single dependency later in this function,\n // but this ensures we mark both as attached rather than just one.\n\n listenerMap.set(TOP_BLUR, null);\n listenerMap.set(TOP_FOCUS, null);\n break;\n\n case TOP_CANCEL:\n case TOP_CLOSE:\n if (isEventSupported(getRawEventName(topLevelType))) {\n trapCapturedEvent(topLevelType, mountAt);\n }\n\n break;\n\n case TOP_INVALID:\n case TOP_SUBMIT:\n case TOP_RESET:\n // We listen to them on the target DOM elements.\n // Some of them bubble so we don't want them to fire twice.\n break;\n\n default:\n // By default, listen on the top level to all non-media events.\n // Media events don't bubble so adding the listener wouldn't do anything.\n var isMediaEvent = mediaEventTypes.indexOf(topLevelType) !== -1;\n\n if (!isMediaEvent) {\n trapBubbledEvent(topLevelType, mountAt);\n }\n\n break;\n }\n\n listenerMap.set(topLevelType, null);\n }\n}\nfunction isListeningToAllDependencies(registrationName, mountAt) {\n var listenerMap = getListenerMapForElement(mountAt);\n var dependencies = registrationNameDependencies[registrationName];\n\n for (var i = 0; i < dependencies.length; i++) {\n var dependency = dependencies[i];\n\n if (!listenerMap.has(dependency)) {\n return false;\n }\n }\n\n return true;\n}\n\nvar attemptUserBlockingHydration;\nfunction setAttemptUserBlockingHydration(fn) {\n attemptUserBlockingHydration = fn;\n}\nvar attemptContinuousHydration;\nfunction setAttemptContinuousHydration(fn) {\n attemptContinuousHydration = fn;\n}\nvar attemptHydrationAtCurrentPriority;\nfunction setAttemptHydrationAtCurrentPriority(fn) {\n attemptHydrationAtCurrentPriority = fn;\n} // TODO: Upgrade this definition once we're on a newer version of Flow that\nvar hasScheduledReplayAttempt = false; // The queue of discrete events to be replayed.\n\nvar queuedDiscreteEvents = []; // Indicates if any continuous event targets are non-null for early bailout.\n// if the last target was dehydrated.\n\nvar queuedFocus = null;\nvar queuedDrag = null;\nvar queuedMouse = null; // For pointer events there can be one latest event per pointerId.\n\nvar queuedPointers = new Map();\nvar queuedPointerCaptures = new Map(); // We could consider replaying selectionchange and touchmoves too.\n\nvar queuedExplicitHydrationTargets = [];\nfunction hasQueuedDiscreteEvents() {\n return queuedDiscreteEvents.length > 0;\n}\nvar discreteReplayableEvents = [TOP_MOUSE_DOWN, TOP_MOUSE_UP, TOP_TOUCH_CANCEL, TOP_TOUCH_END, TOP_TOUCH_START, TOP_AUX_CLICK, TOP_DOUBLE_CLICK, TOP_POINTER_CANCEL, TOP_POINTER_DOWN, TOP_POINTER_UP, TOP_DRAG_END, TOP_DRAG_START, TOP_DROP, TOP_COMPOSITION_END, TOP_COMPOSITION_START, TOP_KEY_DOWN, TOP_KEY_PRESS, TOP_KEY_UP, TOP_INPUT, TOP_TEXT_INPUT, TOP_CLOSE, TOP_CANCEL, TOP_COPY, TOP_CUT, TOP_PASTE, TOP_CLICK, TOP_CHANGE, TOP_CONTEXT_MENU, TOP_RESET, TOP_SUBMIT];\nvar continuousReplayableEvents = [TOP_FOCUS, TOP_BLUR, TOP_DRAG_ENTER, TOP_DRAG_LEAVE, TOP_MOUSE_OVER, TOP_MOUSE_OUT, TOP_POINTER_OVER, TOP_POINTER_OUT, TOP_GOT_POINTER_CAPTURE, TOP_LOST_POINTER_CAPTURE];\nfunction isReplayableDiscreteEvent(eventType) {\n return discreteReplayableEvents.indexOf(eventType) > -1;\n}\n\nfunction trapReplayableEventForDocument(topLevelType, document, listenerMap) {\n legacyListenToTopLevelEvent(topLevelType, document, listenerMap);\n}\n\nfunction eagerlyTrapReplayableEvents(container, document) {\n var listenerMapForDoc = getListenerMapForElement(document); // Discrete\n\n discreteReplayableEvents.forEach(function (topLevelType) {\n trapReplayableEventForDocument(topLevelType, document, listenerMapForDoc);\n }); // Continuous\n\n continuousReplayableEvents.forEach(function (topLevelType) {\n trapReplayableEventForDocument(topLevelType, document, listenerMapForDoc);\n });\n}\n\nfunction createQueuedReplayableEvent(blockedOn, topLevelType, eventSystemFlags, container, nativeEvent) {\n return {\n blockedOn: blockedOn,\n topLevelType: topLevelType,\n eventSystemFlags: eventSystemFlags | IS_REPLAYED,\n nativeEvent: nativeEvent,\n container: container\n };\n}\n\nfunction queueDiscreteEvent(blockedOn, topLevelType, eventSystemFlags, container, nativeEvent) {\n var queuedEvent = createQueuedReplayableEvent(blockedOn, topLevelType, eventSystemFlags, container, nativeEvent);\n queuedDiscreteEvents.push(queuedEvent);\n} // Resets the replaying for this type of continuous event to no event.\n\nfunction clearIfContinuousEvent(topLevelType, nativeEvent) {\n switch (topLevelType) {\n case TOP_FOCUS:\n case TOP_BLUR:\n queuedFocus = null;\n break;\n\n case TOP_DRAG_ENTER:\n case TOP_DRAG_LEAVE:\n queuedDrag = null;\n break;\n\n case TOP_MOUSE_OVER:\n case TOP_MOUSE_OUT:\n queuedMouse = null;\n break;\n\n case TOP_POINTER_OVER:\n case TOP_POINTER_OUT:\n {\n var pointerId = nativeEvent.pointerId;\n queuedPointers.delete(pointerId);\n break;\n }\n\n case TOP_GOT_POINTER_CAPTURE:\n case TOP_LOST_POINTER_CAPTURE:\n {\n var _pointerId = nativeEvent.pointerId;\n queuedPointerCaptures.delete(_pointerId);\n break;\n }\n }\n}\n\nfunction accumulateOrCreateContinuousQueuedReplayableEvent(existingQueuedEvent, blockedOn, topLevelType, eventSystemFlags, container, nativeEvent) {\n if (existingQueuedEvent === null || existingQueuedEvent.nativeEvent !== nativeEvent) {\n var queuedEvent = createQueuedReplayableEvent(blockedOn, topLevelType, eventSystemFlags, container, nativeEvent);\n\n if (blockedOn !== null) {\n var _fiber2 = getInstanceFromNode$1(blockedOn);\n\n if (_fiber2 !== null) {\n // Attempt to increase the priority of this target.\n attemptContinuousHydration(_fiber2);\n }\n }\n\n return queuedEvent;\n } // If we have already queued this exact event, then it's because\n // the different event systems have different DOM event listeners.\n // We can accumulate the flags and store a single event to be\n // replayed.\n\n\n existingQueuedEvent.eventSystemFlags |= eventSystemFlags;\n return existingQueuedEvent;\n}\n\nfunction queueIfContinuousEvent(blockedOn, topLevelType, eventSystemFlags, container, nativeEvent) {\n // These set relatedTarget to null because the replayed event will be treated as if we\n // moved from outside the window (no target) onto the target once it hydrates.\n // Instead of mutating we could clone the event.\n switch (topLevelType) {\n case TOP_FOCUS:\n {\n var focusEvent = nativeEvent;\n queuedFocus = accumulateOrCreateContinuousQueuedReplayableEvent(queuedFocus, blockedOn, topLevelType, eventSystemFlags, container, focusEvent);\n return true;\n }\n\n case TOP_DRAG_ENTER:\n {\n var dragEvent = nativeEvent;\n queuedDrag = accumulateOrCreateContinuousQueuedReplayableEvent(queuedDrag, blockedOn, topLevelType, eventSystemFlags, container, dragEvent);\n return true;\n }\n\n case TOP_MOUSE_OVER:\n {\n var mouseEvent = nativeEvent;\n queuedMouse = accumulateOrCreateContinuousQueuedReplayableEvent(queuedMouse, blockedOn, topLevelType, eventSystemFlags, container, mouseEvent);\n return true;\n }\n\n case TOP_POINTER_OVER:\n {\n var pointerEvent = nativeEvent;\n var pointerId = pointerEvent.pointerId;\n queuedPointers.set(pointerId, accumulateOrCreateContinuousQueuedReplayableEvent(queuedPointers.get(pointerId) || null, blockedOn, topLevelType, eventSystemFlags, container, pointerEvent));\n return true;\n }\n\n case TOP_GOT_POINTER_CAPTURE:\n {\n var _pointerEvent = nativeEvent;\n var _pointerId2 = _pointerEvent.pointerId;\n queuedPointerCaptures.set(_pointerId2, accumulateOrCreateContinuousQueuedReplayableEvent(queuedPointerCaptures.get(_pointerId2) || null, blockedOn, topLevelType, eventSystemFlags, container, _pointerEvent));\n return true;\n }\n }\n\n return false;\n} // Check if this target is unblocked. Returns true if it's unblocked.\n\nfunction attemptExplicitHydrationTarget(queuedTarget) {\n // TODO: This function shares a lot of logic with attemptToDispatchEvent.\n // Try to unify them. It's a bit tricky since it would require two return\n // values.\n var targetInst = getClosestInstanceFromNode(queuedTarget.target);\n\n if (targetInst !== null) {\n var nearestMounted = getNearestMountedFiber(targetInst);\n\n if (nearestMounted !== null) {\n var tag = nearestMounted.tag;\n\n if (tag === SuspenseComponent) {\n var instance = getSuspenseInstanceFromFiber(nearestMounted);\n\n if (instance !== null) {\n // We're blocked on hydrating this boundary.\n // Increase its priority.\n queuedTarget.blockedOn = instance;\n Scheduler.unstable_runWithPriority(queuedTarget.priority, function () {\n attemptHydrationAtCurrentPriority(nearestMounted);\n });\n return;\n }\n } else if (tag === HostRoot) {\n var root = nearestMounted.stateNode;\n\n if (root.hydrate) {\n queuedTarget.blockedOn = getContainerFromFiber(nearestMounted); // We don't currently have a way to increase the priority of\n // a root other than sync.\n\n return;\n }\n }\n }\n }\n\n queuedTarget.blockedOn = null;\n}\n\nfunction attemptReplayContinuousQueuedEvent(queuedEvent) {\n if (queuedEvent.blockedOn !== null) {\n return false;\n }\n\n var nextBlockedOn = attemptToDispatchEvent(queuedEvent.topLevelType, queuedEvent.eventSystemFlags, queuedEvent.container, queuedEvent.nativeEvent);\n\n if (nextBlockedOn !== null) {\n // We're still blocked. Try again later.\n var _fiber3 = getInstanceFromNode$1(nextBlockedOn);\n\n if (_fiber3 !== null) {\n attemptContinuousHydration(_fiber3);\n }\n\n queuedEvent.blockedOn = nextBlockedOn;\n return false;\n }\n\n return true;\n}\n\nfunction attemptReplayContinuousQueuedEventInMap(queuedEvent, key, map) {\n if (attemptReplayContinuousQueuedEvent(queuedEvent)) {\n map.delete(key);\n }\n}\n\nfunction replayUnblockedEvents() {\n hasScheduledReplayAttempt = false; // First replay discrete events.\n\n while (queuedDiscreteEvents.length > 0) {\n var nextDiscreteEvent = queuedDiscreteEvents[0];\n\n if (nextDiscreteEvent.blockedOn !== null) {\n // We're still blocked.\n // Increase the priority of this boundary to unblock\n // the next discrete event.\n var _fiber4 = getInstanceFromNode$1(nextDiscreteEvent.blockedOn);\n\n if (_fiber4 !== null) {\n attemptUserBlockingHydration(_fiber4);\n }\n\n break;\n }\n\n var nextBlockedOn = attemptToDispatchEvent(nextDiscreteEvent.topLevelType, nextDiscreteEvent.eventSystemFlags, nextDiscreteEvent.container, nextDiscreteEvent.nativeEvent);\n\n if (nextBlockedOn !== null) {\n // We're still blocked. Try again later.\n nextDiscreteEvent.blockedOn = nextBlockedOn;\n } else {\n // We've successfully replayed the first event. Let's try the next one.\n queuedDiscreteEvents.shift();\n }\n } // Next replay any continuous events.\n\n\n if (queuedFocus !== null && attemptReplayContinuousQueuedEvent(queuedFocus)) {\n queuedFocus = null;\n }\n\n if (queuedDrag !== null && attemptReplayContinuousQueuedEvent(queuedDrag)) {\n queuedDrag = null;\n }\n\n if (queuedMouse !== null && attemptReplayContinuousQueuedEvent(queuedMouse)) {\n queuedMouse = null;\n }\n\n queuedPointers.forEach(attemptReplayContinuousQueuedEventInMap);\n queuedPointerCaptures.forEach(attemptReplayContinuousQueuedEventInMap);\n}\n\nfunction scheduleCallbackIfUnblocked(queuedEvent, unblocked) {\n if (queuedEvent.blockedOn === unblocked) {\n queuedEvent.blockedOn = null;\n\n if (!hasScheduledReplayAttempt) {\n hasScheduledReplayAttempt = true; // Schedule a callback to attempt replaying as many events as are\n // now unblocked. This first might not actually be unblocked yet.\n // We could check it early to avoid scheduling an unnecessary callback.\n\n Scheduler.unstable_scheduleCallback(Scheduler.unstable_NormalPriority, replayUnblockedEvents);\n }\n }\n}\n\nfunction retryIfBlockedOn(unblocked) {\n // Mark anything that was blocked on this as no longer blocked\n // and eligible for a replay.\n if (queuedDiscreteEvents.length > 0) {\n scheduleCallbackIfUnblocked(queuedDiscreteEvents[0], unblocked); // This is a exponential search for each boundary that commits. I think it's\n // worth it because we expect very few discrete events to queue up and once\n // we are actually fully unblocked it will be fast to replay them.\n\n for (var i = 1; i < queuedDiscreteEvents.length; i++) {\n var queuedEvent = queuedDiscreteEvents[i];\n\n if (queuedEvent.blockedOn === unblocked) {\n queuedEvent.blockedOn = null;\n }\n }\n }\n\n if (queuedFocus !== null) {\n scheduleCallbackIfUnblocked(queuedFocus, unblocked);\n }\n\n if (queuedDrag !== null) {\n scheduleCallbackIfUnblocked(queuedDrag, unblocked);\n }\n\n if (queuedMouse !== null) {\n scheduleCallbackIfUnblocked(queuedMouse, unblocked);\n }\n\n var unblock = function (queuedEvent) {\n return scheduleCallbackIfUnblocked(queuedEvent, unblocked);\n };\n\n queuedPointers.forEach(unblock);\n queuedPointerCaptures.forEach(unblock);\n\n for (var _i = 0; _i < queuedExplicitHydrationTargets.length; _i++) {\n var queuedTarget = queuedExplicitHydrationTargets[_i];\n\n if (queuedTarget.blockedOn === unblocked) {\n queuedTarget.blockedOn = null;\n }\n }\n\n while (queuedExplicitHydrationTargets.length > 0) {\n var nextExplicitTarget = queuedExplicitHydrationTargets[0];\n\n if (nextExplicitTarget.blockedOn !== null) {\n // We're still blocked.\n break;\n } else {\n attemptExplicitHydrationTarget(nextExplicitTarget);\n\n if (nextExplicitTarget.blockedOn === null) {\n // We're unblocked.\n queuedExplicitHydrationTargets.shift();\n }\n }\n }\n}\n\nfunction addEventBubbleListener(element, eventType, listener) {\n element.addEventListener(eventType, listener, false);\n}\nfunction addEventCaptureListener(element, eventType, listener) {\n element.addEventListener(eventType, listener, true);\n}\n\n// do it in two places, which duplicates logic\n// and increases the bundle size, we do it all\n// here once. If we remove or refactor the\n// SimpleEventPlugin, we should also remove or\n// update the below line.\n\nvar simpleEventPluginEventTypes = {};\nvar topLevelEventsToDispatchConfig = new Map();\nvar eventPriorities = new Map(); // We store most of the events in this module in pairs of two strings so we can re-use\n// the code required to apply the same logic for event prioritization and that of the\n// SimpleEventPlugin. This complicates things slightly, but the aim is to reduce code\n// duplication (for which there would be quite a bit). For the events that are not needed\n// for the SimpleEventPlugin (otherDiscreteEvents) we process them separately as an\n// array of top level events.\n// Lastly, we ignore prettier so we can keep the formatting sane.\n// prettier-ignore\n\nvar discreteEventPairsForSimpleEventPlugin = [TOP_BLUR, 'blur', TOP_CANCEL, 'cancel', TOP_CLICK, 'click', TOP_CLOSE, 'close', TOP_CONTEXT_MENU, 'contextMenu', TOP_COPY, 'copy', TOP_CUT, 'cut', TOP_AUX_CLICK, 'auxClick', TOP_DOUBLE_CLICK, 'doubleClick', TOP_DRAG_END, 'dragEnd', TOP_DRAG_START, 'dragStart', TOP_DROP, 'drop', TOP_FOCUS, 'focus', TOP_INPUT, 'input', TOP_INVALID, 'invalid', TOP_KEY_DOWN, 'keyDown', TOP_KEY_PRESS, 'keyPress', TOP_KEY_UP, 'keyUp', TOP_MOUSE_DOWN, 'mouseDown', TOP_MOUSE_UP, 'mouseUp', TOP_PASTE, 'paste', TOP_PAUSE, 'pause', TOP_PLAY, 'play', TOP_POINTER_CANCEL, 'pointerCancel', TOP_POINTER_DOWN, 'pointerDown', TOP_POINTER_UP, 'pointerUp', TOP_RATE_CHANGE, 'rateChange', TOP_RESET, 'reset', TOP_SEEKED, 'seeked', TOP_SUBMIT, 'submit', TOP_TOUCH_CANCEL, 'touchCancel', TOP_TOUCH_END, 'touchEnd', TOP_TOUCH_START, 'touchStart', TOP_VOLUME_CHANGE, 'volumeChange'];\nvar otherDiscreteEvents = [TOP_CHANGE, TOP_SELECTION_CHANGE, TOP_TEXT_INPUT, TOP_COMPOSITION_START, TOP_COMPOSITION_END, TOP_COMPOSITION_UPDATE]; // prettier-ignore\n\nvar userBlockingPairsForSimpleEventPlugin = [TOP_DRAG, 'drag', TOP_DRAG_ENTER, 'dragEnter', TOP_DRAG_EXIT, 'dragExit', TOP_DRAG_LEAVE, 'dragLeave', TOP_DRAG_OVER, 'dragOver', TOP_MOUSE_MOVE, 'mouseMove', TOP_MOUSE_OUT, 'mouseOut', TOP_MOUSE_OVER, 'mouseOver', TOP_POINTER_MOVE, 'pointerMove', TOP_POINTER_OUT, 'pointerOut', TOP_POINTER_OVER, 'pointerOver', TOP_SCROLL, 'scroll', TOP_TOGGLE, 'toggle', TOP_TOUCH_MOVE, 'touchMove', TOP_WHEEL, 'wheel']; // prettier-ignore\n\nvar continuousPairsForSimpleEventPlugin = [TOP_ABORT, 'abort', TOP_ANIMATION_END, 'animationEnd', TOP_ANIMATION_ITERATION, 'animationIteration', TOP_ANIMATION_START, 'animationStart', TOP_CAN_PLAY, 'canPlay', TOP_CAN_PLAY_THROUGH, 'canPlayThrough', TOP_DURATION_CHANGE, 'durationChange', TOP_EMPTIED, 'emptied', TOP_ENCRYPTED, 'encrypted', TOP_ENDED, 'ended', TOP_ERROR, 'error', TOP_GOT_POINTER_CAPTURE, 'gotPointerCapture', TOP_LOAD, 'load', TOP_LOADED_DATA, 'loadedData', TOP_LOADED_METADATA, 'loadedMetadata', TOP_LOAD_START, 'loadStart', TOP_LOST_POINTER_CAPTURE, 'lostPointerCapture', TOP_PLAYING, 'playing', TOP_PROGRESS, 'progress', TOP_SEEKING, 'seeking', TOP_STALLED, 'stalled', TOP_SUSPEND, 'suspend', TOP_TIME_UPDATE, 'timeUpdate', TOP_TRANSITION_END, 'transitionEnd', TOP_WAITING, 'waiting'];\n/**\n * Turns\n * ['abort', ...]\n * into\n * eventTypes = {\n * 'abort': {\n * phasedRegistrationNames: {\n * bubbled: 'onAbort',\n * captured: 'onAbortCapture',\n * },\n * dependencies: [TOP_ABORT],\n * },\n * ...\n * };\n * topLevelEventsToDispatchConfig = new Map([\n * [TOP_ABORT, { sameConfig }],\n * ]);\n */\n\nfunction processSimpleEventPluginPairsByPriority(eventTypes, priority) {\n // As the event types are in pairs of two, we need to iterate\n // through in twos. The events are in pairs of two to save code\n // and improve init perf of processing this array, as it will\n // result in far fewer object allocations and property accesses\n // if we only use three arrays to process all the categories of\n // instead of tuples.\n for (var i = 0; i < eventTypes.length; i += 2) {\n var topEvent = eventTypes[i];\n var event = eventTypes[i + 1];\n var capitalizedEvent = event[0].toUpperCase() + event.slice(1);\n var onEvent = 'on' + capitalizedEvent;\n var config = {\n phasedRegistrationNames: {\n bubbled: onEvent,\n captured: onEvent + 'Capture'\n },\n dependencies: [topEvent],\n eventPriority: priority\n };\n eventPriorities.set(topEvent, priority);\n topLevelEventsToDispatchConfig.set(topEvent, config);\n simpleEventPluginEventTypes[event] = config;\n }\n}\n\nfunction processTopEventPairsByPriority(eventTypes, priority) {\n for (var i = 0; i < eventTypes.length; i++) {\n eventPriorities.set(eventTypes[i], priority);\n }\n} // SimpleEventPlugin\n\n\nprocessSimpleEventPluginPairsByPriority(discreteEventPairsForSimpleEventPlugin, DiscreteEvent);\nprocessSimpleEventPluginPairsByPriority(userBlockingPairsForSimpleEventPlugin, UserBlockingEvent);\nprocessSimpleEventPluginPairsByPriority(continuousPairsForSimpleEventPlugin, ContinuousEvent); // Not used by SimpleEventPlugin\n\nprocessTopEventPairsByPriority(otherDiscreteEvents, DiscreteEvent);\nfunction getEventPriorityForPluginSystem(topLevelType) {\n var priority = eventPriorities.get(topLevelType); // Default to a ContinuousEvent. Note: we might\n // want to warn if we can't detect the priority\n // for the event.\n\n return priority === undefined ? ContinuousEvent : priority;\n}\n\n// Intentionally not named imports because Rollup would use dynamic dispatch for\nvar UserBlockingPriority = Scheduler.unstable_UserBlockingPriority,\n runWithPriority = Scheduler.unstable_runWithPriority; // TODO: can we stop exporting these?\n\nvar _enabled = true;\nfunction setEnabled(enabled) {\n _enabled = !!enabled;\n}\nfunction isEnabled() {\n return _enabled;\n}\nfunction trapBubbledEvent(topLevelType, element) {\n trapEventForPluginEventSystem(element, topLevelType, false);\n}\nfunction trapCapturedEvent(topLevelType, element) {\n trapEventForPluginEventSystem(element, topLevelType, true);\n}\n\nfunction trapEventForPluginEventSystem(container, topLevelType, capture) {\n var listener;\n\n switch (getEventPriorityForPluginSystem(topLevelType)) {\n case DiscreteEvent:\n listener = dispatchDiscreteEvent.bind(null, topLevelType, PLUGIN_EVENT_SYSTEM, container);\n break;\n\n case UserBlockingEvent:\n listener = dispatchUserBlockingUpdate.bind(null, topLevelType, PLUGIN_EVENT_SYSTEM, container);\n break;\n\n case ContinuousEvent:\n default:\n listener = dispatchEvent.bind(null, topLevelType, PLUGIN_EVENT_SYSTEM, container);\n break;\n }\n\n var rawEventName = getRawEventName(topLevelType);\n\n if (capture) {\n addEventCaptureListener(container, rawEventName, listener);\n } else {\n addEventBubbleListener(container, rawEventName, listener);\n }\n}\n\nfunction dispatchDiscreteEvent(topLevelType, eventSystemFlags, container, nativeEvent) {\n flushDiscreteUpdatesIfNeeded(nativeEvent.timeStamp);\n discreteUpdates(dispatchEvent, topLevelType, eventSystemFlags, container, nativeEvent);\n}\n\nfunction dispatchUserBlockingUpdate(topLevelType, eventSystemFlags, container, nativeEvent) {\n runWithPriority(UserBlockingPriority, dispatchEvent.bind(null, topLevelType, eventSystemFlags, container, nativeEvent));\n}\n\nfunction dispatchEvent(topLevelType, eventSystemFlags, container, nativeEvent) {\n if (!_enabled) {\n return;\n }\n\n if (hasQueuedDiscreteEvents() && isReplayableDiscreteEvent(topLevelType)) {\n // If we already have a queue of discrete events, and this is another discrete\n // event, then we can't dispatch it regardless of its target, since they\n // need to dispatch in order.\n queueDiscreteEvent(null, // Flags that we're not actually blocked on anything as far as we know.\n topLevelType, eventSystemFlags, container, nativeEvent);\n return;\n }\n\n var blockedOn = attemptToDispatchEvent(topLevelType, eventSystemFlags, container, nativeEvent);\n\n if (blockedOn === null) {\n // We successfully dispatched this event.\n clearIfContinuousEvent(topLevelType, nativeEvent);\n return;\n }\n\n if (isReplayableDiscreteEvent(topLevelType)) {\n // This this to be replayed later once the target is available.\n queueDiscreteEvent(blockedOn, topLevelType, eventSystemFlags, container, nativeEvent);\n return;\n }\n\n if (queueIfContinuousEvent(blockedOn, topLevelType, eventSystemFlags, container, nativeEvent)) {\n return;\n } // We need to clear only if we didn't queue because\n // queueing is accummulative.\n\n\n clearIfContinuousEvent(topLevelType, nativeEvent); // This is not replayable so we'll invoke it but without a target,\n // in case the event system needs to trace it.\n\n {\n dispatchEventForLegacyPluginEventSystem(topLevelType, eventSystemFlags, nativeEvent, null);\n }\n} // Attempt dispatching an event. Returns a SuspenseInstance or Container if it's blocked.\n\nfunction attemptToDispatchEvent(topLevelType, eventSystemFlags, container, nativeEvent) {\n // TODO: Warn if _enabled is false.\n var nativeEventTarget = getEventTarget(nativeEvent);\n var targetInst = getClosestInstanceFromNode(nativeEventTarget);\n\n if (targetInst !== null) {\n var nearestMounted = getNearestMountedFiber(targetInst);\n\n if (nearestMounted === null) {\n // This tree has been unmounted already. Dispatch without a target.\n targetInst = null;\n } else {\n var tag = nearestMounted.tag;\n\n if (tag === SuspenseComponent) {\n var instance = getSuspenseInstanceFromFiber(nearestMounted);\n\n if (instance !== null) {\n // Queue the event to be replayed later. Abort dispatching since we\n // don't want this event dispatched twice through the event system.\n // TODO: If this is the first discrete event in the queue. Schedule an increased\n // priority for this boundary.\n return instance;\n } // This shouldn't happen, something went wrong but to avoid blocking\n // the whole system, dispatch the event without a target.\n // TODO: Warn.\n\n\n targetInst = null;\n } else if (tag === HostRoot) {\n var root = nearestMounted.stateNode;\n\n if (root.hydrate) {\n // If this happens during a replay something went wrong and it might block\n // the whole system.\n return getContainerFromFiber(nearestMounted);\n }\n\n targetInst = null;\n } else if (nearestMounted !== targetInst) {\n // If we get an event (ex: img onload) before committing that\n // component's mount, ignore it for now (that is, treat it as if it was an\n // event on a non-React tree). We might also consider queueing events and\n // dispatching them after the mount.\n targetInst = null;\n }\n }\n }\n\n {\n dispatchEventForLegacyPluginEventSystem(topLevelType, eventSystemFlags, nativeEvent, targetInst);\n } // We're not blocked on anything.\n\n\n return null;\n}\n\n// List derived from Gecko source code:\n// https://github.com/mozilla/gecko-dev/blob/4e638efc71/layout/style/test/property_database.js\nvar shorthandToLonghand = {\n animation: ['animationDelay', 'animationDirection', 'animationDuration', 'animationFillMode', 'animationIterationCount', 'animationName', 'animationPlayState', 'animationTimingFunction'],\n background: ['backgroundAttachment', 'backgroundClip', 'backgroundColor', 'backgroundImage', 'backgroundOrigin', 'backgroundPositionX', 'backgroundPositionY', 'backgroundRepeat', 'backgroundSize'],\n backgroundPosition: ['backgroundPositionX', 'backgroundPositionY'],\n border: ['borderBottomColor', 'borderBottomStyle', 'borderBottomWidth', 'borderImageOutset', 'borderImageRepeat', 'borderImageSlice', 'borderImageSource', 'borderImageWidth', 'borderLeftColor', 'borderLeftStyle', 'borderLeftWidth', 'borderRightColor', 'borderRightStyle', 'borderRightWidth', 'borderTopColor', 'borderTopStyle', 'borderTopWidth'],\n borderBlockEnd: ['borderBlockEndColor', 'borderBlockEndStyle', 'borderBlockEndWidth'],\n borderBlockStart: ['borderBlockStartColor', 'borderBlockStartStyle', 'borderBlockStartWidth'],\n borderBottom: ['borderBottomColor', 'borderBottomStyle', 'borderBottomWidth'],\n borderColor: ['borderBottomColor', 'borderLeftColor', 'borderRightColor', 'borderTopColor'],\n borderImage: ['borderImageOutset', 'borderImageRepeat', 'borderImageSlice', 'borderImageSource', 'borderImageWidth'],\n borderInlineEnd: ['borderInlineEndColor', 'borderInlineEndStyle', 'borderInlineEndWidth'],\n borderInlineStart: ['borderInlineStartColor', 'borderInlineStartStyle', 'borderInlineStartWidth'],\n borderLeft: ['borderLeftColor', 'borderLeftStyle', 'borderLeftWidth'],\n borderRadius: ['borderBottomLeftRadius', 'borderBottomRightRadius', 'borderTopLeftRadius', 'borderTopRightRadius'],\n borderRight: ['borderRightColor', 'borderRightStyle', 'borderRightWidth'],\n borderStyle: ['borderBottomStyle', 'borderLeftStyle', 'borderRightStyle', 'borderTopStyle'],\n borderTop: ['borderTopColor', 'borderTopStyle', 'borderTopWidth'],\n borderWidth: ['borderBottomWidth', 'borderLeftWidth', 'borderRightWidth', 'borderTopWidth'],\n columnRule: ['columnRuleColor', 'columnRuleStyle', 'columnRuleWidth'],\n columns: ['columnCount', 'columnWidth'],\n flex: ['flexBasis', 'flexGrow', 'flexShrink'],\n flexFlow: ['flexDirection', 'flexWrap'],\n font: ['fontFamily', 'fontFeatureSettings', 'fontKerning', 'fontLanguageOverride', 'fontSize', 'fontSizeAdjust', 'fontStretch', 'fontStyle', 'fontVariant', 'fontVariantAlternates', 'fontVariantCaps', 'fontVariantEastAsian', 'fontVariantLigatures', 'fontVariantNumeric', 'fontVariantPosition', 'fontWeight', 'lineHeight'],\n fontVariant: ['fontVariantAlternates', 'fontVariantCaps', 'fontVariantEastAsian', 'fontVariantLigatures', 'fontVariantNumeric', 'fontVariantPosition'],\n gap: ['columnGap', 'rowGap'],\n grid: ['gridAutoColumns', 'gridAutoFlow', 'gridAutoRows', 'gridTemplateAreas', 'gridTemplateColumns', 'gridTemplateRows'],\n gridArea: ['gridColumnEnd', 'gridColumnStart', 'gridRowEnd', 'gridRowStart'],\n gridColumn: ['gridColumnEnd', 'gridColumnStart'],\n gridColumnGap: ['columnGap'],\n gridGap: ['columnGap', 'rowGap'],\n gridRow: ['gridRowEnd', 'gridRowStart'],\n gridRowGap: ['rowGap'],\n gridTemplate: ['gridTemplateAreas', 'gridTemplateColumns', 'gridTemplateRows'],\n listStyle: ['listStyleImage', 'listStylePosition', 'listStyleType'],\n margin: ['marginBottom', 'marginLeft', 'marginRight', 'marginTop'],\n marker: ['markerEnd', 'markerMid', 'markerStart'],\n mask: ['maskClip', 'maskComposite', 'maskImage', 'maskMode', 'maskOrigin', 'maskPositionX', 'maskPositionY', 'maskRepeat', 'maskSize'],\n maskPosition: ['maskPositionX', 'maskPositionY'],\n outline: ['outlineColor', 'outlineStyle', 'outlineWidth'],\n overflow: ['overflowX', 'overflowY'],\n padding: ['paddingBottom', 'paddingLeft', 'paddingRight', 'paddingTop'],\n placeContent: ['alignContent', 'justifyContent'],\n placeItems: ['alignItems', 'justifyItems'],\n placeSelf: ['alignSelf', 'justifySelf'],\n textDecoration: ['textDecorationColor', 'textDecorationLine', 'textDecorationStyle'],\n textEmphasis: ['textEmphasisColor', 'textEmphasisStyle'],\n transition: ['transitionDelay', 'transitionDuration', 'transitionProperty', 'transitionTimingFunction'],\n wordWrap: ['overflowWrap']\n};\n\n/**\n * CSS properties which accept numbers but are not in units of \"px\".\n */\nvar isUnitlessNumber = {\n animationIterationCount: true,\n borderImageOutset: true,\n borderImageSlice: true,\n borderImageWidth: true,\n boxFlex: true,\n boxFlexGroup: true,\n boxOrdinalGroup: true,\n columnCount: true,\n columns: true,\n flex: true,\n flexGrow: true,\n flexPositive: true,\n flexShrink: true,\n flexNegative: true,\n flexOrder: true,\n gridArea: true,\n gridRow: true,\n gridRowEnd: true,\n gridRowSpan: true,\n gridRowStart: true,\n gridColumn: true,\n gridColumnEnd: true,\n gridColumnSpan: true,\n gridColumnStart: true,\n fontWeight: true,\n lineClamp: true,\n lineHeight: true,\n opacity: true,\n order: true,\n orphans: true,\n tabSize: true,\n widows: true,\n zIndex: true,\n zoom: true,\n // SVG-related properties\n fillOpacity: true,\n floodOpacity: true,\n stopOpacity: true,\n strokeDasharray: true,\n strokeDashoffset: true,\n strokeMiterlimit: true,\n strokeOpacity: true,\n strokeWidth: true\n};\n/**\n * @param {string} prefix vendor-specific prefix, eg: Webkit\n * @param {string} key style name, eg: transitionDuration\n * @return {string} style name prefixed with `prefix`, properly camelCased, eg:\n * WebkitTransitionDuration\n */\n\nfunction prefixKey(prefix, key) {\n return prefix + key.charAt(0).toUpperCase() + key.substring(1);\n}\n/**\n * Support style names that may come passed in prefixed by adding permutations\n * of vendor prefixes.\n */\n\n\nvar prefixes = ['Webkit', 'ms', 'Moz', 'O']; // Using Object.keys here, or else the vanilla for-in loop makes IE8 go into an\n// infinite loop, because it iterates over the newly added props too.\n\nObject.keys(isUnitlessNumber).forEach(function (prop) {\n prefixes.forEach(function (prefix) {\n isUnitlessNumber[prefixKey(prefix, prop)] = isUnitlessNumber[prop];\n });\n});\n\n/**\n * Convert a value into the proper css writable value. The style name `name`\n * should be logical (no hyphens), as specified\n * in `CSSProperty.isUnitlessNumber`.\n *\n * @param {string} name CSS property name such as `topMargin`.\n * @param {*} value CSS property value such as `10px`.\n * @return {string} Normalized style value with dimensions applied.\n */\n\nfunction dangerousStyleValue(name, value, isCustomProperty) {\n // Note that we've removed escapeTextForBrowser() calls here since the\n // whole string will be escaped when the attribute is injected into\n // the markup. If you provide unsafe user data here they can inject\n // arbitrary CSS which may be problematic (I couldn't repro this):\n // https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet\n // http://www.thespanner.co.uk/2007/11/26/ultimate-xss-css-injection/\n // This is not an XSS hole but instead a potential CSS injection issue\n // which has lead to a greater discussion about how we're going to\n // trust URLs moving forward. See #2115901\n var isEmpty = value == null || typeof value === 'boolean' || value === '';\n\n if (isEmpty) {\n return '';\n }\n\n if (!isCustomProperty && typeof value === 'number' && value !== 0 && !(isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name])) {\n return value + 'px'; // Presumes implicit 'px' suffix for unitless numbers\n }\n\n return ('' + value).trim();\n}\n\nvar uppercasePattern = /([A-Z])/g;\nvar msPattern = /^ms-/;\n/**\n * Hyphenates a camelcased CSS property name, for example:\n *\n * > hyphenateStyleName('backgroundColor')\n * < \"background-color\"\n * > hyphenateStyleName('MozTransition')\n * < \"-moz-transition\"\n * > hyphenateStyleName('msTransition')\n * < \"-ms-transition\"\n *\n * As Modernizr suggests (http://modernizr.com/docs/#prefixed), an `ms` prefix\n * is converted to `-ms-`.\n */\n\nfunction hyphenateStyleName(name) {\n return name.replace(uppercasePattern, '-$1').toLowerCase().replace(msPattern, '-ms-');\n}\n\nvar warnValidStyle = function () {};\n\n{\n // 'msTransform' is correct, but the other prefixes should be capitalized\n var badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/;\n var msPattern$1 = /^-ms-/;\n var hyphenPattern = /-(.)/g; // style values shouldn't contain a semicolon\n\n var badStyleValueWithSemicolonPattern = /;\\s*$/;\n var warnedStyleNames = {};\n var warnedStyleValues = {};\n var warnedForNaNValue = false;\n var warnedForInfinityValue = false;\n\n var camelize = function (string) {\n return string.replace(hyphenPattern, function (_, character) {\n return character.toUpperCase();\n });\n };\n\n var warnHyphenatedStyleName = function (name) {\n if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {\n return;\n }\n\n warnedStyleNames[name] = true;\n\n error('Unsupported style property %s. Did you mean %s?', name, // As Andi Smith suggests\n // (http://www.andismith.com/blog/2012/02/modernizr-prefixed/), an `-ms` prefix\n // is converted to lowercase `ms`.\n camelize(name.replace(msPattern$1, 'ms-')));\n };\n\n var warnBadVendoredStyleName = function (name) {\n if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {\n return;\n }\n\n warnedStyleNames[name] = true;\n\n error('Unsupported vendor-prefixed style property %s. Did you mean %s?', name, name.charAt(0).toUpperCase() + name.slice(1));\n };\n\n var warnStyleValueWithSemicolon = function (name, value) {\n if (warnedStyleValues.hasOwnProperty(value) && warnedStyleValues[value]) {\n return;\n }\n\n warnedStyleValues[value] = true;\n\n error(\"Style property values shouldn't contain a semicolon. \" + 'Try \"%s: %s\" instead.', name, value.replace(badStyleValueWithSemicolonPattern, ''));\n };\n\n var warnStyleValueIsNaN = function (name, value) {\n if (warnedForNaNValue) {\n return;\n }\n\n warnedForNaNValue = true;\n\n error('`NaN` is an invalid value for the `%s` css style property.', name);\n };\n\n var warnStyleValueIsInfinity = function (name, value) {\n if (warnedForInfinityValue) {\n return;\n }\n\n warnedForInfinityValue = true;\n\n error('`Infinity` is an invalid value for the `%s` css style property.', name);\n };\n\n warnValidStyle = function (name, value) {\n if (name.indexOf('-') > -1) {\n warnHyphenatedStyleName(name);\n } else if (badVendoredStyleNamePattern.test(name)) {\n warnBadVendoredStyleName(name);\n } else if (badStyleValueWithSemicolonPattern.test(value)) {\n warnStyleValueWithSemicolon(name, value);\n }\n\n if (typeof value === 'number') {\n if (isNaN(value)) {\n warnStyleValueIsNaN(name, value);\n } else if (!isFinite(value)) {\n warnStyleValueIsInfinity(name, value);\n }\n }\n };\n}\n\nvar warnValidStyle$1 = warnValidStyle;\n\n/**\n * Operations for dealing with CSS properties.\n */\n\n/**\n * This creates a string that is expected to be equivalent to the style\n * attribute generated by server-side rendering. It by-passes warnings and\n * security checks so it's not safe to use this value for anything other than\n * comparison. It is only used in DEV for SSR validation.\n */\n\nfunction createDangerousStringForStyles(styles) {\n {\n var serialized = '';\n var delimiter = '';\n\n for (var styleName in styles) {\n if (!styles.hasOwnProperty(styleName)) {\n continue;\n }\n\n var styleValue = styles[styleName];\n\n if (styleValue != null) {\n var isCustomProperty = styleName.indexOf('--') === 0;\n serialized += delimiter + (isCustomProperty ? styleName : hyphenateStyleName(styleName)) + ':';\n serialized += dangerousStyleValue(styleName, styleValue, isCustomProperty);\n delimiter = ';';\n }\n }\n\n return serialized || null;\n }\n}\n/**\n * Sets the value for multiple styles on a node. If a value is specified as\n * '' (empty string), the corresponding style property will be unset.\n *\n * @param {DOMElement} node\n * @param {object} styles\n */\n\nfunction setValueForStyles(node, styles) {\n var style = node.style;\n\n for (var styleName in styles) {\n if (!styles.hasOwnProperty(styleName)) {\n continue;\n }\n\n var isCustomProperty = styleName.indexOf('--') === 0;\n\n {\n if (!isCustomProperty) {\n warnValidStyle$1(styleName, styles[styleName]);\n }\n }\n\n var styleValue = dangerousStyleValue(styleName, styles[styleName], isCustomProperty);\n\n if (styleName === 'float') {\n styleName = 'cssFloat';\n }\n\n if (isCustomProperty) {\n style.setProperty(styleName, styleValue);\n } else {\n style[styleName] = styleValue;\n }\n }\n}\n\nfunction isValueEmpty(value) {\n return value == null || typeof value === 'boolean' || value === '';\n}\n/**\n * Given {color: 'red', overflow: 'hidden'} returns {\n * color: 'color',\n * overflowX: 'overflow',\n * overflowY: 'overflow',\n * }. This can be read as \"the overflowY property was set by the overflow\n * shorthand\". That is, the values are the property that each was derived from.\n */\n\n\nfunction expandShorthandMap(styles) {\n var expanded = {};\n\n for (var key in styles) {\n var longhands = shorthandToLonghand[key] || [key];\n\n for (var i = 0; i < longhands.length; i++) {\n expanded[longhands[i]] = key;\n }\n }\n\n return expanded;\n}\n/**\n * When mixing shorthand and longhand property names, we warn during updates if\n * we expect an incorrect result to occur. In particular, we warn for:\n *\n * Updating a shorthand property (longhand gets overwritten):\n * {font: 'foo', fontVariant: 'bar'} -> {font: 'baz', fontVariant: 'bar'}\n * becomes .style.font = 'baz'\n * Removing a shorthand property (longhand gets lost too):\n * {font: 'foo', fontVariant: 'bar'} -> {fontVariant: 'bar'}\n * becomes .style.font = ''\n * Removing a longhand property (should revert to shorthand; doesn't):\n * {font: 'foo', fontVariant: 'bar'} -> {font: 'foo'}\n * becomes .style.fontVariant = ''\n */\n\n\nfunction validateShorthandPropertyCollisionInDev(styleUpdates, nextStyles) {\n {\n\n if (!nextStyles) {\n return;\n }\n\n var expandedUpdates = expandShorthandMap(styleUpdates);\n var expandedStyles = expandShorthandMap(nextStyles);\n var warnedAbout = {};\n\n for (var key in expandedUpdates) {\n var originalKey = expandedUpdates[key];\n var correctOriginalKey = expandedStyles[key];\n\n if (correctOriginalKey && originalKey !== correctOriginalKey) {\n var warningKey = originalKey + ',' + correctOriginalKey;\n\n if (warnedAbout[warningKey]) {\n continue;\n }\n\n warnedAbout[warningKey] = true;\n\n error('%s a style property during rerender (%s) when a ' + 'conflicting property is set (%s) can lead to styling bugs. To ' + \"avoid this, don't mix shorthand and non-shorthand properties \" + 'for the same value; instead, replace the shorthand with ' + 'separate values.', isValueEmpty(styleUpdates[originalKey]) ? 'Removing' : 'Updating', originalKey, correctOriginalKey);\n }\n }\n }\n}\n\n// For HTML, certain tags should omit their close tag. We keep a whitelist for\n// those special-case tags.\nvar omittedCloseTags = {\n area: true,\n base: true,\n br: true,\n col: true,\n embed: true,\n hr: true,\n img: true,\n input: true,\n keygen: true,\n link: true,\n meta: true,\n param: true,\n source: true,\n track: true,\n wbr: true // NOTE: menuitem's close tag should be omitted, but that causes problems.\n\n};\n\n// `omittedCloseTags` except that `menuitem` should still have its closing tag.\n\nvar voidElementTags = _assign({\n menuitem: true\n}, omittedCloseTags);\n\nvar HTML = '__html';\nvar ReactDebugCurrentFrame$3 = null;\n\n{\n ReactDebugCurrentFrame$3 = ReactSharedInternals.ReactDebugCurrentFrame;\n}\n\nfunction assertValidProps(tag, props) {\n if (!props) {\n return;\n } // Note the use of `==` which checks for null or undefined.\n\n\n if (voidElementTags[tag]) {\n if (!(props.children == null && props.dangerouslySetInnerHTML == null)) {\n {\n throw Error( tag + \" is a void element tag and must neither have `children` nor use `dangerouslySetInnerHTML`.\" + ( ReactDebugCurrentFrame$3.getStackAddendum() ) );\n }\n }\n }\n\n if (props.dangerouslySetInnerHTML != null) {\n if (!(props.children == null)) {\n {\n throw Error( \"Can only set one of `children` or `props.dangerouslySetInnerHTML`.\" );\n }\n }\n\n if (!(typeof props.dangerouslySetInnerHTML === 'object' && HTML in props.dangerouslySetInnerHTML)) {\n {\n throw Error( \"`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. Please visit https://fb.me/react-invariant-dangerously-set-inner-html for more information.\" );\n }\n }\n }\n\n {\n if (!props.suppressContentEditableWarning && props.contentEditable && props.children != null) {\n error('A component is `contentEditable` and contains `children` managed by ' + 'React. It is now your responsibility to guarantee that none of ' + 'those nodes are unexpectedly modified or duplicated. This is ' + 'probably not intentional.');\n }\n }\n\n if (!(props.style == null || typeof props.style === 'object')) {\n {\n throw Error( \"The `style` prop expects a mapping from style properties to values, not a string. For example, style={{marginRight: spacing + 'em'}} when using JSX.\" + ( ReactDebugCurrentFrame$3.getStackAddendum() ) );\n }\n }\n}\n\nfunction isCustomComponent(tagName, props) {\n if (tagName.indexOf('-') === -1) {\n return typeof props.is === 'string';\n }\n\n switch (tagName) {\n // These are reserved SVG and MathML elements.\n // We don't mind this whitelist too much because we expect it to never grow.\n // The alternative is to track the namespace in a few places which is convoluted.\n // https://w3c.github.io/webcomponents/spec/custom/#custom-elements-core-concepts\n case 'annotation-xml':\n case 'color-profile':\n case 'font-face':\n case 'font-face-src':\n case 'font-face-uri':\n case 'font-face-format':\n case 'font-face-name':\n case 'missing-glyph':\n return false;\n\n default:\n return true;\n }\n}\n\n// When adding attributes to the HTML or SVG whitelist, be sure to\n// also add them to this module to ensure casing and incorrect name\n// warnings.\nvar possibleStandardNames = {\n // HTML\n accept: 'accept',\n acceptcharset: 'acceptCharset',\n 'accept-charset': 'acceptCharset',\n accesskey: 'accessKey',\n action: 'action',\n allowfullscreen: 'allowFullScreen',\n alt: 'alt',\n as: 'as',\n async: 'async',\n autocapitalize: 'autoCapitalize',\n autocomplete: 'autoComplete',\n autocorrect: 'autoCorrect',\n autofocus: 'autoFocus',\n autoplay: 'autoPlay',\n autosave: 'autoSave',\n capture: 'capture',\n cellpadding: 'cellPadding',\n cellspacing: 'cellSpacing',\n challenge: 'challenge',\n charset: 'charSet',\n checked: 'checked',\n children: 'children',\n cite: 'cite',\n class: 'className',\n classid: 'classID',\n classname: 'className',\n cols: 'cols',\n colspan: 'colSpan',\n content: 'content',\n contenteditable: 'contentEditable',\n contextmenu: 'contextMenu',\n controls: 'controls',\n controlslist: 'controlsList',\n coords: 'coords',\n crossorigin: 'crossOrigin',\n dangerouslysetinnerhtml: 'dangerouslySetInnerHTML',\n data: 'data',\n datetime: 'dateTime',\n default: 'default',\n defaultchecked: 'defaultChecked',\n defaultvalue: 'defaultValue',\n defer: 'defer',\n dir: 'dir',\n disabled: 'disabled',\n disablepictureinpicture: 'disablePictureInPicture',\n download: 'download',\n draggable: 'draggable',\n enctype: 'encType',\n for: 'htmlFor',\n form: 'form',\n formmethod: 'formMethod',\n formaction: 'formAction',\n formenctype: 'formEncType',\n formnovalidate: 'formNoValidate',\n formtarget: 'formTarget',\n frameborder: 'frameBorder',\n headers: 'headers',\n height: 'height',\n hidden: 'hidden',\n high: 'high',\n href: 'href',\n hreflang: 'hrefLang',\n htmlfor: 'htmlFor',\n httpequiv: 'httpEquiv',\n 'http-equiv': 'httpEquiv',\n icon: 'icon',\n id: 'id',\n innerhtml: 'innerHTML',\n inputmode: 'inputMode',\n integrity: 'integrity',\n is: 'is',\n itemid: 'itemID',\n itemprop: 'itemProp',\n itemref: 'itemRef',\n itemscope: 'itemScope',\n itemtype: 'itemType',\n keyparams: 'keyParams',\n keytype: 'keyType',\n kind: 'kind',\n label: 'label',\n lang: 'lang',\n list: 'list',\n loop: 'loop',\n low: 'low',\n manifest: 'manifest',\n marginwidth: 'marginWidth',\n marginheight: 'marginHeight',\n max: 'max',\n maxlength: 'maxLength',\n media: 'media',\n mediagroup: 'mediaGroup',\n method: 'method',\n min: 'min',\n minlength: 'minLength',\n multiple: 'multiple',\n muted: 'muted',\n name: 'name',\n nomodule: 'noModule',\n nonce: 'nonce',\n novalidate: 'noValidate',\n open: 'open',\n optimum: 'optimum',\n pattern: 'pattern',\n placeholder: 'placeholder',\n playsinline: 'playsInline',\n poster: 'poster',\n preload: 'preload',\n profile: 'profile',\n radiogroup: 'radioGroup',\n readonly: 'readOnly',\n referrerpolicy: 'referrerPolicy',\n rel: 'rel',\n required: 'required',\n reversed: 'reversed',\n role: 'role',\n rows: 'rows',\n rowspan: 'rowSpan',\n sandbox: 'sandbox',\n scope: 'scope',\n scoped: 'scoped',\n scrolling: 'scrolling',\n seamless: 'seamless',\n selected: 'selected',\n shape: 'shape',\n size: 'size',\n sizes: 'sizes',\n span: 'span',\n spellcheck: 'spellCheck',\n src: 'src',\n srcdoc: 'srcDoc',\n srclang: 'srcLang',\n srcset: 'srcSet',\n start: 'start',\n step: 'step',\n style: 'style',\n summary: 'summary',\n tabindex: 'tabIndex',\n target: 'target',\n title: 'title',\n type: 'type',\n usemap: 'useMap',\n value: 'value',\n width: 'width',\n wmode: 'wmode',\n wrap: 'wrap',\n // SVG\n about: 'about',\n accentheight: 'accentHeight',\n 'accent-height': 'accentHeight',\n accumulate: 'accumulate',\n additive: 'additive',\n alignmentbaseline: 'alignmentBaseline',\n 'alignment-baseline': 'alignmentBaseline',\n allowreorder: 'allowReorder',\n alphabetic: 'alphabetic',\n amplitude: 'amplitude',\n arabicform: 'arabicForm',\n 'arabic-form': 'arabicForm',\n ascent: 'ascent',\n attributename: 'attributeName',\n attributetype: 'attributeType',\n autoreverse: 'autoReverse',\n azimuth: 'azimuth',\n basefrequency: 'baseFrequency',\n baselineshift: 'baselineShift',\n 'baseline-shift': 'baselineShift',\n baseprofile: 'baseProfile',\n bbox: 'bbox',\n begin: 'begin',\n bias: 'bias',\n by: 'by',\n calcmode: 'calcMode',\n capheight: 'capHeight',\n 'cap-height': 'capHeight',\n clip: 'clip',\n clippath: 'clipPath',\n 'clip-path': 'clipPath',\n clippathunits: 'clipPathUnits',\n cliprule: 'clipRule',\n 'clip-rule': 'clipRule',\n color: 'color',\n colorinterpolation: 'colorInterpolation',\n 'color-interpolation': 'colorInterpolation',\n colorinterpolationfilters: 'colorInterpolationFilters',\n 'color-interpolation-filters': 'colorInterpolationFilters',\n colorprofile: 'colorProfile',\n 'color-profile': 'colorProfile',\n colorrendering: 'colorRendering',\n 'color-rendering': 'colorRendering',\n contentscripttype: 'contentScriptType',\n contentstyletype: 'contentStyleType',\n cursor: 'cursor',\n cx: 'cx',\n cy: 'cy',\n d: 'd',\n datatype: 'datatype',\n decelerate: 'decelerate',\n descent: 'descent',\n diffuseconstant: 'diffuseConstant',\n direction: 'direction',\n display: 'display',\n divisor: 'divisor',\n dominantbaseline: 'dominantBaseline',\n 'dominant-baseline': 'dominantBaseline',\n dur: 'dur',\n dx: 'dx',\n dy: 'dy',\n edgemode: 'edgeMode',\n elevation: 'elevation',\n enablebackground: 'enableBackground',\n 'enable-background': 'enableBackground',\n end: 'end',\n exponent: 'exponent',\n externalresourcesrequired: 'externalResourcesRequired',\n fill: 'fill',\n fillopacity: 'fillOpacity',\n 'fill-opacity': 'fillOpacity',\n fillrule: 'fillRule',\n 'fill-rule': 'fillRule',\n filter: 'filter',\n filterres: 'filterRes',\n filterunits: 'filterUnits',\n floodopacity: 'floodOpacity',\n 'flood-opacity': 'floodOpacity',\n floodcolor: 'floodColor',\n 'flood-color': 'floodColor',\n focusable: 'focusable',\n fontfamily: 'fontFamily',\n 'font-family': 'fontFamily',\n fontsize: 'fontSize',\n 'font-size': 'fontSize',\n fontsizeadjust: 'fontSizeAdjust',\n 'font-size-adjust': 'fontSizeAdjust',\n fontstretch: 'fontStretch',\n 'font-stretch': 'fontStretch',\n fontstyle: 'fontStyle',\n 'font-style': 'fontStyle',\n fontvariant: 'fontVariant',\n 'font-variant': 'fontVariant',\n fontweight: 'fontWeight',\n 'font-weight': 'fontWeight',\n format: 'format',\n from: 'from',\n fx: 'fx',\n fy: 'fy',\n g1: 'g1',\n g2: 'g2',\n glyphname: 'glyphName',\n 'glyph-name': 'glyphName',\n glyphorientationhorizontal: 'glyphOrientationHorizontal',\n 'glyph-orientation-horizontal': 'glyphOrientationHorizontal',\n glyphorientationvertical: 'glyphOrientationVertical',\n 'glyph-orientation-vertical': 'glyphOrientationVertical',\n glyphref: 'glyphRef',\n gradienttransform: 'gradientTransform',\n gradientunits: 'gradientUnits',\n hanging: 'hanging',\n horizadvx: 'horizAdvX',\n 'horiz-adv-x': 'horizAdvX',\n horizoriginx: 'horizOriginX',\n 'horiz-origin-x': 'horizOriginX',\n ideographic: 'ideographic',\n imagerendering: 'imageRendering',\n 'image-rendering': 'imageRendering',\n in2: 'in2',\n in: 'in',\n inlist: 'inlist',\n intercept: 'intercept',\n k1: 'k1',\n k2: 'k2',\n k3: 'k3',\n k4: 'k4',\n k: 'k',\n kernelmatrix: 'kernelMatrix',\n kernelunitlength: 'kernelUnitLength',\n kerning: 'kerning',\n keypoints: 'keyPoints',\n keysplines: 'keySplines',\n keytimes: 'keyTimes',\n lengthadjust: 'lengthAdjust',\n letterspacing: 'letterSpacing',\n 'letter-spacing': 'letterSpacing',\n lightingcolor: 'lightingColor',\n 'lighting-color': 'lightingColor',\n limitingconeangle: 'limitingConeAngle',\n local: 'local',\n markerend: 'markerEnd',\n 'marker-end': 'markerEnd',\n markerheight: 'markerHeight',\n markermid: 'markerMid',\n 'marker-mid': 'markerMid',\n markerstart: 'markerStart',\n 'marker-start': 'markerStart',\n markerunits: 'markerUnits',\n markerwidth: 'markerWidth',\n mask: 'mask',\n maskcontentunits: 'maskContentUnits',\n maskunits: 'maskUnits',\n mathematical: 'mathematical',\n mode: 'mode',\n numoctaves: 'numOctaves',\n offset: 'offset',\n opacity: 'opacity',\n operator: 'operator',\n order: 'order',\n orient: 'orient',\n orientation: 'orientation',\n origin: 'origin',\n overflow: 'overflow',\n overlineposition: 'overlinePosition',\n 'overline-position': 'overlinePosition',\n overlinethickness: 'overlineThickness',\n 'overline-thickness': 'overlineThickness',\n paintorder: 'paintOrder',\n 'paint-order': 'paintOrder',\n panose1: 'panose1',\n 'panose-1': 'panose1',\n pathlength: 'pathLength',\n patterncontentunits: 'patternContentUnits',\n patterntransform: 'patternTransform',\n patternunits: 'patternUnits',\n pointerevents: 'pointerEvents',\n 'pointer-events': 'pointerEvents',\n points: 'points',\n pointsatx: 'pointsAtX',\n pointsaty: 'pointsAtY',\n pointsatz: 'pointsAtZ',\n prefix: 'prefix',\n preservealpha: 'preserveAlpha',\n preserveaspectratio: 'preserveAspectRatio',\n primitiveunits: 'primitiveUnits',\n property: 'property',\n r: 'r',\n radius: 'radius',\n refx: 'refX',\n refy: 'refY',\n renderingintent: 'renderingIntent',\n 'rendering-intent': 'renderingIntent',\n repeatcount: 'repeatCount',\n repeatdur: 'repeatDur',\n requiredextensions: 'requiredExtensions',\n requiredfeatures: 'requiredFeatures',\n resource: 'resource',\n restart: 'restart',\n result: 'result',\n results: 'results',\n rotate: 'rotate',\n rx: 'rx',\n ry: 'ry',\n scale: 'scale',\n security: 'security',\n seed: 'seed',\n shaperendering: 'shapeRendering',\n 'shape-rendering': 'shapeRendering',\n slope: 'slope',\n spacing: 'spacing',\n specularconstant: 'specularConstant',\n specularexponent: 'specularExponent',\n speed: 'speed',\n spreadmethod: 'spreadMethod',\n startoffset: 'startOffset',\n stddeviation: 'stdDeviation',\n stemh: 'stemh',\n stemv: 'stemv',\n stitchtiles: 'stitchTiles',\n stopcolor: 'stopColor',\n 'stop-color': 'stopColor',\n stopopacity: 'stopOpacity',\n 'stop-opacity': 'stopOpacity',\n strikethroughposition: 'strikethroughPosition',\n 'strikethrough-position': 'strikethroughPosition',\n strikethroughthickness: 'strikethroughThickness',\n 'strikethrough-thickness': 'strikethroughThickness',\n string: 'string',\n stroke: 'stroke',\n strokedasharray: 'strokeDasharray',\n 'stroke-dasharray': 'strokeDasharray',\n strokedashoffset: 'strokeDashoffset',\n 'stroke-dashoffset': 'strokeDashoffset',\n strokelinecap: 'strokeLinecap',\n 'stroke-linecap': 'strokeLinecap',\n strokelinejoin: 'strokeLinejoin',\n 'stroke-linejoin': 'strokeLinejoin',\n strokemiterlimit: 'strokeMiterlimit',\n 'stroke-miterlimit': 'strokeMiterlimit',\n strokewidth: 'strokeWidth',\n 'stroke-width': 'strokeWidth',\n strokeopacity: 'strokeOpacity',\n 'stroke-opacity': 'strokeOpacity',\n suppresscontenteditablewarning: 'suppressContentEditableWarning',\n suppresshydrationwarning: 'suppressHydrationWarning',\n surfacescale: 'surfaceScale',\n systemlanguage: 'systemLanguage',\n tablevalues: 'tableValues',\n targetx: 'targetX',\n targety: 'targetY',\n textanchor: 'textAnchor',\n 'text-anchor': 'textAnchor',\n textdecoration: 'textDecoration',\n 'text-decoration': 'textDecoration',\n textlength: 'textLength',\n textrendering: 'textRendering',\n 'text-rendering': 'textRendering',\n to: 'to',\n transform: 'transform',\n typeof: 'typeof',\n u1: 'u1',\n u2: 'u2',\n underlineposition: 'underlinePosition',\n 'underline-position': 'underlinePosition',\n underlinethickness: 'underlineThickness',\n 'underline-thickness': 'underlineThickness',\n unicode: 'unicode',\n unicodebidi: 'unicodeBidi',\n 'unicode-bidi': 'unicodeBidi',\n unicoderange: 'unicodeRange',\n 'unicode-range': 'unicodeRange',\n unitsperem: 'unitsPerEm',\n 'units-per-em': 'unitsPerEm',\n unselectable: 'unselectable',\n valphabetic: 'vAlphabetic',\n 'v-alphabetic': 'vAlphabetic',\n values: 'values',\n vectoreffect: 'vectorEffect',\n 'vector-effect': 'vectorEffect',\n version: 'version',\n vertadvy: 'vertAdvY',\n 'vert-adv-y': 'vertAdvY',\n vertoriginx: 'vertOriginX',\n 'vert-origin-x': 'vertOriginX',\n vertoriginy: 'vertOriginY',\n 'vert-origin-y': 'vertOriginY',\n vhanging: 'vHanging',\n 'v-hanging': 'vHanging',\n videographic: 'vIdeographic',\n 'v-ideographic': 'vIdeographic',\n viewbox: 'viewBox',\n viewtarget: 'viewTarget',\n visibility: 'visibility',\n vmathematical: 'vMathematical',\n 'v-mathematical': 'vMathematical',\n vocab: 'vocab',\n widths: 'widths',\n wordspacing: 'wordSpacing',\n 'word-spacing': 'wordSpacing',\n writingmode: 'writingMode',\n 'writing-mode': 'writingMode',\n x1: 'x1',\n x2: 'x2',\n x: 'x',\n xchannelselector: 'xChannelSelector',\n xheight: 'xHeight',\n 'x-height': 'xHeight',\n xlinkactuate: 'xlinkActuate',\n 'xlink:actuate': 'xlinkActuate',\n xlinkarcrole: 'xlinkArcrole',\n 'xlink:arcrole': 'xlinkArcrole',\n xlinkhref: 'xlinkHref',\n 'xlink:href': 'xlinkHref',\n xlinkrole: 'xlinkRole',\n 'xlink:role': 'xlinkRole',\n xlinkshow: 'xlinkShow',\n 'xlink:show': 'xlinkShow',\n xlinktitle: 'xlinkTitle',\n 'xlink:title': 'xlinkTitle',\n xlinktype: 'xlinkType',\n 'xlink:type': 'xlinkType',\n xmlbase: 'xmlBase',\n 'xml:base': 'xmlBase',\n xmllang: 'xmlLang',\n 'xml:lang': 'xmlLang',\n xmlns: 'xmlns',\n 'xml:space': 'xmlSpace',\n xmlnsxlink: 'xmlnsXlink',\n 'xmlns:xlink': 'xmlnsXlink',\n xmlspace: 'xmlSpace',\n y1: 'y1',\n y2: 'y2',\n y: 'y',\n ychannelselector: 'yChannelSelector',\n z: 'z',\n zoomandpan: 'zoomAndPan'\n};\n\nvar ariaProperties = {\n 'aria-current': 0,\n // state\n 'aria-details': 0,\n 'aria-disabled': 0,\n // state\n 'aria-hidden': 0,\n // state\n 'aria-invalid': 0,\n // state\n 'aria-keyshortcuts': 0,\n 'aria-label': 0,\n 'aria-roledescription': 0,\n // Widget Attributes\n 'aria-autocomplete': 0,\n 'aria-checked': 0,\n 'aria-expanded': 0,\n 'aria-haspopup': 0,\n 'aria-level': 0,\n 'aria-modal': 0,\n 'aria-multiline': 0,\n 'aria-multiselectable': 0,\n 'aria-orientation': 0,\n 'aria-placeholder': 0,\n 'aria-pressed': 0,\n 'aria-readonly': 0,\n 'aria-required': 0,\n 'aria-selected': 0,\n 'aria-sort': 0,\n 'aria-valuemax': 0,\n 'aria-valuemin': 0,\n 'aria-valuenow': 0,\n 'aria-valuetext': 0,\n // Live Region Attributes\n 'aria-atomic': 0,\n 'aria-busy': 0,\n 'aria-live': 0,\n 'aria-relevant': 0,\n // Drag-and-Drop Attributes\n 'aria-dropeffect': 0,\n 'aria-grabbed': 0,\n // Relationship Attributes\n 'aria-activedescendant': 0,\n 'aria-colcount': 0,\n 'aria-colindex': 0,\n 'aria-colspan': 0,\n 'aria-controls': 0,\n 'aria-describedby': 0,\n 'aria-errormessage': 0,\n 'aria-flowto': 0,\n 'aria-labelledby': 0,\n 'aria-owns': 0,\n 'aria-posinset': 0,\n 'aria-rowcount': 0,\n 'aria-rowindex': 0,\n 'aria-rowspan': 0,\n 'aria-setsize': 0\n};\n\nvar warnedProperties = {};\nvar rARIA = new RegExp('^(aria)-[' + ATTRIBUTE_NAME_CHAR + ']*$');\nvar rARIACamel = new RegExp('^(aria)[A-Z][' + ATTRIBUTE_NAME_CHAR + ']*$');\nvar hasOwnProperty$1 = Object.prototype.hasOwnProperty;\n\nfunction validateProperty(tagName, name) {\n {\n if (hasOwnProperty$1.call(warnedProperties, name) && warnedProperties[name]) {\n return true;\n }\n\n if (rARIACamel.test(name)) {\n var ariaName = 'aria-' + name.slice(4).toLowerCase();\n var correctName = ariaProperties.hasOwnProperty(ariaName) ? ariaName : null; // If this is an aria-* attribute, but is not listed in the known DOM\n // DOM properties, then it is an invalid aria-* attribute.\n\n if (correctName == null) {\n error('Invalid ARIA attribute `%s`. ARIA attributes follow the pattern aria-* and must be lowercase.', name);\n\n warnedProperties[name] = true;\n return true;\n } // aria-* attributes should be lowercase; suggest the lowercase version.\n\n\n if (name !== correctName) {\n error('Invalid ARIA attribute `%s`. Did you mean `%s`?', name, correctName);\n\n warnedProperties[name] = true;\n return true;\n }\n }\n\n if (rARIA.test(name)) {\n var lowerCasedName = name.toLowerCase();\n var standardName = ariaProperties.hasOwnProperty(lowerCasedName) ? lowerCasedName : null; // If this is an aria-* attribute, but is not listed in the known DOM\n // DOM properties, then it is an invalid aria-* attribute.\n\n if (standardName == null) {\n warnedProperties[name] = true;\n return false;\n } // aria-* attributes should be lowercase; suggest the lowercase version.\n\n\n if (name !== standardName) {\n error('Unknown ARIA attribute `%s`. Did you mean `%s`?', name, standardName);\n\n warnedProperties[name] = true;\n return true;\n }\n }\n }\n\n return true;\n}\n\nfunction warnInvalidARIAProps(type, props) {\n {\n var invalidProps = [];\n\n for (var key in props) {\n var isValid = validateProperty(type, key);\n\n if (!isValid) {\n invalidProps.push(key);\n }\n }\n\n var unknownPropString = invalidProps.map(function (prop) {\n return '`' + prop + '`';\n }).join(', ');\n\n if (invalidProps.length === 1) {\n error('Invalid aria prop %s on <%s> tag. ' + 'For details, see https://fb.me/invalid-aria-prop', unknownPropString, type);\n } else if (invalidProps.length > 1) {\n error('Invalid aria props %s on <%s> tag. ' + 'For details, see https://fb.me/invalid-aria-prop', unknownPropString, type);\n }\n }\n}\n\nfunction validateProperties(type, props) {\n if (isCustomComponent(type, props)) {\n return;\n }\n\n warnInvalidARIAProps(type, props);\n}\n\nvar didWarnValueNull = false;\nfunction validateProperties$1(type, props) {\n {\n if (type !== 'input' && type !== 'textarea' && type !== 'select') {\n return;\n }\n\n if (props != null && props.value === null && !didWarnValueNull) {\n didWarnValueNull = true;\n\n if (type === 'select' && props.multiple) {\n error('`value` prop on `%s` should not be null. ' + 'Consider using an empty array when `multiple` is set to `true` ' + 'to clear the component or `undefined` for uncontrolled components.', type);\n } else {\n error('`value` prop on `%s` should not be null. ' + 'Consider using an empty string to clear the component or `undefined` ' + 'for uncontrolled components.', type);\n }\n }\n }\n}\n\nvar validateProperty$1 = function () {};\n\n{\n var warnedProperties$1 = {};\n var _hasOwnProperty = Object.prototype.hasOwnProperty;\n var EVENT_NAME_REGEX = /^on./;\n var INVALID_EVENT_NAME_REGEX = /^on[^A-Z]/;\n var rARIA$1 = new RegExp('^(aria)-[' + ATTRIBUTE_NAME_CHAR + ']*$');\n var rARIACamel$1 = new RegExp('^(aria)[A-Z][' + ATTRIBUTE_NAME_CHAR + ']*$');\n\n validateProperty$1 = function (tagName, name, value, canUseEventSystem) {\n if (_hasOwnProperty.call(warnedProperties$1, name) && warnedProperties$1[name]) {\n return true;\n }\n\n var lowerCasedName = name.toLowerCase();\n\n if (lowerCasedName === 'onfocusin' || lowerCasedName === 'onfocusout') {\n error('React uses onFocus and onBlur instead of onFocusIn and onFocusOut. ' + 'All React events are normalized to bubble, so onFocusIn and onFocusOut ' + 'are not needed/supported by React.');\n\n warnedProperties$1[name] = true;\n return true;\n } // We can't rely on the event system being injected on the server.\n\n\n if (canUseEventSystem) {\n if (registrationNameModules.hasOwnProperty(name)) {\n return true;\n }\n\n var registrationName = possibleRegistrationNames.hasOwnProperty(lowerCasedName) ? possibleRegistrationNames[lowerCasedName] : null;\n\n if (registrationName != null) {\n error('Invalid event handler property `%s`. Did you mean `%s`?', name, registrationName);\n\n warnedProperties$1[name] = true;\n return true;\n }\n\n if (EVENT_NAME_REGEX.test(name)) {\n error('Unknown event handler property `%s`. It will be ignored.', name);\n\n warnedProperties$1[name] = true;\n return true;\n }\n } else if (EVENT_NAME_REGEX.test(name)) {\n // If no event plugins have been injected, we are in a server environment.\n // So we can't tell if the event name is correct for sure, but we can filter\n // out known bad ones like `onclick`. We can't suggest a specific replacement though.\n if (INVALID_EVENT_NAME_REGEX.test(name)) {\n error('Invalid event handler property `%s`. ' + 'React events use the camelCase naming convention, for example `onClick`.', name);\n }\n\n warnedProperties$1[name] = true;\n return true;\n } // Let the ARIA attribute hook validate ARIA attributes\n\n\n if (rARIA$1.test(name) || rARIACamel$1.test(name)) {\n return true;\n }\n\n if (lowerCasedName === 'innerhtml') {\n error('Directly setting property `innerHTML` is not permitted. ' + 'For more information, lookup documentation on `dangerouslySetInnerHTML`.');\n\n warnedProperties$1[name] = true;\n return true;\n }\n\n if (lowerCasedName === 'aria') {\n error('The `aria` attribute is reserved for future use in React. ' + 'Pass individual `aria-` attributes instead.');\n\n warnedProperties$1[name] = true;\n return true;\n }\n\n if (lowerCasedName === 'is' && value !== null && value !== undefined && typeof value !== 'string') {\n error('Received a `%s` for a string attribute `is`. If this is expected, cast ' + 'the value to a string.', typeof value);\n\n warnedProperties$1[name] = true;\n return true;\n }\n\n if (typeof value === 'number' && isNaN(value)) {\n error('Received NaN for the `%s` attribute. If this is expected, cast ' + 'the value to a string.', name);\n\n warnedProperties$1[name] = true;\n return true;\n }\n\n var propertyInfo = getPropertyInfo(name);\n var isReserved = propertyInfo !== null && propertyInfo.type === RESERVED; // Known attributes should match the casing specified in the property config.\n\n if (possibleStandardNames.hasOwnProperty(lowerCasedName)) {\n var standardName = possibleStandardNames[lowerCasedName];\n\n if (standardName !== name) {\n error('Invalid DOM property `%s`. Did you mean `%s`?', name, standardName);\n\n warnedProperties$1[name] = true;\n return true;\n }\n } else if (!isReserved && name !== lowerCasedName) {\n // Unknown attributes should have lowercase casing since that's how they\n // will be cased anyway with server rendering.\n error('React does not recognize the `%s` prop on a DOM element. If you ' + 'intentionally want it to appear in the DOM as a custom ' + 'attribute, spell it as lowercase `%s` instead. ' + 'If you accidentally passed it from a parent component, remove ' + 'it from the DOM element.', name, lowerCasedName);\n\n warnedProperties$1[name] = true;\n return true;\n }\n\n if (typeof value === 'boolean' && shouldRemoveAttributeWithWarning(name, value, propertyInfo, false)) {\n if (value) {\n error('Received `%s` for a non-boolean attribute `%s`.\\n\\n' + 'If you want to write it to the DOM, pass a string instead: ' + '%s=\"%s\" or %s={value.toString()}.', value, name, name, value, name);\n } else {\n error('Received `%s` for a non-boolean attribute `%s`.\\n\\n' + 'If you want to write it to the DOM, pass a string instead: ' + '%s=\"%s\" or %s={value.toString()}.\\n\\n' + 'If you used to conditionally omit it with %s={condition && value}, ' + 'pass %s={condition ? value : undefined} instead.', value, name, name, value, name, name, name);\n }\n\n warnedProperties$1[name] = true;\n return true;\n } // Now that we've validated casing, do not validate\n // data types for reserved props\n\n\n if (isReserved) {\n return true;\n } // Warn when a known attribute is a bad type\n\n\n if (shouldRemoveAttributeWithWarning(name, value, propertyInfo, false)) {\n warnedProperties$1[name] = true;\n return false;\n } // Warn when passing the strings 'false' or 'true' into a boolean prop\n\n\n if ((value === 'false' || value === 'true') && propertyInfo !== null && propertyInfo.type === BOOLEAN) {\n error('Received the string `%s` for the boolean attribute `%s`. ' + '%s ' + 'Did you mean %s={%s}?', value, name, value === 'false' ? 'The browser will interpret it as a truthy value.' : 'Although this works, it will not work as expected if you pass the string \"false\".', name, value);\n\n warnedProperties$1[name] = true;\n return true;\n }\n\n return true;\n };\n}\n\nvar warnUnknownProperties = function (type, props, canUseEventSystem) {\n {\n var unknownProps = [];\n\n for (var key in props) {\n var isValid = validateProperty$1(type, key, props[key], canUseEventSystem);\n\n if (!isValid) {\n unknownProps.push(key);\n }\n }\n\n var unknownPropString = unknownProps.map(function (prop) {\n return '`' + prop + '`';\n }).join(', ');\n\n if (unknownProps.length === 1) {\n error('Invalid value for prop %s on <%s> tag. Either remove it from the element, ' + 'or pass a string or number value to keep it in the DOM. ' + 'For details, see https://fb.me/react-attribute-behavior', unknownPropString, type);\n } else if (unknownProps.length > 1) {\n error('Invalid values for props %s on <%s> tag. Either remove them from the element, ' + 'or pass a string or number value to keep them in the DOM. ' + 'For details, see https://fb.me/react-attribute-behavior', unknownPropString, type);\n }\n }\n};\n\nfunction validateProperties$2(type, props, canUseEventSystem) {\n if (isCustomComponent(type, props)) {\n return;\n }\n\n warnUnknownProperties(type, props, canUseEventSystem);\n}\n\nvar didWarnInvalidHydration = false;\nvar DANGEROUSLY_SET_INNER_HTML = 'dangerouslySetInnerHTML';\nvar SUPPRESS_CONTENT_EDITABLE_WARNING = 'suppressContentEditableWarning';\nvar SUPPRESS_HYDRATION_WARNING = 'suppressHydrationWarning';\nvar AUTOFOCUS = 'autoFocus';\nvar CHILDREN = 'children';\nvar STYLE = 'style';\nvar HTML$1 = '__html';\nvar HTML_NAMESPACE$1 = Namespaces.html;\nvar warnedUnknownTags;\nvar suppressHydrationWarning;\nvar validatePropertiesInDevelopment;\nvar warnForTextDifference;\nvar warnForPropDifference;\nvar warnForExtraAttributes;\nvar warnForInvalidEventListener;\nvar canDiffStyleForHydrationWarning;\nvar normalizeMarkupForTextOrAttribute;\nvar normalizeHTML;\n\n{\n warnedUnknownTags = {\n // Chrome is the only major browser not shipping <time>. But as of July\n // 2017 it intends to ship it due to widespread usage. We intentionally\n // *don't* warn for <time> even if it's unrecognized by Chrome because\n // it soon will be, and many apps have been using it anyway.\n time: true,\n // There are working polyfills for <dialog>. Let people use it.\n dialog: true,\n // Electron ships a custom <webview> tag to display external web content in\n // an isolated frame and process.\n // This tag is not present in non Electron environments such as JSDom which\n // is often used for testing purposes.\n // @see https://electronjs.org/docs/api/webview-tag\n webview: true\n };\n\n validatePropertiesInDevelopment = function (type, props) {\n validateProperties(type, props);\n validateProperties$1(type, props);\n validateProperties$2(type, props,\n /* canUseEventSystem */\n true);\n }; // IE 11 parses & normalizes the style attribute as opposed to other\n // browsers. It adds spaces and sorts the properties in some\n // non-alphabetical order. Handling that would require sorting CSS\n // properties in the client & server versions or applying\n // `expectedStyle` to a temporary DOM node to read its `style` attribute\n // normalized. Since it only affects IE, we're skipping style warnings\n // in that browser completely in favor of doing all that work.\n // See https://github.com/facebook/react/issues/11807\n\n\n canDiffStyleForHydrationWarning = canUseDOM && !document.documentMode; // HTML parsing normalizes CR and CRLF to LF.\n // It also can turn \\u0000 into \\uFFFD inside attributes.\n // https://www.w3.org/TR/html5/single-page.html#preprocessing-the-input-stream\n // If we have a mismatch, it might be caused by that.\n // We will still patch up in this case but not fire the warning.\n\n var NORMALIZE_NEWLINES_REGEX = /\\r\\n?/g;\n var NORMALIZE_NULL_AND_REPLACEMENT_REGEX = /\\u0000|\\uFFFD/g;\n\n normalizeMarkupForTextOrAttribute = function (markup) {\n var markupString = typeof markup === 'string' ? markup : '' + markup;\n return markupString.replace(NORMALIZE_NEWLINES_REGEX, '\\n').replace(NORMALIZE_NULL_AND_REPLACEMENT_REGEX, '');\n };\n\n warnForTextDifference = function (serverText, clientText) {\n if (didWarnInvalidHydration) {\n return;\n }\n\n var normalizedClientText = normalizeMarkupForTextOrAttribute(clientText);\n var normalizedServerText = normalizeMarkupForTextOrAttribute(serverText);\n\n if (normalizedServerText === normalizedClientText) {\n return;\n }\n\n didWarnInvalidHydration = true;\n\n error('Text content did not match. Server: \"%s\" Client: \"%s\"', normalizedServerText, normalizedClientText);\n };\n\n warnForPropDifference = function (propName, serverValue, clientValue) {\n if (didWarnInvalidHydration) {\n return;\n }\n\n var normalizedClientValue = normalizeMarkupForTextOrAttribute(clientValue);\n var normalizedServerValue = normalizeMarkupForTextOrAttribute(serverValue);\n\n if (normalizedServerValue === normalizedClientValue) {\n return;\n }\n\n didWarnInvalidHydration = true;\n\n error('Prop `%s` did not match. Server: %s Client: %s', propName, JSON.stringify(normalizedServerValue), JSON.stringify(normalizedClientValue));\n };\n\n warnForExtraAttributes = function (attributeNames) {\n if (didWarnInvalidHydration) {\n return;\n }\n\n didWarnInvalidHydration = true;\n var names = [];\n attributeNames.forEach(function (name) {\n names.push(name);\n });\n\n error('Extra attributes from the server: %s', names);\n };\n\n warnForInvalidEventListener = function (registrationName, listener) {\n if (listener === false) {\n error('Expected `%s` listener to be a function, instead got `false`.\\n\\n' + 'If you used to conditionally omit it with %s={condition && value}, ' + 'pass %s={condition ? value : undefined} instead.', registrationName, registrationName, registrationName);\n } else {\n error('Expected `%s` listener to be a function, instead got a value of `%s` type.', registrationName, typeof listener);\n }\n }; // Parse the HTML and read it back to normalize the HTML string so that it\n // can be used for comparison.\n\n\n normalizeHTML = function (parent, html) {\n // We could have created a separate document here to avoid\n // re-initializing custom elements if they exist. But this breaks\n // how <noscript> is being handled. So we use the same document.\n // See the discussion in https://github.com/facebook/react/pull/11157.\n var testElement = parent.namespaceURI === HTML_NAMESPACE$1 ? parent.ownerDocument.createElement(parent.tagName) : parent.ownerDocument.createElementNS(parent.namespaceURI, parent.tagName);\n testElement.innerHTML = html;\n return testElement.innerHTML;\n };\n}\n\nfunction ensureListeningTo(rootContainerElement, registrationName) {\n var isDocumentOrFragment = rootContainerElement.nodeType === DOCUMENT_NODE || rootContainerElement.nodeType === DOCUMENT_FRAGMENT_NODE;\n var doc = isDocumentOrFragment ? rootContainerElement : rootContainerElement.ownerDocument;\n legacyListenToEvent(registrationName, doc);\n}\n\nfunction getOwnerDocumentFromRootContainer(rootContainerElement) {\n return rootContainerElement.nodeType === DOCUMENT_NODE ? rootContainerElement : rootContainerElement.ownerDocument;\n}\n\nfunction noop() {}\n\nfunction trapClickOnNonInteractiveElement(node) {\n // Mobile Safari does not fire properly bubble click events on\n // non-interactive elements, which means delegated click listeners do not\n // fire. The workaround for this bug involves attaching an empty click\n // listener on the target node.\n // http://www.quirksmode.org/blog/archives/2010/09/click_event_del.html\n // Just set it using the onclick property so that we don't have to manage any\n // bookkeeping for it. Not sure if we need to clear it when the listener is\n // removed.\n // TODO: Only do this for the relevant Safaris maybe?\n node.onclick = noop;\n}\n\nfunction setInitialDOMProperties(tag, domElement, rootContainerElement, nextProps, isCustomComponentTag) {\n for (var propKey in nextProps) {\n if (!nextProps.hasOwnProperty(propKey)) {\n continue;\n }\n\n var nextProp = nextProps[propKey];\n\n if (propKey === STYLE) {\n {\n if (nextProp) {\n // Freeze the next style object so that we can assume it won't be\n // mutated. We have already warned for this in the past.\n Object.freeze(nextProp);\n }\n } // Relies on `updateStylesByID` not mutating `styleUpdates`.\n\n\n setValueForStyles(domElement, nextProp);\n } else if (propKey === DANGEROUSLY_SET_INNER_HTML) {\n var nextHtml = nextProp ? nextProp[HTML$1] : undefined;\n\n if (nextHtml != null) {\n setInnerHTML(domElement, nextHtml);\n }\n } else if (propKey === CHILDREN) {\n if (typeof nextProp === 'string') {\n // Avoid setting initial textContent when the text is empty. In IE11 setting\n // textContent on a <textarea> will cause the placeholder to not\n // show within the <textarea> until it has been focused and blurred again.\n // https://github.com/facebook/react/issues/6731#issuecomment-254874553\n var canSetTextContent = tag !== 'textarea' || nextProp !== '';\n\n if (canSetTextContent) {\n setTextContent(domElement, nextProp);\n }\n } else if (typeof nextProp === 'number') {\n setTextContent(domElement, '' + nextProp);\n }\n } else if ( propKey === SUPPRESS_CONTENT_EDITABLE_WARNING || propKey === SUPPRESS_HYDRATION_WARNING) ; else if (propKey === AUTOFOCUS) ; else if (registrationNameModules.hasOwnProperty(propKey)) {\n if (nextProp != null) {\n if ( typeof nextProp !== 'function') {\n warnForInvalidEventListener(propKey, nextProp);\n }\n\n ensureListeningTo(rootContainerElement, propKey);\n }\n } else if (nextProp != null) {\n setValueForProperty(domElement, propKey, nextProp, isCustomComponentTag);\n }\n }\n}\n\nfunction updateDOMProperties(domElement, updatePayload, wasCustomComponentTag, isCustomComponentTag) {\n // TODO: Handle wasCustomComponentTag\n for (var i = 0; i < updatePayload.length; i += 2) {\n var propKey = updatePayload[i];\n var propValue = updatePayload[i + 1];\n\n if (propKey === STYLE) {\n setValueForStyles(domElement, propValue);\n } else if (propKey === DANGEROUSLY_SET_INNER_HTML) {\n setInnerHTML(domElement, propValue);\n } else if (propKey === CHILDREN) {\n setTextContent(domElement, propValue);\n } else {\n setValueForProperty(domElement, propKey, propValue, isCustomComponentTag);\n }\n }\n}\n\nfunction createElement(type, props, rootContainerElement, parentNamespace) {\n var isCustomComponentTag; // We create tags in the namespace of their parent container, except HTML\n // tags get no namespace.\n\n var ownerDocument = getOwnerDocumentFromRootContainer(rootContainerElement);\n var domElement;\n var namespaceURI = parentNamespace;\n\n if (namespaceURI === HTML_NAMESPACE$1) {\n namespaceURI = getIntrinsicNamespace(type);\n }\n\n if (namespaceURI === HTML_NAMESPACE$1) {\n {\n isCustomComponentTag = isCustomComponent(type, props); // Should this check be gated by parent namespace? Not sure we want to\n // allow <SVG> or <mATH>.\n\n if (!isCustomComponentTag && type !== type.toLowerCase()) {\n error('<%s /> is using incorrect casing. ' + 'Use PascalCase for React components, ' + 'or lowercase for HTML elements.', type);\n }\n }\n\n if (type === 'script') {\n // Create the script via .innerHTML so its \"parser-inserted\" flag is\n // set to true and it does not execute\n var div = ownerDocument.createElement('div');\n\n div.innerHTML = '<script><' + '/script>'; // eslint-disable-line\n // This is guaranteed to yield a script element.\n\n var firstChild = div.firstChild;\n domElement = div.removeChild(firstChild);\n } else if (typeof props.is === 'string') {\n // $FlowIssue `createElement` should be updated for Web Components\n domElement = ownerDocument.createElement(type, {\n is: props.is\n });\n } else {\n // Separate else branch instead of using `props.is || undefined` above because of a Firefox bug.\n // See discussion in https://github.com/facebook/react/pull/6896\n // and discussion in https://bugzilla.mozilla.org/show_bug.cgi?id=1276240\n domElement = ownerDocument.createElement(type); // Normally attributes are assigned in `setInitialDOMProperties`, however the `multiple` and `size`\n // attributes on `select`s needs to be added before `option`s are inserted.\n // This prevents:\n // - a bug where the `select` does not scroll to the correct option because singular\n // `select` elements automatically pick the first item #13222\n // - a bug where the `select` set the first item as selected despite the `size` attribute #14239\n // See https://github.com/facebook/react/issues/13222\n // and https://github.com/facebook/react/issues/14239\n\n if (type === 'select') {\n var node = domElement;\n\n if (props.multiple) {\n node.multiple = true;\n } else if (props.size) {\n // Setting a size greater than 1 causes a select to behave like `multiple=true`, where\n // it is possible that no option is selected.\n //\n // This is only necessary when a select in \"single selection mode\".\n node.size = props.size;\n }\n }\n }\n } else {\n domElement = ownerDocument.createElementNS(namespaceURI, type);\n }\n\n {\n if (namespaceURI === HTML_NAMESPACE$1) {\n if (!isCustomComponentTag && Object.prototype.toString.call(domElement) === '[object HTMLUnknownElement]' && !Object.prototype.hasOwnProperty.call(warnedUnknownTags, type)) {\n warnedUnknownTags[type] = true;\n\n error('The tag <%s> is unrecognized in this browser. ' + 'If you meant to render a React component, start its name with ' + 'an uppercase letter.', type);\n }\n }\n }\n\n return domElement;\n}\nfunction createTextNode(text, rootContainerElement) {\n return getOwnerDocumentFromRootContainer(rootContainerElement).createTextNode(text);\n}\nfunction setInitialProperties(domElement, tag, rawProps, rootContainerElement) {\n var isCustomComponentTag = isCustomComponent(tag, rawProps);\n\n {\n validatePropertiesInDevelopment(tag, rawProps);\n } // TODO: Make sure that we check isMounted before firing any of these events.\n\n\n var props;\n\n switch (tag) {\n case 'iframe':\n case 'object':\n case 'embed':\n trapBubbledEvent(TOP_LOAD, domElement);\n props = rawProps;\n break;\n\n case 'video':\n case 'audio':\n // Create listener for each media event\n for (var i = 0; i < mediaEventTypes.length; i++) {\n trapBubbledEvent(mediaEventTypes[i], domElement);\n }\n\n props = rawProps;\n break;\n\n case 'source':\n trapBubbledEvent(TOP_ERROR, domElement);\n props = rawProps;\n break;\n\n case 'img':\n case 'image':\n case 'link':\n trapBubbledEvent(TOP_ERROR, domElement);\n trapBubbledEvent(TOP_LOAD, domElement);\n props = rawProps;\n break;\n\n case 'form':\n trapBubbledEvent(TOP_RESET, domElement);\n trapBubbledEvent(TOP_SUBMIT, domElement);\n props = rawProps;\n break;\n\n case 'details':\n trapBubbledEvent(TOP_TOGGLE, domElement);\n props = rawProps;\n break;\n\n case 'input':\n initWrapperState(domElement, rawProps);\n props = getHostProps(domElement, rawProps);\n trapBubbledEvent(TOP_INVALID, domElement); // For controlled components we always need to ensure we're listening\n // to onChange. Even if there is no listener.\n\n ensureListeningTo(rootContainerElement, 'onChange');\n break;\n\n case 'option':\n validateProps(domElement, rawProps);\n props = getHostProps$1(domElement, rawProps);\n break;\n\n case 'select':\n initWrapperState$1(domElement, rawProps);\n props = getHostProps$2(domElement, rawProps);\n trapBubbledEvent(TOP_INVALID, domElement); // For controlled components we always need to ensure we're listening\n // to onChange. Even if there is no listener.\n\n ensureListeningTo(rootContainerElement, 'onChange');\n break;\n\n case 'textarea':\n initWrapperState$2(domElement, rawProps);\n props = getHostProps$3(domElement, rawProps);\n trapBubbledEvent(TOP_INVALID, domElement); // For controlled components we always need to ensure we're listening\n // to onChange. Even if there is no listener.\n\n ensureListeningTo(rootContainerElement, 'onChange');\n break;\n\n default:\n props = rawProps;\n }\n\n assertValidProps(tag, props);\n setInitialDOMProperties(tag, domElement, rootContainerElement, props, isCustomComponentTag);\n\n switch (tag) {\n case 'input':\n // TODO: Make sure we check if this is still unmounted or do any clean\n // up necessary since we never stop tracking anymore.\n track(domElement);\n postMountWrapper(domElement, rawProps, false);\n break;\n\n case 'textarea':\n // TODO: Make sure we check if this is still unmounted or do any clean\n // up necessary since we never stop tracking anymore.\n track(domElement);\n postMountWrapper$3(domElement);\n break;\n\n case 'option':\n postMountWrapper$1(domElement, rawProps);\n break;\n\n case 'select':\n postMountWrapper$2(domElement, rawProps);\n break;\n\n default:\n if (typeof props.onClick === 'function') {\n // TODO: This cast may not be sound for SVG, MathML or custom elements.\n trapClickOnNonInteractiveElement(domElement);\n }\n\n break;\n }\n} // Calculate the diff between the two objects.\n\nfunction diffProperties(domElement, tag, lastRawProps, nextRawProps, rootContainerElement) {\n {\n validatePropertiesInDevelopment(tag, nextRawProps);\n }\n\n var updatePayload = null;\n var lastProps;\n var nextProps;\n\n switch (tag) {\n case 'input':\n lastProps = getHostProps(domElement, lastRawProps);\n nextProps = getHostProps(domElement, nextRawProps);\n updatePayload = [];\n break;\n\n case 'option':\n lastProps = getHostProps$1(domElement, lastRawProps);\n nextProps = getHostProps$1(domElement, nextRawProps);\n updatePayload = [];\n break;\n\n case 'select':\n lastProps = getHostProps$2(domElement, lastRawProps);\n nextProps = getHostProps$2(domElement, nextRawProps);\n updatePayload = [];\n break;\n\n case 'textarea':\n lastProps = getHostProps$3(domElement, lastRawProps);\n nextProps = getHostProps$3(domElement, nextRawProps);\n updatePayload = [];\n break;\n\n default:\n lastProps = lastRawProps;\n nextProps = nextRawProps;\n\n if (typeof lastProps.onClick !== 'function' && typeof nextProps.onClick === 'function') {\n // TODO: This cast may not be sound for SVG, MathML or custom elements.\n trapClickOnNonInteractiveElement(domElement);\n }\n\n break;\n }\n\n assertValidProps(tag, nextProps);\n var propKey;\n var styleName;\n var styleUpdates = null;\n\n for (propKey in lastProps) {\n if (nextProps.hasOwnProperty(propKey) || !lastProps.hasOwnProperty(propKey) || lastProps[propKey] == null) {\n continue;\n }\n\n if (propKey === STYLE) {\n var lastStyle = lastProps[propKey];\n\n for (styleName in lastStyle) {\n if (lastStyle.hasOwnProperty(styleName)) {\n if (!styleUpdates) {\n styleUpdates = {};\n }\n\n styleUpdates[styleName] = '';\n }\n }\n } else if (propKey === DANGEROUSLY_SET_INNER_HTML || propKey === CHILDREN) ; else if ( propKey === SUPPRESS_CONTENT_EDITABLE_WARNING || propKey === SUPPRESS_HYDRATION_WARNING) ; else if (propKey === AUTOFOCUS) ; else if (registrationNameModules.hasOwnProperty(propKey)) {\n // This is a special case. If any listener updates we need to ensure\n // that the \"current\" fiber pointer gets updated so we need a commit\n // to update this element.\n if (!updatePayload) {\n updatePayload = [];\n }\n } else {\n // For all other deleted properties we add it to the queue. We use\n // the whitelist in the commit phase instead.\n (updatePayload = updatePayload || []).push(propKey, null);\n }\n }\n\n for (propKey in nextProps) {\n var nextProp = nextProps[propKey];\n var lastProp = lastProps != null ? lastProps[propKey] : undefined;\n\n if (!nextProps.hasOwnProperty(propKey) || nextProp === lastProp || nextProp == null && lastProp == null) {\n continue;\n }\n\n if (propKey === STYLE) {\n {\n if (nextProp) {\n // Freeze the next style object so that we can assume it won't be\n // mutated. We have already warned for this in the past.\n Object.freeze(nextProp);\n }\n }\n\n if (lastProp) {\n // Unset styles on `lastProp` but not on `nextProp`.\n for (styleName in lastProp) {\n if (lastProp.hasOwnProperty(styleName) && (!nextProp || !nextProp.hasOwnProperty(styleName))) {\n if (!styleUpdates) {\n styleUpdates = {};\n }\n\n styleUpdates[styleName] = '';\n }\n } // Update styles that changed since `lastProp`.\n\n\n for (styleName in nextProp) {\n if (nextProp.hasOwnProperty(styleName) && lastProp[styleName] !== nextProp[styleName]) {\n if (!styleUpdates) {\n styleUpdates = {};\n }\n\n styleUpdates[styleName] = nextProp[styleName];\n }\n }\n } else {\n // Relies on `updateStylesByID` not mutating `styleUpdates`.\n if (!styleUpdates) {\n if (!updatePayload) {\n updatePayload = [];\n }\n\n updatePayload.push(propKey, styleUpdates);\n }\n\n styleUpdates = nextProp;\n }\n } else if (propKey === DANGEROUSLY_SET_INNER_HTML) {\n var nextHtml = nextProp ? nextProp[HTML$1] : undefined;\n var lastHtml = lastProp ? lastProp[HTML$1] : undefined;\n\n if (nextHtml != null) {\n if (lastHtml !== nextHtml) {\n (updatePayload = updatePayload || []).push(propKey, nextHtml);\n }\n }\n } else if (propKey === CHILDREN) {\n if (lastProp !== nextProp && (typeof nextProp === 'string' || typeof nextProp === 'number')) {\n (updatePayload = updatePayload || []).push(propKey, '' + nextProp);\n }\n } else if ( propKey === SUPPRESS_CONTENT_EDITABLE_WARNING || propKey === SUPPRESS_HYDRATION_WARNING) ; else if (registrationNameModules.hasOwnProperty(propKey)) {\n if (nextProp != null) {\n // We eagerly listen to this even though we haven't committed yet.\n if ( typeof nextProp !== 'function') {\n warnForInvalidEventListener(propKey, nextProp);\n }\n\n ensureListeningTo(rootContainerElement, propKey);\n }\n\n if (!updatePayload && lastProp !== nextProp) {\n // This is a special case. If any listener updates we need to ensure\n // that the \"current\" props pointer gets updated so we need a commit\n // to update this element.\n updatePayload = [];\n }\n } else {\n // For any other property we always add it to the queue and then we\n // filter it out using the whitelist during the commit.\n (updatePayload = updatePayload || []).push(propKey, nextProp);\n }\n }\n\n if (styleUpdates) {\n {\n validateShorthandPropertyCollisionInDev(styleUpdates, nextProps[STYLE]);\n }\n\n (updatePayload = updatePayload || []).push(STYLE, styleUpdates);\n }\n\n return updatePayload;\n} // Apply the diff.\n\nfunction updateProperties(domElement, updatePayload, tag, lastRawProps, nextRawProps) {\n // Update checked *before* name.\n // In the middle of an update, it is possible to have multiple checked.\n // When a checked radio tries to change name, browser makes another radio's checked false.\n if (tag === 'input' && nextRawProps.type === 'radio' && nextRawProps.name != null) {\n updateChecked(domElement, nextRawProps);\n }\n\n var wasCustomComponentTag = isCustomComponent(tag, lastRawProps);\n var isCustomComponentTag = isCustomComponent(tag, nextRawProps); // Apply the diff.\n\n updateDOMProperties(domElement, updatePayload, wasCustomComponentTag, isCustomComponentTag); // TODO: Ensure that an update gets scheduled if any of the special props\n // changed.\n\n switch (tag) {\n case 'input':\n // Update the wrapper around inputs *after* updating props. This has to\n // happen after `updateDOMProperties`. Otherwise HTML5 input validations\n // raise warnings and prevent the new value from being assigned.\n updateWrapper(domElement, nextRawProps);\n break;\n\n case 'textarea':\n updateWrapper$1(domElement, nextRawProps);\n break;\n\n case 'select':\n // <select> value update needs to occur after <option> children\n // reconciliation\n postUpdateWrapper(domElement, nextRawProps);\n break;\n }\n}\n\nfunction getPossibleStandardName(propName) {\n {\n var lowerCasedName = propName.toLowerCase();\n\n if (!possibleStandardNames.hasOwnProperty(lowerCasedName)) {\n return null;\n }\n\n return possibleStandardNames[lowerCasedName] || null;\n }\n}\n\nfunction diffHydratedProperties(domElement, tag, rawProps, parentNamespace, rootContainerElement) {\n var isCustomComponentTag;\n var extraAttributeNames;\n\n {\n suppressHydrationWarning = rawProps[SUPPRESS_HYDRATION_WARNING] === true;\n isCustomComponentTag = isCustomComponent(tag, rawProps);\n validatePropertiesInDevelopment(tag, rawProps);\n } // TODO: Make sure that we check isMounted before firing any of these events.\n\n\n switch (tag) {\n case 'iframe':\n case 'object':\n case 'embed':\n trapBubbledEvent(TOP_LOAD, domElement);\n break;\n\n case 'video':\n case 'audio':\n // Create listener for each media event\n for (var i = 0; i < mediaEventTypes.length; i++) {\n trapBubbledEvent(mediaEventTypes[i], domElement);\n }\n\n break;\n\n case 'source':\n trapBubbledEvent(TOP_ERROR, domElement);\n break;\n\n case 'img':\n case 'image':\n case 'link':\n trapBubbledEvent(TOP_ERROR, domElement);\n trapBubbledEvent(TOP_LOAD, domElement);\n break;\n\n case 'form':\n trapBubbledEvent(TOP_RESET, domElement);\n trapBubbledEvent(TOP_SUBMIT, domElement);\n break;\n\n case 'details':\n trapBubbledEvent(TOP_TOGGLE, domElement);\n break;\n\n case 'input':\n initWrapperState(domElement, rawProps);\n trapBubbledEvent(TOP_INVALID, domElement); // For controlled components we always need to ensure we're listening\n // to onChange. Even if there is no listener.\n\n ensureListeningTo(rootContainerElement, 'onChange');\n break;\n\n case 'option':\n validateProps(domElement, rawProps);\n break;\n\n case 'select':\n initWrapperState$1(domElement, rawProps);\n trapBubbledEvent(TOP_INVALID, domElement); // For controlled components we always need to ensure we're listening\n // to onChange. Even if there is no listener.\n\n ensureListeningTo(rootContainerElement, 'onChange');\n break;\n\n case 'textarea':\n initWrapperState$2(domElement, rawProps);\n trapBubbledEvent(TOP_INVALID, domElement); // For controlled components we always need to ensure we're listening\n // to onChange. Even if there is no listener.\n\n ensureListeningTo(rootContainerElement, 'onChange');\n break;\n }\n\n assertValidProps(tag, rawProps);\n\n {\n extraAttributeNames = new Set();\n var attributes = domElement.attributes;\n\n for (var _i = 0; _i < attributes.length; _i++) {\n var name = attributes[_i].name.toLowerCase();\n\n switch (name) {\n // Built-in SSR attribute is whitelisted\n case 'data-reactroot':\n break;\n // Controlled attributes are not validated\n // TODO: Only ignore them on controlled tags.\n\n case 'value':\n break;\n\n case 'checked':\n break;\n\n case 'selected':\n break;\n\n default:\n // Intentionally use the original name.\n // See discussion in https://github.com/facebook/react/pull/10676.\n extraAttributeNames.add(attributes[_i].name);\n }\n }\n }\n\n var updatePayload = null;\n\n for (var propKey in rawProps) {\n if (!rawProps.hasOwnProperty(propKey)) {\n continue;\n }\n\n var nextProp = rawProps[propKey];\n\n if (propKey === CHILDREN) {\n // For text content children we compare against textContent. This\n // might match additional HTML that is hidden when we read it using\n // textContent. E.g. \"foo\" will match \"f<span>oo</span>\" but that still\n // satisfies our requirement. Our requirement is not to produce perfect\n // HTML and attributes. Ideally we should preserve structure but it's\n // ok not to if the visible content is still enough to indicate what\n // even listeners these nodes might be wired up to.\n // TODO: Warn if there is more than a single textNode as a child.\n // TODO: Should we use domElement.firstChild.nodeValue to compare?\n if (typeof nextProp === 'string') {\n if (domElement.textContent !== nextProp) {\n if ( !suppressHydrationWarning) {\n warnForTextDifference(domElement.textContent, nextProp);\n }\n\n updatePayload = [CHILDREN, nextProp];\n }\n } else if (typeof nextProp === 'number') {\n if (domElement.textContent !== '' + nextProp) {\n if ( !suppressHydrationWarning) {\n warnForTextDifference(domElement.textContent, nextProp);\n }\n\n updatePayload = [CHILDREN, '' + nextProp];\n }\n }\n } else if (registrationNameModules.hasOwnProperty(propKey)) {\n if (nextProp != null) {\n if ( typeof nextProp !== 'function') {\n warnForInvalidEventListener(propKey, nextProp);\n }\n\n ensureListeningTo(rootContainerElement, propKey);\n }\n } else if ( // Convince Flow we've calculated it (it's DEV-only in this method.)\n typeof isCustomComponentTag === 'boolean') {\n // Validate that the properties correspond to their expected values.\n var serverValue = void 0;\n var propertyInfo = getPropertyInfo(propKey);\n\n if (suppressHydrationWarning) ; else if ( propKey === SUPPRESS_CONTENT_EDITABLE_WARNING || propKey === SUPPRESS_HYDRATION_WARNING || // Controlled attributes are not validated\n // TODO: Only ignore them on controlled tags.\n propKey === 'value' || propKey === 'checked' || propKey === 'selected') ; else if (propKey === DANGEROUSLY_SET_INNER_HTML) {\n var serverHTML = domElement.innerHTML;\n var nextHtml = nextProp ? nextProp[HTML$1] : undefined;\n var expectedHTML = normalizeHTML(domElement, nextHtml != null ? nextHtml : '');\n\n if (expectedHTML !== serverHTML) {\n warnForPropDifference(propKey, serverHTML, expectedHTML);\n }\n } else if (propKey === STYLE) {\n // $FlowFixMe - Should be inferred as not undefined.\n extraAttributeNames.delete(propKey);\n\n if (canDiffStyleForHydrationWarning) {\n var expectedStyle = createDangerousStringForStyles(nextProp);\n serverValue = domElement.getAttribute('style');\n\n if (expectedStyle !== serverValue) {\n warnForPropDifference(propKey, serverValue, expectedStyle);\n }\n }\n } else if (isCustomComponentTag) {\n // $FlowFixMe - Should be inferred as not undefined.\n extraAttributeNames.delete(propKey.toLowerCase());\n serverValue = getValueForAttribute(domElement, propKey, nextProp);\n\n if (nextProp !== serverValue) {\n warnForPropDifference(propKey, serverValue, nextProp);\n }\n } else if (!shouldIgnoreAttribute(propKey, propertyInfo, isCustomComponentTag) && !shouldRemoveAttribute(propKey, nextProp, propertyInfo, isCustomComponentTag)) {\n var isMismatchDueToBadCasing = false;\n\n if (propertyInfo !== null) {\n // $FlowFixMe - Should be inferred as not undefined.\n extraAttributeNames.delete(propertyInfo.attributeName);\n serverValue = getValueForProperty(domElement, propKey, nextProp, propertyInfo);\n } else {\n var ownNamespace = parentNamespace;\n\n if (ownNamespace === HTML_NAMESPACE$1) {\n ownNamespace = getIntrinsicNamespace(tag);\n }\n\n if (ownNamespace === HTML_NAMESPACE$1) {\n // $FlowFixMe - Should be inferred as not undefined.\n extraAttributeNames.delete(propKey.toLowerCase());\n } else {\n var standardName = getPossibleStandardName(propKey);\n\n if (standardName !== null && standardName !== propKey) {\n // If an SVG prop is supplied with bad casing, it will\n // be successfully parsed from HTML, but will produce a mismatch\n // (and would be incorrectly rendered on the client).\n // However, we already warn about bad casing elsewhere.\n // So we'll skip the misleading extra mismatch warning in this case.\n isMismatchDueToBadCasing = true; // $FlowFixMe - Should be inferred as not undefined.\n\n extraAttributeNames.delete(standardName);\n } // $FlowFixMe - Should be inferred as not undefined.\n\n\n extraAttributeNames.delete(propKey);\n }\n\n serverValue = getValueForAttribute(domElement, propKey, nextProp);\n }\n\n if (nextProp !== serverValue && !isMismatchDueToBadCasing) {\n warnForPropDifference(propKey, serverValue, nextProp);\n }\n }\n }\n }\n\n {\n // $FlowFixMe - Should be inferred as not undefined.\n if (extraAttributeNames.size > 0 && !suppressHydrationWarning) {\n // $FlowFixMe - Should be inferred as not undefined.\n warnForExtraAttributes(extraAttributeNames);\n }\n }\n\n switch (tag) {\n case 'input':\n // TODO: Make sure we check if this is still unmounted or do any clean\n // up necessary since we never stop tracking anymore.\n track(domElement);\n postMountWrapper(domElement, rawProps, true);\n break;\n\n case 'textarea':\n // TODO: Make sure we check if this is still unmounted or do any clean\n // up necessary since we never stop tracking anymore.\n track(domElement);\n postMountWrapper$3(domElement);\n break;\n\n case 'select':\n case 'option':\n // For input and textarea we current always set the value property at\n // post mount to force it to diverge from attributes. However, for\n // option and select we don't quite do the same thing and select\n // is not resilient to the DOM state changing so we don't do that here.\n // TODO: Consider not doing this for input and textarea.\n break;\n\n default:\n if (typeof rawProps.onClick === 'function') {\n // TODO: This cast may not be sound for SVG, MathML or custom elements.\n trapClickOnNonInteractiveElement(domElement);\n }\n\n break;\n }\n\n return updatePayload;\n}\nfunction diffHydratedText(textNode, text) {\n var isDifferent = textNode.nodeValue !== text;\n return isDifferent;\n}\nfunction warnForUnmatchedText(textNode, text) {\n {\n warnForTextDifference(textNode.nodeValue, text);\n }\n}\nfunction warnForDeletedHydratableElement(parentNode, child) {\n {\n if (didWarnInvalidHydration) {\n return;\n }\n\n didWarnInvalidHydration = true;\n\n error('Did not expect server HTML to contain a <%s> in <%s>.', child.nodeName.toLowerCase(), parentNode.nodeName.toLowerCase());\n }\n}\nfunction warnForDeletedHydratableText(parentNode, child) {\n {\n if (didWarnInvalidHydration) {\n return;\n }\n\n didWarnInvalidHydration = true;\n\n error('Did not expect server HTML to contain the text node \"%s\" in <%s>.', child.nodeValue, parentNode.nodeName.toLowerCase());\n }\n}\nfunction warnForInsertedHydratedElement(parentNode, tag, props) {\n {\n if (didWarnInvalidHydration) {\n return;\n }\n\n didWarnInvalidHydration = true;\n\n error('Expected server HTML to contain a matching <%s> in <%s>.', tag, parentNode.nodeName.toLowerCase());\n }\n}\nfunction warnForInsertedHydratedText(parentNode, text) {\n {\n if (text === '') {\n // We expect to insert empty text nodes since they're not represented in\n // the HTML.\n // TODO: Remove this special case if we can just avoid inserting empty\n // text nodes.\n return;\n }\n\n if (didWarnInvalidHydration) {\n return;\n }\n\n didWarnInvalidHydration = true;\n\n error('Expected server HTML to contain a matching text node for \"%s\" in <%s>.', text, parentNode.nodeName.toLowerCase());\n }\n}\nfunction restoreControlledState$3(domElement, tag, props) {\n switch (tag) {\n case 'input':\n restoreControlledState(domElement, props);\n return;\n\n case 'textarea':\n restoreControlledState$2(domElement, props);\n return;\n\n case 'select':\n restoreControlledState$1(domElement, props);\n return;\n }\n}\n\nfunction getActiveElement(doc) {\n doc = doc || (typeof document !== 'undefined' ? document : undefined);\n\n if (typeof doc === 'undefined') {\n return null;\n }\n\n try {\n return doc.activeElement || doc.body;\n } catch (e) {\n return doc.body;\n }\n}\n\n/**\n * Given any node return the first leaf node without children.\n *\n * @param {DOMElement|DOMTextNode} node\n * @return {DOMElement|DOMTextNode}\n */\n\nfunction getLeafNode(node) {\n while (node && node.firstChild) {\n node = node.firstChild;\n }\n\n return node;\n}\n/**\n * Get the next sibling within a container. This will walk up the\n * DOM if a node's siblings have been exhausted.\n *\n * @param {DOMElement|DOMTextNode} node\n * @return {?DOMElement|DOMTextNode}\n */\n\n\nfunction getSiblingNode(node) {\n while (node) {\n if (node.nextSibling) {\n return node.nextSibling;\n }\n\n node = node.parentNode;\n }\n}\n/**\n * Get object describing the nodes which contain characters at offset.\n *\n * @param {DOMElement|DOMTextNode} root\n * @param {number} offset\n * @return {?object}\n */\n\n\nfunction getNodeForCharacterOffset(root, offset) {\n var node = getLeafNode(root);\n var nodeStart = 0;\n var nodeEnd = 0;\n\n while (node) {\n if (node.nodeType === TEXT_NODE) {\n nodeEnd = nodeStart + node.textContent.length;\n\n if (nodeStart <= offset && nodeEnd >= offset) {\n return {\n node: node,\n offset: offset - nodeStart\n };\n }\n\n nodeStart = nodeEnd;\n }\n\n node = getLeafNode(getSiblingNode(node));\n }\n}\n\n/**\n * @param {DOMElement} outerNode\n * @return {?object}\n */\n\nfunction getOffsets(outerNode) {\n var ownerDocument = outerNode.ownerDocument;\n var win = ownerDocument && ownerDocument.defaultView || window;\n var selection = win.getSelection && win.getSelection();\n\n if (!selection || selection.rangeCount === 0) {\n return null;\n }\n\n var anchorNode = selection.anchorNode,\n anchorOffset = selection.anchorOffset,\n focusNode = selection.focusNode,\n focusOffset = selection.focusOffset; // In Firefox, anchorNode and focusNode can be \"anonymous divs\", e.g. the\n // up/down buttons on an <input type=\"number\">. Anonymous divs do not seem to\n // expose properties, triggering a \"Permission denied error\" if any of its\n // properties are accessed. The only seemingly possible way to avoid erroring\n // is to access a property that typically works for non-anonymous divs and\n // catch any error that may otherwise arise. See\n // https://bugzilla.mozilla.org/show_bug.cgi?id=208427\n\n try {\n /* eslint-disable no-unused-expressions */\n anchorNode.nodeType;\n focusNode.nodeType;\n /* eslint-enable no-unused-expressions */\n } catch (e) {\n return null;\n }\n\n return getModernOffsetsFromPoints(outerNode, anchorNode, anchorOffset, focusNode, focusOffset);\n}\n/**\n * Returns {start, end} where `start` is the character/codepoint index of\n * (anchorNode, anchorOffset) within the textContent of `outerNode`, and\n * `end` is the index of (focusNode, focusOffset).\n *\n * Returns null if you pass in garbage input but we should probably just crash.\n *\n * Exported only for testing.\n */\n\nfunction getModernOffsetsFromPoints(outerNode, anchorNode, anchorOffset, focusNode, focusOffset) {\n var length = 0;\n var start = -1;\n var end = -1;\n var indexWithinAnchor = 0;\n var indexWithinFocus = 0;\n var node = outerNode;\n var parentNode = null;\n\n outer: while (true) {\n var next = null;\n\n while (true) {\n if (node === anchorNode && (anchorOffset === 0 || node.nodeType === TEXT_NODE)) {\n start = length + anchorOffset;\n }\n\n if (node === focusNode && (focusOffset === 0 || node.nodeType === TEXT_NODE)) {\n end = length + focusOffset;\n }\n\n if (node.nodeType === TEXT_NODE) {\n length += node.nodeValue.length;\n }\n\n if ((next = node.firstChild) === null) {\n break;\n } // Moving from `node` to its first child `next`.\n\n\n parentNode = node;\n node = next;\n }\n\n while (true) {\n if (node === outerNode) {\n // If `outerNode` has children, this is always the second time visiting\n // it. If it has no children, this is still the first loop, and the only\n // valid selection is anchorNode and focusNode both equal to this node\n // and both offsets 0, in which case we will have handled above.\n break outer;\n }\n\n if (parentNode === anchorNode && ++indexWithinAnchor === anchorOffset) {\n start = length;\n }\n\n if (parentNode === focusNode && ++indexWithinFocus === focusOffset) {\n end = length;\n }\n\n if ((next = node.nextSibling) !== null) {\n break;\n }\n\n node = parentNode;\n parentNode = node.parentNode;\n } // Moving from `node` to its next sibling `next`.\n\n\n node = next;\n }\n\n if (start === -1 || end === -1) {\n // This should never happen. (Would happen if the anchor/focus nodes aren't\n // actually inside the passed-in node.)\n return null;\n }\n\n return {\n start: start,\n end: end\n };\n}\n/**\n * In modern non-IE browsers, we can support both forward and backward\n * selections.\n *\n * Note: IE10+ supports the Selection object, but it does not support\n * the `extend` method, which means that even in modern IE, it's not possible\n * to programmatically create a backward selection. Thus, for all IE\n * versions, we use the old IE API to create our selections.\n *\n * @param {DOMElement|DOMTextNode} node\n * @param {object} offsets\n */\n\nfunction setOffsets(node, offsets) {\n var doc = node.ownerDocument || document;\n var win = doc && doc.defaultView || window; // Edge fails with \"Object expected\" in some scenarios.\n // (For instance: TinyMCE editor used in a list component that supports pasting to add more,\n // fails when pasting 100+ items)\n\n if (!win.getSelection) {\n return;\n }\n\n var selection = win.getSelection();\n var length = node.textContent.length;\n var start = Math.min(offsets.start, length);\n var end = offsets.end === undefined ? start : Math.min(offsets.end, length); // IE 11 uses modern selection, but doesn't support the extend method.\n // Flip backward selections, so we can set with a single range.\n\n if (!selection.extend && start > end) {\n var temp = end;\n end = start;\n start = temp;\n }\n\n var startMarker = getNodeForCharacterOffset(node, start);\n var endMarker = getNodeForCharacterOffset(node, end);\n\n if (startMarker && endMarker) {\n if (selection.rangeCount === 1 && selection.anchorNode === startMarker.node && selection.anchorOffset === startMarker.offset && selection.focusNode === endMarker.node && selection.focusOffset === endMarker.offset) {\n return;\n }\n\n var range = doc.createRange();\n range.setStart(startMarker.node, startMarker.offset);\n selection.removeAllRanges();\n\n if (start > end) {\n selection.addRange(range);\n selection.extend(endMarker.node, endMarker.offset);\n } else {\n range.setEnd(endMarker.node, endMarker.offset);\n selection.addRange(range);\n }\n }\n}\n\nfunction isTextNode(node) {\n return node && node.nodeType === TEXT_NODE;\n}\n\nfunction containsNode(outerNode, innerNode) {\n if (!outerNode || !innerNode) {\n return false;\n } else if (outerNode === innerNode) {\n return true;\n } else if (isTextNode(outerNode)) {\n return false;\n } else if (isTextNode(innerNode)) {\n return containsNode(outerNode, innerNode.parentNode);\n } else if ('contains' in outerNode) {\n return outerNode.contains(innerNode);\n } else if (outerNode.compareDocumentPosition) {\n return !!(outerNode.compareDocumentPosition(innerNode) & 16);\n } else {\n return false;\n }\n}\n\nfunction isInDocument(node) {\n return node && node.ownerDocument && containsNode(node.ownerDocument.documentElement, node);\n}\n\nfunction isSameOriginFrame(iframe) {\n try {\n // Accessing the contentDocument of a HTMLIframeElement can cause the browser\n // to throw, e.g. if it has a cross-origin src attribute.\n // Safari will show an error in the console when the access results in \"Blocked a frame with origin\". e.g:\n // iframe.contentDocument.defaultView;\n // A safety way is to access one of the cross origin properties: Window or Location\n // Which might result in \"SecurityError\" DOM Exception and it is compatible to Safari.\n // https://html.spec.whatwg.org/multipage/browsers.html#integration-with-idl\n return typeof iframe.contentWindow.location.href === 'string';\n } catch (err) {\n return false;\n }\n}\n\nfunction getActiveElementDeep() {\n var win = window;\n var element = getActiveElement();\n\n while (element instanceof win.HTMLIFrameElement) {\n if (isSameOriginFrame(element)) {\n win = element.contentWindow;\n } else {\n return element;\n }\n\n element = getActiveElement(win.document);\n }\n\n return element;\n}\n/**\n * @ReactInputSelection: React input selection module. Based on Selection.js,\n * but modified to be suitable for react and has a couple of bug fixes (doesn't\n * assume buttons have range selections allowed).\n * Input selection module for React.\n */\n\n/**\n * @hasSelectionCapabilities: we get the element types that support selection\n * from https://html.spec.whatwg.org/#do-not-apply, looking at `selectionStart`\n * and `selectionEnd` rows.\n */\n\n\nfunction hasSelectionCapabilities(elem) {\n var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n return nodeName && (nodeName === 'input' && (elem.type === 'text' || elem.type === 'search' || elem.type === 'tel' || elem.type === 'url' || elem.type === 'password') || nodeName === 'textarea' || elem.contentEditable === 'true');\n}\nfunction getSelectionInformation() {\n var focusedElem = getActiveElementDeep();\n return {\n // Used by Flare\n activeElementDetached: null,\n focusedElem: focusedElem,\n selectionRange: hasSelectionCapabilities(focusedElem) ? getSelection(focusedElem) : null\n };\n}\n/**\n * @restoreSelection: If any selection information was potentially lost,\n * restore it. This is useful when performing operations that could remove dom\n * nodes and place them back in, resulting in focus being lost.\n */\n\nfunction restoreSelection(priorSelectionInformation) {\n var curFocusedElem = getActiveElementDeep();\n var priorFocusedElem = priorSelectionInformation.focusedElem;\n var priorSelectionRange = priorSelectionInformation.selectionRange;\n\n if (curFocusedElem !== priorFocusedElem && isInDocument(priorFocusedElem)) {\n if (priorSelectionRange !== null && hasSelectionCapabilities(priorFocusedElem)) {\n setSelection(priorFocusedElem, priorSelectionRange);\n } // Focusing a node can change the scroll position, which is undesirable\n\n\n var ancestors = [];\n var ancestor = priorFocusedElem;\n\n while (ancestor = ancestor.parentNode) {\n if (ancestor.nodeType === ELEMENT_NODE) {\n ancestors.push({\n element: ancestor,\n left: ancestor.scrollLeft,\n top: ancestor.scrollTop\n });\n }\n }\n\n if (typeof priorFocusedElem.focus === 'function') {\n priorFocusedElem.focus();\n }\n\n for (var i = 0; i < ancestors.length; i++) {\n var info = ancestors[i];\n info.element.scrollLeft = info.left;\n info.element.scrollTop = info.top;\n }\n }\n}\n/**\n * @getSelection: Gets the selection bounds of a focused textarea, input or\n * contentEditable node.\n * -@input: Look up selection bounds of this input\n * -@return {start: selectionStart, end: selectionEnd}\n */\n\nfunction getSelection(input) {\n var selection;\n\n if ('selectionStart' in input) {\n // Modern browser with input or textarea.\n selection = {\n start: input.selectionStart,\n end: input.selectionEnd\n };\n } else {\n // Content editable or old IE textarea.\n selection = getOffsets(input);\n }\n\n return selection || {\n start: 0,\n end: 0\n };\n}\n/**\n * @setSelection: Sets the selection bounds of a textarea or input and focuses\n * the input.\n * -@input Set selection bounds of this input or textarea\n * -@offsets Object of same form that is returned from get*\n */\n\nfunction setSelection(input, offsets) {\n var start = offsets.start,\n end = offsets.end;\n\n if (end === undefined) {\n end = start;\n }\n\n if ('selectionStart' in input) {\n input.selectionStart = start;\n input.selectionEnd = Math.min(end, input.value.length);\n } else {\n setOffsets(input, offsets);\n }\n}\n\nvar validateDOMNesting = function () {};\n\nvar updatedAncestorInfo = function () {};\n\n{\n // This validation code was written based on the HTML5 parsing spec:\n // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope\n //\n // Note: this does not catch all invalid nesting, nor does it try to (as it's\n // not clear what practical benefit doing so provides); instead, we warn only\n // for cases where the parser will give a parse tree differing from what React\n // intended. For example, <b><div></div></b> is invalid but we don't warn\n // because it still parses correctly; we do warn for other cases like nested\n // <p> tags where the beginning of the second element implicitly closes the\n // first, causing a confusing mess.\n // https://html.spec.whatwg.org/multipage/syntax.html#special\n var specialTags = ['address', 'applet', 'area', 'article', 'aside', 'base', 'basefont', 'bgsound', 'blockquote', 'body', 'br', 'button', 'caption', 'center', 'col', 'colgroup', 'dd', 'details', 'dir', 'div', 'dl', 'dt', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'frame', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'iframe', 'img', 'input', 'isindex', 'li', 'link', 'listing', 'main', 'marquee', 'menu', 'menuitem', 'meta', 'nav', 'noembed', 'noframes', 'noscript', 'object', 'ol', 'p', 'param', 'plaintext', 'pre', 'script', 'section', 'select', 'source', 'style', 'summary', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'title', 'tr', 'track', 'ul', 'wbr', 'xmp']; // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-scope\n\n var inScopeTags = ['applet', 'caption', 'html', 'table', 'td', 'th', 'marquee', 'object', 'template', // https://html.spec.whatwg.org/multipage/syntax.html#html-integration-point\n // TODO: Distinguish by namespace here -- for <title>, including it here\n // errs on the side of fewer warnings\n 'foreignObject', 'desc', 'title']; // https://html.spec.whatwg.org/multipage/syntax.html#has-an-element-in-button-scope\n\n var buttonScopeTags = inScopeTags.concat(['button']); // https://html.spec.whatwg.org/multipage/syntax.html#generate-implied-end-tags\n\n var impliedEndTags = ['dd', 'dt', 'li', 'option', 'optgroup', 'p', 'rp', 'rt'];\n var emptyAncestorInfo = {\n current: null,\n formTag: null,\n aTagInScope: null,\n buttonTagInScope: null,\n nobrTagInScope: null,\n pTagInButtonScope: null,\n listItemTagAutoclosing: null,\n dlItemTagAutoclosing: null\n };\n\n updatedAncestorInfo = function (oldInfo, tag) {\n var ancestorInfo = _assign({}, oldInfo || emptyAncestorInfo);\n\n var info = {\n tag: tag\n };\n\n if (inScopeTags.indexOf(tag) !== -1) {\n ancestorInfo.aTagInScope = null;\n ancestorInfo.buttonTagInScope = null;\n ancestorInfo.nobrTagInScope = null;\n }\n\n if (buttonScopeTags.indexOf(tag) !== -1) {\n ancestorInfo.pTagInButtonScope = null;\n } // See rules for 'li', 'dd', 'dt' start tags in\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody\n\n\n if (specialTags.indexOf(tag) !== -1 && tag !== 'address' && tag !== 'div' && tag !== 'p') {\n ancestorInfo.listItemTagAutoclosing = null;\n ancestorInfo.dlItemTagAutoclosing = null;\n }\n\n ancestorInfo.current = info;\n\n if (tag === 'form') {\n ancestorInfo.formTag = info;\n }\n\n if (tag === 'a') {\n ancestorInfo.aTagInScope = info;\n }\n\n if (tag === 'button') {\n ancestorInfo.buttonTagInScope = info;\n }\n\n if (tag === 'nobr') {\n ancestorInfo.nobrTagInScope = info;\n }\n\n if (tag === 'p') {\n ancestorInfo.pTagInButtonScope = info;\n }\n\n if (tag === 'li') {\n ancestorInfo.listItemTagAutoclosing = info;\n }\n\n if (tag === 'dd' || tag === 'dt') {\n ancestorInfo.dlItemTagAutoclosing = info;\n }\n\n return ancestorInfo;\n };\n /**\n * Returns whether\n */\n\n\n var isTagValidWithParent = function (tag, parentTag) {\n // First, let's check if we're in an unusual parsing mode...\n switch (parentTag) {\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inselect\n case 'select':\n return tag === 'option' || tag === 'optgroup' || tag === '#text';\n\n case 'optgroup':\n return tag === 'option' || tag === '#text';\n // Strictly speaking, seeing an <option> doesn't mean we're in a <select>\n // but\n\n case 'option':\n return tag === '#text';\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intd\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incaption\n // No special behavior since these rules fall back to \"in body\" mode for\n // all except special table nodes which cause bad parsing behavior anyway.\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intr\n\n case 'tr':\n return tag === 'th' || tag === 'td' || tag === 'style' || tag === 'script' || tag === 'template';\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intbody\n\n case 'tbody':\n case 'thead':\n case 'tfoot':\n return tag === 'tr' || tag === 'style' || tag === 'script' || tag === 'template';\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-incolgroup\n\n case 'colgroup':\n return tag === 'col' || tag === 'template';\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-intable\n\n case 'table':\n return tag === 'caption' || tag === 'colgroup' || tag === 'tbody' || tag === 'tfoot' || tag === 'thead' || tag === 'style' || tag === 'script' || tag === 'template';\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inhead\n\n case 'head':\n return tag === 'base' || tag === 'basefont' || tag === 'bgsound' || tag === 'link' || tag === 'meta' || tag === 'title' || tag === 'noscript' || tag === 'noframes' || tag === 'style' || tag === 'script' || tag === 'template';\n // https://html.spec.whatwg.org/multipage/semantics.html#the-html-element\n\n case 'html':\n return tag === 'head' || tag === 'body' || tag === 'frameset';\n\n case 'frameset':\n return tag === 'frame';\n\n case '#document':\n return tag === 'html';\n } // Probably in the \"in body\" parsing mode, so we outlaw only tag combos\n // where the parsing rules cause implicit opens or closes to be added.\n // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody\n\n\n switch (tag) {\n case 'h1':\n case 'h2':\n case 'h3':\n case 'h4':\n case 'h5':\n case 'h6':\n return parentTag !== 'h1' && parentTag !== 'h2' && parentTag !== 'h3' && parentTag !== 'h4' && parentTag !== 'h5' && parentTag !== 'h6';\n\n case 'rp':\n case 'rt':\n return impliedEndTags.indexOf(parentTag) === -1;\n\n case 'body':\n case 'caption':\n case 'col':\n case 'colgroup':\n case 'frameset':\n case 'frame':\n case 'head':\n case 'html':\n case 'tbody':\n case 'td':\n case 'tfoot':\n case 'th':\n case 'thead':\n case 'tr':\n // These tags are only valid with a few parents that have special child\n // parsing rules -- if we're down here, then none of those matched and\n // so we allow it only if we don't know what the parent is, as all other\n // cases are invalid.\n return parentTag == null;\n }\n\n return true;\n };\n /**\n * Returns whether\n */\n\n\n var findInvalidAncestorForTag = function (tag, ancestorInfo) {\n switch (tag) {\n case 'address':\n case 'article':\n case 'aside':\n case 'blockquote':\n case 'center':\n case 'details':\n case 'dialog':\n case 'dir':\n case 'div':\n case 'dl':\n case 'fieldset':\n case 'figcaption':\n case 'figure':\n case 'footer':\n case 'header':\n case 'hgroup':\n case 'main':\n case 'menu':\n case 'nav':\n case 'ol':\n case 'p':\n case 'section':\n case 'summary':\n case 'ul':\n case 'pre':\n case 'listing':\n case 'table':\n case 'hr':\n case 'xmp':\n case 'h1':\n case 'h2':\n case 'h3':\n case 'h4':\n case 'h5':\n case 'h6':\n return ancestorInfo.pTagInButtonScope;\n\n case 'form':\n return ancestorInfo.formTag || ancestorInfo.pTagInButtonScope;\n\n case 'li':\n return ancestorInfo.listItemTagAutoclosing;\n\n case 'dd':\n case 'dt':\n return ancestorInfo.dlItemTagAutoclosing;\n\n case 'button':\n return ancestorInfo.buttonTagInScope;\n\n case 'a':\n // Spec says something about storing a list of markers, but it sounds\n // equivalent to this check.\n return ancestorInfo.aTagInScope;\n\n case 'nobr':\n return ancestorInfo.nobrTagInScope;\n }\n\n return null;\n };\n\n var didWarn$1 = {};\n\n validateDOMNesting = function (childTag, childText, ancestorInfo) {\n ancestorInfo = ancestorInfo || emptyAncestorInfo;\n var parentInfo = ancestorInfo.current;\n var parentTag = parentInfo && parentInfo.tag;\n\n if (childText != null) {\n if (childTag != null) {\n error('validateDOMNesting: when childText is passed, childTag should be null');\n }\n\n childTag = '#text';\n }\n\n var invalidParent = isTagValidWithParent(childTag, parentTag) ? null : parentInfo;\n var invalidAncestor = invalidParent ? null : findInvalidAncestorForTag(childTag, ancestorInfo);\n var invalidParentOrAncestor = invalidParent || invalidAncestor;\n\n if (!invalidParentOrAncestor) {\n return;\n }\n\n var ancestorTag = invalidParentOrAncestor.tag;\n var addendum = getCurrentFiberStackInDev();\n var warnKey = !!invalidParent + '|' + childTag + '|' + ancestorTag + '|' + addendum;\n\n if (didWarn$1[warnKey]) {\n return;\n }\n\n didWarn$1[warnKey] = true;\n var tagDisplayName = childTag;\n var whitespaceInfo = '';\n\n if (childTag === '#text') {\n if (/\\S/.test(childText)) {\n tagDisplayName = 'Text nodes';\n } else {\n tagDisplayName = 'Whitespace text nodes';\n whitespaceInfo = \" Make sure you don't have any extra whitespace between tags on \" + 'each line of your source code.';\n }\n } else {\n tagDisplayName = '<' + childTag + '>';\n }\n\n if (invalidParent) {\n var info = '';\n\n if (ancestorTag === 'table' && childTag === 'tr') {\n info += ' Add a <tbody>, <thead> or <tfoot> to your code to match the DOM tree generated by ' + 'the browser.';\n }\n\n error('validateDOMNesting(...): %s cannot appear as a child of <%s>.%s%s', tagDisplayName, ancestorTag, whitespaceInfo, info);\n } else {\n error('validateDOMNesting(...): %s cannot appear as a descendant of ' + '<%s>.', tagDisplayName, ancestorTag);\n }\n };\n}\n\nvar SUPPRESS_HYDRATION_WARNING$1;\n\n{\n SUPPRESS_HYDRATION_WARNING$1 = 'suppressHydrationWarning';\n}\n\nvar SUSPENSE_START_DATA = '$';\nvar SUSPENSE_END_DATA = '/$';\nvar SUSPENSE_PENDING_START_DATA = '$?';\nvar SUSPENSE_FALLBACK_START_DATA = '$!';\nvar STYLE$1 = 'style';\nvar eventsEnabled = null;\nvar selectionInformation = null;\n\nfunction shouldAutoFocusHostComponent(type, props) {\n switch (type) {\n case 'button':\n case 'input':\n case 'select':\n case 'textarea':\n return !!props.autoFocus;\n }\n\n return false;\n}\nfunction getRootHostContext(rootContainerInstance) {\n var type;\n var namespace;\n var nodeType = rootContainerInstance.nodeType;\n\n switch (nodeType) {\n case DOCUMENT_NODE:\n case DOCUMENT_FRAGMENT_NODE:\n {\n type = nodeType === DOCUMENT_NODE ? '#document' : '#fragment';\n var root = rootContainerInstance.documentElement;\n namespace = root ? root.namespaceURI : getChildNamespace(null, '');\n break;\n }\n\n default:\n {\n var container = nodeType === COMMENT_NODE ? rootContainerInstance.parentNode : rootContainerInstance;\n var ownNamespace = container.namespaceURI || null;\n type = container.tagName;\n namespace = getChildNamespace(ownNamespace, type);\n break;\n }\n }\n\n {\n var validatedTag = type.toLowerCase();\n var ancestorInfo = updatedAncestorInfo(null, validatedTag);\n return {\n namespace: namespace,\n ancestorInfo: ancestorInfo\n };\n }\n}\nfunction getChildHostContext(parentHostContext, type, rootContainerInstance) {\n {\n var parentHostContextDev = parentHostContext;\n var namespace = getChildNamespace(parentHostContextDev.namespace, type);\n var ancestorInfo = updatedAncestorInfo(parentHostContextDev.ancestorInfo, type);\n return {\n namespace: namespace,\n ancestorInfo: ancestorInfo\n };\n }\n}\nfunction getPublicInstance(instance) {\n return instance;\n}\nfunction prepareForCommit(containerInfo) {\n eventsEnabled = isEnabled();\n selectionInformation = getSelectionInformation();\n setEnabled(false);\n}\nfunction resetAfterCommit(containerInfo) {\n restoreSelection(selectionInformation);\n setEnabled(eventsEnabled);\n eventsEnabled = null;\n\n selectionInformation = null;\n}\nfunction createInstance(type, props, rootContainerInstance, hostContext, internalInstanceHandle) {\n var parentNamespace;\n\n {\n // TODO: take namespace into account when validating.\n var hostContextDev = hostContext;\n validateDOMNesting(type, null, hostContextDev.ancestorInfo);\n\n if (typeof props.children === 'string' || typeof props.children === 'number') {\n var string = '' + props.children;\n var ownAncestorInfo = updatedAncestorInfo(hostContextDev.ancestorInfo, type);\n validateDOMNesting(null, string, ownAncestorInfo);\n }\n\n parentNamespace = hostContextDev.namespace;\n }\n\n var domElement = createElement(type, props, rootContainerInstance, parentNamespace);\n precacheFiberNode(internalInstanceHandle, domElement);\n updateFiberProps(domElement, props);\n return domElement;\n}\nfunction appendInitialChild(parentInstance, child) {\n parentInstance.appendChild(child);\n}\nfunction finalizeInitialChildren(domElement, type, props, rootContainerInstance, hostContext) {\n setInitialProperties(domElement, type, props, rootContainerInstance);\n return shouldAutoFocusHostComponent(type, props);\n}\nfunction prepareUpdate(domElement, type, oldProps, newProps, rootContainerInstance, hostContext) {\n {\n var hostContextDev = hostContext;\n\n if (typeof newProps.children !== typeof oldProps.children && (typeof newProps.children === 'string' || typeof newProps.children === 'number')) {\n var string = '' + newProps.children;\n var ownAncestorInfo = updatedAncestorInfo(hostContextDev.ancestorInfo, type);\n validateDOMNesting(null, string, ownAncestorInfo);\n }\n }\n\n return diffProperties(domElement, type, oldProps, newProps, rootContainerInstance);\n}\nfunction shouldSetTextContent(type, props) {\n return type === 'textarea' || type === 'option' || type === 'noscript' || typeof props.children === 'string' || typeof props.children === 'number' || typeof props.dangerouslySetInnerHTML === 'object' && props.dangerouslySetInnerHTML !== null && props.dangerouslySetInnerHTML.__html != null;\n}\nfunction shouldDeprioritizeSubtree(type, props) {\n return !!props.hidden;\n}\nfunction createTextInstance(text, rootContainerInstance, hostContext, internalInstanceHandle) {\n {\n var hostContextDev = hostContext;\n validateDOMNesting(null, text, hostContextDev.ancestorInfo);\n }\n\n var textNode = createTextNode(text, rootContainerInstance);\n precacheFiberNode(internalInstanceHandle, textNode);\n return textNode;\n}\n// if a component just imports ReactDOM (e.g. for findDOMNode).\n// Some environments might not have setTimeout or clearTimeout.\n\nvar scheduleTimeout = typeof setTimeout === 'function' ? setTimeout : undefined;\nvar cancelTimeout = typeof clearTimeout === 'function' ? clearTimeout : undefined;\nvar noTimeout = -1; // -------------------\nfunction commitMount(domElement, type, newProps, internalInstanceHandle) {\n // Despite the naming that might imply otherwise, this method only\n // fires if there is an `Update` effect scheduled during mounting.\n // This happens if `finalizeInitialChildren` returns `true` (which it\n // does to implement the `autoFocus` attribute on the client). But\n // there are also other cases when this might happen (such as patching\n // up text content during hydration mismatch). So we'll check this again.\n if (shouldAutoFocusHostComponent(type, newProps)) {\n domElement.focus();\n }\n}\nfunction commitUpdate(domElement, updatePayload, type, oldProps, newProps, internalInstanceHandle) {\n // Update the props handle so that we know which props are the ones with\n // with current event handlers.\n updateFiberProps(domElement, newProps); // Apply the diff to the DOM node.\n\n updateProperties(domElement, updatePayload, type, oldProps, newProps);\n}\nfunction resetTextContent(domElement) {\n setTextContent(domElement, '');\n}\nfunction commitTextUpdate(textInstance, oldText, newText) {\n textInstance.nodeValue = newText;\n}\nfunction appendChild(parentInstance, child) {\n parentInstance.appendChild(child);\n}\nfunction appendChildToContainer(container, child) {\n var parentNode;\n\n if (container.nodeType === COMMENT_NODE) {\n parentNode = container.parentNode;\n parentNode.insertBefore(child, container);\n } else {\n parentNode = container;\n parentNode.appendChild(child);\n } // This container might be used for a portal.\n // If something inside a portal is clicked, that click should bubble\n // through the React tree. However, on Mobile Safari the click would\n // never bubble through the *DOM* tree unless an ancestor with onclick\n // event exists. So we wouldn't see it and dispatch it.\n // This is why we ensure that non React root containers have inline onclick\n // defined.\n // https://github.com/facebook/react/issues/11918\n\n\n var reactRootContainer = container._reactRootContainer;\n\n if ((reactRootContainer === null || reactRootContainer === undefined) && parentNode.onclick === null) {\n // TODO: This cast may not be sound for SVG, MathML or custom elements.\n trapClickOnNonInteractiveElement(parentNode);\n }\n}\nfunction insertBefore(parentInstance, child, beforeChild) {\n parentInstance.insertBefore(child, beforeChild);\n}\nfunction insertInContainerBefore(container, child, beforeChild) {\n if (container.nodeType === COMMENT_NODE) {\n container.parentNode.insertBefore(child, beforeChild);\n } else {\n container.insertBefore(child, beforeChild);\n }\n}\nfunction removeChild(parentInstance, child) {\n parentInstance.removeChild(child);\n}\nfunction removeChildFromContainer(container, child) {\n if (container.nodeType === COMMENT_NODE) {\n container.parentNode.removeChild(child);\n } else {\n container.removeChild(child);\n }\n}\n\nfunction hideInstance(instance) {\n // pass host context to this method?\n\n\n instance = instance;\n var style = instance.style;\n\n if (typeof style.setProperty === 'function') {\n style.setProperty('display', 'none', 'important');\n } else {\n style.display = 'none';\n }\n}\nfunction hideTextInstance(textInstance) {\n textInstance.nodeValue = '';\n}\nfunction unhideInstance(instance, props) {\n instance = instance;\n var styleProp = props[STYLE$1];\n var display = styleProp !== undefined && styleProp !== null && styleProp.hasOwnProperty('display') ? styleProp.display : null;\n instance.style.display = dangerousStyleValue('display', display);\n}\nfunction unhideTextInstance(textInstance, text) {\n textInstance.nodeValue = text;\n} // -------------------\nfunction canHydrateInstance(instance, type, props) {\n if (instance.nodeType !== ELEMENT_NODE || type.toLowerCase() !== instance.nodeName.toLowerCase()) {\n return null;\n } // This has now been refined to an element node.\n\n\n return instance;\n}\nfunction canHydrateTextInstance(instance, text) {\n if (text === '' || instance.nodeType !== TEXT_NODE) {\n // Empty strings are not parsed by HTML so there won't be a correct match here.\n return null;\n } // This has now been refined to a text node.\n\n\n return instance;\n}\nfunction isSuspenseInstancePending(instance) {\n return instance.data === SUSPENSE_PENDING_START_DATA;\n}\nfunction isSuspenseInstanceFallback(instance) {\n return instance.data === SUSPENSE_FALLBACK_START_DATA;\n}\n\nfunction getNextHydratable(node) {\n // Skip non-hydratable nodes.\n for (; node != null; node = node.nextSibling) {\n var nodeType = node.nodeType;\n\n if (nodeType === ELEMENT_NODE || nodeType === TEXT_NODE) {\n break;\n }\n }\n\n return node;\n}\n\nfunction getNextHydratableSibling(instance) {\n return getNextHydratable(instance.nextSibling);\n}\nfunction getFirstHydratableChild(parentInstance) {\n return getNextHydratable(parentInstance.firstChild);\n}\nfunction hydrateInstance(instance, type, props, rootContainerInstance, hostContext, internalInstanceHandle) {\n precacheFiberNode(internalInstanceHandle, instance); // TODO: Possibly defer this until the commit phase where all the events\n // get attached.\n\n updateFiberProps(instance, props);\n var parentNamespace;\n\n {\n var hostContextDev = hostContext;\n parentNamespace = hostContextDev.namespace;\n }\n\n return diffHydratedProperties(instance, type, props, parentNamespace, rootContainerInstance);\n}\nfunction hydrateTextInstance(textInstance, text, internalInstanceHandle) {\n precacheFiberNode(internalInstanceHandle, textInstance);\n return diffHydratedText(textInstance, text);\n}\nfunction getNextHydratableInstanceAfterSuspenseInstance(suspenseInstance) {\n var node = suspenseInstance.nextSibling; // Skip past all nodes within this suspense boundary.\n // There might be nested nodes so we need to keep track of how\n // deep we are and only break out when we're back on top.\n\n var depth = 0;\n\n while (node) {\n if (node.nodeType === COMMENT_NODE) {\n var data = node.data;\n\n if (data === SUSPENSE_END_DATA) {\n if (depth === 0) {\n return getNextHydratableSibling(node);\n } else {\n depth--;\n }\n } else if (data === SUSPENSE_START_DATA || data === SUSPENSE_FALLBACK_START_DATA || data === SUSPENSE_PENDING_START_DATA) {\n depth++;\n }\n }\n\n node = node.nextSibling;\n } // TODO: Warn, we didn't find the end comment boundary.\n\n\n return null;\n} // Returns the SuspenseInstance if this node is a direct child of a\n// SuspenseInstance. I.e. if its previous sibling is a Comment with\n// SUSPENSE_x_START_DATA. Otherwise, null.\n\nfunction getParentSuspenseInstance(targetInstance) {\n var node = targetInstance.previousSibling; // Skip past all nodes within this suspense boundary.\n // There might be nested nodes so we need to keep track of how\n // deep we are and only break out when we're back on top.\n\n var depth = 0;\n\n while (node) {\n if (node.nodeType === COMMENT_NODE) {\n var data = node.data;\n\n if (data === SUSPENSE_START_DATA || data === SUSPENSE_FALLBACK_START_DATA || data === SUSPENSE_PENDING_START_DATA) {\n if (depth === 0) {\n return node;\n } else {\n depth--;\n }\n } else if (data === SUSPENSE_END_DATA) {\n depth++;\n }\n }\n\n node = node.previousSibling;\n }\n\n return null;\n}\nfunction commitHydratedContainer(container) {\n // Retry if any event replaying was blocked on this.\n retryIfBlockedOn(container);\n}\nfunction commitHydratedSuspenseInstance(suspenseInstance) {\n // Retry if any event replaying was blocked on this.\n retryIfBlockedOn(suspenseInstance);\n}\nfunction didNotMatchHydratedContainerTextInstance(parentContainer, textInstance, text) {\n {\n warnForUnmatchedText(textInstance, text);\n }\n}\nfunction didNotMatchHydratedTextInstance(parentType, parentProps, parentInstance, textInstance, text) {\n if ( parentProps[SUPPRESS_HYDRATION_WARNING$1] !== true) {\n warnForUnmatchedText(textInstance, text);\n }\n}\nfunction didNotHydrateContainerInstance(parentContainer, instance) {\n {\n if (instance.nodeType === ELEMENT_NODE) {\n warnForDeletedHydratableElement(parentContainer, instance);\n } else if (instance.nodeType === COMMENT_NODE) ; else {\n warnForDeletedHydratableText(parentContainer, instance);\n }\n }\n}\nfunction didNotHydrateInstance(parentType, parentProps, parentInstance, instance) {\n if ( parentProps[SUPPRESS_HYDRATION_WARNING$1] !== true) {\n if (instance.nodeType === ELEMENT_NODE) {\n warnForDeletedHydratableElement(parentInstance, instance);\n } else if (instance.nodeType === COMMENT_NODE) ; else {\n warnForDeletedHydratableText(parentInstance, instance);\n }\n }\n}\nfunction didNotFindHydratableContainerInstance(parentContainer, type, props) {\n {\n warnForInsertedHydratedElement(parentContainer, type);\n }\n}\nfunction didNotFindHydratableContainerTextInstance(parentContainer, text) {\n {\n warnForInsertedHydratedText(parentContainer, text);\n }\n}\nfunction didNotFindHydratableInstance(parentType, parentProps, parentInstance, type, props) {\n if ( parentProps[SUPPRESS_HYDRATION_WARNING$1] !== true) {\n warnForInsertedHydratedElement(parentInstance, type);\n }\n}\nfunction didNotFindHydratableTextInstance(parentType, parentProps, parentInstance, text) {\n if ( parentProps[SUPPRESS_HYDRATION_WARNING$1] !== true) {\n warnForInsertedHydratedText(parentInstance, text);\n }\n}\nfunction didNotFindHydratableSuspenseInstance(parentType, parentProps, parentInstance) {\n if ( parentProps[SUPPRESS_HYDRATION_WARNING$1] !== true) ;\n}\n\nvar randomKey = Math.random().toString(36).slice(2);\nvar internalInstanceKey = '__reactInternalInstance$' + randomKey;\nvar internalEventHandlersKey = '__reactEventHandlers$' + randomKey;\nvar internalContainerInstanceKey = '__reactContainere$' + randomKey;\nfunction precacheFiberNode(hostInst, node) {\n node[internalInstanceKey] = hostInst;\n}\nfunction markContainerAsRoot(hostRoot, node) {\n node[internalContainerInstanceKey] = hostRoot;\n}\nfunction unmarkContainerAsRoot(node) {\n node[internalContainerInstanceKey] = null;\n}\nfunction isContainerMarkedAsRoot(node) {\n return !!node[internalContainerInstanceKey];\n} // Given a DOM node, return the closest HostComponent or HostText fiber ancestor.\n// If the target node is part of a hydrated or not yet rendered subtree, then\n// this may also return a SuspenseComponent or HostRoot to indicate that.\n// Conceptually the HostRoot fiber is a child of the Container node. So if you\n// pass the Container node as the targetNode, you will not actually get the\n// HostRoot back. To get to the HostRoot, you need to pass a child of it.\n// The same thing applies to Suspense boundaries.\n\nfunction getClosestInstanceFromNode(targetNode) {\n var targetInst = targetNode[internalInstanceKey];\n\n if (targetInst) {\n // Don't return HostRoot or SuspenseComponent here.\n return targetInst;\n } // If the direct event target isn't a React owned DOM node, we need to look\n // to see if one of its parents is a React owned DOM node.\n\n\n var parentNode = targetNode.parentNode;\n\n while (parentNode) {\n // We'll check if this is a container root that could include\n // React nodes in the future. We need to check this first because\n // if we're a child of a dehydrated container, we need to first\n // find that inner container before moving on to finding the parent\n // instance. Note that we don't check this field on the targetNode\n // itself because the fibers are conceptually between the container\n // node and the first child. It isn't surrounding the container node.\n // If it's not a container, we check if it's an instance.\n targetInst = parentNode[internalContainerInstanceKey] || parentNode[internalInstanceKey];\n\n if (targetInst) {\n // Since this wasn't the direct target of the event, we might have\n // stepped past dehydrated DOM nodes to get here. However they could\n // also have been non-React nodes. We need to answer which one.\n // If we the instance doesn't have any children, then there can't be\n // a nested suspense boundary within it. So we can use this as a fast\n // bailout. Most of the time, when people add non-React children to\n // the tree, it is using a ref to a child-less DOM node.\n // Normally we'd only need to check one of the fibers because if it\n // has ever gone from having children to deleting them or vice versa\n // it would have deleted the dehydrated boundary nested inside already.\n // However, since the HostRoot starts out with an alternate it might\n // have one on the alternate so we need to check in case this was a\n // root.\n var alternate = targetInst.alternate;\n\n if (targetInst.child !== null || alternate !== null && alternate.child !== null) {\n // Next we need to figure out if the node that skipped past is\n // nested within a dehydrated boundary and if so, which one.\n var suspenseInstance = getParentSuspenseInstance(targetNode);\n\n while (suspenseInstance !== null) {\n // We found a suspense instance. That means that we haven't\n // hydrated it yet. Even though we leave the comments in the\n // DOM after hydrating, and there are boundaries in the DOM\n // that could already be hydrated, we wouldn't have found them\n // through this pass since if the target is hydrated it would\n // have had an internalInstanceKey on it.\n // Let's get the fiber associated with the SuspenseComponent\n // as the deepest instance.\n var targetSuspenseInst = suspenseInstance[internalInstanceKey];\n\n if (targetSuspenseInst) {\n return targetSuspenseInst;\n } // If we don't find a Fiber on the comment, it might be because\n // we haven't gotten to hydrate it yet. There might still be a\n // parent boundary that hasn't above this one so we need to find\n // the outer most that is known.\n\n\n suspenseInstance = getParentSuspenseInstance(suspenseInstance); // If we don't find one, then that should mean that the parent\n // host component also hasn't hydrated yet. We can return it\n // below since it will bail out on the isMounted check later.\n }\n }\n\n return targetInst;\n }\n\n targetNode = parentNode;\n parentNode = targetNode.parentNode;\n }\n\n return null;\n}\n/**\n * Given a DOM node, return the ReactDOMComponent or ReactDOMTextComponent\n * instance, or null if the node was not rendered by this React.\n */\n\nfunction getInstanceFromNode$1(node) {\n var inst = node[internalInstanceKey] || node[internalContainerInstanceKey];\n\n if (inst) {\n if (inst.tag === HostComponent || inst.tag === HostText || inst.tag === SuspenseComponent || inst.tag === HostRoot) {\n return inst;\n } else {\n return null;\n }\n }\n\n return null;\n}\n/**\n * Given a ReactDOMComponent or ReactDOMTextComponent, return the corresponding\n * DOM node.\n */\n\nfunction getNodeFromInstance$1(inst) {\n if (inst.tag === HostComponent || inst.tag === HostText) {\n // In Fiber this, is just the state node right now. We assume it will be\n // a host component or host text.\n return inst.stateNode;\n } // Without this first invariant, passing a non-DOM-component triggers the next\n // invariant for a missing parent, which is super confusing.\n\n\n {\n {\n throw Error( \"getNodeFromInstance: Invalid argument.\" );\n }\n }\n}\nfunction getFiberCurrentPropsFromNode$1(node) {\n return node[internalEventHandlersKey] || null;\n}\nfunction updateFiberProps(node, props) {\n node[internalEventHandlersKey] = props;\n}\n\nfunction getParent(inst) {\n do {\n inst = inst.return; // TODO: If this is a HostRoot we might want to bail out.\n // That is depending on if we want nested subtrees (layers) to bubble\n // events to their parent. We could also go through parentNode on the\n // host node but that wouldn't work for React Native and doesn't let us\n // do the portal feature.\n } while (inst && inst.tag !== HostComponent);\n\n if (inst) {\n return inst;\n }\n\n return null;\n}\n/**\n * Return the lowest common ancestor of A and B, or null if they are in\n * different trees.\n */\n\n\nfunction getLowestCommonAncestor(instA, instB) {\n var depthA = 0;\n\n for (var tempA = instA; tempA; tempA = getParent(tempA)) {\n depthA++;\n }\n\n var depthB = 0;\n\n for (var tempB = instB; tempB; tempB = getParent(tempB)) {\n depthB++;\n } // If A is deeper, crawl up.\n\n\n while (depthA - depthB > 0) {\n instA = getParent(instA);\n depthA--;\n } // If B is deeper, crawl up.\n\n\n while (depthB - depthA > 0) {\n instB = getParent(instB);\n depthB--;\n } // Walk in lockstep until we find a match.\n\n\n var depth = depthA;\n\n while (depth--) {\n if (instA === instB || instA === instB.alternate) {\n return instA;\n }\n\n instA = getParent(instA);\n instB = getParent(instB);\n }\n\n return null;\n}\n/**\n * Simulates the traversal of a two-phase, capture/bubble event dispatch.\n */\n\nfunction traverseTwoPhase(inst, fn, arg) {\n var path = [];\n\n while (inst) {\n path.push(inst);\n inst = getParent(inst);\n }\n\n var i;\n\n for (i = path.length; i-- > 0;) {\n fn(path[i], 'captured', arg);\n }\n\n for (i = 0; i < path.length; i++) {\n fn(path[i], 'bubbled', arg);\n }\n}\n/**\n * Traverses the ID hierarchy and invokes the supplied `cb` on any IDs that\n * should would receive a `mouseEnter` or `mouseLeave` event.\n *\n * Does not invoke the callback on the nearest common ancestor because nothing\n * \"entered\" or \"left\" that element.\n */\n\nfunction traverseEnterLeave(from, to, fn, argFrom, argTo) {\n var common = from && to ? getLowestCommonAncestor(from, to) : null;\n var pathFrom = [];\n\n while (true) {\n if (!from) {\n break;\n }\n\n if (from === common) {\n break;\n }\n\n var alternate = from.alternate;\n\n if (alternate !== null && alternate === common) {\n break;\n }\n\n pathFrom.push(from);\n from = getParent(from);\n }\n\n var pathTo = [];\n\n while (true) {\n if (!to) {\n break;\n }\n\n if (to === common) {\n break;\n }\n\n var _alternate = to.alternate;\n\n if (_alternate !== null && _alternate === common) {\n break;\n }\n\n pathTo.push(to);\n to = getParent(to);\n }\n\n for (var i = 0; i < pathFrom.length; i++) {\n fn(pathFrom[i], 'bubbled', argFrom);\n }\n\n for (var _i = pathTo.length; _i-- > 0;) {\n fn(pathTo[_i], 'captured', argTo);\n }\n}\n\nfunction isInteractive(tag) {\n return tag === 'button' || tag === 'input' || tag === 'select' || tag === 'textarea';\n}\n\nfunction shouldPreventMouseEvent(name, type, props) {\n switch (name) {\n case 'onClick':\n case 'onClickCapture':\n case 'onDoubleClick':\n case 'onDoubleClickCapture':\n case 'onMouseDown':\n case 'onMouseDownCapture':\n case 'onMouseMove':\n case 'onMouseMoveCapture':\n case 'onMouseUp':\n case 'onMouseUpCapture':\n case 'onMouseEnter':\n return !!(props.disabled && isInteractive(type));\n\n default:\n return false;\n }\n}\n/**\n * @param {object} inst The instance, which is the source of events.\n * @param {string} registrationName Name of listener (e.g. `onClick`).\n * @return {?function} The stored callback.\n */\n\n\nfunction getListener(inst, registrationName) {\n var listener; // TODO: shouldPreventMouseEvent is DOM-specific and definitely should not\n // live here; needs to be moved to a better place soon\n\n var stateNode = inst.stateNode;\n\n if (!stateNode) {\n // Work in progress (ex: onload events in incremental mode).\n return null;\n }\n\n var props = getFiberCurrentPropsFromNode(stateNode);\n\n if (!props) {\n // Work in progress.\n return null;\n }\n\n listener = props[registrationName];\n\n if (shouldPreventMouseEvent(registrationName, inst.type, props)) {\n return null;\n }\n\n if (!(!listener || typeof listener === 'function')) {\n {\n throw Error( \"Expected `\" + registrationName + \"` listener to be a function, instead got a value of `\" + typeof listener + \"` type.\" );\n }\n }\n\n return listener;\n}\n\n/**\n * Some event types have a notion of different registration names for different\n * \"phases\" of propagation. This finds listeners by a given phase.\n */\nfunction listenerAtPhase(inst, event, propagationPhase) {\n var registrationName = event.dispatchConfig.phasedRegistrationNames[propagationPhase];\n return getListener(inst, registrationName);\n}\n/**\n * A small set of propagation patterns, each of which will accept a small amount\n * of information, and generate a set of \"dispatch ready event objects\" - which\n * are sets of events that have already been annotated with a set of dispatched\n * listener functions/ids. The API is designed this way to discourage these\n * propagation strategies from actually executing the dispatches, since we\n * always want to collect the entire set of dispatches before executing even a\n * single one.\n */\n\n/**\n * Tags a `SyntheticEvent` with dispatched listeners. Creating this function\n * here, allows us to not have to bind or create functions for each event.\n * Mutating the event's members allows us to not have to create a wrapping\n * \"dispatch\" object that pairs the event with the listener.\n */\n\n\nfunction accumulateDirectionalDispatches(inst, phase, event) {\n {\n if (!inst) {\n error('Dispatching inst must not be null');\n }\n }\n\n var listener = listenerAtPhase(inst, event, phase);\n\n if (listener) {\n event._dispatchListeners = accumulateInto(event._dispatchListeners, listener);\n event._dispatchInstances = accumulateInto(event._dispatchInstances, inst);\n }\n}\n/**\n * Collect dispatches (must be entirely collected before dispatching - see unit\n * tests). Lazily allocate the array to conserve memory. We must loop through\n * each event and perform the traversal for each one. We cannot perform a\n * single traversal for the entire collection of events because each event may\n * have a different target.\n */\n\n\nfunction accumulateTwoPhaseDispatchesSingle(event) {\n if (event && event.dispatchConfig.phasedRegistrationNames) {\n traverseTwoPhase(event._targetInst, accumulateDirectionalDispatches, event);\n }\n}\n/**\n * Accumulates without regard to direction, does not look for phased\n * registration names. Same as `accumulateDirectDispatchesSingle` but without\n * requiring that the `dispatchMarker` be the same as the dispatched ID.\n */\n\n\nfunction accumulateDispatches(inst, ignoredDirection, event) {\n if (inst && event && event.dispatchConfig.registrationName) {\n var registrationName = event.dispatchConfig.registrationName;\n var listener = getListener(inst, registrationName);\n\n if (listener) {\n event._dispatchListeners = accumulateInto(event._dispatchListeners, listener);\n event._dispatchInstances = accumulateInto(event._dispatchInstances, inst);\n }\n }\n}\n/**\n * Accumulates dispatches on an `SyntheticEvent`, but only for the\n * `dispatchMarker`.\n * @param {SyntheticEvent} event\n */\n\n\nfunction accumulateDirectDispatchesSingle(event) {\n if (event && event.dispatchConfig.registrationName) {\n accumulateDispatches(event._targetInst, null, event);\n }\n}\n\nfunction accumulateTwoPhaseDispatches(events) {\n forEachAccumulated(events, accumulateTwoPhaseDispatchesSingle);\n}\nfunction accumulateEnterLeaveDispatches(leave, enter, from, to) {\n traverseEnterLeave(from, to, accumulateDispatches, leave, enter);\n}\nfunction accumulateDirectDispatches(events) {\n forEachAccumulated(events, accumulateDirectDispatchesSingle);\n}\n\n/**\n * These variables store information about text content of a target node,\n * allowing comparison of content before and after a given event.\n *\n * Identify the node where selection currently begins, then observe\n * both its text content and its current position in the DOM. Since the\n * browser may natively replace the target node during composition, we can\n * use its position to find its replacement.\n *\n *\n */\nvar root = null;\nvar startText = null;\nvar fallbackText = null;\nfunction initialize(nativeEventTarget) {\n root = nativeEventTarget;\n startText = getText();\n return true;\n}\nfunction reset() {\n root = null;\n startText = null;\n fallbackText = null;\n}\nfunction getData() {\n if (fallbackText) {\n return fallbackText;\n }\n\n var start;\n var startValue = startText;\n var startLength = startValue.length;\n var end;\n var endValue = getText();\n var endLength = endValue.length;\n\n for (start = 0; start < startLength; start++) {\n if (startValue[start] !== endValue[start]) {\n break;\n }\n }\n\n var minEnd = startLength - start;\n\n for (end = 1; end <= minEnd; end++) {\n if (startValue[startLength - end] !== endValue[endLength - end]) {\n break;\n }\n }\n\n var sliceTail = end > 1 ? 1 - end : undefined;\n fallbackText = endValue.slice(start, sliceTail);\n return fallbackText;\n}\nfunction getText() {\n if ('value' in root) {\n return root.value;\n }\n\n return root.textContent;\n}\n\nvar EVENT_POOL_SIZE = 10;\n/**\n * @interface Event\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\n\nvar EventInterface = {\n type: null,\n target: null,\n // currentTarget is set when dispatching; no use in copying it here\n currentTarget: function () {\n return null;\n },\n eventPhase: null,\n bubbles: null,\n cancelable: null,\n timeStamp: function (event) {\n return event.timeStamp || Date.now();\n },\n defaultPrevented: null,\n isTrusted: null\n};\n\nfunction functionThatReturnsTrue() {\n return true;\n}\n\nfunction functionThatReturnsFalse() {\n return false;\n}\n/**\n * Synthetic events are dispatched by event plugins, typically in response to a\n * top-level event delegation handler.\n *\n * These systems should generally use pooling to reduce the frequency of garbage\n * collection. The system should check `isPersistent` to determine whether the\n * event should be released into the pool after being dispatched. Users that\n * need a persisted event should invoke `persist`.\n *\n * Synthetic events (and subclasses) implement the DOM Level 3 Events API by\n * normalizing browser quirks. Subclasses do not necessarily have to implement a\n * DOM interface; custom application-specific events can also subclass this.\n *\n * @param {object} dispatchConfig Configuration used to dispatch this event.\n * @param {*} targetInst Marker identifying the event target.\n * @param {object} nativeEvent Native browser event.\n * @param {DOMEventTarget} nativeEventTarget Target node.\n */\n\n\nfunction SyntheticEvent(dispatchConfig, targetInst, nativeEvent, nativeEventTarget) {\n {\n // these have a getter/setter for warnings\n delete this.nativeEvent;\n delete this.preventDefault;\n delete this.stopPropagation;\n delete this.isDefaultPrevented;\n delete this.isPropagationStopped;\n }\n\n this.dispatchConfig = dispatchConfig;\n this._targetInst = targetInst;\n this.nativeEvent = nativeEvent;\n var Interface = this.constructor.Interface;\n\n for (var propName in Interface) {\n if (!Interface.hasOwnProperty(propName)) {\n continue;\n }\n\n {\n delete this[propName]; // this has a getter/setter for warnings\n }\n\n var normalize = Interface[propName];\n\n if (normalize) {\n this[propName] = normalize(nativeEvent);\n } else {\n if (propName === 'target') {\n this.target = nativeEventTarget;\n } else {\n this[propName] = nativeEvent[propName];\n }\n }\n }\n\n var defaultPrevented = nativeEvent.defaultPrevented != null ? nativeEvent.defaultPrevented : nativeEvent.returnValue === false;\n\n if (defaultPrevented) {\n this.isDefaultPrevented = functionThatReturnsTrue;\n } else {\n this.isDefaultPrevented = functionThatReturnsFalse;\n }\n\n this.isPropagationStopped = functionThatReturnsFalse;\n return this;\n}\n\n_assign(SyntheticEvent.prototype, {\n preventDefault: function () {\n this.defaultPrevented = true;\n var event = this.nativeEvent;\n\n if (!event) {\n return;\n }\n\n if (event.preventDefault) {\n event.preventDefault();\n } else if (typeof event.returnValue !== 'unknown') {\n event.returnValue = false;\n }\n\n this.isDefaultPrevented = functionThatReturnsTrue;\n },\n stopPropagation: function () {\n var event = this.nativeEvent;\n\n if (!event) {\n return;\n }\n\n if (event.stopPropagation) {\n event.stopPropagation();\n } else if (typeof event.cancelBubble !== 'unknown') {\n // The ChangeEventPlugin registers a \"propertychange\" event for\n // IE. This event does not support bubbling or cancelling, and\n // any references to cancelBubble throw \"Member not found\". A\n // typeof check of \"unknown\" circumvents this issue (and is also\n // IE specific).\n event.cancelBubble = true;\n }\n\n this.isPropagationStopped = functionThatReturnsTrue;\n },\n\n /**\n * We release all dispatched `SyntheticEvent`s after each event loop, adding\n * them back into the pool. This allows a way to hold onto a reference that\n * won't be added back into the pool.\n */\n persist: function () {\n this.isPersistent = functionThatReturnsTrue;\n },\n\n /**\n * Checks if this event should be released back into the pool.\n *\n * @return {boolean} True if this should not be released, false otherwise.\n */\n isPersistent: functionThatReturnsFalse,\n\n /**\n * `PooledClass` looks for `destructor` on each instance it releases.\n */\n destructor: function () {\n var Interface = this.constructor.Interface;\n\n for (var propName in Interface) {\n {\n Object.defineProperty(this, propName, getPooledWarningPropertyDefinition(propName, Interface[propName]));\n }\n }\n\n this.dispatchConfig = null;\n this._targetInst = null;\n this.nativeEvent = null;\n this.isDefaultPrevented = functionThatReturnsFalse;\n this.isPropagationStopped = functionThatReturnsFalse;\n this._dispatchListeners = null;\n this._dispatchInstances = null;\n\n {\n Object.defineProperty(this, 'nativeEvent', getPooledWarningPropertyDefinition('nativeEvent', null));\n Object.defineProperty(this, 'isDefaultPrevented', getPooledWarningPropertyDefinition('isDefaultPrevented', functionThatReturnsFalse));\n Object.defineProperty(this, 'isPropagationStopped', getPooledWarningPropertyDefinition('isPropagationStopped', functionThatReturnsFalse));\n Object.defineProperty(this, 'preventDefault', getPooledWarningPropertyDefinition('preventDefault', function () {}));\n Object.defineProperty(this, 'stopPropagation', getPooledWarningPropertyDefinition('stopPropagation', function () {}));\n }\n }\n});\n\nSyntheticEvent.Interface = EventInterface;\n/**\n * Helper to reduce boilerplate when creating subclasses.\n */\n\nSyntheticEvent.extend = function (Interface) {\n var Super = this;\n\n var E = function () {};\n\n E.prototype = Super.prototype;\n var prototype = new E();\n\n function Class() {\n return Super.apply(this, arguments);\n }\n\n _assign(prototype, Class.prototype);\n\n Class.prototype = prototype;\n Class.prototype.constructor = Class;\n Class.Interface = _assign({}, Super.Interface, Interface);\n Class.extend = Super.extend;\n addEventPoolingTo(Class);\n return Class;\n};\n\naddEventPoolingTo(SyntheticEvent);\n/**\n * Helper to nullify syntheticEvent instance properties when destructing\n *\n * @param {String} propName\n * @param {?object} getVal\n * @return {object} defineProperty object\n */\n\nfunction getPooledWarningPropertyDefinition(propName, getVal) {\n var isFunction = typeof getVal === 'function';\n return {\n configurable: true,\n set: set,\n get: get\n };\n\n function set(val) {\n var action = isFunction ? 'setting the method' : 'setting the property';\n warn(action, 'This is effectively a no-op');\n return val;\n }\n\n function get() {\n var action = isFunction ? 'accessing the method' : 'accessing the property';\n var result = isFunction ? 'This is a no-op function' : 'This is set to null';\n warn(action, result);\n return getVal;\n }\n\n function warn(action, result) {\n {\n error(\"This synthetic event is reused for performance reasons. If you're seeing this, \" + \"you're %s `%s` on a released/nullified synthetic event. %s. \" + 'If you must keep the original synthetic event around, use event.persist(). ' + 'See https://fb.me/react-event-pooling for more information.', action, propName, result);\n }\n }\n}\n\nfunction getPooledEvent(dispatchConfig, targetInst, nativeEvent, nativeInst) {\n var EventConstructor = this;\n\n if (EventConstructor.eventPool.length) {\n var instance = EventConstructor.eventPool.pop();\n EventConstructor.call(instance, dispatchConfig, targetInst, nativeEvent, nativeInst);\n return instance;\n }\n\n return new EventConstructor(dispatchConfig, targetInst, nativeEvent, nativeInst);\n}\n\nfunction releasePooledEvent(event) {\n var EventConstructor = this;\n\n if (!(event instanceof EventConstructor)) {\n {\n throw Error( \"Trying to release an event instance into a pool of a different type.\" );\n }\n }\n\n event.destructor();\n\n if (EventConstructor.eventPool.length < EVENT_POOL_SIZE) {\n EventConstructor.eventPool.push(event);\n }\n}\n\nfunction addEventPoolingTo(EventConstructor) {\n EventConstructor.eventPool = [];\n EventConstructor.getPooled = getPooledEvent;\n EventConstructor.release = releasePooledEvent;\n}\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#events-compositionevents\n */\n\nvar SyntheticCompositionEvent = SyntheticEvent.extend({\n data: null\n});\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105\n * /#events-inputevents\n */\n\nvar SyntheticInputEvent = SyntheticEvent.extend({\n data: null\n});\n\nvar END_KEYCODES = [9, 13, 27, 32]; // Tab, Return, Esc, Space\n\nvar START_KEYCODE = 229;\nvar canUseCompositionEvent = canUseDOM && 'CompositionEvent' in window;\nvar documentMode = null;\n\nif (canUseDOM && 'documentMode' in document) {\n documentMode = document.documentMode;\n} // Webkit offers a very useful `textInput` event that can be used to\n// directly represent `beforeInput`. The IE `textinput` event is not as\n// useful, so we don't use it.\n\n\nvar canUseTextInputEvent = canUseDOM && 'TextEvent' in window && !documentMode; // In IE9+, we have access to composition events, but the data supplied\n// by the native compositionend event may be incorrect. Japanese ideographic\n// spaces, for instance (\\u3000) are not recorded correctly.\n\nvar useFallbackCompositionData = canUseDOM && (!canUseCompositionEvent || documentMode && documentMode > 8 && documentMode <= 11);\nvar SPACEBAR_CODE = 32;\nvar SPACEBAR_CHAR = String.fromCharCode(SPACEBAR_CODE); // Events and their corresponding property names.\n\nvar eventTypes = {\n beforeInput: {\n phasedRegistrationNames: {\n bubbled: 'onBeforeInput',\n captured: 'onBeforeInputCapture'\n },\n dependencies: [TOP_COMPOSITION_END, TOP_KEY_PRESS, TOP_TEXT_INPUT, TOP_PASTE]\n },\n compositionEnd: {\n phasedRegistrationNames: {\n bubbled: 'onCompositionEnd',\n captured: 'onCompositionEndCapture'\n },\n dependencies: [TOP_BLUR, TOP_COMPOSITION_END, TOP_KEY_DOWN, TOP_KEY_PRESS, TOP_KEY_UP, TOP_MOUSE_DOWN]\n },\n compositionStart: {\n phasedRegistrationNames: {\n bubbled: 'onCompositionStart',\n captured: 'onCompositionStartCapture'\n },\n dependencies: [TOP_BLUR, TOP_COMPOSITION_START, TOP_KEY_DOWN, TOP_KEY_PRESS, TOP_KEY_UP, TOP_MOUSE_DOWN]\n },\n compositionUpdate: {\n phasedRegistrationNames: {\n bubbled: 'onCompositionUpdate',\n captured: 'onCompositionUpdateCapture'\n },\n dependencies: [TOP_BLUR, TOP_COMPOSITION_UPDATE, TOP_KEY_DOWN, TOP_KEY_PRESS, TOP_KEY_UP, TOP_MOUSE_DOWN]\n }\n}; // Track whether we've ever handled a keypress on the space key.\n\nvar hasSpaceKeypress = false;\n/**\n * Return whether a native keypress event is assumed to be a command.\n * This is required because Firefox fires `keypress` events for key commands\n * (cut, copy, select-all, etc.) even though no character is inserted.\n */\n\nfunction isKeypressCommand(nativeEvent) {\n return (nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) && // ctrlKey && altKey is equivalent to AltGr, and is not a command.\n !(nativeEvent.ctrlKey && nativeEvent.altKey);\n}\n/**\n * Translate native top level events into event types.\n *\n * @param {string} topLevelType\n * @return {object}\n */\n\n\nfunction getCompositionEventType(topLevelType) {\n switch (topLevelType) {\n case TOP_COMPOSITION_START:\n return eventTypes.compositionStart;\n\n case TOP_COMPOSITION_END:\n return eventTypes.compositionEnd;\n\n case TOP_COMPOSITION_UPDATE:\n return eventTypes.compositionUpdate;\n }\n}\n/**\n * Does our fallback best-guess model think this event signifies that\n * composition has begun?\n *\n * @param {string} topLevelType\n * @param {object} nativeEvent\n * @return {boolean}\n */\n\n\nfunction isFallbackCompositionStart(topLevelType, nativeEvent) {\n return topLevelType === TOP_KEY_DOWN && nativeEvent.keyCode === START_KEYCODE;\n}\n/**\n * Does our fallback mode think that this event is the end of composition?\n *\n * @param {string} topLevelType\n * @param {object} nativeEvent\n * @return {boolean}\n */\n\n\nfunction isFallbackCompositionEnd(topLevelType, nativeEvent) {\n switch (topLevelType) {\n case TOP_KEY_UP:\n // Command keys insert or clear IME input.\n return END_KEYCODES.indexOf(nativeEvent.keyCode) !== -1;\n\n case TOP_KEY_DOWN:\n // Expect IME keyCode on each keydown. If we get any other\n // code we must have exited earlier.\n return nativeEvent.keyCode !== START_KEYCODE;\n\n case TOP_KEY_PRESS:\n case TOP_MOUSE_DOWN:\n case TOP_BLUR:\n // Events are not possible without cancelling IME.\n return true;\n\n default:\n return false;\n }\n}\n/**\n * Google Input Tools provides composition data via a CustomEvent,\n * with the `data` property populated in the `detail` object. If this\n * is available on the event object, use it. If not, this is a plain\n * composition event and we have nothing special to extract.\n *\n * @param {object} nativeEvent\n * @return {?string}\n */\n\n\nfunction getDataFromCustomEvent(nativeEvent) {\n var detail = nativeEvent.detail;\n\n if (typeof detail === 'object' && 'data' in detail) {\n return detail.data;\n }\n\n return null;\n}\n/**\n * Check if a composition event was triggered by Korean IME.\n * Our fallback mode does not work well with IE's Korean IME,\n * so just use native composition events when Korean IME is used.\n * Although CompositionEvent.locale property is deprecated,\n * it is available in IE, where our fallback mode is enabled.\n *\n * @param {object} nativeEvent\n * @return {boolean}\n */\n\n\nfunction isUsingKoreanIME(nativeEvent) {\n return nativeEvent.locale === 'ko';\n} // Track the current IME composition status, if any.\n\n\nvar isComposing = false;\n/**\n * @return {?object} A SyntheticCompositionEvent.\n */\n\nfunction extractCompositionEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n var eventType;\n var fallbackData;\n\n if (canUseCompositionEvent) {\n eventType = getCompositionEventType(topLevelType);\n } else if (!isComposing) {\n if (isFallbackCompositionStart(topLevelType, nativeEvent)) {\n eventType = eventTypes.compositionStart;\n }\n } else if (isFallbackCompositionEnd(topLevelType, nativeEvent)) {\n eventType = eventTypes.compositionEnd;\n }\n\n if (!eventType) {\n return null;\n }\n\n if (useFallbackCompositionData && !isUsingKoreanIME(nativeEvent)) {\n // The current composition is stored statically and must not be\n // overwritten while composition continues.\n if (!isComposing && eventType === eventTypes.compositionStart) {\n isComposing = initialize(nativeEventTarget);\n } else if (eventType === eventTypes.compositionEnd) {\n if (isComposing) {\n fallbackData = getData();\n }\n }\n }\n\n var event = SyntheticCompositionEvent.getPooled(eventType, targetInst, nativeEvent, nativeEventTarget);\n\n if (fallbackData) {\n // Inject data generated from fallback path into the synthetic event.\n // This matches the property of native CompositionEventInterface.\n event.data = fallbackData;\n } else {\n var customData = getDataFromCustomEvent(nativeEvent);\n\n if (customData !== null) {\n event.data = customData;\n }\n }\n\n accumulateTwoPhaseDispatches(event);\n return event;\n}\n/**\n * @param {TopLevelType} topLevelType Number from `TopLevelType`.\n * @param {object} nativeEvent Native browser event.\n * @return {?string} The string corresponding to this `beforeInput` event.\n */\n\n\nfunction getNativeBeforeInputChars(topLevelType, nativeEvent) {\n switch (topLevelType) {\n case TOP_COMPOSITION_END:\n return getDataFromCustomEvent(nativeEvent);\n\n case TOP_KEY_PRESS:\n /**\n * If native `textInput` events are available, our goal is to make\n * use of them. However, there is a special case: the spacebar key.\n * In Webkit, preventing default on a spacebar `textInput` event\n * cancels character insertion, but it *also* causes the browser\n * to fall back to its default spacebar behavior of scrolling the\n * page.\n *\n * Tracking at:\n * https://code.google.com/p/chromium/issues/detail?id=355103\n *\n * To avoid this issue, use the keypress event as if no `textInput`\n * event is available.\n */\n var which = nativeEvent.which;\n\n if (which !== SPACEBAR_CODE) {\n return null;\n }\n\n hasSpaceKeypress = true;\n return SPACEBAR_CHAR;\n\n case TOP_TEXT_INPUT:\n // Record the characters to be added to the DOM.\n var chars = nativeEvent.data; // If it's a spacebar character, assume that we have already handled\n // it at the keypress level and bail immediately. Android Chrome\n // doesn't give us keycodes, so we need to ignore it.\n\n if (chars === SPACEBAR_CHAR && hasSpaceKeypress) {\n return null;\n }\n\n return chars;\n\n default:\n // For other native event types, do nothing.\n return null;\n }\n}\n/**\n * For browsers that do not provide the `textInput` event, extract the\n * appropriate string to use for SyntheticInputEvent.\n *\n * @param {number} topLevelType Number from `TopLevelEventTypes`.\n * @param {object} nativeEvent Native browser event.\n * @return {?string} The fallback string for this `beforeInput` event.\n */\n\n\nfunction getFallbackBeforeInputChars(topLevelType, nativeEvent) {\n // If we are currently composing (IME) and using a fallback to do so,\n // try to extract the composed characters from the fallback object.\n // If composition event is available, we extract a string only at\n // compositionevent, otherwise extract it at fallback events.\n if (isComposing) {\n if (topLevelType === TOP_COMPOSITION_END || !canUseCompositionEvent && isFallbackCompositionEnd(topLevelType, nativeEvent)) {\n var chars = getData();\n reset();\n isComposing = false;\n return chars;\n }\n\n return null;\n }\n\n switch (topLevelType) {\n case TOP_PASTE:\n // If a paste event occurs after a keypress, throw out the input\n // chars. Paste events should not lead to BeforeInput events.\n return null;\n\n case TOP_KEY_PRESS:\n /**\n * As of v27, Firefox may fire keypress events even when no character\n * will be inserted. A few possibilities:\n *\n * - `which` is `0`. Arrow keys, Esc key, etc.\n *\n * - `which` is the pressed key code, but no char is available.\n * Ex: 'AltGr + d` in Polish. There is no modified character for\n * this key combination and no character is inserted into the\n * document, but FF fires the keypress for char code `100` anyway.\n * No `input` event will occur.\n *\n * - `which` is the pressed key code, but a command combination is\n * being used. Ex: `Cmd+C`. No character is inserted, and no\n * `input` event will occur.\n */\n if (!isKeypressCommand(nativeEvent)) {\n // IE fires the `keypress` event when a user types an emoji via\n // Touch keyboard of Windows. In such a case, the `char` property\n // holds an emoji character like `\\uD83D\\uDE0A`. Because its length\n // is 2, the property `which` does not represent an emoji correctly.\n // In such a case, we directly return the `char` property instead of\n // using `which`.\n if (nativeEvent.char && nativeEvent.char.length > 1) {\n return nativeEvent.char;\n } else if (nativeEvent.which) {\n return String.fromCharCode(nativeEvent.which);\n }\n }\n\n return null;\n\n case TOP_COMPOSITION_END:\n return useFallbackCompositionData && !isUsingKoreanIME(nativeEvent) ? null : nativeEvent.data;\n\n default:\n return null;\n }\n}\n/**\n * Extract a SyntheticInputEvent for `beforeInput`, based on either native\n * `textInput` or fallback behavior.\n *\n * @return {?object} A SyntheticInputEvent.\n */\n\n\nfunction extractBeforeInputEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget) {\n var chars;\n\n if (canUseTextInputEvent) {\n chars = getNativeBeforeInputChars(topLevelType, nativeEvent);\n } else {\n chars = getFallbackBeforeInputChars(topLevelType, nativeEvent);\n } // If no characters are being inserted, no BeforeInput event should\n // be fired.\n\n\n if (!chars) {\n return null;\n }\n\n var event = SyntheticInputEvent.getPooled(eventTypes.beforeInput, targetInst, nativeEvent, nativeEventTarget);\n event.data = chars;\n accumulateTwoPhaseDispatches(event);\n return event;\n}\n/**\n * Create an `onBeforeInput` event to match\n * http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105/#events-inputevents.\n *\n * This event plugin is based on the native `textInput` event\n * available in Chrome, Safari, Opera, and IE. This event fires after\n * `onKeyPress` and `onCompositionEnd`, but before `onInput`.\n *\n * `beforeInput` is spec'd but not implemented in any browsers, and\n * the `input` event does not provide any useful information about what has\n * actually been added, contrary to the spec. Thus, `textInput` is the best\n * available event to identify the characters that have actually been inserted\n * into the target node.\n *\n * This plugin is also responsible for emitting `composition` events, thus\n * allowing us to share composition fallback code for both `beforeInput` and\n * `composition` event types.\n */\n\n\nvar BeforeInputEventPlugin = {\n eventTypes: eventTypes,\n extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags) {\n var composition = extractCompositionEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget);\n var beforeInput = extractBeforeInputEvent(topLevelType, targetInst, nativeEvent, nativeEventTarget);\n\n if (composition === null) {\n return beforeInput;\n }\n\n if (beforeInput === null) {\n return composition;\n }\n\n return [composition, beforeInput];\n }\n};\n\n/**\n * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary\n */\nvar supportedInputTypes = {\n color: true,\n date: true,\n datetime: true,\n 'datetime-local': true,\n email: true,\n month: true,\n number: true,\n password: true,\n range: true,\n search: true,\n tel: true,\n text: true,\n time: true,\n url: true,\n week: true\n};\n\nfunction isTextInputElement(elem) {\n var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n\n if (nodeName === 'input') {\n return !!supportedInputTypes[elem.type];\n }\n\n if (nodeName === 'textarea') {\n return true;\n }\n\n return false;\n}\n\nvar eventTypes$1 = {\n change: {\n phasedRegistrationNames: {\n bubbled: 'onChange',\n captured: 'onChangeCapture'\n },\n dependencies: [TOP_BLUR, TOP_CHANGE, TOP_CLICK, TOP_FOCUS, TOP_INPUT, TOP_KEY_DOWN, TOP_KEY_UP, TOP_SELECTION_CHANGE]\n }\n};\n\nfunction createAndAccumulateChangeEvent(inst, nativeEvent, target) {\n var event = SyntheticEvent.getPooled(eventTypes$1.change, inst, nativeEvent, target);\n event.type = 'change'; // Flag this event loop as needing state restore.\n\n enqueueStateRestore(target);\n accumulateTwoPhaseDispatches(event);\n return event;\n}\n/**\n * For IE shims\n */\n\n\nvar activeElement = null;\nvar activeElementInst = null;\n/**\n * SECTION: handle `change` event\n */\n\nfunction shouldUseChangeEvent(elem) {\n var nodeName = elem.nodeName && elem.nodeName.toLowerCase();\n return nodeName === 'select' || nodeName === 'input' && elem.type === 'file';\n}\n\nfunction manualDispatchChangeEvent(nativeEvent) {\n var event = createAndAccumulateChangeEvent(activeElementInst, nativeEvent, getEventTarget(nativeEvent)); // If change and propertychange bubbled, we'd just bind to it like all the\n // other events and have it go through ReactBrowserEventEmitter. Since it\n // doesn't, we manually listen for the events and so we have to enqueue and\n // process the abstract event manually.\n //\n // Batching is necessary here in order to ensure that all event handlers run\n // before the next rerender (including event handlers attached to ancestor\n // elements instead of directly on the input). Without this, controlled\n // components don't work properly in conjunction with event bubbling because\n // the component is rerendered and the value reverted before all the event\n // handlers can run. See https://github.com/facebook/react/issues/708.\n\n batchedUpdates(runEventInBatch, event);\n}\n\nfunction runEventInBatch(event) {\n runEventsInBatch(event);\n}\n\nfunction getInstIfValueChanged(targetInst) {\n var targetNode = getNodeFromInstance$1(targetInst);\n\n if (updateValueIfChanged(targetNode)) {\n return targetInst;\n }\n}\n\nfunction getTargetInstForChangeEvent(topLevelType, targetInst) {\n if (topLevelType === TOP_CHANGE) {\n return targetInst;\n }\n}\n/**\n * SECTION: handle `input` event\n */\n\n\nvar isInputEventSupported = false;\n\nif (canUseDOM) {\n // IE9 claims to support the input event but fails to trigger it when\n // deleting text, so we ignore its input events.\n isInputEventSupported = isEventSupported('input') && (!document.documentMode || document.documentMode > 9);\n}\n/**\n * (For IE <=9) Starts tracking propertychange events on the passed-in element\n * and override the value property so that we can distinguish user events from\n * value changes in JS.\n */\n\n\nfunction startWatchingForValueChange(target, targetInst) {\n activeElement = target;\n activeElementInst = targetInst;\n activeElement.attachEvent('onpropertychange', handlePropertyChange);\n}\n/**\n * (For IE <=9) Removes the event listeners from the currently-tracked element,\n * if any exists.\n */\n\n\nfunction stopWatchingForValueChange() {\n if (!activeElement) {\n return;\n }\n\n activeElement.detachEvent('onpropertychange', handlePropertyChange);\n activeElement = null;\n activeElementInst = null;\n}\n/**\n * (For IE <=9) Handles a propertychange event, sending a `change` event if\n * the value of the active element has changed.\n */\n\n\nfunction handlePropertyChange(nativeEvent) {\n if (nativeEvent.propertyName !== 'value') {\n return;\n }\n\n if (getInstIfValueChanged(activeElementInst)) {\n manualDispatchChangeEvent(nativeEvent);\n }\n}\n\nfunction handleEventsForInputEventPolyfill(topLevelType, target, targetInst) {\n if (topLevelType === TOP_FOCUS) {\n // In IE9, propertychange fires for most input events but is buggy and\n // doesn't fire when text is deleted, but conveniently, selectionchange\n // appears to fire in all of the remaining cases so we catch those and\n // forward the event if the value has changed\n // In either case, we don't want to call the event handler if the value\n // is changed from JS so we redefine a setter for `.value` that updates\n // our activeElementValue variable, allowing us to ignore those changes\n //\n // stopWatching() should be a noop here but we call it just in case we\n // missed a blur event somehow.\n stopWatchingForValueChange();\n startWatchingForValueChange(target, targetInst);\n } else if (topLevelType === TOP_BLUR) {\n stopWatchingForValueChange();\n }\n} // For IE8 and IE9.\n\n\nfunction getTargetInstForInputEventPolyfill(topLevelType, targetInst) {\n if (topLevelType === TOP_SELECTION_CHANGE || topLevelType === TOP_KEY_UP || topLevelType === TOP_KEY_DOWN) {\n // On the selectionchange event, the target is just document which isn't\n // helpful for us so just check activeElement instead.\n //\n // 99% of the time, keydown and keyup aren't necessary. IE8 fails to fire\n // propertychange on the first input event after setting `value` from a\n // script and fires only keydown, keypress, keyup. Catching keyup usually\n // gets it and catching keydown lets us fire an event for the first\n // keystroke if user does a key repeat (it'll be a little delayed: right\n // before the second keystroke). Other input methods (e.g., paste) seem to\n // fire selectionchange normally.\n return getInstIfValueChanged(activeElementInst);\n }\n}\n/**\n * SECTION: handle `click` event\n */\n\n\nfunction shouldUseClickEvent(elem) {\n // Use the `click` event to detect changes to checkbox and radio inputs.\n // This approach works across all browsers, whereas `change` does not fire\n // until `blur` in IE8.\n var nodeName = elem.nodeName;\n return nodeName && nodeName.toLowerCase() === 'input' && (elem.type === 'checkbox' || elem.type === 'radio');\n}\n\nfunction getTargetInstForClickEvent(topLevelType, targetInst) {\n if (topLevelType === TOP_CLICK) {\n return getInstIfValueChanged(targetInst);\n }\n}\n\nfunction getTargetInstForInputOrChangeEvent(topLevelType, targetInst) {\n if (topLevelType === TOP_INPUT || topLevelType === TOP_CHANGE) {\n return getInstIfValueChanged(targetInst);\n }\n}\n\nfunction handleControlledInputBlur(node) {\n var state = node._wrapperState;\n\n if (!state || !state.controlled || node.type !== 'number') {\n return;\n }\n\n {\n // If controlled, assign the value attribute to the current value on blur\n setDefaultValue(node, 'number', node.value);\n }\n}\n/**\n * This plugin creates an `onChange` event that normalizes change events\n * across form elements. This event fires at a time when it's possible to\n * change the element's value without seeing a flicker.\n *\n * Supported elements are:\n * - input (see `isTextInputElement`)\n * - textarea\n * - select\n */\n\n\nvar ChangeEventPlugin = {\n eventTypes: eventTypes$1,\n _isInputEventSupported: isInputEventSupported,\n extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags) {\n var targetNode = targetInst ? getNodeFromInstance$1(targetInst) : window;\n var getTargetInstFunc, handleEventFunc;\n\n if (shouldUseChangeEvent(targetNode)) {\n getTargetInstFunc = getTargetInstForChangeEvent;\n } else if (isTextInputElement(targetNode)) {\n if (isInputEventSupported) {\n getTargetInstFunc = getTargetInstForInputOrChangeEvent;\n } else {\n getTargetInstFunc = getTargetInstForInputEventPolyfill;\n handleEventFunc = handleEventsForInputEventPolyfill;\n }\n } else if (shouldUseClickEvent(targetNode)) {\n getTargetInstFunc = getTargetInstForClickEvent;\n }\n\n if (getTargetInstFunc) {\n var inst = getTargetInstFunc(topLevelType, targetInst);\n\n if (inst) {\n var event = createAndAccumulateChangeEvent(inst, nativeEvent, nativeEventTarget);\n return event;\n }\n }\n\n if (handleEventFunc) {\n handleEventFunc(topLevelType, targetNode, targetInst);\n } // When blurring, set the value attribute for number inputs\n\n\n if (topLevelType === TOP_BLUR) {\n handleControlledInputBlur(targetNode);\n }\n }\n};\n\nvar SyntheticUIEvent = SyntheticEvent.extend({\n view: null,\n detail: null\n});\n\n/**\n * Translation from modifier key to the associated property in the event.\n * @see http://www.w3.org/TR/DOM-Level-3-Events/#keys-Modifiers\n */\nvar modifierKeyToProp = {\n Alt: 'altKey',\n Control: 'ctrlKey',\n Meta: 'metaKey',\n Shift: 'shiftKey'\n}; // Older browsers (Safari <= 10, iOS Safari <= 10.2) do not support\n// getModifierState. If getModifierState is not supported, we map it to a set of\n// modifier keys exposed by the event. In this case, Lock-keys are not supported.\n\nfunction modifierStateGetter(keyArg) {\n var syntheticEvent = this;\n var nativeEvent = syntheticEvent.nativeEvent;\n\n if (nativeEvent.getModifierState) {\n return nativeEvent.getModifierState(keyArg);\n }\n\n var keyProp = modifierKeyToProp[keyArg];\n return keyProp ? !!nativeEvent[keyProp] : false;\n}\n\nfunction getEventModifierState(nativeEvent) {\n return modifierStateGetter;\n}\n\nvar previousScreenX = 0;\nvar previousScreenY = 0; // Use flags to signal movementX/Y has already been set\n\nvar isMovementXSet = false;\nvar isMovementYSet = false;\n/**\n * @interface MouseEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\n\nvar SyntheticMouseEvent = SyntheticUIEvent.extend({\n screenX: null,\n screenY: null,\n clientX: null,\n clientY: null,\n pageX: null,\n pageY: null,\n ctrlKey: null,\n shiftKey: null,\n altKey: null,\n metaKey: null,\n getModifierState: getEventModifierState,\n button: null,\n buttons: null,\n relatedTarget: function (event) {\n return event.relatedTarget || (event.fromElement === event.srcElement ? event.toElement : event.fromElement);\n },\n movementX: function (event) {\n if ('movementX' in event) {\n return event.movementX;\n }\n\n var screenX = previousScreenX;\n previousScreenX = event.screenX;\n\n if (!isMovementXSet) {\n isMovementXSet = true;\n return 0;\n }\n\n return event.type === 'mousemove' ? event.screenX - screenX : 0;\n },\n movementY: function (event) {\n if ('movementY' in event) {\n return event.movementY;\n }\n\n var screenY = previousScreenY;\n previousScreenY = event.screenY;\n\n if (!isMovementYSet) {\n isMovementYSet = true;\n return 0;\n }\n\n return event.type === 'mousemove' ? event.screenY - screenY : 0;\n }\n});\n\n/**\n * @interface PointerEvent\n * @see http://www.w3.org/TR/pointerevents/\n */\n\nvar SyntheticPointerEvent = SyntheticMouseEvent.extend({\n pointerId: null,\n width: null,\n height: null,\n pressure: null,\n tangentialPressure: null,\n tiltX: null,\n tiltY: null,\n twist: null,\n pointerType: null,\n isPrimary: null\n});\n\nvar eventTypes$2 = {\n mouseEnter: {\n registrationName: 'onMouseEnter',\n dependencies: [TOP_MOUSE_OUT, TOP_MOUSE_OVER]\n },\n mouseLeave: {\n registrationName: 'onMouseLeave',\n dependencies: [TOP_MOUSE_OUT, TOP_MOUSE_OVER]\n },\n pointerEnter: {\n registrationName: 'onPointerEnter',\n dependencies: [TOP_POINTER_OUT, TOP_POINTER_OVER]\n },\n pointerLeave: {\n registrationName: 'onPointerLeave',\n dependencies: [TOP_POINTER_OUT, TOP_POINTER_OVER]\n }\n};\nvar EnterLeaveEventPlugin = {\n eventTypes: eventTypes$2,\n\n /**\n * For almost every interaction we care about, there will be both a top-level\n * `mouseover` and `mouseout` event that occurs. Only use `mouseout` so that\n * we do not extract duplicate events. However, moving the mouse into the\n * browser from outside will not fire a `mouseout` event. In this case, we use\n * the `mouseover` top-level event.\n */\n extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags) {\n var isOverEvent = topLevelType === TOP_MOUSE_OVER || topLevelType === TOP_POINTER_OVER;\n var isOutEvent = topLevelType === TOP_MOUSE_OUT || topLevelType === TOP_POINTER_OUT;\n\n if (isOverEvent && (eventSystemFlags & IS_REPLAYED) === 0 && (nativeEvent.relatedTarget || nativeEvent.fromElement)) {\n // If this is an over event with a target, then we've already dispatched\n // the event in the out event of the other target. If this is replayed,\n // then it's because we couldn't dispatch against this target previously\n // so we have to do it now instead.\n return null;\n }\n\n if (!isOutEvent && !isOverEvent) {\n // Must not be a mouse or pointer in or out - ignoring.\n return null;\n }\n\n var win;\n\n if (nativeEventTarget.window === nativeEventTarget) {\n // `nativeEventTarget` is probably a window object.\n win = nativeEventTarget;\n } else {\n // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.\n var doc = nativeEventTarget.ownerDocument;\n\n if (doc) {\n win = doc.defaultView || doc.parentWindow;\n } else {\n win = window;\n }\n }\n\n var from;\n var to;\n\n if (isOutEvent) {\n from = targetInst;\n var related = nativeEvent.relatedTarget || nativeEvent.toElement;\n to = related ? getClosestInstanceFromNode(related) : null;\n\n if (to !== null) {\n var nearestMounted = getNearestMountedFiber(to);\n\n if (to !== nearestMounted || to.tag !== HostComponent && to.tag !== HostText) {\n to = null;\n }\n }\n } else {\n // Moving to a node from outside the window.\n from = null;\n to = targetInst;\n }\n\n if (from === to) {\n // Nothing pertains to our managed components.\n return null;\n }\n\n var eventInterface, leaveEventType, enterEventType, eventTypePrefix;\n\n if (topLevelType === TOP_MOUSE_OUT || topLevelType === TOP_MOUSE_OVER) {\n eventInterface = SyntheticMouseEvent;\n leaveEventType = eventTypes$2.mouseLeave;\n enterEventType = eventTypes$2.mouseEnter;\n eventTypePrefix = 'mouse';\n } else if (topLevelType === TOP_POINTER_OUT || topLevelType === TOP_POINTER_OVER) {\n eventInterface = SyntheticPointerEvent;\n leaveEventType = eventTypes$2.pointerLeave;\n enterEventType = eventTypes$2.pointerEnter;\n eventTypePrefix = 'pointer';\n }\n\n var fromNode = from == null ? win : getNodeFromInstance$1(from);\n var toNode = to == null ? win : getNodeFromInstance$1(to);\n var leave = eventInterface.getPooled(leaveEventType, from, nativeEvent, nativeEventTarget);\n leave.type = eventTypePrefix + 'leave';\n leave.target = fromNode;\n leave.relatedTarget = toNode;\n var enter = eventInterface.getPooled(enterEventType, to, nativeEvent, nativeEventTarget);\n enter.type = eventTypePrefix + 'enter';\n enter.target = toNode;\n enter.relatedTarget = fromNode;\n accumulateEnterLeaveDispatches(leave, enter, from, to); // If we are not processing the first ancestor, then we\n // should not process the same nativeEvent again, as we\n // will have already processed it in the first ancestor.\n\n if ((eventSystemFlags & IS_FIRST_ANCESTOR) === 0) {\n return [leave];\n }\n\n return [leave, enter];\n }\n};\n\n/**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\nfunction is(x, y) {\n return x === y && (x !== 0 || 1 / x === 1 / y) || x !== x && y !== y // eslint-disable-line no-self-compare\n ;\n}\n\nvar objectIs = typeof Object.is === 'function' ? Object.is : is;\n\nvar hasOwnProperty$2 = Object.prototype.hasOwnProperty;\n/**\n * Performs equality by iterating through keys on an object and returning false\n * when any key has values which are not strictly equal between the arguments.\n * Returns true when the values of all keys are strictly equal.\n */\n\nfunction shallowEqual(objA, objB) {\n if (objectIs(objA, objB)) {\n return true;\n }\n\n if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {\n return false;\n }\n\n var keysA = Object.keys(objA);\n var keysB = Object.keys(objB);\n\n if (keysA.length !== keysB.length) {\n return false;\n } // Test for A's keys different from B.\n\n\n for (var i = 0; i < keysA.length; i++) {\n if (!hasOwnProperty$2.call(objB, keysA[i]) || !objectIs(objA[keysA[i]], objB[keysA[i]])) {\n return false;\n }\n }\n\n return true;\n}\n\nvar skipSelectionChangeEvent = canUseDOM && 'documentMode' in document && document.documentMode <= 11;\nvar eventTypes$3 = {\n select: {\n phasedRegistrationNames: {\n bubbled: 'onSelect',\n captured: 'onSelectCapture'\n },\n dependencies: [TOP_BLUR, TOP_CONTEXT_MENU, TOP_DRAG_END, TOP_FOCUS, TOP_KEY_DOWN, TOP_KEY_UP, TOP_MOUSE_DOWN, TOP_MOUSE_UP, TOP_SELECTION_CHANGE]\n }\n};\nvar activeElement$1 = null;\nvar activeElementInst$1 = null;\nvar lastSelection = null;\nvar mouseDown = false;\n/**\n * Get an object which is a unique representation of the current selection.\n *\n * The return value will not be consistent across nodes or browsers, but\n * two identical selections on the same node will return identical objects.\n *\n * @param {DOMElement} node\n * @return {object}\n */\n\nfunction getSelection$1(node) {\n if ('selectionStart' in node && hasSelectionCapabilities(node)) {\n return {\n start: node.selectionStart,\n end: node.selectionEnd\n };\n } else {\n var win = node.ownerDocument && node.ownerDocument.defaultView || window;\n var selection = win.getSelection();\n return {\n anchorNode: selection.anchorNode,\n anchorOffset: selection.anchorOffset,\n focusNode: selection.focusNode,\n focusOffset: selection.focusOffset\n };\n }\n}\n/**\n * Get document associated with the event target.\n *\n * @param {object} nativeEventTarget\n * @return {Document}\n */\n\n\nfunction getEventTargetDocument(eventTarget) {\n return eventTarget.window === eventTarget ? eventTarget.document : eventTarget.nodeType === DOCUMENT_NODE ? eventTarget : eventTarget.ownerDocument;\n}\n/**\n * Poll selection to see whether it's changed.\n *\n * @param {object} nativeEvent\n * @param {object} nativeEventTarget\n * @return {?SyntheticEvent}\n */\n\n\nfunction constructSelectEvent(nativeEvent, nativeEventTarget) {\n // Ensure we have the right element, and that the user is not dragging a\n // selection (this matches native `select` event behavior). In HTML5, select\n // fires only on input and textarea thus if there's no focused element we\n // won't dispatch.\n var doc = getEventTargetDocument(nativeEventTarget);\n\n if (mouseDown || activeElement$1 == null || activeElement$1 !== getActiveElement(doc)) {\n return null;\n } // Only fire when selection has actually changed.\n\n\n var currentSelection = getSelection$1(activeElement$1);\n\n if (!lastSelection || !shallowEqual(lastSelection, currentSelection)) {\n lastSelection = currentSelection;\n var syntheticEvent = SyntheticEvent.getPooled(eventTypes$3.select, activeElementInst$1, nativeEvent, nativeEventTarget);\n syntheticEvent.type = 'select';\n syntheticEvent.target = activeElement$1;\n accumulateTwoPhaseDispatches(syntheticEvent);\n return syntheticEvent;\n }\n\n return null;\n}\n/**\n * This plugin creates an `onSelect` event that normalizes select events\n * across form elements.\n *\n * Supported elements are:\n * - input (see `isTextInputElement`)\n * - textarea\n * - contentEditable\n *\n * This differs from native browser implementations in the following ways:\n * - Fires on contentEditable fields as well as inputs.\n * - Fires for collapsed selection.\n * - Fires after user input.\n */\n\n\nvar SelectEventPlugin = {\n eventTypes: eventTypes$3,\n extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags, container) {\n var containerOrDoc = container || getEventTargetDocument(nativeEventTarget); // Track whether all listeners exists for this plugin. If none exist, we do\n // not extract events. See #3639.\n\n if (!containerOrDoc || !isListeningToAllDependencies('onSelect', containerOrDoc)) {\n return null;\n }\n\n var targetNode = targetInst ? getNodeFromInstance$1(targetInst) : window;\n\n switch (topLevelType) {\n // Track the input node that has focus.\n case TOP_FOCUS:\n if (isTextInputElement(targetNode) || targetNode.contentEditable === 'true') {\n activeElement$1 = targetNode;\n activeElementInst$1 = targetInst;\n lastSelection = null;\n }\n\n break;\n\n case TOP_BLUR:\n activeElement$1 = null;\n activeElementInst$1 = null;\n lastSelection = null;\n break;\n // Don't fire the event while the user is dragging. This matches the\n // semantics of the native select event.\n\n case TOP_MOUSE_DOWN:\n mouseDown = true;\n break;\n\n case TOP_CONTEXT_MENU:\n case TOP_MOUSE_UP:\n case TOP_DRAG_END:\n mouseDown = false;\n return constructSelectEvent(nativeEvent, nativeEventTarget);\n // Chrome and IE fire non-standard event when selection is changed (and\n // sometimes when it hasn't). IE's event fires out of order with respect\n // to key and input events on deletion, so we discard it.\n //\n // Firefox doesn't support selectionchange, so check selection status\n // after each key entry. The selection changes after keydown and before\n // keyup, but we check on keydown as well in the case of holding down a\n // key, when multiple keydown events are fired but only one keyup is.\n // This is also our approach for IE handling, for the reason above.\n\n case TOP_SELECTION_CHANGE:\n if (skipSelectionChangeEvent) {\n break;\n }\n\n // falls through\n\n case TOP_KEY_DOWN:\n case TOP_KEY_UP:\n return constructSelectEvent(nativeEvent, nativeEventTarget);\n }\n\n return null;\n }\n};\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/css3-animations/#AnimationEvent-interface\n * @see https://developer.mozilla.org/en-US/docs/Web/API/AnimationEvent\n */\n\nvar SyntheticAnimationEvent = SyntheticEvent.extend({\n animationName: null,\n elapsedTime: null,\n pseudoElement: null\n});\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/clipboard-apis/\n */\n\nvar SyntheticClipboardEvent = SyntheticEvent.extend({\n clipboardData: function (event) {\n return 'clipboardData' in event ? event.clipboardData : window.clipboardData;\n }\n});\n\n/**\n * @interface FocusEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\n\nvar SyntheticFocusEvent = SyntheticUIEvent.extend({\n relatedTarget: null\n});\n\n/**\n * `charCode` represents the actual \"character code\" and is safe to use with\n * `String.fromCharCode`. As such, only keys that correspond to printable\n * characters produce a valid `charCode`, the only exception to this is Enter.\n * The Tab-key is considered non-printable and does not have a `charCode`,\n * presumably because it does not produce a tab-character in browsers.\n *\n * @param {object} nativeEvent Native browser event.\n * @return {number} Normalized `charCode` property.\n */\nfunction getEventCharCode(nativeEvent) {\n var charCode;\n var keyCode = nativeEvent.keyCode;\n\n if ('charCode' in nativeEvent) {\n charCode = nativeEvent.charCode; // FF does not set `charCode` for the Enter-key, check against `keyCode`.\n\n if (charCode === 0 && keyCode === 13) {\n charCode = 13;\n }\n } else {\n // IE8 does not implement `charCode`, but `keyCode` has the correct value.\n charCode = keyCode;\n } // IE and Edge (on Windows) and Chrome / Safari (on Windows and Linux)\n // report Enter as charCode 10 when ctrl is pressed.\n\n\n if (charCode === 10) {\n charCode = 13;\n } // Some non-printable keys are reported in `charCode`/`keyCode`, discard them.\n // Must not discard the (non-)printable Enter-key.\n\n\n if (charCode >= 32 || charCode === 13) {\n return charCode;\n }\n\n return 0;\n}\n\n/**\n * Normalization of deprecated HTML5 `key` values\n * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names\n */\n\nvar normalizeKey = {\n Esc: 'Escape',\n Spacebar: ' ',\n Left: 'ArrowLeft',\n Up: 'ArrowUp',\n Right: 'ArrowRight',\n Down: 'ArrowDown',\n Del: 'Delete',\n Win: 'OS',\n Menu: 'ContextMenu',\n Apps: 'ContextMenu',\n Scroll: 'ScrollLock',\n MozPrintableKey: 'Unidentified'\n};\n/**\n * Translation from legacy `keyCode` to HTML5 `key`\n * Only special keys supported, all others depend on keyboard layout or browser\n * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names\n */\n\nvar translateToKey = {\n '8': 'Backspace',\n '9': 'Tab',\n '12': 'Clear',\n '13': 'Enter',\n '16': 'Shift',\n '17': 'Control',\n '18': 'Alt',\n '19': 'Pause',\n '20': 'CapsLock',\n '27': 'Escape',\n '32': ' ',\n '33': 'PageUp',\n '34': 'PageDown',\n '35': 'End',\n '36': 'Home',\n '37': 'ArrowLeft',\n '38': 'ArrowUp',\n '39': 'ArrowRight',\n '40': 'ArrowDown',\n '45': 'Insert',\n '46': 'Delete',\n '112': 'F1',\n '113': 'F2',\n '114': 'F3',\n '115': 'F4',\n '116': 'F5',\n '117': 'F6',\n '118': 'F7',\n '119': 'F8',\n '120': 'F9',\n '121': 'F10',\n '122': 'F11',\n '123': 'F12',\n '144': 'NumLock',\n '145': 'ScrollLock',\n '224': 'Meta'\n};\n/**\n * @param {object} nativeEvent Native browser event.\n * @return {string} Normalized `key` property.\n */\n\nfunction getEventKey(nativeEvent) {\n if (nativeEvent.key) {\n // Normalize inconsistent values reported by browsers due to\n // implementations of a working draft specification.\n // FireFox implements `key` but returns `MozPrintableKey` for all\n // printable characters (normalized to `Unidentified`), ignore it.\n var key = normalizeKey[nativeEvent.key] || nativeEvent.key;\n\n if (key !== 'Unidentified') {\n return key;\n }\n } // Browser does not implement `key`, polyfill as much of it as we can.\n\n\n if (nativeEvent.type === 'keypress') {\n var charCode = getEventCharCode(nativeEvent); // The enter-key is technically both printable and non-printable and can\n // thus be captured by `keypress`, no other non-printable key should.\n\n return charCode === 13 ? 'Enter' : String.fromCharCode(charCode);\n }\n\n if (nativeEvent.type === 'keydown' || nativeEvent.type === 'keyup') {\n // While user keyboard layout determines the actual meaning of each\n // `keyCode` value, almost all function keys have a universal value.\n return translateToKey[nativeEvent.keyCode] || 'Unidentified';\n }\n\n return '';\n}\n\n/**\n * @interface KeyboardEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\n\nvar SyntheticKeyboardEvent = SyntheticUIEvent.extend({\n key: getEventKey,\n location: null,\n ctrlKey: null,\n shiftKey: null,\n altKey: null,\n metaKey: null,\n repeat: null,\n locale: null,\n getModifierState: getEventModifierState,\n // Legacy Interface\n charCode: function (event) {\n // `charCode` is the result of a KeyPress event and represents the value of\n // the actual printable character.\n // KeyPress is deprecated, but its replacement is not yet final and not\n // implemented in any major browser. Only KeyPress has charCode.\n if (event.type === 'keypress') {\n return getEventCharCode(event);\n }\n\n return 0;\n },\n keyCode: function (event) {\n // `keyCode` is the result of a KeyDown/Up event and represents the value of\n // physical keyboard key.\n // The actual meaning of the value depends on the users' keyboard layout\n // which cannot be detected. Assuming that it is a US keyboard layout\n // provides a surprisingly accurate mapping for US and European users.\n // Due to this, it is left to the user to implement at this time.\n if (event.type === 'keydown' || event.type === 'keyup') {\n return event.keyCode;\n }\n\n return 0;\n },\n which: function (event) {\n // `which` is an alias for either `keyCode` or `charCode` depending on the\n // type of the event.\n if (event.type === 'keypress') {\n return getEventCharCode(event);\n }\n\n if (event.type === 'keydown' || event.type === 'keyup') {\n return event.keyCode;\n }\n\n return 0;\n }\n});\n\n/**\n * @interface DragEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\n\nvar SyntheticDragEvent = SyntheticMouseEvent.extend({\n dataTransfer: null\n});\n\n/**\n * @interface TouchEvent\n * @see http://www.w3.org/TR/touch-events/\n */\n\nvar SyntheticTouchEvent = SyntheticUIEvent.extend({\n touches: null,\n targetTouches: null,\n changedTouches: null,\n altKey: null,\n metaKey: null,\n ctrlKey: null,\n shiftKey: null,\n getModifierState: getEventModifierState\n});\n\n/**\n * @interface Event\n * @see http://www.w3.org/TR/2009/WD-css3-transitions-20090320/#transition-events-\n * @see https://developer.mozilla.org/en-US/docs/Web/API/TransitionEvent\n */\n\nvar SyntheticTransitionEvent = SyntheticEvent.extend({\n propertyName: null,\n elapsedTime: null,\n pseudoElement: null\n});\n\n/**\n * @interface WheelEvent\n * @see http://www.w3.org/TR/DOM-Level-3-Events/\n */\n\nvar SyntheticWheelEvent = SyntheticMouseEvent.extend({\n deltaX: function (event) {\n return 'deltaX' in event ? event.deltaX : // Fallback to `wheelDeltaX` for Webkit and normalize (right is positive).\n 'wheelDeltaX' in event ? -event.wheelDeltaX : 0;\n },\n deltaY: function (event) {\n return 'deltaY' in event ? event.deltaY : // Fallback to `wheelDeltaY` for Webkit and normalize (down is positive).\n 'wheelDeltaY' in event ? -event.wheelDeltaY : // Fallback to `wheelDelta` for IE<9 and normalize (down is positive).\n 'wheelDelta' in event ? -event.wheelDelta : 0;\n },\n deltaZ: null,\n // Browsers without \"deltaMode\" is reporting in raw wheel delta where one\n // notch on the scroll is always +/- 120, roughly equivalent to pixels.\n // A good approximation of DOM_DELTA_LINE (1) is 5% of viewport size or\n // ~40 pixels, for DOM_DELTA_SCREEN (2) it is 87.5% of viewport size.\n deltaMode: null\n});\n\nvar knownHTMLTopLevelTypes = [TOP_ABORT, TOP_CANCEL, TOP_CAN_PLAY, TOP_CAN_PLAY_THROUGH, TOP_CLOSE, TOP_DURATION_CHANGE, TOP_EMPTIED, TOP_ENCRYPTED, TOP_ENDED, TOP_ERROR, TOP_INPUT, TOP_INVALID, TOP_LOAD, TOP_LOADED_DATA, TOP_LOADED_METADATA, TOP_LOAD_START, TOP_PAUSE, TOP_PLAY, TOP_PLAYING, TOP_PROGRESS, TOP_RATE_CHANGE, TOP_RESET, TOP_SEEKED, TOP_SEEKING, TOP_STALLED, TOP_SUBMIT, TOP_SUSPEND, TOP_TIME_UPDATE, TOP_TOGGLE, TOP_VOLUME_CHANGE, TOP_WAITING];\nvar SimpleEventPlugin = {\n // simpleEventPluginEventTypes gets populated from\n // the DOMEventProperties module.\n eventTypes: simpleEventPluginEventTypes,\n extractEvents: function (topLevelType, targetInst, nativeEvent, nativeEventTarget, eventSystemFlags) {\n var dispatchConfig = topLevelEventsToDispatchConfig.get(topLevelType);\n\n if (!dispatchConfig) {\n return null;\n }\n\n var EventConstructor;\n\n switch (topLevelType) {\n case TOP_KEY_PRESS:\n // Firefox creates a keypress event for function keys too. This removes\n // the unwanted keypress events. Enter is however both printable and\n // non-printable. One would expect Tab to be as well (but it isn't).\n if (getEventCharCode(nativeEvent) === 0) {\n return null;\n }\n\n /* falls through */\n\n case TOP_KEY_DOWN:\n case TOP_KEY_UP:\n EventConstructor = SyntheticKeyboardEvent;\n break;\n\n case TOP_BLUR:\n case TOP_FOCUS:\n EventConstructor = SyntheticFocusEvent;\n break;\n\n case TOP_CLICK:\n // Firefox creates a click event on right mouse clicks. This removes the\n // unwanted click events.\n if (nativeEvent.button === 2) {\n return null;\n }\n\n /* falls through */\n\n case TOP_AUX_CLICK:\n case TOP_DOUBLE_CLICK:\n case TOP_MOUSE_DOWN:\n case TOP_MOUSE_MOVE:\n case TOP_MOUSE_UP: // TODO: Disabled elements should not respond to mouse events\n\n /* falls through */\n\n case TOP_MOUSE_OUT:\n case TOP_MOUSE_OVER:\n case TOP_CONTEXT_MENU:\n EventConstructor = SyntheticMouseEvent;\n break;\n\n case TOP_DRAG:\n case TOP_DRAG_END:\n case TOP_DRAG_ENTER:\n case TOP_DRAG_EXIT:\n case TOP_DRAG_LEAVE:\n case TOP_DRAG_OVER:\n case TOP_DRAG_START:\n case TOP_DROP:\n EventConstructor = SyntheticDragEvent;\n break;\n\n case TOP_TOUCH_CANCEL:\n case TOP_TOUCH_END:\n case TOP_TOUCH_MOVE:\n case TOP_TOUCH_START:\n EventConstructor = SyntheticTouchEvent;\n break;\n\n case TOP_ANIMATION_END:\n case TOP_ANIMATION_ITERATION:\n case TOP_ANIMATION_START:\n EventConstructor = SyntheticAnimationEvent;\n break;\n\n case TOP_TRANSITION_END:\n EventConstructor = SyntheticTransitionEvent;\n break;\n\n case TOP_SCROLL:\n EventConstructor = SyntheticUIEvent;\n break;\n\n case TOP_WHEEL:\n EventConstructor = SyntheticWheelEvent;\n break;\n\n case TOP_COPY:\n case TOP_CUT:\n case TOP_PASTE:\n EventConstructor = SyntheticClipboardEvent;\n break;\n\n case TOP_GOT_POINTER_CAPTURE:\n case TOP_LOST_POINTER_CAPTURE:\n case TOP_POINTER_CANCEL:\n case TOP_POINTER_DOWN:\n case TOP_POINTER_MOVE:\n case TOP_POINTER_OUT:\n case TOP_POINTER_OVER:\n case TOP_POINTER_UP:\n EventConstructor = SyntheticPointerEvent;\n break;\n\n default:\n {\n if (knownHTMLTopLevelTypes.indexOf(topLevelType) === -1) {\n error('SimpleEventPlugin: Unhandled event type, `%s`. This warning ' + 'is likely caused by a bug in React. Please file an issue.', topLevelType);\n }\n } // HTML Events\n // @see http://www.w3.org/TR/html5/index.html#events-0\n\n\n EventConstructor = SyntheticEvent;\n break;\n }\n\n var event = EventConstructor.getPooled(dispatchConfig, targetInst, nativeEvent, nativeEventTarget);\n accumulateTwoPhaseDispatches(event);\n return event;\n }\n};\n\n/**\n * Specifies a deterministic ordering of `EventPlugin`s. A convenient way to\n * reason about plugins, without having to package every one of them. This\n * is better than having plugins be ordered in the same order that they\n * are injected because that ordering would be influenced by the packaging order.\n * `ResponderEventPlugin` must occur before `SimpleEventPlugin` so that\n * preventing default on events is convenient in `SimpleEventPlugin` handlers.\n */\n\nvar DOMEventPluginOrder = ['ResponderEventPlugin', 'SimpleEventPlugin', 'EnterLeaveEventPlugin', 'ChangeEventPlugin', 'SelectEventPlugin', 'BeforeInputEventPlugin'];\n/**\n * Inject modules for resolving DOM hierarchy and plugin ordering.\n */\n\ninjectEventPluginOrder(DOMEventPluginOrder);\nsetComponentTree(getFiberCurrentPropsFromNode$1, getInstanceFromNode$1, getNodeFromInstance$1);\n/**\n * Some important event plugins included by default (without having to require\n * them).\n */\n\ninjectEventPluginsByName({\n SimpleEventPlugin: SimpleEventPlugin,\n EnterLeaveEventPlugin: EnterLeaveEventPlugin,\n ChangeEventPlugin: ChangeEventPlugin,\n SelectEventPlugin: SelectEventPlugin,\n BeforeInputEventPlugin: BeforeInputEventPlugin\n});\n\n// Prefix measurements so that it's possible to filter them.\n// Longer prefixes are hard to read in DevTools.\nvar reactEmoji = \"\\u269B\";\nvar warningEmoji = \"\\u26D4\";\nvar supportsUserTiming = typeof performance !== 'undefined' && typeof performance.mark === 'function' && typeof performance.clearMarks === 'function' && typeof performance.measure === 'function' && typeof performance.clearMeasures === 'function'; // Keep track of current fiber so that we know the path to unwind on pause.\n// TODO: this looks the same as nextUnitOfWork in scheduler. Can we unify them?\n\nvar currentFiber = null; // If we're in the middle of user code, which fiber and method is it?\n// Reusing `currentFiber` would be confusing for this because user code fiber\n// can change during commit phase too, but we don't need to unwind it (since\n// lifecycles in the commit phase don't resemble a tree).\n\nvar currentPhase = null;\nvar currentPhaseFiber = null; // Did lifecycle hook schedule an update? This is often a performance problem,\n// so we will keep track of it, and include it in the report.\n// Track commits caused by cascading updates.\n\nvar isCommitting = false;\nvar hasScheduledUpdateInCurrentCommit = false;\nvar hasScheduledUpdateInCurrentPhase = false;\nvar commitCountInCurrentWorkLoop = 0;\nvar effectCountInCurrentCommit = 0;\n// to avoid stretch the commit phase with measurement overhead.\n\nvar labelsInCurrentCommit = new Set();\n\nvar formatMarkName = function (markName) {\n return reactEmoji + \" \" + markName;\n};\n\nvar formatLabel = function (label, warning) {\n var prefix = warning ? warningEmoji + \" \" : reactEmoji + \" \";\n var suffix = warning ? \" Warning: \" + warning : '';\n return \"\" + prefix + label + suffix;\n};\n\nvar beginMark = function (markName) {\n performance.mark(formatMarkName(markName));\n};\n\nvar clearMark = function (markName) {\n performance.clearMarks(formatMarkName(markName));\n};\n\nvar endMark = function (label, markName, warning) {\n var formattedMarkName = formatMarkName(markName);\n var formattedLabel = formatLabel(label, warning);\n\n try {\n performance.measure(formattedLabel, formattedMarkName);\n } catch (err) {} // If previous mark was missing for some reason, this will throw.\n // This could only happen if React crashed in an unexpected place earlier.\n // Don't pile on with more errors.\n // Clear marks immediately to avoid growing buffer.\n\n\n performance.clearMarks(formattedMarkName);\n performance.clearMeasures(formattedLabel);\n};\n\nvar getFiberMarkName = function (label, debugID) {\n return label + \" (#\" + debugID + \")\";\n};\n\nvar getFiberLabel = function (componentName, isMounted, phase) {\n if (phase === null) {\n // These are composite component total time measurements.\n return componentName + \" [\" + (isMounted ? 'update' : 'mount') + \"]\";\n } else {\n // Composite component methods.\n return componentName + \".\" + phase;\n }\n};\n\nvar beginFiberMark = function (fiber, phase) {\n var componentName = getComponentName(fiber.type) || 'Unknown';\n var debugID = fiber._debugID;\n var isMounted = fiber.alternate !== null;\n var label = getFiberLabel(componentName, isMounted, phase);\n\n if (isCommitting && labelsInCurrentCommit.has(label)) {\n // During the commit phase, we don't show duplicate labels because\n // there is a fixed overhead for every measurement, and we don't\n // want to stretch the commit phase beyond necessary.\n return false;\n }\n\n labelsInCurrentCommit.add(label);\n var markName = getFiberMarkName(label, debugID);\n beginMark(markName);\n return true;\n};\n\nvar clearFiberMark = function (fiber, phase) {\n var componentName = getComponentName(fiber.type) || 'Unknown';\n var debugID = fiber._debugID;\n var isMounted = fiber.alternate !== null;\n var label = getFiberLabel(componentName, isMounted, phase);\n var markName = getFiberMarkName(label, debugID);\n clearMark(markName);\n};\n\nvar endFiberMark = function (fiber, phase, warning) {\n var componentName = getComponentName(fiber.type) || 'Unknown';\n var debugID = fiber._debugID;\n var isMounted = fiber.alternate !== null;\n var label = getFiberLabel(componentName, isMounted, phase);\n var markName = getFiberMarkName(label, debugID);\n endMark(label, markName, warning);\n};\n\nvar shouldIgnoreFiber = function (fiber) {\n // Host components should be skipped in the timeline.\n // We could check typeof fiber.type, but does this work with RN?\n switch (fiber.tag) {\n case HostRoot:\n case HostComponent:\n case HostText:\n case HostPortal:\n case Fragment:\n case ContextProvider:\n case ContextConsumer:\n case Mode:\n return true;\n\n default:\n return false;\n }\n};\n\nvar clearPendingPhaseMeasurement = function () {\n if (currentPhase !== null && currentPhaseFiber !== null) {\n clearFiberMark(currentPhaseFiber, currentPhase);\n }\n\n currentPhaseFiber = null;\n currentPhase = null;\n hasScheduledUpdateInCurrentPhase = false;\n};\n\nvar pauseTimers = function () {\n // Stops all currently active measurements so that they can be resumed\n // if we continue in a later deferred loop from the same unit of work.\n var fiber = currentFiber;\n\n while (fiber) {\n if (fiber._debugIsCurrentlyTiming) {\n endFiberMark(fiber, null, null);\n }\n\n fiber = fiber.return;\n }\n};\n\nvar resumeTimersRecursively = function (fiber) {\n if (fiber.return !== null) {\n resumeTimersRecursively(fiber.return);\n }\n\n if (fiber._debugIsCurrentlyTiming) {\n beginFiberMark(fiber, null);\n }\n};\n\nvar resumeTimers = function () {\n // Resumes all measurements that were active during the last deferred loop.\n if (currentFiber !== null) {\n resumeTimersRecursively(currentFiber);\n }\n};\n\nfunction recordEffect() {\n {\n effectCountInCurrentCommit++;\n }\n}\nfunction recordScheduleUpdate() {\n {\n if (isCommitting) {\n hasScheduledUpdateInCurrentCommit = true;\n }\n\n if (currentPhase !== null && currentPhase !== 'componentWillMount' && currentPhase !== 'componentWillReceiveProps') {\n hasScheduledUpdateInCurrentPhase = true;\n }\n }\n}\nfunction startWorkTimer(fiber) {\n {\n if (!supportsUserTiming || shouldIgnoreFiber(fiber)) {\n return;\n } // If we pause, this is the fiber to unwind from.\n\n\n currentFiber = fiber;\n\n if (!beginFiberMark(fiber, null)) {\n return;\n }\n\n fiber._debugIsCurrentlyTiming = true;\n }\n}\nfunction cancelWorkTimer(fiber) {\n {\n if (!supportsUserTiming || shouldIgnoreFiber(fiber)) {\n return;\n } // Remember we shouldn't complete measurement for this fiber.\n // Otherwise flamechart will be deep even for small updates.\n\n\n fiber._debugIsCurrentlyTiming = false;\n clearFiberMark(fiber, null);\n }\n}\nfunction stopWorkTimer(fiber) {\n {\n if (!supportsUserTiming || shouldIgnoreFiber(fiber)) {\n return;\n } // If we pause, its parent is the fiber to unwind from.\n\n\n currentFiber = fiber.return;\n\n if (!fiber._debugIsCurrentlyTiming) {\n return;\n }\n\n fiber._debugIsCurrentlyTiming = false;\n endFiberMark(fiber, null, null);\n }\n}\nfunction stopFailedWorkTimer(fiber) {\n {\n if (!supportsUserTiming || shouldIgnoreFiber(fiber)) {\n return;\n } // If we pause, its parent is the fiber to unwind from.\n\n\n currentFiber = fiber.return;\n\n if (!fiber._debugIsCurrentlyTiming) {\n return;\n }\n\n fiber._debugIsCurrentlyTiming = false;\n var warning = fiber.tag === SuspenseComponent ? 'Rendering was suspended' : 'An error was thrown inside this error boundary';\n endFiberMark(fiber, null, warning);\n }\n}\nfunction startPhaseTimer(fiber, phase) {\n {\n if (!supportsUserTiming) {\n return;\n }\n\n clearPendingPhaseMeasurement();\n\n if (!beginFiberMark(fiber, phase)) {\n return;\n }\n\n currentPhaseFiber = fiber;\n currentPhase = phase;\n }\n}\nfunction stopPhaseTimer() {\n {\n if (!supportsUserTiming) {\n return;\n }\n\n if (currentPhase !== null && currentPhaseFiber !== null) {\n var warning = hasScheduledUpdateInCurrentPhase ? 'Scheduled a cascading update' : null;\n endFiberMark(currentPhaseFiber, currentPhase, warning);\n }\n\n currentPhase = null;\n currentPhaseFiber = null;\n }\n}\nfunction startWorkLoopTimer(nextUnitOfWork) {\n {\n currentFiber = nextUnitOfWork;\n\n if (!supportsUserTiming) {\n return;\n }\n\n commitCountInCurrentWorkLoop = 0; // This is top level call.\n // Any other measurements are performed within.\n\n beginMark('(React Tree Reconciliation)'); // Resume any measurements that were in progress during the last loop.\n\n resumeTimers();\n }\n}\nfunction stopWorkLoopTimer(interruptedBy, didCompleteRoot) {\n {\n if (!supportsUserTiming) {\n return;\n }\n\n var warning = null;\n\n if (interruptedBy !== null) {\n if (interruptedBy.tag === HostRoot) {\n warning = 'A top-level update interrupted the previous render';\n } else {\n var componentName = getComponentName(interruptedBy.type) || 'Unknown';\n warning = \"An update to \" + componentName + \" interrupted the previous render\";\n }\n } else if (commitCountInCurrentWorkLoop > 1) {\n warning = 'There were cascading updates';\n }\n\n commitCountInCurrentWorkLoop = 0;\n var label = didCompleteRoot ? '(React Tree Reconciliation: Completed Root)' : '(React Tree Reconciliation: Yielded)'; // Pause any measurements until the next loop.\n\n pauseTimers();\n endMark(label, '(React Tree Reconciliation)', warning);\n }\n}\nfunction startCommitTimer() {\n {\n if (!supportsUserTiming) {\n return;\n }\n\n isCommitting = true;\n hasScheduledUpdateInCurrentCommit = false;\n labelsInCurrentCommit.clear();\n beginMark('(Committing Changes)');\n }\n}\nfunction stopCommitTimer() {\n {\n if (!supportsUserTiming) {\n return;\n }\n\n var warning = null;\n\n if (hasScheduledUpdateInCurrentCommit) {\n warning = 'Lifecycle hook scheduled a cascading update';\n } else if (commitCountInCurrentWorkLoop > 0) {\n warning = 'Caused by a cascading update in earlier commit';\n }\n\n hasScheduledUpdateInCurrentCommit = false;\n commitCountInCurrentWorkLoop++;\n isCommitting = false;\n labelsInCurrentCommit.clear();\n endMark('(Committing Changes)', '(Committing Changes)', warning);\n }\n}\nfunction startCommitSnapshotEffectsTimer() {\n {\n if (!supportsUserTiming) {\n return;\n }\n\n effectCountInCurrentCommit = 0;\n beginMark('(Committing Snapshot Effects)');\n }\n}\nfunction stopCommitSnapshotEffectsTimer() {\n {\n if (!supportsUserTiming) {\n return;\n }\n\n var count = effectCountInCurrentCommit;\n effectCountInCurrentCommit = 0;\n endMark(\"(Committing Snapshot Effects: \" + count + \" Total)\", '(Committing Snapshot Effects)', null);\n }\n}\nfunction startCommitHostEffectsTimer() {\n {\n if (!supportsUserTiming) {\n return;\n }\n\n effectCountInCurrentCommit = 0;\n beginMark('(Committing Host Effects)');\n }\n}\nfunction stopCommitHostEffectsTimer() {\n {\n if (!supportsUserTiming) {\n return;\n }\n\n var count = effectCountInCurrentCommit;\n effectCountInCurrentCommit = 0;\n endMark(\"(Committing Host Effects: \" + count + \" Total)\", '(Committing Host Effects)', null);\n }\n}\nfunction startCommitLifeCyclesTimer() {\n {\n if (!supportsUserTiming) {\n return;\n }\n\n effectCountInCurrentCommit = 0;\n beginMark('(Calling Lifecycle Methods)');\n }\n}\nfunction stopCommitLifeCyclesTimer() {\n {\n if (!supportsUserTiming) {\n return;\n }\n\n var count = effectCountInCurrentCommit;\n effectCountInCurrentCommit = 0;\n endMark(\"(Calling Lifecycle Methods: \" + count + \" Total)\", '(Calling Lifecycle Methods)', null);\n }\n}\n\nvar valueStack = [];\nvar fiberStack;\n\n{\n fiberStack = [];\n}\n\nvar index = -1;\n\nfunction createCursor(defaultValue) {\n return {\n current: defaultValue\n };\n}\n\nfunction pop(cursor, fiber) {\n if (index < 0) {\n {\n error('Unexpected pop.');\n }\n\n return;\n }\n\n {\n if (fiber !== fiberStack[index]) {\n error('Unexpected Fiber popped.');\n }\n }\n\n cursor.current = valueStack[index];\n valueStack[index] = null;\n\n {\n fiberStack[index] = null;\n }\n\n index--;\n}\n\nfunction push(cursor, value, fiber) {\n index++;\n valueStack[index] = cursor.current;\n\n {\n fiberStack[index] = fiber;\n }\n\n cursor.current = value;\n}\n\nvar warnedAboutMissingGetChildContext;\n\n{\n warnedAboutMissingGetChildContext = {};\n}\n\nvar emptyContextObject = {};\n\n{\n Object.freeze(emptyContextObject);\n} // A cursor to the current merged context object on the stack.\n\n\nvar contextStackCursor = createCursor(emptyContextObject); // A cursor to a boolean indicating whether the context has changed.\n\nvar didPerformWorkStackCursor = createCursor(false); // Keep track of the previous context object that was on the stack.\n// We use this to get access to the parent context after we have already\n// pushed the next context provider, and now need to merge their contexts.\n\nvar previousContext = emptyContextObject;\n\nfunction getUnmaskedContext(workInProgress, Component, didPushOwnContextIfProvider) {\n {\n if (didPushOwnContextIfProvider && isContextProvider(Component)) {\n // If the fiber is a context provider itself, when we read its context\n // we may have already pushed its own child context on the stack. A context\n // provider should not \"see\" its own child context. Therefore we read the\n // previous (parent) context instead for a context provider.\n return previousContext;\n }\n\n return contextStackCursor.current;\n }\n}\n\nfunction cacheContext(workInProgress, unmaskedContext, maskedContext) {\n {\n var instance = workInProgress.stateNode;\n instance.__reactInternalMemoizedUnmaskedChildContext = unmaskedContext;\n instance.__reactInternalMemoizedMaskedChildContext = maskedContext;\n }\n}\n\nfunction getMaskedContext(workInProgress, unmaskedContext) {\n {\n var type = workInProgress.type;\n var contextTypes = type.contextTypes;\n\n if (!contextTypes) {\n return emptyContextObject;\n } // Avoid recreating masked context unless unmasked context has changed.\n // Failing to do this will result in unnecessary calls to componentWillReceiveProps.\n // This may trigger infinite loops if componentWillReceiveProps calls setState.\n\n\n var instance = workInProgress.stateNode;\n\n if (instance && instance.__reactInternalMemoizedUnmaskedChildContext === unmaskedContext) {\n return instance.__reactInternalMemoizedMaskedChildContext;\n }\n\n var context = {};\n\n for (var key in contextTypes) {\n context[key] = unmaskedContext[key];\n }\n\n {\n var name = getComponentName(type) || 'Unknown';\n checkPropTypes(contextTypes, context, 'context', name, getCurrentFiberStackInDev);\n } // Cache unmasked context so we can avoid recreating masked context unless necessary.\n // Context is created before the class component is instantiated so check for instance.\n\n\n if (instance) {\n cacheContext(workInProgress, unmaskedContext, context);\n }\n\n return context;\n }\n}\n\nfunction hasContextChanged() {\n {\n return didPerformWorkStackCursor.current;\n }\n}\n\nfunction isContextProvider(type) {\n {\n var childContextTypes = type.childContextTypes;\n return childContextTypes !== null && childContextTypes !== undefined;\n }\n}\n\nfunction popContext(fiber) {\n {\n pop(didPerformWorkStackCursor, fiber);\n pop(contextStackCursor, fiber);\n }\n}\n\nfunction popTopLevelContextObject(fiber) {\n {\n pop(didPerformWorkStackCursor, fiber);\n pop(contextStackCursor, fiber);\n }\n}\n\nfunction pushTopLevelContextObject(fiber, context, didChange) {\n {\n if (!(contextStackCursor.current === emptyContextObject)) {\n {\n throw Error( \"Unexpected context found on stack. This error is likely caused by a bug in React. Please file an issue.\" );\n }\n }\n\n push(contextStackCursor, context, fiber);\n push(didPerformWorkStackCursor, didChange, fiber);\n }\n}\n\nfunction processChildContext(fiber, type, parentContext) {\n {\n var instance = fiber.stateNode;\n var childContextTypes = type.childContextTypes; // TODO (bvaughn) Replace this behavior with an invariant() in the future.\n // It has only been added in Fiber to match the (unintentional) behavior in Stack.\n\n if (typeof instance.getChildContext !== 'function') {\n {\n var componentName = getComponentName(type) || 'Unknown';\n\n if (!warnedAboutMissingGetChildContext[componentName]) {\n warnedAboutMissingGetChildContext[componentName] = true;\n\n error('%s.childContextTypes is specified but there is no getChildContext() method ' + 'on the instance. You can either define getChildContext() on %s or remove ' + 'childContextTypes from it.', componentName, componentName);\n }\n }\n\n return parentContext;\n }\n\n var childContext;\n startPhaseTimer(fiber, 'getChildContext');\n childContext = instance.getChildContext();\n stopPhaseTimer();\n\n for (var contextKey in childContext) {\n if (!(contextKey in childContextTypes)) {\n {\n throw Error( (getComponentName(type) || 'Unknown') + \".getChildContext(): key \\\"\" + contextKey + \"\\\" is not defined in childContextTypes.\" );\n }\n }\n }\n\n {\n var name = getComponentName(type) || 'Unknown';\n checkPropTypes(childContextTypes, childContext, 'child context', name, // In practice, there is one case in which we won't get a stack. It's when\n // somebody calls unstable_renderSubtreeIntoContainer() and we process\n // context from the parent component instance. The stack will be missing\n // because it's outside of the reconciliation, and so the pointer has not\n // been set. This is rare and doesn't matter. We'll also remove that API.\n getCurrentFiberStackInDev);\n }\n\n return _assign({}, parentContext, {}, childContext);\n }\n}\n\nfunction pushContextProvider(workInProgress) {\n {\n var instance = workInProgress.stateNode; // We push the context as early as possible to ensure stack integrity.\n // If the instance does not exist yet, we will push null at first,\n // and replace it on the stack later when invalidating the context.\n\n var memoizedMergedChildContext = instance && instance.__reactInternalMemoizedMergedChildContext || emptyContextObject; // Remember the parent context so we can merge with it later.\n // Inherit the parent's did-perform-work value to avoid inadvertently blocking updates.\n\n previousContext = contextStackCursor.current;\n push(contextStackCursor, memoizedMergedChildContext, workInProgress);\n push(didPerformWorkStackCursor, didPerformWorkStackCursor.current, workInProgress);\n return true;\n }\n}\n\nfunction invalidateContextProvider(workInProgress, type, didChange) {\n {\n var instance = workInProgress.stateNode;\n\n if (!instance) {\n {\n throw Error( \"Expected to have an instance by this point. This error is likely caused by a bug in React. Please file an issue.\" );\n }\n }\n\n if (didChange) {\n // Merge parent and own context.\n // Skip this if we're not updating due to sCU.\n // This avoids unnecessarily recomputing memoized values.\n var mergedContext = processChildContext(workInProgress, type, previousContext);\n instance.__reactInternalMemoizedMergedChildContext = mergedContext; // Replace the old (or empty) context with the new one.\n // It is important to unwind the context in the reverse order.\n\n pop(didPerformWorkStackCursor, workInProgress);\n pop(contextStackCursor, workInProgress); // Now push the new context and mark that it has changed.\n\n push(contextStackCursor, mergedContext, workInProgress);\n push(didPerformWorkStackCursor, didChange, workInProgress);\n } else {\n pop(didPerformWorkStackCursor, workInProgress);\n push(didPerformWorkStackCursor, didChange, workInProgress);\n }\n }\n}\n\nfunction findCurrentUnmaskedContext(fiber) {\n {\n // Currently this is only used with renderSubtreeIntoContainer; not sure if it\n // makes sense elsewhere\n if (!(isFiberMounted(fiber) && fiber.tag === ClassComponent)) {\n {\n throw Error( \"Expected subtree parent to be a mounted class component. This error is likely caused by a bug in React. Please file an issue.\" );\n }\n }\n\n var node = fiber;\n\n do {\n switch (node.tag) {\n case HostRoot:\n return node.stateNode.context;\n\n case ClassComponent:\n {\n var Component = node.type;\n\n if (isContextProvider(Component)) {\n return node.stateNode.__reactInternalMemoizedMergedChildContext;\n }\n\n break;\n }\n }\n\n node = node.return;\n } while (node !== null);\n\n {\n {\n throw Error( \"Found unexpected detached subtree parent. This error is likely caused by a bug in React. Please file an issue.\" );\n }\n }\n }\n}\n\nvar LegacyRoot = 0;\nvar BlockingRoot = 1;\nvar ConcurrentRoot = 2;\n\nvar Scheduler_runWithPriority = Scheduler.unstable_runWithPriority,\n Scheduler_scheduleCallback = Scheduler.unstable_scheduleCallback,\n Scheduler_cancelCallback = Scheduler.unstable_cancelCallback,\n Scheduler_shouldYield = Scheduler.unstable_shouldYield,\n Scheduler_requestPaint = Scheduler.unstable_requestPaint,\n Scheduler_now = Scheduler.unstable_now,\n Scheduler_getCurrentPriorityLevel = Scheduler.unstable_getCurrentPriorityLevel,\n Scheduler_ImmediatePriority = Scheduler.unstable_ImmediatePriority,\n Scheduler_UserBlockingPriority = Scheduler.unstable_UserBlockingPriority,\n Scheduler_NormalPriority = Scheduler.unstable_NormalPriority,\n Scheduler_LowPriority = Scheduler.unstable_LowPriority,\n Scheduler_IdlePriority = Scheduler.unstable_IdlePriority;\n\n{\n // Provide explicit error message when production+profiling bundle of e.g.\n // react-dom is used with production (non-profiling) bundle of\n // scheduler/tracing\n if (!(tracing.__interactionsRef != null && tracing.__interactionsRef.current != null)) {\n {\n throw Error( \"It is not supported to run the profiling version of a renderer (for example, `react-dom/profiling`) without also replacing the `scheduler/tracing` module with `scheduler/tracing-profiling`. Your bundler might have a setting for aliasing both modules. Learn more at http://fb.me/react-profiling\" );\n }\n }\n}\n\nvar fakeCallbackNode = {}; // Except for NoPriority, these correspond to Scheduler priorities. We use\n// ascending numbers so we can compare them like numbers. They start at 90 to\n// avoid clashing with Scheduler's priorities.\n\nvar ImmediatePriority = 99;\nvar UserBlockingPriority$1 = 98;\nvar NormalPriority = 97;\nvar LowPriority = 96;\nvar IdlePriority = 95; // NoPriority is the absence of priority. Also React-only.\n\nvar NoPriority = 90;\nvar shouldYield = Scheduler_shouldYield;\nvar requestPaint = // Fall back gracefully if we're running an older version of Scheduler.\nScheduler_requestPaint !== undefined ? Scheduler_requestPaint : function () {};\nvar syncQueue = null;\nvar immediateQueueCallbackNode = null;\nvar isFlushingSyncQueue = false;\nvar initialTimeMs = Scheduler_now(); // If the initial timestamp is reasonably small, use Scheduler's `now` directly.\n// This will be the case for modern browsers that support `performance.now`. In\n// older browsers, Scheduler falls back to `Date.now`, which returns a Unix\n// timestamp. In that case, subtract the module initialization time to simulate\n// the behavior of performance.now and keep our times small enough to fit\n// within 32 bits.\n// TODO: Consider lifting this into Scheduler.\n\nvar now = initialTimeMs < 10000 ? Scheduler_now : function () {\n return Scheduler_now() - initialTimeMs;\n};\nfunction getCurrentPriorityLevel() {\n switch (Scheduler_getCurrentPriorityLevel()) {\n case Scheduler_ImmediatePriority:\n return ImmediatePriority;\n\n case Scheduler_UserBlockingPriority:\n return UserBlockingPriority$1;\n\n case Scheduler_NormalPriority:\n return NormalPriority;\n\n case Scheduler_LowPriority:\n return LowPriority;\n\n case Scheduler_IdlePriority:\n return IdlePriority;\n\n default:\n {\n {\n throw Error( \"Unknown priority level.\" );\n }\n }\n\n }\n}\n\nfunction reactPriorityToSchedulerPriority(reactPriorityLevel) {\n switch (reactPriorityLevel) {\n case ImmediatePriority:\n return Scheduler_ImmediatePriority;\n\n case UserBlockingPriority$1:\n return Scheduler_UserBlockingPriority;\n\n case NormalPriority:\n return Scheduler_NormalPriority;\n\n case LowPriority:\n return Scheduler_LowPriority;\n\n case IdlePriority:\n return Scheduler_IdlePriority;\n\n default:\n {\n {\n throw Error( \"Unknown priority level.\" );\n }\n }\n\n }\n}\n\nfunction runWithPriority$1(reactPriorityLevel, fn) {\n var priorityLevel = reactPriorityToSchedulerPriority(reactPriorityLevel);\n return Scheduler_runWithPriority(priorityLevel, fn);\n}\nfunction scheduleCallback(reactPriorityLevel, callback, options) {\n var priorityLevel = reactPriorityToSchedulerPriority(reactPriorityLevel);\n return Scheduler_scheduleCallback(priorityLevel, callback, options);\n}\nfunction scheduleSyncCallback(callback) {\n // Push this callback into an internal queue. We'll flush these either in\n // the next tick, or earlier if something calls `flushSyncCallbackQueue`.\n if (syncQueue === null) {\n syncQueue = [callback]; // Flush the queue in the next tick, at the earliest.\n\n immediateQueueCallbackNode = Scheduler_scheduleCallback(Scheduler_ImmediatePriority, flushSyncCallbackQueueImpl);\n } else {\n // Push onto existing queue. Don't need to schedule a callback because\n // we already scheduled one when we created the queue.\n syncQueue.push(callback);\n }\n\n return fakeCallbackNode;\n}\nfunction cancelCallback(callbackNode) {\n if (callbackNode !== fakeCallbackNode) {\n Scheduler_cancelCallback(callbackNode);\n }\n}\nfunction flushSyncCallbackQueue() {\n if (immediateQueueCallbackNode !== null) {\n var node = immediateQueueCallbackNode;\n immediateQueueCallbackNode = null;\n Scheduler_cancelCallback(node);\n }\n\n flushSyncCallbackQueueImpl();\n}\n\nfunction flushSyncCallbackQueueImpl() {\n if (!isFlushingSyncQueue && syncQueue !== null) {\n // Prevent re-entrancy.\n isFlushingSyncQueue = true;\n var i = 0;\n\n try {\n var _isSync = true;\n var queue = syncQueue;\n runWithPriority$1(ImmediatePriority, function () {\n for (; i < queue.length; i++) {\n var callback = queue[i];\n\n do {\n callback = callback(_isSync);\n } while (callback !== null);\n }\n });\n syncQueue = null;\n } catch (error) {\n // If something throws, leave the remaining callbacks on the queue.\n if (syncQueue !== null) {\n syncQueue = syncQueue.slice(i + 1);\n } // Resume flushing in the next tick\n\n\n Scheduler_scheduleCallback(Scheduler_ImmediatePriority, flushSyncCallbackQueue);\n throw error;\n } finally {\n isFlushingSyncQueue = false;\n }\n }\n}\n\nvar NoMode = 0;\nvar StrictMode = 1; // TODO: Remove BlockingMode and ConcurrentMode by reading from the root\n// tag instead\n\nvar BlockingMode = 2;\nvar ConcurrentMode = 4;\nvar ProfileMode = 8;\n\n// Max 31 bit integer. The max integer size in V8 for 32-bit systems.\n// Math.pow(2, 30) - 1\n// 0b111111111111111111111111111111\nvar MAX_SIGNED_31_BIT_INT = 1073741823;\n\nvar NoWork = 0; // TODO: Think of a better name for Never. The key difference with Idle is that\n// Never work can be committed in an inconsistent state without tearing the UI.\n// The main example is offscreen content, like a hidden subtree. So one possible\n// name is Offscreen. However, it also includes dehydrated Suspense boundaries,\n// which are inconsistent in the sense that they haven't finished yet, but\n// aren't visibly inconsistent because the server rendered HTML matches what the\n// hydrated tree would look like.\n\nvar Never = 1; // Idle is slightly higher priority than Never. It must completely finish in\n// order to be consistent.\n\nvar Idle = 2; // Continuous Hydration is slightly higher than Idle and is used to increase\n// priority of hover targets.\n\nvar ContinuousHydration = 3;\nvar Sync = MAX_SIGNED_31_BIT_INT;\nvar Batched = Sync - 1;\nvar UNIT_SIZE = 10;\nvar MAGIC_NUMBER_OFFSET = Batched - 1; // 1 unit of expiration time represents 10ms.\n\nfunction msToExpirationTime(ms) {\n // Always subtract from the offset so that we don't clash with the magic number for NoWork.\n return MAGIC_NUMBER_OFFSET - (ms / UNIT_SIZE | 0);\n}\nfunction expirationTimeToMs(expirationTime) {\n return (MAGIC_NUMBER_OFFSET - expirationTime) * UNIT_SIZE;\n}\n\nfunction ceiling(num, precision) {\n return ((num / precision | 0) + 1) * precision;\n}\n\nfunction computeExpirationBucket(currentTime, expirationInMs, bucketSizeMs) {\n return MAGIC_NUMBER_OFFSET - ceiling(MAGIC_NUMBER_OFFSET - currentTime + expirationInMs / UNIT_SIZE, bucketSizeMs / UNIT_SIZE);\n} // TODO: This corresponds to Scheduler's NormalPriority, not LowPriority. Update\n// the names to reflect.\n\n\nvar LOW_PRIORITY_EXPIRATION = 5000;\nvar LOW_PRIORITY_BATCH_SIZE = 250;\nfunction computeAsyncExpiration(currentTime) {\n return computeExpirationBucket(currentTime, LOW_PRIORITY_EXPIRATION, LOW_PRIORITY_BATCH_SIZE);\n}\nfunction computeSuspenseExpiration(currentTime, timeoutMs) {\n // TODO: Should we warn if timeoutMs is lower than the normal pri expiration time?\n return computeExpirationBucket(currentTime, timeoutMs, LOW_PRIORITY_BATCH_SIZE);\n} // We intentionally set a higher expiration time for interactive updates in\n// dev than in production.\n//\n// If the main thread is being blocked so long that you hit the expiration,\n// it's a problem that could be solved with better scheduling.\n//\n// People will be more likely to notice this and fix it with the long\n// expiration time in development.\n//\n// In production we opt for better UX at the risk of masking scheduling\n// problems, by expiring fast.\n\nvar HIGH_PRIORITY_EXPIRATION = 500 ;\nvar HIGH_PRIORITY_BATCH_SIZE = 100;\nfunction computeInteractiveExpiration(currentTime) {\n return computeExpirationBucket(currentTime, HIGH_PRIORITY_EXPIRATION, HIGH_PRIORITY_BATCH_SIZE);\n}\nfunction inferPriorityFromExpirationTime(currentTime, expirationTime) {\n if (expirationTime === Sync) {\n return ImmediatePriority;\n }\n\n if (expirationTime === Never || expirationTime === Idle) {\n return IdlePriority;\n }\n\n var msUntil = expirationTimeToMs(expirationTime) - expirationTimeToMs(currentTime);\n\n if (msUntil <= 0) {\n return ImmediatePriority;\n }\n\n if (msUntil <= HIGH_PRIORITY_EXPIRATION + HIGH_PRIORITY_BATCH_SIZE) {\n return UserBlockingPriority$1;\n }\n\n if (msUntil <= LOW_PRIORITY_EXPIRATION + LOW_PRIORITY_BATCH_SIZE) {\n return NormalPriority;\n } // TODO: Handle LowPriority\n // Assume anything lower has idle priority\n\n\n return IdlePriority;\n}\n\nvar ReactStrictModeWarnings = {\n recordUnsafeLifecycleWarnings: function (fiber, instance) {},\n flushPendingUnsafeLifecycleWarnings: function () {},\n recordLegacyContextWarning: function (fiber, instance) {},\n flushLegacyContextWarning: function () {},\n discardPendingWarnings: function () {}\n};\n\n{\n var findStrictRoot = function (fiber) {\n var maybeStrictRoot = null;\n var node = fiber;\n\n while (node !== null) {\n if (node.mode & StrictMode) {\n maybeStrictRoot = node;\n }\n\n node = node.return;\n }\n\n return maybeStrictRoot;\n };\n\n var setToSortedString = function (set) {\n var array = [];\n set.forEach(function (value) {\n array.push(value);\n });\n return array.sort().join(', ');\n };\n\n var pendingComponentWillMountWarnings = [];\n var pendingUNSAFE_ComponentWillMountWarnings = [];\n var pendingComponentWillReceivePropsWarnings = [];\n var pendingUNSAFE_ComponentWillReceivePropsWarnings = [];\n var pendingComponentWillUpdateWarnings = [];\n var pendingUNSAFE_ComponentWillUpdateWarnings = []; // Tracks components we have already warned about.\n\n var didWarnAboutUnsafeLifecycles = new Set();\n\n ReactStrictModeWarnings.recordUnsafeLifecycleWarnings = function (fiber, instance) {\n // Dedup strategy: Warn once per component.\n if (didWarnAboutUnsafeLifecycles.has(fiber.type)) {\n return;\n }\n\n if (typeof instance.componentWillMount === 'function' && // Don't warn about react-lifecycles-compat polyfilled components.\n instance.componentWillMount.__suppressDeprecationWarning !== true) {\n pendingComponentWillMountWarnings.push(fiber);\n }\n\n if (fiber.mode & StrictMode && typeof instance.UNSAFE_componentWillMount === 'function') {\n pendingUNSAFE_ComponentWillMountWarnings.push(fiber);\n }\n\n if (typeof instance.componentWillReceiveProps === 'function' && instance.componentWillReceiveProps.__suppressDeprecationWarning !== true) {\n pendingComponentWillReceivePropsWarnings.push(fiber);\n }\n\n if (fiber.mode & StrictMode && typeof instance.UNSAFE_componentWillReceiveProps === 'function') {\n pendingUNSAFE_ComponentWillReceivePropsWarnings.push(fiber);\n }\n\n if (typeof instance.componentWillUpdate === 'function' && instance.componentWillUpdate.__suppressDeprecationWarning !== true) {\n pendingComponentWillUpdateWarnings.push(fiber);\n }\n\n if (fiber.mode & StrictMode && typeof instance.UNSAFE_componentWillUpdate === 'function') {\n pendingUNSAFE_ComponentWillUpdateWarnings.push(fiber);\n }\n };\n\n ReactStrictModeWarnings.flushPendingUnsafeLifecycleWarnings = function () {\n // We do an initial pass to gather component names\n var componentWillMountUniqueNames = new Set();\n\n if (pendingComponentWillMountWarnings.length > 0) {\n pendingComponentWillMountWarnings.forEach(function (fiber) {\n componentWillMountUniqueNames.add(getComponentName(fiber.type) || 'Component');\n didWarnAboutUnsafeLifecycles.add(fiber.type);\n });\n pendingComponentWillMountWarnings = [];\n }\n\n var UNSAFE_componentWillMountUniqueNames = new Set();\n\n if (pendingUNSAFE_ComponentWillMountWarnings.length > 0) {\n pendingUNSAFE_ComponentWillMountWarnings.forEach(function (fiber) {\n UNSAFE_componentWillMountUniqueNames.add(getComponentName(fiber.type) || 'Component');\n didWarnAboutUnsafeLifecycles.add(fiber.type);\n });\n pendingUNSAFE_ComponentWillMountWarnings = [];\n }\n\n var componentWillReceivePropsUniqueNames = new Set();\n\n if (pendingComponentWillReceivePropsWarnings.length > 0) {\n pendingComponentWillReceivePropsWarnings.forEach(function (fiber) {\n componentWillReceivePropsUniqueNames.add(getComponentName(fiber.type) || 'Component');\n didWarnAboutUnsafeLifecycles.add(fiber.type);\n });\n pendingComponentWillReceivePropsWarnings = [];\n }\n\n var UNSAFE_componentWillReceivePropsUniqueNames = new Set();\n\n if (pendingUNSAFE_ComponentWillReceivePropsWarnings.length > 0) {\n pendingUNSAFE_ComponentWillReceivePropsWarnings.forEach(function (fiber) {\n UNSAFE_componentWillReceivePropsUniqueNames.add(getComponentName(fiber.type) || 'Component');\n didWarnAboutUnsafeLifecycles.add(fiber.type);\n });\n pendingUNSAFE_ComponentWillReceivePropsWarnings = [];\n }\n\n var componentWillUpdateUniqueNames = new Set();\n\n if (pendingComponentWillUpdateWarnings.length > 0) {\n pendingComponentWillUpdateWarnings.forEach(function (fiber) {\n componentWillUpdateUniqueNames.add(getComponentName(fiber.type) || 'Component');\n didWarnAboutUnsafeLifecycles.add(fiber.type);\n });\n pendingComponentWillUpdateWarnings = [];\n }\n\n var UNSAFE_componentWillUpdateUniqueNames = new Set();\n\n if (pendingUNSAFE_ComponentWillUpdateWarnings.length > 0) {\n pendingUNSAFE_ComponentWillUpdateWarnings.forEach(function (fiber) {\n UNSAFE_componentWillUpdateUniqueNames.add(getComponentName(fiber.type) || 'Component');\n didWarnAboutUnsafeLifecycles.add(fiber.type);\n });\n pendingUNSAFE_ComponentWillUpdateWarnings = [];\n } // Finally, we flush all the warnings\n // UNSAFE_ ones before the deprecated ones, since they'll be 'louder'\n\n\n if (UNSAFE_componentWillMountUniqueNames.size > 0) {\n var sortedNames = setToSortedString(UNSAFE_componentWillMountUniqueNames);\n\n error('Using UNSAFE_componentWillMount in strict mode is not recommended and may indicate bugs in your code. ' + 'See https://fb.me/react-unsafe-component-lifecycles for details.\\n\\n' + '* Move code with side effects to componentDidMount, and set initial state in the constructor.\\n' + '\\nPlease update the following components: %s', sortedNames);\n }\n\n if (UNSAFE_componentWillReceivePropsUniqueNames.size > 0) {\n var _sortedNames = setToSortedString(UNSAFE_componentWillReceivePropsUniqueNames);\n\n error('Using UNSAFE_componentWillReceiveProps in strict mode is not recommended ' + 'and may indicate bugs in your code. ' + 'See https://fb.me/react-unsafe-component-lifecycles for details.\\n\\n' + '* Move data fetching code or side effects to componentDidUpdate.\\n' + \"* If you're updating state whenever props change, \" + 'refactor your code to use memoization techniques or move it to ' + 'static getDerivedStateFromProps. Learn more at: https://fb.me/react-derived-state\\n' + '\\nPlease update the following components: %s', _sortedNames);\n }\n\n if (UNSAFE_componentWillUpdateUniqueNames.size > 0) {\n var _sortedNames2 = setToSortedString(UNSAFE_componentWillUpdateUniqueNames);\n\n error('Using UNSAFE_componentWillUpdate in strict mode is not recommended ' + 'and may indicate bugs in your code. ' + 'See https://fb.me/react-unsafe-component-lifecycles for details.\\n\\n' + '* Move data fetching code or side effects to componentDidUpdate.\\n' + '\\nPlease update the following components: %s', _sortedNames2);\n }\n\n if (componentWillMountUniqueNames.size > 0) {\n var _sortedNames3 = setToSortedString(componentWillMountUniqueNames);\n\n warn('componentWillMount has been renamed, and is not recommended for use. ' + 'See https://fb.me/react-unsafe-component-lifecycles for details.\\n\\n' + '* Move code with side effects to componentDidMount, and set initial state in the constructor.\\n' + '* Rename componentWillMount to UNSAFE_componentWillMount to suppress ' + 'this warning in non-strict mode. In React 17.x, only the UNSAFE_ name will work. ' + 'To rename all deprecated lifecycles to their new names, you can run ' + '`npx react-codemod rename-unsafe-lifecycles` in your project source folder.\\n' + '\\nPlease update the following components: %s', _sortedNames3);\n }\n\n if (componentWillReceivePropsUniqueNames.size > 0) {\n var _sortedNames4 = setToSortedString(componentWillReceivePropsUniqueNames);\n\n warn('componentWillReceiveProps has been renamed, and is not recommended for use. ' + 'See https://fb.me/react-unsafe-component-lifecycles for details.\\n\\n' + '* Move data fetching code or side effects to componentDidUpdate.\\n' + \"* If you're updating state whenever props change, refactor your \" + 'code to use memoization techniques or move it to ' + 'static getDerivedStateFromProps. Learn more at: https://fb.me/react-derived-state\\n' + '* Rename componentWillReceiveProps to UNSAFE_componentWillReceiveProps to suppress ' + 'this warning in non-strict mode. In React 17.x, only the UNSAFE_ name will work. ' + 'To rename all deprecated lifecycles to their new names, you can run ' + '`npx react-codemod rename-unsafe-lifecycles` in your project source folder.\\n' + '\\nPlease update the following components: %s', _sortedNames4);\n }\n\n if (componentWillUpdateUniqueNames.size > 0) {\n var _sortedNames5 = setToSortedString(componentWillUpdateUniqueNames);\n\n warn('componentWillUpdate has been renamed, and is not recommended for use. ' + 'See https://fb.me/react-unsafe-component-lifecycles for details.\\n\\n' + '* Move data fetching code or side effects to componentDidUpdate.\\n' + '* Rename componentWillUpdate to UNSAFE_componentWillUpdate to suppress ' + 'this warning in non-strict mode. In React 17.x, only the UNSAFE_ name will work. ' + 'To rename all deprecated lifecycles to their new names, you can run ' + '`npx react-codemod rename-unsafe-lifecycles` in your project source folder.\\n' + '\\nPlease update the following components: %s', _sortedNames5);\n }\n };\n\n var pendingLegacyContextWarning = new Map(); // Tracks components we have already warned about.\n\n var didWarnAboutLegacyContext = new Set();\n\n ReactStrictModeWarnings.recordLegacyContextWarning = function (fiber, instance) {\n var strictRoot = findStrictRoot(fiber);\n\n if (strictRoot === null) {\n error('Expected to find a StrictMode component in a strict mode tree. ' + 'This error is likely caused by a bug in React. Please file an issue.');\n\n return;\n } // Dedup strategy: Warn once per component.\n\n\n if (didWarnAboutLegacyContext.has(fiber.type)) {\n return;\n }\n\n var warningsForRoot = pendingLegacyContextWarning.get(strictRoot);\n\n if (fiber.type.contextTypes != null || fiber.type.childContextTypes != null || instance !== null && typeof instance.getChildContext === 'function') {\n if (warningsForRoot === undefined) {\n warningsForRoot = [];\n pendingLegacyContextWarning.set(strictRoot, warningsForRoot);\n }\n\n warningsForRoot.push(fiber);\n }\n };\n\n ReactStrictModeWarnings.flushLegacyContextWarning = function () {\n pendingLegacyContextWarning.forEach(function (fiberArray, strictRoot) {\n if (fiberArray.length === 0) {\n return;\n }\n\n var firstFiber = fiberArray[0];\n var uniqueNames = new Set();\n fiberArray.forEach(function (fiber) {\n uniqueNames.add(getComponentName(fiber.type) || 'Component');\n didWarnAboutLegacyContext.add(fiber.type);\n });\n var sortedNames = setToSortedString(uniqueNames);\n var firstComponentStack = getStackByFiberInDevAndProd(firstFiber);\n\n error('Legacy context API has been detected within a strict-mode tree.' + '\\n\\nThe old API will be supported in all 16.x releases, but applications ' + 'using it should migrate to the new version.' + '\\n\\nPlease update the following components: %s' + '\\n\\nLearn more about this warning here: https://fb.me/react-legacy-context' + '%s', sortedNames, firstComponentStack);\n });\n };\n\n ReactStrictModeWarnings.discardPendingWarnings = function () {\n pendingComponentWillMountWarnings = [];\n pendingUNSAFE_ComponentWillMountWarnings = [];\n pendingComponentWillReceivePropsWarnings = [];\n pendingUNSAFE_ComponentWillReceivePropsWarnings = [];\n pendingComponentWillUpdateWarnings = [];\n pendingUNSAFE_ComponentWillUpdateWarnings = [];\n pendingLegacyContextWarning = new Map();\n };\n}\n\nvar resolveFamily = null; // $FlowFixMe Flow gets confused by a WeakSet feature check below.\n\nvar failedBoundaries = null;\nvar setRefreshHandler = function (handler) {\n {\n resolveFamily = handler;\n }\n};\nfunction resolveFunctionForHotReloading(type) {\n {\n if (resolveFamily === null) {\n // Hot reloading is disabled.\n return type;\n }\n\n var family = resolveFamily(type);\n\n if (family === undefined) {\n return type;\n } // Use the latest known implementation.\n\n\n return family.current;\n }\n}\nfunction resolveClassForHotReloading(type) {\n // No implementation differences.\n return resolveFunctionForHotReloading(type);\n}\nfunction resolveForwardRefForHotReloading(type) {\n {\n if (resolveFamily === null) {\n // Hot reloading is disabled.\n return type;\n }\n\n var family = resolveFamily(type);\n\n if (family === undefined) {\n // Check if we're dealing with a real forwardRef. Don't want to crash early.\n if (type !== null && type !== undefined && typeof type.render === 'function') {\n // ForwardRef is special because its resolved .type is an object,\n // but it's possible that we only have its inner render function in the map.\n // If that inner render function is different, we'll build a new forwardRef type.\n var currentRender = resolveFunctionForHotReloading(type.render);\n\n if (type.render !== currentRender) {\n var syntheticType = {\n $$typeof: REACT_FORWARD_REF_TYPE,\n render: currentRender\n };\n\n if (type.displayName !== undefined) {\n syntheticType.displayName = type.displayName;\n }\n\n return syntheticType;\n }\n }\n\n return type;\n } // Use the latest known implementation.\n\n\n return family.current;\n }\n}\nfunction isCompatibleFamilyForHotReloading(fiber, element) {\n {\n if (resolveFamily === null) {\n // Hot reloading is disabled.\n return false;\n }\n\n var prevType = fiber.elementType;\n var nextType = element.type; // If we got here, we know types aren't === equal.\n\n var needsCompareFamilies = false;\n var $$typeofNextType = typeof nextType === 'object' && nextType !== null ? nextType.$$typeof : null;\n\n switch (fiber.tag) {\n case ClassComponent:\n {\n if (typeof nextType === 'function') {\n needsCompareFamilies = true;\n }\n\n break;\n }\n\n case FunctionComponent:\n {\n if (typeof nextType === 'function') {\n needsCompareFamilies = true;\n } else if ($$typeofNextType === REACT_LAZY_TYPE) {\n // We don't know the inner type yet.\n // We're going to assume that the lazy inner type is stable,\n // and so it is sufficient to avoid reconciling it away.\n // We're not going to unwrap or actually use the new lazy type.\n needsCompareFamilies = true;\n }\n\n break;\n }\n\n case ForwardRef:\n {\n if ($$typeofNextType === REACT_FORWARD_REF_TYPE) {\n needsCompareFamilies = true;\n } else if ($$typeofNextType === REACT_LAZY_TYPE) {\n needsCompareFamilies = true;\n }\n\n break;\n }\n\n case MemoComponent:\n case SimpleMemoComponent:\n {\n if ($$typeofNextType === REACT_MEMO_TYPE) {\n // TODO: if it was but can no longer be simple,\n // we shouldn't set this.\n needsCompareFamilies = true;\n } else if ($$typeofNextType === REACT_LAZY_TYPE) {\n needsCompareFamilies = true;\n }\n\n break;\n }\n\n default:\n return false;\n } // Check if both types have a family and it's the same one.\n\n\n if (needsCompareFamilies) {\n // Note: memo() and forwardRef() we'll compare outer rather than inner type.\n // This means both of them need to be registered to preserve state.\n // If we unwrapped and compared the inner types for wrappers instead,\n // then we would risk falsely saying two separate memo(Foo)\n // calls are equivalent because they wrap the same Foo function.\n var prevFamily = resolveFamily(prevType);\n\n if (prevFamily !== undefined && prevFamily === resolveFamily(nextType)) {\n return true;\n }\n }\n\n return false;\n }\n}\nfunction markFailedErrorBoundaryForHotReloading(fiber) {\n {\n if (resolveFamily === null) {\n // Hot reloading is disabled.\n return;\n }\n\n if (typeof WeakSet !== 'function') {\n return;\n }\n\n if (failedBoundaries === null) {\n failedBoundaries = new WeakSet();\n }\n\n failedBoundaries.add(fiber);\n }\n}\nvar scheduleRefresh = function (root, update) {\n {\n if (resolveFamily === null) {\n // Hot reloading is disabled.\n return;\n }\n\n var staleFamilies = update.staleFamilies,\n updatedFamilies = update.updatedFamilies;\n flushPassiveEffects();\n flushSync(function () {\n scheduleFibersWithFamiliesRecursively(root.current, updatedFamilies, staleFamilies);\n });\n }\n};\nvar scheduleRoot = function (root, element) {\n {\n if (root.context !== emptyContextObject) {\n // Super edge case: root has a legacy _renderSubtree context\n // but we don't know the parentComponent so we can't pass it.\n // Just ignore. We'll delete this with _renderSubtree code path later.\n return;\n }\n\n flushPassiveEffects();\n syncUpdates(function () {\n updateContainer(element, root, null, null);\n });\n }\n};\n\nfunction scheduleFibersWithFamiliesRecursively(fiber, updatedFamilies, staleFamilies) {\n {\n var alternate = fiber.alternate,\n child = fiber.child,\n sibling = fiber.sibling,\n tag = fiber.tag,\n type = fiber.type;\n var candidateType = null;\n\n switch (tag) {\n case FunctionComponent:\n case SimpleMemoComponent:\n case ClassComponent:\n candidateType = type;\n break;\n\n case ForwardRef:\n candidateType = type.render;\n break;\n }\n\n if (resolveFamily === null) {\n throw new Error('Expected resolveFamily to be set during hot reload.');\n }\n\n var needsRender = false;\n var needsRemount = false;\n\n if (candidateType !== null) {\n var family = resolveFamily(candidateType);\n\n if (family !== undefined) {\n if (staleFamilies.has(family)) {\n needsRemount = true;\n } else if (updatedFamilies.has(family)) {\n if (tag === ClassComponent) {\n needsRemount = true;\n } else {\n needsRender = true;\n }\n }\n }\n }\n\n if (failedBoundaries !== null) {\n if (failedBoundaries.has(fiber) || alternate !== null && failedBoundaries.has(alternate)) {\n needsRemount = true;\n }\n }\n\n if (needsRemount) {\n fiber._debugNeedsRemount = true;\n }\n\n if (needsRemount || needsRender) {\n scheduleWork(fiber, Sync);\n }\n\n if (child !== null && !needsRemount) {\n scheduleFibersWithFamiliesRecursively(child, updatedFamilies, staleFamilies);\n }\n\n if (sibling !== null) {\n scheduleFibersWithFamiliesRecursively(sibling, updatedFamilies, staleFamilies);\n }\n }\n}\n\nvar findHostInstancesForRefresh = function (root, families) {\n {\n var hostInstances = new Set();\n var types = new Set(families.map(function (family) {\n return family.current;\n }));\n findHostInstancesForMatchingFibersRecursively(root.current, types, hostInstances);\n return hostInstances;\n }\n};\n\nfunction findHostInstancesForMatchingFibersRecursively(fiber, types, hostInstances) {\n {\n var child = fiber.child,\n sibling = fiber.sibling,\n tag = fiber.tag,\n type = fiber.type;\n var candidateType = null;\n\n switch (tag) {\n case FunctionComponent:\n case SimpleMemoComponent:\n case ClassComponent:\n candidateType = type;\n break;\n\n case ForwardRef:\n candidateType = type.render;\n break;\n }\n\n var didMatch = false;\n\n if (candidateType !== null) {\n if (types.has(candidateType)) {\n didMatch = true;\n }\n }\n\n if (didMatch) {\n // We have a match. This only drills down to the closest host components.\n // There's no need to search deeper because for the purpose of giving\n // visual feedback, \"flashing\" outermost parent rectangles is sufficient.\n findHostInstancesForFiberShallowly(fiber, hostInstances);\n } else {\n // If there's no match, maybe there will be one further down in the child tree.\n if (child !== null) {\n findHostInstancesForMatchingFibersRecursively(child, types, hostInstances);\n }\n }\n\n if (sibling !== null) {\n findHostInstancesForMatchingFibersRecursively(sibling, types, hostInstances);\n }\n }\n}\n\nfunction findHostInstancesForFiberShallowly(fiber, hostInstances) {\n {\n var foundHostInstances = findChildHostInstancesForFiberShallowly(fiber, hostInstances);\n\n if (foundHostInstances) {\n return;\n } // If we didn't find any host children, fallback to closest host parent.\n\n\n var node = fiber;\n\n while (true) {\n switch (node.tag) {\n case HostComponent:\n hostInstances.add(node.stateNode);\n return;\n\n case HostPortal:\n hostInstances.add(node.stateNode.containerInfo);\n return;\n\n case HostRoot:\n hostInstances.add(node.stateNode.containerInfo);\n return;\n }\n\n if (node.return === null) {\n throw new Error('Expected to reach root first.');\n }\n\n node = node.return;\n }\n }\n}\n\nfunction findChildHostInstancesForFiberShallowly(fiber, hostInstances) {\n {\n var node = fiber;\n var foundHostInstances = false;\n\n while (true) {\n if (node.tag === HostComponent) {\n // We got a match.\n foundHostInstances = true;\n hostInstances.add(node.stateNode); // There may still be more, so keep searching.\n } else if (node.child !== null) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n\n if (node === fiber) {\n return foundHostInstances;\n }\n\n while (node.sibling === null) {\n if (node.return === null || node.return === fiber) {\n return foundHostInstances;\n }\n\n node = node.return;\n }\n\n node.sibling.return = node.return;\n node = node.sibling;\n }\n }\n\n return false;\n}\n\nfunction resolveDefaultProps(Component, baseProps) {\n if (Component && Component.defaultProps) {\n // Resolve default props. Taken from ReactElement\n var props = _assign({}, baseProps);\n\n var defaultProps = Component.defaultProps;\n\n for (var propName in defaultProps) {\n if (props[propName] === undefined) {\n props[propName] = defaultProps[propName];\n }\n }\n\n return props;\n }\n\n return baseProps;\n}\nfunction readLazyComponentType(lazyComponent) {\n initializeLazyComponentType(lazyComponent);\n\n if (lazyComponent._status !== Resolved) {\n throw lazyComponent._result;\n }\n\n return lazyComponent._result;\n}\n\nvar valueCursor = createCursor(null);\nvar rendererSigil;\n\n{\n // Use this to detect multiple renderers using the same context\n rendererSigil = {};\n}\n\nvar currentlyRenderingFiber = null;\nvar lastContextDependency = null;\nvar lastContextWithAllBitsObserved = null;\nvar isDisallowedContextReadInDEV = false;\nfunction resetContextDependencies() {\n // This is called right before React yields execution, to ensure `readContext`\n // cannot be called outside the render phase.\n currentlyRenderingFiber = null;\n lastContextDependency = null;\n lastContextWithAllBitsObserved = null;\n\n {\n isDisallowedContextReadInDEV = false;\n }\n}\nfunction enterDisallowedContextReadInDEV() {\n {\n isDisallowedContextReadInDEV = true;\n }\n}\nfunction exitDisallowedContextReadInDEV() {\n {\n isDisallowedContextReadInDEV = false;\n }\n}\nfunction pushProvider(providerFiber, nextValue) {\n var context = providerFiber.type._context;\n\n {\n push(valueCursor, context._currentValue, providerFiber);\n context._currentValue = nextValue;\n\n {\n if (context._currentRenderer !== undefined && context._currentRenderer !== null && context._currentRenderer !== rendererSigil) {\n error('Detected multiple renderers concurrently rendering the ' + 'same context provider. This is currently unsupported.');\n }\n\n context._currentRenderer = rendererSigil;\n }\n }\n}\nfunction popProvider(providerFiber) {\n var currentValue = valueCursor.current;\n pop(valueCursor, providerFiber);\n var context = providerFiber.type._context;\n\n {\n context._currentValue = currentValue;\n }\n}\nfunction calculateChangedBits(context, newValue, oldValue) {\n if (objectIs(oldValue, newValue)) {\n // No change\n return 0;\n } else {\n var changedBits = typeof context._calculateChangedBits === 'function' ? context._calculateChangedBits(oldValue, newValue) : MAX_SIGNED_31_BIT_INT;\n\n {\n if ((changedBits & MAX_SIGNED_31_BIT_INT) !== changedBits) {\n error('calculateChangedBits: Expected the return value to be a ' + '31-bit integer. Instead received: %s', changedBits);\n }\n }\n\n return changedBits | 0;\n }\n}\nfunction scheduleWorkOnParentPath(parent, renderExpirationTime) {\n // Update the child expiration time of all the ancestors, including\n // the alternates.\n var node = parent;\n\n while (node !== null) {\n var alternate = node.alternate;\n\n if (node.childExpirationTime < renderExpirationTime) {\n node.childExpirationTime = renderExpirationTime;\n\n if (alternate !== null && alternate.childExpirationTime < renderExpirationTime) {\n alternate.childExpirationTime = renderExpirationTime;\n }\n } else if (alternate !== null && alternate.childExpirationTime < renderExpirationTime) {\n alternate.childExpirationTime = renderExpirationTime;\n } else {\n // Neither alternate was updated, which means the rest of the\n // ancestor path already has sufficient priority.\n break;\n }\n\n node = node.return;\n }\n}\nfunction propagateContextChange(workInProgress, context, changedBits, renderExpirationTime) {\n var fiber = workInProgress.child;\n\n if (fiber !== null) {\n // Set the return pointer of the child to the work-in-progress fiber.\n fiber.return = workInProgress;\n }\n\n while (fiber !== null) {\n var nextFiber = void 0; // Visit this fiber.\n\n var list = fiber.dependencies;\n\n if (list !== null) {\n nextFiber = fiber.child;\n var dependency = list.firstContext;\n\n while (dependency !== null) {\n // Check if the context matches.\n if (dependency.context === context && (dependency.observedBits & changedBits) !== 0) {\n // Match! Schedule an update on this fiber.\n if (fiber.tag === ClassComponent) {\n // Schedule a force update on the work-in-progress.\n var update = createUpdate(renderExpirationTime, null);\n update.tag = ForceUpdate; // TODO: Because we don't have a work-in-progress, this will add the\n // update to the current fiber, too, which means it will persist even if\n // this render is thrown away. Since it's a race condition, not sure it's\n // worth fixing.\n\n enqueueUpdate(fiber, update);\n }\n\n if (fiber.expirationTime < renderExpirationTime) {\n fiber.expirationTime = renderExpirationTime;\n }\n\n var alternate = fiber.alternate;\n\n if (alternate !== null && alternate.expirationTime < renderExpirationTime) {\n alternate.expirationTime = renderExpirationTime;\n }\n\n scheduleWorkOnParentPath(fiber.return, renderExpirationTime); // Mark the expiration time on the list, too.\n\n if (list.expirationTime < renderExpirationTime) {\n list.expirationTime = renderExpirationTime;\n } // Since we already found a match, we can stop traversing the\n // dependency list.\n\n\n break;\n }\n\n dependency = dependency.next;\n }\n } else if (fiber.tag === ContextProvider) {\n // Don't scan deeper if this is a matching provider\n nextFiber = fiber.type === workInProgress.type ? null : fiber.child;\n } else {\n // Traverse down.\n nextFiber = fiber.child;\n }\n\n if (nextFiber !== null) {\n // Set the return pointer of the child to the work-in-progress fiber.\n nextFiber.return = fiber;\n } else {\n // No child. Traverse to next sibling.\n nextFiber = fiber;\n\n while (nextFiber !== null) {\n if (nextFiber === workInProgress) {\n // We're back to the root of this subtree. Exit.\n nextFiber = null;\n break;\n }\n\n var sibling = nextFiber.sibling;\n\n if (sibling !== null) {\n // Set the return pointer of the sibling to the work-in-progress fiber.\n sibling.return = nextFiber.return;\n nextFiber = sibling;\n break;\n } // No more siblings. Traverse up.\n\n\n nextFiber = nextFiber.return;\n }\n }\n\n fiber = nextFiber;\n }\n}\nfunction prepareToReadContext(workInProgress, renderExpirationTime) {\n currentlyRenderingFiber = workInProgress;\n lastContextDependency = null;\n lastContextWithAllBitsObserved = null;\n var dependencies = workInProgress.dependencies;\n\n if (dependencies !== null) {\n var firstContext = dependencies.firstContext;\n\n if (firstContext !== null) {\n if (dependencies.expirationTime >= renderExpirationTime) {\n // Context list has a pending update. Mark that this fiber performed work.\n markWorkInProgressReceivedUpdate();\n } // Reset the work-in-progress list\n\n\n dependencies.firstContext = null;\n }\n }\n}\nfunction readContext(context, observedBits) {\n {\n // This warning would fire if you read context inside a Hook like useMemo.\n // Unlike the class check below, it's not enforced in production for perf.\n if (isDisallowedContextReadInDEV) {\n error('Context can only be read while React is rendering. ' + 'In classes, you can read it in the render method or getDerivedStateFromProps. ' + 'In function components, you can read it directly in the function body, but not ' + 'inside Hooks like useReducer() or useMemo().');\n }\n }\n\n if (lastContextWithAllBitsObserved === context) ; else if (observedBits === false || observedBits === 0) ; else {\n var resolvedObservedBits; // Avoid deopting on observable arguments or heterogeneous types.\n\n if (typeof observedBits !== 'number' || observedBits === MAX_SIGNED_31_BIT_INT) {\n // Observe all updates.\n lastContextWithAllBitsObserved = context;\n resolvedObservedBits = MAX_SIGNED_31_BIT_INT;\n } else {\n resolvedObservedBits = observedBits;\n }\n\n var contextItem = {\n context: context,\n observedBits: resolvedObservedBits,\n next: null\n };\n\n if (lastContextDependency === null) {\n if (!(currentlyRenderingFiber !== null)) {\n {\n throw Error( \"Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo().\" );\n }\n } // This is the first dependency for this component. Create a new list.\n\n\n lastContextDependency = contextItem;\n currentlyRenderingFiber.dependencies = {\n expirationTime: NoWork,\n firstContext: contextItem,\n responders: null\n };\n } else {\n // Append a new context item.\n lastContextDependency = lastContextDependency.next = contextItem;\n }\n }\n\n return context._currentValue ;\n}\n\nvar UpdateState = 0;\nvar ReplaceState = 1;\nvar ForceUpdate = 2;\nvar CaptureUpdate = 3; // Global state that is reset at the beginning of calling `processUpdateQueue`.\n// It should only be read right after calling `processUpdateQueue`, via\n// `checkHasForceUpdateAfterProcessing`.\n\nvar hasForceUpdate = false;\nvar didWarnUpdateInsideUpdate;\nvar currentlyProcessingQueue;\n\n{\n didWarnUpdateInsideUpdate = false;\n currentlyProcessingQueue = null;\n}\n\nfunction initializeUpdateQueue(fiber) {\n var queue = {\n baseState: fiber.memoizedState,\n baseQueue: null,\n shared: {\n pending: null\n },\n effects: null\n };\n fiber.updateQueue = queue;\n}\nfunction cloneUpdateQueue(current, workInProgress) {\n // Clone the update queue from current. Unless it's already a clone.\n var queue = workInProgress.updateQueue;\n var currentQueue = current.updateQueue;\n\n if (queue === currentQueue) {\n var clone = {\n baseState: currentQueue.baseState,\n baseQueue: currentQueue.baseQueue,\n shared: currentQueue.shared,\n effects: currentQueue.effects\n };\n workInProgress.updateQueue = clone;\n }\n}\nfunction createUpdate(expirationTime, suspenseConfig) {\n var update = {\n expirationTime: expirationTime,\n suspenseConfig: suspenseConfig,\n tag: UpdateState,\n payload: null,\n callback: null,\n next: null\n };\n update.next = update;\n\n {\n update.priority = getCurrentPriorityLevel();\n }\n\n return update;\n}\nfunction enqueueUpdate(fiber, update) {\n var updateQueue = fiber.updateQueue;\n\n if (updateQueue === null) {\n // Only occurs if the fiber has been unmounted.\n return;\n }\n\n var sharedQueue = updateQueue.shared;\n var pending = sharedQueue.pending;\n\n if (pending === null) {\n // This is the first update. Create a circular list.\n update.next = update;\n } else {\n update.next = pending.next;\n pending.next = update;\n }\n\n sharedQueue.pending = update;\n\n {\n if (currentlyProcessingQueue === sharedQueue && !didWarnUpdateInsideUpdate) {\n error('An update (setState, replaceState, or forceUpdate) was scheduled ' + 'from inside an update function. Update functions should be pure, ' + 'with zero side-effects. Consider using componentDidUpdate or a ' + 'callback.');\n\n didWarnUpdateInsideUpdate = true;\n }\n }\n}\nfunction enqueueCapturedUpdate(workInProgress, update) {\n var current = workInProgress.alternate;\n\n if (current !== null) {\n // Ensure the work-in-progress queue is a clone\n cloneUpdateQueue(current, workInProgress);\n } // Captured updates go only on the work-in-progress queue.\n\n\n var queue = workInProgress.updateQueue; // Append the update to the end of the list.\n\n var last = queue.baseQueue;\n\n if (last === null) {\n queue.baseQueue = update.next = update;\n update.next = update;\n } else {\n update.next = last.next;\n last.next = update;\n }\n}\n\nfunction getStateFromUpdate(workInProgress, queue, update, prevState, nextProps, instance) {\n switch (update.tag) {\n case ReplaceState:\n {\n var payload = update.payload;\n\n if (typeof payload === 'function') {\n // Updater function\n {\n enterDisallowedContextReadInDEV();\n\n if ( workInProgress.mode & StrictMode) {\n payload.call(instance, prevState, nextProps);\n }\n }\n\n var nextState = payload.call(instance, prevState, nextProps);\n\n {\n exitDisallowedContextReadInDEV();\n }\n\n return nextState;\n } // State object\n\n\n return payload;\n }\n\n case CaptureUpdate:\n {\n workInProgress.effectTag = workInProgress.effectTag & ~ShouldCapture | DidCapture;\n }\n // Intentional fallthrough\n\n case UpdateState:\n {\n var _payload = update.payload;\n var partialState;\n\n if (typeof _payload === 'function') {\n // Updater function\n {\n enterDisallowedContextReadInDEV();\n\n if ( workInProgress.mode & StrictMode) {\n _payload.call(instance, prevState, nextProps);\n }\n }\n\n partialState = _payload.call(instance, prevState, nextProps);\n\n {\n exitDisallowedContextReadInDEV();\n }\n } else {\n // Partial state object\n partialState = _payload;\n }\n\n if (partialState === null || partialState === undefined) {\n // Null and undefined are treated as no-ops.\n return prevState;\n } // Merge the partial state and the previous state.\n\n\n return _assign({}, prevState, partialState);\n }\n\n case ForceUpdate:\n {\n hasForceUpdate = true;\n return prevState;\n }\n }\n\n return prevState;\n}\n\nfunction processUpdateQueue(workInProgress, props, instance, renderExpirationTime) {\n // This is always non-null on a ClassComponent or HostRoot\n var queue = workInProgress.updateQueue;\n hasForceUpdate = false;\n\n {\n currentlyProcessingQueue = queue.shared;\n } // The last rebase update that is NOT part of the base state.\n\n\n var baseQueue = queue.baseQueue; // The last pending update that hasn't been processed yet.\n\n var pendingQueue = queue.shared.pending;\n\n if (pendingQueue !== null) {\n // We have new updates that haven't been processed yet.\n // We'll add them to the base queue.\n if (baseQueue !== null) {\n // Merge the pending queue and the base queue.\n var baseFirst = baseQueue.next;\n var pendingFirst = pendingQueue.next;\n baseQueue.next = pendingFirst;\n pendingQueue.next = baseFirst;\n }\n\n baseQueue = pendingQueue;\n queue.shared.pending = null; // TODO: Pass `current` as argument\n\n var current = workInProgress.alternate;\n\n if (current !== null) {\n var currentQueue = current.updateQueue;\n\n if (currentQueue !== null) {\n currentQueue.baseQueue = pendingQueue;\n }\n }\n } // These values may change as we process the queue.\n\n\n if (baseQueue !== null) {\n var first = baseQueue.next; // Iterate through the list of updates to compute the result.\n\n var newState = queue.baseState;\n var newExpirationTime = NoWork;\n var newBaseState = null;\n var newBaseQueueFirst = null;\n var newBaseQueueLast = null;\n\n if (first !== null) {\n var update = first;\n\n do {\n var updateExpirationTime = update.expirationTime;\n\n if (updateExpirationTime < renderExpirationTime) {\n // Priority is insufficient. Skip this update. If this is the first\n // skipped update, the previous update/state is the new base\n // update/state.\n var clone = {\n expirationTime: update.expirationTime,\n suspenseConfig: update.suspenseConfig,\n tag: update.tag,\n payload: update.payload,\n callback: update.callback,\n next: null\n };\n\n if (newBaseQueueLast === null) {\n newBaseQueueFirst = newBaseQueueLast = clone;\n newBaseState = newState;\n } else {\n newBaseQueueLast = newBaseQueueLast.next = clone;\n } // Update the remaining priority in the queue.\n\n\n if (updateExpirationTime > newExpirationTime) {\n newExpirationTime = updateExpirationTime;\n }\n } else {\n // This update does have sufficient priority.\n if (newBaseQueueLast !== null) {\n var _clone = {\n expirationTime: Sync,\n // This update is going to be committed so we never want uncommit it.\n suspenseConfig: update.suspenseConfig,\n tag: update.tag,\n payload: update.payload,\n callback: update.callback,\n next: null\n };\n newBaseQueueLast = newBaseQueueLast.next = _clone;\n } // Mark the event time of this update as relevant to this render pass.\n // TODO: This should ideally use the true event time of this update rather than\n // its priority which is a derived and not reverseable value.\n // TODO: We should skip this update if it was already committed but currently\n // we have no way of detecting the difference between a committed and suspended\n // update here.\n\n\n markRenderEventTimeAndConfig(updateExpirationTime, update.suspenseConfig); // Process this update.\n\n newState = getStateFromUpdate(workInProgress, queue, update, newState, props, instance);\n var callback = update.callback;\n\n if (callback !== null) {\n workInProgress.effectTag |= Callback;\n var effects = queue.effects;\n\n if (effects === null) {\n queue.effects = [update];\n } else {\n effects.push(update);\n }\n }\n }\n\n update = update.next;\n\n if (update === null || update === first) {\n pendingQueue = queue.shared.pending;\n\n if (pendingQueue === null) {\n break;\n } else {\n // An update was scheduled from inside a reducer. Add the new\n // pending updates to the end of the list and keep processing.\n update = baseQueue.next = pendingQueue.next;\n pendingQueue.next = first;\n queue.baseQueue = baseQueue = pendingQueue;\n queue.shared.pending = null;\n }\n }\n } while (true);\n }\n\n if (newBaseQueueLast === null) {\n newBaseState = newState;\n } else {\n newBaseQueueLast.next = newBaseQueueFirst;\n }\n\n queue.baseState = newBaseState;\n queue.baseQueue = newBaseQueueLast; // Set the remaining expiration time to be whatever is remaining in the queue.\n // This should be fine because the only two other things that contribute to\n // expiration time are props and context. We're already in the middle of the\n // begin phase by the time we start processing the queue, so we've already\n // dealt with the props. Context in components that specify\n // shouldComponentUpdate is tricky; but we'll have to account for\n // that regardless.\n\n markUnprocessedUpdateTime(newExpirationTime);\n workInProgress.expirationTime = newExpirationTime;\n workInProgress.memoizedState = newState;\n }\n\n {\n currentlyProcessingQueue = null;\n }\n}\n\nfunction callCallback(callback, context) {\n if (!(typeof callback === 'function')) {\n {\n throw Error( \"Invalid argument passed as callback. Expected a function. Instead received: \" + callback );\n }\n }\n\n callback.call(context);\n}\n\nfunction resetHasForceUpdateBeforeProcessing() {\n hasForceUpdate = false;\n}\nfunction checkHasForceUpdateAfterProcessing() {\n return hasForceUpdate;\n}\nfunction commitUpdateQueue(finishedWork, finishedQueue, instance) {\n // Commit the effects\n var effects = finishedQueue.effects;\n finishedQueue.effects = null;\n\n if (effects !== null) {\n for (var i = 0; i < effects.length; i++) {\n var effect = effects[i];\n var callback = effect.callback;\n\n if (callback !== null) {\n effect.callback = null;\n callCallback(callback, instance);\n }\n }\n }\n}\n\nvar ReactCurrentBatchConfig = ReactSharedInternals.ReactCurrentBatchConfig;\nfunction requestCurrentSuspenseConfig() {\n return ReactCurrentBatchConfig.suspense;\n}\n\nvar fakeInternalInstance = {};\nvar isArray = Array.isArray; // React.Component uses a shared frozen object by default.\n// We'll use it to determine whether we need to initialize legacy refs.\n\nvar emptyRefsObject = new React.Component().refs;\nvar didWarnAboutStateAssignmentForComponent;\nvar didWarnAboutUninitializedState;\nvar didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate;\nvar didWarnAboutLegacyLifecyclesAndDerivedState;\nvar didWarnAboutUndefinedDerivedState;\nvar warnOnUndefinedDerivedState;\nvar warnOnInvalidCallback;\nvar didWarnAboutDirectlyAssigningPropsToState;\nvar didWarnAboutContextTypeAndContextTypes;\nvar didWarnAboutInvalidateContextType;\n\n{\n didWarnAboutStateAssignmentForComponent = new Set();\n didWarnAboutUninitializedState = new Set();\n didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate = new Set();\n didWarnAboutLegacyLifecyclesAndDerivedState = new Set();\n didWarnAboutDirectlyAssigningPropsToState = new Set();\n didWarnAboutUndefinedDerivedState = new Set();\n didWarnAboutContextTypeAndContextTypes = new Set();\n didWarnAboutInvalidateContextType = new Set();\n var didWarnOnInvalidCallback = new Set();\n\n warnOnInvalidCallback = function (callback, callerName) {\n if (callback === null || typeof callback === 'function') {\n return;\n }\n\n var key = callerName + \"_\" + callback;\n\n if (!didWarnOnInvalidCallback.has(key)) {\n didWarnOnInvalidCallback.add(key);\n\n error('%s(...): Expected the last optional `callback` argument to be a ' + 'function. Instead received: %s.', callerName, callback);\n }\n };\n\n warnOnUndefinedDerivedState = function (type, partialState) {\n if (partialState === undefined) {\n var componentName = getComponentName(type) || 'Component';\n\n if (!didWarnAboutUndefinedDerivedState.has(componentName)) {\n didWarnAboutUndefinedDerivedState.add(componentName);\n\n error('%s.getDerivedStateFromProps(): A valid state object (or null) must be returned. ' + 'You have returned undefined.', componentName);\n }\n }\n }; // This is so gross but it's at least non-critical and can be removed if\n // it causes problems. This is meant to give a nicer error message for\n // ReactDOM15.unstable_renderSubtreeIntoContainer(reactDOM16Component,\n // ...)) which otherwise throws a \"_processChildContext is not a function\"\n // exception.\n\n\n Object.defineProperty(fakeInternalInstance, '_processChildContext', {\n enumerable: false,\n value: function () {\n {\n {\n throw Error( \"_processChildContext is not available in React 16+. This likely means you have multiple copies of React and are attempting to nest a React 15 tree inside a React 16 tree using unstable_renderSubtreeIntoContainer, which isn't supported. Try to make sure you have only one copy of React (and ideally, switch to ReactDOM.createPortal).\" );\n }\n }\n }\n });\n Object.freeze(fakeInternalInstance);\n}\n\nfunction applyDerivedStateFromProps(workInProgress, ctor, getDerivedStateFromProps, nextProps) {\n var prevState = workInProgress.memoizedState;\n\n {\n if ( workInProgress.mode & StrictMode) {\n // Invoke the function an extra time to help detect side-effects.\n getDerivedStateFromProps(nextProps, prevState);\n }\n }\n\n var partialState = getDerivedStateFromProps(nextProps, prevState);\n\n {\n warnOnUndefinedDerivedState(ctor, partialState);\n } // Merge the partial state and the previous state.\n\n\n var memoizedState = partialState === null || partialState === undefined ? prevState : _assign({}, prevState, partialState);\n workInProgress.memoizedState = memoizedState; // Once the update queue is empty, persist the derived state onto the\n // base state.\n\n if (workInProgress.expirationTime === NoWork) {\n // Queue is always non-null for classes\n var updateQueue = workInProgress.updateQueue;\n updateQueue.baseState = memoizedState;\n }\n}\nvar classComponentUpdater = {\n isMounted: isMounted,\n enqueueSetState: function (inst, payload, callback) {\n var fiber = get(inst);\n var currentTime = requestCurrentTimeForUpdate();\n var suspenseConfig = requestCurrentSuspenseConfig();\n var expirationTime = computeExpirationForFiber(currentTime, fiber, suspenseConfig);\n var update = createUpdate(expirationTime, suspenseConfig);\n update.payload = payload;\n\n if (callback !== undefined && callback !== null) {\n {\n warnOnInvalidCallback(callback, 'setState');\n }\n\n update.callback = callback;\n }\n\n enqueueUpdate(fiber, update);\n scheduleWork(fiber, expirationTime);\n },\n enqueueReplaceState: function (inst, payload, callback) {\n var fiber = get(inst);\n var currentTime = requestCurrentTimeForUpdate();\n var suspenseConfig = requestCurrentSuspenseConfig();\n var expirationTime = computeExpirationForFiber(currentTime, fiber, suspenseConfig);\n var update = createUpdate(expirationTime, suspenseConfig);\n update.tag = ReplaceState;\n update.payload = payload;\n\n if (callback !== undefined && callback !== null) {\n {\n warnOnInvalidCallback(callback, 'replaceState');\n }\n\n update.callback = callback;\n }\n\n enqueueUpdate(fiber, update);\n scheduleWork(fiber, expirationTime);\n },\n enqueueForceUpdate: function (inst, callback) {\n var fiber = get(inst);\n var currentTime = requestCurrentTimeForUpdate();\n var suspenseConfig = requestCurrentSuspenseConfig();\n var expirationTime = computeExpirationForFiber(currentTime, fiber, suspenseConfig);\n var update = createUpdate(expirationTime, suspenseConfig);\n update.tag = ForceUpdate;\n\n if (callback !== undefined && callback !== null) {\n {\n warnOnInvalidCallback(callback, 'forceUpdate');\n }\n\n update.callback = callback;\n }\n\n enqueueUpdate(fiber, update);\n scheduleWork(fiber, expirationTime);\n }\n};\n\nfunction checkShouldComponentUpdate(workInProgress, ctor, oldProps, newProps, oldState, newState, nextContext) {\n var instance = workInProgress.stateNode;\n\n if (typeof instance.shouldComponentUpdate === 'function') {\n {\n if ( workInProgress.mode & StrictMode) {\n // Invoke the function an extra time to help detect side-effects.\n instance.shouldComponentUpdate(newProps, newState, nextContext);\n }\n }\n\n startPhaseTimer(workInProgress, 'shouldComponentUpdate');\n var shouldUpdate = instance.shouldComponentUpdate(newProps, newState, nextContext);\n stopPhaseTimer();\n\n {\n if (shouldUpdate === undefined) {\n error('%s.shouldComponentUpdate(): Returned undefined instead of a ' + 'boolean value. Make sure to return true or false.', getComponentName(ctor) || 'Component');\n }\n }\n\n return shouldUpdate;\n }\n\n if (ctor.prototype && ctor.prototype.isPureReactComponent) {\n return !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState);\n }\n\n return true;\n}\n\nfunction checkClassInstance(workInProgress, ctor, newProps) {\n var instance = workInProgress.stateNode;\n\n {\n var name = getComponentName(ctor) || 'Component';\n var renderPresent = instance.render;\n\n if (!renderPresent) {\n if (ctor.prototype && typeof ctor.prototype.render === 'function') {\n error('%s(...): No `render` method found on the returned component ' + 'instance: did you accidentally return an object from the constructor?', name);\n } else {\n error('%s(...): No `render` method found on the returned component ' + 'instance: you may have forgotten to define `render`.', name);\n }\n }\n\n if (instance.getInitialState && !instance.getInitialState.isReactClassApproved && !instance.state) {\n error('getInitialState was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Did you mean to define a state property instead?', name);\n }\n\n if (instance.getDefaultProps && !instance.getDefaultProps.isReactClassApproved) {\n error('getDefaultProps was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Use a static property to define defaultProps instead.', name);\n }\n\n if (instance.propTypes) {\n error('propTypes was defined as an instance property on %s. Use a static ' + 'property to define propTypes instead.', name);\n }\n\n if (instance.contextType) {\n error('contextType was defined as an instance property on %s. Use a static ' + 'property to define contextType instead.', name);\n }\n\n {\n if (instance.contextTypes) {\n error('contextTypes was defined as an instance property on %s. Use a static ' + 'property to define contextTypes instead.', name);\n }\n\n if (ctor.contextType && ctor.contextTypes && !didWarnAboutContextTypeAndContextTypes.has(ctor)) {\n didWarnAboutContextTypeAndContextTypes.add(ctor);\n\n error('%s declares both contextTypes and contextType static properties. ' + 'The legacy contextTypes property will be ignored.', name);\n }\n }\n\n if (typeof instance.componentShouldUpdate === 'function') {\n error('%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', name);\n }\n\n if (ctor.prototype && ctor.prototype.isPureReactComponent && typeof instance.shouldComponentUpdate !== 'undefined') {\n error('%s has a method called shouldComponentUpdate(). ' + 'shouldComponentUpdate should not be used when extending React.PureComponent. ' + 'Please extend React.Component if shouldComponentUpdate is used.', getComponentName(ctor) || 'A pure component');\n }\n\n if (typeof instance.componentDidUnmount === 'function') {\n error('%s has a method called ' + 'componentDidUnmount(). But there is no such lifecycle method. ' + 'Did you mean componentWillUnmount()?', name);\n }\n\n if (typeof instance.componentDidReceiveProps === 'function') {\n error('%s has a method called ' + 'componentDidReceiveProps(). But there is no such lifecycle method. ' + 'If you meant to update the state in response to changing props, ' + 'use componentWillReceiveProps(). If you meant to fetch data or ' + 'run side-effects or mutations after React has updated the UI, use componentDidUpdate().', name);\n }\n\n if (typeof instance.componentWillRecieveProps === 'function') {\n error('%s has a method called ' + 'componentWillRecieveProps(). Did you mean componentWillReceiveProps()?', name);\n }\n\n if (typeof instance.UNSAFE_componentWillRecieveProps === 'function') {\n error('%s has a method called ' + 'UNSAFE_componentWillRecieveProps(). Did you mean UNSAFE_componentWillReceiveProps()?', name);\n }\n\n var hasMutatedProps = instance.props !== newProps;\n\n if (instance.props !== undefined && hasMutatedProps) {\n error('%s(...): When calling super() in `%s`, make sure to pass ' + \"up the same props that your component's constructor was passed.\", name, name);\n }\n\n if (instance.defaultProps) {\n error('Setting defaultProps as an instance property on %s is not supported and will be ignored.' + ' Instead, define defaultProps as a static property on %s.', name, name);\n }\n\n if (typeof instance.getSnapshotBeforeUpdate === 'function' && typeof instance.componentDidUpdate !== 'function' && !didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.has(ctor)) {\n didWarnAboutGetSnapshotBeforeUpdateWithoutDidUpdate.add(ctor);\n\n error('%s: getSnapshotBeforeUpdate() should be used with componentDidUpdate(). ' + 'This component defines getSnapshotBeforeUpdate() only.', getComponentName(ctor));\n }\n\n if (typeof instance.getDerivedStateFromProps === 'function') {\n error('%s: getDerivedStateFromProps() is defined as an instance method ' + 'and will be ignored. Instead, declare it as a static method.', name);\n }\n\n if (typeof instance.getDerivedStateFromError === 'function') {\n error('%s: getDerivedStateFromError() is defined as an instance method ' + 'and will be ignored. Instead, declare it as a static method.', name);\n }\n\n if (typeof ctor.getSnapshotBeforeUpdate === 'function') {\n error('%s: getSnapshotBeforeUpdate() is defined as a static method ' + 'and will be ignored. Instead, declare it as an instance method.', name);\n }\n\n var _state = instance.state;\n\n if (_state && (typeof _state !== 'object' || isArray(_state))) {\n error('%s.state: must be set to an object or null', name);\n }\n\n if (typeof instance.getChildContext === 'function' && typeof ctor.childContextTypes !== 'object') {\n error('%s.getChildContext(): childContextTypes must be defined in order to ' + 'use getChildContext().', name);\n }\n }\n}\n\nfunction adoptClassInstance(workInProgress, instance) {\n instance.updater = classComponentUpdater;\n workInProgress.stateNode = instance; // The instance needs access to the fiber so that it can schedule updates\n\n set(instance, workInProgress);\n\n {\n instance._reactInternalInstance = fakeInternalInstance;\n }\n}\n\nfunction constructClassInstance(workInProgress, ctor, props) {\n var isLegacyContextConsumer = false;\n var unmaskedContext = emptyContextObject;\n var context = emptyContextObject;\n var contextType = ctor.contextType;\n\n {\n if ('contextType' in ctor) {\n var isValid = // Allow null for conditional declaration\n contextType === null || contextType !== undefined && contextType.$$typeof === REACT_CONTEXT_TYPE && contextType._context === undefined; // Not a <Context.Consumer>\n\n if (!isValid && !didWarnAboutInvalidateContextType.has(ctor)) {\n didWarnAboutInvalidateContextType.add(ctor);\n var addendum = '';\n\n if (contextType === undefined) {\n addendum = ' However, it is set to undefined. ' + 'This can be caused by a typo or by mixing up named and default imports. ' + 'This can also happen due to a circular dependency, so ' + 'try moving the createContext() call to a separate file.';\n } else if (typeof contextType !== 'object') {\n addendum = ' However, it is set to a ' + typeof contextType + '.';\n } else if (contextType.$$typeof === REACT_PROVIDER_TYPE) {\n addendum = ' Did you accidentally pass the Context.Provider instead?';\n } else if (contextType._context !== undefined) {\n // <Context.Consumer>\n addendum = ' Did you accidentally pass the Context.Consumer instead?';\n } else {\n addendum = ' However, it is set to an object with keys {' + Object.keys(contextType).join(', ') + '}.';\n }\n\n error('%s defines an invalid contextType. ' + 'contextType should point to the Context object returned by React.createContext().%s', getComponentName(ctor) || 'Component', addendum);\n }\n }\n }\n\n if (typeof contextType === 'object' && contextType !== null) {\n context = readContext(contextType);\n } else {\n unmaskedContext = getUnmaskedContext(workInProgress, ctor, true);\n var contextTypes = ctor.contextTypes;\n isLegacyContextConsumer = contextTypes !== null && contextTypes !== undefined;\n context = isLegacyContextConsumer ? getMaskedContext(workInProgress, unmaskedContext) : emptyContextObject;\n } // Instantiate twice to help detect side-effects.\n\n\n {\n if ( workInProgress.mode & StrictMode) {\n new ctor(props, context); // eslint-disable-line no-new\n }\n }\n\n var instance = new ctor(props, context);\n var state = workInProgress.memoizedState = instance.state !== null && instance.state !== undefined ? instance.state : null;\n adoptClassInstance(workInProgress, instance);\n\n {\n if (typeof ctor.getDerivedStateFromProps === 'function' && state === null) {\n var componentName = getComponentName(ctor) || 'Component';\n\n if (!didWarnAboutUninitializedState.has(componentName)) {\n didWarnAboutUninitializedState.add(componentName);\n\n error('`%s` uses `getDerivedStateFromProps` but its initial state is ' + '%s. This is not recommended. Instead, define the initial state by ' + 'assigning an object to `this.state` in the constructor of `%s`. ' + 'This ensures that `getDerivedStateFromProps` arguments have a consistent shape.', componentName, instance.state === null ? 'null' : 'undefined', componentName);\n }\n } // If new component APIs are defined, \"unsafe\" lifecycles won't be called.\n // Warn about these lifecycles if they are present.\n // Don't warn about react-lifecycles-compat polyfilled methods though.\n\n\n if (typeof ctor.getDerivedStateFromProps === 'function' || typeof instance.getSnapshotBeforeUpdate === 'function') {\n var foundWillMountName = null;\n var foundWillReceivePropsName = null;\n var foundWillUpdateName = null;\n\n if (typeof instance.componentWillMount === 'function' && instance.componentWillMount.__suppressDeprecationWarning !== true) {\n foundWillMountName = 'componentWillMount';\n } else if (typeof instance.UNSAFE_componentWillMount === 'function') {\n foundWillMountName = 'UNSAFE_componentWillMount';\n }\n\n if (typeof instance.componentWillReceiveProps === 'function' && instance.componentWillReceiveProps.__suppressDeprecationWarning !== true) {\n foundWillReceivePropsName = 'componentWillReceiveProps';\n } else if (typeof instance.UNSAFE_componentWillReceiveProps === 'function') {\n foundWillReceivePropsName = 'UNSAFE_componentWillReceiveProps';\n }\n\n if (typeof instance.componentWillUpdate === 'function' && instance.componentWillUpdate.__suppressDeprecationWarning !== true) {\n foundWillUpdateName = 'componentWillUpdate';\n } else if (typeof instance.UNSAFE_componentWillUpdate === 'function') {\n foundWillUpdateName = 'UNSAFE_componentWillUpdate';\n }\n\n if (foundWillMountName !== null || foundWillReceivePropsName !== null || foundWillUpdateName !== null) {\n var _componentName = getComponentName(ctor) || 'Component';\n\n var newApiName = typeof ctor.getDerivedStateFromProps === 'function' ? 'getDerivedStateFromProps()' : 'getSnapshotBeforeUpdate()';\n\n if (!didWarnAboutLegacyLifecyclesAndDerivedState.has(_componentName)) {\n didWarnAboutLegacyLifecyclesAndDerivedState.add(_componentName);\n\n error('Unsafe legacy lifecycles will not be called for components using new component APIs.\\n\\n' + '%s uses %s but also contains the following legacy lifecycles:%s%s%s\\n\\n' + 'The above lifecycles should be removed. Learn more about this warning here:\\n' + 'https://fb.me/react-unsafe-component-lifecycles', _componentName, newApiName, foundWillMountName !== null ? \"\\n \" + foundWillMountName : '', foundWillReceivePropsName !== null ? \"\\n \" + foundWillReceivePropsName : '', foundWillUpdateName !== null ? \"\\n \" + foundWillUpdateName : '');\n }\n }\n }\n } // Cache unmasked context so we can avoid recreating masked context unless necessary.\n // ReactFiberContext usually updates this cache but can't for newly-created instances.\n\n\n if (isLegacyContextConsumer) {\n cacheContext(workInProgress, unmaskedContext, context);\n }\n\n return instance;\n}\n\nfunction callComponentWillMount(workInProgress, instance) {\n startPhaseTimer(workInProgress, 'componentWillMount');\n var oldState = instance.state;\n\n if (typeof instance.componentWillMount === 'function') {\n instance.componentWillMount();\n }\n\n if (typeof instance.UNSAFE_componentWillMount === 'function') {\n instance.UNSAFE_componentWillMount();\n }\n\n stopPhaseTimer();\n\n if (oldState !== instance.state) {\n {\n error('%s.componentWillMount(): Assigning directly to this.state is ' + \"deprecated (except inside a component's \" + 'constructor). Use setState instead.', getComponentName(workInProgress.type) || 'Component');\n }\n\n classComponentUpdater.enqueueReplaceState(instance, instance.state, null);\n }\n}\n\nfunction callComponentWillReceiveProps(workInProgress, instance, newProps, nextContext) {\n var oldState = instance.state;\n startPhaseTimer(workInProgress, 'componentWillReceiveProps');\n\n if (typeof instance.componentWillReceiveProps === 'function') {\n instance.componentWillReceiveProps(newProps, nextContext);\n }\n\n if (typeof instance.UNSAFE_componentWillReceiveProps === 'function') {\n instance.UNSAFE_componentWillReceiveProps(newProps, nextContext);\n }\n\n stopPhaseTimer();\n\n if (instance.state !== oldState) {\n {\n var componentName = getComponentName(workInProgress.type) || 'Component';\n\n if (!didWarnAboutStateAssignmentForComponent.has(componentName)) {\n didWarnAboutStateAssignmentForComponent.add(componentName);\n\n error('%s.componentWillReceiveProps(): Assigning directly to ' + \"this.state is deprecated (except inside a component's \" + 'constructor). Use setState instead.', componentName);\n }\n }\n\n classComponentUpdater.enqueueReplaceState(instance, instance.state, null);\n }\n} // Invokes the mount life-cycles on a previously never rendered instance.\n\n\nfunction mountClassInstance(workInProgress, ctor, newProps, renderExpirationTime) {\n {\n checkClassInstance(workInProgress, ctor, newProps);\n }\n\n var instance = workInProgress.stateNode;\n instance.props = newProps;\n instance.state = workInProgress.memoizedState;\n instance.refs = emptyRefsObject;\n initializeUpdateQueue(workInProgress);\n var contextType = ctor.contextType;\n\n if (typeof contextType === 'object' && contextType !== null) {\n instance.context = readContext(contextType);\n } else {\n var unmaskedContext = getUnmaskedContext(workInProgress, ctor, true);\n instance.context = getMaskedContext(workInProgress, unmaskedContext);\n }\n\n {\n if (instance.state === newProps) {\n var componentName = getComponentName(ctor) || 'Component';\n\n if (!didWarnAboutDirectlyAssigningPropsToState.has(componentName)) {\n didWarnAboutDirectlyAssigningPropsToState.add(componentName);\n\n error('%s: It is not recommended to assign props directly to state ' + \"because updates to props won't be reflected in state. \" + 'In most cases, it is better to use props directly.', componentName);\n }\n }\n\n if (workInProgress.mode & StrictMode) {\n ReactStrictModeWarnings.recordLegacyContextWarning(workInProgress, instance);\n }\n\n {\n ReactStrictModeWarnings.recordUnsafeLifecycleWarnings(workInProgress, instance);\n }\n }\n\n processUpdateQueue(workInProgress, newProps, instance, renderExpirationTime);\n instance.state = workInProgress.memoizedState;\n var getDerivedStateFromProps = ctor.getDerivedStateFromProps;\n\n if (typeof getDerivedStateFromProps === 'function') {\n applyDerivedStateFromProps(workInProgress, ctor, getDerivedStateFromProps, newProps);\n instance.state = workInProgress.memoizedState;\n } // In order to support react-lifecycles-compat polyfilled components,\n // Unsafe lifecycles should not be invoked for components using the new APIs.\n\n\n if (typeof ctor.getDerivedStateFromProps !== 'function' && typeof instance.getSnapshotBeforeUpdate !== 'function' && (typeof instance.UNSAFE_componentWillMount === 'function' || typeof instance.componentWillMount === 'function')) {\n callComponentWillMount(workInProgress, instance); // If we had additional state updates during this life-cycle, let's\n // process them now.\n\n processUpdateQueue(workInProgress, newProps, instance, renderExpirationTime);\n instance.state = workInProgress.memoizedState;\n }\n\n if (typeof instance.componentDidMount === 'function') {\n workInProgress.effectTag |= Update;\n }\n}\n\nfunction resumeMountClassInstance(workInProgress, ctor, newProps, renderExpirationTime) {\n var instance = workInProgress.stateNode;\n var oldProps = workInProgress.memoizedProps;\n instance.props = oldProps;\n var oldContext = instance.context;\n var contextType = ctor.contextType;\n var nextContext = emptyContextObject;\n\n if (typeof contextType === 'object' && contextType !== null) {\n nextContext = readContext(contextType);\n } else {\n var nextLegacyUnmaskedContext = getUnmaskedContext(workInProgress, ctor, true);\n nextContext = getMaskedContext(workInProgress, nextLegacyUnmaskedContext);\n }\n\n var getDerivedStateFromProps = ctor.getDerivedStateFromProps;\n var hasNewLifecycles = typeof getDerivedStateFromProps === 'function' || typeof instance.getSnapshotBeforeUpdate === 'function'; // Note: During these life-cycles, instance.props/instance.state are what\n // ever the previously attempted to render - not the \"current\". However,\n // during componentDidUpdate we pass the \"current\" props.\n // In order to support react-lifecycles-compat polyfilled components,\n // Unsafe lifecycles should not be invoked for components using the new APIs.\n\n if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillReceiveProps === 'function' || typeof instance.componentWillReceiveProps === 'function')) {\n if (oldProps !== newProps || oldContext !== nextContext) {\n callComponentWillReceiveProps(workInProgress, instance, newProps, nextContext);\n }\n }\n\n resetHasForceUpdateBeforeProcessing();\n var oldState = workInProgress.memoizedState;\n var newState = instance.state = oldState;\n processUpdateQueue(workInProgress, newProps, instance, renderExpirationTime);\n newState = workInProgress.memoizedState;\n\n if (oldProps === newProps && oldState === newState && !hasContextChanged() && !checkHasForceUpdateAfterProcessing()) {\n // If an update was already in progress, we should schedule an Update\n // effect even though we're bailing out, so that cWU/cDU are called.\n if (typeof instance.componentDidMount === 'function') {\n workInProgress.effectTag |= Update;\n }\n\n return false;\n }\n\n if (typeof getDerivedStateFromProps === 'function') {\n applyDerivedStateFromProps(workInProgress, ctor, getDerivedStateFromProps, newProps);\n newState = workInProgress.memoizedState;\n }\n\n var shouldUpdate = checkHasForceUpdateAfterProcessing() || checkShouldComponentUpdate(workInProgress, ctor, oldProps, newProps, oldState, newState, nextContext);\n\n if (shouldUpdate) {\n // In order to support react-lifecycles-compat polyfilled components,\n // Unsafe lifecycles should not be invoked for components using the new APIs.\n if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillMount === 'function' || typeof instance.componentWillMount === 'function')) {\n startPhaseTimer(workInProgress, 'componentWillMount');\n\n if (typeof instance.componentWillMount === 'function') {\n instance.componentWillMount();\n }\n\n if (typeof instance.UNSAFE_componentWillMount === 'function') {\n instance.UNSAFE_componentWillMount();\n }\n\n stopPhaseTimer();\n }\n\n if (typeof instance.componentDidMount === 'function') {\n workInProgress.effectTag |= Update;\n }\n } else {\n // If an update was already in progress, we should schedule an Update\n // effect even though we're bailing out, so that cWU/cDU are called.\n if (typeof instance.componentDidMount === 'function') {\n workInProgress.effectTag |= Update;\n } // If shouldComponentUpdate returned false, we should still update the\n // memoized state to indicate that this work can be reused.\n\n\n workInProgress.memoizedProps = newProps;\n workInProgress.memoizedState = newState;\n } // Update the existing instance's state, props, and context pointers even\n // if shouldComponentUpdate returns false.\n\n\n instance.props = newProps;\n instance.state = newState;\n instance.context = nextContext;\n return shouldUpdate;\n} // Invokes the update life-cycles and returns false if it shouldn't rerender.\n\n\nfunction updateClassInstance(current, workInProgress, ctor, newProps, renderExpirationTime) {\n var instance = workInProgress.stateNode;\n cloneUpdateQueue(current, workInProgress);\n var oldProps = workInProgress.memoizedProps;\n instance.props = workInProgress.type === workInProgress.elementType ? oldProps : resolveDefaultProps(workInProgress.type, oldProps);\n var oldContext = instance.context;\n var contextType = ctor.contextType;\n var nextContext = emptyContextObject;\n\n if (typeof contextType === 'object' && contextType !== null) {\n nextContext = readContext(contextType);\n } else {\n var nextUnmaskedContext = getUnmaskedContext(workInProgress, ctor, true);\n nextContext = getMaskedContext(workInProgress, nextUnmaskedContext);\n }\n\n var getDerivedStateFromProps = ctor.getDerivedStateFromProps;\n var hasNewLifecycles = typeof getDerivedStateFromProps === 'function' || typeof instance.getSnapshotBeforeUpdate === 'function'; // Note: During these life-cycles, instance.props/instance.state are what\n // ever the previously attempted to render - not the \"current\". However,\n // during componentDidUpdate we pass the \"current\" props.\n // In order to support react-lifecycles-compat polyfilled components,\n // Unsafe lifecycles should not be invoked for components using the new APIs.\n\n if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillReceiveProps === 'function' || typeof instance.componentWillReceiveProps === 'function')) {\n if (oldProps !== newProps || oldContext !== nextContext) {\n callComponentWillReceiveProps(workInProgress, instance, newProps, nextContext);\n }\n }\n\n resetHasForceUpdateBeforeProcessing();\n var oldState = workInProgress.memoizedState;\n var newState = instance.state = oldState;\n processUpdateQueue(workInProgress, newProps, instance, renderExpirationTime);\n newState = workInProgress.memoizedState;\n\n if (oldProps === newProps && oldState === newState && !hasContextChanged() && !checkHasForceUpdateAfterProcessing()) {\n // If an update was already in progress, we should schedule an Update\n // effect even though we're bailing out, so that cWU/cDU are called.\n if (typeof instance.componentDidUpdate === 'function') {\n if (oldProps !== current.memoizedProps || oldState !== current.memoizedState) {\n workInProgress.effectTag |= Update;\n }\n }\n\n if (typeof instance.getSnapshotBeforeUpdate === 'function') {\n if (oldProps !== current.memoizedProps || oldState !== current.memoizedState) {\n workInProgress.effectTag |= Snapshot;\n }\n }\n\n return false;\n }\n\n if (typeof getDerivedStateFromProps === 'function') {\n applyDerivedStateFromProps(workInProgress, ctor, getDerivedStateFromProps, newProps);\n newState = workInProgress.memoizedState;\n }\n\n var shouldUpdate = checkHasForceUpdateAfterProcessing() || checkShouldComponentUpdate(workInProgress, ctor, oldProps, newProps, oldState, newState, nextContext);\n\n if (shouldUpdate) {\n // In order to support react-lifecycles-compat polyfilled components,\n // Unsafe lifecycles should not be invoked for components using the new APIs.\n if (!hasNewLifecycles && (typeof instance.UNSAFE_componentWillUpdate === 'function' || typeof instance.componentWillUpdate === 'function')) {\n startPhaseTimer(workInProgress, 'componentWillUpdate');\n\n if (typeof instance.componentWillUpdate === 'function') {\n instance.componentWillUpdate(newProps, newState, nextContext);\n }\n\n if (typeof instance.UNSAFE_componentWillUpdate === 'function') {\n instance.UNSAFE_componentWillUpdate(newProps, newState, nextContext);\n }\n\n stopPhaseTimer();\n }\n\n if (typeof instance.componentDidUpdate === 'function') {\n workInProgress.effectTag |= Update;\n }\n\n if (typeof instance.getSnapshotBeforeUpdate === 'function') {\n workInProgress.effectTag |= Snapshot;\n }\n } else {\n // If an update was already in progress, we should schedule an Update\n // effect even though we're bailing out, so that cWU/cDU are called.\n if (typeof instance.componentDidUpdate === 'function') {\n if (oldProps !== current.memoizedProps || oldState !== current.memoizedState) {\n workInProgress.effectTag |= Update;\n }\n }\n\n if (typeof instance.getSnapshotBeforeUpdate === 'function') {\n if (oldProps !== current.memoizedProps || oldState !== current.memoizedState) {\n workInProgress.effectTag |= Snapshot;\n }\n } // If shouldComponentUpdate returned false, we should still update the\n // memoized props/state to indicate that this work can be reused.\n\n\n workInProgress.memoizedProps = newProps;\n workInProgress.memoizedState = newState;\n } // Update the existing instance's state, props, and context pointers even\n // if shouldComponentUpdate returns false.\n\n\n instance.props = newProps;\n instance.state = newState;\n instance.context = nextContext;\n return shouldUpdate;\n}\n\nvar didWarnAboutMaps;\nvar didWarnAboutGenerators;\nvar didWarnAboutStringRefs;\nvar ownerHasKeyUseWarning;\nvar ownerHasFunctionTypeWarning;\n\nvar warnForMissingKey = function (child) {};\n\n{\n didWarnAboutMaps = false;\n didWarnAboutGenerators = false;\n didWarnAboutStringRefs = {};\n /**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\n\n ownerHasKeyUseWarning = {};\n ownerHasFunctionTypeWarning = {};\n\n warnForMissingKey = function (child) {\n if (child === null || typeof child !== 'object') {\n return;\n }\n\n if (!child._store || child._store.validated || child.key != null) {\n return;\n }\n\n if (!(typeof child._store === 'object')) {\n {\n throw Error( \"React Component in warnForMissingKey should have a _store. This error is likely caused by a bug in React. Please file an issue.\" );\n }\n }\n\n child._store.validated = true;\n var currentComponentErrorInfo = 'Each child in a list should have a unique ' + '\"key\" prop. See https://fb.me/react-warning-keys for ' + 'more information.' + getCurrentFiberStackInDev();\n\n if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n return;\n }\n\n ownerHasKeyUseWarning[currentComponentErrorInfo] = true;\n\n error('Each child in a list should have a unique ' + '\"key\" prop. See https://fb.me/react-warning-keys for ' + 'more information.');\n };\n}\n\nvar isArray$1 = Array.isArray;\n\nfunction coerceRef(returnFiber, current, element) {\n var mixedRef = element.ref;\n\n if (mixedRef !== null && typeof mixedRef !== 'function' && typeof mixedRef !== 'object') {\n {\n // TODO: Clean this up once we turn on the string ref warning for\n // everyone, because the strict mode case will no longer be relevant\n if ((returnFiber.mode & StrictMode || warnAboutStringRefs) && // We warn in ReactElement.js if owner and self are equal for string refs\n // because these cannot be automatically converted to an arrow function\n // using a codemod. Therefore, we don't have to warn about string refs again.\n !(element._owner && element._self && element._owner.stateNode !== element._self)) {\n var componentName = getComponentName(returnFiber.type) || 'Component';\n\n if (!didWarnAboutStringRefs[componentName]) {\n {\n error('A string ref, \"%s\", has been found within a strict mode tree. ' + 'String refs are a source of potential bugs and should be avoided. ' + 'We recommend using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://fb.me/react-strict-mode-string-ref%s', mixedRef, getStackByFiberInDevAndProd(returnFiber));\n }\n\n didWarnAboutStringRefs[componentName] = true;\n }\n }\n }\n\n if (element._owner) {\n var owner = element._owner;\n var inst;\n\n if (owner) {\n var ownerFiber = owner;\n\n if (!(ownerFiber.tag === ClassComponent)) {\n {\n throw Error( \"Function components cannot have string refs. We recommend using useRef() instead. Learn more about using refs safely here: https://fb.me/react-strict-mode-string-ref\" );\n }\n }\n\n inst = ownerFiber.stateNode;\n }\n\n if (!inst) {\n {\n throw Error( \"Missing owner for string ref \" + mixedRef + \". This error is likely caused by a bug in React. Please file an issue.\" );\n }\n }\n\n var stringRef = '' + mixedRef; // Check if previous string ref matches new string ref\n\n if (current !== null && current.ref !== null && typeof current.ref === 'function' && current.ref._stringRef === stringRef) {\n return current.ref;\n }\n\n var ref = function (value) {\n var refs = inst.refs;\n\n if (refs === emptyRefsObject) {\n // This is a lazy pooled frozen object, so we need to initialize.\n refs = inst.refs = {};\n }\n\n if (value === null) {\n delete refs[stringRef];\n } else {\n refs[stringRef] = value;\n }\n };\n\n ref._stringRef = stringRef;\n return ref;\n } else {\n if (!(typeof mixedRef === 'string')) {\n {\n throw Error( \"Expected ref to be a function, a string, an object returned by React.createRef(), or null.\" );\n }\n }\n\n if (!element._owner) {\n {\n throw Error( \"Element ref was specified as a string (\" + mixedRef + \") but no owner was set. This could happen for one of the following reasons:\\n1. You may be adding a ref to a function component\\n2. You may be adding a ref to a component that was not created inside a component's render method\\n3. You have multiple copies of React loaded\\nSee https://fb.me/react-refs-must-have-owner for more information.\" );\n }\n }\n }\n }\n\n return mixedRef;\n}\n\nfunction throwOnInvalidObjectType(returnFiber, newChild) {\n if (returnFiber.type !== 'textarea') {\n var addendum = '';\n\n {\n addendum = ' If you meant to render a collection of children, use an array ' + 'instead.' + getCurrentFiberStackInDev();\n }\n\n {\n {\n throw Error( \"Objects are not valid as a React child (found: \" + (Object.prototype.toString.call(newChild) === '[object Object]' ? 'object with keys {' + Object.keys(newChild).join(', ') + '}' : newChild) + \").\" + addendum );\n }\n }\n }\n}\n\nfunction warnOnFunctionType() {\n {\n var currentComponentErrorInfo = 'Functions are not valid as a React child. This may happen if ' + 'you return a Component instead of <Component /> from render. ' + 'Or maybe you meant to call this function rather than return it.' + getCurrentFiberStackInDev();\n\n if (ownerHasFunctionTypeWarning[currentComponentErrorInfo]) {\n return;\n }\n\n ownerHasFunctionTypeWarning[currentComponentErrorInfo] = true;\n\n error('Functions are not valid as a React child. This may happen if ' + 'you return a Component instead of <Component /> from render. ' + 'Or maybe you meant to call this function rather than return it.');\n }\n} // This wrapper function exists because I expect to clone the code in each path\n// to be able to optimize each path individually by branching early. This needs\n// a compiler or we can do it manually. Helpers that don't need this branching\n// live outside of this function.\n\n\nfunction ChildReconciler(shouldTrackSideEffects) {\n function deleteChild(returnFiber, childToDelete) {\n if (!shouldTrackSideEffects) {\n // Noop.\n return;\n } // Deletions are added in reversed order so we add it to the front.\n // At this point, the return fiber's effect list is empty except for\n // deletions, so we can just append the deletion to the list. The remaining\n // effects aren't added until the complete phase. Once we implement\n // resuming, this may not be true.\n\n\n var last = returnFiber.lastEffect;\n\n if (last !== null) {\n last.nextEffect = childToDelete;\n returnFiber.lastEffect = childToDelete;\n } else {\n returnFiber.firstEffect = returnFiber.lastEffect = childToDelete;\n }\n\n childToDelete.nextEffect = null;\n childToDelete.effectTag = Deletion;\n }\n\n function deleteRemainingChildren(returnFiber, currentFirstChild) {\n if (!shouldTrackSideEffects) {\n // Noop.\n return null;\n } // TODO: For the shouldClone case, this could be micro-optimized a bit by\n // assuming that after the first child we've already added everything.\n\n\n var childToDelete = currentFirstChild;\n\n while (childToDelete !== null) {\n deleteChild(returnFiber, childToDelete);\n childToDelete = childToDelete.sibling;\n }\n\n return null;\n }\n\n function mapRemainingChildren(returnFiber, currentFirstChild) {\n // Add the remaining children to a temporary map so that we can find them by\n // keys quickly. Implicit (null) keys get added to this set with their index\n // instead.\n var existingChildren = new Map();\n var existingChild = currentFirstChild;\n\n while (existingChild !== null) {\n if (existingChild.key !== null) {\n existingChildren.set(existingChild.key, existingChild);\n } else {\n existingChildren.set(existingChild.index, existingChild);\n }\n\n existingChild = existingChild.sibling;\n }\n\n return existingChildren;\n }\n\n function useFiber(fiber, pendingProps) {\n // We currently set sibling to null and index to 0 here because it is easy\n // to forget to do before returning it. E.g. for the single child case.\n var clone = createWorkInProgress(fiber, pendingProps);\n clone.index = 0;\n clone.sibling = null;\n return clone;\n }\n\n function placeChild(newFiber, lastPlacedIndex, newIndex) {\n newFiber.index = newIndex;\n\n if (!shouldTrackSideEffects) {\n // Noop.\n return lastPlacedIndex;\n }\n\n var current = newFiber.alternate;\n\n if (current !== null) {\n var oldIndex = current.index;\n\n if (oldIndex < lastPlacedIndex) {\n // This is a move.\n newFiber.effectTag = Placement;\n return lastPlacedIndex;\n } else {\n // This item can stay in place.\n return oldIndex;\n }\n } else {\n // This is an insertion.\n newFiber.effectTag = Placement;\n return lastPlacedIndex;\n }\n }\n\n function placeSingleChild(newFiber) {\n // This is simpler for the single child case. We only need to do a\n // placement for inserting new children.\n if (shouldTrackSideEffects && newFiber.alternate === null) {\n newFiber.effectTag = Placement;\n }\n\n return newFiber;\n }\n\n function updateTextNode(returnFiber, current, textContent, expirationTime) {\n if (current === null || current.tag !== HostText) {\n // Insert\n var created = createFiberFromText(textContent, returnFiber.mode, expirationTime);\n created.return = returnFiber;\n return created;\n } else {\n // Update\n var existing = useFiber(current, textContent);\n existing.return = returnFiber;\n return existing;\n }\n }\n\n function updateElement(returnFiber, current, element, expirationTime) {\n if (current !== null) {\n if (current.elementType === element.type || ( // Keep this check inline so it only runs on the false path:\n isCompatibleFamilyForHotReloading(current, element) )) {\n // Move based on index\n var existing = useFiber(current, element.props);\n existing.ref = coerceRef(returnFiber, current, element);\n existing.return = returnFiber;\n\n {\n existing._debugSource = element._source;\n existing._debugOwner = element._owner;\n }\n\n return existing;\n }\n } // Insert\n\n\n var created = createFiberFromElement(element, returnFiber.mode, expirationTime);\n created.ref = coerceRef(returnFiber, current, element);\n created.return = returnFiber;\n return created;\n }\n\n function updatePortal(returnFiber, current, portal, expirationTime) {\n if (current === null || current.tag !== HostPortal || current.stateNode.containerInfo !== portal.containerInfo || current.stateNode.implementation !== portal.implementation) {\n // Insert\n var created = createFiberFromPortal(portal, returnFiber.mode, expirationTime);\n created.return = returnFiber;\n return created;\n } else {\n // Update\n var existing = useFiber(current, portal.children || []);\n existing.return = returnFiber;\n return existing;\n }\n }\n\n function updateFragment(returnFiber, current, fragment, expirationTime, key) {\n if (current === null || current.tag !== Fragment) {\n // Insert\n var created = createFiberFromFragment(fragment, returnFiber.mode, expirationTime, key);\n created.return = returnFiber;\n return created;\n } else {\n // Update\n var existing = useFiber(current, fragment);\n existing.return = returnFiber;\n return existing;\n }\n }\n\n function createChild(returnFiber, newChild, expirationTime) {\n if (typeof newChild === 'string' || typeof newChild === 'number') {\n // Text nodes don't have keys. If the previous node is implicitly keyed\n // we can continue to replace it without aborting even if it is not a text\n // node.\n var created = createFiberFromText('' + newChild, returnFiber.mode, expirationTime);\n created.return = returnFiber;\n return created;\n }\n\n if (typeof newChild === 'object' && newChild !== null) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n {\n var _created = createFiberFromElement(newChild, returnFiber.mode, expirationTime);\n\n _created.ref = coerceRef(returnFiber, null, newChild);\n _created.return = returnFiber;\n return _created;\n }\n\n case REACT_PORTAL_TYPE:\n {\n var _created2 = createFiberFromPortal(newChild, returnFiber.mode, expirationTime);\n\n _created2.return = returnFiber;\n return _created2;\n }\n }\n\n if (isArray$1(newChild) || getIteratorFn(newChild)) {\n var _created3 = createFiberFromFragment(newChild, returnFiber.mode, expirationTime, null);\n\n _created3.return = returnFiber;\n return _created3;\n }\n\n throwOnInvalidObjectType(returnFiber, newChild);\n }\n\n {\n if (typeof newChild === 'function') {\n warnOnFunctionType();\n }\n }\n\n return null;\n }\n\n function updateSlot(returnFiber, oldFiber, newChild, expirationTime) {\n // Update the fiber if the keys match, otherwise return null.\n var key = oldFiber !== null ? oldFiber.key : null;\n\n if (typeof newChild === 'string' || typeof newChild === 'number') {\n // Text nodes don't have keys. If the previous node is implicitly keyed\n // we can continue to replace it without aborting even if it is not a text\n // node.\n if (key !== null) {\n return null;\n }\n\n return updateTextNode(returnFiber, oldFiber, '' + newChild, expirationTime);\n }\n\n if (typeof newChild === 'object' && newChild !== null) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n {\n if (newChild.key === key) {\n if (newChild.type === REACT_FRAGMENT_TYPE) {\n return updateFragment(returnFiber, oldFiber, newChild.props.children, expirationTime, key);\n }\n\n return updateElement(returnFiber, oldFiber, newChild, expirationTime);\n } else {\n return null;\n }\n }\n\n case REACT_PORTAL_TYPE:\n {\n if (newChild.key === key) {\n return updatePortal(returnFiber, oldFiber, newChild, expirationTime);\n } else {\n return null;\n }\n }\n }\n\n if (isArray$1(newChild) || getIteratorFn(newChild)) {\n if (key !== null) {\n return null;\n }\n\n return updateFragment(returnFiber, oldFiber, newChild, expirationTime, null);\n }\n\n throwOnInvalidObjectType(returnFiber, newChild);\n }\n\n {\n if (typeof newChild === 'function') {\n warnOnFunctionType();\n }\n }\n\n return null;\n }\n\n function updateFromMap(existingChildren, returnFiber, newIdx, newChild, expirationTime) {\n if (typeof newChild === 'string' || typeof newChild === 'number') {\n // Text nodes don't have keys, so we neither have to check the old nor\n // new node for the key. If both are text nodes, they match.\n var matchedFiber = existingChildren.get(newIdx) || null;\n return updateTextNode(returnFiber, matchedFiber, '' + newChild, expirationTime);\n }\n\n if (typeof newChild === 'object' && newChild !== null) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n {\n var _matchedFiber = existingChildren.get(newChild.key === null ? newIdx : newChild.key) || null;\n\n if (newChild.type === REACT_FRAGMENT_TYPE) {\n return updateFragment(returnFiber, _matchedFiber, newChild.props.children, expirationTime, newChild.key);\n }\n\n return updateElement(returnFiber, _matchedFiber, newChild, expirationTime);\n }\n\n case REACT_PORTAL_TYPE:\n {\n var _matchedFiber2 = existingChildren.get(newChild.key === null ? newIdx : newChild.key) || null;\n\n return updatePortal(returnFiber, _matchedFiber2, newChild, expirationTime);\n }\n }\n\n if (isArray$1(newChild) || getIteratorFn(newChild)) {\n var _matchedFiber3 = existingChildren.get(newIdx) || null;\n\n return updateFragment(returnFiber, _matchedFiber3, newChild, expirationTime, null);\n }\n\n throwOnInvalidObjectType(returnFiber, newChild);\n }\n\n {\n if (typeof newChild === 'function') {\n warnOnFunctionType();\n }\n }\n\n return null;\n }\n /**\n * Warns if there is a duplicate or missing key\n */\n\n\n function warnOnInvalidKey(child, knownKeys) {\n {\n if (typeof child !== 'object' || child === null) {\n return knownKeys;\n }\n\n switch (child.$$typeof) {\n case REACT_ELEMENT_TYPE:\n case REACT_PORTAL_TYPE:\n warnForMissingKey(child);\n var key = child.key;\n\n if (typeof key !== 'string') {\n break;\n }\n\n if (knownKeys === null) {\n knownKeys = new Set();\n knownKeys.add(key);\n break;\n }\n\n if (!knownKeys.has(key)) {\n knownKeys.add(key);\n break;\n }\n\n error('Encountered two children with the same key, `%s`. ' + 'Keys should be unique so that components maintain their identity ' + 'across updates. Non-unique keys may cause children to be ' + 'duplicated and/or omitted — the behavior is unsupported and ' + 'could change in a future version.', key);\n\n break;\n }\n }\n\n return knownKeys;\n }\n\n function reconcileChildrenArray(returnFiber, currentFirstChild, newChildren, expirationTime) {\n // This algorithm can't optimize by searching from both ends since we\n // don't have backpointers on fibers. I'm trying to see how far we can get\n // with that model. If it ends up not being worth the tradeoffs, we can\n // add it later.\n // Even with a two ended optimization, we'd want to optimize for the case\n // where there are few changes and brute force the comparison instead of\n // going for the Map. It'd like to explore hitting that path first in\n // forward-only mode and only go for the Map once we notice that we need\n // lots of look ahead. This doesn't handle reversal as well as two ended\n // search but that's unusual. Besides, for the two ended optimization to\n // work on Iterables, we'd need to copy the whole set.\n // In this first iteration, we'll just live with hitting the bad case\n // (adding everything to a Map) in for every insert/move.\n // If you change this code, also update reconcileChildrenIterator() which\n // uses the same algorithm.\n {\n // First, validate keys.\n var knownKeys = null;\n\n for (var i = 0; i < newChildren.length; i++) {\n var child = newChildren[i];\n knownKeys = warnOnInvalidKey(child, knownKeys);\n }\n }\n\n var resultingFirstChild = null;\n var previousNewFiber = null;\n var oldFiber = currentFirstChild;\n var lastPlacedIndex = 0;\n var newIdx = 0;\n var nextOldFiber = null;\n\n for (; oldFiber !== null && newIdx < newChildren.length; newIdx++) {\n if (oldFiber.index > newIdx) {\n nextOldFiber = oldFiber;\n oldFiber = null;\n } else {\n nextOldFiber = oldFiber.sibling;\n }\n\n var newFiber = updateSlot(returnFiber, oldFiber, newChildren[newIdx], expirationTime);\n\n if (newFiber === null) {\n // TODO: This breaks on empty slots like null children. That's\n // unfortunate because it triggers the slow path all the time. We need\n // a better way to communicate whether this was a miss or null,\n // boolean, undefined, etc.\n if (oldFiber === null) {\n oldFiber = nextOldFiber;\n }\n\n break;\n }\n\n if (shouldTrackSideEffects) {\n if (oldFiber && newFiber.alternate === null) {\n // We matched the slot, but we didn't reuse the existing fiber, so we\n // need to delete the existing child.\n deleteChild(returnFiber, oldFiber);\n }\n }\n\n lastPlacedIndex = placeChild(newFiber, lastPlacedIndex, newIdx);\n\n if (previousNewFiber === null) {\n // TODO: Move out of the loop. This only happens for the first run.\n resultingFirstChild = newFiber;\n } else {\n // TODO: Defer siblings if we're not at the right index for this slot.\n // I.e. if we had null values before, then we want to defer this\n // for each null value. However, we also don't want to call updateSlot\n // with the previous one.\n previousNewFiber.sibling = newFiber;\n }\n\n previousNewFiber = newFiber;\n oldFiber = nextOldFiber;\n }\n\n if (newIdx === newChildren.length) {\n // We've reached the end of the new children. We can delete the rest.\n deleteRemainingChildren(returnFiber, oldFiber);\n return resultingFirstChild;\n }\n\n if (oldFiber === null) {\n // If we don't have any more existing children we can choose a fast path\n // since the rest will all be insertions.\n for (; newIdx < newChildren.length; newIdx++) {\n var _newFiber = createChild(returnFiber, newChildren[newIdx], expirationTime);\n\n if (_newFiber === null) {\n continue;\n }\n\n lastPlacedIndex = placeChild(_newFiber, lastPlacedIndex, newIdx);\n\n if (previousNewFiber === null) {\n // TODO: Move out of the loop. This only happens for the first run.\n resultingFirstChild = _newFiber;\n } else {\n previousNewFiber.sibling = _newFiber;\n }\n\n previousNewFiber = _newFiber;\n }\n\n return resultingFirstChild;\n } // Add all children to a key map for quick lookups.\n\n\n var existingChildren = mapRemainingChildren(returnFiber, oldFiber); // Keep scanning and use the map to restore deleted items as moves.\n\n for (; newIdx < newChildren.length; newIdx++) {\n var _newFiber2 = updateFromMap(existingChildren, returnFiber, newIdx, newChildren[newIdx], expirationTime);\n\n if (_newFiber2 !== null) {\n if (shouldTrackSideEffects) {\n if (_newFiber2.alternate !== null) {\n // The new fiber is a work in progress, but if there exists a\n // current, that means that we reused the fiber. We need to delete\n // it from the child list so that we don't add it to the deletion\n // list.\n existingChildren.delete(_newFiber2.key === null ? newIdx : _newFiber2.key);\n }\n }\n\n lastPlacedIndex = placeChild(_newFiber2, lastPlacedIndex, newIdx);\n\n if (previousNewFiber === null) {\n resultingFirstChild = _newFiber2;\n } else {\n previousNewFiber.sibling = _newFiber2;\n }\n\n previousNewFiber = _newFiber2;\n }\n }\n\n if (shouldTrackSideEffects) {\n // Any existing children that weren't consumed above were deleted. We need\n // to add them to the deletion list.\n existingChildren.forEach(function (child) {\n return deleteChild(returnFiber, child);\n });\n }\n\n return resultingFirstChild;\n }\n\n function reconcileChildrenIterator(returnFiber, currentFirstChild, newChildrenIterable, expirationTime) {\n // This is the same implementation as reconcileChildrenArray(),\n // but using the iterator instead.\n var iteratorFn = getIteratorFn(newChildrenIterable);\n\n if (!(typeof iteratorFn === 'function')) {\n {\n throw Error( \"An object is not an iterable. This error is likely caused by a bug in React. Please file an issue.\" );\n }\n }\n\n {\n // We don't support rendering Generators because it's a mutation.\n // See https://github.com/facebook/react/issues/12995\n if (typeof Symbol === 'function' && // $FlowFixMe Flow doesn't know about toStringTag\n newChildrenIterable[Symbol.toStringTag] === 'Generator') {\n if (!didWarnAboutGenerators) {\n error('Using Generators as children is unsupported and will likely yield ' + 'unexpected results because enumerating a generator mutates it. ' + 'You may convert it to an array with `Array.from()` or the ' + '`[...spread]` operator before rendering. Keep in mind ' + 'you might need to polyfill these features for older browsers.');\n }\n\n didWarnAboutGenerators = true;\n } // Warn about using Maps as children\n\n\n if (newChildrenIterable.entries === iteratorFn) {\n if (!didWarnAboutMaps) {\n error('Using Maps as children is unsupported and will likely yield ' + 'unexpected results. Convert it to a sequence/iterable of keyed ' + 'ReactElements instead.');\n }\n\n didWarnAboutMaps = true;\n } // First, validate keys.\n // We'll get a different iterator later for the main pass.\n\n\n var _newChildren = iteratorFn.call(newChildrenIterable);\n\n if (_newChildren) {\n var knownKeys = null;\n\n var _step = _newChildren.next();\n\n for (; !_step.done; _step = _newChildren.next()) {\n var child = _step.value;\n knownKeys = warnOnInvalidKey(child, knownKeys);\n }\n }\n }\n\n var newChildren = iteratorFn.call(newChildrenIterable);\n\n if (!(newChildren != null)) {\n {\n throw Error( \"An iterable object provided no iterator.\" );\n }\n }\n\n var resultingFirstChild = null;\n var previousNewFiber = null;\n var oldFiber = currentFirstChild;\n var lastPlacedIndex = 0;\n var newIdx = 0;\n var nextOldFiber = null;\n var step = newChildren.next();\n\n for (; oldFiber !== null && !step.done; newIdx++, step = newChildren.next()) {\n if (oldFiber.index > newIdx) {\n nextOldFiber = oldFiber;\n oldFiber = null;\n } else {\n nextOldFiber = oldFiber.sibling;\n }\n\n var newFiber = updateSlot(returnFiber, oldFiber, step.value, expirationTime);\n\n if (newFiber === null) {\n // TODO: This breaks on empty slots like null children. That's\n // unfortunate because it triggers the slow path all the time. We need\n // a better way to communicate whether this was a miss or null,\n // boolean, undefined, etc.\n if (oldFiber === null) {\n oldFiber = nextOldFiber;\n }\n\n break;\n }\n\n if (shouldTrackSideEffects) {\n if (oldFiber && newFiber.alternate === null) {\n // We matched the slot, but we didn't reuse the existing fiber, so we\n // need to delete the existing child.\n deleteChild(returnFiber, oldFiber);\n }\n }\n\n lastPlacedIndex = placeChild(newFiber, lastPlacedIndex, newIdx);\n\n if (previousNewFiber === null) {\n // TODO: Move out of the loop. This only happens for the first run.\n resultingFirstChild = newFiber;\n } else {\n // TODO: Defer siblings if we're not at the right index for this slot.\n // I.e. if we had null values before, then we want to defer this\n // for each null value. However, we also don't want to call updateSlot\n // with the previous one.\n previousNewFiber.sibling = newFiber;\n }\n\n previousNewFiber = newFiber;\n oldFiber = nextOldFiber;\n }\n\n if (step.done) {\n // We've reached the end of the new children. We can delete the rest.\n deleteRemainingChildren(returnFiber, oldFiber);\n return resultingFirstChild;\n }\n\n if (oldFiber === null) {\n // If we don't have any more existing children we can choose a fast path\n // since the rest will all be insertions.\n for (; !step.done; newIdx++, step = newChildren.next()) {\n var _newFiber3 = createChild(returnFiber, step.value, expirationTime);\n\n if (_newFiber3 === null) {\n continue;\n }\n\n lastPlacedIndex = placeChild(_newFiber3, lastPlacedIndex, newIdx);\n\n if (previousNewFiber === null) {\n // TODO: Move out of the loop. This only happens for the first run.\n resultingFirstChild = _newFiber3;\n } else {\n previousNewFiber.sibling = _newFiber3;\n }\n\n previousNewFiber = _newFiber3;\n }\n\n return resultingFirstChild;\n } // Add all children to a key map for quick lookups.\n\n\n var existingChildren = mapRemainingChildren(returnFiber, oldFiber); // Keep scanning and use the map to restore deleted items as moves.\n\n for (; !step.done; newIdx++, step = newChildren.next()) {\n var _newFiber4 = updateFromMap(existingChildren, returnFiber, newIdx, step.value, expirationTime);\n\n if (_newFiber4 !== null) {\n if (shouldTrackSideEffects) {\n if (_newFiber4.alternate !== null) {\n // The new fiber is a work in progress, but if there exists a\n // current, that means that we reused the fiber. We need to delete\n // it from the child list so that we don't add it to the deletion\n // list.\n existingChildren.delete(_newFiber4.key === null ? newIdx : _newFiber4.key);\n }\n }\n\n lastPlacedIndex = placeChild(_newFiber4, lastPlacedIndex, newIdx);\n\n if (previousNewFiber === null) {\n resultingFirstChild = _newFiber4;\n } else {\n previousNewFiber.sibling = _newFiber4;\n }\n\n previousNewFiber = _newFiber4;\n }\n }\n\n if (shouldTrackSideEffects) {\n // Any existing children that weren't consumed above were deleted. We need\n // to add them to the deletion list.\n existingChildren.forEach(function (child) {\n return deleteChild(returnFiber, child);\n });\n }\n\n return resultingFirstChild;\n }\n\n function reconcileSingleTextNode(returnFiber, currentFirstChild, textContent, expirationTime) {\n // There's no need to check for keys on text nodes since we don't have a\n // way to define them.\n if (currentFirstChild !== null && currentFirstChild.tag === HostText) {\n // We already have an existing node so let's just update it and delete\n // the rest.\n deleteRemainingChildren(returnFiber, currentFirstChild.sibling);\n var existing = useFiber(currentFirstChild, textContent);\n existing.return = returnFiber;\n return existing;\n } // The existing first child is not a text node so we need to create one\n // and delete the existing ones.\n\n\n deleteRemainingChildren(returnFiber, currentFirstChild);\n var created = createFiberFromText(textContent, returnFiber.mode, expirationTime);\n created.return = returnFiber;\n return created;\n }\n\n function reconcileSingleElement(returnFiber, currentFirstChild, element, expirationTime) {\n var key = element.key;\n var child = currentFirstChild;\n\n while (child !== null) {\n // TODO: If key === null and child.key === null, then this only applies to\n // the first item in the list.\n if (child.key === key) {\n switch (child.tag) {\n case Fragment:\n {\n if (element.type === REACT_FRAGMENT_TYPE) {\n deleteRemainingChildren(returnFiber, child.sibling);\n var existing = useFiber(child, element.props.children);\n existing.return = returnFiber;\n\n {\n existing._debugSource = element._source;\n existing._debugOwner = element._owner;\n }\n\n return existing;\n }\n\n break;\n }\n\n case Block:\n\n // We intentionally fallthrough here if enableBlocksAPI is not on.\n // eslint-disable-next-lined no-fallthrough\n\n default:\n {\n if (child.elementType === element.type || ( // Keep this check inline so it only runs on the false path:\n isCompatibleFamilyForHotReloading(child, element) )) {\n deleteRemainingChildren(returnFiber, child.sibling);\n\n var _existing3 = useFiber(child, element.props);\n\n _existing3.ref = coerceRef(returnFiber, child, element);\n _existing3.return = returnFiber;\n\n {\n _existing3._debugSource = element._source;\n _existing3._debugOwner = element._owner;\n }\n\n return _existing3;\n }\n\n break;\n }\n } // Didn't match.\n\n\n deleteRemainingChildren(returnFiber, child);\n break;\n } else {\n deleteChild(returnFiber, child);\n }\n\n child = child.sibling;\n }\n\n if (element.type === REACT_FRAGMENT_TYPE) {\n var created = createFiberFromFragment(element.props.children, returnFiber.mode, expirationTime, element.key);\n created.return = returnFiber;\n return created;\n } else {\n var _created4 = createFiberFromElement(element, returnFiber.mode, expirationTime);\n\n _created4.ref = coerceRef(returnFiber, currentFirstChild, element);\n _created4.return = returnFiber;\n return _created4;\n }\n }\n\n function reconcileSinglePortal(returnFiber, currentFirstChild, portal, expirationTime) {\n var key = portal.key;\n var child = currentFirstChild;\n\n while (child !== null) {\n // TODO: If key === null and child.key === null, then this only applies to\n // the first item in the list.\n if (child.key === key) {\n if (child.tag === HostPortal && child.stateNode.containerInfo === portal.containerInfo && child.stateNode.implementation === portal.implementation) {\n deleteRemainingChildren(returnFiber, child.sibling);\n var existing = useFiber(child, portal.children || []);\n existing.return = returnFiber;\n return existing;\n } else {\n deleteRemainingChildren(returnFiber, child);\n break;\n }\n } else {\n deleteChild(returnFiber, child);\n }\n\n child = child.sibling;\n }\n\n var created = createFiberFromPortal(portal, returnFiber.mode, expirationTime);\n created.return = returnFiber;\n return created;\n } // This API will tag the children with the side-effect of the reconciliation\n // itself. They will be added to the side-effect list as we pass through the\n // children and the parent.\n\n\n function reconcileChildFibers(returnFiber, currentFirstChild, newChild, expirationTime) {\n // This function is not recursive.\n // If the top level item is an array, we treat it as a set of children,\n // not as a fragment. Nested arrays on the other hand will be treated as\n // fragment nodes. Recursion happens at the normal flow.\n // Handle top level unkeyed fragments as if they were arrays.\n // This leads to an ambiguity between <>{[...]}</> and <>...</>.\n // We treat the ambiguous cases above the same.\n var isUnkeyedTopLevelFragment = typeof newChild === 'object' && newChild !== null && newChild.type === REACT_FRAGMENT_TYPE && newChild.key === null;\n\n if (isUnkeyedTopLevelFragment) {\n newChild = newChild.props.children;\n } // Handle object types\n\n\n var isObject = typeof newChild === 'object' && newChild !== null;\n\n if (isObject) {\n switch (newChild.$$typeof) {\n case REACT_ELEMENT_TYPE:\n return placeSingleChild(reconcileSingleElement(returnFiber, currentFirstChild, newChild, expirationTime));\n\n case REACT_PORTAL_TYPE:\n return placeSingleChild(reconcileSinglePortal(returnFiber, currentFirstChild, newChild, expirationTime));\n }\n }\n\n if (typeof newChild === 'string' || typeof newChild === 'number') {\n return placeSingleChild(reconcileSingleTextNode(returnFiber, currentFirstChild, '' + newChild, expirationTime));\n }\n\n if (isArray$1(newChild)) {\n return reconcileChildrenArray(returnFiber, currentFirstChild, newChild, expirationTime);\n }\n\n if (getIteratorFn(newChild)) {\n return reconcileChildrenIterator(returnFiber, currentFirstChild, newChild, expirationTime);\n }\n\n if (isObject) {\n throwOnInvalidObjectType(returnFiber, newChild);\n }\n\n {\n if (typeof newChild === 'function') {\n warnOnFunctionType();\n }\n }\n\n if (typeof newChild === 'undefined' && !isUnkeyedTopLevelFragment) {\n // If the new child is undefined, and the return fiber is a composite\n // component, throw an error. If Fiber return types are disabled,\n // we already threw above.\n switch (returnFiber.tag) {\n case ClassComponent:\n {\n {\n var instance = returnFiber.stateNode;\n\n if (instance.render._isMockFunction) {\n // We allow auto-mocks to proceed as if they're returning null.\n break;\n }\n }\n }\n // Intentionally fall through to the next case, which handles both\n // functions and classes\n // eslint-disable-next-lined no-fallthrough\n\n case FunctionComponent:\n {\n var Component = returnFiber.type;\n\n {\n {\n throw Error( (Component.displayName || Component.name || 'Component') + \"(...): Nothing was returned from render. This usually means a return statement is missing. Or, to render nothing, return null.\" );\n }\n }\n }\n }\n } // Remaining cases are all treated as empty.\n\n\n return deleteRemainingChildren(returnFiber, currentFirstChild);\n }\n\n return reconcileChildFibers;\n}\n\nvar reconcileChildFibers = ChildReconciler(true);\nvar mountChildFibers = ChildReconciler(false);\nfunction cloneChildFibers(current, workInProgress) {\n if (!(current === null || workInProgress.child === current.child)) {\n {\n throw Error( \"Resuming work not yet implemented.\" );\n }\n }\n\n if (workInProgress.child === null) {\n return;\n }\n\n var currentChild = workInProgress.child;\n var newChild = createWorkInProgress(currentChild, currentChild.pendingProps);\n workInProgress.child = newChild;\n newChild.return = workInProgress;\n\n while (currentChild.sibling !== null) {\n currentChild = currentChild.sibling;\n newChild = newChild.sibling = createWorkInProgress(currentChild, currentChild.pendingProps);\n newChild.return = workInProgress;\n }\n\n newChild.sibling = null;\n} // Reset a workInProgress child set to prepare it for a second pass.\n\nfunction resetChildFibers(workInProgress, renderExpirationTime) {\n var child = workInProgress.child;\n\n while (child !== null) {\n resetWorkInProgress(child, renderExpirationTime);\n child = child.sibling;\n }\n}\n\nvar NO_CONTEXT = {};\nvar contextStackCursor$1 = createCursor(NO_CONTEXT);\nvar contextFiberStackCursor = createCursor(NO_CONTEXT);\nvar rootInstanceStackCursor = createCursor(NO_CONTEXT);\n\nfunction requiredContext(c) {\n if (!(c !== NO_CONTEXT)) {\n {\n throw Error( \"Expected host context to exist. This error is likely caused by a bug in React. Please file an issue.\" );\n }\n }\n\n return c;\n}\n\nfunction getRootHostContainer() {\n var rootInstance = requiredContext(rootInstanceStackCursor.current);\n return rootInstance;\n}\n\nfunction pushHostContainer(fiber, nextRootInstance) {\n // Push current root instance onto the stack;\n // This allows us to reset root when portals are popped.\n push(rootInstanceStackCursor, nextRootInstance, fiber); // Track the context and the Fiber that provided it.\n // This enables us to pop only Fibers that provide unique contexts.\n\n push(contextFiberStackCursor, fiber, fiber); // Finally, we need to push the host context to the stack.\n // However, we can't just call getRootHostContext() and push it because\n // we'd have a different number of entries on the stack depending on\n // whether getRootHostContext() throws somewhere in renderer code or not.\n // So we push an empty value first. This lets us safely unwind on errors.\n\n push(contextStackCursor$1, NO_CONTEXT, fiber);\n var nextRootContext = getRootHostContext(nextRootInstance); // Now that we know this function doesn't throw, replace it.\n\n pop(contextStackCursor$1, fiber);\n push(contextStackCursor$1, nextRootContext, fiber);\n}\n\nfunction popHostContainer(fiber) {\n pop(contextStackCursor$1, fiber);\n pop(contextFiberStackCursor, fiber);\n pop(rootInstanceStackCursor, fiber);\n}\n\nfunction getHostContext() {\n var context = requiredContext(contextStackCursor$1.current);\n return context;\n}\n\nfunction pushHostContext(fiber) {\n var rootInstance = requiredContext(rootInstanceStackCursor.current);\n var context = requiredContext(contextStackCursor$1.current);\n var nextContext = getChildHostContext(context, fiber.type); // Don't push this Fiber's context unless it's unique.\n\n if (context === nextContext) {\n return;\n } // Track the context and the Fiber that provided it.\n // This enables us to pop only Fibers that provide unique contexts.\n\n\n push(contextFiberStackCursor, fiber, fiber);\n push(contextStackCursor$1, nextContext, fiber);\n}\n\nfunction popHostContext(fiber) {\n // Do not pop unless this Fiber provided the current context.\n // pushHostContext() only pushes Fibers that provide unique contexts.\n if (contextFiberStackCursor.current !== fiber) {\n return;\n }\n\n pop(contextStackCursor$1, fiber);\n pop(contextFiberStackCursor, fiber);\n}\n\nvar DefaultSuspenseContext = 0; // The Suspense Context is split into two parts. The lower bits is\n// inherited deeply down the subtree. The upper bits only affect\n// this immediate suspense boundary and gets reset each new\n// boundary or suspense list.\n\nvar SubtreeSuspenseContextMask = 1; // Subtree Flags:\n// InvisibleParentSuspenseContext indicates that one of our parent Suspense\n// boundaries is not currently showing visible main content.\n// Either because it is already showing a fallback or is not mounted at all.\n// We can use this to determine if it is desirable to trigger a fallback at\n// the parent. If not, then we might need to trigger undesirable boundaries\n// and/or suspend the commit to avoid hiding the parent content.\n\nvar InvisibleParentSuspenseContext = 1; // Shallow Flags:\n// ForceSuspenseFallback can be used by SuspenseList to force newly added\n// items into their fallback state during one of the render passes.\n\nvar ForceSuspenseFallback = 2;\nvar suspenseStackCursor = createCursor(DefaultSuspenseContext);\nfunction hasSuspenseContext(parentContext, flag) {\n return (parentContext & flag) !== 0;\n}\nfunction setDefaultShallowSuspenseContext(parentContext) {\n return parentContext & SubtreeSuspenseContextMask;\n}\nfunction setShallowSuspenseContext(parentContext, shallowContext) {\n return parentContext & SubtreeSuspenseContextMask | shallowContext;\n}\nfunction addSubtreeSuspenseContext(parentContext, subtreeContext) {\n return parentContext | subtreeContext;\n}\nfunction pushSuspenseContext(fiber, newContext) {\n push(suspenseStackCursor, newContext, fiber);\n}\nfunction popSuspenseContext(fiber) {\n pop(suspenseStackCursor, fiber);\n}\n\nfunction shouldCaptureSuspense(workInProgress, hasInvisibleParent) {\n // If it was the primary children that just suspended, capture and render the\n // fallback. Otherwise, don't capture and bubble to the next boundary.\n var nextState = workInProgress.memoizedState;\n\n if (nextState !== null) {\n if (nextState.dehydrated !== null) {\n // A dehydrated boundary always captures.\n return true;\n }\n\n return false;\n }\n\n var props = workInProgress.memoizedProps; // In order to capture, the Suspense component must have a fallback prop.\n\n if (props.fallback === undefined) {\n return false;\n } // Regular boundaries always capture.\n\n\n if (props.unstable_avoidThisFallback !== true) {\n return true;\n } // If it's a boundary we should avoid, then we prefer to bubble up to the\n // parent boundary if it is currently invisible.\n\n\n if (hasInvisibleParent) {\n return false;\n } // If the parent is not able to handle it, we must handle it.\n\n\n return true;\n}\nfunction findFirstSuspended(row) {\n var node = row;\n\n while (node !== null) {\n if (node.tag === SuspenseComponent) {\n var state = node.memoizedState;\n\n if (state !== null) {\n var dehydrated = state.dehydrated;\n\n if (dehydrated === null || isSuspenseInstancePending(dehydrated) || isSuspenseInstanceFallback(dehydrated)) {\n return node;\n }\n }\n } else if (node.tag === SuspenseListComponent && // revealOrder undefined can't be trusted because it don't\n // keep track of whether it suspended or not.\n node.memoizedProps.revealOrder !== undefined) {\n var didSuspend = (node.effectTag & DidCapture) !== NoEffect;\n\n if (didSuspend) {\n return node;\n }\n } else if (node.child !== null) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n\n if (node === row) {\n return null;\n }\n\n while (node.sibling === null) {\n if (node.return === null || node.return === row) {\n return null;\n }\n\n node = node.return;\n }\n\n node.sibling.return = node.return;\n node = node.sibling;\n }\n\n return null;\n}\n\nfunction createDeprecatedResponderListener(responder, props) {\n var eventResponderListener = {\n responder: responder,\n props: props\n };\n\n {\n Object.freeze(eventResponderListener);\n }\n\n return eventResponderListener;\n}\n\nvar HasEffect =\n/* */\n1; // Represents the phase in which the effect (not the clean-up) fires.\n\nvar Layout =\n/* */\n2;\nvar Passive$1 =\n/* */\n4;\n\nvar ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher,\n ReactCurrentBatchConfig$1 = ReactSharedInternals.ReactCurrentBatchConfig;\nvar didWarnAboutMismatchedHooksForComponent;\n\n{\n didWarnAboutMismatchedHooksForComponent = new Set();\n}\n\n// These are set right before calling the component.\nvar renderExpirationTime = NoWork; // The work-in-progress fiber. I've named it differently to distinguish it from\n// the work-in-progress hook.\n\nvar currentlyRenderingFiber$1 = null; // Hooks are stored as a linked list on the fiber's memoizedState field. The\n// current hook list is the list that belongs to the current fiber. The\n// work-in-progress hook list is a new list that will be added to the\n// work-in-progress fiber.\n\nvar currentHook = null;\nvar workInProgressHook = null; // Whether an update was scheduled at any point during the render phase. This\n// does not get reset if we do another render pass; only when we're completely\n// finished evaluating this component. This is an optimization so we know\n// whether we need to clear render phase updates after a throw.\n\nvar didScheduleRenderPhaseUpdate = false;\nvar RE_RENDER_LIMIT = 25; // In DEV, this is the name of the currently executing primitive hook\n\nvar currentHookNameInDev = null; // In DEV, this list ensures that hooks are called in the same order between renders.\n// The list stores the order of hooks used during the initial render (mount).\n// Subsequent renders (updates) reference this list.\n\nvar hookTypesDev = null;\nvar hookTypesUpdateIndexDev = -1; // In DEV, this tracks whether currently rendering component needs to ignore\n// the dependencies for Hooks that need them (e.g. useEffect or useMemo).\n// When true, such Hooks will always be \"remounted\". Only used during hot reload.\n\nvar ignorePreviousDependencies = false;\n\nfunction mountHookTypesDev() {\n {\n var hookName = currentHookNameInDev;\n\n if (hookTypesDev === null) {\n hookTypesDev = [hookName];\n } else {\n hookTypesDev.push(hookName);\n }\n }\n}\n\nfunction updateHookTypesDev() {\n {\n var hookName = currentHookNameInDev;\n\n if (hookTypesDev !== null) {\n hookTypesUpdateIndexDev++;\n\n if (hookTypesDev[hookTypesUpdateIndexDev] !== hookName) {\n warnOnHookMismatchInDev(hookName);\n }\n }\n }\n}\n\nfunction checkDepsAreArrayDev(deps) {\n {\n if (deps !== undefined && deps !== null && !Array.isArray(deps)) {\n // Verify deps, but only on mount to avoid extra checks.\n // It's unlikely their type would change as usually you define them inline.\n error('%s received a final argument that is not an array (instead, received `%s`). When ' + 'specified, the final argument must be an array.', currentHookNameInDev, typeof deps);\n }\n }\n}\n\nfunction warnOnHookMismatchInDev(currentHookName) {\n {\n var componentName = getComponentName(currentlyRenderingFiber$1.type);\n\n if (!didWarnAboutMismatchedHooksForComponent.has(componentName)) {\n didWarnAboutMismatchedHooksForComponent.add(componentName);\n\n if (hookTypesDev !== null) {\n var table = '';\n var secondColumnStart = 30;\n\n for (var i = 0; i <= hookTypesUpdateIndexDev; i++) {\n var oldHookName = hookTypesDev[i];\n var newHookName = i === hookTypesUpdateIndexDev ? currentHookName : oldHookName;\n var row = i + 1 + \". \" + oldHookName; // Extra space so second column lines up\n // lol @ IE not supporting String#repeat\n\n while (row.length < secondColumnStart) {\n row += ' ';\n }\n\n row += newHookName + '\\n';\n table += row;\n }\n\n error('React has detected a change in the order of Hooks called by %s. ' + 'This will lead to bugs and errors if not fixed. ' + 'For more information, read the Rules of Hooks: https://fb.me/rules-of-hooks\\n\\n' + ' Previous render Next render\\n' + ' ------------------------------------------------------\\n' + '%s' + ' ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n', componentName, table);\n }\n }\n }\n}\n\nfunction throwInvalidHookError() {\n {\n {\n throw Error( \"Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\\n1. You might have mismatching versions of React and the renderer (such as React DOM)\\n2. You might be breaking the Rules of Hooks\\n3. You might have more than one copy of React in the same app\\nSee https://fb.me/react-invalid-hook-call for tips about how to debug and fix this problem.\" );\n }\n }\n}\n\nfunction areHookInputsEqual(nextDeps, prevDeps) {\n {\n if (ignorePreviousDependencies) {\n // Only true when this component is being hot reloaded.\n return false;\n }\n }\n\n if (prevDeps === null) {\n {\n error('%s received a final argument during this render, but not during ' + 'the previous render. Even though the final argument is optional, ' + 'its type cannot change between renders.', currentHookNameInDev);\n }\n\n return false;\n }\n\n {\n // Don't bother comparing lengths in prod because these arrays should be\n // passed inline.\n if (nextDeps.length !== prevDeps.length) {\n error('The final argument passed to %s changed size between renders. The ' + 'order and size of this array must remain constant.\\n\\n' + 'Previous: %s\\n' + 'Incoming: %s', currentHookNameInDev, \"[\" + prevDeps.join(', ') + \"]\", \"[\" + nextDeps.join(', ') + \"]\");\n }\n }\n\n for (var i = 0; i < prevDeps.length && i < nextDeps.length; i++) {\n if (objectIs(nextDeps[i], prevDeps[i])) {\n continue;\n }\n\n return false;\n }\n\n return true;\n}\n\nfunction renderWithHooks(current, workInProgress, Component, props, secondArg, nextRenderExpirationTime) {\n renderExpirationTime = nextRenderExpirationTime;\n currentlyRenderingFiber$1 = workInProgress;\n\n {\n hookTypesDev = current !== null ? current._debugHookTypes : null;\n hookTypesUpdateIndexDev = -1; // Used for hot reloading:\n\n ignorePreviousDependencies = current !== null && current.type !== workInProgress.type;\n }\n\n workInProgress.memoizedState = null;\n workInProgress.updateQueue = null;\n workInProgress.expirationTime = NoWork; // The following should have already been reset\n // currentHook = null;\n // workInProgressHook = null;\n // didScheduleRenderPhaseUpdate = false;\n // TODO Warn if no hooks are used at all during mount, then some are used during update.\n // Currently we will identify the update render as a mount because memoizedState === null.\n // This is tricky because it's valid for certain types of components (e.g. React.lazy)\n // Using memoizedState to differentiate between mount/update only works if at least one stateful hook is used.\n // Non-stateful hooks (e.g. context) don't get added to memoizedState,\n // so memoizedState would be null during updates and mounts.\n\n {\n if (current !== null && current.memoizedState !== null) {\n ReactCurrentDispatcher.current = HooksDispatcherOnUpdateInDEV;\n } else if (hookTypesDev !== null) {\n // This dispatcher handles an edge case where a component is updating,\n // but no stateful hooks have been used.\n // We want to match the production code behavior (which will use HooksDispatcherOnMount),\n // but with the extra DEV validation to ensure hooks ordering hasn't changed.\n // This dispatcher does that.\n ReactCurrentDispatcher.current = HooksDispatcherOnMountWithHookTypesInDEV;\n } else {\n ReactCurrentDispatcher.current = HooksDispatcherOnMountInDEV;\n }\n }\n\n var children = Component(props, secondArg); // Check if there was a render phase update\n\n if (workInProgress.expirationTime === renderExpirationTime) {\n // Keep rendering in a loop for as long as render phase updates continue to\n // be scheduled. Use a counter to prevent infinite loops.\n var numberOfReRenders = 0;\n\n do {\n workInProgress.expirationTime = NoWork;\n\n if (!(numberOfReRenders < RE_RENDER_LIMIT)) {\n {\n throw Error( \"Too many re-renders. React limits the number of renders to prevent an infinite loop.\" );\n }\n }\n\n numberOfReRenders += 1;\n\n {\n // Even when hot reloading, allow dependencies to stabilize\n // after first render to prevent infinite render phase updates.\n ignorePreviousDependencies = false;\n } // Start over from the beginning of the list\n\n\n currentHook = null;\n workInProgressHook = null;\n workInProgress.updateQueue = null;\n\n {\n // Also validate hook order for cascading updates.\n hookTypesUpdateIndexDev = -1;\n }\n\n ReactCurrentDispatcher.current = HooksDispatcherOnRerenderInDEV ;\n children = Component(props, secondArg);\n } while (workInProgress.expirationTime === renderExpirationTime);\n } // We can assume the previous dispatcher is always this one, since we set it\n // at the beginning of the render phase and there's no re-entrancy.\n\n\n ReactCurrentDispatcher.current = ContextOnlyDispatcher;\n\n {\n workInProgress._debugHookTypes = hookTypesDev;\n } // This check uses currentHook so that it works the same in DEV and prod bundles.\n // hookTypesDev could catch more cases (e.g. context) but only in DEV bundles.\n\n\n var didRenderTooFewHooks = currentHook !== null && currentHook.next !== null;\n renderExpirationTime = NoWork;\n currentlyRenderingFiber$1 = null;\n currentHook = null;\n workInProgressHook = null;\n\n {\n currentHookNameInDev = null;\n hookTypesDev = null;\n hookTypesUpdateIndexDev = -1;\n }\n\n didScheduleRenderPhaseUpdate = false;\n\n if (!!didRenderTooFewHooks) {\n {\n throw Error( \"Rendered fewer hooks than expected. This may be caused by an accidental early return statement.\" );\n }\n }\n\n return children;\n}\nfunction bailoutHooks(current, workInProgress, expirationTime) {\n workInProgress.updateQueue = current.updateQueue;\n workInProgress.effectTag &= ~(Passive | Update);\n\n if (current.expirationTime <= expirationTime) {\n current.expirationTime = NoWork;\n }\n}\nfunction resetHooksAfterThrow() {\n // We can assume the previous dispatcher is always this one, since we set it\n // at the beginning of the render phase and there's no re-entrancy.\n ReactCurrentDispatcher.current = ContextOnlyDispatcher;\n\n if (didScheduleRenderPhaseUpdate) {\n // There were render phase updates. These are only valid for this render\n // phase, which we are now aborting. Remove the updates from the queues so\n // they do not persist to the next render. Do not remove updates from hooks\n // that weren't processed.\n //\n // Only reset the updates from the queue if it has a clone. If it does\n // not have a clone, that means it wasn't processed, and the updates were\n // scheduled before we entered the render phase.\n var hook = currentlyRenderingFiber$1.memoizedState;\n\n while (hook !== null) {\n var queue = hook.queue;\n\n if (queue !== null) {\n queue.pending = null;\n }\n\n hook = hook.next;\n }\n }\n\n renderExpirationTime = NoWork;\n currentlyRenderingFiber$1 = null;\n currentHook = null;\n workInProgressHook = null;\n\n {\n hookTypesDev = null;\n hookTypesUpdateIndexDev = -1;\n currentHookNameInDev = null;\n }\n\n didScheduleRenderPhaseUpdate = false;\n}\n\nfunction mountWorkInProgressHook() {\n var hook = {\n memoizedState: null,\n baseState: null,\n baseQueue: null,\n queue: null,\n next: null\n };\n\n if (workInProgressHook === null) {\n // This is the first hook in the list\n currentlyRenderingFiber$1.memoizedState = workInProgressHook = hook;\n } else {\n // Append to the end of the list\n workInProgressHook = workInProgressHook.next = hook;\n }\n\n return workInProgressHook;\n}\n\nfunction updateWorkInProgressHook() {\n // This function is used both for updates and for re-renders triggered by a\n // render phase update. It assumes there is either a current hook we can\n // clone, or a work-in-progress hook from a previous render pass that we can\n // use as a base. When we reach the end of the base list, we must switch to\n // the dispatcher used for mounts.\n var nextCurrentHook;\n\n if (currentHook === null) {\n var current = currentlyRenderingFiber$1.alternate;\n\n if (current !== null) {\n nextCurrentHook = current.memoizedState;\n } else {\n nextCurrentHook = null;\n }\n } else {\n nextCurrentHook = currentHook.next;\n }\n\n var nextWorkInProgressHook;\n\n if (workInProgressHook === null) {\n nextWorkInProgressHook = currentlyRenderingFiber$1.memoizedState;\n } else {\n nextWorkInProgressHook = workInProgressHook.next;\n }\n\n if (nextWorkInProgressHook !== null) {\n // There's already a work-in-progress. Reuse it.\n workInProgressHook = nextWorkInProgressHook;\n nextWorkInProgressHook = workInProgressHook.next;\n currentHook = nextCurrentHook;\n } else {\n // Clone from the current hook.\n if (!(nextCurrentHook !== null)) {\n {\n throw Error( \"Rendered more hooks than during the previous render.\" );\n }\n }\n\n currentHook = nextCurrentHook;\n var newHook = {\n memoizedState: currentHook.memoizedState,\n baseState: currentHook.baseState,\n baseQueue: currentHook.baseQueue,\n queue: currentHook.queue,\n next: null\n };\n\n if (workInProgressHook === null) {\n // This is the first hook in the list.\n currentlyRenderingFiber$1.memoizedState = workInProgressHook = newHook;\n } else {\n // Append to the end of the list.\n workInProgressHook = workInProgressHook.next = newHook;\n }\n }\n\n return workInProgressHook;\n}\n\nfunction createFunctionComponentUpdateQueue() {\n return {\n lastEffect: null\n };\n}\n\nfunction basicStateReducer(state, action) {\n // $FlowFixMe: Flow doesn't like mixed types\n return typeof action === 'function' ? action(state) : action;\n}\n\nfunction mountReducer(reducer, initialArg, init) {\n var hook = mountWorkInProgressHook();\n var initialState;\n\n if (init !== undefined) {\n initialState = init(initialArg);\n } else {\n initialState = initialArg;\n }\n\n hook.memoizedState = hook.baseState = initialState;\n var queue = hook.queue = {\n pending: null,\n dispatch: null,\n lastRenderedReducer: reducer,\n lastRenderedState: initialState\n };\n var dispatch = queue.dispatch = dispatchAction.bind(null, currentlyRenderingFiber$1, queue);\n return [hook.memoizedState, dispatch];\n}\n\nfunction updateReducer(reducer, initialArg, init) {\n var hook = updateWorkInProgressHook();\n var queue = hook.queue;\n\n if (!(queue !== null)) {\n {\n throw Error( \"Should have a queue. This is likely a bug in React. Please file an issue.\" );\n }\n }\n\n queue.lastRenderedReducer = reducer;\n var current = currentHook; // The last rebase update that is NOT part of the base state.\n\n var baseQueue = current.baseQueue; // The last pending update that hasn't been processed yet.\n\n var pendingQueue = queue.pending;\n\n if (pendingQueue !== null) {\n // We have new updates that haven't been processed yet.\n // We'll add them to the base queue.\n if (baseQueue !== null) {\n // Merge the pending queue and the base queue.\n var baseFirst = baseQueue.next;\n var pendingFirst = pendingQueue.next;\n baseQueue.next = pendingFirst;\n pendingQueue.next = baseFirst;\n }\n\n current.baseQueue = baseQueue = pendingQueue;\n queue.pending = null;\n }\n\n if (baseQueue !== null) {\n // We have a queue to process.\n var first = baseQueue.next;\n var newState = current.baseState;\n var newBaseState = null;\n var newBaseQueueFirst = null;\n var newBaseQueueLast = null;\n var update = first;\n\n do {\n var updateExpirationTime = update.expirationTime;\n\n if (updateExpirationTime < renderExpirationTime) {\n // Priority is insufficient. Skip this update. If this is the first\n // skipped update, the previous update/state is the new base\n // update/state.\n var clone = {\n expirationTime: update.expirationTime,\n suspenseConfig: update.suspenseConfig,\n action: update.action,\n eagerReducer: update.eagerReducer,\n eagerState: update.eagerState,\n next: null\n };\n\n if (newBaseQueueLast === null) {\n newBaseQueueFirst = newBaseQueueLast = clone;\n newBaseState = newState;\n } else {\n newBaseQueueLast = newBaseQueueLast.next = clone;\n } // Update the remaining priority in the queue.\n\n\n if (updateExpirationTime > currentlyRenderingFiber$1.expirationTime) {\n currentlyRenderingFiber$1.expirationTime = updateExpirationTime;\n markUnprocessedUpdateTime(updateExpirationTime);\n }\n } else {\n // This update does have sufficient priority.\n if (newBaseQueueLast !== null) {\n var _clone = {\n expirationTime: Sync,\n // This update is going to be committed so we never want uncommit it.\n suspenseConfig: update.suspenseConfig,\n action: update.action,\n eagerReducer: update.eagerReducer,\n eagerState: update.eagerState,\n next: null\n };\n newBaseQueueLast = newBaseQueueLast.next = _clone;\n } // Mark the event time of this update as relevant to this render pass.\n // TODO: This should ideally use the true event time of this update rather than\n // its priority which is a derived and not reverseable value.\n // TODO: We should skip this update if it was already committed but currently\n // we have no way of detecting the difference between a committed and suspended\n // update here.\n\n\n markRenderEventTimeAndConfig(updateExpirationTime, update.suspenseConfig); // Process this update.\n\n if (update.eagerReducer === reducer) {\n // If this update was processed eagerly, and its reducer matches the\n // current reducer, we can use the eagerly computed state.\n newState = update.eagerState;\n } else {\n var action = update.action;\n newState = reducer(newState, action);\n }\n }\n\n update = update.next;\n } while (update !== null && update !== first);\n\n if (newBaseQueueLast === null) {\n newBaseState = newState;\n } else {\n newBaseQueueLast.next = newBaseQueueFirst;\n } // Mark that the fiber performed work, but only if the new state is\n // different from the current state.\n\n\n if (!objectIs(newState, hook.memoizedState)) {\n markWorkInProgressReceivedUpdate();\n }\n\n hook.memoizedState = newState;\n hook.baseState = newBaseState;\n hook.baseQueue = newBaseQueueLast;\n queue.lastRenderedState = newState;\n }\n\n var dispatch = queue.dispatch;\n return [hook.memoizedState, dispatch];\n}\n\nfunction rerenderReducer(reducer, initialArg, init) {\n var hook = updateWorkInProgressHook();\n var queue = hook.queue;\n\n if (!(queue !== null)) {\n {\n throw Error( \"Should have a queue. This is likely a bug in React. Please file an issue.\" );\n }\n }\n\n queue.lastRenderedReducer = reducer; // This is a re-render. Apply the new render phase updates to the previous\n // work-in-progress hook.\n\n var dispatch = queue.dispatch;\n var lastRenderPhaseUpdate = queue.pending;\n var newState = hook.memoizedState;\n\n if (lastRenderPhaseUpdate !== null) {\n // The queue doesn't persist past this render pass.\n queue.pending = null;\n var firstRenderPhaseUpdate = lastRenderPhaseUpdate.next;\n var update = firstRenderPhaseUpdate;\n\n do {\n // Process this render phase update. We don't have to check the\n // priority because it will always be the same as the current\n // render's.\n var action = update.action;\n newState = reducer(newState, action);\n update = update.next;\n } while (update !== firstRenderPhaseUpdate); // Mark that the fiber performed work, but only if the new state is\n // different from the current state.\n\n\n if (!objectIs(newState, hook.memoizedState)) {\n markWorkInProgressReceivedUpdate();\n }\n\n hook.memoizedState = newState; // Don't persist the state accumulated from the render phase updates to\n // the base state unless the queue is empty.\n // TODO: Not sure if this is the desired semantics, but it's what we\n // do for gDSFP. I can't remember why.\n\n if (hook.baseQueue === null) {\n hook.baseState = newState;\n }\n\n queue.lastRenderedState = newState;\n }\n\n return [newState, dispatch];\n}\n\nfunction mountState(initialState) {\n var hook = mountWorkInProgressHook();\n\n if (typeof initialState === 'function') {\n // $FlowFixMe: Flow doesn't like mixed types\n initialState = initialState();\n }\n\n hook.memoizedState = hook.baseState = initialState;\n var queue = hook.queue = {\n pending: null,\n dispatch: null,\n lastRenderedReducer: basicStateReducer,\n lastRenderedState: initialState\n };\n var dispatch = queue.dispatch = dispatchAction.bind(null, currentlyRenderingFiber$1, queue);\n return [hook.memoizedState, dispatch];\n}\n\nfunction updateState(initialState) {\n return updateReducer(basicStateReducer);\n}\n\nfunction rerenderState(initialState) {\n return rerenderReducer(basicStateReducer);\n}\n\nfunction pushEffect(tag, create, destroy, deps) {\n var effect = {\n tag: tag,\n create: create,\n destroy: destroy,\n deps: deps,\n // Circular\n next: null\n };\n var componentUpdateQueue = currentlyRenderingFiber$1.updateQueue;\n\n if (componentUpdateQueue === null) {\n componentUpdateQueue = createFunctionComponentUpdateQueue();\n currentlyRenderingFiber$1.updateQueue = componentUpdateQueue;\n componentUpdateQueue.lastEffect = effect.next = effect;\n } else {\n var lastEffect = componentUpdateQueue.lastEffect;\n\n if (lastEffect === null) {\n componentUpdateQueue.lastEffect = effect.next = effect;\n } else {\n var firstEffect = lastEffect.next;\n lastEffect.next = effect;\n effect.next = firstEffect;\n componentUpdateQueue.lastEffect = effect;\n }\n }\n\n return effect;\n}\n\nfunction mountRef(initialValue) {\n var hook = mountWorkInProgressHook();\n var ref = {\n current: initialValue\n };\n\n {\n Object.seal(ref);\n }\n\n hook.memoizedState = ref;\n return ref;\n}\n\nfunction updateRef(initialValue) {\n var hook = updateWorkInProgressHook();\n return hook.memoizedState;\n}\n\nfunction mountEffectImpl(fiberEffectTag, hookEffectTag, create, deps) {\n var hook = mountWorkInProgressHook();\n var nextDeps = deps === undefined ? null : deps;\n currentlyRenderingFiber$1.effectTag |= fiberEffectTag;\n hook.memoizedState = pushEffect(HasEffect | hookEffectTag, create, undefined, nextDeps);\n}\n\nfunction updateEffectImpl(fiberEffectTag, hookEffectTag, create, deps) {\n var hook = updateWorkInProgressHook();\n var nextDeps = deps === undefined ? null : deps;\n var destroy = undefined;\n\n if (currentHook !== null) {\n var prevEffect = currentHook.memoizedState;\n destroy = prevEffect.destroy;\n\n if (nextDeps !== null) {\n var prevDeps = prevEffect.deps;\n\n if (areHookInputsEqual(nextDeps, prevDeps)) {\n pushEffect(hookEffectTag, create, destroy, nextDeps);\n return;\n }\n }\n }\n\n currentlyRenderingFiber$1.effectTag |= fiberEffectTag;\n hook.memoizedState = pushEffect(HasEffect | hookEffectTag, create, destroy, nextDeps);\n}\n\nfunction mountEffect(create, deps) {\n {\n // $FlowExpectedError - jest isn't a global, and isn't recognized outside of tests\n if ('undefined' !== typeof jest) {\n warnIfNotCurrentlyActingEffectsInDEV(currentlyRenderingFiber$1);\n }\n }\n\n return mountEffectImpl(Update | Passive, Passive$1, create, deps);\n}\n\nfunction updateEffect(create, deps) {\n {\n // $FlowExpectedError - jest isn't a global, and isn't recognized outside of tests\n if ('undefined' !== typeof jest) {\n warnIfNotCurrentlyActingEffectsInDEV(currentlyRenderingFiber$1);\n }\n }\n\n return updateEffectImpl(Update | Passive, Passive$1, create, deps);\n}\n\nfunction mountLayoutEffect(create, deps) {\n return mountEffectImpl(Update, Layout, create, deps);\n}\n\nfunction updateLayoutEffect(create, deps) {\n return updateEffectImpl(Update, Layout, create, deps);\n}\n\nfunction imperativeHandleEffect(create, ref) {\n if (typeof ref === 'function') {\n var refCallback = ref;\n\n var _inst = create();\n\n refCallback(_inst);\n return function () {\n refCallback(null);\n };\n } else if (ref !== null && ref !== undefined) {\n var refObject = ref;\n\n {\n if (!refObject.hasOwnProperty('current')) {\n error('Expected useImperativeHandle() first argument to either be a ' + 'ref callback or React.createRef() object. Instead received: %s.', 'an object with keys {' + Object.keys(refObject).join(', ') + '}');\n }\n }\n\n var _inst2 = create();\n\n refObject.current = _inst2;\n return function () {\n refObject.current = null;\n };\n }\n}\n\nfunction mountImperativeHandle(ref, create, deps) {\n {\n if (typeof create !== 'function') {\n error('Expected useImperativeHandle() second argument to be a function ' + 'that creates a handle. Instead received: %s.', create !== null ? typeof create : 'null');\n }\n } // TODO: If deps are provided, should we skip comparing the ref itself?\n\n\n var effectDeps = deps !== null && deps !== undefined ? deps.concat([ref]) : null;\n return mountEffectImpl(Update, Layout, imperativeHandleEffect.bind(null, create, ref), effectDeps);\n}\n\nfunction updateImperativeHandle(ref, create, deps) {\n {\n if (typeof create !== 'function') {\n error('Expected useImperativeHandle() second argument to be a function ' + 'that creates a handle. Instead received: %s.', create !== null ? typeof create : 'null');\n }\n } // TODO: If deps are provided, should we skip comparing the ref itself?\n\n\n var effectDeps = deps !== null && deps !== undefined ? deps.concat([ref]) : null;\n return updateEffectImpl(Update, Layout, imperativeHandleEffect.bind(null, create, ref), effectDeps);\n}\n\nfunction mountDebugValue(value, formatterFn) {// This hook is normally a no-op.\n // The react-debug-hooks package injects its own implementation\n // so that e.g. DevTools can display custom hook values.\n}\n\nvar updateDebugValue = mountDebugValue;\n\nfunction mountCallback(callback, deps) {\n var hook = mountWorkInProgressHook();\n var nextDeps = deps === undefined ? null : deps;\n hook.memoizedState = [callback, nextDeps];\n return callback;\n}\n\nfunction updateCallback(callback, deps) {\n var hook = updateWorkInProgressHook();\n var nextDeps = deps === undefined ? null : deps;\n var prevState = hook.memoizedState;\n\n if (prevState !== null) {\n if (nextDeps !== null) {\n var prevDeps = prevState[1];\n\n if (areHookInputsEqual(nextDeps, prevDeps)) {\n return prevState[0];\n }\n }\n }\n\n hook.memoizedState = [callback, nextDeps];\n return callback;\n}\n\nfunction mountMemo(nextCreate, deps) {\n var hook = mountWorkInProgressHook();\n var nextDeps = deps === undefined ? null : deps;\n var nextValue = nextCreate();\n hook.memoizedState = [nextValue, nextDeps];\n return nextValue;\n}\n\nfunction updateMemo(nextCreate, deps) {\n var hook = updateWorkInProgressHook();\n var nextDeps = deps === undefined ? null : deps;\n var prevState = hook.memoizedState;\n\n if (prevState !== null) {\n // Assume these are defined. If they're not, areHookInputsEqual will warn.\n if (nextDeps !== null) {\n var prevDeps = prevState[1];\n\n if (areHookInputsEqual(nextDeps, prevDeps)) {\n return prevState[0];\n }\n }\n }\n\n var nextValue = nextCreate();\n hook.memoizedState = [nextValue, nextDeps];\n return nextValue;\n}\n\nfunction mountDeferredValue(value, config) {\n var _mountState = mountState(value),\n prevValue = _mountState[0],\n setValue = _mountState[1];\n\n mountEffect(function () {\n var previousConfig = ReactCurrentBatchConfig$1.suspense;\n ReactCurrentBatchConfig$1.suspense = config === undefined ? null : config;\n\n try {\n setValue(value);\n } finally {\n ReactCurrentBatchConfig$1.suspense = previousConfig;\n }\n }, [value, config]);\n return prevValue;\n}\n\nfunction updateDeferredValue(value, config) {\n var _updateState = updateState(),\n prevValue = _updateState[0],\n setValue = _updateState[1];\n\n updateEffect(function () {\n var previousConfig = ReactCurrentBatchConfig$1.suspense;\n ReactCurrentBatchConfig$1.suspense = config === undefined ? null : config;\n\n try {\n setValue(value);\n } finally {\n ReactCurrentBatchConfig$1.suspense = previousConfig;\n }\n }, [value, config]);\n return prevValue;\n}\n\nfunction rerenderDeferredValue(value, config) {\n var _rerenderState = rerenderState(),\n prevValue = _rerenderState[0],\n setValue = _rerenderState[1];\n\n updateEffect(function () {\n var previousConfig = ReactCurrentBatchConfig$1.suspense;\n ReactCurrentBatchConfig$1.suspense = config === undefined ? null : config;\n\n try {\n setValue(value);\n } finally {\n ReactCurrentBatchConfig$1.suspense = previousConfig;\n }\n }, [value, config]);\n return prevValue;\n}\n\nfunction startTransition(setPending, config, callback) {\n var priorityLevel = getCurrentPriorityLevel();\n runWithPriority$1(priorityLevel < UserBlockingPriority$1 ? UserBlockingPriority$1 : priorityLevel, function () {\n setPending(true);\n });\n runWithPriority$1(priorityLevel > NormalPriority ? NormalPriority : priorityLevel, function () {\n var previousConfig = ReactCurrentBatchConfig$1.suspense;\n ReactCurrentBatchConfig$1.suspense = config === undefined ? null : config;\n\n try {\n setPending(false);\n callback();\n } finally {\n ReactCurrentBatchConfig$1.suspense = previousConfig;\n }\n });\n}\n\nfunction mountTransition(config) {\n var _mountState2 = mountState(false),\n isPending = _mountState2[0],\n setPending = _mountState2[1];\n\n var start = mountCallback(startTransition.bind(null, setPending, config), [setPending, config]);\n return [start, isPending];\n}\n\nfunction updateTransition(config) {\n var _updateState2 = updateState(),\n isPending = _updateState2[0],\n setPending = _updateState2[1];\n\n var start = updateCallback(startTransition.bind(null, setPending, config), [setPending, config]);\n return [start, isPending];\n}\n\nfunction rerenderTransition(config) {\n var _rerenderState2 = rerenderState(),\n isPending = _rerenderState2[0],\n setPending = _rerenderState2[1];\n\n var start = updateCallback(startTransition.bind(null, setPending, config), [setPending, config]);\n return [start, isPending];\n}\n\nfunction dispatchAction(fiber, queue, action) {\n {\n if (typeof arguments[3] === 'function') {\n error(\"State updates from the useState() and useReducer() Hooks don't support the \" + 'second callback argument. To execute a side effect after ' + 'rendering, declare it in the component body with useEffect().');\n }\n }\n\n var currentTime = requestCurrentTimeForUpdate();\n var suspenseConfig = requestCurrentSuspenseConfig();\n var expirationTime = computeExpirationForFiber(currentTime, fiber, suspenseConfig);\n var update = {\n expirationTime: expirationTime,\n suspenseConfig: suspenseConfig,\n action: action,\n eagerReducer: null,\n eagerState: null,\n next: null\n };\n\n {\n update.priority = getCurrentPriorityLevel();\n } // Append the update to the end of the list.\n\n\n var pending = queue.pending;\n\n if (pending === null) {\n // This is the first update. Create a circular list.\n update.next = update;\n } else {\n update.next = pending.next;\n pending.next = update;\n }\n\n queue.pending = update;\n var alternate = fiber.alternate;\n\n if (fiber === currentlyRenderingFiber$1 || alternate !== null && alternate === currentlyRenderingFiber$1) {\n // This is a render phase update. Stash it in a lazily-created map of\n // queue -> linked list of updates. After this render pass, we'll restart\n // and apply the stashed updates on top of the work-in-progress hook.\n didScheduleRenderPhaseUpdate = true;\n update.expirationTime = renderExpirationTime;\n currentlyRenderingFiber$1.expirationTime = renderExpirationTime;\n } else {\n if (fiber.expirationTime === NoWork && (alternate === null || alternate.expirationTime === NoWork)) {\n // The queue is currently empty, which means we can eagerly compute the\n // next state before entering the render phase. If the new state is the\n // same as the current state, we may be able to bail out entirely.\n var lastRenderedReducer = queue.lastRenderedReducer;\n\n if (lastRenderedReducer !== null) {\n var prevDispatcher;\n\n {\n prevDispatcher = ReactCurrentDispatcher.current;\n ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n }\n\n try {\n var currentState = queue.lastRenderedState;\n var eagerState = lastRenderedReducer(currentState, action); // Stash the eagerly computed state, and the reducer used to compute\n // it, on the update object. If the reducer hasn't changed by the\n // time we enter the render phase, then the eager state can be used\n // without calling the reducer again.\n\n update.eagerReducer = lastRenderedReducer;\n update.eagerState = eagerState;\n\n if (objectIs(eagerState, currentState)) {\n // Fast path. We can bail out without scheduling React to re-render.\n // It's still possible that we'll need to rebase this update later,\n // if the component re-renders for a different reason and by that\n // time the reducer has changed.\n return;\n }\n } catch (error) {// Suppress the error. It will throw again in the render phase.\n } finally {\n {\n ReactCurrentDispatcher.current = prevDispatcher;\n }\n }\n }\n }\n\n {\n // $FlowExpectedError - jest isn't a global, and isn't recognized outside of tests\n if ('undefined' !== typeof jest) {\n warnIfNotScopedWithMatchingAct(fiber);\n warnIfNotCurrentlyActingUpdatesInDev(fiber);\n }\n }\n\n scheduleWork(fiber, expirationTime);\n }\n}\n\nvar ContextOnlyDispatcher = {\n readContext: readContext,\n useCallback: throwInvalidHookError,\n useContext: throwInvalidHookError,\n useEffect: throwInvalidHookError,\n useImperativeHandle: throwInvalidHookError,\n useLayoutEffect: throwInvalidHookError,\n useMemo: throwInvalidHookError,\n useReducer: throwInvalidHookError,\n useRef: throwInvalidHookError,\n useState: throwInvalidHookError,\n useDebugValue: throwInvalidHookError,\n useResponder: throwInvalidHookError,\n useDeferredValue: throwInvalidHookError,\n useTransition: throwInvalidHookError\n};\nvar HooksDispatcherOnMountInDEV = null;\nvar HooksDispatcherOnMountWithHookTypesInDEV = null;\nvar HooksDispatcherOnUpdateInDEV = null;\nvar HooksDispatcherOnRerenderInDEV = null;\nvar InvalidNestedHooksDispatcherOnMountInDEV = null;\nvar InvalidNestedHooksDispatcherOnUpdateInDEV = null;\nvar InvalidNestedHooksDispatcherOnRerenderInDEV = null;\n\n{\n var warnInvalidContextAccess = function () {\n error('Context can only be read while React is rendering. ' + 'In classes, you can read it in the render method or getDerivedStateFromProps. ' + 'In function components, you can read it directly in the function body, but not ' + 'inside Hooks like useReducer() or useMemo().');\n };\n\n var warnInvalidHookAccess = function () {\n error('Do not call Hooks inside useEffect(...), useMemo(...), or other built-in Hooks. ' + 'You can only call Hooks at the top level of your React function. ' + 'For more information, see ' + 'https://fb.me/rules-of-hooks');\n };\n\n HooksDispatcherOnMountInDEV = {\n readContext: function (context, observedBits) {\n return readContext(context, observedBits);\n },\n useCallback: function (callback, deps) {\n currentHookNameInDev = 'useCallback';\n mountHookTypesDev();\n checkDepsAreArrayDev(deps);\n return mountCallback(callback, deps);\n },\n useContext: function (context, observedBits) {\n currentHookNameInDev = 'useContext';\n mountHookTypesDev();\n return readContext(context, observedBits);\n },\n useEffect: function (create, deps) {\n currentHookNameInDev = 'useEffect';\n mountHookTypesDev();\n checkDepsAreArrayDev(deps);\n return mountEffect(create, deps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = 'useImperativeHandle';\n mountHookTypesDev();\n checkDepsAreArrayDev(deps);\n return mountImperativeHandle(ref, create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = 'useLayoutEffect';\n mountHookTypesDev();\n checkDepsAreArrayDev(deps);\n return mountLayoutEffect(create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = 'useMemo';\n mountHookTypesDev();\n checkDepsAreArrayDev(deps);\n var prevDispatcher = ReactCurrentDispatcher.current;\n ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n try {\n return mountMemo(create, deps);\n } finally {\n ReactCurrentDispatcher.current = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = 'useReducer';\n mountHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher.current;\n ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n try {\n return mountReducer(reducer, initialArg, init);\n } finally {\n ReactCurrentDispatcher.current = prevDispatcher;\n }\n },\n useRef: function (initialValue) {\n currentHookNameInDev = 'useRef';\n mountHookTypesDev();\n return mountRef(initialValue);\n },\n useState: function (initialState) {\n currentHookNameInDev = 'useState';\n mountHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher.current;\n ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n try {\n return mountState(initialState);\n } finally {\n ReactCurrentDispatcher.current = prevDispatcher;\n }\n },\n useDebugValue: function (value, formatterFn) {\n currentHookNameInDev = 'useDebugValue';\n mountHookTypesDev();\n return mountDebugValue();\n },\n useResponder: function (responder, props) {\n currentHookNameInDev = 'useResponder';\n mountHookTypesDev();\n return createDeprecatedResponderListener(responder, props);\n },\n useDeferredValue: function (value, config) {\n currentHookNameInDev = 'useDeferredValue';\n mountHookTypesDev();\n return mountDeferredValue(value, config);\n },\n useTransition: function (config) {\n currentHookNameInDev = 'useTransition';\n mountHookTypesDev();\n return mountTransition(config);\n }\n };\n HooksDispatcherOnMountWithHookTypesInDEV = {\n readContext: function (context, observedBits) {\n return readContext(context, observedBits);\n },\n useCallback: function (callback, deps) {\n currentHookNameInDev = 'useCallback';\n updateHookTypesDev();\n return mountCallback(callback, deps);\n },\n useContext: function (context, observedBits) {\n currentHookNameInDev = 'useContext';\n updateHookTypesDev();\n return readContext(context, observedBits);\n },\n useEffect: function (create, deps) {\n currentHookNameInDev = 'useEffect';\n updateHookTypesDev();\n return mountEffect(create, deps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = 'useImperativeHandle';\n updateHookTypesDev();\n return mountImperativeHandle(ref, create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = 'useLayoutEffect';\n updateHookTypesDev();\n return mountLayoutEffect(create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = 'useMemo';\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher.current;\n ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n try {\n return mountMemo(create, deps);\n } finally {\n ReactCurrentDispatcher.current = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = 'useReducer';\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher.current;\n ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n try {\n return mountReducer(reducer, initialArg, init);\n } finally {\n ReactCurrentDispatcher.current = prevDispatcher;\n }\n },\n useRef: function (initialValue) {\n currentHookNameInDev = 'useRef';\n updateHookTypesDev();\n return mountRef(initialValue);\n },\n useState: function (initialState) {\n currentHookNameInDev = 'useState';\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher.current;\n ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n try {\n return mountState(initialState);\n } finally {\n ReactCurrentDispatcher.current = prevDispatcher;\n }\n },\n useDebugValue: function (value, formatterFn) {\n currentHookNameInDev = 'useDebugValue';\n updateHookTypesDev();\n return mountDebugValue();\n },\n useResponder: function (responder, props) {\n currentHookNameInDev = 'useResponder';\n updateHookTypesDev();\n return createDeprecatedResponderListener(responder, props);\n },\n useDeferredValue: function (value, config) {\n currentHookNameInDev = 'useDeferredValue';\n updateHookTypesDev();\n return mountDeferredValue(value, config);\n },\n useTransition: function (config) {\n currentHookNameInDev = 'useTransition';\n updateHookTypesDev();\n return mountTransition(config);\n }\n };\n HooksDispatcherOnUpdateInDEV = {\n readContext: function (context, observedBits) {\n return readContext(context, observedBits);\n },\n useCallback: function (callback, deps) {\n currentHookNameInDev = 'useCallback';\n updateHookTypesDev();\n return updateCallback(callback, deps);\n },\n useContext: function (context, observedBits) {\n currentHookNameInDev = 'useContext';\n updateHookTypesDev();\n return readContext(context, observedBits);\n },\n useEffect: function (create, deps) {\n currentHookNameInDev = 'useEffect';\n updateHookTypesDev();\n return updateEffect(create, deps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = 'useImperativeHandle';\n updateHookTypesDev();\n return updateImperativeHandle(ref, create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = 'useLayoutEffect';\n updateHookTypesDev();\n return updateLayoutEffect(create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = 'useMemo';\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher.current;\n ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n try {\n return updateMemo(create, deps);\n } finally {\n ReactCurrentDispatcher.current = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = 'useReducer';\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher.current;\n ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n try {\n return updateReducer(reducer, initialArg, init);\n } finally {\n ReactCurrentDispatcher.current = prevDispatcher;\n }\n },\n useRef: function (initialValue) {\n currentHookNameInDev = 'useRef';\n updateHookTypesDev();\n return updateRef();\n },\n useState: function (initialState) {\n currentHookNameInDev = 'useState';\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher.current;\n ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n try {\n return updateState(initialState);\n } finally {\n ReactCurrentDispatcher.current = prevDispatcher;\n }\n },\n useDebugValue: function (value, formatterFn) {\n currentHookNameInDev = 'useDebugValue';\n updateHookTypesDev();\n return updateDebugValue();\n },\n useResponder: function (responder, props) {\n currentHookNameInDev = 'useResponder';\n updateHookTypesDev();\n return createDeprecatedResponderListener(responder, props);\n },\n useDeferredValue: function (value, config) {\n currentHookNameInDev = 'useDeferredValue';\n updateHookTypesDev();\n return updateDeferredValue(value, config);\n },\n useTransition: function (config) {\n currentHookNameInDev = 'useTransition';\n updateHookTypesDev();\n return updateTransition(config);\n }\n };\n HooksDispatcherOnRerenderInDEV = {\n readContext: function (context, observedBits) {\n return readContext(context, observedBits);\n },\n useCallback: function (callback, deps) {\n currentHookNameInDev = 'useCallback';\n updateHookTypesDev();\n return updateCallback(callback, deps);\n },\n useContext: function (context, observedBits) {\n currentHookNameInDev = 'useContext';\n updateHookTypesDev();\n return readContext(context, observedBits);\n },\n useEffect: function (create, deps) {\n currentHookNameInDev = 'useEffect';\n updateHookTypesDev();\n return updateEffect(create, deps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = 'useImperativeHandle';\n updateHookTypesDev();\n return updateImperativeHandle(ref, create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = 'useLayoutEffect';\n updateHookTypesDev();\n return updateLayoutEffect(create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = 'useMemo';\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher.current;\n ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnRerenderInDEV;\n\n try {\n return updateMemo(create, deps);\n } finally {\n ReactCurrentDispatcher.current = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = 'useReducer';\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher.current;\n ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnRerenderInDEV;\n\n try {\n return rerenderReducer(reducer, initialArg, init);\n } finally {\n ReactCurrentDispatcher.current = prevDispatcher;\n }\n },\n useRef: function (initialValue) {\n currentHookNameInDev = 'useRef';\n updateHookTypesDev();\n return updateRef();\n },\n useState: function (initialState) {\n currentHookNameInDev = 'useState';\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher.current;\n ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnRerenderInDEV;\n\n try {\n return rerenderState(initialState);\n } finally {\n ReactCurrentDispatcher.current = prevDispatcher;\n }\n },\n useDebugValue: function (value, formatterFn) {\n currentHookNameInDev = 'useDebugValue';\n updateHookTypesDev();\n return updateDebugValue();\n },\n useResponder: function (responder, props) {\n currentHookNameInDev = 'useResponder';\n updateHookTypesDev();\n return createDeprecatedResponderListener(responder, props);\n },\n useDeferredValue: function (value, config) {\n currentHookNameInDev = 'useDeferredValue';\n updateHookTypesDev();\n return rerenderDeferredValue(value, config);\n },\n useTransition: function (config) {\n currentHookNameInDev = 'useTransition';\n updateHookTypesDev();\n return rerenderTransition(config);\n }\n };\n InvalidNestedHooksDispatcherOnMountInDEV = {\n readContext: function (context, observedBits) {\n warnInvalidContextAccess();\n return readContext(context, observedBits);\n },\n useCallback: function (callback, deps) {\n currentHookNameInDev = 'useCallback';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountCallback(callback, deps);\n },\n useContext: function (context, observedBits) {\n currentHookNameInDev = 'useContext';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return readContext(context, observedBits);\n },\n useEffect: function (create, deps) {\n currentHookNameInDev = 'useEffect';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountEffect(create, deps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = 'useImperativeHandle';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountImperativeHandle(ref, create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = 'useLayoutEffect';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountLayoutEffect(create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = 'useMemo';\n warnInvalidHookAccess();\n mountHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher.current;\n ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n try {\n return mountMemo(create, deps);\n } finally {\n ReactCurrentDispatcher.current = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = 'useReducer';\n warnInvalidHookAccess();\n mountHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher.current;\n ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n try {\n return mountReducer(reducer, initialArg, init);\n } finally {\n ReactCurrentDispatcher.current = prevDispatcher;\n }\n },\n useRef: function (initialValue) {\n currentHookNameInDev = 'useRef';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountRef(initialValue);\n },\n useState: function (initialState) {\n currentHookNameInDev = 'useState';\n warnInvalidHookAccess();\n mountHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher.current;\n ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnMountInDEV;\n\n try {\n return mountState(initialState);\n } finally {\n ReactCurrentDispatcher.current = prevDispatcher;\n }\n },\n useDebugValue: function (value, formatterFn) {\n currentHookNameInDev = 'useDebugValue';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountDebugValue();\n },\n useResponder: function (responder, props) {\n currentHookNameInDev = 'useResponder';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return createDeprecatedResponderListener(responder, props);\n },\n useDeferredValue: function (value, config) {\n currentHookNameInDev = 'useDeferredValue';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountDeferredValue(value, config);\n },\n useTransition: function (config) {\n currentHookNameInDev = 'useTransition';\n warnInvalidHookAccess();\n mountHookTypesDev();\n return mountTransition(config);\n }\n };\n InvalidNestedHooksDispatcherOnUpdateInDEV = {\n readContext: function (context, observedBits) {\n warnInvalidContextAccess();\n return readContext(context, observedBits);\n },\n useCallback: function (callback, deps) {\n currentHookNameInDev = 'useCallback';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateCallback(callback, deps);\n },\n useContext: function (context, observedBits) {\n currentHookNameInDev = 'useContext';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return readContext(context, observedBits);\n },\n useEffect: function (create, deps) {\n currentHookNameInDev = 'useEffect';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateEffect(create, deps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = 'useImperativeHandle';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateImperativeHandle(ref, create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = 'useLayoutEffect';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateLayoutEffect(create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = 'useMemo';\n warnInvalidHookAccess();\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher.current;\n ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n try {\n return updateMemo(create, deps);\n } finally {\n ReactCurrentDispatcher.current = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = 'useReducer';\n warnInvalidHookAccess();\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher.current;\n ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n try {\n return updateReducer(reducer, initialArg, init);\n } finally {\n ReactCurrentDispatcher.current = prevDispatcher;\n }\n },\n useRef: function (initialValue) {\n currentHookNameInDev = 'useRef';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateRef();\n },\n useState: function (initialState) {\n currentHookNameInDev = 'useState';\n warnInvalidHookAccess();\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher.current;\n ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n try {\n return updateState(initialState);\n } finally {\n ReactCurrentDispatcher.current = prevDispatcher;\n }\n },\n useDebugValue: function (value, formatterFn) {\n currentHookNameInDev = 'useDebugValue';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateDebugValue();\n },\n useResponder: function (responder, props) {\n currentHookNameInDev = 'useResponder';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return createDeprecatedResponderListener(responder, props);\n },\n useDeferredValue: function (value, config) {\n currentHookNameInDev = 'useDeferredValue';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateDeferredValue(value, config);\n },\n useTransition: function (config) {\n currentHookNameInDev = 'useTransition';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateTransition(config);\n }\n };\n InvalidNestedHooksDispatcherOnRerenderInDEV = {\n readContext: function (context, observedBits) {\n warnInvalidContextAccess();\n return readContext(context, observedBits);\n },\n useCallback: function (callback, deps) {\n currentHookNameInDev = 'useCallback';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateCallback(callback, deps);\n },\n useContext: function (context, observedBits) {\n currentHookNameInDev = 'useContext';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return readContext(context, observedBits);\n },\n useEffect: function (create, deps) {\n currentHookNameInDev = 'useEffect';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateEffect(create, deps);\n },\n useImperativeHandle: function (ref, create, deps) {\n currentHookNameInDev = 'useImperativeHandle';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateImperativeHandle(ref, create, deps);\n },\n useLayoutEffect: function (create, deps) {\n currentHookNameInDev = 'useLayoutEffect';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateLayoutEffect(create, deps);\n },\n useMemo: function (create, deps) {\n currentHookNameInDev = 'useMemo';\n warnInvalidHookAccess();\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher.current;\n ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n try {\n return updateMemo(create, deps);\n } finally {\n ReactCurrentDispatcher.current = prevDispatcher;\n }\n },\n useReducer: function (reducer, initialArg, init) {\n currentHookNameInDev = 'useReducer';\n warnInvalidHookAccess();\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher.current;\n ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n try {\n return rerenderReducer(reducer, initialArg, init);\n } finally {\n ReactCurrentDispatcher.current = prevDispatcher;\n }\n },\n useRef: function (initialValue) {\n currentHookNameInDev = 'useRef';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateRef();\n },\n useState: function (initialState) {\n currentHookNameInDev = 'useState';\n warnInvalidHookAccess();\n updateHookTypesDev();\n var prevDispatcher = ReactCurrentDispatcher.current;\n ReactCurrentDispatcher.current = InvalidNestedHooksDispatcherOnUpdateInDEV;\n\n try {\n return rerenderState(initialState);\n } finally {\n ReactCurrentDispatcher.current = prevDispatcher;\n }\n },\n useDebugValue: function (value, formatterFn) {\n currentHookNameInDev = 'useDebugValue';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return updateDebugValue();\n },\n useResponder: function (responder, props) {\n currentHookNameInDev = 'useResponder';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return createDeprecatedResponderListener(responder, props);\n },\n useDeferredValue: function (value, config) {\n currentHookNameInDev = 'useDeferredValue';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return rerenderDeferredValue(value, config);\n },\n useTransition: function (config) {\n currentHookNameInDev = 'useTransition';\n warnInvalidHookAccess();\n updateHookTypesDev();\n return rerenderTransition(config);\n }\n };\n}\n\nvar now$1 = Scheduler.unstable_now;\nvar commitTime = 0;\nvar profilerStartTime = -1;\n\nfunction getCommitTime() {\n return commitTime;\n}\n\nfunction recordCommitTime() {\n\n commitTime = now$1();\n}\n\nfunction startProfilerTimer(fiber) {\n\n profilerStartTime = now$1();\n\n if (fiber.actualStartTime < 0) {\n fiber.actualStartTime = now$1();\n }\n}\n\nfunction stopProfilerTimerIfRunning(fiber) {\n\n profilerStartTime = -1;\n}\n\nfunction stopProfilerTimerIfRunningAndRecordDelta(fiber, overrideBaseTime) {\n\n if (profilerStartTime >= 0) {\n var elapsedTime = now$1() - profilerStartTime;\n fiber.actualDuration += elapsedTime;\n\n if (overrideBaseTime) {\n fiber.selfBaseDuration = elapsedTime;\n }\n\n profilerStartTime = -1;\n }\n}\n\n// This may have been an insertion or a hydration.\n\nvar hydrationParentFiber = null;\nvar nextHydratableInstance = null;\nvar isHydrating = false;\n\nfunction enterHydrationState(fiber) {\n\n var parentInstance = fiber.stateNode.containerInfo;\n nextHydratableInstance = getFirstHydratableChild(parentInstance);\n hydrationParentFiber = fiber;\n isHydrating = true;\n return true;\n}\n\nfunction deleteHydratableInstance(returnFiber, instance) {\n {\n switch (returnFiber.tag) {\n case HostRoot:\n didNotHydrateContainerInstance(returnFiber.stateNode.containerInfo, instance);\n break;\n\n case HostComponent:\n didNotHydrateInstance(returnFiber.type, returnFiber.memoizedProps, returnFiber.stateNode, instance);\n break;\n }\n }\n\n var childToDelete = createFiberFromHostInstanceForDeletion();\n childToDelete.stateNode = instance;\n childToDelete.return = returnFiber;\n childToDelete.effectTag = Deletion; // This might seem like it belongs on progressedFirstDeletion. However,\n // these children are not part of the reconciliation list of children.\n // Even if we abort and rereconcile the children, that will try to hydrate\n // again and the nodes are still in the host tree so these will be\n // recreated.\n\n if (returnFiber.lastEffect !== null) {\n returnFiber.lastEffect.nextEffect = childToDelete;\n returnFiber.lastEffect = childToDelete;\n } else {\n returnFiber.firstEffect = returnFiber.lastEffect = childToDelete;\n }\n}\n\nfunction insertNonHydratedInstance(returnFiber, fiber) {\n fiber.effectTag = fiber.effectTag & ~Hydrating | Placement;\n\n {\n switch (returnFiber.tag) {\n case HostRoot:\n {\n var parentContainer = returnFiber.stateNode.containerInfo;\n\n switch (fiber.tag) {\n case HostComponent:\n var type = fiber.type;\n var props = fiber.pendingProps;\n didNotFindHydratableContainerInstance(parentContainer, type);\n break;\n\n case HostText:\n var text = fiber.pendingProps;\n didNotFindHydratableContainerTextInstance(parentContainer, text);\n break;\n }\n\n break;\n }\n\n case HostComponent:\n {\n var parentType = returnFiber.type;\n var parentProps = returnFiber.memoizedProps;\n var parentInstance = returnFiber.stateNode;\n\n switch (fiber.tag) {\n case HostComponent:\n var _type = fiber.type;\n var _props = fiber.pendingProps;\n didNotFindHydratableInstance(parentType, parentProps, parentInstance, _type);\n break;\n\n case HostText:\n var _text = fiber.pendingProps;\n didNotFindHydratableTextInstance(parentType, parentProps, parentInstance, _text);\n break;\n\n case SuspenseComponent:\n didNotFindHydratableSuspenseInstance(parentType, parentProps);\n break;\n }\n\n break;\n }\n\n default:\n return;\n }\n }\n}\n\nfunction tryHydrate(fiber, nextInstance) {\n switch (fiber.tag) {\n case HostComponent:\n {\n var type = fiber.type;\n var props = fiber.pendingProps;\n var instance = canHydrateInstance(nextInstance, type);\n\n if (instance !== null) {\n fiber.stateNode = instance;\n return true;\n }\n\n return false;\n }\n\n case HostText:\n {\n var text = fiber.pendingProps;\n var textInstance = canHydrateTextInstance(nextInstance, text);\n\n if (textInstance !== null) {\n fiber.stateNode = textInstance;\n return true;\n }\n\n return false;\n }\n\n case SuspenseComponent:\n {\n\n return false;\n }\n\n default:\n return false;\n }\n}\n\nfunction tryToClaimNextHydratableInstance(fiber) {\n if (!isHydrating) {\n return;\n }\n\n var nextInstance = nextHydratableInstance;\n\n if (!nextInstance) {\n // Nothing to hydrate. Make it an insertion.\n insertNonHydratedInstance(hydrationParentFiber, fiber);\n isHydrating = false;\n hydrationParentFiber = fiber;\n return;\n }\n\n var firstAttemptedInstance = nextInstance;\n\n if (!tryHydrate(fiber, nextInstance)) {\n // If we can't hydrate this instance let's try the next one.\n // We use this as a heuristic. It's based on intuition and not data so it\n // might be flawed or unnecessary.\n nextInstance = getNextHydratableSibling(firstAttemptedInstance);\n\n if (!nextInstance || !tryHydrate(fiber, nextInstance)) {\n // Nothing to hydrate. Make it an insertion.\n insertNonHydratedInstance(hydrationParentFiber, fiber);\n isHydrating = false;\n hydrationParentFiber = fiber;\n return;\n } // We matched the next one, we'll now assume that the first one was\n // superfluous and we'll delete it. Since we can't eagerly delete it\n // we'll have to schedule a deletion. To do that, this node needs a dummy\n // fiber associated with it.\n\n\n deleteHydratableInstance(hydrationParentFiber, firstAttemptedInstance);\n }\n\n hydrationParentFiber = fiber;\n nextHydratableInstance = getFirstHydratableChild(nextInstance);\n}\n\nfunction prepareToHydrateHostInstance(fiber, rootContainerInstance, hostContext) {\n\n var instance = fiber.stateNode;\n var updatePayload = hydrateInstance(instance, fiber.type, fiber.memoizedProps, rootContainerInstance, hostContext, fiber); // TODO: Type this specific to this type of component.\n\n fiber.updateQueue = updatePayload; // If the update payload indicates that there is a change or if there\n // is a new ref we mark this as an update.\n\n if (updatePayload !== null) {\n return true;\n }\n\n return false;\n}\n\nfunction prepareToHydrateHostTextInstance(fiber) {\n\n var textInstance = fiber.stateNode;\n var textContent = fiber.memoizedProps;\n var shouldUpdate = hydrateTextInstance(textInstance, textContent, fiber);\n\n {\n if (shouldUpdate) {\n // We assume that prepareToHydrateHostTextInstance is called in a context where the\n // hydration parent is the parent host component of this host text.\n var returnFiber = hydrationParentFiber;\n\n if (returnFiber !== null) {\n switch (returnFiber.tag) {\n case HostRoot:\n {\n var parentContainer = returnFiber.stateNode.containerInfo;\n didNotMatchHydratedContainerTextInstance(parentContainer, textInstance, textContent);\n break;\n }\n\n case HostComponent:\n {\n var parentType = returnFiber.type;\n var parentProps = returnFiber.memoizedProps;\n var parentInstance = returnFiber.stateNode;\n didNotMatchHydratedTextInstance(parentType, parentProps, parentInstance, textInstance, textContent);\n break;\n }\n }\n }\n }\n }\n\n return shouldUpdate;\n}\n\nfunction skipPastDehydratedSuspenseInstance(fiber) {\n\n var suspenseState = fiber.memoizedState;\n var suspenseInstance = suspenseState !== null ? suspenseState.dehydrated : null;\n\n if (!suspenseInstance) {\n {\n throw Error( \"Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue.\" );\n }\n }\n\n return getNextHydratableInstanceAfterSuspenseInstance(suspenseInstance);\n}\n\nfunction popToNextHostParent(fiber) {\n var parent = fiber.return;\n\n while (parent !== null && parent.tag !== HostComponent && parent.tag !== HostRoot && parent.tag !== SuspenseComponent) {\n parent = parent.return;\n }\n\n hydrationParentFiber = parent;\n}\n\nfunction popHydrationState(fiber) {\n\n if (fiber !== hydrationParentFiber) {\n // We're deeper than the current hydration context, inside an inserted\n // tree.\n return false;\n }\n\n if (!isHydrating) {\n // If we're not currently hydrating but we're in a hydration context, then\n // we were an insertion and now need to pop up reenter hydration of our\n // siblings.\n popToNextHostParent(fiber);\n isHydrating = true;\n return false;\n }\n\n var type = fiber.type; // If we have any remaining hydratable nodes, we need to delete them now.\n // We only do this deeper than head and body since they tend to have random\n // other nodes in them. We also ignore components with pure text content in\n // side of them.\n // TODO: Better heuristic.\n\n if (fiber.tag !== HostComponent || type !== 'head' && type !== 'body' && !shouldSetTextContent(type, fiber.memoizedProps)) {\n var nextInstance = nextHydratableInstance;\n\n while (nextInstance) {\n deleteHydratableInstance(fiber, nextInstance);\n nextInstance = getNextHydratableSibling(nextInstance);\n }\n }\n\n popToNextHostParent(fiber);\n\n if (fiber.tag === SuspenseComponent) {\n nextHydratableInstance = skipPastDehydratedSuspenseInstance(fiber);\n } else {\n nextHydratableInstance = hydrationParentFiber ? getNextHydratableSibling(fiber.stateNode) : null;\n }\n\n return true;\n}\n\nfunction resetHydrationState() {\n\n hydrationParentFiber = null;\n nextHydratableInstance = null;\n isHydrating = false;\n}\n\nvar ReactCurrentOwner$1 = ReactSharedInternals.ReactCurrentOwner;\nvar didReceiveUpdate = false;\nvar didWarnAboutBadClass;\nvar didWarnAboutModulePatternComponent;\nvar didWarnAboutContextTypeOnFunctionComponent;\nvar didWarnAboutGetDerivedStateOnFunctionComponent;\nvar didWarnAboutFunctionRefs;\nvar didWarnAboutReassigningProps;\nvar didWarnAboutRevealOrder;\nvar didWarnAboutTailOptions;\n\n{\n didWarnAboutBadClass = {};\n didWarnAboutModulePatternComponent = {};\n didWarnAboutContextTypeOnFunctionComponent = {};\n didWarnAboutGetDerivedStateOnFunctionComponent = {};\n didWarnAboutFunctionRefs = {};\n didWarnAboutReassigningProps = false;\n didWarnAboutRevealOrder = {};\n didWarnAboutTailOptions = {};\n}\n\nfunction reconcileChildren(current, workInProgress, nextChildren, renderExpirationTime) {\n if (current === null) {\n // If this is a fresh new component that hasn't been rendered yet, we\n // won't update its child set by applying minimal side-effects. Instead,\n // we will add them all to the child before it gets rendered. That means\n // we can optimize this reconciliation pass by not tracking side-effects.\n workInProgress.child = mountChildFibers(workInProgress, null, nextChildren, renderExpirationTime);\n } else {\n // If the current child is the same as the work in progress, it means that\n // we haven't yet started any work on these children. Therefore, we use\n // the clone algorithm to create a copy of all the current children.\n // If we had any progressed work already, that is invalid at this point so\n // let's throw it out.\n workInProgress.child = reconcileChildFibers(workInProgress, current.child, nextChildren, renderExpirationTime);\n }\n}\n\nfunction forceUnmountCurrentAndReconcile(current, workInProgress, nextChildren, renderExpirationTime) {\n // This function is fork of reconcileChildren. It's used in cases where we\n // want to reconcile without matching against the existing set. This has the\n // effect of all current children being unmounted; even if the type and key\n // are the same, the old child is unmounted and a new child is created.\n //\n // To do this, we're going to go through the reconcile algorithm twice. In\n // the first pass, we schedule a deletion for all the current children by\n // passing null.\n workInProgress.child = reconcileChildFibers(workInProgress, current.child, null, renderExpirationTime); // In the second pass, we mount the new children. The trick here is that we\n // pass null in place of where we usually pass the current child set. This has\n // the effect of remounting all children regardless of whether their\n // identities match.\n\n workInProgress.child = reconcileChildFibers(workInProgress, null, nextChildren, renderExpirationTime);\n}\n\nfunction updateForwardRef(current, workInProgress, Component, nextProps, renderExpirationTime) {\n // TODO: current can be non-null here even if the component\n // hasn't yet mounted. This happens after the first render suspends.\n // We'll need to figure out if this is fine or can cause issues.\n {\n if (workInProgress.type !== workInProgress.elementType) {\n // Lazy component props can't be validated in createElement\n // because they're only guaranteed to be resolved here.\n var innerPropTypes = Component.propTypes;\n\n if (innerPropTypes) {\n checkPropTypes(innerPropTypes, nextProps, // Resolved props\n 'prop', getComponentName(Component), getCurrentFiberStackInDev);\n }\n }\n }\n\n var render = Component.render;\n var ref = workInProgress.ref; // The rest is a fork of updateFunctionComponent\n\n var nextChildren;\n prepareToReadContext(workInProgress, renderExpirationTime);\n\n {\n ReactCurrentOwner$1.current = workInProgress;\n setIsRendering(true);\n nextChildren = renderWithHooks(current, workInProgress, render, nextProps, ref, renderExpirationTime);\n\n if ( workInProgress.mode & StrictMode) {\n // Only double-render components with Hooks\n if (workInProgress.memoizedState !== null) {\n nextChildren = renderWithHooks(current, workInProgress, render, nextProps, ref, renderExpirationTime);\n }\n }\n\n setIsRendering(false);\n }\n\n if (current !== null && !didReceiveUpdate) {\n bailoutHooks(current, workInProgress, renderExpirationTime);\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderExpirationTime);\n } // React DevTools reads this flag.\n\n\n workInProgress.effectTag |= PerformedWork;\n reconcileChildren(current, workInProgress, nextChildren, renderExpirationTime);\n return workInProgress.child;\n}\n\nfunction updateMemoComponent(current, workInProgress, Component, nextProps, updateExpirationTime, renderExpirationTime) {\n if (current === null) {\n var type = Component.type;\n\n if (isSimpleFunctionComponent(type) && Component.compare === null && // SimpleMemoComponent codepath doesn't resolve outer props either.\n Component.defaultProps === undefined) {\n var resolvedType = type;\n\n {\n resolvedType = resolveFunctionForHotReloading(type);\n } // If this is a plain function component without default props,\n // and with only the default shallow comparison, we upgrade it\n // to a SimpleMemoComponent to allow fast path updates.\n\n\n workInProgress.tag = SimpleMemoComponent;\n workInProgress.type = resolvedType;\n\n {\n validateFunctionComponentInDev(workInProgress, type);\n }\n\n return updateSimpleMemoComponent(current, workInProgress, resolvedType, nextProps, updateExpirationTime, renderExpirationTime);\n }\n\n {\n var innerPropTypes = type.propTypes;\n\n if (innerPropTypes) {\n // Inner memo component props aren't currently validated in createElement.\n // We could move it there, but we'd still need this for lazy code path.\n checkPropTypes(innerPropTypes, nextProps, // Resolved props\n 'prop', getComponentName(type), getCurrentFiberStackInDev);\n }\n }\n\n var child = createFiberFromTypeAndProps(Component.type, null, nextProps, null, workInProgress.mode, renderExpirationTime);\n child.ref = workInProgress.ref;\n child.return = workInProgress;\n workInProgress.child = child;\n return child;\n }\n\n {\n var _type = Component.type;\n var _innerPropTypes = _type.propTypes;\n\n if (_innerPropTypes) {\n // Inner memo component props aren't currently validated in createElement.\n // We could move it there, but we'd still need this for lazy code path.\n checkPropTypes(_innerPropTypes, nextProps, // Resolved props\n 'prop', getComponentName(_type), getCurrentFiberStackInDev);\n }\n }\n\n var currentChild = current.child; // This is always exactly one child\n\n if (updateExpirationTime < renderExpirationTime) {\n // This will be the props with resolved defaultProps,\n // unlike current.memoizedProps which will be the unresolved ones.\n var prevProps = currentChild.memoizedProps; // Default to shallow comparison\n\n var compare = Component.compare;\n compare = compare !== null ? compare : shallowEqual;\n\n if (compare(prevProps, nextProps) && current.ref === workInProgress.ref) {\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderExpirationTime);\n }\n } // React DevTools reads this flag.\n\n\n workInProgress.effectTag |= PerformedWork;\n var newChild = createWorkInProgress(currentChild, nextProps);\n newChild.ref = workInProgress.ref;\n newChild.return = workInProgress;\n workInProgress.child = newChild;\n return newChild;\n}\n\nfunction updateSimpleMemoComponent(current, workInProgress, Component, nextProps, updateExpirationTime, renderExpirationTime) {\n // TODO: current can be non-null here even if the component\n // hasn't yet mounted. This happens when the inner render suspends.\n // We'll need to figure out if this is fine or can cause issues.\n {\n if (workInProgress.type !== workInProgress.elementType) {\n // Lazy component props can't be validated in createElement\n // because they're only guaranteed to be resolved here.\n var outerMemoType = workInProgress.elementType;\n\n if (outerMemoType.$$typeof === REACT_LAZY_TYPE) {\n // We warn when you define propTypes on lazy()\n // so let's just skip over it to find memo() outer wrapper.\n // Inner props for memo are validated later.\n outerMemoType = refineResolvedLazyComponent(outerMemoType);\n }\n\n var outerPropTypes = outerMemoType && outerMemoType.propTypes;\n\n if (outerPropTypes) {\n checkPropTypes(outerPropTypes, nextProps, // Resolved (SimpleMemoComponent has no defaultProps)\n 'prop', getComponentName(outerMemoType), getCurrentFiberStackInDev);\n } // Inner propTypes will be validated in the function component path.\n\n }\n }\n\n if (current !== null) {\n var prevProps = current.memoizedProps;\n\n if (shallowEqual(prevProps, nextProps) && current.ref === workInProgress.ref && ( // Prevent bailout if the implementation changed due to hot reload.\n workInProgress.type === current.type )) {\n didReceiveUpdate = false;\n\n if (updateExpirationTime < renderExpirationTime) {\n // The pending update priority was cleared at the beginning of\n // beginWork. We're about to bail out, but there might be additional\n // updates at a lower priority. Usually, the priority level of the\n // remaining updates is accumlated during the evaluation of the\n // component (i.e. when processing the update queue). But since since\n // we're bailing out early *without* evaluating the component, we need\n // to account for it here, too. Reset to the value of the current fiber.\n // NOTE: This only applies to SimpleMemoComponent, not MemoComponent,\n // because a MemoComponent fiber does not have hooks or an update queue;\n // rather, it wraps around an inner component, which may or may not\n // contains hooks.\n // TODO: Move the reset at in beginWork out of the common path so that\n // this is no longer necessary.\n workInProgress.expirationTime = current.expirationTime;\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderExpirationTime);\n }\n }\n }\n\n return updateFunctionComponent(current, workInProgress, Component, nextProps, renderExpirationTime);\n}\n\nfunction updateFragment(current, workInProgress, renderExpirationTime) {\n var nextChildren = workInProgress.pendingProps;\n reconcileChildren(current, workInProgress, nextChildren, renderExpirationTime);\n return workInProgress.child;\n}\n\nfunction updateMode(current, workInProgress, renderExpirationTime) {\n var nextChildren = workInProgress.pendingProps.children;\n reconcileChildren(current, workInProgress, nextChildren, renderExpirationTime);\n return workInProgress.child;\n}\n\nfunction updateProfiler(current, workInProgress, renderExpirationTime) {\n {\n workInProgress.effectTag |= Update;\n }\n\n var nextProps = workInProgress.pendingProps;\n var nextChildren = nextProps.children;\n reconcileChildren(current, workInProgress, nextChildren, renderExpirationTime);\n return workInProgress.child;\n}\n\nfunction markRef(current, workInProgress) {\n var ref = workInProgress.ref;\n\n if (current === null && ref !== null || current !== null && current.ref !== ref) {\n // Schedule a Ref effect\n workInProgress.effectTag |= Ref;\n }\n}\n\nfunction updateFunctionComponent(current, workInProgress, Component, nextProps, renderExpirationTime) {\n {\n if (workInProgress.type !== workInProgress.elementType) {\n // Lazy component props can't be validated in createElement\n // because they're only guaranteed to be resolved here.\n var innerPropTypes = Component.propTypes;\n\n if (innerPropTypes) {\n checkPropTypes(innerPropTypes, nextProps, // Resolved props\n 'prop', getComponentName(Component), getCurrentFiberStackInDev);\n }\n }\n }\n\n var context;\n\n {\n var unmaskedContext = getUnmaskedContext(workInProgress, Component, true);\n context = getMaskedContext(workInProgress, unmaskedContext);\n }\n\n var nextChildren;\n prepareToReadContext(workInProgress, renderExpirationTime);\n\n {\n ReactCurrentOwner$1.current = workInProgress;\n setIsRendering(true);\n nextChildren = renderWithHooks(current, workInProgress, Component, nextProps, context, renderExpirationTime);\n\n if ( workInProgress.mode & StrictMode) {\n // Only double-render components with Hooks\n if (workInProgress.memoizedState !== null) {\n nextChildren = renderWithHooks(current, workInProgress, Component, nextProps, context, renderExpirationTime);\n }\n }\n\n setIsRendering(false);\n }\n\n if (current !== null && !didReceiveUpdate) {\n bailoutHooks(current, workInProgress, renderExpirationTime);\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderExpirationTime);\n } // React DevTools reads this flag.\n\n\n workInProgress.effectTag |= PerformedWork;\n reconcileChildren(current, workInProgress, nextChildren, renderExpirationTime);\n return workInProgress.child;\n}\n\nfunction updateClassComponent(current, workInProgress, Component, nextProps, renderExpirationTime) {\n {\n if (workInProgress.type !== workInProgress.elementType) {\n // Lazy component props can't be validated in createElement\n // because they're only guaranteed to be resolved here.\n var innerPropTypes = Component.propTypes;\n\n if (innerPropTypes) {\n checkPropTypes(innerPropTypes, nextProps, // Resolved props\n 'prop', getComponentName(Component), getCurrentFiberStackInDev);\n }\n }\n } // Push context providers early to prevent context stack mismatches.\n // During mounting we don't know the child context yet as the instance doesn't exist.\n // We will invalidate the child context in finishClassComponent() right after rendering.\n\n\n var hasContext;\n\n if (isContextProvider(Component)) {\n hasContext = true;\n pushContextProvider(workInProgress);\n } else {\n hasContext = false;\n }\n\n prepareToReadContext(workInProgress, renderExpirationTime);\n var instance = workInProgress.stateNode;\n var shouldUpdate;\n\n if (instance === null) {\n if (current !== null) {\n // A class component without an instance only mounts if it suspended\n // inside a non-concurrent tree, in an inconsistent state. We want to\n // treat it like a new mount, even though an empty version of it already\n // committed. Disconnect the alternate pointers.\n current.alternate = null;\n workInProgress.alternate = null; // Since this is conceptually a new fiber, schedule a Placement effect\n\n workInProgress.effectTag |= Placement;\n } // In the initial pass we might need to construct the instance.\n\n\n constructClassInstance(workInProgress, Component, nextProps);\n mountClassInstance(workInProgress, Component, nextProps, renderExpirationTime);\n shouldUpdate = true;\n } else if (current === null) {\n // In a resume, we'll already have an instance we can reuse.\n shouldUpdate = resumeMountClassInstance(workInProgress, Component, nextProps, renderExpirationTime);\n } else {\n shouldUpdate = updateClassInstance(current, workInProgress, Component, nextProps, renderExpirationTime);\n }\n\n var nextUnitOfWork = finishClassComponent(current, workInProgress, Component, shouldUpdate, hasContext, renderExpirationTime);\n\n {\n var inst = workInProgress.stateNode;\n\n if (inst.props !== nextProps) {\n if (!didWarnAboutReassigningProps) {\n error('It looks like %s is reassigning its own `this.props` while rendering. ' + 'This is not supported and can lead to confusing bugs.', getComponentName(workInProgress.type) || 'a component');\n }\n\n didWarnAboutReassigningProps = true;\n }\n }\n\n return nextUnitOfWork;\n}\n\nfunction finishClassComponent(current, workInProgress, Component, shouldUpdate, hasContext, renderExpirationTime) {\n // Refs should update even if shouldComponentUpdate returns false\n markRef(current, workInProgress);\n var didCaptureError = (workInProgress.effectTag & DidCapture) !== NoEffect;\n\n if (!shouldUpdate && !didCaptureError) {\n // Context providers should defer to sCU for rendering\n if (hasContext) {\n invalidateContextProvider(workInProgress, Component, false);\n }\n\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderExpirationTime);\n }\n\n var instance = workInProgress.stateNode; // Rerender\n\n ReactCurrentOwner$1.current = workInProgress;\n var nextChildren;\n\n if (didCaptureError && typeof Component.getDerivedStateFromError !== 'function') {\n // If we captured an error, but getDerivedStateFromError is not defined,\n // unmount all the children. componentDidCatch will schedule an update to\n // re-render a fallback. This is temporary until we migrate everyone to\n // the new API.\n // TODO: Warn in a future release.\n nextChildren = null;\n\n {\n stopProfilerTimerIfRunning();\n }\n } else {\n {\n setIsRendering(true);\n nextChildren = instance.render();\n\n if ( workInProgress.mode & StrictMode) {\n instance.render();\n }\n\n setIsRendering(false);\n }\n } // React DevTools reads this flag.\n\n\n workInProgress.effectTag |= PerformedWork;\n\n if (current !== null && didCaptureError) {\n // If we're recovering from an error, reconcile without reusing any of\n // the existing children. Conceptually, the normal children and the children\n // that are shown on error are two different sets, so we shouldn't reuse\n // normal children even if their identities match.\n forceUnmountCurrentAndReconcile(current, workInProgress, nextChildren, renderExpirationTime);\n } else {\n reconcileChildren(current, workInProgress, nextChildren, renderExpirationTime);\n } // Memoize state using the values we just used to render.\n // TODO: Restructure so we never read values from the instance.\n\n\n workInProgress.memoizedState = instance.state; // The context might have changed so we need to recalculate it.\n\n if (hasContext) {\n invalidateContextProvider(workInProgress, Component, true);\n }\n\n return workInProgress.child;\n}\n\nfunction pushHostRootContext(workInProgress) {\n var root = workInProgress.stateNode;\n\n if (root.pendingContext) {\n pushTopLevelContextObject(workInProgress, root.pendingContext, root.pendingContext !== root.context);\n } else if (root.context) {\n // Should always be set\n pushTopLevelContextObject(workInProgress, root.context, false);\n }\n\n pushHostContainer(workInProgress, root.containerInfo);\n}\n\nfunction updateHostRoot(current, workInProgress, renderExpirationTime) {\n pushHostRootContext(workInProgress);\n var updateQueue = workInProgress.updateQueue;\n\n if (!(current !== null && updateQueue !== null)) {\n {\n throw Error( \"If the root does not have an updateQueue, we should have already bailed out. This error is likely caused by a bug in React. Please file an issue.\" );\n }\n }\n\n var nextProps = workInProgress.pendingProps;\n var prevState = workInProgress.memoizedState;\n var prevChildren = prevState !== null ? prevState.element : null;\n cloneUpdateQueue(current, workInProgress);\n processUpdateQueue(workInProgress, nextProps, null, renderExpirationTime);\n var nextState = workInProgress.memoizedState; // Caution: React DevTools currently depends on this property\n // being called \"element\".\n\n var nextChildren = nextState.element;\n\n if (nextChildren === prevChildren) {\n // If the state is the same as before, that's a bailout because we had\n // no work that expires at this time.\n resetHydrationState();\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderExpirationTime);\n }\n\n var root = workInProgress.stateNode;\n\n if (root.hydrate && enterHydrationState(workInProgress)) {\n // If we don't have any current children this might be the first pass.\n // We always try to hydrate. If this isn't a hydration pass there won't\n // be any children to hydrate which is effectively the same thing as\n // not hydrating.\n var child = mountChildFibers(workInProgress, null, nextChildren, renderExpirationTime);\n workInProgress.child = child;\n var node = child;\n\n while (node) {\n // Mark each child as hydrating. This is a fast path to know whether this\n // tree is part of a hydrating tree. This is used to determine if a child\n // node has fully mounted yet, and for scheduling event replaying.\n // Conceptually this is similar to Placement in that a new subtree is\n // inserted into the React tree here. It just happens to not need DOM\n // mutations because it already exists.\n node.effectTag = node.effectTag & ~Placement | Hydrating;\n node = node.sibling;\n }\n } else {\n // Otherwise reset hydration state in case we aborted and resumed another\n // root.\n reconcileChildren(current, workInProgress, nextChildren, renderExpirationTime);\n resetHydrationState();\n }\n\n return workInProgress.child;\n}\n\nfunction updateHostComponent(current, workInProgress, renderExpirationTime) {\n pushHostContext(workInProgress);\n\n if (current === null) {\n tryToClaimNextHydratableInstance(workInProgress);\n }\n\n var type = workInProgress.type;\n var nextProps = workInProgress.pendingProps;\n var prevProps = current !== null ? current.memoizedProps : null;\n var nextChildren = nextProps.children;\n var isDirectTextChild = shouldSetTextContent(type, nextProps);\n\n if (isDirectTextChild) {\n // We special case a direct text child of a host node. This is a common\n // case. We won't handle it as a reified child. We will instead handle\n // this in the host environment that also has access to this prop. That\n // avoids allocating another HostText fiber and traversing it.\n nextChildren = null;\n } else if (prevProps !== null && shouldSetTextContent(type, prevProps)) {\n // If we're switching from a direct text child to a normal child, or to\n // empty, we need to schedule the text content to be reset.\n workInProgress.effectTag |= ContentReset;\n }\n\n markRef(current, workInProgress); // Check the host config to see if the children are offscreen/hidden.\n\n if (workInProgress.mode & ConcurrentMode && renderExpirationTime !== Never && shouldDeprioritizeSubtree(type, nextProps)) {\n {\n markSpawnedWork(Never);\n } // Schedule this fiber to re-render at offscreen priority. Then bailout.\n\n\n workInProgress.expirationTime = workInProgress.childExpirationTime = Never;\n return null;\n }\n\n reconcileChildren(current, workInProgress, nextChildren, renderExpirationTime);\n return workInProgress.child;\n}\n\nfunction updateHostText(current, workInProgress) {\n if (current === null) {\n tryToClaimNextHydratableInstance(workInProgress);\n } // Nothing to do here. This is terminal. We'll do the completion step\n // immediately after.\n\n\n return null;\n}\n\nfunction mountLazyComponent(_current, workInProgress, elementType, updateExpirationTime, renderExpirationTime) {\n if (_current !== null) {\n // A lazy component only mounts if it suspended inside a non-\n // concurrent tree, in an inconsistent state. We want to treat it like\n // a new mount, even though an empty version of it already committed.\n // Disconnect the alternate pointers.\n _current.alternate = null;\n workInProgress.alternate = null; // Since this is conceptually a new fiber, schedule a Placement effect\n\n workInProgress.effectTag |= Placement;\n }\n\n var props = workInProgress.pendingProps; // We can't start a User Timing measurement with correct label yet.\n // Cancel and resume right after we know the tag.\n\n cancelWorkTimer(workInProgress);\n var Component = readLazyComponentType(elementType); // Store the unwrapped component in the type.\n\n workInProgress.type = Component;\n var resolvedTag = workInProgress.tag = resolveLazyComponentTag(Component);\n startWorkTimer(workInProgress);\n var resolvedProps = resolveDefaultProps(Component, props);\n var child;\n\n switch (resolvedTag) {\n case FunctionComponent:\n {\n {\n validateFunctionComponentInDev(workInProgress, Component);\n workInProgress.type = Component = resolveFunctionForHotReloading(Component);\n }\n\n child = updateFunctionComponent(null, workInProgress, Component, resolvedProps, renderExpirationTime);\n return child;\n }\n\n case ClassComponent:\n {\n {\n workInProgress.type = Component = resolveClassForHotReloading(Component);\n }\n\n child = updateClassComponent(null, workInProgress, Component, resolvedProps, renderExpirationTime);\n return child;\n }\n\n case ForwardRef:\n {\n {\n workInProgress.type = Component = resolveForwardRefForHotReloading(Component);\n }\n\n child = updateForwardRef(null, workInProgress, Component, resolvedProps, renderExpirationTime);\n return child;\n }\n\n case MemoComponent:\n {\n {\n if (workInProgress.type !== workInProgress.elementType) {\n var outerPropTypes = Component.propTypes;\n\n if (outerPropTypes) {\n checkPropTypes(outerPropTypes, resolvedProps, // Resolved for outer only\n 'prop', getComponentName(Component), getCurrentFiberStackInDev);\n }\n }\n }\n\n child = updateMemoComponent(null, workInProgress, Component, resolveDefaultProps(Component.type, resolvedProps), // The inner type can have defaults too\n updateExpirationTime, renderExpirationTime);\n return child;\n }\n }\n\n var hint = '';\n\n {\n if (Component !== null && typeof Component === 'object' && Component.$$typeof === REACT_LAZY_TYPE) {\n hint = ' Did you wrap a component in React.lazy() more than once?';\n }\n } // This message intentionally doesn't mention ForwardRef or MemoComponent\n // because the fact that it's a separate type of work is an\n // implementation detail.\n\n\n {\n {\n throw Error( \"Element type is invalid. Received a promise that resolves to: \" + Component + \". Lazy element type must resolve to a class or function.\" + hint );\n }\n }\n}\n\nfunction mountIncompleteClassComponent(_current, workInProgress, Component, nextProps, renderExpirationTime) {\n if (_current !== null) {\n // An incomplete component only mounts if it suspended inside a non-\n // concurrent tree, in an inconsistent state. We want to treat it like\n // a new mount, even though an empty version of it already committed.\n // Disconnect the alternate pointers.\n _current.alternate = null;\n workInProgress.alternate = null; // Since this is conceptually a new fiber, schedule a Placement effect\n\n workInProgress.effectTag |= Placement;\n } // Promote the fiber to a class and try rendering again.\n\n\n workInProgress.tag = ClassComponent; // The rest of this function is a fork of `updateClassComponent`\n // Push context providers early to prevent context stack mismatches.\n // During mounting we don't know the child context yet as the instance doesn't exist.\n // We will invalidate the child context in finishClassComponent() right after rendering.\n\n var hasContext;\n\n if (isContextProvider(Component)) {\n hasContext = true;\n pushContextProvider(workInProgress);\n } else {\n hasContext = false;\n }\n\n prepareToReadContext(workInProgress, renderExpirationTime);\n constructClassInstance(workInProgress, Component, nextProps);\n mountClassInstance(workInProgress, Component, nextProps, renderExpirationTime);\n return finishClassComponent(null, workInProgress, Component, true, hasContext, renderExpirationTime);\n}\n\nfunction mountIndeterminateComponent(_current, workInProgress, Component, renderExpirationTime) {\n if (_current !== null) {\n // An indeterminate component only mounts if it suspended inside a non-\n // concurrent tree, in an inconsistent state. We want to treat it like\n // a new mount, even though an empty version of it already committed.\n // Disconnect the alternate pointers.\n _current.alternate = null;\n workInProgress.alternate = null; // Since this is conceptually a new fiber, schedule a Placement effect\n\n workInProgress.effectTag |= Placement;\n }\n\n var props = workInProgress.pendingProps;\n var context;\n\n {\n var unmaskedContext = getUnmaskedContext(workInProgress, Component, false);\n context = getMaskedContext(workInProgress, unmaskedContext);\n }\n\n prepareToReadContext(workInProgress, renderExpirationTime);\n var value;\n\n {\n if (Component.prototype && typeof Component.prototype.render === 'function') {\n var componentName = getComponentName(Component) || 'Unknown';\n\n if (!didWarnAboutBadClass[componentName]) {\n error(\"The <%s /> component appears to have a render method, but doesn't extend React.Component. \" + 'This is likely to cause errors. Change %s to extend React.Component instead.', componentName, componentName);\n\n didWarnAboutBadClass[componentName] = true;\n }\n }\n\n if (workInProgress.mode & StrictMode) {\n ReactStrictModeWarnings.recordLegacyContextWarning(workInProgress, null);\n }\n\n setIsRendering(true);\n ReactCurrentOwner$1.current = workInProgress;\n value = renderWithHooks(null, workInProgress, Component, props, context, renderExpirationTime);\n setIsRendering(false);\n } // React DevTools reads this flag.\n\n\n workInProgress.effectTag |= PerformedWork;\n\n if (typeof value === 'object' && value !== null && typeof value.render === 'function' && value.$$typeof === undefined) {\n {\n var _componentName = getComponentName(Component) || 'Unknown';\n\n if (!didWarnAboutModulePatternComponent[_componentName]) {\n error('The <%s /> component appears to be a function component that returns a class instance. ' + 'Change %s to a class that extends React.Component instead. ' + \"If you can't use a class try assigning the prototype on the function as a workaround. \" + \"`%s.prototype = React.Component.prototype`. Don't use an arrow function since it \" + 'cannot be called with `new` by React.', _componentName, _componentName, _componentName);\n\n didWarnAboutModulePatternComponent[_componentName] = true;\n }\n } // Proceed under the assumption that this is a class instance\n\n\n workInProgress.tag = ClassComponent; // Throw out any hooks that were used.\n\n workInProgress.memoizedState = null;\n workInProgress.updateQueue = null; // Push context providers early to prevent context stack mismatches.\n // During mounting we don't know the child context yet as the instance doesn't exist.\n // We will invalidate the child context in finishClassComponent() right after rendering.\n\n var hasContext = false;\n\n if (isContextProvider(Component)) {\n hasContext = true;\n pushContextProvider(workInProgress);\n } else {\n hasContext = false;\n }\n\n workInProgress.memoizedState = value.state !== null && value.state !== undefined ? value.state : null;\n initializeUpdateQueue(workInProgress);\n var getDerivedStateFromProps = Component.getDerivedStateFromProps;\n\n if (typeof getDerivedStateFromProps === 'function') {\n applyDerivedStateFromProps(workInProgress, Component, getDerivedStateFromProps, props);\n }\n\n adoptClassInstance(workInProgress, value);\n mountClassInstance(workInProgress, Component, props, renderExpirationTime);\n return finishClassComponent(null, workInProgress, Component, true, hasContext, renderExpirationTime);\n } else {\n // Proceed under the assumption that this is a function component\n workInProgress.tag = FunctionComponent;\n\n {\n\n if ( workInProgress.mode & StrictMode) {\n // Only double-render components with Hooks\n if (workInProgress.memoizedState !== null) {\n value = renderWithHooks(null, workInProgress, Component, props, context, renderExpirationTime);\n }\n }\n }\n\n reconcileChildren(null, workInProgress, value, renderExpirationTime);\n\n {\n validateFunctionComponentInDev(workInProgress, Component);\n }\n\n return workInProgress.child;\n }\n}\n\nfunction validateFunctionComponentInDev(workInProgress, Component) {\n {\n if (Component) {\n if (Component.childContextTypes) {\n error('%s(...): childContextTypes cannot be defined on a function component.', Component.displayName || Component.name || 'Component');\n }\n }\n\n if (workInProgress.ref !== null) {\n var info = '';\n var ownerName = getCurrentFiberOwnerNameInDevOrNull();\n\n if (ownerName) {\n info += '\\n\\nCheck the render method of `' + ownerName + '`.';\n }\n\n var warningKey = ownerName || workInProgress._debugID || '';\n var debugSource = workInProgress._debugSource;\n\n if (debugSource) {\n warningKey = debugSource.fileName + ':' + debugSource.lineNumber;\n }\n\n if (!didWarnAboutFunctionRefs[warningKey]) {\n didWarnAboutFunctionRefs[warningKey] = true;\n\n error('Function components cannot be given refs. ' + 'Attempts to access this ref will fail. ' + 'Did you mean to use React.forwardRef()?%s', info);\n }\n }\n\n if (typeof Component.getDerivedStateFromProps === 'function') {\n var _componentName2 = getComponentName(Component) || 'Unknown';\n\n if (!didWarnAboutGetDerivedStateOnFunctionComponent[_componentName2]) {\n error('%s: Function components do not support getDerivedStateFromProps.', _componentName2);\n\n didWarnAboutGetDerivedStateOnFunctionComponent[_componentName2] = true;\n }\n }\n\n if (typeof Component.contextType === 'object' && Component.contextType !== null) {\n var _componentName3 = getComponentName(Component) || 'Unknown';\n\n if (!didWarnAboutContextTypeOnFunctionComponent[_componentName3]) {\n error('%s: Function components do not support contextType.', _componentName3);\n\n didWarnAboutContextTypeOnFunctionComponent[_componentName3] = true;\n }\n }\n }\n}\n\nvar SUSPENDED_MARKER = {\n dehydrated: null,\n retryTime: NoWork\n};\n\nfunction shouldRemainOnFallback(suspenseContext, current, workInProgress) {\n // If the context is telling us that we should show a fallback, and we're not\n // already showing content, then we should show the fallback instead.\n return hasSuspenseContext(suspenseContext, ForceSuspenseFallback) && (current === null || current.memoizedState !== null);\n}\n\nfunction updateSuspenseComponent(current, workInProgress, renderExpirationTime) {\n var mode = workInProgress.mode;\n var nextProps = workInProgress.pendingProps; // This is used by DevTools to force a boundary to suspend.\n\n {\n if (shouldSuspend(workInProgress)) {\n workInProgress.effectTag |= DidCapture;\n }\n }\n\n var suspenseContext = suspenseStackCursor.current;\n var nextDidTimeout = false;\n var didSuspend = (workInProgress.effectTag & DidCapture) !== NoEffect;\n\n if (didSuspend || shouldRemainOnFallback(suspenseContext, current)) {\n // Something in this boundary's subtree already suspended. Switch to\n // rendering the fallback children.\n nextDidTimeout = true;\n workInProgress.effectTag &= ~DidCapture;\n } else {\n // Attempting the main content\n if (current === null || current.memoizedState !== null) {\n // This is a new mount or this boundary is already showing a fallback state.\n // Mark this subtree context as having at least one invisible parent that could\n // handle the fallback state.\n // Boundaries without fallbacks or should be avoided are not considered since\n // they cannot handle preferred fallback states.\n if (nextProps.fallback !== undefined && nextProps.unstable_avoidThisFallback !== true) {\n suspenseContext = addSubtreeSuspenseContext(suspenseContext, InvisibleParentSuspenseContext);\n }\n }\n }\n\n suspenseContext = setDefaultShallowSuspenseContext(suspenseContext);\n pushSuspenseContext(workInProgress, suspenseContext); // This next part is a bit confusing. If the children timeout, we switch to\n // showing the fallback children in place of the \"primary\" children.\n // However, we don't want to delete the primary children because then their\n // state will be lost (both the React state and the host state, e.g.\n // uncontrolled form inputs). Instead we keep them mounted and hide them.\n // Both the fallback children AND the primary children are rendered at the\n // same time. Once the primary children are un-suspended, we can delete\n // the fallback children — don't need to preserve their state.\n //\n // The two sets of children are siblings in the host environment, but\n // semantically, for purposes of reconciliation, they are two separate sets.\n // So we store them using two fragment fibers.\n //\n // However, we want to avoid allocating extra fibers for every placeholder.\n // They're only necessary when the children time out, because that's the\n // only time when both sets are mounted.\n //\n // So, the extra fragment fibers are only used if the children time out.\n // Otherwise, we render the primary children directly. This requires some\n // custom reconciliation logic to preserve the state of the primary\n // children. It's essentially a very basic form of re-parenting.\n\n if (current === null) {\n // If we're currently hydrating, try to hydrate this boundary.\n // But only if this has a fallback.\n if (nextProps.fallback !== undefined) {\n tryToClaimNextHydratableInstance(workInProgress); // This could've been a dehydrated suspense component.\n } // This is the initial mount. This branch is pretty simple because there's\n // no previous state that needs to be preserved.\n\n\n if (nextDidTimeout) {\n // Mount separate fragments for primary and fallback children.\n var nextFallbackChildren = nextProps.fallback;\n var primaryChildFragment = createFiberFromFragment(null, mode, NoWork, null);\n primaryChildFragment.return = workInProgress;\n\n if ((workInProgress.mode & BlockingMode) === NoMode) {\n // Outside of blocking mode, we commit the effects from the\n // partially completed, timed-out tree, too.\n var progressedState = workInProgress.memoizedState;\n var progressedPrimaryChild = progressedState !== null ? workInProgress.child.child : workInProgress.child;\n primaryChildFragment.child = progressedPrimaryChild;\n var progressedChild = progressedPrimaryChild;\n\n while (progressedChild !== null) {\n progressedChild.return = primaryChildFragment;\n progressedChild = progressedChild.sibling;\n }\n }\n\n var fallbackChildFragment = createFiberFromFragment(nextFallbackChildren, mode, renderExpirationTime, null);\n fallbackChildFragment.return = workInProgress;\n primaryChildFragment.sibling = fallbackChildFragment; // Skip the primary children, and continue working on the\n // fallback children.\n\n workInProgress.memoizedState = SUSPENDED_MARKER;\n workInProgress.child = primaryChildFragment;\n return fallbackChildFragment;\n } else {\n // Mount the primary children without an intermediate fragment fiber.\n var nextPrimaryChildren = nextProps.children;\n workInProgress.memoizedState = null;\n return workInProgress.child = mountChildFibers(workInProgress, null, nextPrimaryChildren, renderExpirationTime);\n }\n } else {\n // This is an update. This branch is more complicated because we need to\n // ensure the state of the primary children is preserved.\n var prevState = current.memoizedState;\n\n if (prevState !== null) {\n // wrapped in a fragment fiber.\n\n\n var currentPrimaryChildFragment = current.child;\n var currentFallbackChildFragment = currentPrimaryChildFragment.sibling;\n\n if (nextDidTimeout) {\n // Still timed out. Reuse the current primary children by cloning\n // its fragment. We're going to skip over these entirely.\n var _nextFallbackChildren2 = nextProps.fallback;\n\n var _primaryChildFragment2 = createWorkInProgress(currentPrimaryChildFragment, currentPrimaryChildFragment.pendingProps);\n\n _primaryChildFragment2.return = workInProgress;\n\n if ((workInProgress.mode & BlockingMode) === NoMode) {\n // Outside of blocking mode, we commit the effects from the\n // partially completed, timed-out tree, too.\n var _progressedState = workInProgress.memoizedState;\n\n var _progressedPrimaryChild = _progressedState !== null ? workInProgress.child.child : workInProgress.child;\n\n if (_progressedPrimaryChild !== currentPrimaryChildFragment.child) {\n _primaryChildFragment2.child = _progressedPrimaryChild;\n var _progressedChild2 = _progressedPrimaryChild;\n\n while (_progressedChild2 !== null) {\n _progressedChild2.return = _primaryChildFragment2;\n _progressedChild2 = _progressedChild2.sibling;\n }\n }\n } // Because primaryChildFragment is a new fiber that we're inserting as the\n // parent of a new tree, we need to set its treeBaseDuration.\n\n\n if ( workInProgress.mode & ProfileMode) {\n // treeBaseDuration is the sum of all the child tree base durations.\n var _treeBaseDuration = 0;\n var _hiddenChild = _primaryChildFragment2.child;\n\n while (_hiddenChild !== null) {\n _treeBaseDuration += _hiddenChild.treeBaseDuration;\n _hiddenChild = _hiddenChild.sibling;\n }\n\n _primaryChildFragment2.treeBaseDuration = _treeBaseDuration;\n } // Clone the fallback child fragment, too. These we'll continue\n // working on.\n\n\n var _fallbackChildFragment2 = createWorkInProgress(currentFallbackChildFragment, _nextFallbackChildren2);\n\n _fallbackChildFragment2.return = workInProgress;\n _primaryChildFragment2.sibling = _fallbackChildFragment2;\n _primaryChildFragment2.childExpirationTime = NoWork; // Skip the primary children, and continue working on the\n // fallback children.\n\n workInProgress.memoizedState = SUSPENDED_MARKER;\n workInProgress.child = _primaryChildFragment2;\n return _fallbackChildFragment2;\n } else {\n // No longer suspended. Switch back to showing the primary children,\n // and remove the intermediate fragment fiber.\n var _nextPrimaryChildren = nextProps.children;\n var currentPrimaryChild = currentPrimaryChildFragment.child;\n var primaryChild = reconcileChildFibers(workInProgress, currentPrimaryChild, _nextPrimaryChildren, renderExpirationTime); // If this render doesn't suspend, we need to delete the fallback\n // children. Wait until the complete phase, after we've confirmed the\n // fallback is no longer needed.\n // TODO: Would it be better to store the fallback fragment on\n // the stateNode?\n // Continue rendering the children, like we normally do.\n\n workInProgress.memoizedState = null;\n return workInProgress.child = primaryChild;\n }\n } else {\n // The current tree has not already timed out. That means the primary\n // children are not wrapped in a fragment fiber.\n var _currentPrimaryChild = current.child;\n\n if (nextDidTimeout) {\n // Timed out. Wrap the children in a fragment fiber to keep them\n // separate from the fallback children.\n var _nextFallbackChildren3 = nextProps.fallback;\n\n var _primaryChildFragment3 = createFiberFromFragment( // It shouldn't matter what the pending props are because we aren't\n // going to render this fragment.\n null, mode, NoWork, null);\n\n _primaryChildFragment3.return = workInProgress;\n _primaryChildFragment3.child = _currentPrimaryChild;\n\n if (_currentPrimaryChild !== null) {\n _currentPrimaryChild.return = _primaryChildFragment3;\n } // Even though we're creating a new fiber, there are no new children,\n // because we're reusing an already mounted tree. So we don't need to\n // schedule a placement.\n // primaryChildFragment.effectTag |= Placement;\n\n\n if ((workInProgress.mode & BlockingMode) === NoMode) {\n // Outside of blocking mode, we commit the effects from the\n // partially completed, timed-out tree, too.\n var _progressedState2 = workInProgress.memoizedState;\n\n var _progressedPrimaryChild2 = _progressedState2 !== null ? workInProgress.child.child : workInProgress.child;\n\n _primaryChildFragment3.child = _progressedPrimaryChild2;\n var _progressedChild3 = _progressedPrimaryChild2;\n\n while (_progressedChild3 !== null) {\n _progressedChild3.return = _primaryChildFragment3;\n _progressedChild3 = _progressedChild3.sibling;\n }\n } // Because primaryChildFragment is a new fiber that we're inserting as the\n // parent of a new tree, we need to set its treeBaseDuration.\n\n\n if ( workInProgress.mode & ProfileMode) {\n // treeBaseDuration is the sum of all the child tree base durations.\n var _treeBaseDuration2 = 0;\n var _hiddenChild2 = _primaryChildFragment3.child;\n\n while (_hiddenChild2 !== null) {\n _treeBaseDuration2 += _hiddenChild2.treeBaseDuration;\n _hiddenChild2 = _hiddenChild2.sibling;\n }\n\n _primaryChildFragment3.treeBaseDuration = _treeBaseDuration2;\n } // Create a fragment from the fallback children, too.\n\n\n var _fallbackChildFragment3 = createFiberFromFragment(_nextFallbackChildren3, mode, renderExpirationTime, null);\n\n _fallbackChildFragment3.return = workInProgress;\n _primaryChildFragment3.sibling = _fallbackChildFragment3;\n _fallbackChildFragment3.effectTag |= Placement;\n _primaryChildFragment3.childExpirationTime = NoWork; // Skip the primary children, and continue working on the\n // fallback children.\n\n workInProgress.memoizedState = SUSPENDED_MARKER;\n workInProgress.child = _primaryChildFragment3;\n return _fallbackChildFragment3;\n } else {\n // Still haven't timed out. Continue rendering the children, like we\n // normally do.\n workInProgress.memoizedState = null;\n var _nextPrimaryChildren2 = nextProps.children;\n return workInProgress.child = reconcileChildFibers(workInProgress, _currentPrimaryChild, _nextPrimaryChildren2, renderExpirationTime);\n }\n }\n }\n}\n\nfunction scheduleWorkOnFiber(fiber, renderExpirationTime) {\n if (fiber.expirationTime < renderExpirationTime) {\n fiber.expirationTime = renderExpirationTime;\n }\n\n var alternate = fiber.alternate;\n\n if (alternate !== null && alternate.expirationTime < renderExpirationTime) {\n alternate.expirationTime = renderExpirationTime;\n }\n\n scheduleWorkOnParentPath(fiber.return, renderExpirationTime);\n}\n\nfunction propagateSuspenseContextChange(workInProgress, firstChild, renderExpirationTime) {\n // Mark any Suspense boundaries with fallbacks as having work to do.\n // If they were previously forced into fallbacks, they may now be able\n // to unblock.\n var node = firstChild;\n\n while (node !== null) {\n if (node.tag === SuspenseComponent) {\n var state = node.memoizedState;\n\n if (state !== null) {\n scheduleWorkOnFiber(node, renderExpirationTime);\n }\n } else if (node.tag === SuspenseListComponent) {\n // If the tail is hidden there might not be an Suspense boundaries\n // to schedule work on. In this case we have to schedule it on the\n // list itself.\n // We don't have to traverse to the children of the list since\n // the list will propagate the change when it rerenders.\n scheduleWorkOnFiber(node, renderExpirationTime);\n } else if (node.child !== null) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n\n if (node === workInProgress) {\n return;\n }\n\n while (node.sibling === null) {\n if (node.return === null || node.return === workInProgress) {\n return;\n }\n\n node = node.return;\n }\n\n node.sibling.return = node.return;\n node = node.sibling;\n }\n}\n\nfunction findLastContentRow(firstChild) {\n // This is going to find the last row among these children that is already\n // showing content on the screen, as opposed to being in fallback state or\n // new. If a row has multiple Suspense boundaries, any of them being in the\n // fallback state, counts as the whole row being in a fallback state.\n // Note that the \"rows\" will be workInProgress, but any nested children\n // will still be current since we haven't rendered them yet. The mounted\n // order may not be the same as the new order. We use the new order.\n var row = firstChild;\n var lastContentRow = null;\n\n while (row !== null) {\n var currentRow = row.alternate; // New rows can't be content rows.\n\n if (currentRow !== null && findFirstSuspended(currentRow) === null) {\n lastContentRow = row;\n }\n\n row = row.sibling;\n }\n\n return lastContentRow;\n}\n\nfunction validateRevealOrder(revealOrder) {\n {\n if (revealOrder !== undefined && revealOrder !== 'forwards' && revealOrder !== 'backwards' && revealOrder !== 'together' && !didWarnAboutRevealOrder[revealOrder]) {\n didWarnAboutRevealOrder[revealOrder] = true;\n\n if (typeof revealOrder === 'string') {\n switch (revealOrder.toLowerCase()) {\n case 'together':\n case 'forwards':\n case 'backwards':\n {\n error('\"%s\" is not a valid value for revealOrder on <SuspenseList />. ' + 'Use lowercase \"%s\" instead.', revealOrder, revealOrder.toLowerCase());\n\n break;\n }\n\n case 'forward':\n case 'backward':\n {\n error('\"%s\" is not a valid value for revealOrder on <SuspenseList />. ' + 'React uses the -s suffix in the spelling. Use \"%ss\" instead.', revealOrder, revealOrder.toLowerCase());\n\n break;\n }\n\n default:\n error('\"%s\" is not a supported revealOrder on <SuspenseList />. ' + 'Did you mean \"together\", \"forwards\" or \"backwards\"?', revealOrder);\n\n break;\n }\n } else {\n error('%s is not a supported value for revealOrder on <SuspenseList />. ' + 'Did you mean \"together\", \"forwards\" or \"backwards\"?', revealOrder);\n }\n }\n }\n}\n\nfunction validateTailOptions(tailMode, revealOrder) {\n {\n if (tailMode !== undefined && !didWarnAboutTailOptions[tailMode]) {\n if (tailMode !== 'collapsed' && tailMode !== 'hidden') {\n didWarnAboutTailOptions[tailMode] = true;\n\n error('\"%s\" is not a supported value for tail on <SuspenseList />. ' + 'Did you mean \"collapsed\" or \"hidden\"?', tailMode);\n } else if (revealOrder !== 'forwards' && revealOrder !== 'backwards') {\n didWarnAboutTailOptions[tailMode] = true;\n\n error('<SuspenseList tail=\"%s\" /> is only valid if revealOrder is ' + '\"forwards\" or \"backwards\". ' + 'Did you mean to specify revealOrder=\"forwards\"?', tailMode);\n }\n }\n }\n}\n\nfunction validateSuspenseListNestedChild(childSlot, index) {\n {\n var isArray = Array.isArray(childSlot);\n var isIterable = !isArray && typeof getIteratorFn(childSlot) === 'function';\n\n if (isArray || isIterable) {\n var type = isArray ? 'array' : 'iterable';\n\n error('A nested %s was passed to row #%s in <SuspenseList />. Wrap it in ' + 'an additional SuspenseList to configure its revealOrder: ' + '<SuspenseList revealOrder=...> ... ' + '<SuspenseList revealOrder=...>{%s}</SuspenseList> ... ' + '</SuspenseList>', type, index, type);\n\n return false;\n }\n }\n\n return true;\n}\n\nfunction validateSuspenseListChildren(children, revealOrder) {\n {\n if ((revealOrder === 'forwards' || revealOrder === 'backwards') && children !== undefined && children !== null && children !== false) {\n if (Array.isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n if (!validateSuspenseListNestedChild(children[i], i)) {\n return;\n }\n }\n } else {\n var iteratorFn = getIteratorFn(children);\n\n if (typeof iteratorFn === 'function') {\n var childrenIterator = iteratorFn.call(children);\n\n if (childrenIterator) {\n var step = childrenIterator.next();\n var _i = 0;\n\n for (; !step.done; step = childrenIterator.next()) {\n if (!validateSuspenseListNestedChild(step.value, _i)) {\n return;\n }\n\n _i++;\n }\n }\n } else {\n error('A single row was passed to a <SuspenseList revealOrder=\"%s\" />. ' + 'This is not useful since it needs multiple rows. ' + 'Did you mean to pass multiple children or an array?', revealOrder);\n }\n }\n }\n }\n}\n\nfunction initSuspenseListRenderState(workInProgress, isBackwards, tail, lastContentRow, tailMode, lastEffectBeforeRendering) {\n var renderState = workInProgress.memoizedState;\n\n if (renderState === null) {\n workInProgress.memoizedState = {\n isBackwards: isBackwards,\n rendering: null,\n renderingStartTime: 0,\n last: lastContentRow,\n tail: tail,\n tailExpiration: 0,\n tailMode: tailMode,\n lastEffect: lastEffectBeforeRendering\n };\n } else {\n // We can reuse the existing object from previous renders.\n renderState.isBackwards = isBackwards;\n renderState.rendering = null;\n renderState.renderingStartTime = 0;\n renderState.last = lastContentRow;\n renderState.tail = tail;\n renderState.tailExpiration = 0;\n renderState.tailMode = tailMode;\n renderState.lastEffect = lastEffectBeforeRendering;\n }\n} // This can end up rendering this component multiple passes.\n// The first pass splits the children fibers into two sets. A head and tail.\n// We first render the head. If anything is in fallback state, we do another\n// pass through beginWork to rerender all children (including the tail) with\n// the force suspend context. If the first render didn't have anything in\n// in fallback state. Then we render each row in the tail one-by-one.\n// That happens in the completeWork phase without going back to beginWork.\n\n\nfunction updateSuspenseListComponent(current, workInProgress, renderExpirationTime) {\n var nextProps = workInProgress.pendingProps;\n var revealOrder = nextProps.revealOrder;\n var tailMode = nextProps.tail;\n var newChildren = nextProps.children;\n validateRevealOrder(revealOrder);\n validateTailOptions(tailMode, revealOrder);\n validateSuspenseListChildren(newChildren, revealOrder);\n reconcileChildren(current, workInProgress, newChildren, renderExpirationTime);\n var suspenseContext = suspenseStackCursor.current;\n var shouldForceFallback = hasSuspenseContext(suspenseContext, ForceSuspenseFallback);\n\n if (shouldForceFallback) {\n suspenseContext = setShallowSuspenseContext(suspenseContext, ForceSuspenseFallback);\n workInProgress.effectTag |= DidCapture;\n } else {\n var didSuspendBefore = current !== null && (current.effectTag & DidCapture) !== NoEffect;\n\n if (didSuspendBefore) {\n // If we previously forced a fallback, we need to schedule work\n // on any nested boundaries to let them know to try to render\n // again. This is the same as context updating.\n propagateSuspenseContextChange(workInProgress, workInProgress.child, renderExpirationTime);\n }\n\n suspenseContext = setDefaultShallowSuspenseContext(suspenseContext);\n }\n\n pushSuspenseContext(workInProgress, suspenseContext);\n\n if ((workInProgress.mode & BlockingMode) === NoMode) {\n // Outside of blocking mode, SuspenseList doesn't work so we just\n // use make it a noop by treating it as the default revealOrder.\n workInProgress.memoizedState = null;\n } else {\n switch (revealOrder) {\n case 'forwards':\n {\n var lastContentRow = findLastContentRow(workInProgress.child);\n var tail;\n\n if (lastContentRow === null) {\n // The whole list is part of the tail.\n // TODO: We could fast path by just rendering the tail now.\n tail = workInProgress.child;\n workInProgress.child = null;\n } else {\n // Disconnect the tail rows after the content row.\n // We're going to render them separately later.\n tail = lastContentRow.sibling;\n lastContentRow.sibling = null;\n }\n\n initSuspenseListRenderState(workInProgress, false, // isBackwards\n tail, lastContentRow, tailMode, workInProgress.lastEffect);\n break;\n }\n\n case 'backwards':\n {\n // We're going to find the first row that has existing content.\n // At the same time we're going to reverse the list of everything\n // we pass in the meantime. That's going to be our tail in reverse\n // order.\n var _tail = null;\n var row = workInProgress.child;\n workInProgress.child = null;\n\n while (row !== null) {\n var currentRow = row.alternate; // New rows can't be content rows.\n\n if (currentRow !== null && findFirstSuspended(currentRow) === null) {\n // This is the beginning of the main content.\n workInProgress.child = row;\n break;\n }\n\n var nextRow = row.sibling;\n row.sibling = _tail;\n _tail = row;\n row = nextRow;\n } // TODO: If workInProgress.child is null, we can continue on the tail immediately.\n\n\n initSuspenseListRenderState(workInProgress, true, // isBackwards\n _tail, null, // last\n tailMode, workInProgress.lastEffect);\n break;\n }\n\n case 'together':\n {\n initSuspenseListRenderState(workInProgress, false, // isBackwards\n null, // tail\n null, // last\n undefined, workInProgress.lastEffect);\n break;\n }\n\n default:\n {\n // The default reveal order is the same as not having\n // a boundary.\n workInProgress.memoizedState = null;\n }\n }\n }\n\n return workInProgress.child;\n}\n\nfunction updatePortalComponent(current, workInProgress, renderExpirationTime) {\n pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n var nextChildren = workInProgress.pendingProps;\n\n if (current === null) {\n // Portals are special because we don't append the children during mount\n // but at commit. Therefore we need to track insertions which the normal\n // flow doesn't do during mount. This doesn't happen at the root because\n // the root always starts with a \"current\" with a null child.\n // TODO: Consider unifying this with how the root works.\n workInProgress.child = reconcileChildFibers(workInProgress, null, nextChildren, renderExpirationTime);\n } else {\n reconcileChildren(current, workInProgress, nextChildren, renderExpirationTime);\n }\n\n return workInProgress.child;\n}\n\nfunction updateContextProvider(current, workInProgress, renderExpirationTime) {\n var providerType = workInProgress.type;\n var context = providerType._context;\n var newProps = workInProgress.pendingProps;\n var oldProps = workInProgress.memoizedProps;\n var newValue = newProps.value;\n\n {\n var providerPropTypes = workInProgress.type.propTypes;\n\n if (providerPropTypes) {\n checkPropTypes(providerPropTypes, newProps, 'prop', 'Context.Provider', getCurrentFiberStackInDev);\n }\n }\n\n pushProvider(workInProgress, newValue);\n\n if (oldProps !== null) {\n var oldValue = oldProps.value;\n var changedBits = calculateChangedBits(context, newValue, oldValue);\n\n if (changedBits === 0) {\n // No change. Bailout early if children are the same.\n if (oldProps.children === newProps.children && !hasContextChanged()) {\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderExpirationTime);\n }\n } else {\n // The context value changed. Search for matching consumers and schedule\n // them to update.\n propagateContextChange(workInProgress, context, changedBits, renderExpirationTime);\n }\n }\n\n var newChildren = newProps.children;\n reconcileChildren(current, workInProgress, newChildren, renderExpirationTime);\n return workInProgress.child;\n}\n\nvar hasWarnedAboutUsingContextAsConsumer = false;\n\nfunction updateContextConsumer(current, workInProgress, renderExpirationTime) {\n var context = workInProgress.type; // The logic below for Context differs depending on PROD or DEV mode. In\n // DEV mode, we create a separate object for Context.Consumer that acts\n // like a proxy to Context. This proxy object adds unnecessary code in PROD\n // so we use the old behaviour (Context.Consumer references Context) to\n // reduce size and overhead. The separate object references context via\n // a property called \"_context\", which also gives us the ability to check\n // in DEV mode if this property exists or not and warn if it does not.\n\n {\n if (context._context === undefined) {\n // This may be because it's a Context (rather than a Consumer).\n // Or it may be because it's older React where they're the same thing.\n // We only want to warn if we're sure it's a new React.\n if (context !== context.Consumer) {\n if (!hasWarnedAboutUsingContextAsConsumer) {\n hasWarnedAboutUsingContextAsConsumer = true;\n\n error('Rendering <Context> directly is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Consumer> instead?');\n }\n }\n } else {\n context = context._context;\n }\n }\n\n var newProps = workInProgress.pendingProps;\n var render = newProps.children;\n\n {\n if (typeof render !== 'function') {\n error('A context consumer was rendered with multiple children, or a child ' + \"that isn't a function. A context consumer expects a single child \" + 'that is a function. If you did pass a function, make sure there ' + 'is no trailing or leading whitespace around it.');\n }\n }\n\n prepareToReadContext(workInProgress, renderExpirationTime);\n var newValue = readContext(context, newProps.unstable_observedBits);\n var newChildren;\n\n {\n ReactCurrentOwner$1.current = workInProgress;\n setIsRendering(true);\n newChildren = render(newValue);\n setIsRendering(false);\n } // React DevTools reads this flag.\n\n\n workInProgress.effectTag |= PerformedWork;\n reconcileChildren(current, workInProgress, newChildren, renderExpirationTime);\n return workInProgress.child;\n}\n\nfunction markWorkInProgressReceivedUpdate() {\n didReceiveUpdate = true;\n}\n\nfunction bailoutOnAlreadyFinishedWork(current, workInProgress, renderExpirationTime) {\n cancelWorkTimer(workInProgress);\n\n if (current !== null) {\n // Reuse previous dependencies\n workInProgress.dependencies = current.dependencies;\n }\n\n {\n // Don't update \"base\" render times for bailouts.\n stopProfilerTimerIfRunning();\n }\n\n var updateExpirationTime = workInProgress.expirationTime;\n\n if (updateExpirationTime !== NoWork) {\n markUnprocessedUpdateTime(updateExpirationTime);\n } // Check if the children have any pending work.\n\n\n var childExpirationTime = workInProgress.childExpirationTime;\n\n if (childExpirationTime < renderExpirationTime) {\n // The children don't have any work either. We can skip them.\n // TODO: Once we add back resuming, we should check if the children are\n // a work-in-progress set. If so, we need to transfer their effects.\n return null;\n } else {\n // This fiber doesn't have work, but its subtree does. Clone the child\n // fibers and continue.\n cloneChildFibers(current, workInProgress);\n return workInProgress.child;\n }\n}\n\nfunction remountFiber(current, oldWorkInProgress, newWorkInProgress) {\n {\n var returnFiber = oldWorkInProgress.return;\n\n if (returnFiber === null) {\n throw new Error('Cannot swap the root fiber.');\n } // Disconnect from the old current.\n // It will get deleted.\n\n\n current.alternate = null;\n oldWorkInProgress.alternate = null; // Connect to the new tree.\n\n newWorkInProgress.index = oldWorkInProgress.index;\n newWorkInProgress.sibling = oldWorkInProgress.sibling;\n newWorkInProgress.return = oldWorkInProgress.return;\n newWorkInProgress.ref = oldWorkInProgress.ref; // Replace the child/sibling pointers above it.\n\n if (oldWorkInProgress === returnFiber.child) {\n returnFiber.child = newWorkInProgress;\n } else {\n var prevSibling = returnFiber.child;\n\n if (prevSibling === null) {\n throw new Error('Expected parent to have a child.');\n }\n\n while (prevSibling.sibling !== oldWorkInProgress) {\n prevSibling = prevSibling.sibling;\n\n if (prevSibling === null) {\n throw new Error('Expected to find the previous sibling.');\n }\n }\n\n prevSibling.sibling = newWorkInProgress;\n } // Delete the old fiber and place the new one.\n // Since the old fiber is disconnected, we have to schedule it manually.\n\n\n var last = returnFiber.lastEffect;\n\n if (last !== null) {\n last.nextEffect = current;\n returnFiber.lastEffect = current;\n } else {\n returnFiber.firstEffect = returnFiber.lastEffect = current;\n }\n\n current.nextEffect = null;\n current.effectTag = Deletion;\n newWorkInProgress.effectTag |= Placement; // Restart work from the new fiber.\n\n return newWorkInProgress;\n }\n}\n\nfunction beginWork(current, workInProgress, renderExpirationTime) {\n var updateExpirationTime = workInProgress.expirationTime;\n\n {\n if (workInProgress._debugNeedsRemount && current !== null) {\n // This will restart the begin phase with a new fiber.\n return remountFiber(current, workInProgress, createFiberFromTypeAndProps(workInProgress.type, workInProgress.key, workInProgress.pendingProps, workInProgress._debugOwner || null, workInProgress.mode, workInProgress.expirationTime));\n }\n }\n\n if (current !== null) {\n var oldProps = current.memoizedProps;\n var newProps = workInProgress.pendingProps;\n\n if (oldProps !== newProps || hasContextChanged() || ( // Force a re-render if the implementation changed due to hot reload:\n workInProgress.type !== current.type )) {\n // If props or context changed, mark the fiber as having performed work.\n // This may be unset if the props are determined to be equal later (memo).\n didReceiveUpdate = true;\n } else if (updateExpirationTime < renderExpirationTime) {\n didReceiveUpdate = false; // This fiber does not have any pending work. Bailout without entering\n // the begin phase. There's still some bookkeeping we that needs to be done\n // in this optimized path, mostly pushing stuff onto the stack.\n\n switch (workInProgress.tag) {\n case HostRoot:\n pushHostRootContext(workInProgress);\n resetHydrationState();\n break;\n\n case HostComponent:\n pushHostContext(workInProgress);\n\n if (workInProgress.mode & ConcurrentMode && renderExpirationTime !== Never && shouldDeprioritizeSubtree(workInProgress.type, newProps)) {\n {\n markSpawnedWork(Never);\n } // Schedule this fiber to re-render at offscreen priority. Then bailout.\n\n\n workInProgress.expirationTime = workInProgress.childExpirationTime = Never;\n return null;\n }\n\n break;\n\n case ClassComponent:\n {\n var Component = workInProgress.type;\n\n if (isContextProvider(Component)) {\n pushContextProvider(workInProgress);\n }\n\n break;\n }\n\n case HostPortal:\n pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n break;\n\n case ContextProvider:\n {\n var newValue = workInProgress.memoizedProps.value;\n pushProvider(workInProgress, newValue);\n break;\n }\n\n case Profiler:\n {\n // Profiler should only call onRender when one of its descendants actually rendered.\n var hasChildWork = workInProgress.childExpirationTime >= renderExpirationTime;\n\n if (hasChildWork) {\n workInProgress.effectTag |= Update;\n }\n }\n\n break;\n\n case SuspenseComponent:\n {\n var state = workInProgress.memoizedState;\n\n if (state !== null) {\n // whether to retry the primary children, or to skip over it and\n // go straight to the fallback. Check the priority of the primary\n // child fragment.\n\n\n var primaryChildFragment = workInProgress.child;\n var primaryChildExpirationTime = primaryChildFragment.childExpirationTime;\n\n if (primaryChildExpirationTime !== NoWork && primaryChildExpirationTime >= renderExpirationTime) {\n // The primary children have pending work. Use the normal path\n // to attempt to render the primary children again.\n return updateSuspenseComponent(current, workInProgress, renderExpirationTime);\n } else {\n pushSuspenseContext(workInProgress, setDefaultShallowSuspenseContext(suspenseStackCursor.current)); // The primary children do not have pending work with sufficient\n // priority. Bailout.\n\n var child = bailoutOnAlreadyFinishedWork(current, workInProgress, renderExpirationTime);\n\n if (child !== null) {\n // The fallback children have pending work. Skip over the\n // primary children and work on the fallback.\n return child.sibling;\n } else {\n return null;\n }\n }\n } else {\n pushSuspenseContext(workInProgress, setDefaultShallowSuspenseContext(suspenseStackCursor.current));\n }\n\n break;\n }\n\n case SuspenseListComponent:\n {\n var didSuspendBefore = (current.effectTag & DidCapture) !== NoEffect;\n\n var _hasChildWork = workInProgress.childExpirationTime >= renderExpirationTime;\n\n if (didSuspendBefore) {\n if (_hasChildWork) {\n // If something was in fallback state last time, and we have all the\n // same children then we're still in progressive loading state.\n // Something might get unblocked by state updates or retries in the\n // tree which will affect the tail. So we need to use the normal\n // path to compute the correct tail.\n return updateSuspenseListComponent(current, workInProgress, renderExpirationTime);\n } // If none of the children had any work, that means that none of\n // them got retried so they'll still be blocked in the same way\n // as before. We can fast bail out.\n\n\n workInProgress.effectTag |= DidCapture;\n } // If nothing suspended before and we're rendering the same children,\n // then the tail doesn't matter. Anything new that suspends will work\n // in the \"together\" mode, so we can continue from the state we had.\n\n\n var renderState = workInProgress.memoizedState;\n\n if (renderState !== null) {\n // Reset to the \"together\" mode in case we've started a different\n // update in the past but didn't complete it.\n renderState.rendering = null;\n renderState.tail = null;\n }\n\n pushSuspenseContext(workInProgress, suspenseStackCursor.current);\n\n if (_hasChildWork) {\n break;\n } else {\n // If none of the children had any work, that means that none of\n // them got retried so they'll still be blocked in the same way\n // as before. We can fast bail out.\n return null;\n }\n }\n }\n\n return bailoutOnAlreadyFinishedWork(current, workInProgress, renderExpirationTime);\n } else {\n // An update was scheduled on this fiber, but there are no new props\n // nor legacy context. Set this to false. If an update queue or context\n // consumer produces a changed value, it will set this to true. Otherwise,\n // the component will assume the children have not changed and bail out.\n didReceiveUpdate = false;\n }\n } else {\n didReceiveUpdate = false;\n } // Before entering the begin phase, clear pending update priority.\n // TODO: This assumes that we're about to evaluate the component and process\n // the update queue. However, there's an exception: SimpleMemoComponent\n // sometimes bails out later in the begin phase. This indicates that we should\n // move this assignment out of the common path and into each branch.\n\n\n workInProgress.expirationTime = NoWork;\n\n switch (workInProgress.tag) {\n case IndeterminateComponent:\n {\n return mountIndeterminateComponent(current, workInProgress, workInProgress.type, renderExpirationTime);\n }\n\n case LazyComponent:\n {\n var elementType = workInProgress.elementType;\n return mountLazyComponent(current, workInProgress, elementType, updateExpirationTime, renderExpirationTime);\n }\n\n case FunctionComponent:\n {\n var _Component = workInProgress.type;\n var unresolvedProps = workInProgress.pendingProps;\n var resolvedProps = workInProgress.elementType === _Component ? unresolvedProps : resolveDefaultProps(_Component, unresolvedProps);\n return updateFunctionComponent(current, workInProgress, _Component, resolvedProps, renderExpirationTime);\n }\n\n case ClassComponent:\n {\n var _Component2 = workInProgress.type;\n var _unresolvedProps = workInProgress.pendingProps;\n\n var _resolvedProps = workInProgress.elementType === _Component2 ? _unresolvedProps : resolveDefaultProps(_Component2, _unresolvedProps);\n\n return updateClassComponent(current, workInProgress, _Component2, _resolvedProps, renderExpirationTime);\n }\n\n case HostRoot:\n return updateHostRoot(current, workInProgress, renderExpirationTime);\n\n case HostComponent:\n return updateHostComponent(current, workInProgress, renderExpirationTime);\n\n case HostText:\n return updateHostText(current, workInProgress);\n\n case SuspenseComponent:\n return updateSuspenseComponent(current, workInProgress, renderExpirationTime);\n\n case HostPortal:\n return updatePortalComponent(current, workInProgress, renderExpirationTime);\n\n case ForwardRef:\n {\n var type = workInProgress.type;\n var _unresolvedProps2 = workInProgress.pendingProps;\n\n var _resolvedProps2 = workInProgress.elementType === type ? _unresolvedProps2 : resolveDefaultProps(type, _unresolvedProps2);\n\n return updateForwardRef(current, workInProgress, type, _resolvedProps2, renderExpirationTime);\n }\n\n case Fragment:\n return updateFragment(current, workInProgress, renderExpirationTime);\n\n case Mode:\n return updateMode(current, workInProgress, renderExpirationTime);\n\n case Profiler:\n return updateProfiler(current, workInProgress, renderExpirationTime);\n\n case ContextProvider:\n return updateContextProvider(current, workInProgress, renderExpirationTime);\n\n case ContextConsumer:\n return updateContextConsumer(current, workInProgress, renderExpirationTime);\n\n case MemoComponent:\n {\n var _type2 = workInProgress.type;\n var _unresolvedProps3 = workInProgress.pendingProps; // Resolve outer props first, then resolve inner props.\n\n var _resolvedProps3 = resolveDefaultProps(_type2, _unresolvedProps3);\n\n {\n if (workInProgress.type !== workInProgress.elementType) {\n var outerPropTypes = _type2.propTypes;\n\n if (outerPropTypes) {\n checkPropTypes(outerPropTypes, _resolvedProps3, // Resolved for outer only\n 'prop', getComponentName(_type2), getCurrentFiberStackInDev);\n }\n }\n }\n\n _resolvedProps3 = resolveDefaultProps(_type2.type, _resolvedProps3);\n return updateMemoComponent(current, workInProgress, _type2, _resolvedProps3, updateExpirationTime, renderExpirationTime);\n }\n\n case SimpleMemoComponent:\n {\n return updateSimpleMemoComponent(current, workInProgress, workInProgress.type, workInProgress.pendingProps, updateExpirationTime, renderExpirationTime);\n }\n\n case IncompleteClassComponent:\n {\n var _Component3 = workInProgress.type;\n var _unresolvedProps4 = workInProgress.pendingProps;\n\n var _resolvedProps4 = workInProgress.elementType === _Component3 ? _unresolvedProps4 : resolveDefaultProps(_Component3, _unresolvedProps4);\n\n return mountIncompleteClassComponent(current, workInProgress, _Component3, _resolvedProps4, renderExpirationTime);\n }\n\n case SuspenseListComponent:\n {\n return updateSuspenseListComponent(current, workInProgress, renderExpirationTime);\n }\n }\n\n {\n {\n throw Error( \"Unknown unit of work tag (\" + workInProgress.tag + \"). This error is likely caused by a bug in React. Please file an issue.\" );\n }\n }\n}\n\nfunction markUpdate(workInProgress) {\n // Tag the fiber with an update effect. This turns a Placement into\n // a PlacementAndUpdate.\n workInProgress.effectTag |= Update;\n}\n\nfunction markRef$1(workInProgress) {\n workInProgress.effectTag |= Ref;\n}\n\nvar appendAllChildren;\nvar updateHostContainer;\nvar updateHostComponent$1;\nvar updateHostText$1;\n\n{\n // Mutation mode\n appendAllChildren = function (parent, workInProgress, needsVisibilityToggle, isHidden) {\n // We only have the top Fiber that was created but we need recurse down its\n // children to find all the terminal nodes.\n var node = workInProgress.child;\n\n while (node !== null) {\n if (node.tag === HostComponent || node.tag === HostText) {\n appendInitialChild(parent, node.stateNode);\n } else if (node.tag === HostPortal) ; else if (node.child !== null) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n\n if (node === workInProgress) {\n return;\n }\n\n while (node.sibling === null) {\n if (node.return === null || node.return === workInProgress) {\n return;\n }\n\n node = node.return;\n }\n\n node.sibling.return = node.return;\n node = node.sibling;\n }\n };\n\n updateHostContainer = function (workInProgress) {// Noop\n };\n\n updateHostComponent$1 = function (current, workInProgress, type, newProps, rootContainerInstance) {\n // If we have an alternate, that means this is an update and we need to\n // schedule a side-effect to do the updates.\n var oldProps = current.memoizedProps;\n\n if (oldProps === newProps) {\n // In mutation mode, this is sufficient for a bailout because\n // we won't touch this node even if children changed.\n return;\n } // If we get updated because one of our children updated, we don't\n // have newProps so we'll have to reuse them.\n // TODO: Split the update API as separate for the props vs. children.\n // Even better would be if children weren't special cased at all tho.\n\n\n var instance = workInProgress.stateNode;\n var currentHostContext = getHostContext(); // TODO: Experiencing an error where oldProps is null. Suggests a host\n // component is hitting the resume path. Figure out why. Possibly\n // related to `hidden`.\n\n var updatePayload = prepareUpdate(instance, type, oldProps, newProps, rootContainerInstance, currentHostContext); // TODO: Type this specific to this type of component.\n\n workInProgress.updateQueue = updatePayload; // If the update payload indicates that there is a change or if there\n // is a new ref we mark this as an update. All the work is done in commitWork.\n\n if (updatePayload) {\n markUpdate(workInProgress);\n }\n };\n\n updateHostText$1 = function (current, workInProgress, oldText, newText) {\n // If the text differs, mark it as an update. All the work in done in commitWork.\n if (oldText !== newText) {\n markUpdate(workInProgress);\n }\n };\n}\n\nfunction cutOffTailIfNeeded(renderState, hasRenderedATailFallback) {\n switch (renderState.tailMode) {\n case 'hidden':\n {\n // Any insertions at the end of the tail list after this point\n // should be invisible. If there are already mounted boundaries\n // anything before them are not considered for collapsing.\n // Therefore we need to go through the whole tail to find if\n // there are any.\n var tailNode = renderState.tail;\n var lastTailNode = null;\n\n while (tailNode !== null) {\n if (tailNode.alternate !== null) {\n lastTailNode = tailNode;\n }\n\n tailNode = tailNode.sibling;\n } // Next we're simply going to delete all insertions after the\n // last rendered item.\n\n\n if (lastTailNode === null) {\n // All remaining items in the tail are insertions.\n renderState.tail = null;\n } else {\n // Detach the insertion after the last node that was already\n // inserted.\n lastTailNode.sibling = null;\n }\n\n break;\n }\n\n case 'collapsed':\n {\n // Any insertions at the end of the tail list after this point\n // should be invisible. If there are already mounted boundaries\n // anything before them are not considered for collapsing.\n // Therefore we need to go through the whole tail to find if\n // there are any.\n var _tailNode = renderState.tail;\n var _lastTailNode = null;\n\n while (_tailNode !== null) {\n if (_tailNode.alternate !== null) {\n _lastTailNode = _tailNode;\n }\n\n _tailNode = _tailNode.sibling;\n } // Next we're simply going to delete all insertions after the\n // last rendered item.\n\n\n if (_lastTailNode === null) {\n // All remaining items in the tail are insertions.\n if (!hasRenderedATailFallback && renderState.tail !== null) {\n // We suspended during the head. We want to show at least one\n // row at the tail. So we'll keep on and cut off the rest.\n renderState.tail.sibling = null;\n } else {\n renderState.tail = null;\n }\n } else {\n // Detach the insertion after the last node that was already\n // inserted.\n _lastTailNode.sibling = null;\n }\n\n break;\n }\n }\n}\n\nfunction completeWork(current, workInProgress, renderExpirationTime) {\n var newProps = workInProgress.pendingProps;\n\n switch (workInProgress.tag) {\n case IndeterminateComponent:\n case LazyComponent:\n case SimpleMemoComponent:\n case FunctionComponent:\n case ForwardRef:\n case Fragment:\n case Mode:\n case Profiler:\n case ContextConsumer:\n case MemoComponent:\n return null;\n\n case ClassComponent:\n {\n var Component = workInProgress.type;\n\n if (isContextProvider(Component)) {\n popContext(workInProgress);\n }\n\n return null;\n }\n\n case HostRoot:\n {\n popHostContainer(workInProgress);\n popTopLevelContextObject(workInProgress);\n var fiberRoot = workInProgress.stateNode;\n\n if (fiberRoot.pendingContext) {\n fiberRoot.context = fiberRoot.pendingContext;\n fiberRoot.pendingContext = null;\n }\n\n if (current === null || current.child === null) {\n // If we hydrated, pop so that we can delete any remaining children\n // that weren't hydrated.\n var wasHydrated = popHydrationState(workInProgress);\n\n if (wasHydrated) {\n // If we hydrated, then we'll need to schedule an update for\n // the commit side-effects on the root.\n markUpdate(workInProgress);\n }\n }\n\n updateHostContainer(workInProgress);\n return null;\n }\n\n case HostComponent:\n {\n popHostContext(workInProgress);\n var rootContainerInstance = getRootHostContainer();\n var type = workInProgress.type;\n\n if (current !== null && workInProgress.stateNode != null) {\n updateHostComponent$1(current, workInProgress, type, newProps, rootContainerInstance);\n\n if (current.ref !== workInProgress.ref) {\n markRef$1(workInProgress);\n }\n } else {\n if (!newProps) {\n if (!(workInProgress.stateNode !== null)) {\n {\n throw Error( \"We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.\" );\n }\n } // This can happen when we abort work.\n\n\n return null;\n }\n\n var currentHostContext = getHostContext(); // TODO: Move createInstance to beginWork and keep it on a context\n // \"stack\" as the parent. Then append children as we go in beginWork\n // or completeWork depending on whether we want to add them top->down or\n // bottom->up. Top->down is faster in IE11.\n\n var _wasHydrated = popHydrationState(workInProgress);\n\n if (_wasHydrated) {\n // TODO: Move this and createInstance step into the beginPhase\n // to consolidate.\n if (prepareToHydrateHostInstance(workInProgress, rootContainerInstance, currentHostContext)) {\n // If changes to the hydrated node need to be applied at the\n // commit-phase we mark this as such.\n markUpdate(workInProgress);\n }\n } else {\n var instance = createInstance(type, newProps, rootContainerInstance, currentHostContext, workInProgress);\n appendAllChildren(instance, workInProgress, false, false); // This needs to be set before we mount Flare event listeners\n\n workInProgress.stateNode = instance;\n // (eg DOM renderer supports auto-focus for certain elements).\n // Make sure such renderers get scheduled for later work.\n\n\n if (finalizeInitialChildren(instance, type, newProps, rootContainerInstance)) {\n markUpdate(workInProgress);\n }\n }\n\n if (workInProgress.ref !== null) {\n // If there is a ref on a host node we need to schedule a callback\n markRef$1(workInProgress);\n }\n }\n\n return null;\n }\n\n case HostText:\n {\n var newText = newProps;\n\n if (current && workInProgress.stateNode != null) {\n var oldText = current.memoizedProps; // If we have an alternate, that means this is an update and we need\n // to schedule a side-effect to do the updates.\n\n updateHostText$1(current, workInProgress, oldText, newText);\n } else {\n if (typeof newText !== 'string') {\n if (!(workInProgress.stateNode !== null)) {\n {\n throw Error( \"We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.\" );\n }\n } // This can happen when we abort work.\n\n }\n\n var _rootContainerInstance = getRootHostContainer();\n\n var _currentHostContext = getHostContext();\n\n var _wasHydrated2 = popHydrationState(workInProgress);\n\n if (_wasHydrated2) {\n if (prepareToHydrateHostTextInstance(workInProgress)) {\n markUpdate(workInProgress);\n }\n } else {\n workInProgress.stateNode = createTextInstance(newText, _rootContainerInstance, _currentHostContext, workInProgress);\n }\n }\n\n return null;\n }\n\n case SuspenseComponent:\n {\n popSuspenseContext(workInProgress);\n var nextState = workInProgress.memoizedState;\n\n if ((workInProgress.effectTag & DidCapture) !== NoEffect) {\n // Something suspended. Re-render with the fallback children.\n workInProgress.expirationTime = renderExpirationTime; // Do not reset the effect list.\n\n return workInProgress;\n }\n\n var nextDidTimeout = nextState !== null;\n var prevDidTimeout = false;\n\n if (current === null) {\n if (workInProgress.memoizedProps.fallback !== undefined) {\n popHydrationState(workInProgress);\n }\n } else {\n var prevState = current.memoizedState;\n prevDidTimeout = prevState !== null;\n\n if (!nextDidTimeout && prevState !== null) {\n // We just switched from the fallback to the normal children.\n // Delete the fallback.\n // TODO: Would it be better to store the fallback fragment on\n // the stateNode during the begin phase?\n var currentFallbackChild = current.child.sibling;\n\n if (currentFallbackChild !== null) {\n // Deletions go at the beginning of the return fiber's effect list\n var first = workInProgress.firstEffect;\n\n if (first !== null) {\n workInProgress.firstEffect = currentFallbackChild;\n currentFallbackChild.nextEffect = first;\n } else {\n workInProgress.firstEffect = workInProgress.lastEffect = currentFallbackChild;\n currentFallbackChild.nextEffect = null;\n }\n\n currentFallbackChild.effectTag = Deletion;\n }\n }\n }\n\n if (nextDidTimeout && !prevDidTimeout) {\n // If this subtreee is running in blocking mode we can suspend,\n // otherwise we won't suspend.\n // TODO: This will still suspend a synchronous tree if anything\n // in the concurrent tree already suspended during this render.\n // This is a known bug.\n if ((workInProgress.mode & BlockingMode) !== NoMode) {\n // TODO: Move this back to throwException because this is too late\n // if this is a large tree which is common for initial loads. We\n // don't know if we should restart a render or not until we get\n // this marker, and this is too late.\n // If this render already had a ping or lower pri updates,\n // and this is the first time we know we're going to suspend we\n // should be able to immediately restart from within throwException.\n var hasInvisibleChildContext = current === null && workInProgress.memoizedProps.unstable_avoidThisFallback !== true;\n\n if (hasInvisibleChildContext || hasSuspenseContext(suspenseStackCursor.current, InvisibleParentSuspenseContext)) {\n // If this was in an invisible tree or a new render, then showing\n // this boundary is ok.\n renderDidSuspend();\n } else {\n // Otherwise, we're going to have to hide content so we should\n // suspend for longer if possible.\n renderDidSuspendDelayIfPossible();\n }\n }\n }\n\n {\n // TODO: Only schedule updates if these values are non equal, i.e. it changed.\n if (nextDidTimeout || prevDidTimeout) {\n // If this boundary just timed out, schedule an effect to attach a\n // retry listener to the promise. This flag is also used to hide the\n // primary children. In mutation mode, we also need the flag to\n // *unhide* children that were previously hidden, so check if this\n // is currently timed out, too.\n workInProgress.effectTag |= Update;\n }\n }\n\n return null;\n }\n\n case HostPortal:\n popHostContainer(workInProgress);\n updateHostContainer(workInProgress);\n return null;\n\n case ContextProvider:\n // Pop provider fiber\n popProvider(workInProgress);\n return null;\n\n case IncompleteClassComponent:\n {\n // Same as class component case. I put it down here so that the tags are\n // sequential to ensure this switch is compiled to a jump table.\n var _Component = workInProgress.type;\n\n if (isContextProvider(_Component)) {\n popContext(workInProgress);\n }\n\n return null;\n }\n\n case SuspenseListComponent:\n {\n popSuspenseContext(workInProgress);\n var renderState = workInProgress.memoizedState;\n\n if (renderState === null) {\n // We're running in the default, \"independent\" mode.\n // We don't do anything in this mode.\n return null;\n }\n\n var didSuspendAlready = (workInProgress.effectTag & DidCapture) !== NoEffect;\n var renderedTail = renderState.rendering;\n\n if (renderedTail === null) {\n // We just rendered the head.\n if (!didSuspendAlready) {\n // This is the first pass. We need to figure out if anything is still\n // suspended in the rendered set.\n // If new content unsuspended, but there's still some content that\n // didn't. Then we need to do a second pass that forces everything\n // to keep showing their fallbacks.\n // We might be suspended if something in this render pass suspended, or\n // something in the previous committed pass suspended. Otherwise,\n // there's no chance so we can skip the expensive call to\n // findFirstSuspended.\n var cannotBeSuspended = renderHasNotSuspendedYet() && (current === null || (current.effectTag & DidCapture) === NoEffect);\n\n if (!cannotBeSuspended) {\n var row = workInProgress.child;\n\n while (row !== null) {\n var suspended = findFirstSuspended(row);\n\n if (suspended !== null) {\n didSuspendAlready = true;\n workInProgress.effectTag |= DidCapture;\n cutOffTailIfNeeded(renderState, false); // If this is a newly suspended tree, it might not get committed as\n // part of the second pass. In that case nothing will subscribe to\n // its thennables. Instead, we'll transfer its thennables to the\n // SuspenseList so that it can retry if they resolve.\n // There might be multiple of these in the list but since we're\n // going to wait for all of them anyway, it doesn't really matter\n // which ones gets to ping. In theory we could get clever and keep\n // track of how many dependencies remain but it gets tricky because\n // in the meantime, we can add/remove/change items and dependencies.\n // We might bail out of the loop before finding any but that\n // doesn't matter since that means that the other boundaries that\n // we did find already has their listeners attached.\n\n var newThennables = suspended.updateQueue;\n\n if (newThennables !== null) {\n workInProgress.updateQueue = newThennables;\n workInProgress.effectTag |= Update;\n } // Rerender the whole list, but this time, we'll force fallbacks\n // to stay in place.\n // Reset the effect list before doing the second pass since that's now invalid.\n\n\n if (renderState.lastEffect === null) {\n workInProgress.firstEffect = null;\n }\n\n workInProgress.lastEffect = renderState.lastEffect; // Reset the child fibers to their original state.\n\n resetChildFibers(workInProgress, renderExpirationTime); // Set up the Suspense Context to force suspense and immediately\n // rerender the children.\n\n pushSuspenseContext(workInProgress, setShallowSuspenseContext(suspenseStackCursor.current, ForceSuspenseFallback));\n return workInProgress.child;\n }\n\n row = row.sibling;\n }\n }\n } else {\n cutOffTailIfNeeded(renderState, false);\n } // Next we're going to render the tail.\n\n } else {\n // Append the rendered row to the child list.\n if (!didSuspendAlready) {\n var _suspended = findFirstSuspended(renderedTail);\n\n if (_suspended !== null) {\n workInProgress.effectTag |= DidCapture;\n didSuspendAlready = true; // Ensure we transfer the update queue to the parent so that it doesn't\n // get lost if this row ends up dropped during a second pass.\n\n var _newThennables = _suspended.updateQueue;\n\n if (_newThennables !== null) {\n workInProgress.updateQueue = _newThennables;\n workInProgress.effectTag |= Update;\n }\n\n cutOffTailIfNeeded(renderState, true); // This might have been modified.\n\n if (renderState.tail === null && renderState.tailMode === 'hidden' && !renderedTail.alternate) {\n // We need to delete the row we just rendered.\n // Reset the effect list to what it was before we rendered this\n // child. The nested children have already appended themselves.\n var lastEffect = workInProgress.lastEffect = renderState.lastEffect; // Remove any effects that were appended after this point.\n\n if (lastEffect !== null) {\n lastEffect.nextEffect = null;\n } // We're done.\n\n\n return null;\n }\n } else if ( // The time it took to render last row is greater than time until\n // the expiration.\n now() * 2 - renderState.renderingStartTime > renderState.tailExpiration && renderExpirationTime > Never) {\n // We have now passed our CPU deadline and we'll just give up further\n // attempts to render the main content and only render fallbacks.\n // The assumption is that this is usually faster.\n workInProgress.effectTag |= DidCapture;\n didSuspendAlready = true;\n cutOffTailIfNeeded(renderState, false); // Since nothing actually suspended, there will nothing to ping this\n // to get it started back up to attempt the next item. If we can show\n // them, then they really have the same priority as this render.\n // So we'll pick it back up the very next render pass once we've had\n // an opportunity to yield for paint.\n\n var nextPriority = renderExpirationTime - 1;\n workInProgress.expirationTime = workInProgress.childExpirationTime = nextPriority;\n\n {\n markSpawnedWork(nextPriority);\n }\n }\n }\n\n if (renderState.isBackwards) {\n // The effect list of the backwards tail will have been added\n // to the end. This breaks the guarantee that life-cycles fire in\n // sibling order but that isn't a strong guarantee promised by React.\n // Especially since these might also just pop in during future commits.\n // Append to the beginning of the list.\n renderedTail.sibling = workInProgress.child;\n workInProgress.child = renderedTail;\n } else {\n var previousSibling = renderState.last;\n\n if (previousSibling !== null) {\n previousSibling.sibling = renderedTail;\n } else {\n workInProgress.child = renderedTail;\n }\n\n renderState.last = renderedTail;\n }\n }\n\n if (renderState.tail !== null) {\n // We still have tail rows to render.\n if (renderState.tailExpiration === 0) {\n // Heuristic for how long we're willing to spend rendering rows\n // until we just give up and show what we have so far.\n var TAIL_EXPIRATION_TIMEOUT_MS = 500;\n renderState.tailExpiration = now() + TAIL_EXPIRATION_TIMEOUT_MS; // TODO: This is meant to mimic the train model or JND but this\n // is a per component value. It should really be since the start\n // of the total render or last commit. Consider using something like\n // globalMostRecentFallbackTime. That doesn't account for being\n // suspended for part of the time or when it's a new render.\n // It should probably use a global start time value instead.\n } // Pop a row.\n\n\n var next = renderState.tail;\n renderState.rendering = next;\n renderState.tail = next.sibling;\n renderState.lastEffect = workInProgress.lastEffect;\n renderState.renderingStartTime = now();\n next.sibling = null; // Restore the context.\n // TODO: We can probably just avoid popping it instead and only\n // setting it the first time we go from not suspended to suspended.\n\n var suspenseContext = suspenseStackCursor.current;\n\n if (didSuspendAlready) {\n suspenseContext = setShallowSuspenseContext(suspenseContext, ForceSuspenseFallback);\n } else {\n suspenseContext = setDefaultShallowSuspenseContext(suspenseContext);\n }\n\n pushSuspenseContext(workInProgress, suspenseContext); // Do a pass over the next row.\n\n return next;\n }\n\n return null;\n }\n }\n\n {\n {\n throw Error( \"Unknown unit of work tag (\" + workInProgress.tag + \"). This error is likely caused by a bug in React. Please file an issue.\" );\n }\n }\n}\n\nfunction unwindWork(workInProgress, renderExpirationTime) {\n switch (workInProgress.tag) {\n case ClassComponent:\n {\n var Component = workInProgress.type;\n\n if (isContextProvider(Component)) {\n popContext(workInProgress);\n }\n\n var effectTag = workInProgress.effectTag;\n\n if (effectTag & ShouldCapture) {\n workInProgress.effectTag = effectTag & ~ShouldCapture | DidCapture;\n return workInProgress;\n }\n\n return null;\n }\n\n case HostRoot:\n {\n popHostContainer(workInProgress);\n popTopLevelContextObject(workInProgress);\n var _effectTag = workInProgress.effectTag;\n\n if (!((_effectTag & DidCapture) === NoEffect)) {\n {\n throw Error( \"The root failed to unmount after an error. This is likely a bug in React. Please file an issue.\" );\n }\n }\n\n workInProgress.effectTag = _effectTag & ~ShouldCapture | DidCapture;\n return workInProgress;\n }\n\n case HostComponent:\n {\n // TODO: popHydrationState\n popHostContext(workInProgress);\n return null;\n }\n\n case SuspenseComponent:\n {\n popSuspenseContext(workInProgress);\n\n var _effectTag2 = workInProgress.effectTag;\n\n if (_effectTag2 & ShouldCapture) {\n workInProgress.effectTag = _effectTag2 & ~ShouldCapture | DidCapture; // Captured a suspense effect. Re-render the boundary.\n\n return workInProgress;\n }\n\n return null;\n }\n\n case SuspenseListComponent:\n {\n popSuspenseContext(workInProgress); // SuspenseList doesn't actually catch anything. It should've been\n // caught by a nested boundary. If not, it should bubble through.\n\n return null;\n }\n\n case HostPortal:\n popHostContainer(workInProgress);\n return null;\n\n case ContextProvider:\n popProvider(workInProgress);\n return null;\n\n default:\n return null;\n }\n}\n\nfunction unwindInterruptedWork(interruptedWork) {\n switch (interruptedWork.tag) {\n case ClassComponent:\n {\n var childContextTypes = interruptedWork.type.childContextTypes;\n\n if (childContextTypes !== null && childContextTypes !== undefined) {\n popContext(interruptedWork);\n }\n\n break;\n }\n\n case HostRoot:\n {\n popHostContainer(interruptedWork);\n popTopLevelContextObject(interruptedWork);\n break;\n }\n\n case HostComponent:\n {\n popHostContext(interruptedWork);\n break;\n }\n\n case HostPortal:\n popHostContainer(interruptedWork);\n break;\n\n case SuspenseComponent:\n popSuspenseContext(interruptedWork);\n break;\n\n case SuspenseListComponent:\n popSuspenseContext(interruptedWork);\n break;\n\n case ContextProvider:\n popProvider(interruptedWork);\n break;\n }\n}\n\nfunction createCapturedValue(value, source) {\n // If the value is an error, call this function immediately after it is thrown\n // so the stack is accurate.\n return {\n value: value,\n source: source,\n stack: getStackByFiberInDevAndProd(source)\n };\n}\n\nfunction logCapturedError(capturedError) {\n\n var error = capturedError.error;\n\n {\n var componentName = capturedError.componentName,\n componentStack = capturedError.componentStack,\n errorBoundaryName = capturedError.errorBoundaryName,\n errorBoundaryFound = capturedError.errorBoundaryFound,\n willRetry = capturedError.willRetry; // Browsers support silencing uncaught errors by calling\n // `preventDefault()` in window `error` handler.\n // We record this information as an expando on the error.\n\n if (error != null && error._suppressLogging) {\n if (errorBoundaryFound && willRetry) {\n // The error is recoverable and was silenced.\n // Ignore it and don't print the stack addendum.\n // This is handy for testing error boundaries without noise.\n return;\n } // The error is fatal. Since the silencing might have\n // been accidental, we'll surface it anyway.\n // However, the browser would have silenced the original error\n // so we'll print it first, and then print the stack addendum.\n\n\n console['error'](error); // Don't transform to our wrapper\n // For a more detailed description of this block, see:\n // https://github.com/facebook/react/pull/13384\n }\n\n var componentNameMessage = componentName ? \"The above error occurred in the <\" + componentName + \"> component:\" : 'The above error occurred in one of your React components:';\n var errorBoundaryMessage; // errorBoundaryFound check is sufficient; errorBoundaryName check is to satisfy Flow.\n\n if (errorBoundaryFound && errorBoundaryName) {\n if (willRetry) {\n errorBoundaryMessage = \"React will try to recreate this component tree from scratch \" + (\"using the error boundary you provided, \" + errorBoundaryName + \".\");\n } else {\n errorBoundaryMessage = \"This error was initially handled by the error boundary \" + errorBoundaryName + \".\\n\" + \"Recreating the tree from scratch failed so React will unmount the tree.\";\n }\n } else {\n errorBoundaryMessage = 'Consider adding an error boundary to your tree to customize error handling behavior.\\n' + 'Visit https://fb.me/react-error-boundaries to learn more about error boundaries.';\n }\n\n var combinedMessage = \"\" + componentNameMessage + componentStack + \"\\n\\n\" + (\"\" + errorBoundaryMessage); // In development, we provide our own message with just the component stack.\n // We don't include the original error message and JS stack because the browser\n // has already printed it. Even if the application swallows the error, it is still\n // displayed by the browser thanks to the DEV-only fake event trick in ReactErrorUtils.\n\n console['error'](combinedMessage); // Don't transform to our wrapper\n }\n}\n\nvar didWarnAboutUndefinedSnapshotBeforeUpdate = null;\n\n{\n didWarnAboutUndefinedSnapshotBeforeUpdate = new Set();\n}\n\nvar PossiblyWeakSet = typeof WeakSet === 'function' ? WeakSet : Set;\nfunction logError(boundary, errorInfo) {\n var source = errorInfo.source;\n var stack = errorInfo.stack;\n\n if (stack === null && source !== null) {\n stack = getStackByFiberInDevAndProd(source);\n }\n\n var capturedError = {\n componentName: source !== null ? getComponentName(source.type) : null,\n componentStack: stack !== null ? stack : '',\n error: errorInfo.value,\n errorBoundary: null,\n errorBoundaryName: null,\n errorBoundaryFound: false,\n willRetry: false\n };\n\n if (boundary !== null && boundary.tag === ClassComponent) {\n capturedError.errorBoundary = boundary.stateNode;\n capturedError.errorBoundaryName = getComponentName(boundary.type);\n capturedError.errorBoundaryFound = true;\n capturedError.willRetry = true;\n }\n\n try {\n logCapturedError(capturedError);\n } catch (e) {\n // This method must not throw, or React internal state will get messed up.\n // If console.error is overridden, or logCapturedError() shows a dialog that throws,\n // we want to report this error outside of the normal stack as a last resort.\n // https://github.com/facebook/react/issues/13188\n setTimeout(function () {\n throw e;\n });\n }\n}\n\nvar callComponentWillUnmountWithTimer = function (current, instance) {\n startPhaseTimer(current, 'componentWillUnmount');\n instance.props = current.memoizedProps;\n instance.state = current.memoizedState;\n instance.componentWillUnmount();\n stopPhaseTimer();\n}; // Capture errors so they don't interrupt unmounting.\n\n\nfunction safelyCallComponentWillUnmount(current, instance) {\n {\n invokeGuardedCallback(null, callComponentWillUnmountWithTimer, null, current, instance);\n\n if (hasCaughtError()) {\n var unmountError = clearCaughtError();\n captureCommitPhaseError(current, unmountError);\n }\n }\n}\n\nfunction safelyDetachRef(current) {\n var ref = current.ref;\n\n if (ref !== null) {\n if (typeof ref === 'function') {\n {\n invokeGuardedCallback(null, ref, null, null);\n\n if (hasCaughtError()) {\n var refError = clearCaughtError();\n captureCommitPhaseError(current, refError);\n }\n }\n } else {\n ref.current = null;\n }\n }\n}\n\nfunction safelyCallDestroy(current, destroy) {\n {\n invokeGuardedCallback(null, destroy, null);\n\n if (hasCaughtError()) {\n var error = clearCaughtError();\n captureCommitPhaseError(current, error);\n }\n }\n}\n\nfunction commitBeforeMutationLifeCycles(current, finishedWork) {\n switch (finishedWork.tag) {\n case FunctionComponent:\n case ForwardRef:\n case SimpleMemoComponent:\n case Block:\n {\n return;\n }\n\n case ClassComponent:\n {\n if (finishedWork.effectTag & Snapshot) {\n if (current !== null) {\n var prevProps = current.memoizedProps;\n var prevState = current.memoizedState;\n startPhaseTimer(finishedWork, 'getSnapshotBeforeUpdate');\n var instance = finishedWork.stateNode; // We could update instance props and state here,\n // but instead we rely on them being set during last render.\n // TODO: revisit this when we implement resuming.\n\n {\n if (finishedWork.type === finishedWork.elementType && !didWarnAboutReassigningProps) {\n if (instance.props !== finishedWork.memoizedProps) {\n error('Expected %s props to match memoized props before ' + 'getSnapshotBeforeUpdate. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance');\n }\n\n if (instance.state !== finishedWork.memoizedState) {\n error('Expected %s state to match memoized state before ' + 'getSnapshotBeforeUpdate. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance');\n }\n }\n }\n\n var snapshot = instance.getSnapshotBeforeUpdate(finishedWork.elementType === finishedWork.type ? prevProps : resolveDefaultProps(finishedWork.type, prevProps), prevState);\n\n {\n var didWarnSet = didWarnAboutUndefinedSnapshotBeforeUpdate;\n\n if (snapshot === undefined && !didWarnSet.has(finishedWork.type)) {\n didWarnSet.add(finishedWork.type);\n\n error('%s.getSnapshotBeforeUpdate(): A snapshot value (or null) ' + 'must be returned. You have returned undefined.', getComponentName(finishedWork.type));\n }\n }\n\n instance.__reactInternalSnapshotBeforeUpdate = snapshot;\n stopPhaseTimer();\n }\n }\n\n return;\n }\n\n case HostRoot:\n case HostComponent:\n case HostText:\n case HostPortal:\n case IncompleteClassComponent:\n // Nothing to do for these component types\n return;\n }\n\n {\n {\n throw Error( \"This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.\" );\n }\n }\n}\n\nfunction commitHookEffectListUnmount(tag, finishedWork) {\n var updateQueue = finishedWork.updateQueue;\n var lastEffect = updateQueue !== null ? updateQueue.lastEffect : null;\n\n if (lastEffect !== null) {\n var firstEffect = lastEffect.next;\n var effect = firstEffect;\n\n do {\n if ((effect.tag & tag) === tag) {\n // Unmount\n var destroy = effect.destroy;\n effect.destroy = undefined;\n\n if (destroy !== undefined) {\n destroy();\n }\n }\n\n effect = effect.next;\n } while (effect !== firstEffect);\n }\n}\n\nfunction commitHookEffectListMount(tag, finishedWork) {\n var updateQueue = finishedWork.updateQueue;\n var lastEffect = updateQueue !== null ? updateQueue.lastEffect : null;\n\n if (lastEffect !== null) {\n var firstEffect = lastEffect.next;\n var effect = firstEffect;\n\n do {\n if ((effect.tag & tag) === tag) {\n // Mount\n var create = effect.create;\n effect.destroy = create();\n\n {\n var destroy = effect.destroy;\n\n if (destroy !== undefined && typeof destroy !== 'function') {\n var addendum = void 0;\n\n if (destroy === null) {\n addendum = ' You returned null. If your effect does not require clean ' + 'up, return undefined (or nothing).';\n } else if (typeof destroy.then === 'function') {\n addendum = '\\n\\nIt looks like you wrote useEffect(async () => ...) or returned a Promise. ' + 'Instead, write the async function inside your effect ' + 'and call it immediately:\\n\\n' + 'useEffect(() => {\\n' + ' async function fetchData() {\\n' + ' // You can await here\\n' + ' const response = await MyAPI.getData(someId);\\n' + ' // ...\\n' + ' }\\n' + ' fetchData();\\n' + \"}, [someId]); // Or [] if effect doesn't need props or state\\n\\n\" + 'Learn more about data fetching with Hooks: https://fb.me/react-hooks-data-fetching';\n } else {\n addendum = ' You returned: ' + destroy;\n }\n\n error('An effect function must not return anything besides a function, ' + 'which is used for clean-up.%s%s', addendum, getStackByFiberInDevAndProd(finishedWork));\n }\n }\n }\n\n effect = effect.next;\n } while (effect !== firstEffect);\n }\n}\n\nfunction commitPassiveHookEffects(finishedWork) {\n if ((finishedWork.effectTag & Passive) !== NoEffect) {\n switch (finishedWork.tag) {\n case FunctionComponent:\n case ForwardRef:\n case SimpleMemoComponent:\n case Block:\n {\n // TODO (#17945) We should call all passive destroy functions (for all fibers)\n // before calling any create functions. The current approach only serializes\n // these for a single fiber.\n commitHookEffectListUnmount(Passive$1 | HasEffect, finishedWork);\n commitHookEffectListMount(Passive$1 | HasEffect, finishedWork);\n break;\n }\n }\n }\n}\n\nfunction commitLifeCycles(finishedRoot, current, finishedWork, committedExpirationTime) {\n switch (finishedWork.tag) {\n case FunctionComponent:\n case ForwardRef:\n case SimpleMemoComponent:\n case Block:\n {\n // At this point layout effects have already been destroyed (during mutation phase).\n // This is done to prevent sibling component effects from interfering with each other,\n // e.g. a destroy function in one component should never override a ref set\n // by a create function in another component during the same commit.\n commitHookEffectListMount(Layout | HasEffect, finishedWork);\n\n return;\n }\n\n case ClassComponent:\n {\n var instance = finishedWork.stateNode;\n\n if (finishedWork.effectTag & Update) {\n if (current === null) {\n startPhaseTimer(finishedWork, 'componentDidMount'); // We could update instance props and state here,\n // but instead we rely on them being set during last render.\n // TODO: revisit this when we implement resuming.\n\n {\n if (finishedWork.type === finishedWork.elementType && !didWarnAboutReassigningProps) {\n if (instance.props !== finishedWork.memoizedProps) {\n error('Expected %s props to match memoized props before ' + 'componentDidMount. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance');\n }\n\n if (instance.state !== finishedWork.memoizedState) {\n error('Expected %s state to match memoized state before ' + 'componentDidMount. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance');\n }\n }\n }\n\n instance.componentDidMount();\n stopPhaseTimer();\n } else {\n var prevProps = finishedWork.elementType === finishedWork.type ? current.memoizedProps : resolveDefaultProps(finishedWork.type, current.memoizedProps);\n var prevState = current.memoizedState;\n startPhaseTimer(finishedWork, 'componentDidUpdate'); // We could update instance props and state here,\n // but instead we rely on them being set during last render.\n // TODO: revisit this when we implement resuming.\n\n {\n if (finishedWork.type === finishedWork.elementType && !didWarnAboutReassigningProps) {\n if (instance.props !== finishedWork.memoizedProps) {\n error('Expected %s props to match memoized props before ' + 'componentDidUpdate. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance');\n }\n\n if (instance.state !== finishedWork.memoizedState) {\n error('Expected %s state to match memoized state before ' + 'componentDidUpdate. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance');\n }\n }\n }\n\n instance.componentDidUpdate(prevProps, prevState, instance.__reactInternalSnapshotBeforeUpdate);\n stopPhaseTimer();\n }\n }\n\n var updateQueue = finishedWork.updateQueue;\n\n if (updateQueue !== null) {\n {\n if (finishedWork.type === finishedWork.elementType && !didWarnAboutReassigningProps) {\n if (instance.props !== finishedWork.memoizedProps) {\n error('Expected %s props to match memoized props before ' + 'processing the update queue. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance');\n }\n\n if (instance.state !== finishedWork.memoizedState) {\n error('Expected %s state to match memoized state before ' + 'processing the update queue. ' + 'This might either be because of a bug in React, or because ' + 'a component reassigns its own `this.props`. ' + 'Please file an issue.', getComponentName(finishedWork.type) || 'instance');\n }\n }\n } // We could update instance props and state here,\n // but instead we rely on them being set during last render.\n // TODO: revisit this when we implement resuming.\n\n\n commitUpdateQueue(finishedWork, updateQueue, instance);\n }\n\n return;\n }\n\n case HostRoot:\n {\n var _updateQueue = finishedWork.updateQueue;\n\n if (_updateQueue !== null) {\n var _instance = null;\n\n if (finishedWork.child !== null) {\n switch (finishedWork.child.tag) {\n case HostComponent:\n _instance = getPublicInstance(finishedWork.child.stateNode);\n break;\n\n case ClassComponent:\n _instance = finishedWork.child.stateNode;\n break;\n }\n }\n\n commitUpdateQueue(finishedWork, _updateQueue, _instance);\n }\n\n return;\n }\n\n case HostComponent:\n {\n var _instance2 = finishedWork.stateNode; // Renderers may schedule work to be done after host components are mounted\n // (eg DOM renderer may schedule auto-focus for inputs and form controls).\n // These effects should only be committed when components are first mounted,\n // aka when there is no current/alternate.\n\n if (current === null && finishedWork.effectTag & Update) {\n var type = finishedWork.type;\n var props = finishedWork.memoizedProps;\n commitMount(_instance2, type, props);\n }\n\n return;\n }\n\n case HostText:\n {\n // We have no life-cycles associated with text.\n return;\n }\n\n case HostPortal:\n {\n // We have no life-cycles associated with portals.\n return;\n }\n\n case Profiler:\n {\n {\n var onRender = finishedWork.memoizedProps.onRender;\n\n if (typeof onRender === 'function') {\n {\n onRender(finishedWork.memoizedProps.id, current === null ? 'mount' : 'update', finishedWork.actualDuration, finishedWork.treeBaseDuration, finishedWork.actualStartTime, getCommitTime(), finishedRoot.memoizedInteractions);\n }\n }\n }\n\n return;\n }\n\n case SuspenseComponent:\n {\n commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);\n return;\n }\n\n case SuspenseListComponent:\n case IncompleteClassComponent:\n case FundamentalComponent:\n case ScopeComponent:\n return;\n }\n\n {\n {\n throw Error( \"This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.\" );\n }\n }\n}\n\nfunction hideOrUnhideAllChildren(finishedWork, isHidden) {\n {\n // We only have the top Fiber that was inserted but we need to recurse down its\n // children to find all the terminal nodes.\n var node = finishedWork;\n\n while (true) {\n if (node.tag === HostComponent) {\n var instance = node.stateNode;\n\n if (isHidden) {\n hideInstance(instance);\n } else {\n unhideInstance(node.stateNode, node.memoizedProps);\n }\n } else if (node.tag === HostText) {\n var _instance3 = node.stateNode;\n\n if (isHidden) {\n hideTextInstance(_instance3);\n } else {\n unhideTextInstance(_instance3, node.memoizedProps);\n }\n } else if (node.tag === SuspenseComponent && node.memoizedState !== null && node.memoizedState.dehydrated === null) {\n // Found a nested Suspense component that timed out. Skip over the\n // primary child fragment, which should remain hidden.\n var fallbackChildFragment = node.child.sibling;\n fallbackChildFragment.return = node;\n node = fallbackChildFragment;\n continue;\n } else if (node.child !== null) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n\n if (node === finishedWork) {\n return;\n }\n\n while (node.sibling === null) {\n if (node.return === null || node.return === finishedWork) {\n return;\n }\n\n node = node.return;\n }\n\n node.sibling.return = node.return;\n node = node.sibling;\n }\n }\n}\n\nfunction commitAttachRef(finishedWork) {\n var ref = finishedWork.ref;\n\n if (ref !== null) {\n var instance = finishedWork.stateNode;\n var instanceToUse;\n\n switch (finishedWork.tag) {\n case HostComponent:\n instanceToUse = getPublicInstance(instance);\n break;\n\n default:\n instanceToUse = instance;\n } // Moved outside to ensure DCE works with this flag\n\n if (typeof ref === 'function') {\n ref(instanceToUse);\n } else {\n {\n if (!ref.hasOwnProperty('current')) {\n error('Unexpected ref object provided for %s. ' + 'Use either a ref-setter function or React.createRef().%s', getComponentName(finishedWork.type), getStackByFiberInDevAndProd(finishedWork));\n }\n }\n\n ref.current = instanceToUse;\n }\n }\n}\n\nfunction commitDetachRef(current) {\n var currentRef = current.ref;\n\n if (currentRef !== null) {\n if (typeof currentRef === 'function') {\n currentRef(null);\n } else {\n currentRef.current = null;\n }\n }\n} // User-originating errors (lifecycles and refs) should not interrupt\n// deletion, so don't let them throw. Host-originating errors should\n// interrupt deletion, so it's okay\n\n\nfunction commitUnmount(finishedRoot, current, renderPriorityLevel) {\n onCommitUnmount(current);\n\n switch (current.tag) {\n case FunctionComponent:\n case ForwardRef:\n case MemoComponent:\n case SimpleMemoComponent:\n case Block:\n {\n var updateQueue = current.updateQueue;\n\n if (updateQueue !== null) {\n var lastEffect = updateQueue.lastEffect;\n\n if (lastEffect !== null) {\n var firstEffect = lastEffect.next;\n\n {\n // When the owner fiber is deleted, the destroy function of a passive\n // effect hook is called during the synchronous commit phase. This is\n // a concession to implementation complexity. Calling it in the\n // passive effect phase (like they usually are, when dependencies\n // change during an update) would require either traversing the\n // children of the deleted fiber again, or including unmount effects\n // as part of the fiber effect list.\n //\n // Because this is during the sync commit phase, we need to change\n // the priority.\n //\n // TODO: Reconsider this implementation trade off.\n var priorityLevel = renderPriorityLevel > NormalPriority ? NormalPriority : renderPriorityLevel;\n runWithPriority$1(priorityLevel, function () {\n var effect = firstEffect;\n\n do {\n var _destroy = effect.destroy;\n\n if (_destroy !== undefined) {\n safelyCallDestroy(current, _destroy);\n }\n\n effect = effect.next;\n } while (effect !== firstEffect);\n });\n }\n }\n }\n\n return;\n }\n\n case ClassComponent:\n {\n safelyDetachRef(current);\n var instance = current.stateNode;\n\n if (typeof instance.componentWillUnmount === 'function') {\n safelyCallComponentWillUnmount(current, instance);\n }\n\n return;\n }\n\n case HostComponent:\n {\n\n safelyDetachRef(current);\n return;\n }\n\n case HostPortal:\n {\n // TODO: this is recursive.\n // We are also not using this parent because\n // the portal will get pushed immediately.\n {\n unmountHostComponents(finishedRoot, current, renderPriorityLevel);\n }\n\n return;\n }\n\n case FundamentalComponent:\n {\n\n return;\n }\n\n case DehydratedFragment:\n {\n\n return;\n }\n\n case ScopeComponent:\n {\n\n return;\n }\n }\n}\n\nfunction commitNestedUnmounts(finishedRoot, root, renderPriorityLevel) {\n // While we're inside a removed host node we don't want to call\n // removeChild on the inner nodes because they're removed by the top\n // call anyway. We also want to call componentWillUnmount on all\n // composites before this host node is removed from the tree. Therefore\n // we do an inner loop while we're still inside the host node.\n var node = root;\n\n while (true) {\n commitUnmount(finishedRoot, node, renderPriorityLevel); // Visit children because they may contain more composite or host nodes.\n // Skip portals because commitUnmount() currently visits them recursively.\n\n if (node.child !== null && ( // If we use mutation we drill down into portals using commitUnmount above.\n // If we don't use mutation we drill down into portals here instead.\n node.tag !== HostPortal)) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n\n if (node === root) {\n return;\n }\n\n while (node.sibling === null) {\n if (node.return === null || node.return === root) {\n return;\n }\n\n node = node.return;\n }\n\n node.sibling.return = node.return;\n node = node.sibling;\n }\n}\n\nfunction detachFiber(current) {\n var alternate = current.alternate; // Cut off the return pointers to disconnect it from the tree. Ideally, we\n // should clear the child pointer of the parent alternate to let this\n // get GC:ed but we don't know which for sure which parent is the current\n // one so we'll settle for GC:ing the subtree of this child. This child\n // itself will be GC:ed when the parent updates the next time.\n\n current.return = null;\n current.child = null;\n current.memoizedState = null;\n current.updateQueue = null;\n current.dependencies = null;\n current.alternate = null;\n current.firstEffect = null;\n current.lastEffect = null;\n current.pendingProps = null;\n current.memoizedProps = null;\n current.stateNode = null;\n\n if (alternate !== null) {\n detachFiber(alternate);\n }\n}\n\nfunction getHostParentFiber(fiber) {\n var parent = fiber.return;\n\n while (parent !== null) {\n if (isHostParent(parent)) {\n return parent;\n }\n\n parent = parent.return;\n }\n\n {\n {\n throw Error( \"Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue.\" );\n }\n }\n}\n\nfunction isHostParent(fiber) {\n return fiber.tag === HostComponent || fiber.tag === HostRoot || fiber.tag === HostPortal;\n}\n\nfunction getHostSibling(fiber) {\n // We're going to search forward into the tree until we find a sibling host\n // node. Unfortunately, if multiple insertions are done in a row we have to\n // search past them. This leads to exponential search for the next sibling.\n // TODO: Find a more efficient way to do this.\n var node = fiber;\n\n siblings: while (true) {\n // If we didn't find anything, let's try the next sibling.\n while (node.sibling === null) {\n if (node.return === null || isHostParent(node.return)) {\n // If we pop out of the root or hit the parent the fiber we are the\n // last sibling.\n return null;\n }\n\n node = node.return;\n }\n\n node.sibling.return = node.return;\n node = node.sibling;\n\n while (node.tag !== HostComponent && node.tag !== HostText && node.tag !== DehydratedFragment) {\n // If it is not host node and, we might have a host node inside it.\n // Try to search down until we find one.\n if (node.effectTag & Placement) {\n // If we don't have a child, try the siblings instead.\n continue siblings;\n } // If we don't have a child, try the siblings instead.\n // We also skip portals because they are not part of this host tree.\n\n\n if (node.child === null || node.tag === HostPortal) {\n continue siblings;\n } else {\n node.child.return = node;\n node = node.child;\n }\n } // Check if this host node is stable or about to be placed.\n\n\n if (!(node.effectTag & Placement)) {\n // Found it!\n return node.stateNode;\n }\n }\n}\n\nfunction commitPlacement(finishedWork) {\n\n\n var parentFiber = getHostParentFiber(finishedWork); // Note: these two variables *must* always be updated together.\n\n var parent;\n var isContainer;\n var parentStateNode = parentFiber.stateNode;\n\n switch (parentFiber.tag) {\n case HostComponent:\n parent = parentStateNode;\n isContainer = false;\n break;\n\n case HostRoot:\n parent = parentStateNode.containerInfo;\n isContainer = true;\n break;\n\n case HostPortal:\n parent = parentStateNode.containerInfo;\n isContainer = true;\n break;\n\n case FundamentalComponent:\n\n // eslint-disable-next-line-no-fallthrough\n\n default:\n {\n {\n throw Error( \"Invalid host parent fiber. This error is likely caused by a bug in React. Please file an issue.\" );\n }\n }\n\n }\n\n if (parentFiber.effectTag & ContentReset) {\n // Reset the text content of the parent before doing any insertions\n resetTextContent(parent); // Clear ContentReset from the effect tag\n\n parentFiber.effectTag &= ~ContentReset;\n }\n\n var before = getHostSibling(finishedWork); // We only have the top Fiber that was inserted but we need to recurse down its\n // children to find all the terminal nodes.\n\n if (isContainer) {\n insertOrAppendPlacementNodeIntoContainer(finishedWork, before, parent);\n } else {\n insertOrAppendPlacementNode(finishedWork, before, parent);\n }\n}\n\nfunction insertOrAppendPlacementNodeIntoContainer(node, before, parent) {\n var tag = node.tag;\n var isHost = tag === HostComponent || tag === HostText;\n\n if (isHost || enableFundamentalAPI ) {\n var stateNode = isHost ? node.stateNode : node.stateNode.instance;\n\n if (before) {\n insertInContainerBefore(parent, stateNode, before);\n } else {\n appendChildToContainer(parent, stateNode);\n }\n } else if (tag === HostPortal) ; else {\n var child = node.child;\n\n if (child !== null) {\n insertOrAppendPlacementNodeIntoContainer(child, before, parent);\n var sibling = child.sibling;\n\n while (sibling !== null) {\n insertOrAppendPlacementNodeIntoContainer(sibling, before, parent);\n sibling = sibling.sibling;\n }\n }\n }\n}\n\nfunction insertOrAppendPlacementNode(node, before, parent) {\n var tag = node.tag;\n var isHost = tag === HostComponent || tag === HostText;\n\n if (isHost || enableFundamentalAPI ) {\n var stateNode = isHost ? node.stateNode : node.stateNode.instance;\n\n if (before) {\n insertBefore(parent, stateNode, before);\n } else {\n appendChild(parent, stateNode);\n }\n } else if (tag === HostPortal) ; else {\n var child = node.child;\n\n if (child !== null) {\n insertOrAppendPlacementNode(child, before, parent);\n var sibling = child.sibling;\n\n while (sibling !== null) {\n insertOrAppendPlacementNode(sibling, before, parent);\n sibling = sibling.sibling;\n }\n }\n }\n}\n\nfunction unmountHostComponents(finishedRoot, current, renderPriorityLevel) {\n // We only have the top Fiber that was deleted but we need to recurse down its\n // children to find all the terminal nodes.\n var node = current; // Each iteration, currentParent is populated with node's host parent if not\n // currentParentIsValid.\n\n var currentParentIsValid = false; // Note: these two variables *must* always be updated together.\n\n var currentParent;\n var currentParentIsContainer;\n\n while (true) {\n if (!currentParentIsValid) {\n var parent = node.return;\n\n findParent: while (true) {\n if (!(parent !== null)) {\n {\n throw Error( \"Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue.\" );\n }\n }\n\n var parentStateNode = parent.stateNode;\n\n switch (parent.tag) {\n case HostComponent:\n currentParent = parentStateNode;\n currentParentIsContainer = false;\n break findParent;\n\n case HostRoot:\n currentParent = parentStateNode.containerInfo;\n currentParentIsContainer = true;\n break findParent;\n\n case HostPortal:\n currentParent = parentStateNode.containerInfo;\n currentParentIsContainer = true;\n break findParent;\n\n }\n\n parent = parent.return;\n }\n\n currentParentIsValid = true;\n }\n\n if (node.tag === HostComponent || node.tag === HostText) {\n commitNestedUnmounts(finishedRoot, node, renderPriorityLevel); // After all the children have unmounted, it is now safe to remove the\n // node from the tree.\n\n if (currentParentIsContainer) {\n removeChildFromContainer(currentParent, node.stateNode);\n } else {\n removeChild(currentParent, node.stateNode);\n } // Don't visit children because we already visited them.\n\n } else if (node.tag === HostPortal) {\n if (node.child !== null) {\n // When we go into a portal, it becomes the parent to remove from.\n // We will reassign it back when we pop the portal on the way up.\n currentParent = node.stateNode.containerInfo;\n currentParentIsContainer = true; // Visit children because portals might contain host components.\n\n node.child.return = node;\n node = node.child;\n continue;\n }\n } else {\n commitUnmount(finishedRoot, node, renderPriorityLevel); // Visit children because we may find more host components below.\n\n if (node.child !== null) {\n node.child.return = node;\n node = node.child;\n continue;\n }\n }\n\n if (node === current) {\n return;\n }\n\n while (node.sibling === null) {\n if (node.return === null || node.return === current) {\n return;\n }\n\n node = node.return;\n\n if (node.tag === HostPortal) {\n // When we go out of the portal, we need to restore the parent.\n // Since we don't keep a stack of them, we will search for it.\n currentParentIsValid = false;\n }\n }\n\n node.sibling.return = node.return;\n node = node.sibling;\n }\n}\n\nfunction commitDeletion(finishedRoot, current, renderPriorityLevel) {\n {\n // Recursively delete all host nodes from the parent.\n // Detach refs and call componentWillUnmount() on the whole subtree.\n unmountHostComponents(finishedRoot, current, renderPriorityLevel);\n }\n\n detachFiber(current);\n}\n\nfunction commitWork(current, finishedWork) {\n\n switch (finishedWork.tag) {\n case FunctionComponent:\n case ForwardRef:\n case MemoComponent:\n case SimpleMemoComponent:\n case Block:\n {\n // Layout effects are destroyed during the mutation phase so that all\n // destroy functions for all fibers are called before any create functions.\n // This prevents sibling component effects from interfering with each other,\n // e.g. a destroy function in one component should never override a ref set\n // by a create function in another component during the same commit.\n commitHookEffectListUnmount(Layout | HasEffect, finishedWork);\n return;\n }\n\n case ClassComponent:\n {\n return;\n }\n\n case HostComponent:\n {\n var instance = finishedWork.stateNode;\n\n if (instance != null) {\n // Commit the work prepared earlier.\n var newProps = finishedWork.memoizedProps; // For hydration we reuse the update path but we treat the oldProps\n // as the newProps. The updatePayload will contain the real change in\n // this case.\n\n var oldProps = current !== null ? current.memoizedProps : newProps;\n var type = finishedWork.type; // TODO: Type the updateQueue to be specific to host components.\n\n var updatePayload = finishedWork.updateQueue;\n finishedWork.updateQueue = null;\n\n if (updatePayload !== null) {\n commitUpdate(instance, updatePayload, type, oldProps, newProps);\n }\n }\n\n return;\n }\n\n case HostText:\n {\n if (!(finishedWork.stateNode !== null)) {\n {\n throw Error( \"This should have a text node initialized. This error is likely caused by a bug in React. Please file an issue.\" );\n }\n }\n\n var textInstance = finishedWork.stateNode;\n var newText = finishedWork.memoizedProps; // For hydration we reuse the update path but we treat the oldProps\n // as the newProps. The updatePayload will contain the real change in\n // this case.\n\n var oldText = current !== null ? current.memoizedProps : newText;\n commitTextUpdate(textInstance, oldText, newText);\n return;\n }\n\n case HostRoot:\n {\n {\n var _root = finishedWork.stateNode;\n\n if (_root.hydrate) {\n // We've just hydrated. No need to hydrate again.\n _root.hydrate = false;\n commitHydratedContainer(_root.containerInfo);\n }\n }\n\n return;\n }\n\n case Profiler:\n {\n return;\n }\n\n case SuspenseComponent:\n {\n commitSuspenseComponent(finishedWork);\n attachSuspenseRetryListeners(finishedWork);\n return;\n }\n\n case SuspenseListComponent:\n {\n attachSuspenseRetryListeners(finishedWork);\n return;\n }\n\n case IncompleteClassComponent:\n {\n return;\n }\n }\n\n {\n {\n throw Error( \"This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.\" );\n }\n }\n}\n\nfunction commitSuspenseComponent(finishedWork) {\n var newState = finishedWork.memoizedState;\n var newDidTimeout;\n var primaryChildParent = finishedWork;\n\n if (newState === null) {\n newDidTimeout = false;\n } else {\n newDidTimeout = true;\n primaryChildParent = finishedWork.child;\n markCommitTimeOfFallback();\n }\n\n if ( primaryChildParent !== null) {\n hideOrUnhideAllChildren(primaryChildParent, newDidTimeout);\n }\n}\n\nfunction commitSuspenseHydrationCallbacks(finishedRoot, finishedWork) {\n\n var newState = finishedWork.memoizedState;\n\n if (newState === null) {\n var current = finishedWork.alternate;\n\n if (current !== null) {\n var prevState = current.memoizedState;\n\n if (prevState !== null) {\n var suspenseInstance = prevState.dehydrated;\n\n if (suspenseInstance !== null) {\n commitHydratedSuspenseInstance(suspenseInstance);\n }\n }\n }\n }\n}\n\nfunction attachSuspenseRetryListeners(finishedWork) {\n // If this boundary just timed out, then it will have a set of thenables.\n // For each thenable, attach a listener so that when it resolves, React\n // attempts to re-render the boundary in the primary (pre-timeout) state.\n var thenables = finishedWork.updateQueue;\n\n if (thenables !== null) {\n finishedWork.updateQueue = null;\n var retryCache = finishedWork.stateNode;\n\n if (retryCache === null) {\n retryCache = finishedWork.stateNode = new PossiblyWeakSet();\n }\n\n thenables.forEach(function (thenable) {\n // Memoize using the boundary fiber to prevent redundant listeners.\n var retry = resolveRetryThenable.bind(null, finishedWork, thenable);\n\n if (!retryCache.has(thenable)) {\n {\n if (thenable.__reactDoNotTraceInteractions !== true) {\n retry = tracing.unstable_wrap(retry);\n }\n }\n\n retryCache.add(thenable);\n thenable.then(retry, retry);\n }\n });\n }\n}\n\nfunction commitResetTextContent(current) {\n\n resetTextContent(current.stateNode);\n}\n\nvar PossiblyWeakMap$1 = typeof WeakMap === 'function' ? WeakMap : Map;\n\nfunction createRootErrorUpdate(fiber, errorInfo, expirationTime) {\n var update = createUpdate(expirationTime, null); // Unmount the root by rendering null.\n\n update.tag = CaptureUpdate; // Caution: React DevTools currently depends on this property\n // being called \"element\".\n\n update.payload = {\n element: null\n };\n var error = errorInfo.value;\n\n update.callback = function () {\n onUncaughtError(error);\n logError(fiber, errorInfo);\n };\n\n return update;\n}\n\nfunction createClassErrorUpdate(fiber, errorInfo, expirationTime) {\n var update = createUpdate(expirationTime, null);\n update.tag = CaptureUpdate;\n var getDerivedStateFromError = fiber.type.getDerivedStateFromError;\n\n if (typeof getDerivedStateFromError === 'function') {\n var error$1 = errorInfo.value;\n\n update.payload = function () {\n logError(fiber, errorInfo);\n return getDerivedStateFromError(error$1);\n };\n }\n\n var inst = fiber.stateNode;\n\n if (inst !== null && typeof inst.componentDidCatch === 'function') {\n update.callback = function callback() {\n {\n markFailedErrorBoundaryForHotReloading(fiber);\n }\n\n if (typeof getDerivedStateFromError !== 'function') {\n // To preserve the preexisting retry behavior of error boundaries,\n // we keep track of which ones already failed during this batch.\n // This gets reset before we yield back to the browser.\n // TODO: Warn in strict mode if getDerivedStateFromError is\n // not defined.\n markLegacyErrorBoundaryAsFailed(this); // Only log here if componentDidCatch is the only error boundary method defined\n\n logError(fiber, errorInfo);\n }\n\n var error$1 = errorInfo.value;\n var stack = errorInfo.stack;\n this.componentDidCatch(error$1, {\n componentStack: stack !== null ? stack : ''\n });\n\n {\n if (typeof getDerivedStateFromError !== 'function') {\n // If componentDidCatch is the only error boundary method defined,\n // then it needs to call setState to recover from errors.\n // If no state update is scheduled then the boundary will swallow the error.\n if (fiber.expirationTime !== Sync) {\n error('%s: Error boundaries should implement getDerivedStateFromError(). ' + 'In that method, return a state update to display an error message or fallback UI.', getComponentName(fiber.type) || 'Unknown');\n }\n }\n }\n };\n } else {\n update.callback = function () {\n markFailedErrorBoundaryForHotReloading(fiber);\n };\n }\n\n return update;\n}\n\nfunction attachPingListener(root, renderExpirationTime, thenable) {\n // Attach a listener to the promise to \"ping\" the root and retry. But\n // only if one does not already exist for the current render expiration\n // time (which acts like a \"thread ID\" here).\n var pingCache = root.pingCache;\n var threadIDs;\n\n if (pingCache === null) {\n pingCache = root.pingCache = new PossiblyWeakMap$1();\n threadIDs = new Set();\n pingCache.set(thenable, threadIDs);\n } else {\n threadIDs = pingCache.get(thenable);\n\n if (threadIDs === undefined) {\n threadIDs = new Set();\n pingCache.set(thenable, threadIDs);\n }\n }\n\n if (!threadIDs.has(renderExpirationTime)) {\n // Memoize using the thread ID to prevent redundant listeners.\n threadIDs.add(renderExpirationTime);\n var ping = pingSuspendedRoot.bind(null, root, thenable, renderExpirationTime);\n thenable.then(ping, ping);\n }\n}\n\nfunction throwException(root, returnFiber, sourceFiber, value, renderExpirationTime) {\n // The source fiber did not complete.\n sourceFiber.effectTag |= Incomplete; // Its effect list is no longer valid.\n\n sourceFiber.firstEffect = sourceFiber.lastEffect = null;\n\n if (value !== null && typeof value === 'object' && typeof value.then === 'function') {\n // This is a thenable.\n var thenable = value;\n\n if ((sourceFiber.mode & BlockingMode) === NoMode) {\n // Reset the memoizedState to what it was before we attempted\n // to render it.\n var currentSource = sourceFiber.alternate;\n\n if (currentSource) {\n sourceFiber.updateQueue = currentSource.updateQueue;\n sourceFiber.memoizedState = currentSource.memoizedState;\n sourceFiber.expirationTime = currentSource.expirationTime;\n } else {\n sourceFiber.updateQueue = null;\n sourceFiber.memoizedState = null;\n }\n }\n\n var hasInvisibleParentBoundary = hasSuspenseContext(suspenseStackCursor.current, InvisibleParentSuspenseContext); // Schedule the nearest Suspense to re-render the timed out view.\n\n var _workInProgress = returnFiber;\n\n do {\n if (_workInProgress.tag === SuspenseComponent && shouldCaptureSuspense(_workInProgress, hasInvisibleParentBoundary)) {\n // Found the nearest boundary.\n // Stash the promise on the boundary fiber. If the boundary times out, we'll\n // attach another listener to flip the boundary back to its normal state.\n var thenables = _workInProgress.updateQueue;\n\n if (thenables === null) {\n var updateQueue = new Set();\n updateQueue.add(thenable);\n _workInProgress.updateQueue = updateQueue;\n } else {\n thenables.add(thenable);\n } // If the boundary is outside of blocking mode, we should *not*\n // suspend the commit. Pretend as if the suspended component rendered\n // null and keep rendering. In the commit phase, we'll schedule a\n // subsequent synchronous update to re-render the Suspense.\n //\n // Note: It doesn't matter whether the component that suspended was\n // inside a blocking mode tree. If the Suspense is outside of it, we\n // should *not* suspend the commit.\n\n\n if ((_workInProgress.mode & BlockingMode) === NoMode) {\n _workInProgress.effectTag |= DidCapture; // We're going to commit this fiber even though it didn't complete.\n // But we shouldn't call any lifecycle methods or callbacks. Remove\n // all lifecycle effect tags.\n\n sourceFiber.effectTag &= ~(LifecycleEffectMask | Incomplete);\n\n if (sourceFiber.tag === ClassComponent) {\n var currentSourceFiber = sourceFiber.alternate;\n\n if (currentSourceFiber === null) {\n // This is a new mount. Change the tag so it's not mistaken for a\n // completed class component. For example, we should not call\n // componentWillUnmount if it is deleted.\n sourceFiber.tag = IncompleteClassComponent;\n } else {\n // When we try rendering again, we should not reuse the current fiber,\n // since it's known to be in an inconsistent state. Use a force update to\n // prevent a bail out.\n var update = createUpdate(Sync, null);\n update.tag = ForceUpdate;\n enqueueUpdate(sourceFiber, update);\n }\n } // The source fiber did not complete. Mark it with Sync priority to\n // indicate that it still has pending work.\n\n\n sourceFiber.expirationTime = Sync; // Exit without suspending.\n\n return;\n } // Confirmed that the boundary is in a concurrent mode tree. Continue\n // with the normal suspend path.\n //\n // After this we'll use a set of heuristics to determine whether this\n // render pass will run to completion or restart or \"suspend\" the commit.\n // The actual logic for this is spread out in different places.\n //\n // This first principle is that if we're going to suspend when we complete\n // a root, then we should also restart if we get an update or ping that\n // might unsuspend it, and vice versa. The only reason to suspend is\n // because you think you might want to restart before committing. However,\n // it doesn't make sense to restart only while in the period we're suspended.\n //\n // Restarting too aggressively is also not good because it starves out any\n // intermediate loading state. So we use heuristics to determine when.\n // Suspense Heuristics\n //\n // If nothing threw a Promise or all the same fallbacks are already showing,\n // then don't suspend/restart.\n //\n // If this is an initial render of a new tree of Suspense boundaries and\n // those trigger a fallback, then don't suspend/restart. We want to ensure\n // that we can show the initial loading state as quickly as possible.\n //\n // If we hit a \"Delayed\" case, such as when we'd switch from content back into\n // a fallback, then we should always suspend/restart. SuspenseConfig applies to\n // this case. If none is defined, JND is used instead.\n //\n // If we're already showing a fallback and it gets \"retried\", allowing us to show\n // another level, but there's still an inner boundary that would show a fallback,\n // then we suspend/restart for 500ms since the last time we showed a fallback\n // anywhere in the tree. This effectively throttles progressive loading into a\n // consistent train of commits. This also gives us an opportunity to restart to\n // get to the completed state slightly earlier.\n //\n // If there's ambiguity due to batching it's resolved in preference of:\n // 1) \"delayed\", 2) \"initial render\", 3) \"retry\".\n //\n // We want to ensure that a \"busy\" state doesn't get force committed. We want to\n // ensure that new initial loading states can commit as soon as possible.\n\n\n attachPingListener(root, renderExpirationTime, thenable);\n _workInProgress.effectTag |= ShouldCapture;\n _workInProgress.expirationTime = renderExpirationTime;\n return;\n } // This boundary already captured during this render. Continue to the next\n // boundary.\n\n\n _workInProgress = _workInProgress.return;\n } while (_workInProgress !== null); // No boundary was found. Fallthrough to error mode.\n // TODO: Use invariant so the message is stripped in prod?\n\n\n value = new Error((getComponentName(sourceFiber.type) || 'A React component') + ' suspended while rendering, but no fallback UI was specified.\\n' + '\\n' + 'Add a <Suspense fallback=...> component higher in the tree to ' + 'provide a loading indicator or placeholder to display.' + getStackByFiberInDevAndProd(sourceFiber));\n } // We didn't find a boundary that could handle this type of exception. Start\n // over and traverse parent path again, this time treating the exception\n // as an error.\n\n\n renderDidError();\n value = createCapturedValue(value, sourceFiber);\n var workInProgress = returnFiber;\n\n do {\n switch (workInProgress.tag) {\n case HostRoot:\n {\n var _errorInfo = value;\n workInProgress.effectTag |= ShouldCapture;\n workInProgress.expirationTime = renderExpirationTime;\n\n var _update = createRootErrorUpdate(workInProgress, _errorInfo, renderExpirationTime);\n\n enqueueCapturedUpdate(workInProgress, _update);\n return;\n }\n\n case ClassComponent:\n // Capture and retry\n var errorInfo = value;\n var ctor = workInProgress.type;\n var instance = workInProgress.stateNode;\n\n if ((workInProgress.effectTag & DidCapture) === NoEffect && (typeof ctor.getDerivedStateFromError === 'function' || instance !== null && typeof instance.componentDidCatch === 'function' && !isAlreadyFailedLegacyErrorBoundary(instance))) {\n workInProgress.effectTag |= ShouldCapture;\n workInProgress.expirationTime = renderExpirationTime; // Schedule the error boundary to re-render using updated state\n\n var _update2 = createClassErrorUpdate(workInProgress, errorInfo, renderExpirationTime);\n\n enqueueCapturedUpdate(workInProgress, _update2);\n return;\n }\n\n break;\n }\n\n workInProgress = workInProgress.return;\n } while (workInProgress !== null);\n}\n\nvar ceil = Math.ceil;\nvar ReactCurrentDispatcher$1 = ReactSharedInternals.ReactCurrentDispatcher,\n ReactCurrentOwner$2 = ReactSharedInternals.ReactCurrentOwner,\n IsSomeRendererActing = ReactSharedInternals.IsSomeRendererActing;\nvar NoContext =\n/* */\n0;\nvar BatchedContext =\n/* */\n1;\nvar EventContext =\n/* */\n2;\nvar DiscreteEventContext =\n/* */\n4;\nvar LegacyUnbatchedContext =\n/* */\n8;\nvar RenderContext =\n/* */\n16;\nvar CommitContext =\n/* */\n32;\nvar RootIncomplete = 0;\nvar RootFatalErrored = 1;\nvar RootErrored = 2;\nvar RootSuspended = 3;\nvar RootSuspendedWithDelay = 4;\nvar RootCompleted = 5;\n// Describes where we are in the React execution stack\nvar executionContext = NoContext; // The root we're working on\n\nvar workInProgressRoot = null; // The fiber we're working on\n\nvar workInProgress = null; // The expiration time we're rendering\n\nvar renderExpirationTime$1 = NoWork; // Whether to root completed, errored, suspended, etc.\n\nvar workInProgressRootExitStatus = RootIncomplete; // A fatal error, if one is thrown\n\nvar workInProgressRootFatalError = null; // Most recent event time among processed updates during this render.\n// This is conceptually a time stamp but expressed in terms of an ExpirationTime\n// because we deal mostly with expiration times in the hot path, so this avoids\n// the conversion happening in the hot path.\n\nvar workInProgressRootLatestProcessedExpirationTime = Sync;\nvar workInProgressRootLatestSuspenseTimeout = Sync;\nvar workInProgressRootCanSuspendUsingConfig = null; // The work left over by components that were visited during this render. Only\n// includes unprocessed updates, not work in bailed out children.\n\nvar workInProgressRootNextUnprocessedUpdateTime = NoWork; // If we're pinged while rendering we don't always restart immediately.\n// This flag determines if it might be worthwhile to restart if an opportunity\n// happens latere.\n\nvar workInProgressRootHasPendingPing = false; // The most recent time we committed a fallback. This lets us ensure a train\n// model where we don't commit new loading states in too quick succession.\n\nvar globalMostRecentFallbackTime = 0;\nvar FALLBACK_THROTTLE_MS = 500;\nvar nextEffect = null;\nvar hasUncaughtError = false;\nvar firstUncaughtError = null;\nvar legacyErrorBoundariesThatAlreadyFailed = null;\nvar rootDoesHavePassiveEffects = false;\nvar rootWithPendingPassiveEffects = null;\nvar pendingPassiveEffectsRenderPriority = NoPriority;\nvar pendingPassiveEffectsExpirationTime = NoWork;\nvar rootsWithPendingDiscreteUpdates = null; // Use these to prevent an infinite loop of nested updates\n\nvar NESTED_UPDATE_LIMIT = 50;\nvar nestedUpdateCount = 0;\nvar rootWithNestedUpdates = null;\nvar NESTED_PASSIVE_UPDATE_LIMIT = 50;\nvar nestedPassiveUpdateCount = 0;\nvar interruptedBy = null; // Marks the need to reschedule pending interactions at these expiration times\n// during the commit phase. This enables them to be traced across components\n// that spawn new work during render. E.g. hidden boundaries, suspended SSR\n// hydration or SuspenseList.\n\nvar spawnedWorkDuringRender = null; // Expiration times are computed by adding to the current time (the start\n// time). However, if two updates are scheduled within the same event, we\n// should treat their start times as simultaneous, even if the actual clock\n// time has advanced between the first and second call.\n// In other words, because expiration times determine how updates are batched,\n// we want all updates of like priority that occur within the same event to\n// receive the same expiration time. Otherwise we get tearing.\n\nvar currentEventTime = NoWork;\nfunction requestCurrentTimeForUpdate() {\n if ((executionContext & (RenderContext | CommitContext)) !== NoContext) {\n // We're inside React, so it's fine to read the actual time.\n return msToExpirationTime(now());\n } // We're not inside React, so we may be in the middle of a browser event.\n\n\n if (currentEventTime !== NoWork) {\n // Use the same start time for all updates until we enter React again.\n return currentEventTime;\n } // This is the first update since React yielded. Compute a new start time.\n\n\n currentEventTime = msToExpirationTime(now());\n return currentEventTime;\n}\nfunction getCurrentTime() {\n return msToExpirationTime(now());\n}\nfunction computeExpirationForFiber(currentTime, fiber, suspenseConfig) {\n var mode = fiber.mode;\n\n if ((mode & BlockingMode) === NoMode) {\n return Sync;\n }\n\n var priorityLevel = getCurrentPriorityLevel();\n\n if ((mode & ConcurrentMode) === NoMode) {\n return priorityLevel === ImmediatePriority ? Sync : Batched;\n }\n\n if ((executionContext & RenderContext) !== NoContext) {\n // Use whatever time we're already rendering\n // TODO: Should there be a way to opt out, like with `runWithPriority`?\n return renderExpirationTime$1;\n }\n\n var expirationTime;\n\n if (suspenseConfig !== null) {\n // Compute an expiration time based on the Suspense timeout.\n expirationTime = computeSuspenseExpiration(currentTime, suspenseConfig.timeoutMs | 0 || LOW_PRIORITY_EXPIRATION);\n } else {\n // Compute an expiration time based on the Scheduler priority.\n switch (priorityLevel) {\n case ImmediatePriority:\n expirationTime = Sync;\n break;\n\n case UserBlockingPriority$1:\n // TODO: Rename this to computeUserBlockingExpiration\n expirationTime = computeInteractiveExpiration(currentTime);\n break;\n\n case NormalPriority:\n case LowPriority:\n // TODO: Handle LowPriority\n // TODO: Rename this to... something better.\n expirationTime = computeAsyncExpiration(currentTime);\n break;\n\n case IdlePriority:\n expirationTime = Idle;\n break;\n\n default:\n {\n {\n throw Error( \"Expected a valid priority level\" );\n }\n }\n\n }\n } // If we're in the middle of rendering a tree, do not update at the same\n // expiration time that is already rendering.\n // TODO: We shouldn't have to do this if the update is on a different root.\n // Refactor computeExpirationForFiber + scheduleUpdate so we have access to\n // the root when we check for this condition.\n\n\n if (workInProgressRoot !== null && expirationTime === renderExpirationTime$1) {\n // This is a trick to move this update into a separate batch\n expirationTime -= 1;\n }\n\n return expirationTime;\n}\nfunction scheduleUpdateOnFiber(fiber, expirationTime) {\n checkForNestedUpdates();\n warnAboutRenderPhaseUpdatesInDEV(fiber);\n var root = markUpdateTimeFromFiberToRoot(fiber, expirationTime);\n\n if (root === null) {\n warnAboutUpdateOnUnmountedFiberInDEV(fiber);\n return;\n }\n\n checkForInterruption(fiber, expirationTime);\n recordScheduleUpdate(); // TODO: computeExpirationForFiber also reads the priority. Pass the\n // priority as an argument to that function and this one.\n\n var priorityLevel = getCurrentPriorityLevel();\n\n if (expirationTime === Sync) {\n if ( // Check if we're inside unbatchedUpdates\n (executionContext & LegacyUnbatchedContext) !== NoContext && // Check if we're not already rendering\n (executionContext & (RenderContext | CommitContext)) === NoContext) {\n // Register pending interactions on the root to avoid losing traced interaction data.\n schedulePendingInteractions(root, expirationTime); // This is a legacy edge case. The initial mount of a ReactDOM.render-ed\n // root inside of batchedUpdates should be synchronous, but layout updates\n // should be deferred until the end of the batch.\n\n performSyncWorkOnRoot(root);\n } else {\n ensureRootIsScheduled(root);\n schedulePendingInteractions(root, expirationTime);\n\n if (executionContext === NoContext) {\n // Flush the synchronous work now, unless we're already working or inside\n // a batch. This is intentionally inside scheduleUpdateOnFiber instead of\n // scheduleCallbackForFiber to preserve the ability to schedule a callback\n // without immediately flushing it. We only do this for user-initiated\n // updates, to preserve historical behavior of legacy mode.\n flushSyncCallbackQueue();\n }\n }\n } else {\n ensureRootIsScheduled(root);\n schedulePendingInteractions(root, expirationTime);\n }\n\n if ((executionContext & DiscreteEventContext) !== NoContext && ( // Only updates at user-blocking priority or greater are considered\n // discrete, even inside a discrete event.\n priorityLevel === UserBlockingPriority$1 || priorityLevel === ImmediatePriority)) {\n // This is the result of a discrete event. Track the lowest priority\n // discrete update per root so we can flush them early, if needed.\n if (rootsWithPendingDiscreteUpdates === null) {\n rootsWithPendingDiscreteUpdates = new Map([[root, expirationTime]]);\n } else {\n var lastDiscreteTime = rootsWithPendingDiscreteUpdates.get(root);\n\n if (lastDiscreteTime === undefined || lastDiscreteTime > expirationTime) {\n rootsWithPendingDiscreteUpdates.set(root, expirationTime);\n }\n }\n }\n}\nvar scheduleWork = scheduleUpdateOnFiber; // This is split into a separate function so we can mark a fiber with pending\n// work without treating it as a typical update that originates from an event;\n// e.g. retrying a Suspense boundary isn't an update, but it does schedule work\n// on a fiber.\n\nfunction markUpdateTimeFromFiberToRoot(fiber, expirationTime) {\n // Update the source fiber's expiration time\n if (fiber.expirationTime < expirationTime) {\n fiber.expirationTime = expirationTime;\n }\n\n var alternate = fiber.alternate;\n\n if (alternate !== null && alternate.expirationTime < expirationTime) {\n alternate.expirationTime = expirationTime;\n } // Walk the parent path to the root and update the child expiration time.\n\n\n var node = fiber.return;\n var root = null;\n\n if (node === null && fiber.tag === HostRoot) {\n root = fiber.stateNode;\n } else {\n while (node !== null) {\n alternate = node.alternate;\n\n if (node.childExpirationTime < expirationTime) {\n node.childExpirationTime = expirationTime;\n\n if (alternate !== null && alternate.childExpirationTime < expirationTime) {\n alternate.childExpirationTime = expirationTime;\n }\n } else if (alternate !== null && alternate.childExpirationTime < expirationTime) {\n alternate.childExpirationTime = expirationTime;\n }\n\n if (node.return === null && node.tag === HostRoot) {\n root = node.stateNode;\n break;\n }\n\n node = node.return;\n }\n }\n\n if (root !== null) {\n if (workInProgressRoot === root) {\n // Received an update to a tree that's in the middle of rendering. Mark\n // that's unprocessed work on this root.\n markUnprocessedUpdateTime(expirationTime);\n\n if (workInProgressRootExitStatus === RootSuspendedWithDelay) {\n // The root already suspended with a delay, which means this render\n // definitely won't finish. Since we have a new update, let's mark it as\n // suspended now, right before marking the incoming update. This has the\n // effect of interrupting the current render and switching to the update.\n // TODO: This happens to work when receiving an update during the render\n // phase, because of the trick inside computeExpirationForFiber to\n // subtract 1 from `renderExpirationTime` to move it into a\n // separate bucket. But we should probably model it with an exception,\n // using the same mechanism we use to force hydration of a subtree.\n // TODO: This does not account for low pri updates that were already\n // scheduled before the root started rendering. Need to track the next\n // pending expiration time (perhaps by backtracking the return path) and\n // then trigger a restart in the `renderDidSuspendDelayIfPossible` path.\n markRootSuspendedAtTime(root, renderExpirationTime$1);\n }\n } // Mark that the root has a pending update.\n\n\n markRootUpdatedAtTime(root, expirationTime);\n }\n\n return root;\n}\n\nfunction getNextRootExpirationTimeToWorkOn(root) {\n // Determines the next expiration time that the root should render, taking\n // into account levels that may be suspended, or levels that may have\n // received a ping.\n var lastExpiredTime = root.lastExpiredTime;\n\n if (lastExpiredTime !== NoWork) {\n return lastExpiredTime;\n } // \"Pending\" refers to any update that hasn't committed yet, including if it\n // suspended. The \"suspended\" range is therefore a subset.\n\n\n var firstPendingTime = root.firstPendingTime;\n\n if (!isRootSuspendedAtTime(root, firstPendingTime)) {\n // The highest priority pending time is not suspended. Let's work on that.\n return firstPendingTime;\n } // If the first pending time is suspended, check if there's a lower priority\n // pending level that we know about. Or check if we received a ping. Work\n // on whichever is higher priority.\n\n\n var lastPingedTime = root.lastPingedTime;\n var nextKnownPendingLevel = root.nextKnownPendingLevel;\n var nextLevel = lastPingedTime > nextKnownPendingLevel ? lastPingedTime : nextKnownPendingLevel;\n\n if ( nextLevel <= Idle && firstPendingTime !== nextLevel) {\n // Don't work on Idle/Never priority unless everything else is committed.\n return NoWork;\n }\n\n return nextLevel;\n} // Use this function to schedule a task for a root. There's only one task per\n// root; if a task was already scheduled, we'll check to make sure the\n// expiration time of the existing task is the same as the expiration time of\n// the next level that the root has work on. This function is called on every\n// update, and right before exiting a task.\n\n\nfunction ensureRootIsScheduled(root) {\n var lastExpiredTime = root.lastExpiredTime;\n\n if (lastExpiredTime !== NoWork) {\n // Special case: Expired work should flush synchronously.\n root.callbackExpirationTime = Sync;\n root.callbackPriority = ImmediatePriority;\n root.callbackNode = scheduleSyncCallback(performSyncWorkOnRoot.bind(null, root));\n return;\n }\n\n var expirationTime = getNextRootExpirationTimeToWorkOn(root);\n var existingCallbackNode = root.callbackNode;\n\n if (expirationTime === NoWork) {\n // There's nothing to work on.\n if (existingCallbackNode !== null) {\n root.callbackNode = null;\n root.callbackExpirationTime = NoWork;\n root.callbackPriority = NoPriority;\n }\n\n return;\n } // TODO: If this is an update, we already read the current time. Pass the\n // time as an argument.\n\n\n var currentTime = requestCurrentTimeForUpdate();\n var priorityLevel = inferPriorityFromExpirationTime(currentTime, expirationTime); // If there's an existing render task, confirm it has the correct priority and\n // expiration time. Otherwise, we'll cancel it and schedule a new one.\n\n if (existingCallbackNode !== null) {\n var existingCallbackPriority = root.callbackPriority;\n var existingCallbackExpirationTime = root.callbackExpirationTime;\n\n if ( // Callback must have the exact same expiration time.\n existingCallbackExpirationTime === expirationTime && // Callback must have greater or equal priority.\n existingCallbackPriority >= priorityLevel) {\n // Existing callback is sufficient.\n return;\n } // Need to schedule a new task.\n // TODO: Instead of scheduling a new task, we should be able to change the\n // priority of the existing one.\n\n\n cancelCallback(existingCallbackNode);\n }\n\n root.callbackExpirationTime = expirationTime;\n root.callbackPriority = priorityLevel;\n var callbackNode;\n\n if (expirationTime === Sync) {\n // Sync React callbacks are scheduled on a special internal queue\n callbackNode = scheduleSyncCallback(performSyncWorkOnRoot.bind(null, root));\n } else {\n callbackNode = scheduleCallback(priorityLevel, performConcurrentWorkOnRoot.bind(null, root), // Compute a task timeout based on the expiration time. This also affects\n // ordering because tasks are processed in timeout order.\n {\n timeout: expirationTimeToMs(expirationTime) - now()\n });\n }\n\n root.callbackNode = callbackNode;\n} // This is the entry point for every concurrent task, i.e. anything that\n// goes through Scheduler.\n\n\nfunction performConcurrentWorkOnRoot(root, didTimeout) {\n // Since we know we're in a React event, we can clear the current\n // event time. The next update will compute a new event time.\n currentEventTime = NoWork;\n\n if (didTimeout) {\n // The render task took too long to complete. Mark the current time as\n // expired to synchronously render all expired work in a single batch.\n var currentTime = requestCurrentTimeForUpdate();\n markRootExpiredAtTime(root, currentTime); // This will schedule a synchronous callback.\n\n ensureRootIsScheduled(root);\n return null;\n } // Determine the next expiration time to work on, using the fields stored\n // on the root.\n\n\n var expirationTime = getNextRootExpirationTimeToWorkOn(root);\n\n if (expirationTime !== NoWork) {\n var originalCallbackNode = root.callbackNode;\n\n if (!((executionContext & (RenderContext | CommitContext)) === NoContext)) {\n {\n throw Error( \"Should not already be working.\" );\n }\n }\n\n flushPassiveEffects(); // If the root or expiration time have changed, throw out the existing stack\n // and prepare a fresh one. Otherwise we'll continue where we left off.\n\n if (root !== workInProgressRoot || expirationTime !== renderExpirationTime$1) {\n prepareFreshStack(root, expirationTime);\n startWorkOnPendingInteractions(root, expirationTime);\n } // If we have a work-in-progress fiber, it means there's still work to do\n // in this root.\n\n\n if (workInProgress !== null) {\n var prevExecutionContext = executionContext;\n executionContext |= RenderContext;\n var prevDispatcher = pushDispatcher();\n var prevInteractions = pushInteractions(root);\n startWorkLoopTimer(workInProgress);\n\n do {\n try {\n workLoopConcurrent();\n break;\n } catch (thrownValue) {\n handleError(root, thrownValue);\n }\n } while (true);\n\n resetContextDependencies();\n executionContext = prevExecutionContext;\n popDispatcher(prevDispatcher);\n\n {\n popInteractions(prevInteractions);\n }\n\n if (workInProgressRootExitStatus === RootFatalErrored) {\n var fatalError = workInProgressRootFatalError;\n stopInterruptedWorkLoopTimer();\n prepareFreshStack(root, expirationTime);\n markRootSuspendedAtTime(root, expirationTime);\n ensureRootIsScheduled(root);\n throw fatalError;\n }\n\n if (workInProgress !== null) {\n // There's still work left over. Exit without committing.\n stopInterruptedWorkLoopTimer();\n } else {\n // We now have a consistent tree. The next step is either to commit it,\n // or, if something suspended, wait to commit it after a timeout.\n stopFinishedWorkLoopTimer();\n var finishedWork = root.finishedWork = root.current.alternate;\n root.finishedExpirationTime = expirationTime;\n finishConcurrentRender(root, finishedWork, workInProgressRootExitStatus, expirationTime);\n }\n\n ensureRootIsScheduled(root);\n\n if (root.callbackNode === originalCallbackNode) {\n // The task node scheduled for this root is the same one that's\n // currently executed. Need to return a continuation.\n return performConcurrentWorkOnRoot.bind(null, root);\n }\n }\n }\n\n return null;\n}\n\nfunction finishConcurrentRender(root, finishedWork, exitStatus, expirationTime) {\n // Set this to null to indicate there's no in-progress render.\n workInProgressRoot = null;\n\n switch (exitStatus) {\n case RootIncomplete:\n case RootFatalErrored:\n {\n {\n {\n throw Error( \"Root did not complete. This is a bug in React.\" );\n }\n }\n }\n // Flow knows about invariant, so it complains if I add a break\n // statement, but eslint doesn't know about invariant, so it complains\n // if I do. eslint-disable-next-line no-fallthrough\n\n case RootErrored:\n {\n // If this was an async render, the error may have happened due to\n // a mutation in a concurrent event. Try rendering one more time,\n // synchronously, to see if the error goes away. If there are\n // lower priority updates, let's include those, too, in case they\n // fix the inconsistency. Render at Idle to include all updates.\n // If it was Idle or Never or some not-yet-invented time, render\n // at that time.\n markRootExpiredAtTime(root, expirationTime > Idle ? Idle : expirationTime); // We assume that this second render pass will be synchronous\n // and therefore not hit this path again.\n\n break;\n }\n\n case RootSuspended:\n {\n markRootSuspendedAtTime(root, expirationTime);\n var lastSuspendedTime = root.lastSuspendedTime;\n\n if (expirationTime === lastSuspendedTime) {\n root.nextKnownPendingLevel = getRemainingExpirationTime(finishedWork);\n } // We have an acceptable loading state. We need to figure out if we\n // should immediately commit it or wait a bit.\n // If we have processed new updates during this render, we may now\n // have a new loading state ready. We want to ensure that we commit\n // that as soon as possible.\n\n\n var hasNotProcessedNewUpdates = workInProgressRootLatestProcessedExpirationTime === Sync;\n\n if (hasNotProcessedNewUpdates && // do not delay if we're inside an act() scope\n !( IsThisRendererActing.current)) {\n // If we have not processed any new updates during this pass, then\n // this is either a retry of an existing fallback state or a\n // hidden tree. Hidden trees shouldn't be batched with other work\n // and after that's fixed it can only be a retry. We're going to\n // throttle committing retries so that we don't show too many\n // loading states too quickly.\n var msUntilTimeout = globalMostRecentFallbackTime + FALLBACK_THROTTLE_MS - now(); // Don't bother with a very short suspense time.\n\n if (msUntilTimeout > 10) {\n if (workInProgressRootHasPendingPing) {\n var lastPingedTime = root.lastPingedTime;\n\n if (lastPingedTime === NoWork || lastPingedTime >= expirationTime) {\n // This render was pinged but we didn't get to restart\n // earlier so try restarting now instead.\n root.lastPingedTime = expirationTime;\n prepareFreshStack(root, expirationTime);\n break;\n }\n }\n\n var nextTime = getNextRootExpirationTimeToWorkOn(root);\n\n if (nextTime !== NoWork && nextTime !== expirationTime) {\n // There's additional work on this root.\n break;\n }\n\n if (lastSuspendedTime !== NoWork && lastSuspendedTime !== expirationTime) {\n // We should prefer to render the fallback of at the last\n // suspended level. Ping the last suspended level to try\n // rendering it again.\n root.lastPingedTime = lastSuspendedTime;\n break;\n } // The render is suspended, it hasn't timed out, and there's no\n // lower priority work to do. Instead of committing the fallback\n // immediately, wait for more data to arrive.\n\n\n root.timeoutHandle = scheduleTimeout(commitRoot.bind(null, root), msUntilTimeout);\n break;\n }\n } // The work expired. Commit immediately.\n\n\n commitRoot(root);\n break;\n }\n\n case RootSuspendedWithDelay:\n {\n markRootSuspendedAtTime(root, expirationTime);\n var _lastSuspendedTime = root.lastSuspendedTime;\n\n if (expirationTime === _lastSuspendedTime) {\n root.nextKnownPendingLevel = getRemainingExpirationTime(finishedWork);\n }\n\n if ( // do not delay if we're inside an act() scope\n !( IsThisRendererActing.current)) {\n // We're suspended in a state that should be avoided. We'll try to\n // avoid committing it for as long as the timeouts let us.\n if (workInProgressRootHasPendingPing) {\n var _lastPingedTime = root.lastPingedTime;\n\n if (_lastPingedTime === NoWork || _lastPingedTime >= expirationTime) {\n // This render was pinged but we didn't get to restart earlier\n // so try restarting now instead.\n root.lastPingedTime = expirationTime;\n prepareFreshStack(root, expirationTime);\n break;\n }\n }\n\n var _nextTime = getNextRootExpirationTimeToWorkOn(root);\n\n if (_nextTime !== NoWork && _nextTime !== expirationTime) {\n // There's additional work on this root.\n break;\n }\n\n if (_lastSuspendedTime !== NoWork && _lastSuspendedTime !== expirationTime) {\n // We should prefer to render the fallback of at the last\n // suspended level. Ping the last suspended level to try\n // rendering it again.\n root.lastPingedTime = _lastSuspendedTime;\n break;\n }\n\n var _msUntilTimeout;\n\n if (workInProgressRootLatestSuspenseTimeout !== Sync) {\n // We have processed a suspense config whose expiration time we\n // can use as the timeout.\n _msUntilTimeout = expirationTimeToMs(workInProgressRootLatestSuspenseTimeout) - now();\n } else if (workInProgressRootLatestProcessedExpirationTime === Sync) {\n // This should never normally happen because only new updates\n // cause delayed states, so we should have processed something.\n // However, this could also happen in an offscreen tree.\n _msUntilTimeout = 0;\n } else {\n // If we don't have a suspense config, we're going to use a\n // heuristic to determine how long we can suspend.\n var eventTimeMs = inferTimeFromExpirationTime(workInProgressRootLatestProcessedExpirationTime);\n var currentTimeMs = now();\n var timeUntilExpirationMs = expirationTimeToMs(expirationTime) - currentTimeMs;\n var timeElapsed = currentTimeMs - eventTimeMs;\n\n if (timeElapsed < 0) {\n // We get this wrong some time since we estimate the time.\n timeElapsed = 0;\n }\n\n _msUntilTimeout = jnd(timeElapsed) - timeElapsed; // Clamp the timeout to the expiration time. TODO: Once the\n // event time is exact instead of inferred from expiration time\n // we don't need this.\n\n if (timeUntilExpirationMs < _msUntilTimeout) {\n _msUntilTimeout = timeUntilExpirationMs;\n }\n } // Don't bother with a very short suspense time.\n\n\n if (_msUntilTimeout > 10) {\n // The render is suspended, it hasn't timed out, and there's no\n // lower priority work to do. Instead of committing the fallback\n // immediately, wait for more data to arrive.\n root.timeoutHandle = scheduleTimeout(commitRoot.bind(null, root), _msUntilTimeout);\n break;\n }\n } // The work expired. Commit immediately.\n\n\n commitRoot(root);\n break;\n }\n\n case RootCompleted:\n {\n // The work completed. Ready to commit.\n if ( // do not delay if we're inside an act() scope\n !( IsThisRendererActing.current) && workInProgressRootLatestProcessedExpirationTime !== Sync && workInProgressRootCanSuspendUsingConfig !== null) {\n // If we have exceeded the minimum loading delay, which probably\n // means we have shown a spinner already, we might have to suspend\n // a bit longer to ensure that the spinner is shown for\n // enough time.\n var _msUntilTimeout2 = computeMsUntilSuspenseLoadingDelay(workInProgressRootLatestProcessedExpirationTime, expirationTime, workInProgressRootCanSuspendUsingConfig);\n\n if (_msUntilTimeout2 > 10) {\n markRootSuspendedAtTime(root, expirationTime);\n root.timeoutHandle = scheduleTimeout(commitRoot.bind(null, root), _msUntilTimeout2);\n break;\n }\n }\n\n commitRoot(root);\n break;\n }\n\n default:\n {\n {\n {\n throw Error( \"Unknown root exit status.\" );\n }\n }\n }\n }\n} // This is the entry point for synchronous tasks that don't go\n// through Scheduler\n\n\nfunction performSyncWorkOnRoot(root) {\n // Check if there's expired work on this root. Otherwise, render at Sync.\n var lastExpiredTime = root.lastExpiredTime;\n var expirationTime = lastExpiredTime !== NoWork ? lastExpiredTime : Sync;\n\n if (!((executionContext & (RenderContext | CommitContext)) === NoContext)) {\n {\n throw Error( \"Should not already be working.\" );\n }\n }\n\n flushPassiveEffects(); // If the root or expiration time have changed, throw out the existing stack\n // and prepare a fresh one. Otherwise we'll continue where we left off.\n\n if (root !== workInProgressRoot || expirationTime !== renderExpirationTime$1) {\n prepareFreshStack(root, expirationTime);\n startWorkOnPendingInteractions(root, expirationTime);\n } // If we have a work-in-progress fiber, it means there's still work to do\n // in this root.\n\n\n if (workInProgress !== null) {\n var prevExecutionContext = executionContext;\n executionContext |= RenderContext;\n var prevDispatcher = pushDispatcher();\n var prevInteractions = pushInteractions(root);\n startWorkLoopTimer(workInProgress);\n\n do {\n try {\n workLoopSync();\n break;\n } catch (thrownValue) {\n handleError(root, thrownValue);\n }\n } while (true);\n\n resetContextDependencies();\n executionContext = prevExecutionContext;\n popDispatcher(prevDispatcher);\n\n {\n popInteractions(prevInteractions);\n }\n\n if (workInProgressRootExitStatus === RootFatalErrored) {\n var fatalError = workInProgressRootFatalError;\n stopInterruptedWorkLoopTimer();\n prepareFreshStack(root, expirationTime);\n markRootSuspendedAtTime(root, expirationTime);\n ensureRootIsScheduled(root);\n throw fatalError;\n }\n\n if (workInProgress !== null) {\n // This is a sync render, so we should have finished the whole tree.\n {\n {\n throw Error( \"Cannot commit an incomplete root. This error is likely caused by a bug in React. Please file an issue.\" );\n }\n }\n } else {\n // We now have a consistent tree. Because this is a sync render, we\n // will commit it even if something suspended.\n stopFinishedWorkLoopTimer();\n root.finishedWork = root.current.alternate;\n root.finishedExpirationTime = expirationTime;\n finishSyncRender(root);\n } // Before exiting, make sure there's a callback scheduled for the next\n // pending level.\n\n\n ensureRootIsScheduled(root);\n }\n\n return null;\n}\n\nfunction finishSyncRender(root) {\n // Set this to null to indicate there's no in-progress render.\n workInProgressRoot = null;\n commitRoot(root);\n}\nfunction flushDiscreteUpdates() {\n // TODO: Should be able to flush inside batchedUpdates, but not inside `act`.\n // However, `act` uses `batchedUpdates`, so there's no way to distinguish\n // those two cases. Need to fix this before exposing flushDiscreteUpdates\n // as a public API.\n if ((executionContext & (BatchedContext | RenderContext | CommitContext)) !== NoContext) {\n {\n if ((executionContext & RenderContext) !== NoContext) {\n error('unstable_flushDiscreteUpdates: Cannot flush updates when React is ' + 'already rendering.');\n }\n } // We're already rendering, so we can't synchronously flush pending work.\n // This is probably a nested event dispatch triggered by a lifecycle/effect,\n // like `el.focus()`. Exit.\n\n\n return;\n }\n\n flushPendingDiscreteUpdates(); // If the discrete updates scheduled passive effects, flush them now so that\n // they fire before the next serial event.\n\n flushPassiveEffects();\n}\nfunction syncUpdates(fn, a, b, c) {\n return runWithPriority$1(ImmediatePriority, fn.bind(null, a, b, c));\n}\n\nfunction flushPendingDiscreteUpdates() {\n if (rootsWithPendingDiscreteUpdates !== null) {\n // For each root with pending discrete updates, schedule a callback to\n // immediately flush them.\n var roots = rootsWithPendingDiscreteUpdates;\n rootsWithPendingDiscreteUpdates = null;\n roots.forEach(function (expirationTime, root) {\n markRootExpiredAtTime(root, expirationTime);\n ensureRootIsScheduled(root);\n }); // Now flush the immediate queue.\n\n flushSyncCallbackQueue();\n }\n}\n\nfunction batchedUpdates$1(fn, a) {\n var prevExecutionContext = executionContext;\n executionContext |= BatchedContext;\n\n try {\n return fn(a);\n } finally {\n executionContext = prevExecutionContext;\n\n if (executionContext === NoContext) {\n // Flush the immediate callbacks that were scheduled during this batch\n flushSyncCallbackQueue();\n }\n }\n}\nfunction batchedEventUpdates$1(fn, a) {\n var prevExecutionContext = executionContext;\n executionContext |= EventContext;\n\n try {\n return fn(a);\n } finally {\n executionContext = prevExecutionContext;\n\n if (executionContext === NoContext) {\n // Flush the immediate callbacks that were scheduled during this batch\n flushSyncCallbackQueue();\n }\n }\n}\nfunction discreteUpdates$1(fn, a, b, c, d) {\n var prevExecutionContext = executionContext;\n executionContext |= DiscreteEventContext;\n\n try {\n // Should this\n return runWithPriority$1(UserBlockingPriority$1, fn.bind(null, a, b, c, d));\n } finally {\n executionContext = prevExecutionContext;\n\n if (executionContext === NoContext) {\n // Flush the immediate callbacks that were scheduled during this batch\n flushSyncCallbackQueue();\n }\n }\n}\nfunction unbatchedUpdates(fn, a) {\n var prevExecutionContext = executionContext;\n executionContext &= ~BatchedContext;\n executionContext |= LegacyUnbatchedContext;\n\n try {\n return fn(a);\n } finally {\n executionContext = prevExecutionContext;\n\n if (executionContext === NoContext) {\n // Flush the immediate callbacks that were scheduled during this batch\n flushSyncCallbackQueue();\n }\n }\n}\nfunction flushSync(fn, a) {\n if ((executionContext & (RenderContext | CommitContext)) !== NoContext) {\n {\n {\n throw Error( \"flushSync was called from inside a lifecycle method. It cannot be called when React is already rendering.\" );\n }\n }\n }\n\n var prevExecutionContext = executionContext;\n executionContext |= BatchedContext;\n\n try {\n return runWithPriority$1(ImmediatePriority, fn.bind(null, a));\n } finally {\n executionContext = prevExecutionContext; // Flush the immediate callbacks that were scheduled during this batch.\n // Note that this will happen even if batchedUpdates is higher up\n // the stack.\n\n flushSyncCallbackQueue();\n }\n}\n\nfunction prepareFreshStack(root, expirationTime) {\n root.finishedWork = null;\n root.finishedExpirationTime = NoWork;\n var timeoutHandle = root.timeoutHandle;\n\n if (timeoutHandle !== noTimeout) {\n // The root previous suspended and scheduled a timeout to commit a fallback\n // state. Now that we have additional work, cancel the timeout.\n root.timeoutHandle = noTimeout; // $FlowFixMe Complains noTimeout is not a TimeoutID, despite the check above\n\n cancelTimeout(timeoutHandle);\n }\n\n if (workInProgress !== null) {\n var interruptedWork = workInProgress.return;\n\n while (interruptedWork !== null) {\n unwindInterruptedWork(interruptedWork);\n interruptedWork = interruptedWork.return;\n }\n }\n\n workInProgressRoot = root;\n workInProgress = createWorkInProgress(root.current, null);\n renderExpirationTime$1 = expirationTime;\n workInProgressRootExitStatus = RootIncomplete;\n workInProgressRootFatalError = null;\n workInProgressRootLatestProcessedExpirationTime = Sync;\n workInProgressRootLatestSuspenseTimeout = Sync;\n workInProgressRootCanSuspendUsingConfig = null;\n workInProgressRootNextUnprocessedUpdateTime = NoWork;\n workInProgressRootHasPendingPing = false;\n\n {\n spawnedWorkDuringRender = null;\n }\n\n {\n ReactStrictModeWarnings.discardPendingWarnings();\n }\n}\n\nfunction handleError(root, thrownValue) {\n do {\n try {\n // Reset module-level state that was set during the render phase.\n resetContextDependencies();\n resetHooksAfterThrow();\n resetCurrentFiber();\n\n if (workInProgress === null || workInProgress.return === null) {\n // Expected to be working on a non-root fiber. This is a fatal error\n // because there's no ancestor that can handle it; the root is\n // supposed to capture all errors that weren't caught by an error\n // boundary.\n workInProgressRootExitStatus = RootFatalErrored;\n workInProgressRootFatalError = thrownValue; // Set `workInProgress` to null. This represents advancing to the next\n // sibling, or the parent if there are no siblings. But since the root\n // has no siblings nor a parent, we set it to null. Usually this is\n // handled by `completeUnitOfWork` or `unwindWork`, but since we're\n // interntionally not calling those, we need set it here.\n // TODO: Consider calling `unwindWork` to pop the contexts.\n\n workInProgress = null;\n return null;\n }\n\n if (enableProfilerTimer && workInProgress.mode & ProfileMode) {\n // Record the time spent rendering before an error was thrown. This\n // avoids inaccurate Profiler durations in the case of a\n // suspended render.\n stopProfilerTimerIfRunningAndRecordDelta(workInProgress, true);\n }\n\n throwException(root, workInProgress.return, workInProgress, thrownValue, renderExpirationTime$1);\n workInProgress = completeUnitOfWork(workInProgress);\n } catch (yetAnotherThrownValue) {\n // Something in the return path also threw.\n thrownValue = yetAnotherThrownValue;\n continue;\n } // Return to the normal work loop.\n\n\n return;\n } while (true);\n}\n\nfunction pushDispatcher(root) {\n var prevDispatcher = ReactCurrentDispatcher$1.current;\n ReactCurrentDispatcher$1.current = ContextOnlyDispatcher;\n\n if (prevDispatcher === null) {\n // The React isomorphic package does not include a default dispatcher.\n // Instead the first renderer will lazily attach one, in order to give\n // nicer error messages.\n return ContextOnlyDispatcher;\n } else {\n return prevDispatcher;\n }\n}\n\nfunction popDispatcher(prevDispatcher) {\n ReactCurrentDispatcher$1.current = prevDispatcher;\n}\n\nfunction pushInteractions(root) {\n {\n var prevInteractions = tracing.__interactionsRef.current;\n tracing.__interactionsRef.current = root.memoizedInteractions;\n return prevInteractions;\n }\n}\n\nfunction popInteractions(prevInteractions) {\n {\n tracing.__interactionsRef.current = prevInteractions;\n }\n}\n\nfunction markCommitTimeOfFallback() {\n globalMostRecentFallbackTime = now();\n}\nfunction markRenderEventTimeAndConfig(expirationTime, suspenseConfig) {\n if (expirationTime < workInProgressRootLatestProcessedExpirationTime && expirationTime > Idle) {\n workInProgressRootLatestProcessedExpirationTime = expirationTime;\n }\n\n if (suspenseConfig !== null) {\n if (expirationTime < workInProgressRootLatestSuspenseTimeout && expirationTime > Idle) {\n workInProgressRootLatestSuspenseTimeout = expirationTime; // Most of the time we only have one config and getting wrong is not bad.\n\n workInProgressRootCanSuspendUsingConfig = suspenseConfig;\n }\n }\n}\nfunction markUnprocessedUpdateTime(expirationTime) {\n if (expirationTime > workInProgressRootNextUnprocessedUpdateTime) {\n workInProgressRootNextUnprocessedUpdateTime = expirationTime;\n }\n}\nfunction renderDidSuspend() {\n if (workInProgressRootExitStatus === RootIncomplete) {\n workInProgressRootExitStatus = RootSuspended;\n }\n}\nfunction renderDidSuspendDelayIfPossible() {\n if (workInProgressRootExitStatus === RootIncomplete || workInProgressRootExitStatus === RootSuspended) {\n workInProgressRootExitStatus = RootSuspendedWithDelay;\n } // Check if there's a lower priority update somewhere else in the tree.\n\n\n if (workInProgressRootNextUnprocessedUpdateTime !== NoWork && workInProgressRoot !== null) {\n // Mark the current render as suspended, and then mark that there's a\n // pending update.\n // TODO: This should immediately interrupt the current render, instead\n // of waiting until the next time we yield.\n markRootSuspendedAtTime(workInProgressRoot, renderExpirationTime$1);\n markRootUpdatedAtTime(workInProgressRoot, workInProgressRootNextUnprocessedUpdateTime);\n }\n}\nfunction renderDidError() {\n if (workInProgressRootExitStatus !== RootCompleted) {\n workInProgressRootExitStatus = RootErrored;\n }\n} // Called during render to determine if anything has suspended.\n// Returns false if we're not sure.\n\nfunction renderHasNotSuspendedYet() {\n // If something errored or completed, we can't really be sure,\n // so those are false.\n return workInProgressRootExitStatus === RootIncomplete;\n}\n\nfunction inferTimeFromExpirationTime(expirationTime) {\n // We don't know exactly when the update was scheduled, but we can infer an\n // approximate start time from the expiration time.\n var earliestExpirationTimeMs = expirationTimeToMs(expirationTime);\n return earliestExpirationTimeMs - LOW_PRIORITY_EXPIRATION;\n}\n\nfunction inferTimeFromExpirationTimeWithSuspenseConfig(expirationTime, suspenseConfig) {\n // We don't know exactly when the update was scheduled, but we can infer an\n // approximate start time from the expiration time by subtracting the timeout\n // that was added to the event time.\n var earliestExpirationTimeMs = expirationTimeToMs(expirationTime);\n return earliestExpirationTimeMs - (suspenseConfig.timeoutMs | 0 || LOW_PRIORITY_EXPIRATION);\n} // The work loop is an extremely hot path. Tell Closure not to inline it.\n\n/** @noinline */\n\n\nfunction workLoopSync() {\n // Already timed out, so perform work without checking if we need to yield.\n while (workInProgress !== null) {\n workInProgress = performUnitOfWork(workInProgress);\n }\n}\n/** @noinline */\n\n\nfunction workLoopConcurrent() {\n // Perform work until Scheduler asks us to yield\n while (workInProgress !== null && !shouldYield()) {\n workInProgress = performUnitOfWork(workInProgress);\n }\n}\n\nfunction performUnitOfWork(unitOfWork) {\n // The current, flushed, state of this fiber is the alternate. Ideally\n // nothing should rely on this, but relying on it here means that we don't\n // need an additional field on the work in progress.\n var current = unitOfWork.alternate;\n startWorkTimer(unitOfWork);\n setCurrentFiber(unitOfWork);\n var next;\n\n if ( (unitOfWork.mode & ProfileMode) !== NoMode) {\n startProfilerTimer(unitOfWork);\n next = beginWork$1(current, unitOfWork, renderExpirationTime$1);\n stopProfilerTimerIfRunningAndRecordDelta(unitOfWork, true);\n } else {\n next = beginWork$1(current, unitOfWork, renderExpirationTime$1);\n }\n\n resetCurrentFiber();\n unitOfWork.memoizedProps = unitOfWork.pendingProps;\n\n if (next === null) {\n // If this doesn't spawn new work, complete the current work.\n next = completeUnitOfWork(unitOfWork);\n }\n\n ReactCurrentOwner$2.current = null;\n return next;\n}\n\nfunction completeUnitOfWork(unitOfWork) {\n // Attempt to complete the current unit of work, then move to the next\n // sibling. If there are no more siblings, return to the parent fiber.\n workInProgress = unitOfWork;\n\n do {\n // The current, flushed, state of this fiber is the alternate. Ideally\n // nothing should rely on this, but relying on it here means that we don't\n // need an additional field on the work in progress.\n var current = workInProgress.alternate;\n var returnFiber = workInProgress.return; // Check if the work completed or if something threw.\n\n if ((workInProgress.effectTag & Incomplete) === NoEffect) {\n setCurrentFiber(workInProgress);\n var next = void 0;\n\n if ( (workInProgress.mode & ProfileMode) === NoMode) {\n next = completeWork(current, workInProgress, renderExpirationTime$1);\n } else {\n startProfilerTimer(workInProgress);\n next = completeWork(current, workInProgress, renderExpirationTime$1); // Update render duration assuming we didn't error.\n\n stopProfilerTimerIfRunningAndRecordDelta(workInProgress, false);\n }\n\n stopWorkTimer(workInProgress);\n resetCurrentFiber();\n resetChildExpirationTime(workInProgress);\n\n if (next !== null) {\n // Completing this fiber spawned new work. Work on that next.\n return next;\n }\n\n if (returnFiber !== null && // Do not append effects to parents if a sibling failed to complete\n (returnFiber.effectTag & Incomplete) === NoEffect) {\n // Append all the effects of the subtree and this fiber onto the effect\n // list of the parent. The completion order of the children affects the\n // side-effect order.\n if (returnFiber.firstEffect === null) {\n returnFiber.firstEffect = workInProgress.firstEffect;\n }\n\n if (workInProgress.lastEffect !== null) {\n if (returnFiber.lastEffect !== null) {\n returnFiber.lastEffect.nextEffect = workInProgress.firstEffect;\n }\n\n returnFiber.lastEffect = workInProgress.lastEffect;\n } // If this fiber had side-effects, we append it AFTER the children's\n // side-effects. We can perform certain side-effects earlier if needed,\n // by doing multiple passes over the effect list. We don't want to\n // schedule our own side-effect on our own list because if end up\n // reusing children we'll schedule this effect onto itself since we're\n // at the end.\n\n\n var effectTag = workInProgress.effectTag; // Skip both NoWork and PerformedWork tags when creating the effect\n // list. PerformedWork effect is read by React DevTools but shouldn't be\n // committed.\n\n if (effectTag > PerformedWork) {\n if (returnFiber.lastEffect !== null) {\n returnFiber.lastEffect.nextEffect = workInProgress;\n } else {\n returnFiber.firstEffect = workInProgress;\n }\n\n returnFiber.lastEffect = workInProgress;\n }\n }\n } else {\n // This fiber did not complete because something threw. Pop values off\n // the stack without entering the complete phase. If this is a boundary,\n // capture values if possible.\n var _next = unwindWork(workInProgress); // Because this fiber did not complete, don't reset its expiration time.\n\n\n if ( (workInProgress.mode & ProfileMode) !== NoMode) {\n // Record the render duration for the fiber that errored.\n stopProfilerTimerIfRunningAndRecordDelta(workInProgress, false); // Include the time spent working on failed children before continuing.\n\n var actualDuration = workInProgress.actualDuration;\n var child = workInProgress.child;\n\n while (child !== null) {\n actualDuration += child.actualDuration;\n child = child.sibling;\n }\n\n workInProgress.actualDuration = actualDuration;\n }\n\n if (_next !== null) {\n // If completing this work spawned new work, do that next. We'll come\n // back here again.\n // Since we're restarting, remove anything that is not a host effect\n // from the effect tag.\n // TODO: The name stopFailedWorkTimer is misleading because Suspense\n // also captures and restarts.\n stopFailedWorkTimer(workInProgress);\n _next.effectTag &= HostEffectMask;\n return _next;\n }\n\n stopWorkTimer(workInProgress);\n\n if (returnFiber !== null) {\n // Mark the parent fiber as incomplete and clear its effect list.\n returnFiber.firstEffect = returnFiber.lastEffect = null;\n returnFiber.effectTag |= Incomplete;\n }\n }\n\n var siblingFiber = workInProgress.sibling;\n\n if (siblingFiber !== null) {\n // If there is more work to do in this returnFiber, do that next.\n return siblingFiber;\n } // Otherwise, return to the parent\n\n\n workInProgress = returnFiber;\n } while (workInProgress !== null); // We've reached the root.\n\n\n if (workInProgressRootExitStatus === RootIncomplete) {\n workInProgressRootExitStatus = RootCompleted;\n }\n\n return null;\n}\n\nfunction getRemainingExpirationTime(fiber) {\n var updateExpirationTime = fiber.expirationTime;\n var childExpirationTime = fiber.childExpirationTime;\n return updateExpirationTime > childExpirationTime ? updateExpirationTime : childExpirationTime;\n}\n\nfunction resetChildExpirationTime(completedWork) {\n if (renderExpirationTime$1 !== Never && completedWork.childExpirationTime === Never) {\n // The children of this component are hidden. Don't bubble their\n // expiration times.\n return;\n }\n\n var newChildExpirationTime = NoWork; // Bubble up the earliest expiration time.\n\n if ( (completedWork.mode & ProfileMode) !== NoMode) {\n // In profiling mode, resetChildExpirationTime is also used to reset\n // profiler durations.\n var actualDuration = completedWork.actualDuration;\n var treeBaseDuration = completedWork.selfBaseDuration; // When a fiber is cloned, its actualDuration is reset to 0. This value will\n // only be updated if work is done on the fiber (i.e. it doesn't bailout).\n // When work is done, it should bubble to the parent's actualDuration. If\n // the fiber has not been cloned though, (meaning no work was done), then\n // this value will reflect the amount of time spent working on a previous\n // render. In that case it should not bubble. We determine whether it was\n // cloned by comparing the child pointer.\n\n var shouldBubbleActualDurations = completedWork.alternate === null || completedWork.child !== completedWork.alternate.child;\n var child = completedWork.child;\n\n while (child !== null) {\n var childUpdateExpirationTime = child.expirationTime;\n var childChildExpirationTime = child.childExpirationTime;\n\n if (childUpdateExpirationTime > newChildExpirationTime) {\n newChildExpirationTime = childUpdateExpirationTime;\n }\n\n if (childChildExpirationTime > newChildExpirationTime) {\n newChildExpirationTime = childChildExpirationTime;\n }\n\n if (shouldBubbleActualDurations) {\n actualDuration += child.actualDuration;\n }\n\n treeBaseDuration += child.treeBaseDuration;\n child = child.sibling;\n }\n\n completedWork.actualDuration = actualDuration;\n completedWork.treeBaseDuration = treeBaseDuration;\n } else {\n var _child = completedWork.child;\n\n while (_child !== null) {\n var _childUpdateExpirationTime = _child.expirationTime;\n var _childChildExpirationTime = _child.childExpirationTime;\n\n if (_childUpdateExpirationTime > newChildExpirationTime) {\n newChildExpirationTime = _childUpdateExpirationTime;\n }\n\n if (_childChildExpirationTime > newChildExpirationTime) {\n newChildExpirationTime = _childChildExpirationTime;\n }\n\n _child = _child.sibling;\n }\n }\n\n completedWork.childExpirationTime = newChildExpirationTime;\n}\n\nfunction commitRoot(root) {\n var renderPriorityLevel = getCurrentPriorityLevel();\n runWithPriority$1(ImmediatePriority, commitRootImpl.bind(null, root, renderPriorityLevel));\n return null;\n}\n\nfunction commitRootImpl(root, renderPriorityLevel) {\n do {\n // `flushPassiveEffects` will call `flushSyncUpdateQueue` at the end, which\n // means `flushPassiveEffects` will sometimes result in additional\n // passive effects. So we need to keep flushing in a loop until there are\n // no more pending effects.\n // TODO: Might be better if `flushPassiveEffects` did not automatically\n // flush synchronous work at the end, to avoid factoring hazards like this.\n flushPassiveEffects();\n } while (rootWithPendingPassiveEffects !== null);\n\n flushRenderPhaseStrictModeWarningsInDEV();\n\n if (!((executionContext & (RenderContext | CommitContext)) === NoContext)) {\n {\n throw Error( \"Should not already be working.\" );\n }\n }\n\n var finishedWork = root.finishedWork;\n var expirationTime = root.finishedExpirationTime;\n\n if (finishedWork === null) {\n return null;\n }\n\n root.finishedWork = null;\n root.finishedExpirationTime = NoWork;\n\n if (!(finishedWork !== root.current)) {\n {\n throw Error( \"Cannot commit the same tree as before. This error is likely caused by a bug in React. Please file an issue.\" );\n }\n } // commitRoot never returns a continuation; it always finishes synchronously.\n // So we can clear these now to allow a new callback to be scheduled.\n\n\n root.callbackNode = null;\n root.callbackExpirationTime = NoWork;\n root.callbackPriority = NoPriority;\n root.nextKnownPendingLevel = NoWork;\n startCommitTimer(); // Update the first and last pending times on this root. The new first\n // pending time is whatever is left on the root fiber.\n\n var remainingExpirationTimeBeforeCommit = getRemainingExpirationTime(finishedWork);\n markRootFinishedAtTime(root, expirationTime, remainingExpirationTimeBeforeCommit);\n\n if (root === workInProgressRoot) {\n // We can reset these now that they are finished.\n workInProgressRoot = null;\n workInProgress = null;\n renderExpirationTime$1 = NoWork;\n } // This indicates that the last root we worked on is not the same one that\n // we're committing now. This most commonly happens when a suspended root\n // times out.\n // Get the list of effects.\n\n\n var firstEffect;\n\n if (finishedWork.effectTag > PerformedWork) {\n // A fiber's effect list consists only of its children, not itself. So if\n // the root has an effect, we need to add it to the end of the list. The\n // resulting list is the set that would belong to the root's parent, if it\n // had one; that is, all the effects in the tree including the root.\n if (finishedWork.lastEffect !== null) {\n finishedWork.lastEffect.nextEffect = finishedWork;\n firstEffect = finishedWork.firstEffect;\n } else {\n firstEffect = finishedWork;\n }\n } else {\n // There is no effect on the root.\n firstEffect = finishedWork.firstEffect;\n }\n\n if (firstEffect !== null) {\n var prevExecutionContext = executionContext;\n executionContext |= CommitContext;\n var prevInteractions = pushInteractions(root); // Reset this to null before calling lifecycles\n\n ReactCurrentOwner$2.current = null; // The commit phase is broken into several sub-phases. We do a separate pass\n // of the effect list for each phase: all mutation effects come before all\n // layout effects, and so on.\n // The first phase a \"before mutation\" phase. We use this phase to read the\n // state of the host tree right before we mutate it. This is where\n // getSnapshotBeforeUpdate is called.\n\n startCommitSnapshotEffectsTimer();\n prepareForCommit(root.containerInfo);\n nextEffect = firstEffect;\n\n do {\n {\n invokeGuardedCallback(null, commitBeforeMutationEffects, null);\n\n if (hasCaughtError()) {\n if (!(nextEffect !== null)) {\n {\n throw Error( \"Should be working on an effect.\" );\n }\n }\n\n var error = clearCaughtError();\n captureCommitPhaseError(nextEffect, error);\n nextEffect = nextEffect.nextEffect;\n }\n }\n } while (nextEffect !== null);\n\n stopCommitSnapshotEffectsTimer();\n\n {\n // Mark the current commit time to be shared by all Profilers in this\n // batch. This enables them to be grouped later.\n recordCommitTime();\n } // The next phase is the mutation phase, where we mutate the host tree.\n\n\n startCommitHostEffectsTimer();\n nextEffect = firstEffect;\n\n do {\n {\n invokeGuardedCallback(null, commitMutationEffects, null, root, renderPriorityLevel);\n\n if (hasCaughtError()) {\n if (!(nextEffect !== null)) {\n {\n throw Error( \"Should be working on an effect.\" );\n }\n }\n\n var _error = clearCaughtError();\n\n captureCommitPhaseError(nextEffect, _error);\n nextEffect = nextEffect.nextEffect;\n }\n }\n } while (nextEffect !== null);\n\n stopCommitHostEffectsTimer();\n resetAfterCommit(root.containerInfo); // The work-in-progress tree is now the current tree. This must come after\n // the mutation phase, so that the previous tree is still current during\n // componentWillUnmount, but before the layout phase, so that the finished\n // work is current during componentDidMount/Update.\n\n root.current = finishedWork; // The next phase is the layout phase, where we call effects that read\n // the host tree after it's been mutated. The idiomatic use case for this is\n // layout, but class component lifecycles also fire here for legacy reasons.\n\n startCommitLifeCyclesTimer();\n nextEffect = firstEffect;\n\n do {\n {\n invokeGuardedCallback(null, commitLayoutEffects, null, root, expirationTime);\n\n if (hasCaughtError()) {\n if (!(nextEffect !== null)) {\n {\n throw Error( \"Should be working on an effect.\" );\n }\n }\n\n var _error2 = clearCaughtError();\n\n captureCommitPhaseError(nextEffect, _error2);\n nextEffect = nextEffect.nextEffect;\n }\n }\n } while (nextEffect !== null);\n\n stopCommitLifeCyclesTimer();\n nextEffect = null; // Tell Scheduler to yield at the end of the frame, so the browser has an\n // opportunity to paint.\n\n requestPaint();\n\n {\n popInteractions(prevInteractions);\n }\n\n executionContext = prevExecutionContext;\n } else {\n // No effects.\n root.current = finishedWork; // Measure these anyway so the flamegraph explicitly shows that there were\n // no effects.\n // TODO: Maybe there's a better way to report this.\n\n startCommitSnapshotEffectsTimer();\n stopCommitSnapshotEffectsTimer();\n\n {\n recordCommitTime();\n }\n\n startCommitHostEffectsTimer();\n stopCommitHostEffectsTimer();\n startCommitLifeCyclesTimer();\n stopCommitLifeCyclesTimer();\n }\n\n stopCommitTimer();\n var rootDidHavePassiveEffects = rootDoesHavePassiveEffects;\n\n if (rootDoesHavePassiveEffects) {\n // This commit has passive effects. Stash a reference to them. But don't\n // schedule a callback until after flushing layout work.\n rootDoesHavePassiveEffects = false;\n rootWithPendingPassiveEffects = root;\n pendingPassiveEffectsExpirationTime = expirationTime;\n pendingPassiveEffectsRenderPriority = renderPriorityLevel;\n } else {\n // We are done with the effect chain at this point so let's clear the\n // nextEffect pointers to assist with GC. If we have passive effects, we'll\n // clear this in flushPassiveEffects.\n nextEffect = firstEffect;\n\n while (nextEffect !== null) {\n var nextNextEffect = nextEffect.nextEffect;\n nextEffect.nextEffect = null;\n nextEffect = nextNextEffect;\n }\n } // Check if there's remaining work on this root\n\n\n var remainingExpirationTime = root.firstPendingTime;\n\n if (remainingExpirationTime !== NoWork) {\n {\n if (spawnedWorkDuringRender !== null) {\n var expirationTimes = spawnedWorkDuringRender;\n spawnedWorkDuringRender = null;\n\n for (var i = 0; i < expirationTimes.length; i++) {\n scheduleInteractions(root, expirationTimes[i], root.memoizedInteractions);\n }\n }\n\n schedulePendingInteractions(root, remainingExpirationTime);\n }\n } else {\n // If there's no remaining work, we can clear the set of already failed\n // error boundaries.\n legacyErrorBoundariesThatAlreadyFailed = null;\n }\n\n {\n if (!rootDidHavePassiveEffects) {\n // If there are no passive effects, then we can complete the pending interactions.\n // Otherwise, we'll wait until after the passive effects are flushed.\n // Wait to do this until after remaining work has been scheduled,\n // so that we don't prematurely signal complete for interactions when there's e.g. hidden work.\n finishPendingInteractions(root, expirationTime);\n }\n }\n\n if (remainingExpirationTime === Sync) {\n // Count the number of times the root synchronously re-renders without\n // finishing. If there are too many, it indicates an infinite update loop.\n if (root === rootWithNestedUpdates) {\n nestedUpdateCount++;\n } else {\n nestedUpdateCount = 0;\n rootWithNestedUpdates = root;\n }\n } else {\n nestedUpdateCount = 0;\n }\n\n onCommitRoot(finishedWork.stateNode, expirationTime); // Always call this before exiting `commitRoot`, to ensure that any\n // additional work on this root is scheduled.\n\n ensureRootIsScheduled(root);\n\n if (hasUncaughtError) {\n hasUncaughtError = false;\n var _error3 = firstUncaughtError;\n firstUncaughtError = null;\n throw _error3;\n }\n\n if ((executionContext & LegacyUnbatchedContext) !== NoContext) {\n // This is a legacy edge case. We just committed the initial mount of\n // a ReactDOM.render-ed root inside of batchedUpdates. The commit fired\n // synchronously, but layout updates should be deferred until the end\n // of the batch.\n return null;\n } // If layout work was scheduled, flush it now.\n\n\n flushSyncCallbackQueue();\n return null;\n}\n\nfunction commitBeforeMutationEffects() {\n while (nextEffect !== null) {\n var effectTag = nextEffect.effectTag;\n\n if ((effectTag & Snapshot) !== NoEffect) {\n setCurrentFiber(nextEffect);\n recordEffect();\n var current = nextEffect.alternate;\n commitBeforeMutationLifeCycles(current, nextEffect);\n resetCurrentFiber();\n }\n\n if ((effectTag & Passive) !== NoEffect) {\n // If there are passive effects, schedule a callback to flush at\n // the earliest opportunity.\n if (!rootDoesHavePassiveEffects) {\n rootDoesHavePassiveEffects = true;\n scheduleCallback(NormalPriority, function () {\n flushPassiveEffects();\n return null;\n });\n }\n }\n\n nextEffect = nextEffect.nextEffect;\n }\n}\n\nfunction commitMutationEffects(root, renderPriorityLevel) {\n // TODO: Should probably move the bulk of this function to commitWork.\n while (nextEffect !== null) {\n setCurrentFiber(nextEffect);\n var effectTag = nextEffect.effectTag;\n\n if (effectTag & ContentReset) {\n commitResetTextContent(nextEffect);\n }\n\n if (effectTag & Ref) {\n var current = nextEffect.alternate;\n\n if (current !== null) {\n commitDetachRef(current);\n }\n } // The following switch statement is only concerned about placement,\n // updates, and deletions. To avoid needing to add a case for every possible\n // bitmap value, we remove the secondary effects from the effect tag and\n // switch on that value.\n\n\n var primaryEffectTag = effectTag & (Placement | Update | Deletion | Hydrating);\n\n switch (primaryEffectTag) {\n case Placement:\n {\n commitPlacement(nextEffect); // Clear the \"placement\" from effect tag so that we know that this is\n // inserted, before any life-cycles like componentDidMount gets called.\n // TODO: findDOMNode doesn't rely on this any more but isMounted does\n // and isMounted is deprecated anyway so we should be able to kill this.\n\n nextEffect.effectTag &= ~Placement;\n break;\n }\n\n case PlacementAndUpdate:\n {\n // Placement\n commitPlacement(nextEffect); // Clear the \"placement\" from effect tag so that we know that this is\n // inserted, before any life-cycles like componentDidMount gets called.\n\n nextEffect.effectTag &= ~Placement; // Update\n\n var _current = nextEffect.alternate;\n commitWork(_current, nextEffect);\n break;\n }\n\n case Hydrating:\n {\n nextEffect.effectTag &= ~Hydrating;\n break;\n }\n\n case HydratingAndUpdate:\n {\n nextEffect.effectTag &= ~Hydrating; // Update\n\n var _current2 = nextEffect.alternate;\n commitWork(_current2, nextEffect);\n break;\n }\n\n case Update:\n {\n var _current3 = nextEffect.alternate;\n commitWork(_current3, nextEffect);\n break;\n }\n\n case Deletion:\n {\n commitDeletion(root, nextEffect, renderPriorityLevel);\n break;\n }\n } // TODO: Only record a mutation effect if primaryEffectTag is non-zero.\n\n\n recordEffect();\n resetCurrentFiber();\n nextEffect = nextEffect.nextEffect;\n }\n}\n\nfunction commitLayoutEffects(root, committedExpirationTime) {\n // TODO: Should probably move the bulk of this function to commitWork.\n while (nextEffect !== null) {\n setCurrentFiber(nextEffect);\n var effectTag = nextEffect.effectTag;\n\n if (effectTag & (Update | Callback)) {\n recordEffect();\n var current = nextEffect.alternate;\n commitLifeCycles(root, current, nextEffect);\n }\n\n if (effectTag & Ref) {\n recordEffect();\n commitAttachRef(nextEffect);\n }\n\n resetCurrentFiber();\n nextEffect = nextEffect.nextEffect;\n }\n}\n\nfunction flushPassiveEffects() {\n if (pendingPassiveEffectsRenderPriority !== NoPriority) {\n var priorityLevel = pendingPassiveEffectsRenderPriority > NormalPriority ? NormalPriority : pendingPassiveEffectsRenderPriority;\n pendingPassiveEffectsRenderPriority = NoPriority;\n return runWithPriority$1(priorityLevel, flushPassiveEffectsImpl);\n }\n}\n\nfunction flushPassiveEffectsImpl() {\n if (rootWithPendingPassiveEffects === null) {\n return false;\n }\n\n var root = rootWithPendingPassiveEffects;\n var expirationTime = pendingPassiveEffectsExpirationTime;\n rootWithPendingPassiveEffects = null;\n pendingPassiveEffectsExpirationTime = NoWork;\n\n if (!((executionContext & (RenderContext | CommitContext)) === NoContext)) {\n {\n throw Error( \"Cannot flush passive effects while already rendering.\" );\n }\n }\n\n var prevExecutionContext = executionContext;\n executionContext |= CommitContext;\n var prevInteractions = pushInteractions(root);\n\n {\n // Note: This currently assumes there are no passive effects on the root fiber\n // because the root is not part of its own effect list.\n // This could change in the future.\n var _effect2 = root.current.firstEffect;\n\n while (_effect2 !== null) {\n {\n setCurrentFiber(_effect2);\n invokeGuardedCallback(null, commitPassiveHookEffects, null, _effect2);\n\n if (hasCaughtError()) {\n if (!(_effect2 !== null)) {\n {\n throw Error( \"Should be working on an effect.\" );\n }\n }\n\n var _error5 = clearCaughtError();\n\n captureCommitPhaseError(_effect2, _error5);\n }\n\n resetCurrentFiber();\n }\n\n var nextNextEffect = _effect2.nextEffect; // Remove nextEffect pointer to assist GC\n\n _effect2.nextEffect = null;\n _effect2 = nextNextEffect;\n }\n }\n\n {\n popInteractions(prevInteractions);\n finishPendingInteractions(root, expirationTime);\n }\n\n executionContext = prevExecutionContext;\n flushSyncCallbackQueue(); // If additional passive effects were scheduled, increment a counter. If this\n // exceeds the limit, we'll fire a warning.\n\n nestedPassiveUpdateCount = rootWithPendingPassiveEffects === null ? 0 : nestedPassiveUpdateCount + 1;\n return true;\n}\n\nfunction isAlreadyFailedLegacyErrorBoundary(instance) {\n return legacyErrorBoundariesThatAlreadyFailed !== null && legacyErrorBoundariesThatAlreadyFailed.has(instance);\n}\nfunction markLegacyErrorBoundaryAsFailed(instance) {\n if (legacyErrorBoundariesThatAlreadyFailed === null) {\n legacyErrorBoundariesThatAlreadyFailed = new Set([instance]);\n } else {\n legacyErrorBoundariesThatAlreadyFailed.add(instance);\n }\n}\n\nfunction prepareToThrowUncaughtError(error) {\n if (!hasUncaughtError) {\n hasUncaughtError = true;\n firstUncaughtError = error;\n }\n}\n\nvar onUncaughtError = prepareToThrowUncaughtError;\n\nfunction captureCommitPhaseErrorOnRoot(rootFiber, sourceFiber, error) {\n var errorInfo = createCapturedValue(error, sourceFiber);\n var update = createRootErrorUpdate(rootFiber, errorInfo, Sync);\n enqueueUpdate(rootFiber, update);\n var root = markUpdateTimeFromFiberToRoot(rootFiber, Sync);\n\n if (root !== null) {\n ensureRootIsScheduled(root);\n schedulePendingInteractions(root, Sync);\n }\n}\n\nfunction captureCommitPhaseError(sourceFiber, error) {\n if (sourceFiber.tag === HostRoot) {\n // Error was thrown at the root. There is no parent, so the root\n // itself should capture it.\n captureCommitPhaseErrorOnRoot(sourceFiber, sourceFiber, error);\n return;\n }\n\n var fiber = sourceFiber.return;\n\n while (fiber !== null) {\n if (fiber.tag === HostRoot) {\n captureCommitPhaseErrorOnRoot(fiber, sourceFiber, error);\n return;\n } else if (fiber.tag === ClassComponent) {\n var ctor = fiber.type;\n var instance = fiber.stateNode;\n\n if (typeof ctor.getDerivedStateFromError === 'function' || typeof instance.componentDidCatch === 'function' && !isAlreadyFailedLegacyErrorBoundary(instance)) {\n var errorInfo = createCapturedValue(error, sourceFiber);\n var update = createClassErrorUpdate(fiber, errorInfo, // TODO: This is always sync\n Sync);\n enqueueUpdate(fiber, update);\n var root = markUpdateTimeFromFiberToRoot(fiber, Sync);\n\n if (root !== null) {\n ensureRootIsScheduled(root);\n schedulePendingInteractions(root, Sync);\n }\n\n return;\n }\n }\n\n fiber = fiber.return;\n }\n}\nfunction pingSuspendedRoot(root, thenable, suspendedTime) {\n var pingCache = root.pingCache;\n\n if (pingCache !== null) {\n // The thenable resolved, so we no longer need to memoize, because it will\n // never be thrown again.\n pingCache.delete(thenable);\n }\n\n if (workInProgressRoot === root && renderExpirationTime$1 === suspendedTime) {\n // Received a ping at the same priority level at which we're currently\n // rendering. We might want to restart this render. This should mirror\n // the logic of whether or not a root suspends once it completes.\n // TODO: If we're rendering sync either due to Sync, Batched or expired,\n // we should probably never restart.\n // If we're suspended with delay, we'll always suspend so we can always\n // restart. If we're suspended without any updates, it might be a retry.\n // If it's early in the retry we can restart. We can't know for sure\n // whether we'll eventually process an update during this render pass,\n // but it's somewhat unlikely that we get to a ping before that, since\n // getting to the root most update is usually very fast.\n if (workInProgressRootExitStatus === RootSuspendedWithDelay || workInProgressRootExitStatus === RootSuspended && workInProgressRootLatestProcessedExpirationTime === Sync && now() - globalMostRecentFallbackTime < FALLBACK_THROTTLE_MS) {\n // Restart from the root. Don't need to schedule a ping because\n // we're already working on this tree.\n prepareFreshStack(root, renderExpirationTime$1);\n } else {\n // Even though we can't restart right now, we might get an\n // opportunity later. So we mark this render as having a ping.\n workInProgressRootHasPendingPing = true;\n }\n\n return;\n }\n\n if (!isRootSuspendedAtTime(root, suspendedTime)) {\n // The root is no longer suspended at this time.\n return;\n }\n\n var lastPingedTime = root.lastPingedTime;\n\n if (lastPingedTime !== NoWork && lastPingedTime < suspendedTime) {\n // There's already a lower priority ping scheduled.\n return;\n } // Mark the time at which this ping was scheduled.\n\n\n root.lastPingedTime = suspendedTime;\n\n ensureRootIsScheduled(root);\n schedulePendingInteractions(root, suspendedTime);\n}\n\nfunction retryTimedOutBoundary(boundaryFiber, retryTime) {\n // The boundary fiber (a Suspense component or SuspenseList component)\n // previously was rendered in its fallback state. One of the promises that\n // suspended it has resolved, which means at least part of the tree was\n // likely unblocked. Try rendering again, at a new expiration time.\n if (retryTime === NoWork) {\n var suspenseConfig = null; // Retries don't carry over the already committed update.\n\n var currentTime = requestCurrentTimeForUpdate();\n retryTime = computeExpirationForFiber(currentTime, boundaryFiber, suspenseConfig);\n } // TODO: Special case idle priority?\n\n\n var root = markUpdateTimeFromFiberToRoot(boundaryFiber, retryTime);\n\n if (root !== null) {\n ensureRootIsScheduled(root);\n schedulePendingInteractions(root, retryTime);\n }\n}\nfunction resolveRetryThenable(boundaryFiber, thenable) {\n var retryTime = NoWork; // Default\n\n var retryCache;\n\n {\n retryCache = boundaryFiber.stateNode;\n }\n\n if (retryCache !== null) {\n // The thenable resolved, so we no longer need to memoize, because it will\n // never be thrown again.\n retryCache.delete(thenable);\n }\n\n retryTimedOutBoundary(boundaryFiber, retryTime);\n} // Computes the next Just Noticeable Difference (JND) boundary.\n// The theory is that a person can't tell the difference between small differences in time.\n// Therefore, if we wait a bit longer than necessary that won't translate to a noticeable\n// difference in the experience. However, waiting for longer might mean that we can avoid\n// showing an intermediate loading state. The longer we have already waited, the harder it\n// is to tell small differences in time. Therefore, the longer we've already waited,\n// the longer we can wait additionally. At some point we have to give up though.\n// We pick a train model where the next boundary commits at a consistent schedule.\n// These particular numbers are vague estimates. We expect to adjust them based on research.\n\nfunction jnd(timeElapsed) {\n return timeElapsed < 120 ? 120 : timeElapsed < 480 ? 480 : timeElapsed < 1080 ? 1080 : timeElapsed < 1920 ? 1920 : timeElapsed < 3000 ? 3000 : timeElapsed < 4320 ? 4320 : ceil(timeElapsed / 1960) * 1960;\n}\n\nfunction computeMsUntilSuspenseLoadingDelay(mostRecentEventTime, committedExpirationTime, suspenseConfig) {\n var busyMinDurationMs = suspenseConfig.busyMinDurationMs | 0;\n\n if (busyMinDurationMs <= 0) {\n return 0;\n }\n\n var busyDelayMs = suspenseConfig.busyDelayMs | 0; // Compute the time until this render pass would expire.\n\n var currentTimeMs = now();\n var eventTimeMs = inferTimeFromExpirationTimeWithSuspenseConfig(mostRecentEventTime, suspenseConfig);\n var timeElapsed = currentTimeMs - eventTimeMs;\n\n if (timeElapsed <= busyDelayMs) {\n // If we haven't yet waited longer than the initial delay, we don't\n // have to wait any additional time.\n return 0;\n }\n\n var msUntilTimeout = busyDelayMs + busyMinDurationMs - timeElapsed; // This is the value that is passed to `setTimeout`.\n\n return msUntilTimeout;\n}\n\nfunction checkForNestedUpdates() {\n if (nestedUpdateCount > NESTED_UPDATE_LIMIT) {\n nestedUpdateCount = 0;\n rootWithNestedUpdates = null;\n\n {\n {\n throw Error( \"Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops.\" );\n }\n }\n }\n\n {\n if (nestedPassiveUpdateCount > NESTED_PASSIVE_UPDATE_LIMIT) {\n nestedPassiveUpdateCount = 0;\n\n error('Maximum update depth exceeded. This can happen when a component ' + \"calls setState inside useEffect, but useEffect either doesn't \" + 'have a dependency array, or one of the dependencies changes on ' + 'every render.');\n }\n }\n}\n\nfunction flushRenderPhaseStrictModeWarningsInDEV() {\n {\n ReactStrictModeWarnings.flushLegacyContextWarning();\n\n {\n ReactStrictModeWarnings.flushPendingUnsafeLifecycleWarnings();\n }\n }\n}\n\nfunction stopFinishedWorkLoopTimer() {\n var didCompleteRoot = true;\n stopWorkLoopTimer(interruptedBy, didCompleteRoot);\n interruptedBy = null;\n}\n\nfunction stopInterruptedWorkLoopTimer() {\n // TODO: Track which fiber caused the interruption.\n var didCompleteRoot = false;\n stopWorkLoopTimer(interruptedBy, didCompleteRoot);\n interruptedBy = null;\n}\n\nfunction checkForInterruption(fiberThatReceivedUpdate, updateExpirationTime) {\n if ( workInProgressRoot !== null && updateExpirationTime > renderExpirationTime$1) {\n interruptedBy = fiberThatReceivedUpdate;\n }\n}\n\nvar didWarnStateUpdateForUnmountedComponent = null;\n\nfunction warnAboutUpdateOnUnmountedFiberInDEV(fiber) {\n {\n var tag = fiber.tag;\n\n if (tag !== HostRoot && tag !== ClassComponent && tag !== FunctionComponent && tag !== ForwardRef && tag !== MemoComponent && tag !== SimpleMemoComponent && tag !== Block) {\n // Only warn for user-defined components, not internal ones like Suspense.\n return;\n }\n // the problematic code almost always lies inside that component.\n\n\n var componentName = getComponentName(fiber.type) || 'ReactComponent';\n\n if (didWarnStateUpdateForUnmountedComponent !== null) {\n if (didWarnStateUpdateForUnmountedComponent.has(componentName)) {\n return;\n }\n\n didWarnStateUpdateForUnmountedComponent.add(componentName);\n } else {\n didWarnStateUpdateForUnmountedComponent = new Set([componentName]);\n }\n\n error(\"Can't perform a React state update on an unmounted component. This \" + 'is a no-op, but it indicates a memory leak in your application. To ' + 'fix, cancel all subscriptions and asynchronous tasks in %s.%s', tag === ClassComponent ? 'the componentWillUnmount method' : 'a useEffect cleanup function', getStackByFiberInDevAndProd(fiber));\n }\n}\n\nvar beginWork$1;\n\n{\n var dummyFiber = null;\n\n beginWork$1 = function (current, unitOfWork, expirationTime) {\n // If a component throws an error, we replay it again in a synchronously\n // dispatched event, so that the debugger will treat it as an uncaught\n // error See ReactErrorUtils for more information.\n // Before entering the begin phase, copy the work-in-progress onto a dummy\n // fiber. If beginWork throws, we'll use this to reset the state.\n var originalWorkInProgressCopy = assignFiberPropertiesInDEV(dummyFiber, unitOfWork);\n\n try {\n return beginWork(current, unitOfWork, expirationTime);\n } catch (originalError) {\n if (originalError !== null && typeof originalError === 'object' && typeof originalError.then === 'function') {\n // Don't replay promises. Treat everything else like an error.\n throw originalError;\n } // Keep this code in sync with handleError; any changes here must have\n // corresponding changes there.\n\n\n resetContextDependencies();\n resetHooksAfterThrow(); // Don't reset current debug fiber, since we're about to work on the\n // same fiber again.\n // Unwind the failed stack frame\n\n unwindInterruptedWork(unitOfWork); // Restore the original properties of the fiber.\n\n assignFiberPropertiesInDEV(unitOfWork, originalWorkInProgressCopy);\n\n if ( unitOfWork.mode & ProfileMode) {\n // Reset the profiler timer.\n startProfilerTimer(unitOfWork);\n } // Run beginWork again.\n\n\n invokeGuardedCallback(null, beginWork, null, current, unitOfWork, expirationTime);\n\n if (hasCaughtError()) {\n var replayError = clearCaughtError(); // `invokeGuardedCallback` sometimes sets an expando `_suppressLogging`.\n // Rethrow this error instead of the original one.\n\n throw replayError;\n } else {\n // This branch is reachable if the render phase is impure.\n throw originalError;\n }\n }\n };\n}\n\nvar didWarnAboutUpdateInRender = false;\nvar didWarnAboutUpdateInRenderForAnotherComponent;\n\n{\n didWarnAboutUpdateInRenderForAnotherComponent = new Set();\n}\n\nfunction warnAboutRenderPhaseUpdatesInDEV(fiber) {\n {\n if (isRendering && (executionContext & RenderContext) !== NoContext) {\n switch (fiber.tag) {\n case FunctionComponent:\n case ForwardRef:\n case SimpleMemoComponent:\n {\n var renderingComponentName = workInProgress && getComponentName(workInProgress.type) || 'Unknown'; // Dedupe by the rendering component because it's the one that needs to be fixed.\n\n var dedupeKey = renderingComponentName;\n\n if (!didWarnAboutUpdateInRenderForAnotherComponent.has(dedupeKey)) {\n didWarnAboutUpdateInRenderForAnotherComponent.add(dedupeKey);\n var setStateComponentName = getComponentName(fiber.type) || 'Unknown';\n\n error('Cannot update a component (`%s`) while rendering a ' + 'different component (`%s`). To locate the bad setState() call inside `%s`, ' + 'follow the stack trace as described in https://fb.me/setstate-in-render', setStateComponentName, renderingComponentName, renderingComponentName);\n }\n\n break;\n }\n\n case ClassComponent:\n {\n if (!didWarnAboutUpdateInRender) {\n error('Cannot update during an existing state transition (such as ' + 'within `render`). Render methods should be a pure ' + 'function of props and state.');\n\n didWarnAboutUpdateInRender = true;\n }\n\n break;\n }\n }\n }\n }\n} // a 'shared' variable that changes when act() opens/closes in tests.\n\n\nvar IsThisRendererActing = {\n current: false\n};\nfunction warnIfNotScopedWithMatchingAct(fiber) {\n {\n if ( IsSomeRendererActing.current === true && IsThisRendererActing.current !== true) {\n error(\"It looks like you're using the wrong act() around your test interactions.\\n\" + 'Be sure to use the matching version of act() corresponding to your renderer:\\n\\n' + '// for react-dom:\\n' + \"import {act} from 'react-dom/test-utils';\\n\" + '// ...\\n' + 'act(() => ...);\\n\\n' + '// for react-test-renderer:\\n' + \"import TestRenderer from 'react-test-renderer';\\n\" + 'const {act} = TestRenderer;\\n' + '// ...\\n' + 'act(() => ...);' + '%s', getStackByFiberInDevAndProd(fiber));\n }\n }\n}\nfunction warnIfNotCurrentlyActingEffectsInDEV(fiber) {\n {\n if ( (fiber.mode & StrictMode) !== NoMode && IsSomeRendererActing.current === false && IsThisRendererActing.current === false) {\n error('An update to %s ran an effect, but was not wrapped in act(...).\\n\\n' + 'When testing, code that causes React state updates should be ' + 'wrapped into act(...):\\n\\n' + 'act(() => {\\n' + ' /* fire events that update state */\\n' + '});\\n' + '/* assert on the output */\\n\\n' + \"This ensures that you're testing the behavior the user would see \" + 'in the browser.' + ' Learn more at https://fb.me/react-wrap-tests-with-act' + '%s', getComponentName(fiber.type), getStackByFiberInDevAndProd(fiber));\n }\n }\n}\n\nfunction warnIfNotCurrentlyActingUpdatesInDEV(fiber) {\n {\n if ( executionContext === NoContext && IsSomeRendererActing.current === false && IsThisRendererActing.current === false) {\n error('An update to %s inside a test was not wrapped in act(...).\\n\\n' + 'When testing, code that causes React state updates should be ' + 'wrapped into act(...):\\n\\n' + 'act(() => {\\n' + ' /* fire events that update state */\\n' + '});\\n' + '/* assert on the output */\\n\\n' + \"This ensures that you're testing the behavior the user would see \" + 'in the browser.' + ' Learn more at https://fb.me/react-wrap-tests-with-act' + '%s', getComponentName(fiber.type), getStackByFiberInDevAndProd(fiber));\n }\n }\n}\n\nvar warnIfNotCurrentlyActingUpdatesInDev = warnIfNotCurrentlyActingUpdatesInDEV; // In tests, we want to enforce a mocked scheduler.\n\nvar didWarnAboutUnmockedScheduler = false; // TODO Before we release concurrent mode, revisit this and decide whether a mocked\n// scheduler is the actual recommendation. The alternative could be a testing build,\n// a new lib, or whatever; we dunno just yet. This message is for early adopters\n// to get their tests right.\n\nfunction warnIfUnmockedScheduler(fiber) {\n {\n if (didWarnAboutUnmockedScheduler === false && Scheduler.unstable_flushAllWithoutAsserting === undefined) {\n if (fiber.mode & BlockingMode || fiber.mode & ConcurrentMode) {\n didWarnAboutUnmockedScheduler = true;\n\n error('In Concurrent or Sync modes, the \"scheduler\" module needs to be mocked ' + 'to guarantee consistent behaviour across tests and browsers. ' + 'For example, with jest: \\n' + \"jest.mock('scheduler', () => require('scheduler/unstable_mock'));\\n\\n\" + 'For more info, visit https://fb.me/react-mock-scheduler');\n }\n }\n }\n}\n\nfunction computeThreadID(root, expirationTime) {\n // Interaction threads are unique per root and expiration time.\n return expirationTime * 1000 + root.interactionThreadID;\n}\n\nfunction markSpawnedWork(expirationTime) {\n\n if (spawnedWorkDuringRender === null) {\n spawnedWorkDuringRender = [expirationTime];\n } else {\n spawnedWorkDuringRender.push(expirationTime);\n }\n}\n\nfunction scheduleInteractions(root, expirationTime, interactions) {\n\n if (interactions.size > 0) {\n var pendingInteractionMap = root.pendingInteractionMap;\n var pendingInteractions = pendingInteractionMap.get(expirationTime);\n\n if (pendingInteractions != null) {\n interactions.forEach(function (interaction) {\n if (!pendingInteractions.has(interaction)) {\n // Update the pending async work count for previously unscheduled interaction.\n interaction.__count++;\n }\n\n pendingInteractions.add(interaction);\n });\n } else {\n pendingInteractionMap.set(expirationTime, new Set(interactions)); // Update the pending async work count for the current interactions.\n\n interactions.forEach(function (interaction) {\n interaction.__count++;\n });\n }\n\n var subscriber = tracing.__subscriberRef.current;\n\n if (subscriber !== null) {\n var threadID = computeThreadID(root, expirationTime);\n subscriber.onWorkScheduled(interactions, threadID);\n }\n }\n}\n\nfunction schedulePendingInteractions(root, expirationTime) {\n\n scheduleInteractions(root, expirationTime, tracing.__interactionsRef.current);\n}\n\nfunction startWorkOnPendingInteractions(root, expirationTime) {\n // we can accurately attribute time spent working on it, And so that cascading\n // work triggered during the render phase will be associated with it.\n\n\n var interactions = new Set();\n root.pendingInteractionMap.forEach(function (scheduledInteractions, scheduledExpirationTime) {\n if (scheduledExpirationTime >= expirationTime) {\n scheduledInteractions.forEach(function (interaction) {\n return interactions.add(interaction);\n });\n }\n }); // Store the current set of interactions on the FiberRoot for a few reasons:\n // We can re-use it in hot functions like performConcurrentWorkOnRoot()\n // without having to recalculate it. We will also use it in commitWork() to\n // pass to any Profiler onRender() hooks. This also provides DevTools with a\n // way to access it when the onCommitRoot() hook is called.\n\n root.memoizedInteractions = interactions;\n\n if (interactions.size > 0) {\n var subscriber = tracing.__subscriberRef.current;\n\n if (subscriber !== null) {\n var threadID = computeThreadID(root, expirationTime);\n\n try {\n subscriber.onWorkStarted(interactions, threadID);\n } catch (error) {\n // If the subscriber throws, rethrow it in a separate task\n scheduleCallback(ImmediatePriority, function () {\n throw error;\n });\n }\n }\n }\n}\n\nfunction finishPendingInteractions(root, committedExpirationTime) {\n\n var earliestRemainingTimeAfterCommit = root.firstPendingTime;\n var subscriber;\n\n try {\n subscriber = tracing.__subscriberRef.current;\n\n if (subscriber !== null && root.memoizedInteractions.size > 0) {\n var threadID = computeThreadID(root, committedExpirationTime);\n subscriber.onWorkStopped(root.memoizedInteractions, threadID);\n }\n } catch (error) {\n // If the subscriber throws, rethrow it in a separate task\n scheduleCallback(ImmediatePriority, function () {\n throw error;\n });\n } finally {\n // Clear completed interactions from the pending Map.\n // Unless the render was suspended or cascading work was scheduled,\n // In which case– leave pending interactions until the subsequent render.\n var pendingInteractionMap = root.pendingInteractionMap;\n pendingInteractionMap.forEach(function (scheduledInteractions, scheduledExpirationTime) {\n // Only decrement the pending interaction count if we're done.\n // If there's still work at the current priority,\n // That indicates that we are waiting for suspense data.\n if (scheduledExpirationTime > earliestRemainingTimeAfterCommit) {\n pendingInteractionMap.delete(scheduledExpirationTime);\n scheduledInteractions.forEach(function (interaction) {\n interaction.__count--;\n\n if (subscriber !== null && interaction.__count === 0) {\n try {\n subscriber.onInteractionScheduledWorkCompleted(interaction);\n } catch (error) {\n // If the subscriber throws, rethrow it in a separate task\n scheduleCallback(ImmediatePriority, function () {\n throw error;\n });\n }\n }\n });\n }\n });\n }\n}\n\nvar onScheduleFiberRoot = null;\nvar onCommitFiberRoot = null;\nvar onCommitFiberUnmount = null;\nvar hasLoggedError = false;\nvar isDevToolsPresent = typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined';\nfunction injectInternals(internals) {\n if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined') {\n // No DevTools\n return false;\n }\n\n var hook = __REACT_DEVTOOLS_GLOBAL_HOOK__;\n\n if (hook.isDisabled) {\n // This isn't a real property on the hook, but it can be set to opt out\n // of DevTools integration and associated warnings and logs.\n // https://github.com/facebook/react/issues/3877\n return true;\n }\n\n if (!hook.supportsFiber) {\n {\n error('The installed version of React DevTools is too old and will not work ' + 'with the current version of React. Please update React DevTools. ' + 'https://fb.me/react-devtools');\n } // DevTools exists, even though it doesn't support Fiber.\n\n\n return true;\n }\n\n try {\n var rendererID = hook.inject(internals); // We have successfully injected, so now it is safe to set up hooks.\n\n if (true) {\n // Only used by Fast Refresh\n if (typeof hook.onScheduleFiberRoot === 'function') {\n onScheduleFiberRoot = function (root, children) {\n try {\n hook.onScheduleFiberRoot(rendererID, root, children);\n } catch (err) {\n if (true && !hasLoggedError) {\n hasLoggedError = true;\n\n error('React instrumentation encountered an error: %s', err);\n }\n }\n };\n }\n }\n\n onCommitFiberRoot = function (root, expirationTime) {\n try {\n var didError = (root.current.effectTag & DidCapture) === DidCapture;\n\n if (enableProfilerTimer) {\n var currentTime = getCurrentTime();\n var priorityLevel = inferPriorityFromExpirationTime(currentTime, expirationTime);\n hook.onCommitFiberRoot(rendererID, root, priorityLevel, didError);\n } else {\n hook.onCommitFiberRoot(rendererID, root, undefined, didError);\n }\n } catch (err) {\n if (true) {\n if (!hasLoggedError) {\n hasLoggedError = true;\n\n error('React instrumentation encountered an error: %s', err);\n }\n }\n }\n };\n\n onCommitFiberUnmount = function (fiber) {\n try {\n hook.onCommitFiberUnmount(rendererID, fiber);\n } catch (err) {\n if (true) {\n if (!hasLoggedError) {\n hasLoggedError = true;\n\n error('React instrumentation encountered an error: %s', err);\n }\n }\n }\n };\n } catch (err) {\n // Catch all errors because it is unsafe to throw during initialization.\n {\n error('React instrumentation encountered an error: %s.', err);\n }\n } // DevTools exists\n\n\n return true;\n}\nfunction onScheduleRoot(root, children) {\n if (typeof onScheduleFiberRoot === 'function') {\n onScheduleFiberRoot(root, children);\n }\n}\nfunction onCommitRoot(root, expirationTime) {\n if (typeof onCommitFiberRoot === 'function') {\n onCommitFiberRoot(root, expirationTime);\n }\n}\nfunction onCommitUnmount(fiber) {\n if (typeof onCommitFiberUnmount === 'function') {\n onCommitFiberUnmount(fiber);\n }\n}\n\nvar hasBadMapPolyfill;\n\n{\n hasBadMapPolyfill = false;\n\n try {\n var nonExtensibleObject = Object.preventExtensions({});\n var testMap = new Map([[nonExtensibleObject, null]]);\n var testSet = new Set([nonExtensibleObject]); // This is necessary for Rollup to not consider these unused.\n // https://github.com/rollup/rollup/issues/1771\n // TODO: we can remove these if Rollup fixes the bug.\n\n testMap.set(0, 0);\n testSet.add(0);\n } catch (e) {\n // TODO: Consider warning about bad polyfills\n hasBadMapPolyfill = true;\n }\n}\n\nvar debugCounter = 1;\n\nfunction FiberNode(tag, pendingProps, key, mode) {\n // Instance\n this.tag = tag;\n this.key = key;\n this.elementType = null;\n this.type = null;\n this.stateNode = null; // Fiber\n\n this.return = null;\n this.child = null;\n this.sibling = null;\n this.index = 0;\n this.ref = null;\n this.pendingProps = pendingProps;\n this.memoizedProps = null;\n this.updateQueue = null;\n this.memoizedState = null;\n this.dependencies = null;\n this.mode = mode; // Effects\n\n this.effectTag = NoEffect;\n this.nextEffect = null;\n this.firstEffect = null;\n this.lastEffect = null;\n this.expirationTime = NoWork;\n this.childExpirationTime = NoWork;\n this.alternate = null;\n\n {\n // Note: The following is done to avoid a v8 performance cliff.\n //\n // Initializing the fields below to smis and later updating them with\n // double values will cause Fibers to end up having separate shapes.\n // This behavior/bug has something to do with Object.preventExtension().\n // Fortunately this only impacts DEV builds.\n // Unfortunately it makes React unusably slow for some applications.\n // To work around this, initialize the fields below with doubles.\n //\n // Learn more about this here:\n // https://github.com/facebook/react/issues/14365\n // https://bugs.chromium.org/p/v8/issues/detail?id=8538\n this.actualDuration = Number.NaN;\n this.actualStartTime = Number.NaN;\n this.selfBaseDuration = Number.NaN;\n this.treeBaseDuration = Number.NaN; // It's okay to replace the initial doubles with smis after initialization.\n // This won't trigger the performance cliff mentioned above,\n // and it simplifies other profiler code (including DevTools).\n\n this.actualDuration = 0;\n this.actualStartTime = -1;\n this.selfBaseDuration = 0;\n this.treeBaseDuration = 0;\n } // This is normally DEV-only except www when it adds listeners.\n // TODO: remove the User Timing integration in favor of Root Events.\n\n\n {\n this._debugID = debugCounter++;\n this._debugIsCurrentlyTiming = false;\n }\n\n {\n this._debugSource = null;\n this._debugOwner = null;\n this._debugNeedsRemount = false;\n this._debugHookTypes = null;\n\n if (!hasBadMapPolyfill && typeof Object.preventExtensions === 'function') {\n Object.preventExtensions(this);\n }\n }\n} // This is a constructor function, rather than a POJO constructor, still\n// please ensure we do the following:\n// 1) Nobody should add any instance methods on this. Instance methods can be\n// more difficult to predict when they get optimized and they are almost\n// never inlined properly in static compilers.\n// 2) Nobody should rely on `instanceof Fiber` for type testing. We should\n// always know when it is a fiber.\n// 3) We might want to experiment with using numeric keys since they are easier\n// to optimize in a non-JIT environment.\n// 4) We can easily go from a constructor to a createFiber object literal if that\n// is faster.\n// 5) It should be easy to port this to a C struct and keep a C implementation\n// compatible.\n\n\nvar createFiber = function (tag, pendingProps, key, mode) {\n // $FlowFixMe: the shapes are exact here but Flow doesn't like constructors\n return new FiberNode(tag, pendingProps, key, mode);\n};\n\nfunction shouldConstruct(Component) {\n var prototype = Component.prototype;\n return !!(prototype && prototype.isReactComponent);\n}\n\nfunction isSimpleFunctionComponent(type) {\n return typeof type === 'function' && !shouldConstruct(type) && type.defaultProps === undefined;\n}\nfunction resolveLazyComponentTag(Component) {\n if (typeof Component === 'function') {\n return shouldConstruct(Component) ? ClassComponent : FunctionComponent;\n } else if (Component !== undefined && Component !== null) {\n var $$typeof = Component.$$typeof;\n\n if ($$typeof === REACT_FORWARD_REF_TYPE) {\n return ForwardRef;\n }\n\n if ($$typeof === REACT_MEMO_TYPE) {\n return MemoComponent;\n }\n }\n\n return IndeterminateComponent;\n} // This is used to create an alternate fiber to do work on.\n\nfunction createWorkInProgress(current, pendingProps) {\n var workInProgress = current.alternate;\n\n if (workInProgress === null) {\n // We use a double buffering pooling technique because we know that we'll\n // only ever need at most two versions of a tree. We pool the \"other\" unused\n // node that we're free to reuse. This is lazily created to avoid allocating\n // extra objects for things that are never updated. It also allow us to\n // reclaim the extra memory if needed.\n workInProgress = createFiber(current.tag, pendingProps, current.key, current.mode);\n workInProgress.elementType = current.elementType;\n workInProgress.type = current.type;\n workInProgress.stateNode = current.stateNode;\n\n {\n // DEV-only fields\n {\n workInProgress._debugID = current._debugID;\n }\n\n workInProgress._debugSource = current._debugSource;\n workInProgress._debugOwner = current._debugOwner;\n workInProgress._debugHookTypes = current._debugHookTypes;\n }\n\n workInProgress.alternate = current;\n current.alternate = workInProgress;\n } else {\n workInProgress.pendingProps = pendingProps; // We already have an alternate.\n // Reset the effect tag.\n\n workInProgress.effectTag = NoEffect; // The effect list is no longer valid.\n\n workInProgress.nextEffect = null;\n workInProgress.firstEffect = null;\n workInProgress.lastEffect = null;\n\n {\n // We intentionally reset, rather than copy, actualDuration & actualStartTime.\n // This prevents time from endlessly accumulating in new commits.\n // This has the downside of resetting values for different priority renders,\n // But works for yielding (the common case) and should support resuming.\n workInProgress.actualDuration = 0;\n workInProgress.actualStartTime = -1;\n }\n }\n\n workInProgress.childExpirationTime = current.childExpirationTime;\n workInProgress.expirationTime = current.expirationTime;\n workInProgress.child = current.child;\n workInProgress.memoizedProps = current.memoizedProps;\n workInProgress.memoizedState = current.memoizedState;\n workInProgress.updateQueue = current.updateQueue; // Clone the dependencies object. This is mutated during the render phase, so\n // it cannot be shared with the current fiber.\n\n var currentDependencies = current.dependencies;\n workInProgress.dependencies = currentDependencies === null ? null : {\n expirationTime: currentDependencies.expirationTime,\n firstContext: currentDependencies.firstContext,\n responders: currentDependencies.responders\n }; // These will be overridden during the parent's reconciliation\n\n workInProgress.sibling = current.sibling;\n workInProgress.index = current.index;\n workInProgress.ref = current.ref;\n\n {\n workInProgress.selfBaseDuration = current.selfBaseDuration;\n workInProgress.treeBaseDuration = current.treeBaseDuration;\n }\n\n {\n workInProgress._debugNeedsRemount = current._debugNeedsRemount;\n\n switch (workInProgress.tag) {\n case IndeterminateComponent:\n case FunctionComponent:\n case SimpleMemoComponent:\n workInProgress.type = resolveFunctionForHotReloading(current.type);\n break;\n\n case ClassComponent:\n workInProgress.type = resolveClassForHotReloading(current.type);\n break;\n\n case ForwardRef:\n workInProgress.type = resolveForwardRefForHotReloading(current.type);\n break;\n }\n }\n\n return workInProgress;\n} // Used to reuse a Fiber for a second pass.\n\nfunction resetWorkInProgress(workInProgress, renderExpirationTime) {\n // This resets the Fiber to what createFiber or createWorkInProgress would\n // have set the values to before during the first pass. Ideally this wouldn't\n // be necessary but unfortunately many code paths reads from the workInProgress\n // when they should be reading from current and writing to workInProgress.\n // We assume pendingProps, index, key, ref, return are still untouched to\n // avoid doing another reconciliation.\n // Reset the effect tag but keep any Placement tags, since that's something\n // that child fiber is setting, not the reconciliation.\n workInProgress.effectTag &= Placement; // The effect list is no longer valid.\n\n workInProgress.nextEffect = null;\n workInProgress.firstEffect = null;\n workInProgress.lastEffect = null;\n var current = workInProgress.alternate;\n\n if (current === null) {\n // Reset to createFiber's initial values.\n workInProgress.childExpirationTime = NoWork;\n workInProgress.expirationTime = renderExpirationTime;\n workInProgress.child = null;\n workInProgress.memoizedProps = null;\n workInProgress.memoizedState = null;\n workInProgress.updateQueue = null;\n workInProgress.dependencies = null;\n\n {\n // Note: We don't reset the actualTime counts. It's useful to accumulate\n // actual time across multiple render passes.\n workInProgress.selfBaseDuration = 0;\n workInProgress.treeBaseDuration = 0;\n }\n } else {\n // Reset to the cloned values that createWorkInProgress would've.\n workInProgress.childExpirationTime = current.childExpirationTime;\n workInProgress.expirationTime = current.expirationTime;\n workInProgress.child = current.child;\n workInProgress.memoizedProps = current.memoizedProps;\n workInProgress.memoizedState = current.memoizedState;\n workInProgress.updateQueue = current.updateQueue; // Clone the dependencies object. This is mutated during the render phase, so\n // it cannot be shared with the current fiber.\n\n var currentDependencies = current.dependencies;\n workInProgress.dependencies = currentDependencies === null ? null : {\n expirationTime: currentDependencies.expirationTime,\n firstContext: currentDependencies.firstContext,\n responders: currentDependencies.responders\n };\n\n {\n // Note: We don't reset the actualTime counts. It's useful to accumulate\n // actual time across multiple render passes.\n workInProgress.selfBaseDuration = current.selfBaseDuration;\n workInProgress.treeBaseDuration = current.treeBaseDuration;\n }\n }\n\n return workInProgress;\n}\nfunction createHostRootFiber(tag) {\n var mode;\n\n if (tag === ConcurrentRoot) {\n mode = ConcurrentMode | BlockingMode | StrictMode;\n } else if (tag === BlockingRoot) {\n mode = BlockingMode | StrictMode;\n } else {\n mode = NoMode;\n }\n\n if ( isDevToolsPresent) {\n // Always collect profile timings when DevTools are present.\n // This enables DevTools to start capturing timing at any point–\n // Without some nodes in the tree having empty base times.\n mode |= ProfileMode;\n }\n\n return createFiber(HostRoot, null, null, mode);\n}\nfunction createFiberFromTypeAndProps(type, // React$ElementType\nkey, pendingProps, owner, mode, expirationTime) {\n var fiber;\n var fiberTag = IndeterminateComponent; // The resolved type is set if we know what the final type will be. I.e. it's not lazy.\n\n var resolvedType = type;\n\n if (typeof type === 'function') {\n if (shouldConstruct(type)) {\n fiberTag = ClassComponent;\n\n {\n resolvedType = resolveClassForHotReloading(resolvedType);\n }\n } else {\n {\n resolvedType = resolveFunctionForHotReloading(resolvedType);\n }\n }\n } else if (typeof type === 'string') {\n fiberTag = HostComponent;\n } else {\n getTag: switch (type) {\n case REACT_FRAGMENT_TYPE:\n return createFiberFromFragment(pendingProps.children, mode, expirationTime, key);\n\n case REACT_CONCURRENT_MODE_TYPE:\n fiberTag = Mode;\n mode |= ConcurrentMode | BlockingMode | StrictMode;\n break;\n\n case REACT_STRICT_MODE_TYPE:\n fiberTag = Mode;\n mode |= StrictMode;\n break;\n\n case REACT_PROFILER_TYPE:\n return createFiberFromProfiler(pendingProps, mode, expirationTime, key);\n\n case REACT_SUSPENSE_TYPE:\n return createFiberFromSuspense(pendingProps, mode, expirationTime, key);\n\n case REACT_SUSPENSE_LIST_TYPE:\n return createFiberFromSuspenseList(pendingProps, mode, expirationTime, key);\n\n default:\n {\n if (typeof type === 'object' && type !== null) {\n switch (type.$$typeof) {\n case REACT_PROVIDER_TYPE:\n fiberTag = ContextProvider;\n break getTag;\n\n case REACT_CONTEXT_TYPE:\n // This is a consumer\n fiberTag = ContextConsumer;\n break getTag;\n\n case REACT_FORWARD_REF_TYPE:\n fiberTag = ForwardRef;\n\n {\n resolvedType = resolveForwardRefForHotReloading(resolvedType);\n }\n\n break getTag;\n\n case REACT_MEMO_TYPE:\n fiberTag = MemoComponent;\n break getTag;\n\n case REACT_LAZY_TYPE:\n fiberTag = LazyComponent;\n resolvedType = null;\n break getTag;\n\n case REACT_BLOCK_TYPE:\n fiberTag = Block;\n break getTag;\n\n }\n }\n\n var info = '';\n\n {\n if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and \" + 'named imports.';\n }\n\n var ownerName = owner ? getComponentName(owner.type) : null;\n\n if (ownerName) {\n info += '\\n\\nCheck the render method of `' + ownerName + '`.';\n }\n }\n\n {\n {\n throw Error( \"Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: \" + (type == null ? type : typeof type) + \".\" + info );\n }\n }\n }\n }\n }\n\n fiber = createFiber(fiberTag, pendingProps, key, mode);\n fiber.elementType = type;\n fiber.type = resolvedType;\n fiber.expirationTime = expirationTime;\n return fiber;\n}\nfunction createFiberFromElement(element, mode, expirationTime) {\n var owner = null;\n\n {\n owner = element._owner;\n }\n\n var type = element.type;\n var key = element.key;\n var pendingProps = element.props;\n var fiber = createFiberFromTypeAndProps(type, key, pendingProps, owner, mode, expirationTime);\n\n {\n fiber._debugSource = element._source;\n fiber._debugOwner = element._owner;\n }\n\n return fiber;\n}\nfunction createFiberFromFragment(elements, mode, expirationTime, key) {\n var fiber = createFiber(Fragment, elements, key, mode);\n fiber.expirationTime = expirationTime;\n return fiber;\n}\n\nfunction createFiberFromProfiler(pendingProps, mode, expirationTime, key) {\n {\n if (typeof pendingProps.id !== 'string' || typeof pendingProps.onRender !== 'function') {\n error('Profiler must specify an \"id\" string and \"onRender\" function as props');\n }\n }\n\n var fiber = createFiber(Profiler, pendingProps, key, mode | ProfileMode); // TODO: The Profiler fiber shouldn't have a type. It has a tag.\n\n fiber.elementType = REACT_PROFILER_TYPE;\n fiber.type = REACT_PROFILER_TYPE;\n fiber.expirationTime = expirationTime;\n return fiber;\n}\n\nfunction createFiberFromSuspense(pendingProps, mode, expirationTime, key) {\n var fiber = createFiber(SuspenseComponent, pendingProps, key, mode); // TODO: The SuspenseComponent fiber shouldn't have a type. It has a tag.\n // This needs to be fixed in getComponentName so that it relies on the tag\n // instead.\n\n fiber.type = REACT_SUSPENSE_TYPE;\n fiber.elementType = REACT_SUSPENSE_TYPE;\n fiber.expirationTime = expirationTime;\n return fiber;\n}\nfunction createFiberFromSuspenseList(pendingProps, mode, expirationTime, key) {\n var fiber = createFiber(SuspenseListComponent, pendingProps, key, mode);\n\n {\n // TODO: The SuspenseListComponent fiber shouldn't have a type. It has a tag.\n // This needs to be fixed in getComponentName so that it relies on the tag\n // instead.\n fiber.type = REACT_SUSPENSE_LIST_TYPE;\n }\n\n fiber.elementType = REACT_SUSPENSE_LIST_TYPE;\n fiber.expirationTime = expirationTime;\n return fiber;\n}\nfunction createFiberFromText(content, mode, expirationTime) {\n var fiber = createFiber(HostText, content, null, mode);\n fiber.expirationTime = expirationTime;\n return fiber;\n}\nfunction createFiberFromHostInstanceForDeletion() {\n var fiber = createFiber(HostComponent, null, null, NoMode); // TODO: These should not need a type.\n\n fiber.elementType = 'DELETED';\n fiber.type = 'DELETED';\n return fiber;\n}\nfunction createFiberFromPortal(portal, mode, expirationTime) {\n var pendingProps = portal.children !== null ? portal.children : [];\n var fiber = createFiber(HostPortal, pendingProps, portal.key, mode);\n fiber.expirationTime = expirationTime;\n fiber.stateNode = {\n containerInfo: portal.containerInfo,\n pendingChildren: null,\n // Used by persistent updates\n implementation: portal.implementation\n };\n return fiber;\n} // Used for stashing WIP properties to replay failed work in DEV.\n\nfunction assignFiberPropertiesInDEV(target, source) {\n if (target === null) {\n // This Fiber's initial properties will always be overwritten.\n // We only use a Fiber to ensure the same hidden class so DEV isn't slow.\n target = createFiber(IndeterminateComponent, null, null, NoMode);\n } // This is intentionally written as a list of all properties.\n // We tried to use Object.assign() instead but this is called in\n // the hottest path, and Object.assign() was too slow:\n // https://github.com/facebook/react/issues/12502\n // This code is DEV-only so size is not a concern.\n\n\n target.tag = source.tag;\n target.key = source.key;\n target.elementType = source.elementType;\n target.type = source.type;\n target.stateNode = source.stateNode;\n target.return = source.return;\n target.child = source.child;\n target.sibling = source.sibling;\n target.index = source.index;\n target.ref = source.ref;\n target.pendingProps = source.pendingProps;\n target.memoizedProps = source.memoizedProps;\n target.updateQueue = source.updateQueue;\n target.memoizedState = source.memoizedState;\n target.dependencies = source.dependencies;\n target.mode = source.mode;\n target.effectTag = source.effectTag;\n target.nextEffect = source.nextEffect;\n target.firstEffect = source.firstEffect;\n target.lastEffect = source.lastEffect;\n target.expirationTime = source.expirationTime;\n target.childExpirationTime = source.childExpirationTime;\n target.alternate = source.alternate;\n\n {\n target.actualDuration = source.actualDuration;\n target.actualStartTime = source.actualStartTime;\n target.selfBaseDuration = source.selfBaseDuration;\n target.treeBaseDuration = source.treeBaseDuration;\n }\n\n {\n target._debugID = source._debugID;\n }\n\n target._debugSource = source._debugSource;\n target._debugOwner = source._debugOwner;\n target._debugIsCurrentlyTiming = source._debugIsCurrentlyTiming;\n target._debugNeedsRemount = source._debugNeedsRemount;\n target._debugHookTypes = source._debugHookTypes;\n return target;\n}\n\nfunction FiberRootNode(containerInfo, tag, hydrate) {\n this.tag = tag;\n this.current = null;\n this.containerInfo = containerInfo;\n this.pendingChildren = null;\n this.pingCache = null;\n this.finishedExpirationTime = NoWork;\n this.finishedWork = null;\n this.timeoutHandle = noTimeout;\n this.context = null;\n this.pendingContext = null;\n this.hydrate = hydrate;\n this.callbackNode = null;\n this.callbackPriority = NoPriority;\n this.firstPendingTime = NoWork;\n this.firstSuspendedTime = NoWork;\n this.lastSuspendedTime = NoWork;\n this.nextKnownPendingLevel = NoWork;\n this.lastPingedTime = NoWork;\n this.lastExpiredTime = NoWork;\n\n {\n this.interactionThreadID = tracing.unstable_getThreadID();\n this.memoizedInteractions = new Set();\n this.pendingInteractionMap = new Map();\n }\n}\n\nfunction createFiberRoot(containerInfo, tag, hydrate, hydrationCallbacks) {\n var root = new FiberRootNode(containerInfo, tag, hydrate);\n // stateNode is any.\n\n\n var uninitializedFiber = createHostRootFiber(tag);\n root.current = uninitializedFiber;\n uninitializedFiber.stateNode = root;\n initializeUpdateQueue(uninitializedFiber);\n return root;\n}\nfunction isRootSuspendedAtTime(root, expirationTime) {\n var firstSuspendedTime = root.firstSuspendedTime;\n var lastSuspendedTime = root.lastSuspendedTime;\n return firstSuspendedTime !== NoWork && firstSuspendedTime >= expirationTime && lastSuspendedTime <= expirationTime;\n}\nfunction markRootSuspendedAtTime(root, expirationTime) {\n var firstSuspendedTime = root.firstSuspendedTime;\n var lastSuspendedTime = root.lastSuspendedTime;\n\n if (firstSuspendedTime < expirationTime) {\n root.firstSuspendedTime = expirationTime;\n }\n\n if (lastSuspendedTime > expirationTime || firstSuspendedTime === NoWork) {\n root.lastSuspendedTime = expirationTime;\n }\n\n if (expirationTime <= root.lastPingedTime) {\n root.lastPingedTime = NoWork;\n }\n\n if (expirationTime <= root.lastExpiredTime) {\n root.lastExpiredTime = NoWork;\n }\n}\nfunction markRootUpdatedAtTime(root, expirationTime) {\n // Update the range of pending times\n var firstPendingTime = root.firstPendingTime;\n\n if (expirationTime > firstPendingTime) {\n root.firstPendingTime = expirationTime;\n } // Update the range of suspended times. Treat everything lower priority or\n // equal to this update as unsuspended.\n\n\n var firstSuspendedTime = root.firstSuspendedTime;\n\n if (firstSuspendedTime !== NoWork) {\n if (expirationTime >= firstSuspendedTime) {\n // The entire suspended range is now unsuspended.\n root.firstSuspendedTime = root.lastSuspendedTime = root.nextKnownPendingLevel = NoWork;\n } else if (expirationTime >= root.lastSuspendedTime) {\n root.lastSuspendedTime = expirationTime + 1;\n } // This is a pending level. Check if it's higher priority than the next\n // known pending level.\n\n\n if (expirationTime > root.nextKnownPendingLevel) {\n root.nextKnownPendingLevel = expirationTime;\n }\n }\n}\nfunction markRootFinishedAtTime(root, finishedExpirationTime, remainingExpirationTime) {\n // Update the range of pending times\n root.firstPendingTime = remainingExpirationTime; // Update the range of suspended times. Treat everything higher priority or\n // equal to this update as unsuspended.\n\n if (finishedExpirationTime <= root.lastSuspendedTime) {\n // The entire suspended range is now unsuspended.\n root.firstSuspendedTime = root.lastSuspendedTime = root.nextKnownPendingLevel = NoWork;\n } else if (finishedExpirationTime <= root.firstSuspendedTime) {\n // Part of the suspended range is now unsuspended. Narrow the range to\n // include everything between the unsuspended time (non-inclusive) and the\n // last suspended time.\n root.firstSuspendedTime = finishedExpirationTime - 1;\n }\n\n if (finishedExpirationTime <= root.lastPingedTime) {\n // Clear the pinged time\n root.lastPingedTime = NoWork;\n }\n\n if (finishedExpirationTime <= root.lastExpiredTime) {\n // Clear the expired time\n root.lastExpiredTime = NoWork;\n }\n}\nfunction markRootExpiredAtTime(root, expirationTime) {\n var lastExpiredTime = root.lastExpiredTime;\n\n if (lastExpiredTime === NoWork || lastExpiredTime > expirationTime) {\n root.lastExpiredTime = expirationTime;\n }\n}\n\nvar didWarnAboutNestedUpdates;\nvar didWarnAboutFindNodeInStrictMode;\n\n{\n didWarnAboutNestedUpdates = false;\n didWarnAboutFindNodeInStrictMode = {};\n}\n\nfunction getContextForSubtree(parentComponent) {\n if (!parentComponent) {\n return emptyContextObject;\n }\n\n var fiber = get(parentComponent);\n var parentContext = findCurrentUnmaskedContext(fiber);\n\n if (fiber.tag === ClassComponent) {\n var Component = fiber.type;\n\n if (isContextProvider(Component)) {\n return processChildContext(fiber, Component, parentContext);\n }\n }\n\n return parentContext;\n}\n\nfunction findHostInstanceWithWarning(component, methodName) {\n {\n var fiber = get(component);\n\n if (fiber === undefined) {\n if (typeof component.render === 'function') {\n {\n {\n throw Error( \"Unable to find node on an unmounted component.\" );\n }\n }\n } else {\n {\n {\n throw Error( \"Argument appears to not be a ReactComponent. Keys: \" + Object.keys(component) );\n }\n }\n }\n }\n\n var hostFiber = findCurrentHostFiber(fiber);\n\n if (hostFiber === null) {\n return null;\n }\n\n if (hostFiber.mode & StrictMode) {\n var componentName = getComponentName(fiber.type) || 'Component';\n\n if (!didWarnAboutFindNodeInStrictMode[componentName]) {\n didWarnAboutFindNodeInStrictMode[componentName] = true;\n\n if (fiber.mode & StrictMode) {\n error('%s is deprecated in StrictMode. ' + '%s was passed an instance of %s which is inside StrictMode. ' + 'Instead, add a ref directly to the element you want to reference. ' + 'Learn more about using refs safely here: ' + 'https://fb.me/react-strict-mode-find-node%s', methodName, methodName, componentName, getStackByFiberInDevAndProd(hostFiber));\n } else {\n error('%s is deprecated in StrictMode. ' + '%s was passed an instance of %s which renders StrictMode children. ' + 'Instead, add a ref directly to the element you want to reference. ' + 'Learn more about using refs safely here: ' + 'https://fb.me/react-strict-mode-find-node%s', methodName, methodName, componentName, getStackByFiberInDevAndProd(hostFiber));\n }\n }\n }\n\n return hostFiber.stateNode;\n }\n}\n\nfunction createContainer(containerInfo, tag, hydrate, hydrationCallbacks) {\n return createFiberRoot(containerInfo, tag, hydrate);\n}\nfunction updateContainer(element, container, parentComponent, callback) {\n {\n onScheduleRoot(container, element);\n }\n\n var current$1 = container.current;\n var currentTime = requestCurrentTimeForUpdate();\n\n {\n // $FlowExpectedError - jest isn't a global, and isn't recognized outside of tests\n if ('undefined' !== typeof jest) {\n warnIfUnmockedScheduler(current$1);\n warnIfNotScopedWithMatchingAct(current$1);\n }\n }\n\n var suspenseConfig = requestCurrentSuspenseConfig();\n var expirationTime = computeExpirationForFiber(currentTime, current$1, suspenseConfig);\n var context = getContextForSubtree(parentComponent);\n\n if (container.context === null) {\n container.context = context;\n } else {\n container.pendingContext = context;\n }\n\n {\n if (isRendering && current !== null && !didWarnAboutNestedUpdates) {\n didWarnAboutNestedUpdates = true;\n\n error('Render methods should be a pure function of props and state; ' + 'triggering nested component updates from render is not allowed. ' + 'If necessary, trigger nested updates in componentDidUpdate.\\n\\n' + 'Check the render method of %s.', getComponentName(current.type) || 'Unknown');\n }\n }\n\n var update = createUpdate(expirationTime, suspenseConfig); // Caution: React DevTools currently depends on this property\n // being called \"element\".\n\n update.payload = {\n element: element\n };\n callback = callback === undefined ? null : callback;\n\n if (callback !== null) {\n {\n if (typeof callback !== 'function') {\n error('render(...): Expected the last optional `callback` argument to be a ' + 'function. Instead received: %s.', callback);\n }\n }\n\n update.callback = callback;\n }\n\n enqueueUpdate(current$1, update);\n scheduleWork(current$1, expirationTime);\n return expirationTime;\n}\nfunction getPublicRootInstance(container) {\n var containerFiber = container.current;\n\n if (!containerFiber.child) {\n return null;\n }\n\n switch (containerFiber.child.tag) {\n case HostComponent:\n return getPublicInstance(containerFiber.child.stateNode);\n\n default:\n return containerFiber.child.stateNode;\n }\n}\n\nfunction markRetryTimeImpl(fiber, retryTime) {\n var suspenseState = fiber.memoizedState;\n\n if (suspenseState !== null && suspenseState.dehydrated !== null) {\n if (suspenseState.retryTime < retryTime) {\n suspenseState.retryTime = retryTime;\n }\n }\n} // Increases the priority of thennables when they resolve within this boundary.\n\n\nfunction markRetryTimeIfNotHydrated(fiber, retryTime) {\n markRetryTimeImpl(fiber, retryTime);\n var alternate = fiber.alternate;\n\n if (alternate) {\n markRetryTimeImpl(alternate, retryTime);\n }\n}\n\nfunction attemptUserBlockingHydration$1(fiber) {\n if (fiber.tag !== SuspenseComponent) {\n // We ignore HostRoots here because we can't increase\n // their priority and they should not suspend on I/O,\n // since you have to wrap anything that might suspend in\n // Suspense.\n return;\n }\n\n var expTime = computeInteractiveExpiration(requestCurrentTimeForUpdate());\n scheduleWork(fiber, expTime);\n markRetryTimeIfNotHydrated(fiber, expTime);\n}\nfunction attemptContinuousHydration$1(fiber) {\n if (fiber.tag !== SuspenseComponent) {\n // We ignore HostRoots here because we can't increase\n // their priority and they should not suspend on I/O,\n // since you have to wrap anything that might suspend in\n // Suspense.\n return;\n }\n\n scheduleWork(fiber, ContinuousHydration);\n markRetryTimeIfNotHydrated(fiber, ContinuousHydration);\n}\nfunction attemptHydrationAtCurrentPriority$1(fiber) {\n if (fiber.tag !== SuspenseComponent) {\n // We ignore HostRoots here because we can't increase\n // their priority other than synchronously flush it.\n return;\n }\n\n var currentTime = requestCurrentTimeForUpdate();\n var expTime = computeExpirationForFiber(currentTime, fiber, null);\n scheduleWork(fiber, expTime);\n markRetryTimeIfNotHydrated(fiber, expTime);\n}\nfunction findHostInstanceWithNoPortals(fiber) {\n var hostFiber = findCurrentHostFiberWithNoPortals(fiber);\n\n if (hostFiber === null) {\n return null;\n }\n\n if (hostFiber.tag === FundamentalComponent) {\n return hostFiber.stateNode.instance;\n }\n\n return hostFiber.stateNode;\n}\n\nvar shouldSuspendImpl = function (fiber) {\n return false;\n};\n\nfunction shouldSuspend(fiber) {\n return shouldSuspendImpl(fiber);\n}\nvar overrideHookState = null;\nvar overrideProps = null;\nvar scheduleUpdate = null;\nvar setSuspenseHandler = null;\n\n{\n var copyWithSetImpl = function (obj, path, idx, value) {\n if (idx >= path.length) {\n return value;\n }\n\n var key = path[idx];\n var updated = Array.isArray(obj) ? obj.slice() : _assign({}, obj); // $FlowFixMe number or string is fine here\n\n updated[key] = copyWithSetImpl(obj[key], path, idx + 1, value);\n return updated;\n };\n\n var copyWithSet = function (obj, path, value) {\n return copyWithSetImpl(obj, path, 0, value);\n }; // Support DevTools editable values for useState and useReducer.\n\n\n overrideHookState = function (fiber, id, path, value) {\n // For now, the \"id\" of stateful hooks is just the stateful hook index.\n // This may change in the future with e.g. nested hooks.\n var currentHook = fiber.memoizedState;\n\n while (currentHook !== null && id > 0) {\n currentHook = currentHook.next;\n id--;\n }\n\n if (currentHook !== null) {\n var newState = copyWithSet(currentHook.memoizedState, path, value);\n currentHook.memoizedState = newState;\n currentHook.baseState = newState; // We aren't actually adding an update to the queue,\n // because there is no update we can add for useReducer hooks that won't trigger an error.\n // (There's no appropriate action type for DevTools overrides.)\n // As a result though, React will see the scheduled update as a noop and bailout.\n // Shallow cloning props works as a workaround for now to bypass the bailout check.\n\n fiber.memoizedProps = _assign({}, fiber.memoizedProps);\n scheduleWork(fiber, Sync);\n }\n }; // Support DevTools props for function components, forwardRef, memo, host components, etc.\n\n\n overrideProps = function (fiber, path, value) {\n fiber.pendingProps = copyWithSet(fiber.memoizedProps, path, value);\n\n if (fiber.alternate) {\n fiber.alternate.pendingProps = fiber.pendingProps;\n }\n\n scheduleWork(fiber, Sync);\n };\n\n scheduleUpdate = function (fiber) {\n scheduleWork(fiber, Sync);\n };\n\n setSuspenseHandler = function (newShouldSuspendImpl) {\n shouldSuspendImpl = newShouldSuspendImpl;\n };\n}\n\nfunction injectIntoDevTools(devToolsConfig) {\n var findFiberByHostInstance = devToolsConfig.findFiberByHostInstance;\n var ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\n return injectInternals(_assign({}, devToolsConfig, {\n overrideHookState: overrideHookState,\n overrideProps: overrideProps,\n setSuspenseHandler: setSuspenseHandler,\n scheduleUpdate: scheduleUpdate,\n currentDispatcherRef: ReactCurrentDispatcher,\n findHostInstanceByFiber: function (fiber) {\n var hostFiber = findCurrentHostFiber(fiber);\n\n if (hostFiber === null) {\n return null;\n }\n\n return hostFiber.stateNode;\n },\n findFiberByHostInstance: function (instance) {\n if (!findFiberByHostInstance) {\n // Might not be implemented by the renderer.\n return null;\n }\n\n return findFiberByHostInstance(instance);\n },\n // React Refresh\n findHostInstancesForRefresh: findHostInstancesForRefresh ,\n scheduleRefresh: scheduleRefresh ,\n scheduleRoot: scheduleRoot ,\n setRefreshHandler: setRefreshHandler ,\n // Enables DevTools to append owner stacks to error messages in DEV mode.\n getCurrentFiber: function () {\n return current;\n } \n }));\n}\nvar IsSomeRendererActing$1 = ReactSharedInternals.IsSomeRendererActing;\n\nfunction ReactDOMRoot(container, options) {\n this._internalRoot = createRootImpl(container, ConcurrentRoot, options);\n}\n\nfunction ReactDOMBlockingRoot(container, tag, options) {\n this._internalRoot = createRootImpl(container, tag, options);\n}\n\nReactDOMRoot.prototype.render = ReactDOMBlockingRoot.prototype.render = function (children) {\n var root = this._internalRoot;\n\n {\n if (typeof arguments[1] === 'function') {\n error('render(...): does not support the second callback argument. ' + 'To execute a side effect after rendering, declare it in a component body with useEffect().');\n }\n\n var container = root.containerInfo;\n\n if (container.nodeType !== COMMENT_NODE) {\n var hostInstance = findHostInstanceWithNoPortals(root.current);\n\n if (hostInstance) {\n if (hostInstance.parentNode !== container) {\n error('render(...): It looks like the React-rendered content of the ' + 'root container was removed without using React. This is not ' + 'supported and will cause errors. Instead, call ' + \"root.unmount() to empty a root's container.\");\n }\n }\n }\n }\n\n updateContainer(children, root, null, null);\n};\n\nReactDOMRoot.prototype.unmount = ReactDOMBlockingRoot.prototype.unmount = function () {\n {\n if (typeof arguments[0] === 'function') {\n error('unmount(...): does not support a callback argument. ' + 'To execute a side effect after rendering, declare it in a component body with useEffect().');\n }\n }\n\n var root = this._internalRoot;\n var container = root.containerInfo;\n updateContainer(null, root, null, function () {\n unmarkContainerAsRoot(container);\n });\n};\n\nfunction createRootImpl(container, tag, options) {\n // Tag is either LegacyRoot or Concurrent Root\n var hydrate = options != null && options.hydrate === true;\n var hydrationCallbacks = options != null && options.hydrationOptions || null;\n var root = createContainer(container, tag, hydrate);\n markContainerAsRoot(root.current, container);\n\n if (hydrate && tag !== LegacyRoot) {\n var doc = container.nodeType === DOCUMENT_NODE ? container : container.ownerDocument;\n eagerlyTrapReplayableEvents(container, doc);\n }\n\n return root;\n}\nfunction createLegacyRoot(container, options) {\n return new ReactDOMBlockingRoot(container, LegacyRoot, options);\n}\nfunction isValidContainer(node) {\n return !!(node && (node.nodeType === ELEMENT_NODE || node.nodeType === DOCUMENT_NODE || node.nodeType === DOCUMENT_FRAGMENT_NODE || node.nodeType === COMMENT_NODE && node.nodeValue === ' react-mount-point-unstable '));\n}\n\nvar ReactCurrentOwner$3 = ReactSharedInternals.ReactCurrentOwner;\nvar topLevelUpdateWarnings;\nvar warnedAboutHydrateAPI = false;\n\n{\n topLevelUpdateWarnings = function (container) {\n if (container._reactRootContainer && container.nodeType !== COMMENT_NODE) {\n var hostInstance = findHostInstanceWithNoPortals(container._reactRootContainer._internalRoot.current);\n\n if (hostInstance) {\n if (hostInstance.parentNode !== container) {\n error('render(...): It looks like the React-rendered content of this ' + 'container was removed without using React. This is not ' + 'supported and will cause errors. Instead, call ' + 'ReactDOM.unmountComponentAtNode to empty a container.');\n }\n }\n }\n\n var isRootRenderedBySomeReact = !!container._reactRootContainer;\n var rootEl = getReactRootElementInContainer(container);\n var hasNonRootReactChild = !!(rootEl && getInstanceFromNode$1(rootEl));\n\n if (hasNonRootReactChild && !isRootRenderedBySomeReact) {\n error('render(...): Replacing React-rendered children with a new root ' + 'component. If you intended to update the children of this node, ' + 'you should instead have the existing children update their state ' + 'and render the new components instead of calling ReactDOM.render.');\n }\n\n if (container.nodeType === ELEMENT_NODE && container.tagName && container.tagName.toUpperCase() === 'BODY') {\n error('render(): Rendering components directly into document.body is ' + 'discouraged, since its children are often manipulated by third-party ' + 'scripts and browser extensions. This may lead to subtle ' + 'reconciliation issues. Try rendering into a container element created ' + 'for your app.');\n }\n };\n}\n\nfunction getReactRootElementInContainer(container) {\n if (!container) {\n return null;\n }\n\n if (container.nodeType === DOCUMENT_NODE) {\n return container.documentElement;\n } else {\n return container.firstChild;\n }\n}\n\nfunction shouldHydrateDueToLegacyHeuristic(container) {\n var rootElement = getReactRootElementInContainer(container);\n return !!(rootElement && rootElement.nodeType === ELEMENT_NODE && rootElement.hasAttribute(ROOT_ATTRIBUTE_NAME));\n}\n\nfunction legacyCreateRootFromDOMContainer(container, forceHydrate) {\n var shouldHydrate = forceHydrate || shouldHydrateDueToLegacyHeuristic(container); // First clear any existing content.\n\n if (!shouldHydrate) {\n var warned = false;\n var rootSibling;\n\n while (rootSibling = container.lastChild) {\n {\n if (!warned && rootSibling.nodeType === ELEMENT_NODE && rootSibling.hasAttribute(ROOT_ATTRIBUTE_NAME)) {\n warned = true;\n\n error('render(): Target node has markup rendered by React, but there ' + 'are unrelated nodes as well. This is most commonly caused by ' + 'white-space inserted around server-rendered markup.');\n }\n }\n\n container.removeChild(rootSibling);\n }\n }\n\n {\n if (shouldHydrate && !forceHydrate && !warnedAboutHydrateAPI) {\n warnedAboutHydrateAPI = true;\n\n warn('render(): Calling ReactDOM.render() to hydrate server-rendered markup ' + 'will stop working in React v17. Replace the ReactDOM.render() call ' + 'with ReactDOM.hydrate() if you want React to attach to the server HTML.');\n }\n }\n\n return createLegacyRoot(container, shouldHydrate ? {\n hydrate: true\n } : undefined);\n}\n\nfunction warnOnInvalidCallback$1(callback, callerName) {\n {\n if (callback !== null && typeof callback !== 'function') {\n error('%s(...): Expected the last optional `callback` argument to be a ' + 'function. Instead received: %s.', callerName, callback);\n }\n }\n}\n\nfunction legacyRenderSubtreeIntoContainer(parentComponent, children, container, forceHydrate, callback) {\n {\n topLevelUpdateWarnings(container);\n warnOnInvalidCallback$1(callback === undefined ? null : callback, 'render');\n } // TODO: Without `any` type, Flow says \"Property cannot be accessed on any\n // member of intersection type.\" Whyyyyyy.\n\n\n var root = container._reactRootContainer;\n var fiberRoot;\n\n if (!root) {\n // Initial mount\n root = container._reactRootContainer = legacyCreateRootFromDOMContainer(container, forceHydrate);\n fiberRoot = root._internalRoot;\n\n if (typeof callback === 'function') {\n var originalCallback = callback;\n\n callback = function () {\n var instance = getPublicRootInstance(fiberRoot);\n originalCallback.call(instance);\n };\n } // Initial mount should not be batched.\n\n\n unbatchedUpdates(function () {\n updateContainer(children, fiberRoot, parentComponent, callback);\n });\n } else {\n fiberRoot = root._internalRoot;\n\n if (typeof callback === 'function') {\n var _originalCallback = callback;\n\n callback = function () {\n var instance = getPublicRootInstance(fiberRoot);\n\n _originalCallback.call(instance);\n };\n } // Update\n\n\n updateContainer(children, fiberRoot, parentComponent, callback);\n }\n\n return getPublicRootInstance(fiberRoot);\n}\n\nfunction findDOMNode(componentOrElement) {\n {\n var owner = ReactCurrentOwner$3.current;\n\n if (owner !== null && owner.stateNode !== null) {\n var warnedAboutRefsInRender = owner.stateNode._warnedAboutRefsInRender;\n\n if (!warnedAboutRefsInRender) {\n error('%s is accessing findDOMNode inside its render(). ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', getComponentName(owner.type) || 'A component');\n }\n\n owner.stateNode._warnedAboutRefsInRender = true;\n }\n }\n\n if (componentOrElement == null) {\n return null;\n }\n\n if (componentOrElement.nodeType === ELEMENT_NODE) {\n return componentOrElement;\n }\n\n {\n return findHostInstanceWithWarning(componentOrElement, 'findDOMNode');\n }\n}\nfunction hydrate(element, container, callback) {\n if (!isValidContainer(container)) {\n {\n throw Error( \"Target container is not a DOM element.\" );\n }\n }\n\n {\n var isModernRoot = isContainerMarkedAsRoot(container) && container._reactRootContainer === undefined;\n\n if (isModernRoot) {\n error('You are calling ReactDOM.hydrate() on a container that was previously ' + 'passed to ReactDOM.createRoot(). This is not supported. ' + 'Did you mean to call createRoot(container, {hydrate: true}).render(element)?');\n }\n } // TODO: throw or warn if we couldn't hydrate?\n\n\n return legacyRenderSubtreeIntoContainer(null, element, container, true, callback);\n}\nfunction render(element, container, callback) {\n if (!isValidContainer(container)) {\n {\n throw Error( \"Target container is not a DOM element.\" );\n }\n }\n\n {\n var isModernRoot = isContainerMarkedAsRoot(container) && container._reactRootContainer === undefined;\n\n if (isModernRoot) {\n error('You are calling ReactDOM.render() on a container that was previously ' + 'passed to ReactDOM.createRoot(). This is not supported. ' + 'Did you mean to call root.render(element)?');\n }\n }\n\n return legacyRenderSubtreeIntoContainer(null, element, container, false, callback);\n}\nfunction unstable_renderSubtreeIntoContainer(parentComponent, element, containerNode, callback) {\n if (!isValidContainer(containerNode)) {\n {\n throw Error( \"Target container is not a DOM element.\" );\n }\n }\n\n if (!(parentComponent != null && has(parentComponent))) {\n {\n throw Error( \"parentComponent must be a valid React Component\" );\n }\n }\n\n return legacyRenderSubtreeIntoContainer(parentComponent, element, containerNode, false, callback);\n}\nfunction unmountComponentAtNode(container) {\n if (!isValidContainer(container)) {\n {\n throw Error( \"unmountComponentAtNode(...): Target container is not a DOM element.\" );\n }\n }\n\n {\n var isModernRoot = isContainerMarkedAsRoot(container) && container._reactRootContainer === undefined;\n\n if (isModernRoot) {\n error('You are calling ReactDOM.unmountComponentAtNode() on a container that was previously ' + 'passed to ReactDOM.createRoot(). This is not supported. Did you mean to call root.unmount()?');\n }\n }\n\n if (container._reactRootContainer) {\n {\n var rootEl = getReactRootElementInContainer(container);\n var renderedByDifferentReact = rootEl && !getInstanceFromNode$1(rootEl);\n\n if (renderedByDifferentReact) {\n error(\"unmountComponentAtNode(): The node you're attempting to unmount \" + 'was rendered by another copy of React.');\n }\n } // Unmount should not be batched.\n\n\n unbatchedUpdates(function () {\n legacyRenderSubtreeIntoContainer(null, null, container, false, function () {\n // $FlowFixMe This should probably use `delete container._reactRootContainer`\n container._reactRootContainer = null;\n unmarkContainerAsRoot(container);\n });\n }); // If you call unmountComponentAtNode twice in quick succession, you'll\n // get `true` twice. That's probably fine?\n\n return true;\n } else {\n {\n var _rootEl = getReactRootElementInContainer(container);\n\n var hasNonRootReactChild = !!(_rootEl && getInstanceFromNode$1(_rootEl)); // Check if the container itself is a React root node.\n\n var isContainerReactRoot = container.nodeType === ELEMENT_NODE && isValidContainer(container.parentNode) && !!container.parentNode._reactRootContainer;\n\n if (hasNonRootReactChild) {\n error(\"unmountComponentAtNode(): The node you're attempting to unmount \" + 'was rendered by React and is not a top-level container. %s', isContainerReactRoot ? 'You may have accidentally passed in a React root node instead ' + 'of its container.' : 'Instead, have the parent component update its state and ' + 'rerender in order to remove this component.');\n }\n }\n\n return false;\n }\n}\n\nfunction createPortal(children, containerInfo, // TODO: figure out the API for cross-renderer implementation.\nimplementation) {\n var key = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n return {\n // This tag allow us to uniquely identify this as a React Portal\n $$typeof: REACT_PORTAL_TYPE,\n key: key == null ? null : '' + key,\n children: children,\n containerInfo: containerInfo,\n implementation: implementation\n };\n}\n\nvar ReactVersion = '16.13.1';\n\nsetAttemptUserBlockingHydration(attemptUserBlockingHydration$1);\nsetAttemptContinuousHydration(attemptContinuousHydration$1);\nsetAttemptHydrationAtCurrentPriority(attemptHydrationAtCurrentPriority$1);\nvar didWarnAboutUnstableCreatePortal = false;\n\n{\n if (typeof Map !== 'function' || // $FlowIssue Flow incorrectly thinks Map has no prototype\n Map.prototype == null || typeof Map.prototype.forEach !== 'function' || typeof Set !== 'function' || // $FlowIssue Flow incorrectly thinks Set has no prototype\n Set.prototype == null || typeof Set.prototype.clear !== 'function' || typeof Set.prototype.forEach !== 'function') {\n error('React depends on Map and Set built-in types. Make sure that you load a ' + 'polyfill in older browsers. https://fb.me/react-polyfills');\n }\n}\n\nsetRestoreImplementation(restoreControlledState$3);\nsetBatchingImplementation(batchedUpdates$1, discreteUpdates$1, flushDiscreteUpdates, batchedEventUpdates$1);\n\nfunction createPortal$1(children, container) {\n var key = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n if (!isValidContainer(container)) {\n {\n throw Error( \"Target container is not a DOM element.\" );\n }\n } // TODO: pass ReactDOM portal implementation as third argument\n // $FlowFixMe The Flow type is opaque but there's no way to actually create it.\n\n\n return createPortal(children, container, null, key);\n}\n\nfunction renderSubtreeIntoContainer(parentComponent, element, containerNode, callback) {\n\n return unstable_renderSubtreeIntoContainer(parentComponent, element, containerNode, callback);\n}\n\nfunction unstable_createPortal(children, container) {\n var key = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;\n\n {\n if (!didWarnAboutUnstableCreatePortal) {\n didWarnAboutUnstableCreatePortal = true;\n\n warn('The ReactDOM.unstable_createPortal() alias has been deprecated, ' + 'and will be removed in React 17+. Update your code to use ' + 'ReactDOM.createPortal() instead. It has the exact same API, ' + 'but without the \"unstable_\" prefix.');\n }\n }\n\n return createPortal$1(children, container, key);\n}\n\nvar Internals = {\n // Keep in sync with ReactDOMUnstableNativeDependencies.js\n // ReactTestUtils.js, and ReactTestUtilsAct.js. This is an array for better minification.\n Events: [getInstanceFromNode$1, getNodeFromInstance$1, getFiberCurrentPropsFromNode$1, injectEventPluginsByName, eventNameDispatchConfigs, accumulateTwoPhaseDispatches, accumulateDirectDispatches, enqueueStateRestore, restoreStateIfNeeded, dispatchEvent, runEventsInBatch, flushPassiveEffects, IsThisRendererActing]\n};\nvar foundDevTools = injectIntoDevTools({\n findFiberByHostInstance: getClosestInstanceFromNode,\n bundleType: 1 ,\n version: ReactVersion,\n rendererPackageName: 'react-dom'\n});\n\n{\n if (!foundDevTools && canUseDOM && window.top === window.self) {\n // If we're in Chrome or Firefox, provide a download link if not installed.\n if (navigator.userAgent.indexOf('Chrome') > -1 && navigator.userAgent.indexOf('Edge') === -1 || navigator.userAgent.indexOf('Firefox') > -1) {\n var protocol = window.location.protocol; // Don't warn in exotic cases like chrome-extension://.\n\n if (/^(https?|file):$/.test(protocol)) {\n // eslint-disable-next-line react-internal/no-production-logging\n console.info('%cDownload the React DevTools ' + 'for a better development experience: ' + 'https://fb.me/react-devtools' + (protocol === 'file:' ? '\\nYou might need to use a local HTTP server (instead of file://): ' + 'https://fb.me/react-devtools-faq' : ''), 'font-weight:bold');\n }\n }\n }\n}\n\nexports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = Internals;\nexports.createPortal = createPortal$1;\nexports.findDOMNode = findDOMNode;\nexports.flushSync = flushSync;\nexports.hydrate = hydrate;\nexports.render = render;\nexports.unmountComponentAtNode = unmountComponentAtNode;\nexports.unstable_batchedUpdates = batchedUpdates$1;\nexports.unstable_createPortal = unstable_createPortal;\nexports.unstable_renderSubtreeIntoContainer = renderSubtreeIntoContainer;\nexports.version = ReactVersion;\n })();\n}\n\n}).call(this,require('_process'))\n},{\"_process\":67,\"object-assign\":66,\"prop-types/checkPropTypes\":69,\"react\":76,\"scheduler\":83,\"scheduler/tracing\":84}],72:[function(require,module,exports){\n/** @license React v16.13.1\n * react-dom.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n'use strict';var aa=require(\"react\"),n=require(\"object-assign\"),r=require(\"scheduler\");function u(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;c<arguments.length;c++)b+=\"&args[]=\"+encodeURIComponent(arguments[c]);return\"Minified React error #\"+a+\"; visit \"+b+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}if(!aa)throw Error(u(227));\nfunction ba(a,b,c,d,e,f,g,h,k){var l=Array.prototype.slice.call(arguments,3);try{b.apply(c,l)}catch(m){this.onError(m)}}var da=!1,ea=null,fa=!1,ha=null,ia={onError:function(a){da=!0;ea=a}};function ja(a,b,c,d,e,f,g,h,k){da=!1;ea=null;ba.apply(ia,arguments)}function ka(a,b,c,d,e,f,g,h,k){ja.apply(this,arguments);if(da){if(da){var l=ea;da=!1;ea=null}else throw Error(u(198));fa||(fa=!0,ha=l)}}var la=null,ma=null,na=null;\nfunction oa(a,b,c){var d=a.type||\"unknown-event\";a.currentTarget=na(c);ka(d,b,void 0,a);a.currentTarget=null}var pa=null,qa={};\nfunction ra(){if(pa)for(var a in qa){var b=qa[a],c=pa.indexOf(a);if(!(-1<c))throw Error(u(96,a));if(!sa[c]){if(!b.extractEvents)throw Error(u(97,a));sa[c]=b;c=b.eventTypes;for(var d in c){var e=void 0;var f=c[d],g=b,h=d;if(ta.hasOwnProperty(h))throw Error(u(99,h));ta[h]=f;var k=f.phasedRegistrationNames;if(k){for(e in k)k.hasOwnProperty(e)&&ua(k[e],g,h);e=!0}else f.registrationName?(ua(f.registrationName,g,h),e=!0):e=!1;if(!e)throw Error(u(98,d,a));}}}}\nfunction ua(a,b,c){if(va[a])throw Error(u(100,a));va[a]=b;wa[a]=b.eventTypes[c].dependencies}var sa=[],ta={},va={},wa={};function xa(a){var b=!1,c;for(c in a)if(a.hasOwnProperty(c)){var d=a[c];if(!qa.hasOwnProperty(c)||qa[c]!==d){if(qa[c])throw Error(u(102,c));qa[c]=d;b=!0}}b&&ra()}var ya=!(\"undefined\"===typeof window||\"undefined\"===typeof window.document||\"undefined\"===typeof window.document.createElement),za=null,Aa=null,Ba=null;\nfunction Ca(a){if(a=ma(a)){if(\"function\"!==typeof za)throw Error(u(280));var b=a.stateNode;b&&(b=la(b),za(a.stateNode,a.type,b))}}function Da(a){Aa?Ba?Ba.push(a):Ba=[a]:Aa=a}function Ea(){if(Aa){var a=Aa,b=Ba;Ba=Aa=null;Ca(a);if(b)for(a=0;a<b.length;a++)Ca(b[a])}}function Fa(a,b){return a(b)}function Ga(a,b,c,d,e){return a(b,c,d,e)}function Ha(){}var Ia=Fa,Ja=!1,Ka=!1;function La(){if(null!==Aa||null!==Ba)Ha(),Ea()}\nfunction Ma(a,b,c){if(Ka)return a(b,c);Ka=!0;try{return Ia(a,b,c)}finally{Ka=!1,La()}}var Na=/^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$/,Oa=Object.prototype.hasOwnProperty,Pa={},Qa={};\nfunction Ra(a){if(Oa.call(Qa,a))return!0;if(Oa.call(Pa,a))return!1;if(Na.test(a))return Qa[a]=!0;Pa[a]=!0;return!1}function Sa(a,b,c,d){if(null!==c&&0===c.type)return!1;switch(typeof b){case \"function\":case \"symbol\":return!0;case \"boolean\":if(d)return!1;if(null!==c)return!c.acceptsBooleans;a=a.toLowerCase().slice(0,5);return\"data-\"!==a&&\"aria-\"!==a;default:return!1}}\nfunction Ta(a,b,c,d){if(null===b||\"undefined\"===typeof b||Sa(a,b,c,d))return!0;if(d)return!1;if(null!==c)switch(c.type){case 3:return!b;case 4:return!1===b;case 5:return isNaN(b);case 6:return isNaN(b)||1>b}return!1}function v(a,b,c,d,e,f){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f}var C={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){C[a]=new v(a,0,!1,a,null,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];C[b]=new v(b,1,!1,a[1],null,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){C[a]=new v(a,2,!1,a.toLowerCase(),null,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){C[a]=new v(a,2,!1,a,null,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){C[a]=new v(a,3,!1,a.toLowerCase(),null,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){C[a]=new v(a,3,!0,a,null,!1)});[\"capture\",\"download\"].forEach(function(a){C[a]=new v(a,4,!1,a,null,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){C[a]=new v(a,6,!1,a,null,!1)});[\"rowSpan\",\"start\"].forEach(function(a){C[a]=new v(a,5,!1,a.toLowerCase(),null,!1)});var Ua=/[\\-:]([a-z])/g;function Va(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(Ua,\nVa);C[b]=new v(b,1,!1,a,null,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(Ua,Va);C[b]=new v(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(Ua,Va);C[b]=new v(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){C[a]=new v(a,1,!1,a.toLowerCase(),null,!1)});\nC.xlinkHref=new v(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){C[a]=new v(a,1,!1,a.toLowerCase(),null,!0)});var Wa=aa.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;Wa.hasOwnProperty(\"ReactCurrentDispatcher\")||(Wa.ReactCurrentDispatcher={current:null});Wa.hasOwnProperty(\"ReactCurrentBatchConfig\")||(Wa.ReactCurrentBatchConfig={suspense:null});\nfunction Xa(a,b,c,d){var e=C.hasOwnProperty(b)?C[b]:null;var f=null!==e?0===e.type:d?!1:!(2<b.length)||\"o\"!==b[0]&&\"O\"!==b[0]||\"n\"!==b[1]&&\"N\"!==b[1]?!1:!0;f||(Ta(b,c,e,d)&&(c=null),d||null===e?Ra(b)&&(null===c?a.removeAttribute(b):a.setAttribute(b,\"\"+c)):e.mustUseProperty?a[e.propertyName]=null===c?3===e.type?!1:\"\":c:(b=e.attributeName,d=e.attributeNamespace,null===c?a.removeAttribute(b):(e=e.type,c=3===e||4===e&&!0===c?\"\":\"\"+c,d?a.setAttributeNS(d,b,c):a.setAttribute(b,c))))}\nvar Ya=/^(.*)[\\\\\\/]/,E=\"function\"===typeof Symbol&&Symbol.for,Za=E?Symbol.for(\"react.element\"):60103,$a=E?Symbol.for(\"react.portal\"):60106,ab=E?Symbol.for(\"react.fragment\"):60107,bb=E?Symbol.for(\"react.strict_mode\"):60108,cb=E?Symbol.for(\"react.profiler\"):60114,db=E?Symbol.for(\"react.provider\"):60109,eb=E?Symbol.for(\"react.context\"):60110,fb=E?Symbol.for(\"react.concurrent_mode\"):60111,gb=E?Symbol.for(\"react.forward_ref\"):60112,hb=E?Symbol.for(\"react.suspense\"):60113,ib=E?Symbol.for(\"react.suspense_list\"):\n60120,jb=E?Symbol.for(\"react.memo\"):60115,kb=E?Symbol.for(\"react.lazy\"):60116,lb=E?Symbol.for(\"react.block\"):60121,mb=\"function\"===typeof Symbol&&Symbol.iterator;function nb(a){if(null===a||\"object\"!==typeof a)return null;a=mb&&a[mb]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}function ob(a){if(-1===a._status){a._status=0;var b=a._ctor;b=b();a._result=b;b.then(function(b){0===a._status&&(b=b.default,a._status=1,a._result=b)},function(b){0===a._status&&(a._status=2,a._result=b)})}}\nfunction pb(a){if(null==a)return null;if(\"function\"===typeof a)return a.displayName||a.name||null;if(\"string\"===typeof a)return a;switch(a){case ab:return\"Fragment\";case $a:return\"Portal\";case cb:return\"Profiler\";case bb:return\"StrictMode\";case hb:return\"Suspense\";case ib:return\"SuspenseList\"}if(\"object\"===typeof a)switch(a.$$typeof){case eb:return\"Context.Consumer\";case db:return\"Context.Provider\";case gb:var b=a.render;b=b.displayName||b.name||\"\";return a.displayName||(\"\"!==b?\"ForwardRef(\"+b+\")\":\n\"ForwardRef\");case jb:return pb(a.type);case lb:return pb(a.render);case kb:if(a=1===a._status?a._result:null)return pb(a)}return null}function qb(a){var b=\"\";do{a:switch(a.tag){case 3:case 4:case 6:case 7:case 10:case 9:var c=\"\";break a;default:var d=a._debugOwner,e=a._debugSource,f=pb(a.type);c=null;d&&(c=pb(d.type));d=f;f=\"\";e?f=\" (at \"+e.fileName.replace(Ya,\"\")+\":\"+e.lineNumber+\")\":c&&(f=\" (created by \"+c+\")\");c=\"\\n in \"+(d||\"Unknown\")+f}b+=c;a=a.return}while(a);return b}\nfunction rb(a){switch(typeof a){case \"boolean\":case \"number\":case \"object\":case \"string\":case \"undefined\":return a;default:return\"\"}}function sb(a){var b=a.type;return(a=a.nodeName)&&\"input\"===a.toLowerCase()&&(\"checkbox\"===b||\"radio\"===b)}\nfunction tb(a){var b=sb(a)?\"checked\":\"value\",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=\"\"+a[b];if(!a.hasOwnProperty(b)&&\"undefined\"!==typeof c&&\"function\"===typeof c.get&&\"function\"===typeof c.set){var e=c.get,f=c.set;Object.defineProperty(a,b,{configurable:!0,get:function(){return e.call(this)},set:function(a){d=\"\"+a;f.call(this,a)}});Object.defineProperty(a,b,{enumerable:c.enumerable});return{getValue:function(){return d},setValue:function(a){d=\"\"+a},stopTracking:function(){a._valueTracker=\nnull;delete a[b]}}}}function xb(a){a._valueTracker||(a._valueTracker=tb(a))}function yb(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c=b.getValue();var d=\"\";a&&(d=sb(a)?a.checked?\"true\":\"false\":a.value);a=d;return a!==c?(b.setValue(a),!0):!1}function zb(a,b){var c=b.checked;return n({},b,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=c?c:a._wrapperState.initialChecked})}\nfunction Ab(a,b){var c=null==b.defaultValue?\"\":b.defaultValue,d=null!=b.checked?b.checked:b.defaultChecked;c=rb(null!=b.value?b.value:c);a._wrapperState={initialChecked:d,initialValue:c,controlled:\"checkbox\"===b.type||\"radio\"===b.type?null!=b.checked:null!=b.value}}function Bb(a,b){b=b.checked;null!=b&&Xa(a,\"checked\",b,!1)}\nfunction Cb(a,b){Bb(a,b);var c=rb(b.value),d=b.type;if(null!=c)if(\"number\"===d){if(0===c&&\"\"===a.value||a.value!=c)a.value=\"\"+c}else a.value!==\"\"+c&&(a.value=\"\"+c);else if(\"submit\"===d||\"reset\"===d){a.removeAttribute(\"value\");return}b.hasOwnProperty(\"value\")?Db(a,b.type,c):b.hasOwnProperty(\"defaultValue\")&&Db(a,b.type,rb(b.defaultValue));null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}\nfunction Eb(a,b,c){if(b.hasOwnProperty(\"value\")||b.hasOwnProperty(\"defaultValue\")){var d=b.type;if(!(\"submit\"!==d&&\"reset\"!==d||void 0!==b.value&&null!==b.value))return;b=\"\"+a._wrapperState.initialValue;c||b===a.value||(a.value=b);a.defaultValue=b}c=a.name;\"\"!==c&&(a.name=\"\");a.defaultChecked=!!a._wrapperState.initialChecked;\"\"!==c&&(a.name=c)}\nfunction Db(a,b,c){if(\"number\"!==b||a.ownerDocument.activeElement!==a)null==c?a.defaultValue=\"\"+a._wrapperState.initialValue:a.defaultValue!==\"\"+c&&(a.defaultValue=\"\"+c)}function Fb(a){var b=\"\";aa.Children.forEach(a,function(a){null!=a&&(b+=a)});return b}function Gb(a,b){a=n({children:void 0},b);if(b=Fb(b.children))a.children=b;return a}\nfunction Hb(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e<c.length;e++)b[\"$\"+c[e]]=!0;for(c=0;c<a.length;c++)e=b.hasOwnProperty(\"$\"+a[c].value),a[c].selected!==e&&(a[c].selected=e),e&&d&&(a[c].defaultSelected=!0)}else{c=\"\"+rb(c);b=null;for(e=0;e<a.length;e++){if(a[e].value===c){a[e].selected=!0;d&&(a[e].defaultSelected=!0);return}null!==b||a[e].disabled||(b=a[e])}null!==b&&(b.selected=!0)}}\nfunction Ib(a,b){if(null!=b.dangerouslySetInnerHTML)throw Error(u(91));return n({},b,{value:void 0,defaultValue:void 0,children:\"\"+a._wrapperState.initialValue})}function Jb(a,b){var c=b.value;if(null==c){c=b.children;b=b.defaultValue;if(null!=c){if(null!=b)throw Error(u(92));if(Array.isArray(c)){if(!(1>=c.length))throw Error(u(93));c=c[0]}b=c}null==b&&(b=\"\");c=b}a._wrapperState={initialValue:rb(c)}}\nfunction Kb(a,b){var c=rb(b.value),d=rb(b.defaultValue);null!=c&&(c=\"\"+c,c!==a.value&&(a.value=c),null==b.defaultValue&&a.defaultValue!==c&&(a.defaultValue=c));null!=d&&(a.defaultValue=\"\"+d)}function Lb(a){var b=a.textContent;b===a._wrapperState.initialValue&&\"\"!==b&&null!==b&&(a.value=b)}var Mb={html:\"http://www.w3.org/1999/xhtml\",mathml:\"http://www.w3.org/1998/Math/MathML\",svg:\"http://www.w3.org/2000/svg\"};\nfunction Nb(a){switch(a){case \"svg\":return\"http://www.w3.org/2000/svg\";case \"math\":return\"http://www.w3.org/1998/Math/MathML\";default:return\"http://www.w3.org/1999/xhtml\"}}function Ob(a,b){return null==a||\"http://www.w3.org/1999/xhtml\"===a?Nb(b):\"http://www.w3.org/2000/svg\"===a&&\"foreignObject\"===b?\"http://www.w3.org/1999/xhtml\":a}\nvar Pb,Qb=function(a){return\"undefined\"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(b,c,d,e){MSApp.execUnsafeLocalFunction(function(){return a(b,c,d,e)})}:a}(function(a,b){if(a.namespaceURI!==Mb.svg||\"innerHTML\"in a)a.innerHTML=b;else{Pb=Pb||document.createElement(\"div\");Pb.innerHTML=\"<svg>\"+b.valueOf().toString()+\"</svg>\";for(b=Pb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction Rb(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}function Sb(a,b){var c={};c[a.toLowerCase()]=b.toLowerCase();c[\"Webkit\"+a]=\"webkit\"+b;c[\"Moz\"+a]=\"moz\"+b;return c}var Tb={animationend:Sb(\"Animation\",\"AnimationEnd\"),animationiteration:Sb(\"Animation\",\"AnimationIteration\"),animationstart:Sb(\"Animation\",\"AnimationStart\"),transitionend:Sb(\"Transition\",\"TransitionEnd\")},Ub={},Vb={};\nya&&(Vb=document.createElement(\"div\").style,\"AnimationEvent\"in window||(delete Tb.animationend.animation,delete Tb.animationiteration.animation,delete Tb.animationstart.animation),\"TransitionEvent\"in window||delete Tb.transitionend.transition);function Wb(a){if(Ub[a])return Ub[a];if(!Tb[a])return a;var b=Tb[a],c;for(c in b)if(b.hasOwnProperty(c)&&c in Vb)return Ub[a]=b[c];return a}\nvar Xb=Wb(\"animationend\"),Yb=Wb(\"animationiteration\"),Zb=Wb(\"animationstart\"),$b=Wb(\"transitionend\"),ac=\"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting\".split(\" \"),bc=new (\"function\"===typeof WeakMap?WeakMap:Map);function cc(a){var b=bc.get(a);void 0===b&&(b=new Map,bc.set(a,b));return b}\nfunction dc(a){var b=a,c=a;if(a.alternate)for(;b.return;)b=b.return;else{a=b;do b=a,0!==(b.effectTag&1026)&&(c=b.return),a=b.return;while(a)}return 3===b.tag?c:null}function ec(a){if(13===a.tag){var b=a.memoizedState;null===b&&(a=a.alternate,null!==a&&(b=a.memoizedState));if(null!==b)return b.dehydrated}return null}function fc(a){if(dc(a)!==a)throw Error(u(188));}\nfunction gc(a){var b=a.alternate;if(!b){b=dc(a);if(null===b)throw Error(u(188));return b!==a?null:a}for(var c=a,d=b;;){var e=c.return;if(null===e)break;var f=e.alternate;if(null===f){d=e.return;if(null!==d){c=d;continue}break}if(e.child===f.child){for(f=e.child;f;){if(f===c)return fc(e),a;if(f===d)return fc(e),b;f=f.sibling}throw Error(u(188));}if(c.return!==d.return)c=e,d=f;else{for(var g=!1,h=e.child;h;){if(h===c){g=!0;c=e;d=f;break}if(h===d){g=!0;d=e;c=f;break}h=h.sibling}if(!g){for(h=f.child;h;){if(h===\nc){g=!0;c=f;d=e;break}if(h===d){g=!0;d=f;c=e;break}h=h.sibling}if(!g)throw Error(u(189));}}if(c.alternate!==d)throw Error(u(190));}if(3!==c.tag)throw Error(u(188));return c.stateNode.current===c?a:b}function hc(a){a=gc(a);if(!a)return null;for(var b=a;;){if(5===b.tag||6===b.tag)return b;if(b.child)b.child.return=b,b=b.child;else{if(b===a)break;for(;!b.sibling;){if(!b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}}return null}\nfunction ic(a,b){if(null==b)throw Error(u(30));if(null==a)return b;if(Array.isArray(a)){if(Array.isArray(b))return a.push.apply(a,b),a;a.push(b);return a}return Array.isArray(b)?[a].concat(b):[a,b]}function jc(a,b,c){Array.isArray(a)?a.forEach(b,c):a&&b.call(c,a)}var kc=null;\nfunction lc(a){if(a){var b=a._dispatchListeners,c=a._dispatchInstances;if(Array.isArray(b))for(var d=0;d<b.length&&!a.isPropagationStopped();d++)oa(a,b[d],c[d]);else b&&oa(a,b,c);a._dispatchListeners=null;a._dispatchInstances=null;a.isPersistent()||a.constructor.release(a)}}function mc(a){null!==a&&(kc=ic(kc,a));a=kc;kc=null;if(a){jc(a,lc);if(kc)throw Error(u(95));if(fa)throw a=ha,fa=!1,ha=null,a;}}\nfunction nc(a){a=a.target||a.srcElement||window;a.correspondingUseElement&&(a=a.correspondingUseElement);return 3===a.nodeType?a.parentNode:a}function oc(a){if(!ya)return!1;a=\"on\"+a;var b=a in document;b||(b=document.createElement(\"div\"),b.setAttribute(a,\"return;\"),b=\"function\"===typeof b[a]);return b}var pc=[];function qc(a){a.topLevelType=null;a.nativeEvent=null;a.targetInst=null;a.ancestors.length=0;10>pc.length&&pc.push(a)}\nfunction rc(a,b,c,d){if(pc.length){var e=pc.pop();e.topLevelType=a;e.eventSystemFlags=d;e.nativeEvent=b;e.targetInst=c;return e}return{topLevelType:a,eventSystemFlags:d,nativeEvent:b,targetInst:c,ancestors:[]}}\nfunction sc(a){var b=a.targetInst,c=b;do{if(!c){a.ancestors.push(c);break}var d=c;if(3===d.tag)d=d.stateNode.containerInfo;else{for(;d.return;)d=d.return;d=3!==d.tag?null:d.stateNode.containerInfo}if(!d)break;b=c.tag;5!==b&&6!==b||a.ancestors.push(c);c=tc(d)}while(c);for(c=0;c<a.ancestors.length;c++){b=a.ancestors[c];var e=nc(a.nativeEvent);d=a.topLevelType;var f=a.nativeEvent,g=a.eventSystemFlags;0===c&&(g|=64);for(var h=null,k=0;k<sa.length;k++){var l=sa[k];l&&(l=l.extractEvents(d,b,f,e,g))&&(h=\nic(h,l))}mc(h)}}function uc(a,b,c){if(!c.has(a)){switch(a){case \"scroll\":vc(b,\"scroll\",!0);break;case \"focus\":case \"blur\":vc(b,\"focus\",!0);vc(b,\"blur\",!0);c.set(\"blur\",null);c.set(\"focus\",null);break;case \"cancel\":case \"close\":oc(a)&&vc(b,a,!0);break;case \"invalid\":case \"submit\":case \"reset\":break;default:-1===ac.indexOf(a)&&F(a,b)}c.set(a,null)}}\nvar wc,xc,yc,zc=!1,Ac=[],Bc=null,Cc=null,Dc=null,Ec=new Map,Fc=new Map,Gc=[],Hc=\"mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput close cancel copy cut paste click change contextmenu reset submit\".split(\" \"),Ic=\"focus blur dragenter dragleave mouseover mouseout pointerover pointerout gotpointercapture lostpointercapture\".split(\" \");\nfunction Jc(a,b){var c=cc(b);Hc.forEach(function(a){uc(a,b,c)});Ic.forEach(function(a){uc(a,b,c)})}function Kc(a,b,c,d,e){return{blockedOn:a,topLevelType:b,eventSystemFlags:c|32,nativeEvent:e,container:d}}\nfunction Lc(a,b){switch(a){case \"focus\":case \"blur\":Bc=null;break;case \"dragenter\":case \"dragleave\":Cc=null;break;case \"mouseover\":case \"mouseout\":Dc=null;break;case \"pointerover\":case \"pointerout\":Ec.delete(b.pointerId);break;case \"gotpointercapture\":case \"lostpointercapture\":Fc.delete(b.pointerId)}}function Mc(a,b,c,d,e,f){if(null===a||a.nativeEvent!==f)return a=Kc(b,c,d,e,f),null!==b&&(b=Nc(b),null!==b&&xc(b)),a;a.eventSystemFlags|=d;return a}\nfunction Oc(a,b,c,d,e){switch(b){case \"focus\":return Bc=Mc(Bc,a,b,c,d,e),!0;case \"dragenter\":return Cc=Mc(Cc,a,b,c,d,e),!0;case \"mouseover\":return Dc=Mc(Dc,a,b,c,d,e),!0;case \"pointerover\":var f=e.pointerId;Ec.set(f,Mc(Ec.get(f)||null,a,b,c,d,e));return!0;case \"gotpointercapture\":return f=e.pointerId,Fc.set(f,Mc(Fc.get(f)||null,a,b,c,d,e)),!0}return!1}\nfunction Pc(a){var b=tc(a.target);if(null!==b){var c=dc(b);if(null!==c)if(b=c.tag,13===b){if(b=ec(c),null!==b){a.blockedOn=b;r.unstable_runWithPriority(a.priority,function(){yc(c)});return}}else if(3===b&&c.stateNode.hydrate){a.blockedOn=3===c.tag?c.stateNode.containerInfo:null;return}}a.blockedOn=null}function Qc(a){if(null!==a.blockedOn)return!1;var b=Rc(a.topLevelType,a.eventSystemFlags,a.container,a.nativeEvent);if(null!==b){var c=Nc(b);null!==c&&xc(c);a.blockedOn=b;return!1}return!0}\nfunction Sc(a,b,c){Qc(a)&&c.delete(b)}function Tc(){for(zc=!1;0<Ac.length;){var a=Ac[0];if(null!==a.blockedOn){a=Nc(a.blockedOn);null!==a&&wc(a);break}var b=Rc(a.topLevelType,a.eventSystemFlags,a.container,a.nativeEvent);null!==b?a.blockedOn=b:Ac.shift()}null!==Bc&&Qc(Bc)&&(Bc=null);null!==Cc&&Qc(Cc)&&(Cc=null);null!==Dc&&Qc(Dc)&&(Dc=null);Ec.forEach(Sc);Fc.forEach(Sc)}function Uc(a,b){a.blockedOn===b&&(a.blockedOn=null,zc||(zc=!0,r.unstable_scheduleCallback(r.unstable_NormalPriority,Tc)))}\nfunction Vc(a){function b(b){return Uc(b,a)}if(0<Ac.length){Uc(Ac[0],a);for(var c=1;c<Ac.length;c++){var d=Ac[c];d.blockedOn===a&&(d.blockedOn=null)}}null!==Bc&&Uc(Bc,a);null!==Cc&&Uc(Cc,a);null!==Dc&&Uc(Dc,a);Ec.forEach(b);Fc.forEach(b);for(c=0;c<Gc.length;c++)d=Gc[c],d.blockedOn===a&&(d.blockedOn=null);for(;0<Gc.length&&(c=Gc[0],null===c.blockedOn);)Pc(c),null===c.blockedOn&&Gc.shift()}\nvar Wc={},Yc=new Map,Zc=new Map,$c=[\"abort\",\"abort\",Xb,\"animationEnd\",Yb,\"animationIteration\",Zb,\"animationStart\",\"canplay\",\"canPlay\",\"canplaythrough\",\"canPlayThrough\",\"durationchange\",\"durationChange\",\"emptied\",\"emptied\",\"encrypted\",\"encrypted\",\"ended\",\"ended\",\"error\",\"error\",\"gotpointercapture\",\"gotPointerCapture\",\"load\",\"load\",\"loadeddata\",\"loadedData\",\"loadedmetadata\",\"loadedMetadata\",\"loadstart\",\"loadStart\",\"lostpointercapture\",\"lostPointerCapture\",\"playing\",\"playing\",\"progress\",\"progress\",\"seeking\",\n\"seeking\",\"stalled\",\"stalled\",\"suspend\",\"suspend\",\"timeupdate\",\"timeUpdate\",$b,\"transitionEnd\",\"waiting\",\"waiting\"];function ad(a,b){for(var c=0;c<a.length;c+=2){var d=a[c],e=a[c+1],f=\"on\"+(e[0].toUpperCase()+e.slice(1));f={phasedRegistrationNames:{bubbled:f,captured:f+\"Capture\"},dependencies:[d],eventPriority:b};Zc.set(d,b);Yc.set(d,f);Wc[e]=f}}\nad(\"blur blur cancel cancel click click close close contextmenu contextMenu copy copy cut cut auxclick auxClick dblclick doubleClick dragend dragEnd dragstart dragStart drop drop focus focus input input invalid invalid keydown keyDown keypress keyPress keyup keyUp mousedown mouseDown mouseup mouseUp paste paste pause pause play play pointercancel pointerCancel pointerdown pointerDown pointerup pointerUp ratechange rateChange reset reset seeked seeked submit submit touchcancel touchCancel touchend touchEnd touchstart touchStart volumechange volumeChange\".split(\" \"),0);\nad(\"drag drag dragenter dragEnter dragexit dragExit dragleave dragLeave dragover dragOver mousemove mouseMove mouseout mouseOut mouseover mouseOver pointermove pointerMove pointerout pointerOut pointerover pointerOver scroll scroll toggle toggle touchmove touchMove wheel wheel\".split(\" \"),1);ad($c,2);for(var bd=\"change selectionchange textInput compositionstart compositionend compositionupdate\".split(\" \"),cd=0;cd<bd.length;cd++)Zc.set(bd[cd],0);\nvar dd=r.unstable_UserBlockingPriority,ed=r.unstable_runWithPriority,fd=!0;function F(a,b){vc(b,a,!1)}function vc(a,b,c){var d=Zc.get(b);switch(void 0===d?2:d){case 0:d=gd.bind(null,b,1,a);break;case 1:d=hd.bind(null,b,1,a);break;default:d=id.bind(null,b,1,a)}c?a.addEventListener(b,d,!0):a.addEventListener(b,d,!1)}function gd(a,b,c,d){Ja||Ha();var e=id,f=Ja;Ja=!0;try{Ga(e,a,b,c,d)}finally{(Ja=f)||La()}}function hd(a,b,c,d){ed(dd,id.bind(null,a,b,c,d))}\nfunction id(a,b,c,d){if(fd)if(0<Ac.length&&-1<Hc.indexOf(a))a=Kc(null,a,b,c,d),Ac.push(a);else{var e=Rc(a,b,c,d);if(null===e)Lc(a,d);else if(-1<Hc.indexOf(a))a=Kc(e,a,b,c,d),Ac.push(a);else if(!Oc(e,a,b,c,d)){Lc(a,d);a=rc(a,d,null,b);try{Ma(sc,a)}finally{qc(a)}}}}\nfunction Rc(a,b,c,d){c=nc(d);c=tc(c);if(null!==c){var e=dc(c);if(null===e)c=null;else{var f=e.tag;if(13===f){c=ec(e);if(null!==c)return c;c=null}else if(3===f){if(e.stateNode.hydrate)return 3===e.tag?e.stateNode.containerInfo:null;c=null}else e!==c&&(c=null)}}a=rc(a,d,c,b);try{Ma(sc,a)}finally{qc(a)}return null}\nvar jd={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,\nfloodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},kd=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(jd).forEach(function(a){kd.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);jd[b]=jd[a]})});function ld(a,b,c){return null==b||\"boolean\"===typeof b||\"\"===b?\"\":c||\"number\"!==typeof b||0===b||jd.hasOwnProperty(a)&&jd[a]?(\"\"+b).trim():b+\"px\"}\nfunction md(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\"),e=ld(c,b[c],d);\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var nd=n({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction od(a,b){if(b){if(nd[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML))throw Error(u(137,a,\"\"));if(null!=b.dangerouslySetInnerHTML){if(null!=b.children)throw Error(u(60));if(!(\"object\"===typeof b.dangerouslySetInnerHTML&&\"__html\"in b.dangerouslySetInnerHTML))throw Error(u(61));}if(null!=b.style&&\"object\"!==typeof b.style)throw Error(u(62,\"\"));}}\nfunction pd(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}var qd=Mb.html;function rd(a,b){a=9===a.nodeType||11===a.nodeType?a:a.ownerDocument;var c=cc(a);b=wa[b];for(var d=0;d<b.length;d++)uc(b[d],a,c)}function sd(){}\nfunction td(a){a=a||(\"undefined\"!==typeof document?document:void 0);if(\"undefined\"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}}function ud(a){for(;a&&a.firstChild;)a=a.firstChild;return a}function vd(a,b){var c=ud(a);a=0;for(var d;c;){if(3===c.nodeType){d=a+c.textContent.length;if(a<=b&&d>=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=ud(c)}}\nfunction wd(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?wd(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}function xd(){for(var a=window,b=td();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=td(a.document)}return b}\nfunction yd(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}var zd=\"$\",Ad=\"/$\",Bd=\"$?\",Cd=\"$!\",Dd=null,Ed=null;function Fd(a,b){switch(a){case \"button\":case \"input\":case \"select\":case \"textarea\":return!!b.autoFocus}return!1}\nfunction Gd(a,b){return\"textarea\"===a||\"option\"===a||\"noscript\"===a||\"string\"===typeof b.children||\"number\"===typeof b.children||\"object\"===typeof b.dangerouslySetInnerHTML&&null!==b.dangerouslySetInnerHTML&&null!=b.dangerouslySetInnerHTML.__html}var Hd=\"function\"===typeof setTimeout?setTimeout:void 0,Id=\"function\"===typeof clearTimeout?clearTimeout:void 0;function Jd(a){for(;null!=a;a=a.nextSibling){var b=a.nodeType;if(1===b||3===b)break}return a}\nfunction Kd(a){a=a.previousSibling;for(var b=0;a;){if(8===a.nodeType){var c=a.data;if(c===zd||c===Cd||c===Bd){if(0===b)return a;b--}else c===Ad&&b++}a=a.previousSibling}return null}var Ld=Math.random().toString(36).slice(2),Md=\"__reactInternalInstance$\"+Ld,Nd=\"__reactEventHandlers$\"+Ld,Od=\"__reactContainere$\"+Ld;\nfunction tc(a){var b=a[Md];if(b)return b;for(var c=a.parentNode;c;){if(b=c[Od]||c[Md]){c=b.alternate;if(null!==b.child||null!==c&&null!==c.child)for(a=Kd(a);null!==a;){if(c=a[Md])return c;a=Kd(a)}return b}a=c;c=a.parentNode}return null}function Nc(a){a=a[Md]||a[Od];return!a||5!==a.tag&&6!==a.tag&&13!==a.tag&&3!==a.tag?null:a}function Pd(a){if(5===a.tag||6===a.tag)return a.stateNode;throw Error(u(33));}function Qd(a){return a[Nd]||null}\nfunction Rd(a){do a=a.return;while(a&&5!==a.tag);return a?a:null}\nfunction Sd(a,b){var c=a.stateNode;if(!c)return null;var d=la(c);if(!d)return null;c=d[b];a:switch(b){case \"onClick\":case \"onClickCapture\":case \"onDoubleClick\":case \"onDoubleClickCapture\":case \"onMouseDown\":case \"onMouseDownCapture\":case \"onMouseMove\":case \"onMouseMoveCapture\":case \"onMouseUp\":case \"onMouseUpCapture\":case \"onMouseEnter\":(d=!d.disabled)||(a=a.type,d=!(\"button\"===a||\"input\"===a||\"select\"===a||\"textarea\"===a));a=!d;break a;default:a=!1}if(a)return null;if(c&&\"function\"!==typeof c)throw Error(u(231,\nb,typeof c));return c}function Td(a,b,c){if(b=Sd(a,c.dispatchConfig.phasedRegistrationNames[b]))c._dispatchListeners=ic(c._dispatchListeners,b),c._dispatchInstances=ic(c._dispatchInstances,a)}function Ud(a){if(a&&a.dispatchConfig.phasedRegistrationNames){for(var b=a._targetInst,c=[];b;)c.push(b),b=Rd(b);for(b=c.length;0<b--;)Td(c[b],\"captured\",a);for(b=0;b<c.length;b++)Td(c[b],\"bubbled\",a)}}\nfunction Vd(a,b,c){a&&c&&c.dispatchConfig.registrationName&&(b=Sd(a,c.dispatchConfig.registrationName))&&(c._dispatchListeners=ic(c._dispatchListeners,b),c._dispatchInstances=ic(c._dispatchInstances,a))}function Wd(a){a&&a.dispatchConfig.registrationName&&Vd(a._targetInst,null,a)}function Xd(a){jc(a,Ud)}var Yd=null,Zd=null,$d=null;\nfunction ae(){if($d)return $d;var a,b=Zd,c=b.length,d,e=\"value\"in Yd?Yd.value:Yd.textContent,f=e.length;for(a=0;a<c&&b[a]===e[a];a++);var g=c-a;for(d=1;d<=g&&b[c-d]===e[f-d];d++);return $d=e.slice(a,1<d?1-d:void 0)}function be(){return!0}function ce(){return!1}\nfunction G(a,b,c,d){this.dispatchConfig=a;this._targetInst=b;this.nativeEvent=c;a=this.constructor.Interface;for(var e in a)a.hasOwnProperty(e)&&((b=a[e])?this[e]=b(c):\"target\"===e?this.target=d:this[e]=c[e]);this.isDefaultPrevented=(null!=c.defaultPrevented?c.defaultPrevented:!1===c.returnValue)?be:ce;this.isPropagationStopped=ce;return this}\nn(G.prototype,{preventDefault:function(){this.defaultPrevented=!0;var a=this.nativeEvent;a&&(a.preventDefault?a.preventDefault():\"unknown\"!==typeof a.returnValue&&(a.returnValue=!1),this.isDefaultPrevented=be)},stopPropagation:function(){var a=this.nativeEvent;a&&(a.stopPropagation?a.stopPropagation():\"unknown\"!==typeof a.cancelBubble&&(a.cancelBubble=!0),this.isPropagationStopped=be)},persist:function(){this.isPersistent=be},isPersistent:ce,destructor:function(){var a=this.constructor.Interface,\nb;for(b in a)this[b]=null;this.nativeEvent=this._targetInst=this.dispatchConfig=null;this.isPropagationStopped=this.isDefaultPrevented=ce;this._dispatchInstances=this._dispatchListeners=null}});G.Interface={type:null,target:null,currentTarget:function(){return null},eventPhase:null,bubbles:null,cancelable:null,timeStamp:function(a){return a.timeStamp||Date.now()},defaultPrevented:null,isTrusted:null};\nG.extend=function(a){function b(){}function c(){return d.apply(this,arguments)}var d=this;b.prototype=d.prototype;var e=new b;n(e,c.prototype);c.prototype=e;c.prototype.constructor=c;c.Interface=n({},d.Interface,a);c.extend=d.extend;de(c);return c};de(G);function ee(a,b,c,d){if(this.eventPool.length){var e=this.eventPool.pop();this.call(e,a,b,c,d);return e}return new this(a,b,c,d)}\nfunction fe(a){if(!(a instanceof this))throw Error(u(279));a.destructor();10>this.eventPool.length&&this.eventPool.push(a)}function de(a){a.eventPool=[];a.getPooled=ee;a.release=fe}var ge=G.extend({data:null}),he=G.extend({data:null}),ie=[9,13,27,32],je=ya&&\"CompositionEvent\"in window,ke=null;ya&&\"documentMode\"in document&&(ke=document.documentMode);\nvar le=ya&&\"TextEvent\"in window&&!ke,me=ya&&(!je||ke&&8<ke&&11>=ke),ne=String.fromCharCode(32),oe={beforeInput:{phasedRegistrationNames:{bubbled:\"onBeforeInput\",captured:\"onBeforeInputCapture\"},dependencies:[\"compositionend\",\"keypress\",\"textInput\",\"paste\"]},compositionEnd:{phasedRegistrationNames:{bubbled:\"onCompositionEnd\",captured:\"onCompositionEndCapture\"},dependencies:\"blur compositionend keydown keypress keyup mousedown\".split(\" \")},compositionStart:{phasedRegistrationNames:{bubbled:\"onCompositionStart\",\ncaptured:\"onCompositionStartCapture\"},dependencies:\"blur compositionstart keydown keypress keyup mousedown\".split(\" \")},compositionUpdate:{phasedRegistrationNames:{bubbled:\"onCompositionUpdate\",captured:\"onCompositionUpdateCapture\"},dependencies:\"blur compositionupdate keydown keypress keyup mousedown\".split(\" \")}},pe=!1;\nfunction qe(a,b){switch(a){case \"keyup\":return-1!==ie.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"blur\":return!0;default:return!1}}function re(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var se=!1;function te(a,b){switch(a){case \"compositionend\":return re(b);case \"keypress\":if(32!==b.which)return null;pe=!0;return ne;case \"textInput\":return a=b.data,a===ne&&pe?null:a;default:return null}}\nfunction ue(a,b){if(se)return\"compositionend\"===a||!je&&qe(a,b)?(a=ae(),$d=Zd=Yd=null,se=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1<b.char.length)return b.char;if(b.which)return String.fromCharCode(b.which)}return null;case \"compositionend\":return me&&\"ko\"!==b.locale?null:b.data;default:return null}}\nvar ve={eventTypes:oe,extractEvents:function(a,b,c,d){var e;if(je)b:{switch(a){case \"compositionstart\":var f=oe.compositionStart;break b;case \"compositionend\":f=oe.compositionEnd;break b;case \"compositionupdate\":f=oe.compositionUpdate;break b}f=void 0}else se?qe(a,c)&&(f=oe.compositionEnd):\"keydown\"===a&&229===c.keyCode&&(f=oe.compositionStart);f?(me&&\"ko\"!==c.locale&&(se||f!==oe.compositionStart?f===oe.compositionEnd&&se&&(e=ae()):(Yd=d,Zd=\"value\"in Yd?Yd.value:Yd.textContent,se=!0)),f=ge.getPooled(f,\nb,c,d),e?f.data=e:(e=re(c),null!==e&&(f.data=e)),Xd(f),e=f):e=null;(a=le?te(a,c):ue(a,c))?(b=he.getPooled(oe.beforeInput,b,c,d),b.data=a,Xd(b)):b=null;return null===e?b:null===b?e:[e,b]}},we={color:!0,date:!0,datetime:!0,\"datetime-local\":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function xe(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return\"input\"===b?!!we[a.type]:\"textarea\"===b?!0:!1}\nvar ye={change:{phasedRegistrationNames:{bubbled:\"onChange\",captured:\"onChangeCapture\"},dependencies:\"blur change click focus input keydown keyup selectionchange\".split(\" \")}};function ze(a,b,c){a=G.getPooled(ye.change,a,b,c);a.type=\"change\";Da(c);Xd(a);return a}var Ae=null,Be=null;function Ce(a){mc(a)}function De(a){var b=Pd(a);if(yb(b))return a}function Ee(a,b){if(\"change\"===a)return b}var Fe=!1;ya&&(Fe=oc(\"input\")&&(!document.documentMode||9<document.documentMode));\nfunction Ge(){Ae&&(Ae.detachEvent(\"onpropertychange\",He),Be=Ae=null)}function He(a){if(\"value\"===a.propertyName&&De(Be))if(a=ze(Be,a,nc(a)),Ja)mc(a);else{Ja=!0;try{Fa(Ce,a)}finally{Ja=!1,La()}}}function Ie(a,b,c){\"focus\"===a?(Ge(),Ae=b,Be=c,Ae.attachEvent(\"onpropertychange\",He)):\"blur\"===a&&Ge()}function Je(a){if(\"selectionchange\"===a||\"keyup\"===a||\"keydown\"===a)return De(Be)}function Ke(a,b){if(\"click\"===a)return De(b)}function Le(a,b){if(\"input\"===a||\"change\"===a)return De(b)}\nvar Me={eventTypes:ye,_isInputEventSupported:Fe,extractEvents:function(a,b,c,d){var e=b?Pd(b):window,f=e.nodeName&&e.nodeName.toLowerCase();if(\"select\"===f||\"input\"===f&&\"file\"===e.type)var g=Ee;else if(xe(e))if(Fe)g=Le;else{g=Je;var h=Ie}else(f=e.nodeName)&&\"input\"===f.toLowerCase()&&(\"checkbox\"===e.type||\"radio\"===e.type)&&(g=Ke);if(g&&(g=g(a,b)))return ze(g,c,d);h&&h(a,e,b);\"blur\"===a&&(a=e._wrapperState)&&a.controlled&&\"number\"===e.type&&Db(e,\"number\",e.value)}},Ne=G.extend({view:null,detail:null}),\nOe={Alt:\"altKey\",Control:\"ctrlKey\",Meta:\"metaKey\",Shift:\"shiftKey\"};function Pe(a){var b=this.nativeEvent;return b.getModifierState?b.getModifierState(a):(a=Oe[a])?!!b[a]:!1}function Qe(){return Pe}\nvar Re=0,Se=0,Te=!1,Ue=!1,Ve=Ne.extend({screenX:null,screenY:null,clientX:null,clientY:null,pageX:null,pageY:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,getModifierState:Qe,button:null,buttons:null,relatedTarget:function(a){return a.relatedTarget||(a.fromElement===a.srcElement?a.toElement:a.fromElement)},movementX:function(a){if(\"movementX\"in a)return a.movementX;var b=Re;Re=a.screenX;return Te?\"mousemove\"===a.type?a.screenX-b:0:(Te=!0,0)},movementY:function(a){if(\"movementY\"in a)return a.movementY;\nvar b=Se;Se=a.screenY;return Ue?\"mousemove\"===a.type?a.screenY-b:0:(Ue=!0,0)}}),We=Ve.extend({pointerId:null,width:null,height:null,pressure:null,tangentialPressure:null,tiltX:null,tiltY:null,twist:null,pointerType:null,isPrimary:null}),Xe={mouseEnter:{registrationName:\"onMouseEnter\",dependencies:[\"mouseout\",\"mouseover\"]},mouseLeave:{registrationName:\"onMouseLeave\",dependencies:[\"mouseout\",\"mouseover\"]},pointerEnter:{registrationName:\"onPointerEnter\",dependencies:[\"pointerout\",\"pointerover\"]},pointerLeave:{registrationName:\"onPointerLeave\",\ndependencies:[\"pointerout\",\"pointerover\"]}},Ye={eventTypes:Xe,extractEvents:function(a,b,c,d,e){var f=\"mouseover\"===a||\"pointerover\"===a,g=\"mouseout\"===a||\"pointerout\"===a;if(f&&0===(e&32)&&(c.relatedTarget||c.fromElement)||!g&&!f)return null;f=d.window===d?d:(f=d.ownerDocument)?f.defaultView||f.parentWindow:window;if(g){if(g=b,b=(b=c.relatedTarget||c.toElement)?tc(b):null,null!==b){var h=dc(b);if(b!==h||5!==b.tag&&6!==b.tag)b=null}}else g=null;if(g===b)return null;if(\"mouseout\"===a||\"mouseover\"===\na){var k=Ve;var l=Xe.mouseLeave;var m=Xe.mouseEnter;var p=\"mouse\"}else if(\"pointerout\"===a||\"pointerover\"===a)k=We,l=Xe.pointerLeave,m=Xe.pointerEnter,p=\"pointer\";a=null==g?f:Pd(g);f=null==b?f:Pd(b);l=k.getPooled(l,g,c,d);l.type=p+\"leave\";l.target=a;l.relatedTarget=f;c=k.getPooled(m,b,c,d);c.type=p+\"enter\";c.target=f;c.relatedTarget=a;d=g;p=b;if(d&&p)a:{k=d;m=p;g=0;for(a=k;a;a=Rd(a))g++;a=0;for(b=m;b;b=Rd(b))a++;for(;0<g-a;)k=Rd(k),g--;for(;0<a-g;)m=Rd(m),a--;for(;g--;){if(k===m||k===m.alternate)break a;\nk=Rd(k);m=Rd(m)}k=null}else k=null;m=k;for(k=[];d&&d!==m;){g=d.alternate;if(null!==g&&g===m)break;k.push(d);d=Rd(d)}for(d=[];p&&p!==m;){g=p.alternate;if(null!==g&&g===m)break;d.push(p);p=Rd(p)}for(p=0;p<k.length;p++)Vd(k[p],\"bubbled\",l);for(p=d.length;0<p--;)Vd(d[p],\"captured\",c);return 0===(e&64)?[l]:[l,c]}};function Ze(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var $e=\"function\"===typeof Object.is?Object.is:Ze,af=Object.prototype.hasOwnProperty;\nfunction bf(a,b){if($e(a,b))return!0;if(\"object\"!==typeof a||null===a||\"object\"!==typeof b||null===b)return!1;var c=Object.keys(a),d=Object.keys(b);if(c.length!==d.length)return!1;for(d=0;d<c.length;d++)if(!af.call(b,c[d])||!$e(a[c[d]],b[c[d]]))return!1;return!0}\nvar cf=ya&&\"documentMode\"in document&&11>=document.documentMode,df={select:{phasedRegistrationNames:{bubbled:\"onSelect\",captured:\"onSelectCapture\"},dependencies:\"blur contextmenu dragend focus keydown keyup mousedown mouseup selectionchange\".split(\" \")}},ef=null,ff=null,gf=null,hf=!1;\nfunction jf(a,b){var c=b.window===b?b.document:9===b.nodeType?b:b.ownerDocument;if(hf||null==ef||ef!==td(c))return null;c=ef;\"selectionStart\"in c&&yd(c)?c={start:c.selectionStart,end:c.selectionEnd}:(c=(c.ownerDocument&&c.ownerDocument.defaultView||window).getSelection(),c={anchorNode:c.anchorNode,anchorOffset:c.anchorOffset,focusNode:c.focusNode,focusOffset:c.focusOffset});return gf&&bf(gf,c)?null:(gf=c,a=G.getPooled(df.select,ff,a,b),a.type=\"select\",a.target=ef,Xd(a),a)}\nvar kf={eventTypes:df,extractEvents:function(a,b,c,d,e,f){e=f||(d.window===d?d.document:9===d.nodeType?d:d.ownerDocument);if(!(f=!e)){a:{e=cc(e);f=wa.onSelect;for(var g=0;g<f.length;g++)if(!e.has(f[g])){e=!1;break a}e=!0}f=!e}if(f)return null;e=b?Pd(b):window;switch(a){case \"focus\":if(xe(e)||\"true\"===e.contentEditable)ef=e,ff=b,gf=null;break;case \"blur\":gf=ff=ef=null;break;case \"mousedown\":hf=!0;break;case \"contextmenu\":case \"mouseup\":case \"dragend\":return hf=!1,jf(c,d);case \"selectionchange\":if(cf)break;\ncase \"keydown\":case \"keyup\":return jf(c,d)}return null}},lf=G.extend({animationName:null,elapsedTime:null,pseudoElement:null}),mf=G.extend({clipboardData:function(a){return\"clipboardData\"in a?a.clipboardData:window.clipboardData}}),nf=Ne.extend({relatedTarget:null});function of(a){var b=a.keyCode;\"charCode\"in a?(a=a.charCode,0===a&&13===b&&(a=13)):a=b;10===a&&(a=13);return 32<=a||13===a?a:0}\nvar pf={Esc:\"Escape\",Spacebar:\" \",Left:\"ArrowLeft\",Up:\"ArrowUp\",Right:\"ArrowRight\",Down:\"ArrowDown\",Del:\"Delete\",Win:\"OS\",Menu:\"ContextMenu\",Apps:\"ContextMenu\",Scroll:\"ScrollLock\",MozPrintableKey:\"Unidentified\"},qf={8:\"Backspace\",9:\"Tab\",12:\"Clear\",13:\"Enter\",16:\"Shift\",17:\"Control\",18:\"Alt\",19:\"Pause\",20:\"CapsLock\",27:\"Escape\",32:\" \",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"ArrowLeft\",38:\"ArrowUp\",39:\"ArrowRight\",40:\"ArrowDown\",45:\"Insert\",46:\"Delete\",112:\"F1\",113:\"F2\",114:\"F3\",115:\"F4\",\n116:\"F5\",117:\"F6\",118:\"F7\",119:\"F8\",120:\"F9\",121:\"F10\",122:\"F11\",123:\"F12\",144:\"NumLock\",145:\"ScrollLock\",224:\"Meta\"},rf=Ne.extend({key:function(a){if(a.key){var b=pf[a.key]||a.key;if(\"Unidentified\"!==b)return b}return\"keypress\"===a.type?(a=of(a),13===a?\"Enter\":String.fromCharCode(a)):\"keydown\"===a.type||\"keyup\"===a.type?qf[a.keyCode]||\"Unidentified\":\"\"},location:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,repeat:null,locale:null,getModifierState:Qe,charCode:function(a){return\"keypress\"===\na.type?of(a):0},keyCode:function(a){return\"keydown\"===a.type||\"keyup\"===a.type?a.keyCode:0},which:function(a){return\"keypress\"===a.type?of(a):\"keydown\"===a.type||\"keyup\"===a.type?a.keyCode:0}}),sf=Ve.extend({dataTransfer:null}),tf=Ne.extend({touches:null,targetTouches:null,changedTouches:null,altKey:null,metaKey:null,ctrlKey:null,shiftKey:null,getModifierState:Qe}),uf=G.extend({propertyName:null,elapsedTime:null,pseudoElement:null}),vf=Ve.extend({deltaX:function(a){return\"deltaX\"in a?a.deltaX:\"wheelDeltaX\"in\na?-a.wheelDeltaX:0},deltaY:function(a){return\"deltaY\"in a?a.deltaY:\"wheelDeltaY\"in a?-a.wheelDeltaY:\"wheelDelta\"in a?-a.wheelDelta:0},deltaZ:null,deltaMode:null}),wf={eventTypes:Wc,extractEvents:function(a,b,c,d){var e=Yc.get(a);if(!e)return null;switch(a){case \"keypress\":if(0===of(c))return null;case \"keydown\":case \"keyup\":a=rf;break;case \"blur\":case \"focus\":a=nf;break;case \"click\":if(2===c.button)return null;case \"auxclick\":case \"dblclick\":case \"mousedown\":case \"mousemove\":case \"mouseup\":case \"mouseout\":case \"mouseover\":case \"contextmenu\":a=\nVe;break;case \"drag\":case \"dragend\":case \"dragenter\":case \"dragexit\":case \"dragleave\":case \"dragover\":case \"dragstart\":case \"drop\":a=sf;break;case \"touchcancel\":case \"touchend\":case \"touchmove\":case \"touchstart\":a=tf;break;case Xb:case Yb:case Zb:a=lf;break;case $b:a=uf;break;case \"scroll\":a=Ne;break;case \"wheel\":a=vf;break;case \"copy\":case \"cut\":case \"paste\":a=mf;break;case \"gotpointercapture\":case \"lostpointercapture\":case \"pointercancel\":case \"pointerdown\":case \"pointermove\":case \"pointerout\":case \"pointerover\":case \"pointerup\":a=\nWe;break;default:a=G}b=a.getPooled(e,b,c,d);Xd(b);return b}};if(pa)throw Error(u(101));pa=Array.prototype.slice.call(\"ResponderEventPlugin SimpleEventPlugin EnterLeaveEventPlugin ChangeEventPlugin SelectEventPlugin BeforeInputEventPlugin\".split(\" \"));ra();var xf=Nc;la=Qd;ma=xf;na=Pd;xa({SimpleEventPlugin:wf,EnterLeaveEventPlugin:Ye,ChangeEventPlugin:Me,SelectEventPlugin:kf,BeforeInputEventPlugin:ve});var yf=[],zf=-1;function H(a){0>zf||(a.current=yf[zf],yf[zf]=null,zf--)}\nfunction I(a,b){zf++;yf[zf]=a.current;a.current=b}var Af={},J={current:Af},K={current:!1},Bf=Af;function Cf(a,b){var c=a.type.contextTypes;if(!c)return Af;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}function L(a){a=a.childContextTypes;return null!==a&&void 0!==a}\nfunction Df(){H(K);H(J)}function Ef(a,b,c){if(J.current!==Af)throw Error(u(168));I(J,b);I(K,c)}function Ff(a,b,c){var d=a.stateNode;a=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in a))throw Error(u(108,pb(b)||\"Unknown\",e));return n({},c,{},d)}function Gf(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Af;Bf=J.current;I(J,a);I(K,K.current);return!0}\nfunction Hf(a,b,c){var d=a.stateNode;if(!d)throw Error(u(169));c?(a=Ff(a,b,Bf),d.__reactInternalMemoizedMergedChildContext=a,H(K),H(J),I(J,a)):H(K);I(K,c)}\nvar If=r.unstable_runWithPriority,Jf=r.unstable_scheduleCallback,Kf=r.unstable_cancelCallback,Lf=r.unstable_requestPaint,Mf=r.unstable_now,Nf=r.unstable_getCurrentPriorityLevel,Of=r.unstable_ImmediatePriority,Pf=r.unstable_UserBlockingPriority,Qf=r.unstable_NormalPriority,Rf=r.unstable_LowPriority,Sf=r.unstable_IdlePriority,Tf={},Uf=r.unstable_shouldYield,Vf=void 0!==Lf?Lf:function(){},Wf=null,Xf=null,Yf=!1,Zf=Mf(),$f=1E4>Zf?Mf:function(){return Mf()-Zf};\nfunction ag(){switch(Nf()){case Of:return 99;case Pf:return 98;case Qf:return 97;case Rf:return 96;case Sf:return 95;default:throw Error(u(332));}}function bg(a){switch(a){case 99:return Of;case 98:return Pf;case 97:return Qf;case 96:return Rf;case 95:return Sf;default:throw Error(u(332));}}function cg(a,b){a=bg(a);return If(a,b)}function dg(a,b,c){a=bg(a);return Jf(a,b,c)}function eg(a){null===Wf?(Wf=[a],Xf=Jf(Of,fg)):Wf.push(a);return Tf}function gg(){if(null!==Xf){var a=Xf;Xf=null;Kf(a)}fg()}\nfunction fg(){if(!Yf&&null!==Wf){Yf=!0;var a=0;try{var b=Wf;cg(99,function(){for(;a<b.length;a++){var c=b[a];do c=c(!0);while(null!==c)}});Wf=null}catch(c){throw null!==Wf&&(Wf=Wf.slice(a+1)),Jf(Of,gg),c;}finally{Yf=!1}}}function hg(a,b,c){c/=10;return 1073741821-(((1073741821-a+b/10)/c|0)+1)*c}function ig(a,b){if(a&&a.defaultProps){b=n({},b);a=a.defaultProps;for(var c in a)void 0===b[c]&&(b[c]=a[c])}return b}var jg={current:null},kg=null,lg=null,mg=null;function ng(){mg=lg=kg=null}\nfunction og(a){var b=jg.current;H(jg);a.type._context._currentValue=b}function pg(a,b){for(;null!==a;){var c=a.alternate;if(a.childExpirationTime<b)a.childExpirationTime=b,null!==c&&c.childExpirationTime<b&&(c.childExpirationTime=b);else if(null!==c&&c.childExpirationTime<b)c.childExpirationTime=b;else break;a=a.return}}function qg(a,b){kg=a;mg=lg=null;a=a.dependencies;null!==a&&null!==a.firstContext&&(a.expirationTime>=b&&(rg=!0),a.firstContext=null)}\nfunction sg(a,b){if(mg!==a&&!1!==b&&0!==b){if(\"number\"!==typeof b||1073741823===b)mg=a,b=1073741823;b={context:a,observedBits:b,next:null};if(null===lg){if(null===kg)throw Error(u(308));lg=b;kg.dependencies={expirationTime:0,firstContext:b,responders:null}}else lg=lg.next=b}return a._currentValue}var tg=!1;function ug(a){a.updateQueue={baseState:a.memoizedState,baseQueue:null,shared:{pending:null},effects:null}}\nfunction vg(a,b){a=a.updateQueue;b.updateQueue===a&&(b.updateQueue={baseState:a.baseState,baseQueue:a.baseQueue,shared:a.shared,effects:a.effects})}function wg(a,b){a={expirationTime:a,suspenseConfig:b,tag:0,payload:null,callback:null,next:null};return a.next=a}function xg(a,b){a=a.updateQueue;if(null!==a){a=a.shared;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}}\nfunction yg(a,b){var c=a.alternate;null!==c&&vg(c,a);a=a.updateQueue;c=a.baseQueue;null===c?(a.baseQueue=b.next=b,b.next=b):(b.next=c.next,c.next=b)}\nfunction zg(a,b,c,d){var e=a.updateQueue;tg=!1;var f=e.baseQueue,g=e.shared.pending;if(null!==g){if(null!==f){var h=f.next;f.next=g.next;g.next=h}f=g;e.shared.pending=null;h=a.alternate;null!==h&&(h=h.updateQueue,null!==h&&(h.baseQueue=g))}if(null!==f){h=f.next;var k=e.baseState,l=0,m=null,p=null,x=null;if(null!==h){var z=h;do{g=z.expirationTime;if(g<d){var ca={expirationTime:z.expirationTime,suspenseConfig:z.suspenseConfig,tag:z.tag,payload:z.payload,callback:z.callback,next:null};null===x?(p=x=\nca,m=k):x=x.next=ca;g>l&&(l=g)}else{null!==x&&(x=x.next={expirationTime:1073741823,suspenseConfig:z.suspenseConfig,tag:z.tag,payload:z.payload,callback:z.callback,next:null});Ag(g,z.suspenseConfig);a:{var D=a,t=z;g=b;ca=c;switch(t.tag){case 1:D=t.payload;if(\"function\"===typeof D){k=D.call(ca,k,g);break a}k=D;break a;case 3:D.effectTag=D.effectTag&-4097|64;case 0:D=t.payload;g=\"function\"===typeof D?D.call(ca,k,g):D;if(null===g||void 0===g)break a;k=n({},k,g);break a;case 2:tg=!0}}null!==z.callback&&\n(a.effectTag|=32,g=e.effects,null===g?e.effects=[z]:g.push(z))}z=z.next;if(null===z||z===h)if(g=e.shared.pending,null===g)break;else z=f.next=g.next,g.next=h,e.baseQueue=f=g,e.shared.pending=null}while(1)}null===x?m=k:x.next=p;e.baseState=m;e.baseQueue=x;Bg(l);a.expirationTime=l;a.memoizedState=k}}\nfunction Cg(a,b,c){a=b.effects;b.effects=null;if(null!==a)for(b=0;b<a.length;b++){var d=a[b],e=d.callback;if(null!==e){d.callback=null;d=e;e=c;if(\"function\"!==typeof d)throw Error(u(191,d));d.call(e)}}}var Dg=Wa.ReactCurrentBatchConfig,Eg=(new aa.Component).refs;function Fg(a,b,c,d){b=a.memoizedState;c=c(d,b);c=null===c||void 0===c?b:n({},b,c);a.memoizedState=c;0===a.expirationTime&&(a.updateQueue.baseState=c)}\nvar Jg={isMounted:function(a){return(a=a._reactInternalFiber)?dc(a)===a:!1},enqueueSetState:function(a,b,c){a=a._reactInternalFiber;var d=Gg(),e=Dg.suspense;d=Hg(d,a,e);e=wg(d,e);e.payload=b;void 0!==c&&null!==c&&(e.callback=c);xg(a,e);Ig(a,d)},enqueueReplaceState:function(a,b,c){a=a._reactInternalFiber;var d=Gg(),e=Dg.suspense;d=Hg(d,a,e);e=wg(d,e);e.tag=1;e.payload=b;void 0!==c&&null!==c&&(e.callback=c);xg(a,e);Ig(a,d)},enqueueForceUpdate:function(a,b){a=a._reactInternalFiber;var c=Gg(),d=Dg.suspense;\nc=Hg(c,a,d);d=wg(c,d);d.tag=2;void 0!==b&&null!==b&&(d.callback=b);xg(a,d);Ig(a,c)}};function Kg(a,b,c,d,e,f,g){a=a.stateNode;return\"function\"===typeof a.shouldComponentUpdate?a.shouldComponentUpdate(d,f,g):b.prototype&&b.prototype.isPureReactComponent?!bf(c,d)||!bf(e,f):!0}\nfunction Lg(a,b,c){var d=!1,e=Af;var f=b.contextType;\"object\"===typeof f&&null!==f?f=sg(f):(e=L(b)?Bf:J.current,d=b.contextTypes,f=(d=null!==d&&void 0!==d)?Cf(a,e):Af);b=new b(c,f);a.memoizedState=null!==b.state&&void 0!==b.state?b.state:null;b.updater=Jg;a.stateNode=b;b._reactInternalFiber=a;d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=e,a.__reactInternalMemoizedMaskedChildContext=f);return b}\nfunction Mg(a,b,c,d){a=b.state;\"function\"===typeof b.componentWillReceiveProps&&b.componentWillReceiveProps(c,d);\"function\"===typeof b.UNSAFE_componentWillReceiveProps&&b.UNSAFE_componentWillReceiveProps(c,d);b.state!==a&&Jg.enqueueReplaceState(b,b.state,null)}\nfunction Ng(a,b,c,d){var e=a.stateNode;e.props=c;e.state=a.memoizedState;e.refs=Eg;ug(a);var f=b.contextType;\"object\"===typeof f&&null!==f?e.context=sg(f):(f=L(b)?Bf:J.current,e.context=Cf(a,f));zg(a,c,e,d);e.state=a.memoizedState;f=b.getDerivedStateFromProps;\"function\"===typeof f&&(Fg(a,b,f,c),e.state=a.memoizedState);\"function\"===typeof b.getDerivedStateFromProps||\"function\"===typeof e.getSnapshotBeforeUpdate||\"function\"!==typeof e.UNSAFE_componentWillMount&&\"function\"!==typeof e.componentWillMount||\n(b=e.state,\"function\"===typeof e.componentWillMount&&e.componentWillMount(),\"function\"===typeof e.UNSAFE_componentWillMount&&e.UNSAFE_componentWillMount(),b!==e.state&&Jg.enqueueReplaceState(e,e.state,null),zg(a,c,e,d),e.state=a.memoizedState);\"function\"===typeof e.componentDidMount&&(a.effectTag|=4)}var Og=Array.isArray;\nfunction Pg(a,b,c){a=c.ref;if(null!==a&&\"function\"!==typeof a&&\"object\"!==typeof a){if(c._owner){c=c._owner;if(c){if(1!==c.tag)throw Error(u(309));var d=c.stateNode}if(!d)throw Error(u(147,a));var e=\"\"+a;if(null!==b&&null!==b.ref&&\"function\"===typeof b.ref&&b.ref._stringRef===e)return b.ref;b=function(a){var b=d.refs;b===Eg&&(b=d.refs={});null===a?delete b[e]:b[e]=a};b._stringRef=e;return b}if(\"string\"!==typeof a)throw Error(u(284));if(!c._owner)throw Error(u(290,a));}return a}\nfunction Qg(a,b){if(\"textarea\"!==a.type)throw Error(u(31,\"[object Object]\"===Object.prototype.toString.call(b)?\"object with keys {\"+Object.keys(b).join(\", \")+\"}\":b,\"\"));}\nfunction Rg(a){function b(b,c){if(a){var d=b.lastEffect;null!==d?(d.nextEffect=c,b.lastEffect=c):b.firstEffect=b.lastEffect=c;c.nextEffect=null;c.effectTag=8}}function c(c,d){if(!a)return null;for(;null!==d;)b(c,d),d=d.sibling;return null}function d(a,b){for(a=new Map;null!==b;)null!==b.key?a.set(b.key,b):a.set(b.index,b),b=b.sibling;return a}function e(a,b){a=Sg(a,b);a.index=0;a.sibling=null;return a}function f(b,c,d){b.index=d;if(!a)return c;d=b.alternate;if(null!==d)return d=d.index,d<c?(b.effectTag=\n2,c):d;b.effectTag=2;return c}function g(b){a&&null===b.alternate&&(b.effectTag=2);return b}function h(a,b,c,d){if(null===b||6!==b.tag)return b=Tg(c,a.mode,d),b.return=a,b;b=e(b,c);b.return=a;return b}function k(a,b,c,d){if(null!==b&&b.elementType===c.type)return d=e(b,c.props),d.ref=Pg(a,b,c),d.return=a,d;d=Ug(c.type,c.key,c.props,null,a.mode,d);d.ref=Pg(a,b,c);d.return=a;return d}function l(a,b,c,d){if(null===b||4!==b.tag||b.stateNode.containerInfo!==c.containerInfo||b.stateNode.implementation!==\nc.implementation)return b=Vg(c,a.mode,d),b.return=a,b;b=e(b,c.children||[]);b.return=a;return b}function m(a,b,c,d,f){if(null===b||7!==b.tag)return b=Wg(c,a.mode,d,f),b.return=a,b;b=e(b,c);b.return=a;return b}function p(a,b,c){if(\"string\"===typeof b||\"number\"===typeof b)return b=Tg(\"\"+b,a.mode,c),b.return=a,b;if(\"object\"===typeof b&&null!==b){switch(b.$$typeof){case Za:return c=Ug(b.type,b.key,b.props,null,a.mode,c),c.ref=Pg(a,null,b),c.return=a,c;case $a:return b=Vg(b,a.mode,c),b.return=a,b}if(Og(b)||\nnb(b))return b=Wg(b,a.mode,c,null),b.return=a,b;Qg(a,b)}return null}function x(a,b,c,d){var e=null!==b?b.key:null;if(\"string\"===typeof c||\"number\"===typeof c)return null!==e?null:h(a,b,\"\"+c,d);if(\"object\"===typeof c&&null!==c){switch(c.$$typeof){case Za:return c.key===e?c.type===ab?m(a,b,c.props.children,d,e):k(a,b,c,d):null;case $a:return c.key===e?l(a,b,c,d):null}if(Og(c)||nb(c))return null!==e?null:m(a,b,c,d,null);Qg(a,c)}return null}function z(a,b,c,d,e){if(\"string\"===typeof d||\"number\"===typeof d)return a=\na.get(c)||null,h(b,a,\"\"+d,e);if(\"object\"===typeof d&&null!==d){switch(d.$$typeof){case Za:return a=a.get(null===d.key?c:d.key)||null,d.type===ab?m(b,a,d.props.children,e,d.key):k(b,a,d,e);case $a:return a=a.get(null===d.key?c:d.key)||null,l(b,a,d,e)}if(Og(d)||nb(d))return a=a.get(c)||null,m(b,a,d,e,null);Qg(b,d)}return null}function ca(e,g,h,k){for(var l=null,t=null,m=g,y=g=0,A=null;null!==m&&y<h.length;y++){m.index>y?(A=m,m=null):A=m.sibling;var q=x(e,m,h[y],k);if(null===q){null===m&&(m=A);break}a&&\nm&&null===q.alternate&&b(e,m);g=f(q,g,y);null===t?l=q:t.sibling=q;t=q;m=A}if(y===h.length)return c(e,m),l;if(null===m){for(;y<h.length;y++)m=p(e,h[y],k),null!==m&&(g=f(m,g,y),null===t?l=m:t.sibling=m,t=m);return l}for(m=d(e,m);y<h.length;y++)A=z(m,e,y,h[y],k),null!==A&&(a&&null!==A.alternate&&m.delete(null===A.key?y:A.key),g=f(A,g,y),null===t?l=A:t.sibling=A,t=A);a&&m.forEach(function(a){return b(e,a)});return l}function D(e,g,h,l){var k=nb(h);if(\"function\"!==typeof k)throw Error(u(150));h=k.call(h);\nif(null==h)throw Error(u(151));for(var m=k=null,t=g,y=g=0,A=null,q=h.next();null!==t&&!q.done;y++,q=h.next()){t.index>y?(A=t,t=null):A=t.sibling;var D=x(e,t,q.value,l);if(null===D){null===t&&(t=A);break}a&&t&&null===D.alternate&&b(e,t);g=f(D,g,y);null===m?k=D:m.sibling=D;m=D;t=A}if(q.done)return c(e,t),k;if(null===t){for(;!q.done;y++,q=h.next())q=p(e,q.value,l),null!==q&&(g=f(q,g,y),null===m?k=q:m.sibling=q,m=q);return k}for(t=d(e,t);!q.done;y++,q=h.next())q=z(t,e,y,q.value,l),null!==q&&(a&&null!==\nq.alternate&&t.delete(null===q.key?y:q.key),g=f(q,g,y),null===m?k=q:m.sibling=q,m=q);a&&t.forEach(function(a){return b(e,a)});return k}return function(a,d,f,h){var k=\"object\"===typeof f&&null!==f&&f.type===ab&&null===f.key;k&&(f=f.props.children);var l=\"object\"===typeof f&&null!==f;if(l)switch(f.$$typeof){case Za:a:{l=f.key;for(k=d;null!==k;){if(k.key===l){switch(k.tag){case 7:if(f.type===ab){c(a,k.sibling);d=e(k,f.props.children);d.return=a;a=d;break a}break;default:if(k.elementType===f.type){c(a,\nk.sibling);d=e(k,f.props);d.ref=Pg(a,k,f);d.return=a;a=d;break a}}c(a,k);break}else b(a,k);k=k.sibling}f.type===ab?(d=Wg(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=Ug(f.type,f.key,f.props,null,a.mode,h),h.ref=Pg(a,d,f),h.return=a,a=h)}return g(a);case $a:a:{for(k=f.key;null!==d;){if(d.key===k)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=\nd.sibling}d=Vg(f,a.mode,h);d.return=a;a=d}return g(a)}if(\"string\"===typeof f||\"number\"===typeof f)return f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):(c(a,d),d=Tg(f,a.mode,h),d.return=a,a=d),g(a);if(Og(f))return ca(a,d,f,h);if(nb(f))return D(a,d,f,h);l&&Qg(a,f);if(\"undefined\"===typeof f&&!k)switch(a.tag){case 1:case 0:throw a=a.type,Error(u(152,a.displayName||a.name||\"Component\"));}return c(a,d)}}var Xg=Rg(!0),Yg=Rg(!1),Zg={},$g={current:Zg},ah={current:Zg},bh={current:Zg};\nfunction ch(a){if(a===Zg)throw Error(u(174));return a}function dh(a,b){I(bh,b);I(ah,a);I($g,Zg);a=b.nodeType;switch(a){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:Ob(null,\"\");break;default:a=8===a?b.parentNode:b,b=a.namespaceURI||null,a=a.tagName,b=Ob(b,a)}H($g);I($g,b)}function eh(){H($g);H(ah);H(bh)}function fh(a){ch(bh.current);var b=ch($g.current);var c=Ob(b,a.type);b!==c&&(I(ah,a),I($g,c))}function gh(a){ah.current===a&&(H($g),H(ah))}var M={current:0};\nfunction hh(a){for(var b=a;null!==b;){if(13===b.tag){var c=b.memoizedState;if(null!==c&&(c=c.dehydrated,null===c||c.data===Bd||c.data===Cd))return b}else if(19===b.tag&&void 0!==b.memoizedProps.revealOrder){if(0!==(b.effectTag&64))return b}else if(null!==b.child){b.child.return=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}return null}function ih(a,b){return{responder:a,props:b}}\nvar jh=Wa.ReactCurrentDispatcher,kh=Wa.ReactCurrentBatchConfig,lh=0,N=null,O=null,P=null,mh=!1;function Q(){throw Error(u(321));}function nh(a,b){if(null===b)return!1;for(var c=0;c<b.length&&c<a.length;c++)if(!$e(a[c],b[c]))return!1;return!0}\nfunction oh(a,b,c,d,e,f){lh=f;N=b;b.memoizedState=null;b.updateQueue=null;b.expirationTime=0;jh.current=null===a||null===a.memoizedState?ph:qh;a=c(d,e);if(b.expirationTime===lh){f=0;do{b.expirationTime=0;if(!(25>f))throw Error(u(301));f+=1;P=O=null;b.updateQueue=null;jh.current=rh;a=c(d,e)}while(b.expirationTime===lh)}jh.current=sh;b=null!==O&&null!==O.next;lh=0;P=O=N=null;mh=!1;if(b)throw Error(u(300));return a}\nfunction th(){var a={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};null===P?N.memoizedState=P=a:P=P.next=a;return P}function uh(){if(null===O){var a=N.alternate;a=null!==a?a.memoizedState:null}else a=O.next;var b=null===P?N.memoizedState:P.next;if(null!==b)P=b,O=a;else{if(null===a)throw Error(u(310));O=a;a={memoizedState:O.memoizedState,baseState:O.baseState,baseQueue:O.baseQueue,queue:O.queue,next:null};null===P?N.memoizedState=P=a:P=P.next=a}return P}\nfunction vh(a,b){return\"function\"===typeof b?b(a):b}\nfunction wh(a){var b=uh(),c=b.queue;if(null===c)throw Error(u(311));c.lastRenderedReducer=a;var d=O,e=d.baseQueue,f=c.pending;if(null!==f){if(null!==e){var g=e.next;e.next=f.next;f.next=g}d.baseQueue=e=f;c.pending=null}if(null!==e){e=e.next;d=d.baseState;var h=g=f=null,k=e;do{var l=k.expirationTime;if(l<lh){var m={expirationTime:k.expirationTime,suspenseConfig:k.suspenseConfig,action:k.action,eagerReducer:k.eagerReducer,eagerState:k.eagerState,next:null};null===h?(g=h=m,f=d):h=h.next=m;l>N.expirationTime&&\n(N.expirationTime=l,Bg(l))}else null!==h&&(h=h.next={expirationTime:1073741823,suspenseConfig:k.suspenseConfig,action:k.action,eagerReducer:k.eagerReducer,eagerState:k.eagerState,next:null}),Ag(l,k.suspenseConfig),d=k.eagerReducer===a?k.eagerState:a(d,k.action);k=k.next}while(null!==k&&k!==e);null===h?f=d:h.next=g;$e(d,b.memoizedState)||(rg=!0);b.memoizedState=d;b.baseState=f;b.baseQueue=h;c.lastRenderedState=d}return[b.memoizedState,c.dispatch]}\nfunction xh(a){var b=uh(),c=b.queue;if(null===c)throw Error(u(311));c.lastRenderedReducer=a;var d=c.dispatch,e=c.pending,f=b.memoizedState;if(null!==e){c.pending=null;var g=e=e.next;do f=a(f,g.action),g=g.next;while(g!==e);$e(f,b.memoizedState)||(rg=!0);b.memoizedState=f;null===b.baseQueue&&(b.baseState=f);c.lastRenderedState=f}return[f,d]}\nfunction yh(a){var b=th();\"function\"===typeof a&&(a=a());b.memoizedState=b.baseState=a;a=b.queue={pending:null,dispatch:null,lastRenderedReducer:vh,lastRenderedState:a};a=a.dispatch=zh.bind(null,N,a);return[b.memoizedState,a]}function Ah(a,b,c,d){a={tag:a,create:b,destroy:c,deps:d,next:null};b=N.updateQueue;null===b?(b={lastEffect:null},N.updateQueue=b,b.lastEffect=a.next=a):(c=b.lastEffect,null===c?b.lastEffect=a.next=a:(d=c.next,c.next=a,a.next=d,b.lastEffect=a));return a}\nfunction Bh(){return uh().memoizedState}function Ch(a,b,c,d){var e=th();N.effectTag|=a;e.memoizedState=Ah(1|b,c,void 0,void 0===d?null:d)}function Dh(a,b,c,d){var e=uh();d=void 0===d?null:d;var f=void 0;if(null!==O){var g=O.memoizedState;f=g.destroy;if(null!==d&&nh(d,g.deps)){Ah(b,c,f,d);return}}N.effectTag|=a;e.memoizedState=Ah(1|b,c,f,d)}function Eh(a,b){return Ch(516,4,a,b)}function Fh(a,b){return Dh(516,4,a,b)}function Gh(a,b){return Dh(4,2,a,b)}\nfunction Hh(a,b){if(\"function\"===typeof b)return a=a(),b(a),function(){b(null)};if(null!==b&&void 0!==b)return a=a(),b.current=a,function(){b.current=null}}function Ih(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return Dh(4,2,Hh.bind(null,b,a),c)}function Jh(){}function Kh(a,b){th().memoizedState=[a,void 0===b?null:b];return a}function Lh(a,b){var c=uh();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&nh(b,d[1]))return d[0];c.memoizedState=[a,b];return a}\nfunction Mh(a,b){var c=uh();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&nh(b,d[1]))return d[0];a=a();c.memoizedState=[a,b];return a}function Nh(a,b,c){var d=ag();cg(98>d?98:d,function(){a(!0)});cg(97<d?97:d,function(){var d=kh.suspense;kh.suspense=void 0===b?null:b;try{a(!1),c()}finally{kh.suspense=d}})}\nfunction zh(a,b,c){var d=Gg(),e=Dg.suspense;d=Hg(d,a,e);e={expirationTime:d,suspenseConfig:e,action:c,eagerReducer:null,eagerState:null,next:null};var f=b.pending;null===f?e.next=e:(e.next=f.next,f.next=e);b.pending=e;f=a.alternate;if(a===N||null!==f&&f===N)mh=!0,e.expirationTime=lh,N.expirationTime=lh;else{if(0===a.expirationTime&&(null===f||0===f.expirationTime)&&(f=b.lastRenderedReducer,null!==f))try{var g=b.lastRenderedState,h=f(g,c);e.eagerReducer=f;e.eagerState=h;if($e(h,g))return}catch(k){}finally{}Ig(a,\nd)}}\nvar sh={readContext:sg,useCallback:Q,useContext:Q,useEffect:Q,useImperativeHandle:Q,useLayoutEffect:Q,useMemo:Q,useReducer:Q,useRef:Q,useState:Q,useDebugValue:Q,useResponder:Q,useDeferredValue:Q,useTransition:Q},ph={readContext:sg,useCallback:Kh,useContext:sg,useEffect:Eh,useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return Ch(4,2,Hh.bind(null,b,a),c)},useLayoutEffect:function(a,b){return Ch(4,2,a,b)},useMemo:function(a,b){var c=th();b=void 0===b?null:b;a=a();c.memoizedState=[a,\nb];return a},useReducer:function(a,b,c){var d=th();b=void 0!==c?c(b):b;d.memoizedState=d.baseState=b;a=d.queue={pending:null,dispatch:null,lastRenderedReducer:a,lastRenderedState:b};a=a.dispatch=zh.bind(null,N,a);return[d.memoizedState,a]},useRef:function(a){var b=th();a={current:a};return b.memoizedState=a},useState:yh,useDebugValue:Jh,useResponder:ih,useDeferredValue:function(a,b){var c=yh(a),d=c[0],e=c[1];Eh(function(){var c=kh.suspense;kh.suspense=void 0===b?null:b;try{e(a)}finally{kh.suspense=\nc}},[a,b]);return d},useTransition:function(a){var b=yh(!1),c=b[0];b=b[1];return[Kh(Nh.bind(null,b,a),[b,a]),c]}},qh={readContext:sg,useCallback:Lh,useContext:sg,useEffect:Fh,useImperativeHandle:Ih,useLayoutEffect:Gh,useMemo:Mh,useReducer:wh,useRef:Bh,useState:function(){return wh(vh)},useDebugValue:Jh,useResponder:ih,useDeferredValue:function(a,b){var c=wh(vh),d=c[0],e=c[1];Fh(function(){var c=kh.suspense;kh.suspense=void 0===b?null:b;try{e(a)}finally{kh.suspense=c}},[a,b]);return d},useTransition:function(a){var b=\nwh(vh),c=b[0];b=b[1];return[Lh(Nh.bind(null,b,a),[b,a]),c]}},rh={readContext:sg,useCallback:Lh,useContext:sg,useEffect:Fh,useImperativeHandle:Ih,useLayoutEffect:Gh,useMemo:Mh,useReducer:xh,useRef:Bh,useState:function(){return xh(vh)},useDebugValue:Jh,useResponder:ih,useDeferredValue:function(a,b){var c=xh(vh),d=c[0],e=c[1];Fh(function(){var c=kh.suspense;kh.suspense=void 0===b?null:b;try{e(a)}finally{kh.suspense=c}},[a,b]);return d},useTransition:function(a){var b=xh(vh),c=b[0];b=b[1];return[Lh(Nh.bind(null,\nb,a),[b,a]),c]}},Oh=null,Ph=null,Qh=!1;function Rh(a,b){var c=Sh(5,null,null,0);c.elementType=\"DELETED\";c.type=\"DELETED\";c.stateNode=b;c.return=a;c.effectTag=8;null!==a.lastEffect?(a.lastEffect.nextEffect=c,a.lastEffect=c):a.firstEffect=a.lastEffect=c}\nfunction Th(a,b){switch(a.tag){case 5:var c=a.type;b=1!==b.nodeType||c.toLowerCase()!==b.nodeName.toLowerCase()?null:b;return null!==b?(a.stateNode=b,!0):!1;case 6:return b=\"\"===a.pendingProps||3!==b.nodeType?null:b,null!==b?(a.stateNode=b,!0):!1;case 13:return!1;default:return!1}}\nfunction Uh(a){if(Qh){var b=Ph;if(b){var c=b;if(!Th(a,b)){b=Jd(c.nextSibling);if(!b||!Th(a,b)){a.effectTag=a.effectTag&-1025|2;Qh=!1;Oh=a;return}Rh(Oh,c)}Oh=a;Ph=Jd(b.firstChild)}else a.effectTag=a.effectTag&-1025|2,Qh=!1,Oh=a}}function Vh(a){for(a=a.return;null!==a&&5!==a.tag&&3!==a.tag&&13!==a.tag;)a=a.return;Oh=a}\nfunction Wh(a){if(a!==Oh)return!1;if(!Qh)return Vh(a),Qh=!0,!1;var b=a.type;if(5!==a.tag||\"head\"!==b&&\"body\"!==b&&!Gd(b,a.memoizedProps))for(b=Ph;b;)Rh(a,b),b=Jd(b.nextSibling);Vh(a);if(13===a.tag){a=a.memoizedState;a=null!==a?a.dehydrated:null;if(!a)throw Error(u(317));a:{a=a.nextSibling;for(b=0;a;){if(8===a.nodeType){var c=a.data;if(c===Ad){if(0===b){Ph=Jd(a.nextSibling);break a}b--}else c!==zd&&c!==Cd&&c!==Bd||b++}a=a.nextSibling}Ph=null}}else Ph=Oh?Jd(a.stateNode.nextSibling):null;return!0}\nfunction Xh(){Ph=Oh=null;Qh=!1}var Yh=Wa.ReactCurrentOwner,rg=!1;function R(a,b,c,d){b.child=null===a?Yg(b,null,c,d):Xg(b,a.child,c,d)}function Zh(a,b,c,d,e){c=c.render;var f=b.ref;qg(b,e);d=oh(a,b,c,d,f,e);if(null!==a&&!rg)return b.updateQueue=a.updateQueue,b.effectTag&=-517,a.expirationTime<=e&&(a.expirationTime=0),$h(a,b,e);b.effectTag|=1;R(a,b,d,e);return b.child}\nfunction ai(a,b,c,d,e,f){if(null===a){var g=c.type;if(\"function\"===typeof g&&!bi(g)&&void 0===g.defaultProps&&null===c.compare&&void 0===c.defaultProps)return b.tag=15,b.type=g,ci(a,b,g,d,e,f);a=Ug(c.type,null,d,null,b.mode,f);a.ref=b.ref;a.return=b;return b.child=a}g=a.child;if(e<f&&(e=g.memoizedProps,c=c.compare,c=null!==c?c:bf,c(e,d)&&a.ref===b.ref))return $h(a,b,f);b.effectTag|=1;a=Sg(g,d);a.ref=b.ref;a.return=b;return b.child=a}\nfunction ci(a,b,c,d,e,f){return null!==a&&bf(a.memoizedProps,d)&&a.ref===b.ref&&(rg=!1,e<f)?(b.expirationTime=a.expirationTime,$h(a,b,f)):di(a,b,c,d,f)}function ei(a,b){var c=b.ref;if(null===a&&null!==c||null!==a&&a.ref!==c)b.effectTag|=128}function di(a,b,c,d,e){var f=L(c)?Bf:J.current;f=Cf(b,f);qg(b,e);c=oh(a,b,c,d,f,e);if(null!==a&&!rg)return b.updateQueue=a.updateQueue,b.effectTag&=-517,a.expirationTime<=e&&(a.expirationTime=0),$h(a,b,e);b.effectTag|=1;R(a,b,c,e);return b.child}\nfunction fi(a,b,c,d,e){if(L(c)){var f=!0;Gf(b)}else f=!1;qg(b,e);if(null===b.stateNode)null!==a&&(a.alternate=null,b.alternate=null,b.effectTag|=2),Lg(b,c,d),Ng(b,c,d,e),d=!0;else if(null===a){var g=b.stateNode,h=b.memoizedProps;g.props=h;var k=g.context,l=c.contextType;\"object\"===typeof l&&null!==l?l=sg(l):(l=L(c)?Bf:J.current,l=Cf(b,l));var m=c.getDerivedStateFromProps,p=\"function\"===typeof m||\"function\"===typeof g.getSnapshotBeforeUpdate;p||\"function\"!==typeof g.UNSAFE_componentWillReceiveProps&&\n\"function\"!==typeof g.componentWillReceiveProps||(h!==d||k!==l)&&Mg(b,g,d,l);tg=!1;var x=b.memoizedState;g.state=x;zg(b,d,g,e);k=b.memoizedState;h!==d||x!==k||K.current||tg?(\"function\"===typeof m&&(Fg(b,c,m,d),k=b.memoizedState),(h=tg||Kg(b,c,h,d,x,k,l))?(p||\"function\"!==typeof g.UNSAFE_componentWillMount&&\"function\"!==typeof g.componentWillMount||(\"function\"===typeof g.componentWillMount&&g.componentWillMount(),\"function\"===typeof g.UNSAFE_componentWillMount&&g.UNSAFE_componentWillMount()),\"function\"===\ntypeof g.componentDidMount&&(b.effectTag|=4)):(\"function\"===typeof g.componentDidMount&&(b.effectTag|=4),b.memoizedProps=d,b.memoizedState=k),g.props=d,g.state=k,g.context=l,d=h):(\"function\"===typeof g.componentDidMount&&(b.effectTag|=4),d=!1)}else g=b.stateNode,vg(a,b),h=b.memoizedProps,g.props=b.type===b.elementType?h:ig(b.type,h),k=g.context,l=c.contextType,\"object\"===typeof l&&null!==l?l=sg(l):(l=L(c)?Bf:J.current,l=Cf(b,l)),m=c.getDerivedStateFromProps,(p=\"function\"===typeof m||\"function\"===\ntypeof g.getSnapshotBeforeUpdate)||\"function\"!==typeof g.UNSAFE_componentWillReceiveProps&&\"function\"!==typeof g.componentWillReceiveProps||(h!==d||k!==l)&&Mg(b,g,d,l),tg=!1,k=b.memoizedState,g.state=k,zg(b,d,g,e),x=b.memoizedState,h!==d||k!==x||K.current||tg?(\"function\"===typeof m&&(Fg(b,c,m,d),x=b.memoizedState),(m=tg||Kg(b,c,h,d,k,x,l))?(p||\"function\"!==typeof g.UNSAFE_componentWillUpdate&&\"function\"!==typeof g.componentWillUpdate||(\"function\"===typeof g.componentWillUpdate&&g.componentWillUpdate(d,\nx,l),\"function\"===typeof g.UNSAFE_componentWillUpdate&&g.UNSAFE_componentWillUpdate(d,x,l)),\"function\"===typeof g.componentDidUpdate&&(b.effectTag|=4),\"function\"===typeof g.getSnapshotBeforeUpdate&&(b.effectTag|=256)):(\"function\"!==typeof g.componentDidUpdate||h===a.memoizedProps&&k===a.memoizedState||(b.effectTag|=4),\"function\"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&k===a.memoizedState||(b.effectTag|=256),b.memoizedProps=d,b.memoizedState=x),g.props=d,g.state=x,g.context=l,d=m):\n(\"function\"!==typeof g.componentDidUpdate||h===a.memoizedProps&&k===a.memoizedState||(b.effectTag|=4),\"function\"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&k===a.memoizedState||(b.effectTag|=256),d=!1);return gi(a,b,c,d,f,e)}\nfunction gi(a,b,c,d,e,f){ei(a,b);var g=0!==(b.effectTag&64);if(!d&&!g)return e&&Hf(b,c,!1),$h(a,b,f);d=b.stateNode;Yh.current=b;var h=g&&\"function\"!==typeof c.getDerivedStateFromError?null:d.render();b.effectTag|=1;null!==a&&g?(b.child=Xg(b,a.child,null,f),b.child=Xg(b,null,h,f)):R(a,b,h,f);b.memoizedState=d.state;e&&Hf(b,c,!0);return b.child}function hi(a){var b=a.stateNode;b.pendingContext?Ef(a,b.pendingContext,b.pendingContext!==b.context):b.context&&Ef(a,b.context,!1);dh(a,b.containerInfo)}\nvar ii={dehydrated:null,retryTime:0};\nfunction ji(a,b,c){var d=b.mode,e=b.pendingProps,f=M.current,g=!1,h;(h=0!==(b.effectTag&64))||(h=0!==(f&2)&&(null===a||null!==a.memoizedState));h?(g=!0,b.effectTag&=-65):null!==a&&null===a.memoizedState||void 0===e.fallback||!0===e.unstable_avoidThisFallback||(f|=1);I(M,f&1);if(null===a){void 0!==e.fallback&&Uh(b);if(g){g=e.fallback;e=Wg(null,d,0,null);e.return=b;if(0===(b.mode&2))for(a=null!==b.memoizedState?b.child.child:b.child,e.child=a;null!==a;)a.return=e,a=a.sibling;c=Wg(g,d,c,null);c.return=\nb;e.sibling=c;b.memoizedState=ii;b.child=e;return c}d=e.children;b.memoizedState=null;return b.child=Yg(b,null,d,c)}if(null!==a.memoizedState){a=a.child;d=a.sibling;if(g){e=e.fallback;c=Sg(a,a.pendingProps);c.return=b;if(0===(b.mode&2)&&(g=null!==b.memoizedState?b.child.child:b.child,g!==a.child))for(c.child=g;null!==g;)g.return=c,g=g.sibling;d=Sg(d,e);d.return=b;c.sibling=d;c.childExpirationTime=0;b.memoizedState=ii;b.child=c;return d}c=Xg(b,a.child,e.children,c);b.memoizedState=null;return b.child=\nc}a=a.child;if(g){g=e.fallback;e=Wg(null,d,0,null);e.return=b;e.child=a;null!==a&&(a.return=e);if(0===(b.mode&2))for(a=null!==b.memoizedState?b.child.child:b.child,e.child=a;null!==a;)a.return=e,a=a.sibling;c=Wg(g,d,c,null);c.return=b;e.sibling=c;c.effectTag|=2;e.childExpirationTime=0;b.memoizedState=ii;b.child=e;return c}b.memoizedState=null;return b.child=Xg(b,a,e.children,c)}\nfunction ki(a,b){a.expirationTime<b&&(a.expirationTime=b);var c=a.alternate;null!==c&&c.expirationTime<b&&(c.expirationTime=b);pg(a.return,b)}function li(a,b,c,d,e,f){var g=a.memoizedState;null===g?a.memoizedState={isBackwards:b,rendering:null,renderingStartTime:0,last:d,tail:c,tailExpiration:0,tailMode:e,lastEffect:f}:(g.isBackwards=b,g.rendering=null,g.renderingStartTime=0,g.last=d,g.tail=c,g.tailExpiration=0,g.tailMode=e,g.lastEffect=f)}\nfunction mi(a,b,c){var d=b.pendingProps,e=d.revealOrder,f=d.tail;R(a,b,d.children,c);d=M.current;if(0!==(d&2))d=d&1|2,b.effectTag|=64;else{if(null!==a&&0!==(a.effectTag&64))a:for(a=b.child;null!==a;){if(13===a.tag)null!==a.memoizedState&&ki(a,c);else if(19===a.tag)ki(a,c);else if(null!==a.child){a.child.return=a;a=a.child;continue}if(a===b)break a;for(;null===a.sibling;){if(null===a.return||a.return===b)break a;a=a.return}a.sibling.return=a.return;a=a.sibling}d&=1}I(M,d);if(0===(b.mode&2))b.memoizedState=\nnull;else switch(e){case \"forwards\":c=b.child;for(e=null;null!==c;)a=c.alternate,null!==a&&null===hh(a)&&(e=c),c=c.sibling;c=e;null===c?(e=b.child,b.child=null):(e=c.sibling,c.sibling=null);li(b,!1,e,c,f,b.lastEffect);break;case \"backwards\":c=null;e=b.child;for(b.child=null;null!==e;){a=e.alternate;if(null!==a&&null===hh(a)){b.child=e;break}a=e.sibling;e.sibling=c;c=e;e=a}li(b,!0,c,null,f,b.lastEffect);break;case \"together\":li(b,!1,null,null,void 0,b.lastEffect);break;default:b.memoizedState=null}return b.child}\nfunction $h(a,b,c){null!==a&&(b.dependencies=a.dependencies);var d=b.expirationTime;0!==d&&Bg(d);if(b.childExpirationTime<c)return null;if(null!==a&&b.child!==a.child)throw Error(u(153));if(null!==b.child){a=b.child;c=Sg(a,a.pendingProps);b.child=c;for(c.return=b;null!==a.sibling;)a=a.sibling,c=c.sibling=Sg(a,a.pendingProps),c.return=b;c.sibling=null}return b.child}var ni,oi,pi,qi;\nni=function(a,b){for(var c=b.child;null!==c;){if(5===c.tag||6===c.tag)a.appendChild(c.stateNode);else if(4!==c.tag&&null!==c.child){c.child.return=c;c=c.child;continue}if(c===b)break;for(;null===c.sibling;){if(null===c.return||c.return===b)return;c=c.return}c.sibling.return=c.return;c=c.sibling}};oi=function(){};\npi=function(a,b,c,d,e){var f=a.memoizedProps;if(f!==d){var g=b.stateNode;ch($g.current);a=null;switch(c){case \"input\":f=zb(g,f);d=zb(g,d);a=[];break;case \"option\":f=Gb(g,f);d=Gb(g,d);a=[];break;case \"select\":f=n({},f,{value:void 0});d=n({},d,{value:void 0});a=[];break;case \"textarea\":f=Ib(g,f);d=Ib(g,d);a=[];break;default:\"function\"!==typeof f.onClick&&\"function\"===typeof d.onClick&&(g.onclick=sd)}od(c,d);var h,k;c=null;for(h in f)if(!d.hasOwnProperty(h)&&f.hasOwnProperty(h)&&null!=f[h])if(\"style\"===\nh)for(k in g=f[h],g)g.hasOwnProperty(k)&&(c||(c={}),c[k]=\"\");else\"dangerouslySetInnerHTML\"!==h&&\"children\"!==h&&\"suppressContentEditableWarning\"!==h&&\"suppressHydrationWarning\"!==h&&\"autoFocus\"!==h&&(va.hasOwnProperty(h)?a||(a=[]):(a=a||[]).push(h,null));for(h in d){var l=d[h];g=null!=f?f[h]:void 0;if(d.hasOwnProperty(h)&&l!==g&&(null!=l||null!=g))if(\"style\"===h)if(g){for(k in g)!g.hasOwnProperty(k)||l&&l.hasOwnProperty(k)||(c||(c={}),c[k]=\"\");for(k in l)l.hasOwnProperty(k)&&g[k]!==l[k]&&(c||(c={}),\nc[k]=l[k])}else c||(a||(a=[]),a.push(h,c)),c=l;else\"dangerouslySetInnerHTML\"===h?(l=l?l.__html:void 0,g=g?g.__html:void 0,null!=l&&g!==l&&(a=a||[]).push(h,l)):\"children\"===h?g===l||\"string\"!==typeof l&&\"number\"!==typeof l||(a=a||[]).push(h,\"\"+l):\"suppressContentEditableWarning\"!==h&&\"suppressHydrationWarning\"!==h&&(va.hasOwnProperty(h)?(null!=l&&rd(e,h),a||g===l||(a=[])):(a=a||[]).push(h,l))}c&&(a=a||[]).push(\"style\",c);e=a;if(b.updateQueue=e)b.effectTag|=4}};\nqi=function(a,b,c,d){c!==d&&(b.effectTag|=4)};function ri(a,b){switch(a.tailMode){case \"hidden\":b=a.tail;for(var c=null;null!==b;)null!==b.alternate&&(c=b),b=b.sibling;null===c?a.tail=null:c.sibling=null;break;case \"collapsed\":c=a.tail;for(var d=null;null!==c;)null!==c.alternate&&(d=c),c=c.sibling;null===d?b||null===a.tail?a.tail=null:a.tail.sibling=null:d.sibling=null}}\nfunction si(a,b,c){var d=b.pendingProps;switch(b.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return null;case 1:return L(b.type)&&Df(),null;case 3:return eh(),H(K),H(J),c=b.stateNode,c.pendingContext&&(c.context=c.pendingContext,c.pendingContext=null),null!==a&&null!==a.child||!Wh(b)||(b.effectTag|=4),oi(b),null;case 5:gh(b);c=ch(bh.current);var e=b.type;if(null!==a&&null!=b.stateNode)pi(a,b,e,d,c),a.ref!==b.ref&&(b.effectTag|=128);else{if(!d){if(null===b.stateNode)throw Error(u(166));\nreturn null}a=ch($g.current);if(Wh(b)){d=b.stateNode;e=b.type;var f=b.memoizedProps;d[Md]=b;d[Nd]=f;switch(e){case \"iframe\":case \"object\":case \"embed\":F(\"load\",d);break;case \"video\":case \"audio\":for(a=0;a<ac.length;a++)F(ac[a],d);break;case \"source\":F(\"error\",d);break;case \"img\":case \"image\":case \"link\":F(\"error\",d);F(\"load\",d);break;case \"form\":F(\"reset\",d);F(\"submit\",d);break;case \"details\":F(\"toggle\",d);break;case \"input\":Ab(d,f);F(\"invalid\",d);rd(c,\"onChange\");break;case \"select\":d._wrapperState=\n{wasMultiple:!!f.multiple};F(\"invalid\",d);rd(c,\"onChange\");break;case \"textarea\":Jb(d,f),F(\"invalid\",d),rd(c,\"onChange\")}od(e,f);a=null;for(var g in f)if(f.hasOwnProperty(g)){var h=f[g];\"children\"===g?\"string\"===typeof h?d.textContent!==h&&(a=[\"children\",h]):\"number\"===typeof h&&d.textContent!==\"\"+h&&(a=[\"children\",\"\"+h]):va.hasOwnProperty(g)&&null!=h&&rd(c,g)}switch(e){case \"input\":xb(d);Eb(d,f,!0);break;case \"textarea\":xb(d);Lb(d);break;case \"select\":case \"option\":break;default:\"function\"===typeof f.onClick&&\n(d.onclick=sd)}c=a;b.updateQueue=c;null!==c&&(b.effectTag|=4)}else{g=9===c.nodeType?c:c.ownerDocument;a===qd&&(a=Nb(e));a===qd?\"script\"===e?(a=g.createElement(\"div\"),a.innerHTML=\"<script>\\x3c/script>\",a=a.removeChild(a.firstChild)):\"string\"===typeof d.is?a=g.createElement(e,{is:d.is}):(a=g.createElement(e),\"select\"===e&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,e);a[Md]=b;a[Nd]=d;ni(a,b,!1,!1);b.stateNode=a;g=pd(e,d);switch(e){case \"iframe\":case \"object\":case \"embed\":F(\"load\",\na);h=d;break;case \"video\":case \"audio\":for(h=0;h<ac.length;h++)F(ac[h],a);h=d;break;case \"source\":F(\"error\",a);h=d;break;case \"img\":case \"image\":case \"link\":F(\"error\",a);F(\"load\",a);h=d;break;case \"form\":F(\"reset\",a);F(\"submit\",a);h=d;break;case \"details\":F(\"toggle\",a);h=d;break;case \"input\":Ab(a,d);h=zb(a,d);F(\"invalid\",a);rd(c,\"onChange\");break;case \"option\":h=Gb(a,d);break;case \"select\":a._wrapperState={wasMultiple:!!d.multiple};h=n({},d,{value:void 0});F(\"invalid\",a);rd(c,\"onChange\");break;case \"textarea\":Jb(a,\nd);h=Ib(a,d);F(\"invalid\",a);rd(c,\"onChange\");break;default:h=d}od(e,h);var k=h;for(f in k)if(k.hasOwnProperty(f)){var l=k[f];\"style\"===f?md(a,l):\"dangerouslySetInnerHTML\"===f?(l=l?l.__html:void 0,null!=l&&Qb(a,l)):\"children\"===f?\"string\"===typeof l?(\"textarea\"!==e||\"\"!==l)&&Rb(a,l):\"number\"===typeof l&&Rb(a,\"\"+l):\"suppressContentEditableWarning\"!==f&&\"suppressHydrationWarning\"!==f&&\"autoFocus\"!==f&&(va.hasOwnProperty(f)?null!=l&&rd(c,f):null!=l&&Xa(a,f,l,g))}switch(e){case \"input\":xb(a);Eb(a,d,!1);\nbreak;case \"textarea\":xb(a);Lb(a);break;case \"option\":null!=d.value&&a.setAttribute(\"value\",\"\"+rb(d.value));break;case \"select\":a.multiple=!!d.multiple;c=d.value;null!=c?Hb(a,!!d.multiple,c,!1):null!=d.defaultValue&&Hb(a,!!d.multiple,d.defaultValue,!0);break;default:\"function\"===typeof h.onClick&&(a.onclick=sd)}Fd(e,d)&&(b.effectTag|=4)}null!==b.ref&&(b.effectTag|=128)}return null;case 6:if(a&&null!=b.stateNode)qi(a,b,a.memoizedProps,d);else{if(\"string\"!==typeof d&&null===b.stateNode)throw Error(u(166));\nc=ch(bh.current);ch($g.current);Wh(b)?(c=b.stateNode,d=b.memoizedProps,c[Md]=b,c.nodeValue!==d&&(b.effectTag|=4)):(c=(9===c.nodeType?c:c.ownerDocument).createTextNode(d),c[Md]=b,b.stateNode=c)}return null;case 13:H(M);d=b.memoizedState;if(0!==(b.effectTag&64))return b.expirationTime=c,b;c=null!==d;d=!1;null===a?void 0!==b.memoizedProps.fallback&&Wh(b):(e=a.memoizedState,d=null!==e,c||null===e||(e=a.child.sibling,null!==e&&(f=b.firstEffect,null!==f?(b.firstEffect=e,e.nextEffect=f):(b.firstEffect=b.lastEffect=\ne,e.nextEffect=null),e.effectTag=8)));if(c&&!d&&0!==(b.mode&2))if(null===a&&!0!==b.memoizedProps.unstable_avoidThisFallback||0!==(M.current&1))S===ti&&(S=ui);else{if(S===ti||S===ui)S=vi;0!==wi&&null!==T&&(xi(T,U),yi(T,wi))}if(c||d)b.effectTag|=4;return null;case 4:return eh(),oi(b),null;case 10:return og(b),null;case 17:return L(b.type)&&Df(),null;case 19:H(M);d=b.memoizedState;if(null===d)return null;e=0!==(b.effectTag&64);f=d.rendering;if(null===f)if(e)ri(d,!1);else{if(S!==ti||null!==a&&0!==(a.effectTag&\n64))for(f=b.child;null!==f;){a=hh(f);if(null!==a){b.effectTag|=64;ri(d,!1);e=a.updateQueue;null!==e&&(b.updateQueue=e,b.effectTag|=4);null===d.lastEffect&&(b.firstEffect=null);b.lastEffect=d.lastEffect;for(d=b.child;null!==d;)e=d,f=c,e.effectTag&=2,e.nextEffect=null,e.firstEffect=null,e.lastEffect=null,a=e.alternate,null===a?(e.childExpirationTime=0,e.expirationTime=f,e.child=null,e.memoizedProps=null,e.memoizedState=null,e.updateQueue=null,e.dependencies=null):(e.childExpirationTime=a.childExpirationTime,\ne.expirationTime=a.expirationTime,e.child=a.child,e.memoizedProps=a.memoizedProps,e.memoizedState=a.memoizedState,e.updateQueue=a.updateQueue,f=a.dependencies,e.dependencies=null===f?null:{expirationTime:f.expirationTime,firstContext:f.firstContext,responders:f.responders}),d=d.sibling;I(M,M.current&1|2);return b.child}f=f.sibling}}else{if(!e)if(a=hh(f),null!==a){if(b.effectTag|=64,e=!0,c=a.updateQueue,null!==c&&(b.updateQueue=c,b.effectTag|=4),ri(d,!0),null===d.tail&&\"hidden\"===d.tailMode&&!f.alternate)return b=\nb.lastEffect=d.lastEffect,null!==b&&(b.nextEffect=null),null}else 2*$f()-d.renderingStartTime>d.tailExpiration&&1<c&&(b.effectTag|=64,e=!0,ri(d,!1),b.expirationTime=b.childExpirationTime=c-1);d.isBackwards?(f.sibling=b.child,b.child=f):(c=d.last,null!==c?c.sibling=f:b.child=f,d.last=f)}return null!==d.tail?(0===d.tailExpiration&&(d.tailExpiration=$f()+500),c=d.tail,d.rendering=c,d.tail=c.sibling,d.lastEffect=b.lastEffect,d.renderingStartTime=$f(),c.sibling=null,b=M.current,I(M,e?b&1|2:b&1),c):null}throw Error(u(156,\nb.tag));}function zi(a){switch(a.tag){case 1:L(a.type)&&Df();var b=a.effectTag;return b&4096?(a.effectTag=b&-4097|64,a):null;case 3:eh();H(K);H(J);b=a.effectTag;if(0!==(b&64))throw Error(u(285));a.effectTag=b&-4097|64;return a;case 5:return gh(a),null;case 13:return H(M),b=a.effectTag,b&4096?(a.effectTag=b&-4097|64,a):null;case 19:return H(M),null;case 4:return eh(),null;case 10:return og(a),null;default:return null}}function Ai(a,b){return{value:a,source:b,stack:qb(b)}}\nvar Bi=\"function\"===typeof WeakSet?WeakSet:Set;function Ci(a,b){var c=b.source,d=b.stack;null===d&&null!==c&&(d=qb(c));null!==c&&pb(c.type);b=b.value;null!==a&&1===a.tag&&pb(a.type);try{console.error(b)}catch(e){setTimeout(function(){throw e;})}}function Di(a,b){try{b.props=a.memoizedProps,b.state=a.memoizedState,b.componentWillUnmount()}catch(c){Ei(a,c)}}function Fi(a){var b=a.ref;if(null!==b)if(\"function\"===typeof b)try{b(null)}catch(c){Ei(a,c)}else b.current=null}\nfunction Gi(a,b){switch(b.tag){case 0:case 11:case 15:case 22:return;case 1:if(b.effectTag&256&&null!==a){var c=a.memoizedProps,d=a.memoizedState;a=b.stateNode;b=a.getSnapshotBeforeUpdate(b.elementType===b.type?c:ig(b.type,c),d);a.__reactInternalSnapshotBeforeUpdate=b}return;case 3:case 5:case 6:case 4:case 17:return}throw Error(u(163));}\nfunction Hi(a,b){b=b.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){var c=b=b.next;do{if((c.tag&a)===a){var d=c.destroy;c.destroy=void 0;void 0!==d&&d()}c=c.next}while(c!==b)}}function Ii(a,b){b=b.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){var c=b=b.next;do{if((c.tag&a)===a){var d=c.create;c.destroy=d()}c=c.next}while(c!==b)}}\nfunction Ji(a,b,c){switch(c.tag){case 0:case 11:case 15:case 22:Ii(3,c);return;case 1:a=c.stateNode;if(c.effectTag&4)if(null===b)a.componentDidMount();else{var d=c.elementType===c.type?b.memoizedProps:ig(c.type,b.memoizedProps);a.componentDidUpdate(d,b.memoizedState,a.__reactInternalSnapshotBeforeUpdate)}b=c.updateQueue;null!==b&&Cg(c,b,a);return;case 3:b=c.updateQueue;if(null!==b){a=null;if(null!==c.child)switch(c.child.tag){case 5:a=c.child.stateNode;break;case 1:a=c.child.stateNode}Cg(c,b,a)}return;\ncase 5:a=c.stateNode;null===b&&c.effectTag&4&&Fd(c.type,c.memoizedProps)&&a.focus();return;case 6:return;case 4:return;case 12:return;case 13:null===c.memoizedState&&(c=c.alternate,null!==c&&(c=c.memoizedState,null!==c&&(c=c.dehydrated,null!==c&&Vc(c))));return;case 19:case 17:case 20:case 21:return}throw Error(u(163));}\nfunction Ki(a,b,c){\"function\"===typeof Li&&Li(b);switch(b.tag){case 0:case 11:case 14:case 15:case 22:a=b.updateQueue;if(null!==a&&(a=a.lastEffect,null!==a)){var d=a.next;cg(97<c?97:c,function(){var a=d;do{var c=a.destroy;if(void 0!==c){var g=b;try{c()}catch(h){Ei(g,h)}}a=a.next}while(a!==d)})}break;case 1:Fi(b);c=b.stateNode;\"function\"===typeof c.componentWillUnmount&&Di(b,c);break;case 5:Fi(b);break;case 4:Mi(a,b,c)}}\nfunction Ni(a){var b=a.alternate;a.return=null;a.child=null;a.memoizedState=null;a.updateQueue=null;a.dependencies=null;a.alternate=null;a.firstEffect=null;a.lastEffect=null;a.pendingProps=null;a.memoizedProps=null;a.stateNode=null;null!==b&&Ni(b)}function Oi(a){return 5===a.tag||3===a.tag||4===a.tag}\nfunction Pi(a){a:{for(var b=a.return;null!==b;){if(Oi(b)){var c=b;break a}b=b.return}throw Error(u(160));}b=c.stateNode;switch(c.tag){case 5:var d=!1;break;case 3:b=b.containerInfo;d=!0;break;case 4:b=b.containerInfo;d=!0;break;default:throw Error(u(161));}c.effectTag&16&&(Rb(b,\"\"),c.effectTag&=-17);a:b:for(c=a;;){for(;null===c.sibling;){if(null===c.return||Oi(c.return)){c=null;break a}c=c.return}c.sibling.return=c.return;for(c=c.sibling;5!==c.tag&&6!==c.tag&&18!==c.tag;){if(c.effectTag&2)continue b;\nif(null===c.child||4===c.tag)continue b;else c.child.return=c,c=c.child}if(!(c.effectTag&2)){c=c.stateNode;break a}}d?Qi(a,c,b):Ri(a,c,b)}\nfunction Qi(a,b,c){var d=a.tag,e=5===d||6===d;if(e)a=e?a.stateNode:a.stateNode.instance,b?8===c.nodeType?c.parentNode.insertBefore(a,b):c.insertBefore(a,b):(8===c.nodeType?(b=c.parentNode,b.insertBefore(a,c)):(b=c,b.appendChild(a)),c=c._reactRootContainer,null!==c&&void 0!==c||null!==b.onclick||(b.onclick=sd));else if(4!==d&&(a=a.child,null!==a))for(Qi(a,b,c),a=a.sibling;null!==a;)Qi(a,b,c),a=a.sibling}\nfunction Ri(a,b,c){var d=a.tag,e=5===d||6===d;if(e)a=e?a.stateNode:a.stateNode.instance,b?c.insertBefore(a,b):c.appendChild(a);else if(4!==d&&(a=a.child,null!==a))for(Ri(a,b,c),a=a.sibling;null!==a;)Ri(a,b,c),a=a.sibling}\nfunction Mi(a,b,c){for(var d=b,e=!1,f,g;;){if(!e){e=d.return;a:for(;;){if(null===e)throw Error(u(160));f=e.stateNode;switch(e.tag){case 5:g=!1;break a;case 3:f=f.containerInfo;g=!0;break a;case 4:f=f.containerInfo;g=!0;break a}e=e.return}e=!0}if(5===d.tag||6===d.tag){a:for(var h=a,k=d,l=c,m=k;;)if(Ki(h,m,l),null!==m.child&&4!==m.tag)m.child.return=m,m=m.child;else{if(m===k)break a;for(;null===m.sibling;){if(null===m.return||m.return===k)break a;m=m.return}m.sibling.return=m.return;m=m.sibling}g?(h=\nf,k=d.stateNode,8===h.nodeType?h.parentNode.removeChild(k):h.removeChild(k)):f.removeChild(d.stateNode)}else if(4===d.tag){if(null!==d.child){f=d.stateNode.containerInfo;g=!0;d.child.return=d;d=d.child;continue}}else if(Ki(a,d,c),null!==d.child){d.child.return=d;d=d.child;continue}if(d===b)break;for(;null===d.sibling;){if(null===d.return||d.return===b)return;d=d.return;4===d.tag&&(e=!1)}d.sibling.return=d.return;d=d.sibling}}\nfunction Si(a,b){switch(b.tag){case 0:case 11:case 14:case 15:case 22:Hi(3,b);return;case 1:return;case 5:var c=b.stateNode;if(null!=c){var d=b.memoizedProps,e=null!==a?a.memoizedProps:d;a=b.type;var f=b.updateQueue;b.updateQueue=null;if(null!==f){c[Nd]=d;\"input\"===a&&\"radio\"===d.type&&null!=d.name&&Bb(c,d);pd(a,e);b=pd(a,d);for(e=0;e<f.length;e+=2){var g=f[e],h=f[e+1];\"style\"===g?md(c,h):\"dangerouslySetInnerHTML\"===g?Qb(c,h):\"children\"===g?Rb(c,h):Xa(c,g,h,b)}switch(a){case \"input\":Cb(c,d);break;\ncase \"textarea\":Kb(c,d);break;case \"select\":b=c._wrapperState.wasMultiple,c._wrapperState.wasMultiple=!!d.multiple,a=d.value,null!=a?Hb(c,!!d.multiple,a,!1):b!==!!d.multiple&&(null!=d.defaultValue?Hb(c,!!d.multiple,d.defaultValue,!0):Hb(c,!!d.multiple,d.multiple?[]:\"\",!1))}}}return;case 6:if(null===b.stateNode)throw Error(u(162));b.stateNode.nodeValue=b.memoizedProps;return;case 3:b=b.stateNode;b.hydrate&&(b.hydrate=!1,Vc(b.containerInfo));return;case 12:return;case 13:c=b;null===b.memoizedState?\nd=!1:(d=!0,c=b.child,Ti=$f());if(null!==c)a:for(a=c;;){if(5===a.tag)f=a.stateNode,d?(f=f.style,\"function\"===typeof f.setProperty?f.setProperty(\"display\",\"none\",\"important\"):f.display=\"none\"):(f=a.stateNode,e=a.memoizedProps.style,e=void 0!==e&&null!==e&&e.hasOwnProperty(\"display\")?e.display:null,f.style.display=ld(\"display\",e));else if(6===a.tag)a.stateNode.nodeValue=d?\"\":a.memoizedProps;else if(13===a.tag&&null!==a.memoizedState&&null===a.memoizedState.dehydrated){f=a.child.sibling;f.return=a;a=\nf;continue}else if(null!==a.child){a.child.return=a;a=a.child;continue}if(a===c)break;for(;null===a.sibling;){if(null===a.return||a.return===c)break a;a=a.return}a.sibling.return=a.return;a=a.sibling}Ui(b);return;case 19:Ui(b);return;case 17:return}throw Error(u(163));}function Ui(a){var b=a.updateQueue;if(null!==b){a.updateQueue=null;var c=a.stateNode;null===c&&(c=a.stateNode=new Bi);b.forEach(function(b){var d=Vi.bind(null,a,b);c.has(b)||(c.add(b),b.then(d,d))})}}\nvar Wi=\"function\"===typeof WeakMap?WeakMap:Map;function Xi(a,b,c){c=wg(c,null);c.tag=3;c.payload={element:null};var d=b.value;c.callback=function(){Yi||(Yi=!0,Zi=d);Ci(a,b)};return c}\nfunction $i(a,b,c){c=wg(c,null);c.tag=3;var d=a.type.getDerivedStateFromError;if(\"function\"===typeof d){var e=b.value;c.payload=function(){Ci(a,b);return d(e)}}var f=a.stateNode;null!==f&&\"function\"===typeof f.componentDidCatch&&(c.callback=function(){\"function\"!==typeof d&&(null===aj?aj=new Set([this]):aj.add(this),Ci(a,b));var c=b.stack;this.componentDidCatch(b.value,{componentStack:null!==c?c:\"\"})});return c}\nvar bj=Math.ceil,cj=Wa.ReactCurrentDispatcher,dj=Wa.ReactCurrentOwner,V=0,ej=8,fj=16,gj=32,ti=0,hj=1,ij=2,ui=3,vi=4,jj=5,W=V,T=null,X=null,U=0,S=ti,kj=null,lj=1073741823,mj=1073741823,nj=null,wi=0,oj=!1,Ti=0,pj=500,Y=null,Yi=!1,Zi=null,aj=null,qj=!1,rj=null,sj=90,tj=null,uj=0,vj=null,wj=0;function Gg(){return(W&(fj|gj))!==V?1073741821-($f()/10|0):0!==wj?wj:wj=1073741821-($f()/10|0)}\nfunction Hg(a,b,c){b=b.mode;if(0===(b&2))return 1073741823;var d=ag();if(0===(b&4))return 99===d?1073741823:1073741822;if((W&fj)!==V)return U;if(null!==c)a=hg(a,c.timeoutMs|0||5E3,250);else switch(d){case 99:a=1073741823;break;case 98:a=hg(a,150,100);break;case 97:case 96:a=hg(a,5E3,250);break;case 95:a=2;break;default:throw Error(u(326));}null!==T&&a===U&&--a;return a}\nfunction Ig(a,b){if(50<uj)throw uj=0,vj=null,Error(u(185));a=xj(a,b);if(null!==a){var c=ag();1073741823===b?(W&ej)!==V&&(W&(fj|gj))===V?yj(a):(Z(a),W===V&&gg()):Z(a);(W&4)===V||98!==c&&99!==c||(null===tj?tj=new Map([[a,b]]):(c=tj.get(a),(void 0===c||c>b)&&tj.set(a,b)))}}\nfunction xj(a,b){a.expirationTime<b&&(a.expirationTime=b);var c=a.alternate;null!==c&&c.expirationTime<b&&(c.expirationTime=b);var d=a.return,e=null;if(null===d&&3===a.tag)e=a.stateNode;else for(;null!==d;){c=d.alternate;d.childExpirationTime<b&&(d.childExpirationTime=b);null!==c&&c.childExpirationTime<b&&(c.childExpirationTime=b);if(null===d.return&&3===d.tag){e=d.stateNode;break}d=d.return}null!==e&&(T===e&&(Bg(b),S===vi&&xi(e,U)),yi(e,b));return e}\nfunction zj(a){var b=a.lastExpiredTime;if(0!==b)return b;b=a.firstPendingTime;if(!Aj(a,b))return b;var c=a.lastPingedTime;a=a.nextKnownPendingLevel;a=c>a?c:a;return 2>=a&&b!==a?0:a}\nfunction Z(a){if(0!==a.lastExpiredTime)a.callbackExpirationTime=1073741823,a.callbackPriority=99,a.callbackNode=eg(yj.bind(null,a));else{var b=zj(a),c=a.callbackNode;if(0===b)null!==c&&(a.callbackNode=null,a.callbackExpirationTime=0,a.callbackPriority=90);else{var d=Gg();1073741823===b?d=99:1===b||2===b?d=95:(d=10*(1073741821-b)-10*(1073741821-d),d=0>=d?99:250>=d?98:5250>=d?97:95);if(null!==c){var e=a.callbackPriority;if(a.callbackExpirationTime===b&&e>=d)return;c!==Tf&&Kf(c)}a.callbackExpirationTime=\nb;a.callbackPriority=d;b=1073741823===b?eg(yj.bind(null,a)):dg(d,Bj.bind(null,a),{timeout:10*(1073741821-b)-$f()});a.callbackNode=b}}}\nfunction Bj(a,b){wj=0;if(b)return b=Gg(),Cj(a,b),Z(a),null;var c=zj(a);if(0!==c){b=a.callbackNode;if((W&(fj|gj))!==V)throw Error(u(327));Dj();a===T&&c===U||Ej(a,c);if(null!==X){var d=W;W|=fj;var e=Fj();do try{Gj();break}catch(h){Hj(a,h)}while(1);ng();W=d;cj.current=e;if(S===hj)throw b=kj,Ej(a,c),xi(a,c),Z(a),b;if(null===X)switch(e=a.finishedWork=a.current.alternate,a.finishedExpirationTime=c,d=S,T=null,d){case ti:case hj:throw Error(u(345));case ij:Cj(a,2<c?2:c);break;case ui:xi(a,c);d=a.lastSuspendedTime;\nc===d&&(a.nextKnownPendingLevel=Ij(e));if(1073741823===lj&&(e=Ti+pj-$f(),10<e)){if(oj){var f=a.lastPingedTime;if(0===f||f>=c){a.lastPingedTime=c;Ej(a,c);break}}f=zj(a);if(0!==f&&f!==c)break;if(0!==d&&d!==c){a.lastPingedTime=d;break}a.timeoutHandle=Hd(Jj.bind(null,a),e);break}Jj(a);break;case vi:xi(a,c);d=a.lastSuspendedTime;c===d&&(a.nextKnownPendingLevel=Ij(e));if(oj&&(e=a.lastPingedTime,0===e||e>=c)){a.lastPingedTime=c;Ej(a,c);break}e=zj(a);if(0!==e&&e!==c)break;if(0!==d&&d!==c){a.lastPingedTime=\nd;break}1073741823!==mj?d=10*(1073741821-mj)-$f():1073741823===lj?d=0:(d=10*(1073741821-lj)-5E3,e=$f(),c=10*(1073741821-c)-e,d=e-d,0>d&&(d=0),d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3E3>d?3E3:4320>d?4320:1960*bj(d/1960))-d,c<d&&(d=c));if(10<d){a.timeoutHandle=Hd(Jj.bind(null,a),d);break}Jj(a);break;case jj:if(1073741823!==lj&&null!==nj){f=lj;var g=nj;d=g.busyMinDurationMs|0;0>=d?d=0:(e=g.busyDelayMs|0,f=$f()-(10*(1073741821-f)-(g.timeoutMs|0||5E3)),d=f<=e?0:e+d-f);if(10<d){xi(a,c);a.timeoutHandle=\nHd(Jj.bind(null,a),d);break}}Jj(a);break;default:throw Error(u(329));}Z(a);if(a.callbackNode===b)return Bj.bind(null,a)}}return null}\nfunction yj(a){var b=a.lastExpiredTime;b=0!==b?b:1073741823;if((W&(fj|gj))!==V)throw Error(u(327));Dj();a===T&&b===U||Ej(a,b);if(null!==X){var c=W;W|=fj;var d=Fj();do try{Kj();break}catch(e){Hj(a,e)}while(1);ng();W=c;cj.current=d;if(S===hj)throw c=kj,Ej(a,b),xi(a,b),Z(a),c;if(null!==X)throw Error(u(261));a.finishedWork=a.current.alternate;a.finishedExpirationTime=b;T=null;Jj(a);Z(a)}return null}function Lj(){if(null!==tj){var a=tj;tj=null;a.forEach(function(a,c){Cj(c,a);Z(c)});gg()}}\nfunction Mj(a,b){var c=W;W|=1;try{return a(b)}finally{W=c,W===V&&gg()}}function Nj(a,b){var c=W;W&=-2;W|=ej;try{return a(b)}finally{W=c,W===V&&gg()}}\nfunction Ej(a,b){a.finishedWork=null;a.finishedExpirationTime=0;var c=a.timeoutHandle;-1!==c&&(a.timeoutHandle=-1,Id(c));if(null!==X)for(c=X.return;null!==c;){var d=c;switch(d.tag){case 1:d=d.type.childContextTypes;null!==d&&void 0!==d&&Df();break;case 3:eh();H(K);H(J);break;case 5:gh(d);break;case 4:eh();break;case 13:H(M);break;case 19:H(M);break;case 10:og(d)}c=c.return}T=a;X=Sg(a.current,null);U=b;S=ti;kj=null;mj=lj=1073741823;nj=null;wi=0;oj=!1}\nfunction Hj(a,b){do{try{ng();jh.current=sh;if(mh)for(var c=N.memoizedState;null!==c;){var d=c.queue;null!==d&&(d.pending=null);c=c.next}lh=0;P=O=N=null;mh=!1;if(null===X||null===X.return)return S=hj,kj=b,X=null;a:{var e=a,f=X.return,g=X,h=b;b=U;g.effectTag|=2048;g.firstEffect=g.lastEffect=null;if(null!==h&&\"object\"===typeof h&&\"function\"===typeof h.then){var k=h;if(0===(g.mode&2)){var l=g.alternate;l?(g.updateQueue=l.updateQueue,g.memoizedState=l.memoizedState,g.expirationTime=l.expirationTime):(g.updateQueue=\nnull,g.memoizedState=null)}var m=0!==(M.current&1),p=f;do{var x;if(x=13===p.tag){var z=p.memoizedState;if(null!==z)x=null!==z.dehydrated?!0:!1;else{var ca=p.memoizedProps;x=void 0===ca.fallback?!1:!0!==ca.unstable_avoidThisFallback?!0:m?!1:!0}}if(x){var D=p.updateQueue;if(null===D){var t=new Set;t.add(k);p.updateQueue=t}else D.add(k);if(0===(p.mode&2)){p.effectTag|=64;g.effectTag&=-2981;if(1===g.tag)if(null===g.alternate)g.tag=17;else{var y=wg(1073741823,null);y.tag=2;xg(g,y)}g.expirationTime=1073741823;\nbreak a}h=void 0;g=b;var A=e.pingCache;null===A?(A=e.pingCache=new Wi,h=new Set,A.set(k,h)):(h=A.get(k),void 0===h&&(h=new Set,A.set(k,h)));if(!h.has(g)){h.add(g);var q=Oj.bind(null,e,k,g);k.then(q,q)}p.effectTag|=4096;p.expirationTime=b;break a}p=p.return}while(null!==p);h=Error((pb(g.type)||\"A React component\")+\" suspended while rendering, but no fallback UI was specified.\\n\\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display.\"+qb(g))}S!==\njj&&(S=ij);h=Ai(h,g);p=f;do{switch(p.tag){case 3:k=h;p.effectTag|=4096;p.expirationTime=b;var B=Xi(p,k,b);yg(p,B);break a;case 1:k=h;var w=p.type,ub=p.stateNode;if(0===(p.effectTag&64)&&(\"function\"===typeof w.getDerivedStateFromError||null!==ub&&\"function\"===typeof ub.componentDidCatch&&(null===aj||!aj.has(ub)))){p.effectTag|=4096;p.expirationTime=b;var vb=$i(p,k,b);yg(p,vb);break a}}p=p.return}while(null!==p)}X=Pj(X)}catch(Xc){b=Xc;continue}break}while(1)}\nfunction Fj(){var a=cj.current;cj.current=sh;return null===a?sh:a}function Ag(a,b){a<lj&&2<a&&(lj=a);null!==b&&a<mj&&2<a&&(mj=a,nj=b)}function Bg(a){a>wi&&(wi=a)}function Kj(){for(;null!==X;)X=Qj(X)}function Gj(){for(;null!==X&&!Uf();)X=Qj(X)}function Qj(a){var b=Rj(a.alternate,a,U);a.memoizedProps=a.pendingProps;null===b&&(b=Pj(a));dj.current=null;return b}\nfunction Pj(a){X=a;do{var b=X.alternate;a=X.return;if(0===(X.effectTag&2048)){b=si(b,X,U);if(1===U||1!==X.childExpirationTime){for(var c=0,d=X.child;null!==d;){var e=d.expirationTime,f=d.childExpirationTime;e>c&&(c=e);f>c&&(c=f);d=d.sibling}X.childExpirationTime=c}if(null!==b)return b;null!==a&&0===(a.effectTag&2048)&&(null===a.firstEffect&&(a.firstEffect=X.firstEffect),null!==X.lastEffect&&(null!==a.lastEffect&&(a.lastEffect.nextEffect=X.firstEffect),a.lastEffect=X.lastEffect),1<X.effectTag&&(null!==\na.lastEffect?a.lastEffect.nextEffect=X:a.firstEffect=X,a.lastEffect=X))}else{b=zi(X);if(null!==b)return b.effectTag&=2047,b;null!==a&&(a.firstEffect=a.lastEffect=null,a.effectTag|=2048)}b=X.sibling;if(null!==b)return b;X=a}while(null!==X);S===ti&&(S=jj);return null}function Ij(a){var b=a.expirationTime;a=a.childExpirationTime;return b>a?b:a}function Jj(a){var b=ag();cg(99,Sj.bind(null,a,b));return null}\nfunction Sj(a,b){do Dj();while(null!==rj);if((W&(fj|gj))!==V)throw Error(u(327));var c=a.finishedWork,d=a.finishedExpirationTime;if(null===c)return null;a.finishedWork=null;a.finishedExpirationTime=0;if(c===a.current)throw Error(u(177));a.callbackNode=null;a.callbackExpirationTime=0;a.callbackPriority=90;a.nextKnownPendingLevel=0;var e=Ij(c);a.firstPendingTime=e;d<=a.lastSuspendedTime?a.firstSuspendedTime=a.lastSuspendedTime=a.nextKnownPendingLevel=0:d<=a.firstSuspendedTime&&(a.firstSuspendedTime=\nd-1);d<=a.lastPingedTime&&(a.lastPingedTime=0);d<=a.lastExpiredTime&&(a.lastExpiredTime=0);a===T&&(X=T=null,U=0);1<c.effectTag?null!==c.lastEffect?(c.lastEffect.nextEffect=c,e=c.firstEffect):e=c:e=c.firstEffect;if(null!==e){var f=W;W|=gj;dj.current=null;Dd=fd;var g=xd();if(yd(g)){if(\"selectionStart\"in g)var h={start:g.selectionStart,end:g.selectionEnd};else a:{h=(h=g.ownerDocument)&&h.defaultView||window;var k=h.getSelection&&h.getSelection();if(k&&0!==k.rangeCount){h=k.anchorNode;var l=k.anchorOffset,\nm=k.focusNode;k=k.focusOffset;try{h.nodeType,m.nodeType}catch(wb){h=null;break a}var p=0,x=-1,z=-1,ca=0,D=0,t=g,y=null;b:for(;;){for(var A;;){t!==h||0!==l&&3!==t.nodeType||(x=p+l);t!==m||0!==k&&3!==t.nodeType||(z=p+k);3===t.nodeType&&(p+=t.nodeValue.length);if(null===(A=t.firstChild))break;y=t;t=A}for(;;){if(t===g)break b;y===h&&++ca===l&&(x=p);y===m&&++D===k&&(z=p);if(null!==(A=t.nextSibling))break;t=y;y=t.parentNode}t=A}h=-1===x||-1===z?null:{start:x,end:z}}else h=null}h=h||{start:0,end:0}}else h=\nnull;Ed={activeElementDetached:null,focusedElem:g,selectionRange:h};fd=!1;Y=e;do try{Tj()}catch(wb){if(null===Y)throw Error(u(330));Ei(Y,wb);Y=Y.nextEffect}while(null!==Y);Y=e;do try{for(g=a,h=b;null!==Y;){var q=Y.effectTag;q&16&&Rb(Y.stateNode,\"\");if(q&128){var B=Y.alternate;if(null!==B){var w=B.ref;null!==w&&(\"function\"===typeof w?w(null):w.current=null)}}switch(q&1038){case 2:Pi(Y);Y.effectTag&=-3;break;case 6:Pi(Y);Y.effectTag&=-3;Si(Y.alternate,Y);break;case 1024:Y.effectTag&=-1025;break;case 1028:Y.effectTag&=\n-1025;Si(Y.alternate,Y);break;case 4:Si(Y.alternate,Y);break;case 8:l=Y,Mi(g,l,h),Ni(l)}Y=Y.nextEffect}}catch(wb){if(null===Y)throw Error(u(330));Ei(Y,wb);Y=Y.nextEffect}while(null!==Y);w=Ed;B=xd();q=w.focusedElem;h=w.selectionRange;if(B!==q&&q&&q.ownerDocument&&wd(q.ownerDocument.documentElement,q)){null!==h&&yd(q)&&(B=h.start,w=h.end,void 0===w&&(w=B),\"selectionStart\"in q?(q.selectionStart=B,q.selectionEnd=Math.min(w,q.value.length)):(w=(B=q.ownerDocument||document)&&B.defaultView||window,w.getSelection&&\n(w=w.getSelection(),l=q.textContent.length,g=Math.min(h.start,l),h=void 0===h.end?g:Math.min(h.end,l),!w.extend&&g>h&&(l=h,h=g,g=l),l=vd(q,g),m=vd(q,h),l&&m&&(1!==w.rangeCount||w.anchorNode!==l.node||w.anchorOffset!==l.offset||w.focusNode!==m.node||w.focusOffset!==m.offset)&&(B=B.createRange(),B.setStart(l.node,l.offset),w.removeAllRanges(),g>h?(w.addRange(B),w.extend(m.node,m.offset)):(B.setEnd(m.node,m.offset),w.addRange(B))))));B=[];for(w=q;w=w.parentNode;)1===w.nodeType&&B.push({element:w,left:w.scrollLeft,\ntop:w.scrollTop});\"function\"===typeof q.focus&&q.focus();for(q=0;q<B.length;q++)w=B[q],w.element.scrollLeft=w.left,w.element.scrollTop=w.top}fd=!!Dd;Ed=Dd=null;a.current=c;Y=e;do try{for(q=a;null!==Y;){var ub=Y.effectTag;ub&36&&Ji(q,Y.alternate,Y);if(ub&128){B=void 0;var vb=Y.ref;if(null!==vb){var Xc=Y.stateNode;switch(Y.tag){case 5:B=Xc;break;default:B=Xc}\"function\"===typeof vb?vb(B):vb.current=B}}Y=Y.nextEffect}}catch(wb){if(null===Y)throw Error(u(330));Ei(Y,wb);Y=Y.nextEffect}while(null!==Y);Y=\nnull;Vf();W=f}else a.current=c;if(qj)qj=!1,rj=a,sj=b;else for(Y=e;null!==Y;)b=Y.nextEffect,Y.nextEffect=null,Y=b;b=a.firstPendingTime;0===b&&(aj=null);1073741823===b?a===vj?uj++:(uj=0,vj=a):uj=0;\"function\"===typeof Uj&&Uj(c.stateNode,d);Z(a);if(Yi)throw Yi=!1,a=Zi,Zi=null,a;if((W&ej)!==V)return null;gg();return null}function Tj(){for(;null!==Y;){var a=Y.effectTag;0!==(a&256)&&Gi(Y.alternate,Y);0===(a&512)||qj||(qj=!0,dg(97,function(){Dj();return null}));Y=Y.nextEffect}}\nfunction Dj(){if(90!==sj){var a=97<sj?97:sj;sj=90;return cg(a,Vj)}}function Vj(){if(null===rj)return!1;var a=rj;rj=null;if((W&(fj|gj))!==V)throw Error(u(331));var b=W;W|=gj;for(a=a.current.firstEffect;null!==a;){try{var c=a;if(0!==(c.effectTag&512))switch(c.tag){case 0:case 11:case 15:case 22:Hi(5,c),Ii(5,c)}}catch(d){if(null===a)throw Error(u(330));Ei(a,d)}c=a.nextEffect;a.nextEffect=null;a=c}W=b;gg();return!0}\nfunction Wj(a,b,c){b=Ai(c,b);b=Xi(a,b,1073741823);xg(a,b);a=xj(a,1073741823);null!==a&&Z(a)}function Ei(a,b){if(3===a.tag)Wj(a,a,b);else for(var c=a.return;null!==c;){if(3===c.tag){Wj(c,a,b);break}else if(1===c.tag){var d=c.stateNode;if(\"function\"===typeof c.type.getDerivedStateFromError||\"function\"===typeof d.componentDidCatch&&(null===aj||!aj.has(d))){a=Ai(b,a);a=$i(c,a,1073741823);xg(c,a);c=xj(c,1073741823);null!==c&&Z(c);break}}c=c.return}}\nfunction Oj(a,b,c){var d=a.pingCache;null!==d&&d.delete(b);T===a&&U===c?S===vi||S===ui&&1073741823===lj&&$f()-Ti<pj?Ej(a,U):oj=!0:Aj(a,c)&&(b=a.lastPingedTime,0!==b&&b<c||(a.lastPingedTime=c,Z(a)))}function Vi(a,b){var c=a.stateNode;null!==c&&c.delete(b);b=0;0===b&&(b=Gg(),b=Hg(b,a,null));a=xj(a,b);null!==a&&Z(a)}var Rj;\nRj=function(a,b,c){var d=b.expirationTime;if(null!==a){var e=b.pendingProps;if(a.memoizedProps!==e||K.current)rg=!0;else{if(d<c){rg=!1;switch(b.tag){case 3:hi(b);Xh();break;case 5:fh(b);if(b.mode&4&&1!==c&&e.hidden)return b.expirationTime=b.childExpirationTime=1,null;break;case 1:L(b.type)&&Gf(b);break;case 4:dh(b,b.stateNode.containerInfo);break;case 10:d=b.memoizedProps.value;e=b.type._context;I(jg,e._currentValue);e._currentValue=d;break;case 13:if(null!==b.memoizedState){d=b.child.childExpirationTime;\nif(0!==d&&d>=c)return ji(a,b,c);I(M,M.current&1);b=$h(a,b,c);return null!==b?b.sibling:null}I(M,M.current&1);break;case 19:d=b.childExpirationTime>=c;if(0!==(a.effectTag&64)){if(d)return mi(a,b,c);b.effectTag|=64}e=b.memoizedState;null!==e&&(e.rendering=null,e.tail=null);I(M,M.current);if(!d)return null}return $h(a,b,c)}rg=!1}}else rg=!1;b.expirationTime=0;switch(b.tag){case 2:d=b.type;null!==a&&(a.alternate=null,b.alternate=null,b.effectTag|=2);a=b.pendingProps;e=Cf(b,J.current);qg(b,c);e=oh(null,\nb,d,a,e,c);b.effectTag|=1;if(\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof){b.tag=1;b.memoizedState=null;b.updateQueue=null;if(L(d)){var f=!0;Gf(b)}else f=!1;b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null;ug(b);var g=d.getDerivedStateFromProps;\"function\"===typeof g&&Fg(b,d,g,a);e.updater=Jg;b.stateNode=e;e._reactInternalFiber=b;Ng(b,d,a,c);b=gi(null,b,d,!0,f,c)}else b.tag=0,R(null,b,e,c),b=b.child;return b;case 16:a:{e=b.elementType;null!==a&&(a.alternate=\nnull,b.alternate=null,b.effectTag|=2);a=b.pendingProps;ob(e);if(1!==e._status)throw e._result;e=e._result;b.type=e;f=b.tag=Xj(e);a=ig(e,a);switch(f){case 0:b=di(null,b,e,a,c);break a;case 1:b=fi(null,b,e,a,c);break a;case 11:b=Zh(null,b,e,a,c);break a;case 14:b=ai(null,b,e,ig(e.type,a),d,c);break a}throw Error(u(306,e,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ig(d,e),di(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ig(d,e),fi(a,b,d,e,c);\ncase 3:hi(b);d=b.updateQueue;if(null===a||null===d)throw Error(u(282));d=b.pendingProps;e=b.memoizedState;e=null!==e?e.element:null;vg(a,b);zg(b,d,null,c);d=b.memoizedState.element;if(d===e)Xh(),b=$h(a,b,c);else{if(e=b.stateNode.hydrate)Ph=Jd(b.stateNode.containerInfo.firstChild),Oh=b,e=Qh=!0;if(e)for(c=Yg(b,null,d,c),b.child=c;c;)c.effectTag=c.effectTag&-3|1024,c=c.sibling;else R(a,b,d,c),Xh();b=b.child}return b;case 5:return fh(b),null===a&&Uh(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:\nnull,g=e.children,Gd(d,e)?g=null:null!==f&&Gd(d,f)&&(b.effectTag|=16),ei(a,b),b.mode&4&&1!==c&&e.hidden?(b.expirationTime=b.childExpirationTime=1,b=null):(R(a,b,g,c),b=b.child),b;case 6:return null===a&&Uh(b),null;case 13:return ji(a,b,c);case 4:return dh(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Xg(b,null,d,c):R(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ig(d,e),Zh(a,b,d,e,c);case 7:return R(a,b,b.pendingProps,c),b.child;case 8:return R(a,\nb,b.pendingProps.children,c),b.child;case 12:return R(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;g=b.memoizedProps;f=e.value;var h=b.type._context;I(jg,h._currentValue);h._currentValue=f;if(null!==g)if(h=g.value,f=$e(h,f)?0:(\"function\"===typeof d._calculateChangedBits?d._calculateChangedBits(h,f):1073741823)|0,0===f){if(g.children===e.children&&!K.current){b=$h(a,b,c);break a}}else for(h=b.child,null!==h&&(h.return=b);null!==h;){var k=h.dependencies;if(null!==\nk){g=h.child;for(var l=k.firstContext;null!==l;){if(l.context===d&&0!==(l.observedBits&f)){1===h.tag&&(l=wg(c,null),l.tag=2,xg(h,l));h.expirationTime<c&&(h.expirationTime=c);l=h.alternate;null!==l&&l.expirationTime<c&&(l.expirationTime=c);pg(h.return,c);k.expirationTime<c&&(k.expirationTime=c);break}l=l.next}}else g=10===h.tag?h.type===b.type?null:h.child:h.child;if(null!==g)g.return=h;else for(g=h;null!==g;){if(g===b){g=null;break}h=g.sibling;if(null!==h){h.return=g.return;g=h;break}g=g.return}h=\ng}R(a,b,e.children,c);b=b.child}return b;case 9:return e=b.type,f=b.pendingProps,d=f.children,qg(b,c),e=sg(e,f.unstable_observedBits),d=d(e),b.effectTag|=1,R(a,b,d,c),b.child;case 14:return e=b.type,f=ig(e,b.pendingProps),f=ig(e.type,f),ai(a,b,e,f,d,c);case 15:return ci(a,b,b.type,b.pendingProps,d,c);case 17:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:ig(d,e),null!==a&&(a.alternate=null,b.alternate=null,b.effectTag|=2),b.tag=1,L(d)?(a=!0,Gf(b)):a=!1,qg(b,c),Lg(b,d,e),Ng(b,d,e,c),gi(null,\nb,d,!0,a,c);case 19:return mi(a,b,c)}throw Error(u(156,b.tag));};var Uj=null,Li=null;function Yj(a){if(\"undefined\"===typeof __REACT_DEVTOOLS_GLOBAL_HOOK__)return!1;var b=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(b.isDisabled||!b.supportsFiber)return!0;try{var c=b.inject(a);Uj=function(a){try{b.onCommitFiberRoot(c,a,void 0,64===(a.current.effectTag&64))}catch(e){}};Li=function(a){try{b.onCommitFiberUnmount(c,a)}catch(e){}}}catch(d){}return!0}\nfunction Zj(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.effectTag=0;this.lastEffect=this.firstEffect=this.nextEffect=null;this.childExpirationTime=this.expirationTime=0;this.alternate=null}function Sh(a,b,c,d){return new Zj(a,b,c,d)}\nfunction bi(a){a=a.prototype;return!(!a||!a.isReactComponent)}function Xj(a){if(\"function\"===typeof a)return bi(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===gb)return 11;if(a===jb)return 14}return 2}\nfunction Sg(a,b){var c=a.alternate;null===c?(c=Sh(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.effectTag=0,c.nextEffect=null,c.firstEffect=null,c.lastEffect=null);c.childExpirationTime=a.childExpirationTime;c.expirationTime=a.expirationTime;c.child=a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=a.updateQueue;b=a.dependencies;c.dependencies=null===b?null:{expirationTime:b.expirationTime,\nfirstContext:b.firstContext,responders:b.responders};c.sibling=a.sibling;c.index=a.index;c.ref=a.ref;return c}\nfunction Ug(a,b,c,d,e,f){var g=2;d=a;if(\"function\"===typeof a)bi(a)&&(g=1);else if(\"string\"===typeof a)g=5;else a:switch(a){case ab:return Wg(c.children,e,f,b);case fb:g=8;e|=7;break;case bb:g=8;e|=1;break;case cb:return a=Sh(12,c,b,e|8),a.elementType=cb,a.type=cb,a.expirationTime=f,a;case hb:return a=Sh(13,c,b,e),a.type=hb,a.elementType=hb,a.expirationTime=f,a;case ib:return a=Sh(19,c,b,e),a.elementType=ib,a.expirationTime=f,a;default:if(\"object\"===typeof a&&null!==a)switch(a.$$typeof){case db:g=\n10;break a;case eb:g=9;break a;case gb:g=11;break a;case jb:g=14;break a;case kb:g=16;d=null;break a;case lb:g=22;break a}throw Error(u(130,null==a?a:typeof a,\"\"));}b=Sh(g,c,b,e);b.elementType=a;b.type=d;b.expirationTime=f;return b}function Wg(a,b,c,d){a=Sh(7,a,d,b);a.expirationTime=c;return a}function Tg(a,b,c){a=Sh(6,a,null,b);a.expirationTime=c;return a}\nfunction Vg(a,b,c){b=Sh(4,null!==a.children?a.children:[],a.key,b);b.expirationTime=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}\nfunction ak(a,b,c){this.tag=b;this.current=null;this.containerInfo=a;this.pingCache=this.pendingChildren=null;this.finishedExpirationTime=0;this.finishedWork=null;this.timeoutHandle=-1;this.pendingContext=this.context=null;this.hydrate=c;this.callbackNode=null;this.callbackPriority=90;this.lastExpiredTime=this.lastPingedTime=this.nextKnownPendingLevel=this.lastSuspendedTime=this.firstSuspendedTime=this.firstPendingTime=0}\nfunction Aj(a,b){var c=a.firstSuspendedTime;a=a.lastSuspendedTime;return 0!==c&&c>=b&&a<=b}function xi(a,b){var c=a.firstSuspendedTime,d=a.lastSuspendedTime;c<b&&(a.firstSuspendedTime=b);if(d>b||0===c)a.lastSuspendedTime=b;b<=a.lastPingedTime&&(a.lastPingedTime=0);b<=a.lastExpiredTime&&(a.lastExpiredTime=0)}\nfunction yi(a,b){b>a.firstPendingTime&&(a.firstPendingTime=b);var c=a.firstSuspendedTime;0!==c&&(b>=c?a.firstSuspendedTime=a.lastSuspendedTime=a.nextKnownPendingLevel=0:b>=a.lastSuspendedTime&&(a.lastSuspendedTime=b+1),b>a.nextKnownPendingLevel&&(a.nextKnownPendingLevel=b))}function Cj(a,b){var c=a.lastExpiredTime;if(0===c||c>b)a.lastExpiredTime=b}\nfunction bk(a,b,c,d){var e=b.current,f=Gg(),g=Dg.suspense;f=Hg(f,e,g);a:if(c){c=c._reactInternalFiber;b:{if(dc(c)!==c||1!==c.tag)throw Error(u(170));var h=c;do{switch(h.tag){case 3:h=h.stateNode.context;break b;case 1:if(L(h.type)){h=h.stateNode.__reactInternalMemoizedMergedChildContext;break b}}h=h.return}while(null!==h);throw Error(u(171));}if(1===c.tag){var k=c.type;if(L(k)){c=Ff(c,k,h);break a}}c=h}else c=Af;null===b.context?b.context=c:b.pendingContext=c;b=wg(f,g);b.payload={element:a};d=void 0===\nd?null:d;null!==d&&(b.callback=d);xg(e,b);Ig(e,f);return f}function ck(a){a=a.current;if(!a.child)return null;switch(a.child.tag){case 5:return a.child.stateNode;default:return a.child.stateNode}}function dk(a,b){a=a.memoizedState;null!==a&&null!==a.dehydrated&&a.retryTime<b&&(a.retryTime=b)}function ek(a,b){dk(a,b);(a=a.alternate)&&dk(a,b)}\nfunction fk(a,b,c){c=null!=c&&!0===c.hydrate;var d=new ak(a,b,c),e=Sh(3,null,null,2===b?7:1===b?3:0);d.current=e;e.stateNode=d;ug(e);a[Od]=d.current;c&&0!==b&&Jc(a,9===a.nodeType?a:a.ownerDocument);this._internalRoot=d}fk.prototype.render=function(a){bk(a,this._internalRoot,null,null)};fk.prototype.unmount=function(){var a=this._internalRoot,b=a.containerInfo;bk(null,a,null,function(){b[Od]=null})};\nfunction gk(a){return!(!a||1!==a.nodeType&&9!==a.nodeType&&11!==a.nodeType&&(8!==a.nodeType||\" react-mount-point-unstable \"!==a.nodeValue))}function hk(a,b){b||(b=a?9===a.nodeType?a.documentElement:a.firstChild:null,b=!(!b||1!==b.nodeType||!b.hasAttribute(\"data-reactroot\")));if(!b)for(var c;c=a.lastChild;)a.removeChild(c);return new fk(a,0,b?{hydrate:!0}:void 0)}\nfunction ik(a,b,c,d,e){var f=c._reactRootContainer;if(f){var g=f._internalRoot;if(\"function\"===typeof e){var h=e;e=function(){var a=ck(g);h.call(a)}}bk(b,g,a,e)}else{f=c._reactRootContainer=hk(c,d);g=f._internalRoot;if(\"function\"===typeof e){var k=e;e=function(){var a=ck(g);k.call(a)}}Nj(function(){bk(b,g,a,e)})}return ck(g)}function jk(a,b,c){var d=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:$a,key:null==d?null:\"\"+d,children:a,containerInfo:b,implementation:c}}\nwc=function(a){if(13===a.tag){var b=hg(Gg(),150,100);Ig(a,b);ek(a,b)}};xc=function(a){13===a.tag&&(Ig(a,3),ek(a,3))};yc=function(a){if(13===a.tag){var b=Gg();b=Hg(b,a,null);Ig(a,b);ek(a,b)}};\nza=function(a,b,c){switch(b){case \"input\":Cb(a,c);b=c.name;if(\"radio\"===c.type&&null!=b){for(c=a;c.parentNode;)c=c.parentNode;c=c.querySelectorAll(\"input[name=\"+JSON.stringify(\"\"+b)+'][type=\"radio\"]');for(b=0;b<c.length;b++){var d=c[b];if(d!==a&&d.form===a.form){var e=Qd(d);if(!e)throw Error(u(90));yb(d);Cb(d,e)}}}break;case \"textarea\":Kb(a,c);break;case \"select\":b=c.value,null!=b&&Hb(a,!!c.multiple,b,!1)}};Fa=Mj;\nGa=function(a,b,c,d,e){var f=W;W|=4;try{return cg(98,a.bind(null,b,c,d,e))}finally{W=f,W===V&&gg()}};Ha=function(){(W&(1|fj|gj))===V&&(Lj(),Dj())};Ia=function(a,b){var c=W;W|=2;try{return a(b)}finally{W=c,W===V&&gg()}};function kk(a,b){var c=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!gk(b))throw Error(u(200));return jk(a,b,null,c)}var lk={Events:[Nc,Pd,Qd,xa,ta,Xd,function(a){jc(a,Wd)},Da,Ea,id,mc,Dj,{current:!1}]};\n(function(a){var b=a.findFiberByHostInstance;return Yj(n({},a,{overrideHookState:null,overrideProps:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:Wa.ReactCurrentDispatcher,findHostInstanceByFiber:function(a){a=hc(a);return null===a?null:a.stateNode},findFiberByHostInstance:function(a){return b?b(a):null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null}))})({findFiberByHostInstance:tc,bundleType:0,version:\"16.13.1\",\nrendererPackageName:\"react-dom\"});exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=lk;exports.createPortal=kk;exports.findDOMNode=function(a){if(null==a)return null;if(1===a.nodeType)return a;var b=a._reactInternalFiber;if(void 0===b){if(\"function\"===typeof a.render)throw Error(u(188));throw Error(u(268,Object.keys(a)));}a=hc(b);a=null===a?null:a.stateNode;return a};\nexports.flushSync=function(a,b){if((W&(fj|gj))!==V)throw Error(u(187));var c=W;W|=1;try{return cg(99,a.bind(null,b))}finally{W=c,gg()}};exports.hydrate=function(a,b,c){if(!gk(b))throw Error(u(200));return ik(null,a,b,!0,c)};exports.render=function(a,b,c){if(!gk(b))throw Error(u(200));return ik(null,a,b,!1,c)};\nexports.unmountComponentAtNode=function(a){if(!gk(a))throw Error(u(40));return a._reactRootContainer?(Nj(function(){ik(null,null,a,!1,function(){a._reactRootContainer=null;a[Od]=null})}),!0):!1};exports.unstable_batchedUpdates=Mj;exports.unstable_createPortal=function(a,b){return kk(a,b,2<arguments.length&&void 0!==arguments[2]?arguments[2]:null)};\nexports.unstable_renderSubtreeIntoContainer=function(a,b,c,d){if(!gk(c))throw Error(u(200));if(null==a||void 0===a._reactInternalFiber)throw Error(u(38));return ik(a,b,c,!1,d)};exports.version=\"16.13.1\";\n\n},{\"object-assign\":66,\"react\":76,\"scheduler\":83}],73:[function(require,module,exports){\n(function (process){\n'use strict';\n\nfunction checkDCE() {\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n if (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n ) {\n return;\n }\n if (process.env.NODE_ENV !== 'production') {\n // This branch is unreachable because this function is only called\n // in production, but the condition is true only in development.\n // Therefore if the branch is still here, dead code elimination wasn't\n // properly applied.\n // Don't change the message. React DevTools relies on it. Also make sure\n // this message doesn't occur elsewhere in this function, or it will cause\n // a false positive.\n throw new Error('^_^');\n }\n try {\n // Verify that the code above has been dead code eliminated (DCE'd).\n __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n } catch (err) {\n // DevTools shouldn't crash React, no matter what.\n // We should still report in case we break this code.\n console.error(err);\n }\n}\n\nif (process.env.NODE_ENV === 'production') {\n // DCE check should happen before ReactDOM bundle executes so that\n // DevTools can report bad minification during injection.\n checkDCE();\n module.exports = require('./cjs/react-dom.production.min.js');\n} else {\n module.exports = require('./cjs/react-dom.development.js');\n}\n\n}).call(this,require('_process'))\n},{\"./cjs/react-dom.development.js\":71,\"./cjs/react-dom.production.min.js\":72,\"_process\":67}],74:[function(require,module,exports){\n(function (process){\n/** @license React v16.13.1\n * react.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n'use strict';\n\nvar _assign = require('object-assign');\nvar checkPropTypes = require('prop-types/checkPropTypes');\n\nvar ReactVersion = '16.13.1';\n\n// The Symbol used to tag the ReactElement-like types. If there is no native Symbol\n// nor polyfill, then a plain number is used for performance.\nvar hasSymbol = typeof Symbol === 'function' && Symbol.for;\nvar REACT_ELEMENT_TYPE = hasSymbol ? Symbol.for('react.element') : 0xeac7;\nvar REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;\nvar REACT_FRAGMENT_TYPE = hasSymbol ? Symbol.for('react.fragment') : 0xeacb;\nvar REACT_STRICT_MODE_TYPE = hasSymbol ? Symbol.for('react.strict_mode') : 0xeacc;\nvar REACT_PROFILER_TYPE = hasSymbol ? Symbol.for('react.profiler') : 0xead2;\nvar REACT_PROVIDER_TYPE = hasSymbol ? Symbol.for('react.provider') : 0xeacd;\nvar REACT_CONTEXT_TYPE = hasSymbol ? Symbol.for('react.context') : 0xeace; // TODO: We don't use AsyncMode or ConcurrentMode anymore. They were temporary\nvar REACT_CONCURRENT_MODE_TYPE = hasSymbol ? Symbol.for('react.concurrent_mode') : 0xeacf;\nvar REACT_FORWARD_REF_TYPE = hasSymbol ? Symbol.for('react.forward_ref') : 0xead0;\nvar REACT_SUSPENSE_TYPE = hasSymbol ? Symbol.for('react.suspense') : 0xead1;\nvar REACT_SUSPENSE_LIST_TYPE = hasSymbol ? Symbol.for('react.suspense_list') : 0xead8;\nvar REACT_MEMO_TYPE = hasSymbol ? Symbol.for('react.memo') : 0xead3;\nvar REACT_LAZY_TYPE = hasSymbol ? Symbol.for('react.lazy') : 0xead4;\nvar REACT_BLOCK_TYPE = hasSymbol ? Symbol.for('react.block') : 0xead9;\nvar REACT_FUNDAMENTAL_TYPE = hasSymbol ? Symbol.for('react.fundamental') : 0xead5;\nvar REACT_RESPONDER_TYPE = hasSymbol ? Symbol.for('react.responder') : 0xead6;\nvar REACT_SCOPE_TYPE = hasSymbol ? Symbol.for('react.scope') : 0xead7;\nvar MAYBE_ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\nfunction getIteratorFn(maybeIterable) {\n if (maybeIterable === null || typeof maybeIterable !== 'object') {\n return null;\n }\n\n var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\n\n if (typeof maybeIterator === 'function') {\n return maybeIterator;\n }\n\n return null;\n}\n\n/**\n * Keeps track of the current dispatcher.\n */\nvar ReactCurrentDispatcher = {\n /**\n * @internal\n * @type {ReactComponent}\n */\n current: null\n};\n\n/**\n * Keeps track of the current batch's configuration such as how long an update\n * should suspend for if it needs to.\n */\nvar ReactCurrentBatchConfig = {\n suspense: null\n};\n\n/**\n * Keeps track of the current owner.\n *\n * The current owner is the component who should own any components that are\n * currently being constructed.\n */\nvar ReactCurrentOwner = {\n /**\n * @internal\n * @type {ReactComponent}\n */\n current: null\n};\n\nvar BEFORE_SLASH_RE = /^(.*)[\\\\\\/]/;\nfunction describeComponentFrame (name, source, ownerName) {\n var sourceInfo = '';\n\n if (source) {\n var path = source.fileName;\n var fileName = path.replace(BEFORE_SLASH_RE, '');\n\n {\n // In DEV, include code for a common special case:\n // prefer \"folder/index.js\" instead of just \"index.js\".\n if (/^index\\./.test(fileName)) {\n var match = path.match(BEFORE_SLASH_RE);\n\n if (match) {\n var pathBeforeSlash = match[1];\n\n if (pathBeforeSlash) {\n var folderName = pathBeforeSlash.replace(BEFORE_SLASH_RE, '');\n fileName = folderName + '/' + fileName;\n }\n }\n }\n }\n\n sourceInfo = ' (at ' + fileName + ':' + source.lineNumber + ')';\n } else if (ownerName) {\n sourceInfo = ' (created by ' + ownerName + ')';\n }\n\n return '\\n in ' + (name || 'Unknown') + sourceInfo;\n}\n\nvar Resolved = 1;\nfunction refineResolvedLazyComponent(lazyComponent) {\n return lazyComponent._status === Resolved ? lazyComponent._result : null;\n}\n\nfunction getWrappedName(outerType, innerType, wrapperName) {\n var functionName = innerType.displayName || innerType.name || '';\n return outerType.displayName || (functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName);\n}\n\nfunction getComponentName(type) {\n if (type == null) {\n // Host root, text node or just invalid type.\n return null;\n }\n\n {\n if (typeof type.tag === 'number') {\n error('Received an unexpected object in getComponentName(). ' + 'This is likely a bug in React. Please file an issue.');\n }\n }\n\n if (typeof type === 'function') {\n return type.displayName || type.name || null;\n }\n\n if (typeof type === 'string') {\n return type;\n }\n\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return 'Fragment';\n\n case REACT_PORTAL_TYPE:\n return 'Portal';\n\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n\n case REACT_STRICT_MODE_TYPE:\n return 'StrictMode';\n\n case REACT_SUSPENSE_TYPE:\n return 'Suspense';\n\n case REACT_SUSPENSE_LIST_TYPE:\n return 'SuspenseList';\n }\n\n if (typeof type === 'object') {\n switch (type.$$typeof) {\n case REACT_CONTEXT_TYPE:\n return 'Context.Consumer';\n\n case REACT_PROVIDER_TYPE:\n return 'Context.Provider';\n\n case REACT_FORWARD_REF_TYPE:\n return getWrappedName(type, type.render, 'ForwardRef');\n\n case REACT_MEMO_TYPE:\n return getComponentName(type.type);\n\n case REACT_BLOCK_TYPE:\n return getComponentName(type.render);\n\n case REACT_LAZY_TYPE:\n {\n var thenable = type;\n var resolvedThenable = refineResolvedLazyComponent(thenable);\n\n if (resolvedThenable) {\n return getComponentName(resolvedThenable);\n }\n\n break;\n }\n }\n }\n\n return null;\n}\n\nvar ReactDebugCurrentFrame = {};\nvar currentlyValidatingElement = null;\nfunction setCurrentlyValidatingElement(element) {\n {\n currentlyValidatingElement = element;\n }\n}\n\n{\n // Stack implementation injected by the current renderer.\n ReactDebugCurrentFrame.getCurrentStack = null;\n\n ReactDebugCurrentFrame.getStackAddendum = function () {\n var stack = ''; // Add an extra top frame while an element is being validated\n\n if (currentlyValidatingElement) {\n var name = getComponentName(currentlyValidatingElement.type);\n var owner = currentlyValidatingElement._owner;\n stack += describeComponentFrame(name, currentlyValidatingElement._source, owner && getComponentName(owner.type));\n } // Delegate to the injected renderer-specific implementation\n\n\n var impl = ReactDebugCurrentFrame.getCurrentStack;\n\n if (impl) {\n stack += impl() || '';\n }\n\n return stack;\n };\n}\n\n/**\n * Used by act() to track whether you're inside an act() scope.\n */\nvar IsSomeRendererActing = {\n current: false\n};\n\nvar ReactSharedInternals = {\n ReactCurrentDispatcher: ReactCurrentDispatcher,\n ReactCurrentBatchConfig: ReactCurrentBatchConfig,\n ReactCurrentOwner: ReactCurrentOwner,\n IsSomeRendererActing: IsSomeRendererActing,\n // Used by renderers to avoid bundling object-assign twice in UMD bundles:\n assign: _assign\n};\n\n{\n _assign(ReactSharedInternals, {\n // These should not be included in production.\n ReactDebugCurrentFrame: ReactDebugCurrentFrame,\n // Shim for React DOM 16.0.0 which still destructured (but not used) this.\n // TODO: remove in React 17.0.\n ReactComponentTreeHook: {}\n });\n}\n\n// by calls to these methods by a Babel plugin.\n//\n// In PROD (or in packages without access to React internals),\n// they are left as they are instead.\n\nfunction warn(format) {\n {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n printWarning('warn', format, args);\n }\n}\nfunction error(format) {\n {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n printWarning('error', format, args);\n }\n}\n\nfunction printWarning(level, format, args) {\n // When changing this logic, you might want to also\n // update consoleWithStackDev.www.js as well.\n {\n var hasExistingStack = args.length > 0 && typeof args[args.length - 1] === 'string' && args[args.length - 1].indexOf('\\n in') === 0;\n\n if (!hasExistingStack) {\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n if (stack !== '') {\n format += '%s';\n args = args.concat([stack]);\n }\n }\n\n var argsWithFormat = args.map(function (item) {\n return '' + item;\n }); // Careful: RN currently depends on this prefix\n\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n // breaks IE9: https://github.com/facebook/react/issues/13610\n // eslint-disable-next-line react-internal/no-production-logging\n\n Function.prototype.apply.call(console[level], console, argsWithFormat);\n\n try {\n // --- Welcome to debugging React ---\n // This error was thrown as a convenience so that you can use this stack\n // to find the callsite that caused this warning to fire.\n var argIndex = 0;\n var message = 'Warning: ' + format.replace(/%s/g, function () {\n return args[argIndex++];\n });\n throw new Error(message);\n } catch (x) {}\n }\n}\n\nvar didWarnStateUpdateForUnmountedComponent = {};\n\nfunction warnNoop(publicInstance, callerName) {\n {\n var _constructor = publicInstance.constructor;\n var componentName = _constructor && (_constructor.displayName || _constructor.name) || 'ReactClass';\n var warningKey = componentName + \".\" + callerName;\n\n if (didWarnStateUpdateForUnmountedComponent[warningKey]) {\n return;\n }\n\n error(\"Can't call %s on a component that is not yet mounted. \" + 'This is a no-op, but it might indicate a bug in your application. ' + 'Instead, assign to `this.state` directly or define a `state = {};` ' + 'class property with the desired state in the %s component.', callerName, componentName);\n\n didWarnStateUpdateForUnmountedComponent[warningKey] = true;\n }\n}\n/**\n * This is the abstract API for an update queue.\n */\n\n\nvar ReactNoopUpdateQueue = {\n /**\n * Checks whether or not this composite component is mounted.\n * @param {ReactClass} publicInstance The instance we want to test.\n * @return {boolean} True if mounted, false otherwise.\n * @protected\n * @final\n */\n isMounted: function (publicInstance) {\n return false;\n },\n\n /**\n * Forces an update. This should only be invoked when it is known with\n * certainty that we are **not** in a DOM transaction.\n *\n * You may want to call this when you know that some deeper aspect of the\n * component's state has changed but `setState` was not called.\n *\n * This will not invoke `shouldComponentUpdate`, but it will invoke\n * `componentWillUpdate` and `componentDidUpdate`.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {?function} callback Called after component is updated.\n * @param {?string} callerName name of the calling function in the public API.\n * @internal\n */\n enqueueForceUpdate: function (publicInstance, callback, callerName) {\n warnNoop(publicInstance, 'forceUpdate');\n },\n\n /**\n * Replaces all of the state. Always use this or `setState` to mutate state.\n * You should treat `this.state` as immutable.\n *\n * There is no guarantee that `this.state` will be immediately updated, so\n * accessing `this.state` after calling this method may return the old value.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {object} completeState Next state.\n * @param {?function} callback Called after component is updated.\n * @param {?string} callerName name of the calling function in the public API.\n * @internal\n */\n enqueueReplaceState: function (publicInstance, completeState, callback, callerName) {\n warnNoop(publicInstance, 'replaceState');\n },\n\n /**\n * Sets a subset of the state. This only exists because _pendingState is\n * internal. This provides a merging strategy that is not available to deep\n * properties which is confusing. TODO: Expose pendingState or don't use it\n * during the merge.\n *\n * @param {ReactClass} publicInstance The instance that should rerender.\n * @param {object} partialState Next partial state to be merged with state.\n * @param {?function} callback Called after component is updated.\n * @param {?string} Name of the calling function in the public API.\n * @internal\n */\n enqueueSetState: function (publicInstance, partialState, callback, callerName) {\n warnNoop(publicInstance, 'setState');\n }\n};\n\nvar emptyObject = {};\n\n{\n Object.freeze(emptyObject);\n}\n/**\n * Base class helpers for the updating state of a component.\n */\n\n\nfunction Component(props, context, updater) {\n this.props = props;\n this.context = context; // If a component has string refs, we will assign a different object later.\n\n this.refs = emptyObject; // We initialize the default updater but the real one gets injected by the\n // renderer.\n\n this.updater = updater || ReactNoopUpdateQueue;\n}\n\nComponent.prototype.isReactComponent = {};\n/**\n * Sets a subset of the state. Always use this to mutate\n * state. You should treat `this.state` as immutable.\n *\n * There is no guarantee that `this.state` will be immediately updated, so\n * accessing `this.state` after calling this method may return the old value.\n *\n * There is no guarantee that calls to `setState` will run synchronously,\n * as they may eventually be batched together. You can provide an optional\n * callback that will be executed when the call to setState is actually\n * completed.\n *\n * When a function is provided to setState, it will be called at some point in\n * the future (not synchronously). It will be called with the up to date\n * component arguments (state, props, context). These values can be different\n * from this.* because your function may be called after receiveProps but before\n * shouldComponentUpdate, and this new state, props, and context will not yet be\n * assigned to this.\n *\n * @param {object|function} partialState Next partial state or function to\n * produce next partial state to be merged with current state.\n * @param {?function} callback Called after state is updated.\n * @final\n * @protected\n */\n\nComponent.prototype.setState = function (partialState, callback) {\n if (!(typeof partialState === 'object' || typeof partialState === 'function' || partialState == null)) {\n {\n throw Error( \"setState(...): takes an object of state variables to update or a function which returns an object of state variables.\" );\n }\n }\n\n this.updater.enqueueSetState(this, partialState, callback, 'setState');\n};\n/**\n * Forces an update. This should only be invoked when it is known with\n * certainty that we are **not** in a DOM transaction.\n *\n * You may want to call this when you know that some deeper aspect of the\n * component's state has changed but `setState` was not called.\n *\n * This will not invoke `shouldComponentUpdate`, but it will invoke\n * `componentWillUpdate` and `componentDidUpdate`.\n *\n * @param {?function} callback Called after update is complete.\n * @final\n * @protected\n */\n\n\nComponent.prototype.forceUpdate = function (callback) {\n this.updater.enqueueForceUpdate(this, callback, 'forceUpdate');\n};\n/**\n * Deprecated APIs. These APIs used to exist on classic React classes but since\n * we would like to deprecate them, we're not going to move them over to this\n * modern base class. Instead, we define a getter that warns if it's accessed.\n */\n\n\n{\n var deprecatedAPIs = {\n isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'],\n replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).']\n };\n\n var defineDeprecationWarning = function (methodName, info) {\n Object.defineProperty(Component.prototype, methodName, {\n get: function () {\n warn('%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]);\n\n return undefined;\n }\n });\n };\n\n for (var fnName in deprecatedAPIs) {\n if (deprecatedAPIs.hasOwnProperty(fnName)) {\n defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);\n }\n }\n}\n\nfunction ComponentDummy() {}\n\nComponentDummy.prototype = Component.prototype;\n/**\n * Convenience component with default shallow equality check for sCU.\n */\n\nfunction PureComponent(props, context, updater) {\n this.props = props;\n this.context = context; // If a component has string refs, we will assign a different object later.\n\n this.refs = emptyObject;\n this.updater = updater || ReactNoopUpdateQueue;\n}\n\nvar pureComponentPrototype = PureComponent.prototype = new ComponentDummy();\npureComponentPrototype.constructor = PureComponent; // Avoid an extra prototype jump for these methods.\n\n_assign(pureComponentPrototype, Component.prototype);\n\npureComponentPrototype.isPureReactComponent = true;\n\n// an immutable object with a single mutable value\nfunction createRef() {\n var refObject = {\n current: null\n };\n\n {\n Object.seal(refObject);\n }\n\n return refObject;\n}\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar RESERVED_PROPS = {\n key: true,\n ref: true,\n __self: true,\n __source: true\n};\nvar specialPropKeyWarningShown, specialPropRefWarningShown, didWarnAboutStringRefs;\n\n{\n didWarnAboutStringRefs = {};\n}\n\nfunction hasValidRef(config) {\n {\n if (hasOwnProperty.call(config, 'ref')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.ref !== undefined;\n}\n\nfunction hasValidKey(config) {\n {\n if (hasOwnProperty.call(config, 'key')) {\n var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\n\n if (getter && getter.isReactWarning) {\n return false;\n }\n }\n }\n\n return config.key !== undefined;\n}\n\nfunction defineKeyPropWarningGetter(props, displayName) {\n var warnAboutAccessingKey = function () {\n {\n if (!specialPropKeyWarningShown) {\n specialPropKeyWarningShown = true;\n\n error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', displayName);\n }\n }\n };\n\n warnAboutAccessingKey.isReactWarning = true;\n Object.defineProperty(props, 'key', {\n get: warnAboutAccessingKey,\n configurable: true\n });\n}\n\nfunction defineRefPropWarningGetter(props, displayName) {\n var warnAboutAccessingRef = function () {\n {\n if (!specialPropRefWarningShown) {\n specialPropRefWarningShown = true;\n\n error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://fb.me/react-special-props)', displayName);\n }\n }\n };\n\n warnAboutAccessingRef.isReactWarning = true;\n Object.defineProperty(props, 'ref', {\n get: warnAboutAccessingRef,\n configurable: true\n });\n}\n\nfunction warnIfStringRefCannotBeAutoConverted(config) {\n {\n if (typeof config.ref === 'string' && ReactCurrentOwner.current && config.__self && ReactCurrentOwner.current.stateNode !== config.__self) {\n var componentName = getComponentName(ReactCurrentOwner.current.type);\n\n if (!didWarnAboutStringRefs[componentName]) {\n error('Component \"%s\" contains the string ref \"%s\". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://fb.me/react-strict-mode-string-ref', getComponentName(ReactCurrentOwner.current.type), config.ref);\n\n didWarnAboutStringRefs[componentName] = true;\n }\n }\n }\n}\n/**\n * Factory method to create a new React element. This no longer adheres to\n * the class pattern, so do not use new to call it. Also, instanceof check\n * will not work. Instead test $$typeof field against Symbol.for('react.element') to check\n * if something is a React Element.\n *\n * @param {*} type\n * @param {*} props\n * @param {*} key\n * @param {string|object} ref\n * @param {*} owner\n * @param {*} self A *temporary* helper to detect places where `this` is\n * different from the `owner` when React.createElement is called, so that we\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\n * functions, and as long as `this` and owner are the same, there will be no\n * change in behavior.\n * @param {*} source An annotation object (added by a transpiler or otherwise)\n * indicating filename, line number, and/or other information.\n * @internal\n */\n\n\nvar ReactElement = function (type, key, ref, self, source, owner, props) {\n var element = {\n // This tag allows us to uniquely identify this as a React Element\n $$typeof: REACT_ELEMENT_TYPE,\n // Built-in properties that belong on the element\n type: type,\n key: key,\n ref: ref,\n props: props,\n // Record the component responsible for creating this element.\n _owner: owner\n };\n\n {\n // The validation flag is currently mutative. We put it on\n // an external backing store so that we can freeze the whole object.\n // This can be replaced with a WeakMap once they are implemented in\n // commonly used development environments.\n element._store = {}; // To make comparing ReactElements easier for testing purposes, we make\n // the validation flag non-enumerable (where possible, which should\n // include every environment we run tests in), so the test framework\n // ignores it.\n\n Object.defineProperty(element._store, 'validated', {\n configurable: false,\n enumerable: false,\n writable: true,\n value: false\n }); // self and source are DEV only properties.\n\n Object.defineProperty(element, '_self', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: self\n }); // Two elements created in two different places should be considered\n // equal for testing purposes and therefore we hide it from enumeration.\n\n Object.defineProperty(element, '_source', {\n configurable: false,\n enumerable: false,\n writable: false,\n value: source\n });\n\n if (Object.freeze) {\n Object.freeze(element.props);\n Object.freeze(element);\n }\n }\n\n return element;\n};\n/**\n * Create and return a new ReactElement of the given type.\n * See https://reactjs.org/docs/react-api.html#createelement\n */\n\nfunction createElement(type, config, children) {\n var propName; // Reserved names are extracted\n\n var props = {};\n var key = null;\n var ref = null;\n var self = null;\n var source = null;\n\n if (config != null) {\n if (hasValidRef(config)) {\n ref = config.ref;\n\n {\n warnIfStringRefCannotBeAutoConverted(config);\n }\n }\n\n if (hasValidKey(config)) {\n key = '' + config.key;\n }\n\n self = config.__self === undefined ? null : config.__self;\n source = config.__source === undefined ? null : config.__source; // Remaining properties are added to a new props object\n\n for (propName in config) {\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n props[propName] = config[propName];\n }\n }\n } // Children can be more than one argument, and those are transferred onto\n // the newly allocated props object.\n\n\n var childrenLength = arguments.length - 2;\n\n if (childrenLength === 1) {\n props.children = children;\n } else if (childrenLength > 1) {\n var childArray = Array(childrenLength);\n\n for (var i = 0; i < childrenLength; i++) {\n childArray[i] = arguments[i + 2];\n }\n\n {\n if (Object.freeze) {\n Object.freeze(childArray);\n }\n }\n\n props.children = childArray;\n } // Resolve default props\n\n\n if (type && type.defaultProps) {\n var defaultProps = type.defaultProps;\n\n for (propName in defaultProps) {\n if (props[propName] === undefined) {\n props[propName] = defaultProps[propName];\n }\n }\n }\n\n {\n if (key || ref) {\n var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\n\n if (key) {\n defineKeyPropWarningGetter(props, displayName);\n }\n\n if (ref) {\n defineRefPropWarningGetter(props, displayName);\n }\n }\n }\n\n return ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\n}\nfunction cloneAndReplaceKey(oldElement, newKey) {\n var newElement = ReactElement(oldElement.type, newKey, oldElement.ref, oldElement._self, oldElement._source, oldElement._owner, oldElement.props);\n return newElement;\n}\n/**\n * Clone and return a new ReactElement using element as the starting point.\n * See https://reactjs.org/docs/react-api.html#cloneelement\n */\n\nfunction cloneElement(element, config, children) {\n if (!!(element === null || element === undefined)) {\n {\n throw Error( \"React.cloneElement(...): The argument must be a React element, but you passed \" + element + \".\" );\n }\n }\n\n var propName; // Original props are copied\n\n var props = _assign({}, element.props); // Reserved names are extracted\n\n\n var key = element.key;\n var ref = element.ref; // Self is preserved since the owner is preserved.\n\n var self = element._self; // Source is preserved since cloneElement is unlikely to be targeted by a\n // transpiler, and the original source is probably a better indicator of the\n // true owner.\n\n var source = element._source; // Owner will be preserved, unless ref is overridden\n\n var owner = element._owner;\n\n if (config != null) {\n if (hasValidRef(config)) {\n // Silently steal the ref from the parent.\n ref = config.ref;\n owner = ReactCurrentOwner.current;\n }\n\n if (hasValidKey(config)) {\n key = '' + config.key;\n } // Remaining properties override existing props\n\n\n var defaultProps;\n\n if (element.type && element.type.defaultProps) {\n defaultProps = element.type.defaultProps;\n }\n\n for (propName in config) {\n if (hasOwnProperty.call(config, propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {\n if (config[propName] === undefined && defaultProps !== undefined) {\n // Resolve default props\n props[propName] = defaultProps[propName];\n } else {\n props[propName] = config[propName];\n }\n }\n }\n } // Children can be more than one argument, and those are transferred onto\n // the newly allocated props object.\n\n\n var childrenLength = arguments.length - 2;\n\n if (childrenLength === 1) {\n props.children = children;\n } else if (childrenLength > 1) {\n var childArray = Array(childrenLength);\n\n for (var i = 0; i < childrenLength; i++) {\n childArray[i] = arguments[i + 2];\n }\n\n props.children = childArray;\n }\n\n return ReactElement(element.type, key, ref, self, source, owner, props);\n}\n/**\n * Verifies the object is a ReactElement.\n * See https://reactjs.org/docs/react-api.html#isvalidelement\n * @param {?object} object\n * @return {boolean} True if `object` is a ReactElement.\n * @final\n */\n\nfunction isValidElement(object) {\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\n}\n\nvar SEPARATOR = '.';\nvar SUBSEPARATOR = ':';\n/**\n * Escape and wrap key so it is safe to use as a reactid\n *\n * @param {string} key to be escaped.\n * @return {string} the escaped key.\n */\n\nfunction escape(key) {\n var escapeRegex = /[=:]/g;\n var escaperLookup = {\n '=': '=0',\n ':': '=2'\n };\n var escapedString = ('' + key).replace(escapeRegex, function (match) {\n return escaperLookup[match];\n });\n return '$' + escapedString;\n}\n/**\n * TODO: Test that a single child and an array with one item have the same key\n * pattern.\n */\n\n\nvar didWarnAboutMaps = false;\nvar userProvidedKeyEscapeRegex = /\\/+/g;\n\nfunction escapeUserProvidedKey(text) {\n return ('' + text).replace(userProvidedKeyEscapeRegex, '$&/');\n}\n\nvar POOL_SIZE = 10;\nvar traverseContextPool = [];\n\nfunction getPooledTraverseContext(mapResult, keyPrefix, mapFunction, mapContext) {\n if (traverseContextPool.length) {\n var traverseContext = traverseContextPool.pop();\n traverseContext.result = mapResult;\n traverseContext.keyPrefix = keyPrefix;\n traverseContext.func = mapFunction;\n traverseContext.context = mapContext;\n traverseContext.count = 0;\n return traverseContext;\n } else {\n return {\n result: mapResult,\n keyPrefix: keyPrefix,\n func: mapFunction,\n context: mapContext,\n count: 0\n };\n }\n}\n\nfunction releaseTraverseContext(traverseContext) {\n traverseContext.result = null;\n traverseContext.keyPrefix = null;\n traverseContext.func = null;\n traverseContext.context = null;\n traverseContext.count = 0;\n\n if (traverseContextPool.length < POOL_SIZE) {\n traverseContextPool.push(traverseContext);\n }\n}\n/**\n * @param {?*} children Children tree container.\n * @param {!string} nameSoFar Name of the key path so far.\n * @param {!function} callback Callback to invoke with each child found.\n * @param {?*} traverseContext Used to pass information throughout the traversal\n * process.\n * @return {!number} The number of children in this subtree.\n */\n\n\nfunction traverseAllChildrenImpl(children, nameSoFar, callback, traverseContext) {\n var type = typeof children;\n\n if (type === 'undefined' || type === 'boolean') {\n // All of the above are perceived as null.\n children = null;\n }\n\n var invokeCallback = false;\n\n if (children === null) {\n invokeCallback = true;\n } else {\n switch (type) {\n case 'string':\n case 'number':\n invokeCallback = true;\n break;\n\n case 'object':\n switch (children.$$typeof) {\n case REACT_ELEMENT_TYPE:\n case REACT_PORTAL_TYPE:\n invokeCallback = true;\n }\n\n }\n }\n\n if (invokeCallback) {\n callback(traverseContext, children, // If it's the only child, treat the name as if it was wrapped in an array\n // so that it's consistent if the number of children grows.\n nameSoFar === '' ? SEPARATOR + getComponentKey(children, 0) : nameSoFar);\n return 1;\n }\n\n var child;\n var nextName;\n var subtreeCount = 0; // Count of children found in the current subtree.\n\n var nextNamePrefix = nameSoFar === '' ? SEPARATOR : nameSoFar + SUBSEPARATOR;\n\n if (Array.isArray(children)) {\n for (var i = 0; i < children.length; i++) {\n child = children[i];\n nextName = nextNamePrefix + getComponentKey(child, i);\n subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n }\n } else {\n var iteratorFn = getIteratorFn(children);\n\n if (typeof iteratorFn === 'function') {\n\n {\n // Warn about using Maps as children\n if (iteratorFn === children.entries) {\n if (!didWarnAboutMaps) {\n warn('Using Maps as children is deprecated and will be removed in ' + 'a future major release. Consider converting children to ' + 'an array of keyed ReactElements instead.');\n }\n\n didWarnAboutMaps = true;\n }\n }\n\n var iterator = iteratorFn.call(children);\n var step;\n var ii = 0;\n\n while (!(step = iterator.next()).done) {\n child = step.value;\n nextName = nextNamePrefix + getComponentKey(child, ii++);\n subtreeCount += traverseAllChildrenImpl(child, nextName, callback, traverseContext);\n }\n } else if (type === 'object') {\n var addendum = '';\n\n {\n addendum = ' If you meant to render a collection of children, use an array ' + 'instead.' + ReactDebugCurrentFrame.getStackAddendum();\n }\n\n var childrenString = '' + children;\n\n {\n {\n throw Error( \"Objects are not valid as a React child (found: \" + (childrenString === '[object Object]' ? 'object with keys {' + Object.keys(children).join(', ') + '}' : childrenString) + \").\" + addendum );\n }\n }\n }\n }\n\n return subtreeCount;\n}\n/**\n * Traverses children that are typically specified as `props.children`, but\n * might also be specified through attributes:\n *\n * - `traverseAllChildren(this.props.children, ...)`\n * - `traverseAllChildren(this.props.leftPanelChildren, ...)`\n *\n * The `traverseContext` is an optional argument that is passed through the\n * entire traversal. It can be used to store accumulations or anything else that\n * the callback might find relevant.\n *\n * @param {?*} children Children tree object.\n * @param {!function} callback To invoke upon traversing each child.\n * @param {?*} traverseContext Context for traversal.\n * @return {!number} The number of children in this subtree.\n */\n\n\nfunction traverseAllChildren(children, callback, traverseContext) {\n if (children == null) {\n return 0;\n }\n\n return traverseAllChildrenImpl(children, '', callback, traverseContext);\n}\n/**\n * Generate a key string that identifies a component within a set.\n *\n * @param {*} component A component that could contain a manual key.\n * @param {number} index Index that is used if a manual key is not provided.\n * @return {string}\n */\n\n\nfunction getComponentKey(component, index) {\n // Do some typechecking here since we call this blindly. We want to ensure\n // that we don't block potential future ES APIs.\n if (typeof component === 'object' && component !== null && component.key != null) {\n // Explicit key\n return escape(component.key);\n } // Implicit key determined by the index in the set\n\n\n return index.toString(36);\n}\n\nfunction forEachSingleChild(bookKeeping, child, name) {\n var func = bookKeeping.func,\n context = bookKeeping.context;\n func.call(context, child, bookKeeping.count++);\n}\n/**\n * Iterates through children that are typically specified as `props.children`.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrenforeach\n *\n * The provided forEachFunc(child, index) will be called for each\n * leaf child.\n *\n * @param {?*} children Children tree container.\n * @param {function(*, int)} forEachFunc\n * @param {*} forEachContext Context for forEachContext.\n */\n\n\nfunction forEachChildren(children, forEachFunc, forEachContext) {\n if (children == null) {\n return children;\n }\n\n var traverseContext = getPooledTraverseContext(null, null, forEachFunc, forEachContext);\n traverseAllChildren(children, forEachSingleChild, traverseContext);\n releaseTraverseContext(traverseContext);\n}\n\nfunction mapSingleChildIntoContext(bookKeeping, child, childKey) {\n var result = bookKeeping.result,\n keyPrefix = bookKeeping.keyPrefix,\n func = bookKeeping.func,\n context = bookKeeping.context;\n var mappedChild = func.call(context, child, bookKeeping.count++);\n\n if (Array.isArray(mappedChild)) {\n mapIntoWithKeyPrefixInternal(mappedChild, result, childKey, function (c) {\n return c;\n });\n } else if (mappedChild != null) {\n if (isValidElement(mappedChild)) {\n mappedChild = cloneAndReplaceKey(mappedChild, // Keep both the (mapped) and old keys if they differ, just as\n // traverseAllChildren used to do for objects as children\n keyPrefix + (mappedChild.key && (!child || child.key !== mappedChild.key) ? escapeUserProvidedKey(mappedChild.key) + '/' : '') + childKey);\n }\n\n result.push(mappedChild);\n }\n}\n\nfunction mapIntoWithKeyPrefixInternal(children, array, prefix, func, context) {\n var escapedPrefix = '';\n\n if (prefix != null) {\n escapedPrefix = escapeUserProvidedKey(prefix) + '/';\n }\n\n var traverseContext = getPooledTraverseContext(array, escapedPrefix, func, context);\n traverseAllChildren(children, mapSingleChildIntoContext, traverseContext);\n releaseTraverseContext(traverseContext);\n}\n/**\n * Maps children that are typically specified as `props.children`.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrenmap\n *\n * The provided mapFunction(child, key, index) will be called for each\n * leaf child.\n *\n * @param {?*} children Children tree container.\n * @param {function(*, int)} func The map function.\n * @param {*} context Context for mapFunction.\n * @return {object} Object containing the ordered map of results.\n */\n\n\nfunction mapChildren(children, func, context) {\n if (children == null) {\n return children;\n }\n\n var result = [];\n mapIntoWithKeyPrefixInternal(children, result, null, func, context);\n return result;\n}\n/**\n * Count the number of children that are typically specified as\n * `props.children`.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrencount\n *\n * @param {?*} children Children tree container.\n * @return {number} The number of children.\n */\n\n\nfunction countChildren(children) {\n return traverseAllChildren(children, function () {\n return null;\n }, null);\n}\n/**\n * Flatten a children object (typically specified as `props.children`) and\n * return an array with appropriately re-keyed children.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrentoarray\n */\n\n\nfunction toArray(children) {\n var result = [];\n mapIntoWithKeyPrefixInternal(children, result, null, function (child) {\n return child;\n });\n return result;\n}\n/**\n * Returns the first child in a collection of children and verifies that there\n * is only one child in the collection.\n *\n * See https://reactjs.org/docs/react-api.html#reactchildrenonly\n *\n * The current implementation of this function assumes that a single child gets\n * passed without a wrapper, but the purpose of this helper function is to\n * abstract away the particular structure of children.\n *\n * @param {?object} children Child collection structure.\n * @return {ReactElement} The first and only `ReactElement` contained in the\n * structure.\n */\n\n\nfunction onlyChild(children) {\n if (!isValidElement(children)) {\n {\n throw Error( \"React.Children.only expected to receive a single React element child.\" );\n }\n }\n\n return children;\n}\n\nfunction createContext(defaultValue, calculateChangedBits) {\n if (calculateChangedBits === undefined) {\n calculateChangedBits = null;\n } else {\n {\n if (calculateChangedBits !== null && typeof calculateChangedBits !== 'function') {\n error('createContext: Expected the optional second argument to be a ' + 'function. Instead received: %s', calculateChangedBits);\n }\n }\n }\n\n var context = {\n $$typeof: REACT_CONTEXT_TYPE,\n _calculateChangedBits: calculateChangedBits,\n // As a workaround to support multiple concurrent renderers, we categorize\n // some renderers as primary and others as secondary. We only expect\n // there to be two concurrent renderers at most: React Native (primary) and\n // Fabric (secondary); React DOM (primary) and React ART (secondary).\n // Secondary renderers store their context values on separate fields.\n _currentValue: defaultValue,\n _currentValue2: defaultValue,\n // Used to track how many concurrent renderers this context currently\n // supports within in a single renderer. Such as parallel server rendering.\n _threadCount: 0,\n // These are circular\n Provider: null,\n Consumer: null\n };\n context.Provider = {\n $$typeof: REACT_PROVIDER_TYPE,\n _context: context\n };\n var hasWarnedAboutUsingNestedContextConsumers = false;\n var hasWarnedAboutUsingConsumerProvider = false;\n\n {\n // A separate object, but proxies back to the original context object for\n // backwards compatibility. It has a different $$typeof, so we can properly\n // warn for the incorrect usage of Context as a Consumer.\n var Consumer = {\n $$typeof: REACT_CONTEXT_TYPE,\n _context: context,\n _calculateChangedBits: context._calculateChangedBits\n }; // $FlowFixMe: Flow complains about not setting a value, which is intentional here\n\n Object.defineProperties(Consumer, {\n Provider: {\n get: function () {\n if (!hasWarnedAboutUsingConsumerProvider) {\n hasWarnedAboutUsingConsumerProvider = true;\n\n error('Rendering <Context.Consumer.Provider> is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Provider> instead?');\n }\n\n return context.Provider;\n },\n set: function (_Provider) {\n context.Provider = _Provider;\n }\n },\n _currentValue: {\n get: function () {\n return context._currentValue;\n },\n set: function (_currentValue) {\n context._currentValue = _currentValue;\n }\n },\n _currentValue2: {\n get: function () {\n return context._currentValue2;\n },\n set: function (_currentValue2) {\n context._currentValue2 = _currentValue2;\n }\n },\n _threadCount: {\n get: function () {\n return context._threadCount;\n },\n set: function (_threadCount) {\n context._threadCount = _threadCount;\n }\n },\n Consumer: {\n get: function () {\n if (!hasWarnedAboutUsingNestedContextConsumers) {\n hasWarnedAboutUsingNestedContextConsumers = true;\n\n error('Rendering <Context.Consumer.Consumer> is not supported and will be removed in ' + 'a future major release. Did you mean to render <Context.Consumer> instead?');\n }\n\n return context.Consumer;\n }\n }\n }); // $FlowFixMe: Flow complains about missing properties because it doesn't understand defineProperty\n\n context.Consumer = Consumer;\n }\n\n {\n context._currentRenderer = null;\n context._currentRenderer2 = null;\n }\n\n return context;\n}\n\nfunction lazy(ctor) {\n var lazyType = {\n $$typeof: REACT_LAZY_TYPE,\n _ctor: ctor,\n // React uses these fields to store the result.\n _status: -1,\n _result: null\n };\n\n {\n // In production, this would just set it on the object.\n var defaultProps;\n var propTypes;\n Object.defineProperties(lazyType, {\n defaultProps: {\n configurable: true,\n get: function () {\n return defaultProps;\n },\n set: function (newDefaultProps) {\n error('React.lazy(...): It is not supported to assign `defaultProps` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.');\n\n defaultProps = newDefaultProps; // Match production behavior more closely:\n\n Object.defineProperty(lazyType, 'defaultProps', {\n enumerable: true\n });\n }\n },\n propTypes: {\n configurable: true,\n get: function () {\n return propTypes;\n },\n set: function (newPropTypes) {\n error('React.lazy(...): It is not supported to assign `propTypes` to ' + 'a lazy component import. Either specify them where the component ' + 'is defined, or create a wrapping component around it.');\n\n propTypes = newPropTypes; // Match production behavior more closely:\n\n Object.defineProperty(lazyType, 'propTypes', {\n enumerable: true\n });\n }\n }\n });\n }\n\n return lazyType;\n}\n\nfunction forwardRef(render) {\n {\n if (render != null && render.$$typeof === REACT_MEMO_TYPE) {\n error('forwardRef requires a render function but received a `memo` ' + 'component. Instead of forwardRef(memo(...)), use ' + 'memo(forwardRef(...)).');\n } else if (typeof render !== 'function') {\n error('forwardRef requires a render function but was given %s.', render === null ? 'null' : typeof render);\n } else {\n if (render.length !== 0 && render.length !== 2) {\n error('forwardRef render functions accept exactly two parameters: props and ref. %s', render.length === 1 ? 'Did you forget to use the ref parameter?' : 'Any additional parameter will be undefined.');\n }\n }\n\n if (render != null) {\n if (render.defaultProps != null || render.propTypes != null) {\n error('forwardRef render functions do not support propTypes or defaultProps. ' + 'Did you accidentally pass a React component?');\n }\n }\n }\n\n return {\n $$typeof: REACT_FORWARD_REF_TYPE,\n render: render\n };\n}\n\nfunction isValidElementType(type) {\n return typeof type === 'string' || typeof type === 'function' || // Note: its typeof might be other than 'symbol' or 'number' if it's a polyfill.\n type === REACT_FRAGMENT_TYPE || type === REACT_CONCURRENT_MODE_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || typeof type === 'object' && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_FUNDAMENTAL_TYPE || type.$$typeof === REACT_RESPONDER_TYPE || type.$$typeof === REACT_SCOPE_TYPE || type.$$typeof === REACT_BLOCK_TYPE);\n}\n\nfunction memo(type, compare) {\n {\n if (!isValidElementType(type)) {\n error('memo: The first argument must be a component. Instead ' + 'received: %s', type === null ? 'null' : typeof type);\n }\n }\n\n return {\n $$typeof: REACT_MEMO_TYPE,\n type: type,\n compare: compare === undefined ? null : compare\n };\n}\n\nfunction resolveDispatcher() {\n var dispatcher = ReactCurrentDispatcher.current;\n\n if (!(dispatcher !== null)) {\n {\n throw Error( \"Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\\n1. You might have mismatching versions of React and the renderer (such as React DOM)\\n2. You might be breaking the Rules of Hooks\\n3. You might have more than one copy of React in the same app\\nSee https://fb.me/react-invalid-hook-call for tips about how to debug and fix this problem.\" );\n }\n }\n\n return dispatcher;\n}\n\nfunction useContext(Context, unstable_observedBits) {\n var dispatcher = resolveDispatcher();\n\n {\n if (unstable_observedBits !== undefined) {\n error('useContext() second argument is reserved for future ' + 'use in React. Passing it is not supported. ' + 'You passed: %s.%s', unstable_observedBits, typeof unstable_observedBits === 'number' && Array.isArray(arguments[2]) ? '\\n\\nDid you call array.map(useContext)? ' + 'Calling Hooks inside a loop is not supported. ' + 'Learn more at https://fb.me/rules-of-hooks' : '');\n } // TODO: add a more generic warning for invalid values.\n\n\n if (Context._context !== undefined) {\n var realContext = Context._context; // Don't deduplicate because this legitimately causes bugs\n // and nobody should be using this in existing code.\n\n if (realContext.Consumer === Context) {\n error('Calling useContext(Context.Consumer) is not supported, may cause bugs, and will be ' + 'removed in a future major release. Did you mean to call useContext(Context) instead?');\n } else if (realContext.Provider === Context) {\n error('Calling useContext(Context.Provider) is not supported. ' + 'Did you mean to call useContext(Context) instead?');\n }\n }\n }\n\n return dispatcher.useContext(Context, unstable_observedBits);\n}\nfunction useState(initialState) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useState(initialState);\n}\nfunction useReducer(reducer, initialArg, init) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useReducer(reducer, initialArg, init);\n}\nfunction useRef(initialValue) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useRef(initialValue);\n}\nfunction useEffect(create, deps) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useEffect(create, deps);\n}\nfunction useLayoutEffect(create, deps) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useLayoutEffect(create, deps);\n}\nfunction useCallback(callback, deps) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useCallback(callback, deps);\n}\nfunction useMemo(create, deps) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useMemo(create, deps);\n}\nfunction useImperativeHandle(ref, create, deps) {\n var dispatcher = resolveDispatcher();\n return dispatcher.useImperativeHandle(ref, create, deps);\n}\nfunction useDebugValue(value, formatterFn) {\n {\n var dispatcher = resolveDispatcher();\n return dispatcher.useDebugValue(value, formatterFn);\n }\n}\n\nvar propTypesMisspellWarningShown;\n\n{\n propTypesMisspellWarningShown = false;\n}\n\nfunction getDeclarationErrorAddendum() {\n if (ReactCurrentOwner.current) {\n var name = getComponentName(ReactCurrentOwner.current.type);\n\n if (name) {\n return '\\n\\nCheck the render method of `' + name + '`.';\n }\n }\n\n return '';\n}\n\nfunction getSourceInfoErrorAddendum(source) {\n if (source !== undefined) {\n var fileName = source.fileName.replace(/^.*[\\\\\\/]/, '');\n var lineNumber = source.lineNumber;\n return '\\n\\nCheck your code at ' + fileName + ':' + lineNumber + '.';\n }\n\n return '';\n}\n\nfunction getSourceInfoErrorAddendumForProps(elementProps) {\n if (elementProps !== null && elementProps !== undefined) {\n return getSourceInfoErrorAddendum(elementProps.__source);\n }\n\n return '';\n}\n/**\n * Warn if there's no key explicitly set on dynamic arrays of children or\n * object keys are not valid. This allows us to keep track of children between\n * updates.\n */\n\n\nvar ownerHasKeyUseWarning = {};\n\nfunction getCurrentComponentErrorInfo(parentType) {\n var info = getDeclarationErrorAddendum();\n\n if (!info) {\n var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;\n\n if (parentName) {\n info = \"\\n\\nCheck the top-level render call using <\" + parentName + \">.\";\n }\n }\n\n return info;\n}\n/**\n * Warn if the element doesn't have an explicit key assigned to it.\n * This element is in an array. The array could grow and shrink or be\n * reordered. All children that haven't already been validated are required to\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\n * will only be shown once.\n *\n * @internal\n * @param {ReactElement} element Element that requires a key.\n * @param {*} parentType element's parent's type.\n */\n\n\nfunction validateExplicitKey(element, parentType) {\n if (!element._store || element._store.validated || element.key != null) {\n return;\n }\n\n element._store.validated = true;\n var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\n\n if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\n return;\n }\n\n ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a\n // property, it may be the creator of the child that's responsible for\n // assigning it a key.\n\n var childOwner = '';\n\n if (element && element._owner && element._owner !== ReactCurrentOwner.current) {\n // Give the component that originally created this child.\n childOwner = \" It was passed a child from \" + getComponentName(element._owner.type) + \".\";\n }\n\n setCurrentlyValidatingElement(element);\n\n {\n error('Each child in a list should have a unique \"key\" prop.' + '%s%s See https://fb.me/react-warning-keys for more information.', currentComponentErrorInfo, childOwner);\n }\n\n setCurrentlyValidatingElement(null);\n}\n/**\n * Ensure that every element either is passed in a static location, in an\n * array with an explicit keys property defined, or in an object literal\n * with valid key property.\n *\n * @internal\n * @param {ReactNode} node Statically passed child of any type.\n * @param {*} parentType node's parent's type.\n */\n\n\nfunction validateChildKeys(node, parentType) {\n if (typeof node !== 'object') {\n return;\n }\n\n if (Array.isArray(node)) {\n for (var i = 0; i < node.length; i++) {\n var child = node[i];\n\n if (isValidElement(child)) {\n validateExplicitKey(child, parentType);\n }\n }\n } else if (isValidElement(node)) {\n // This element was passed in a valid location.\n if (node._store) {\n node._store.validated = true;\n }\n } else if (node) {\n var iteratorFn = getIteratorFn(node);\n\n if (typeof iteratorFn === 'function') {\n // Entry iterators used to provide implicit keys,\n // but now we print a separate warning for them later.\n if (iteratorFn !== node.entries) {\n var iterator = iteratorFn.call(node);\n var step;\n\n while (!(step = iterator.next()).done) {\n if (isValidElement(step.value)) {\n validateExplicitKey(step.value, parentType);\n }\n }\n }\n }\n }\n}\n/**\n * Given an element, validate that its props follow the propTypes definition,\n * provided by the type.\n *\n * @param {ReactElement} element\n */\n\n\nfunction validatePropTypes(element) {\n {\n var type = element.type;\n\n if (type === null || type === undefined || typeof type === 'string') {\n return;\n }\n\n var name = getComponentName(type);\n var propTypes;\n\n if (typeof type === 'function') {\n propTypes = type.propTypes;\n } else if (typeof type === 'object' && (type.$$typeof === REACT_FORWARD_REF_TYPE || // Note: Memo only checks outer props here.\n // Inner props are checked in the reconciler.\n type.$$typeof === REACT_MEMO_TYPE)) {\n propTypes = type.propTypes;\n } else {\n return;\n }\n\n if (propTypes) {\n setCurrentlyValidatingElement(element);\n checkPropTypes(propTypes, element.props, 'prop', name, ReactDebugCurrentFrame.getStackAddendum);\n setCurrentlyValidatingElement(null);\n } else if (type.PropTypes !== undefined && !propTypesMisspellWarningShown) {\n propTypesMisspellWarningShown = true;\n\n error('Component %s declared `PropTypes` instead of `propTypes`. Did you misspell the property assignment?', name || 'Unknown');\n }\n\n if (typeof type.getDefaultProps === 'function' && !type.getDefaultProps.isReactClassApproved) {\n error('getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.');\n }\n }\n}\n/**\n * Given a fragment, validate that it can only be provided with fragment props\n * @param {ReactElement} fragment\n */\n\n\nfunction validateFragmentProps(fragment) {\n {\n setCurrentlyValidatingElement(fragment);\n var keys = Object.keys(fragment.props);\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n\n if (key !== 'children' && key !== 'key') {\n error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\n\n break;\n }\n }\n\n if (fragment.ref !== null) {\n error('Invalid attribute `ref` supplied to `React.Fragment`.');\n }\n\n setCurrentlyValidatingElement(null);\n }\n}\nfunction createElementWithValidation(type, props, children) {\n var validType = isValidElementType(type); // We warn in this case but don't throw. We expect the element creation to\n // succeed and there will likely be errors in render.\n\n if (!validType) {\n var info = '';\n\n if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\n info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and named imports.\";\n }\n\n var sourceInfo = getSourceInfoErrorAddendumForProps(props);\n\n if (sourceInfo) {\n info += sourceInfo;\n } else {\n info += getDeclarationErrorAddendum();\n }\n\n var typeString;\n\n if (type === null) {\n typeString = 'null';\n } else if (Array.isArray(type)) {\n typeString = 'array';\n } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\n typeString = \"<\" + (getComponentName(type.type) || 'Unknown') + \" />\";\n info = ' Did you accidentally export a JSX literal instead of a component?';\n } else {\n typeString = typeof type;\n }\n\n {\n error('React.createElement: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\n }\n }\n\n var element = createElement.apply(this, arguments); // The result can be nullish if a mock or a custom function is used.\n // TODO: Drop this when these are no longer allowed as the type argument.\n\n if (element == null) {\n return element;\n } // Skip key warning if the type isn't valid since our key validation logic\n // doesn't expect a non-string/function type and can throw confusing errors.\n // We don't want exception behavior to differ between dev and prod.\n // (Rendering will throw with a helpful message and as soon as the type is\n // fixed, the key warnings will appear.)\n\n\n if (validType) {\n for (var i = 2; i < arguments.length; i++) {\n validateChildKeys(arguments[i], type);\n }\n }\n\n if (type === REACT_FRAGMENT_TYPE) {\n validateFragmentProps(element);\n } else {\n validatePropTypes(element);\n }\n\n return element;\n}\nvar didWarnAboutDeprecatedCreateFactory = false;\nfunction createFactoryWithValidation(type) {\n var validatedFactory = createElementWithValidation.bind(null, type);\n validatedFactory.type = type;\n\n {\n if (!didWarnAboutDeprecatedCreateFactory) {\n didWarnAboutDeprecatedCreateFactory = true;\n\n warn('React.createFactory() is deprecated and will be removed in ' + 'a future major release. Consider using JSX ' + 'or use React.createElement() directly instead.');\n } // Legacy hook: remove it\n\n\n Object.defineProperty(validatedFactory, 'type', {\n enumerable: false,\n get: function () {\n warn('Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.');\n\n Object.defineProperty(this, 'type', {\n value: type\n });\n return type;\n }\n });\n }\n\n return validatedFactory;\n}\nfunction cloneElementWithValidation(element, props, children) {\n var newElement = cloneElement.apply(this, arguments);\n\n for (var i = 2; i < arguments.length; i++) {\n validateChildKeys(arguments[i], newElement.type);\n }\n\n validatePropTypes(newElement);\n return newElement;\n}\n\n{\n\n try {\n var frozenObject = Object.freeze({});\n var testMap = new Map([[frozenObject, null]]);\n var testSet = new Set([frozenObject]); // This is necessary for Rollup to not consider these unused.\n // https://github.com/rollup/rollup/issues/1771\n // TODO: we can remove these if Rollup fixes the bug.\n\n testMap.set(0, 0);\n testSet.add(0);\n } catch (e) {\n }\n}\n\nvar createElement$1 = createElementWithValidation ;\nvar cloneElement$1 = cloneElementWithValidation ;\nvar createFactory = createFactoryWithValidation ;\nvar Children = {\n map: mapChildren,\n forEach: forEachChildren,\n count: countChildren,\n toArray: toArray,\n only: onlyChild\n};\n\nexports.Children = Children;\nexports.Component = Component;\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.Profiler = REACT_PROFILER_TYPE;\nexports.PureComponent = PureComponent;\nexports.StrictMode = REACT_STRICT_MODE_TYPE;\nexports.Suspense = REACT_SUSPENSE_TYPE;\nexports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED = ReactSharedInternals;\nexports.cloneElement = cloneElement$1;\nexports.createContext = createContext;\nexports.createElement = createElement$1;\nexports.createFactory = createFactory;\nexports.createRef = createRef;\nexports.forwardRef = forwardRef;\nexports.isValidElement = isValidElement;\nexports.lazy = lazy;\nexports.memo = memo;\nexports.useCallback = useCallback;\nexports.useContext = useContext;\nexports.useDebugValue = useDebugValue;\nexports.useEffect = useEffect;\nexports.useImperativeHandle = useImperativeHandle;\nexports.useLayoutEffect = useLayoutEffect;\nexports.useMemo = useMemo;\nexports.useReducer = useReducer;\nexports.useRef = useRef;\nexports.useState = useState;\nexports.version = ReactVersion;\n })();\n}\n\n}).call(this,require('_process'))\n},{\"_process\":67,\"object-assign\":66,\"prop-types/checkPropTypes\":69}],75:[function(require,module,exports){\n/** @license React v16.13.1\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var l=require(\"object-assign\"),n=\"function\"===typeof Symbol&&Symbol.for,p=n?Symbol.for(\"react.element\"):60103,q=n?Symbol.for(\"react.portal\"):60106,r=n?Symbol.for(\"react.fragment\"):60107,t=n?Symbol.for(\"react.strict_mode\"):60108,u=n?Symbol.for(\"react.profiler\"):60114,v=n?Symbol.for(\"react.provider\"):60109,w=n?Symbol.for(\"react.context\"):60110,x=n?Symbol.for(\"react.forward_ref\"):60112,y=n?Symbol.for(\"react.suspense\"):60113,z=n?Symbol.for(\"react.memo\"):60115,A=n?Symbol.for(\"react.lazy\"):\n60116,B=\"function\"===typeof Symbol&&Symbol.iterator;function C(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;c<arguments.length;c++)b+=\"&args[]=\"+encodeURIComponent(arguments[c]);return\"Minified React error #\"+a+\"; visit \"+b+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}\nvar D={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},E={};function F(a,b,c){this.props=a;this.context=b;this.refs=E;this.updater=c||D}F.prototype.isReactComponent={};F.prototype.setState=function(a,b){if(\"object\"!==typeof a&&\"function\"!==typeof a&&null!=a)throw Error(C(85));this.updater.enqueueSetState(this,a,b,\"setState\")};F.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,\"forceUpdate\")};\nfunction G(){}G.prototype=F.prototype;function H(a,b,c){this.props=a;this.context=b;this.refs=E;this.updater=c||D}var I=H.prototype=new G;I.constructor=H;l(I,F.prototype);I.isPureReactComponent=!0;var J={current:null},K=Object.prototype.hasOwnProperty,L={key:!0,ref:!0,__self:!0,__source:!0};\nfunction M(a,b,c){var e,d={},g=null,k=null;if(null!=b)for(e in void 0!==b.ref&&(k=b.ref),void 0!==b.key&&(g=\"\"+b.key),b)K.call(b,e)&&!L.hasOwnProperty(e)&&(d[e]=b[e]);var f=arguments.length-2;if(1===f)d.children=c;else if(1<f){for(var h=Array(f),m=0;m<f;m++)h[m]=arguments[m+2];d.children=h}if(a&&a.defaultProps)for(e in f=a.defaultProps,f)void 0===d[e]&&(d[e]=f[e]);return{$$typeof:p,type:a,key:g,ref:k,props:d,_owner:J.current}}\nfunction N(a,b){return{$$typeof:p,type:a.type,key:b,ref:a.ref,props:a.props,_owner:a._owner}}function O(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===p}function escape(a){var b={\"=\":\"=0\",\":\":\"=2\"};return\"$\"+(\"\"+a).replace(/[=:]/g,function(a){return b[a]})}var P=/\\/+/g,Q=[];function R(a,b,c,e){if(Q.length){var d=Q.pop();d.result=a;d.keyPrefix=b;d.func=c;d.context=e;d.count=0;return d}return{result:a,keyPrefix:b,func:c,context:e,count:0}}\nfunction S(a){a.result=null;a.keyPrefix=null;a.func=null;a.context=null;a.count=0;10>Q.length&&Q.push(a)}\nfunction T(a,b,c,e){var d=typeof a;if(\"undefined\"===d||\"boolean\"===d)a=null;var g=!1;if(null===a)g=!0;else switch(d){case \"string\":case \"number\":g=!0;break;case \"object\":switch(a.$$typeof){case p:case q:g=!0}}if(g)return c(e,a,\"\"===b?\".\"+U(a,0):b),1;g=0;b=\"\"===b?\".\":b+\":\";if(Array.isArray(a))for(var k=0;k<a.length;k++){d=a[k];var f=b+U(d,k);g+=T(d,f,c,e)}else if(null===a||\"object\"!==typeof a?f=null:(f=B&&a[B]||a[\"@@iterator\"],f=\"function\"===typeof f?f:null),\"function\"===typeof f)for(a=f.call(a),k=\n0;!(d=a.next()).done;)d=d.value,f=b+U(d,k++),g+=T(d,f,c,e);else if(\"object\"===d)throw c=\"\"+a,Error(C(31,\"[object Object]\"===c?\"object with keys {\"+Object.keys(a).join(\", \")+\"}\":c,\"\"));return g}function V(a,b,c){return null==a?0:T(a,\"\",b,c)}function U(a,b){return\"object\"===typeof a&&null!==a&&null!=a.key?escape(a.key):b.toString(36)}function W(a,b){a.func.call(a.context,b,a.count++)}\nfunction aa(a,b,c){var e=a.result,d=a.keyPrefix;a=a.func.call(a.context,b,a.count++);Array.isArray(a)?X(a,e,c,function(a){return a}):null!=a&&(O(a)&&(a=N(a,d+(!a.key||b&&b.key===a.key?\"\":(\"\"+a.key).replace(P,\"$&/\")+\"/\")+c)),e.push(a))}function X(a,b,c,e,d){var g=\"\";null!=c&&(g=(\"\"+c).replace(P,\"$&/\")+\"/\");b=R(b,g,e,d);V(a,aa,b);S(b)}var Y={current:null};function Z(){var a=Y.current;if(null===a)throw Error(C(321));return a}\nvar ba={ReactCurrentDispatcher:Y,ReactCurrentBatchConfig:{suspense:null},ReactCurrentOwner:J,IsSomeRendererActing:{current:!1},assign:l};exports.Children={map:function(a,b,c){if(null==a)return a;var e=[];X(a,e,null,b,c);return e},forEach:function(a,b,c){if(null==a)return a;b=R(null,null,b,c);V(a,W,b);S(b)},count:function(a){return V(a,function(){return null},null)},toArray:function(a){var b=[];X(a,b,null,function(a){return a});return b},only:function(a){if(!O(a))throw Error(C(143));return a}};\nexports.Component=F;exports.Fragment=r;exports.Profiler=u;exports.PureComponent=H;exports.StrictMode=t;exports.Suspense=y;exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=ba;\nexports.cloneElement=function(a,b,c){if(null===a||void 0===a)throw Error(C(267,a));var e=l({},a.props),d=a.key,g=a.ref,k=a._owner;if(null!=b){void 0!==b.ref&&(g=b.ref,k=J.current);void 0!==b.key&&(d=\"\"+b.key);if(a.type&&a.type.defaultProps)var f=a.type.defaultProps;for(h in b)K.call(b,h)&&!L.hasOwnProperty(h)&&(e[h]=void 0===b[h]&&void 0!==f?f[h]:b[h])}var h=arguments.length-2;if(1===h)e.children=c;else if(1<h){f=Array(h);for(var m=0;m<h;m++)f[m]=arguments[m+2];e.children=f}return{$$typeof:p,type:a.type,\nkey:d,ref:g,props:e,_owner:k}};exports.createContext=function(a,b){void 0===b&&(b=null);a={$$typeof:w,_calculateChangedBits:b,_currentValue:a,_currentValue2:a,_threadCount:0,Provider:null,Consumer:null};a.Provider={$$typeof:v,_context:a};return a.Consumer=a};exports.createElement=M;exports.createFactory=function(a){var b=M.bind(null,a);b.type=a;return b};exports.createRef=function(){return{current:null}};exports.forwardRef=function(a){return{$$typeof:x,render:a}};exports.isValidElement=O;\nexports.lazy=function(a){return{$$typeof:A,_ctor:a,_status:-1,_result:null}};exports.memo=function(a,b){return{$$typeof:z,type:a,compare:void 0===b?null:b}};exports.useCallback=function(a,b){return Z().useCallback(a,b)};exports.useContext=function(a,b){return Z().useContext(a,b)};exports.useDebugValue=function(){};exports.useEffect=function(a,b){return Z().useEffect(a,b)};exports.useImperativeHandle=function(a,b,c){return Z().useImperativeHandle(a,b,c)};\nexports.useLayoutEffect=function(a,b){return Z().useLayoutEffect(a,b)};exports.useMemo=function(a,b){return Z().useMemo(a,b)};exports.useReducer=function(a,b,c){return Z().useReducer(a,b,c)};exports.useRef=function(a){return Z().useRef(a)};exports.useState=function(a){return Z().useState(a)};exports.version=\"16.13.1\";\n\n},{\"object-assign\":66}],76:[function(require,module,exports){\n(function (process){\n'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react.production.min.js');\n} else {\n module.exports = require('./cjs/react.development.js');\n}\n\n}).call(this,require('_process'))\n},{\"./cjs/react.development.js\":74,\"./cjs/react.production.min.js\":75,\"_process\":67}],77:[function(require,module,exports){\n/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator, PromiseImpl) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return PromiseImpl.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return PromiseImpl.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new PromiseImpl(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList, PromiseImpl) {\n if (PromiseImpl === void 0) PromiseImpl = Promise;\n\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList),\n PromiseImpl\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n\n},{}],78:[function(require,module,exports){\n/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\n/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n\n},{\"buffer\":8}],79:[function(require,module,exports){\n(function (process){\n/** @license React v0.19.1\n * scheduler-tracing.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n'use strict';\n\nvar DEFAULT_THREAD_ID = 0; // Counters used to generate unique IDs.\n\nvar interactionIDCounter = 0;\nvar threadIDCounter = 0; // Set of currently traced interactions.\n// Interactions \"stack\"–\n// Meaning that newly traced interactions are appended to the previously active set.\n// When an interaction goes out of scope, the previous set (if any) is restored.\n\nexports.__interactionsRef = null; // Listener(s) to notify when interactions begin and end.\n\nexports.__subscriberRef = null;\n\n{\n exports.__interactionsRef = {\n current: new Set()\n };\n exports.__subscriberRef = {\n current: null\n };\n}\nfunction unstable_clear(callback) {\n\n var prevInteractions = exports.__interactionsRef.current;\n exports.__interactionsRef.current = new Set();\n\n try {\n return callback();\n } finally {\n exports.__interactionsRef.current = prevInteractions;\n }\n}\nfunction unstable_getCurrent() {\n {\n return exports.__interactionsRef.current;\n }\n}\nfunction unstable_getThreadID() {\n return ++threadIDCounter;\n}\nfunction unstable_trace(name, timestamp, callback) {\n var threadID = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : DEFAULT_THREAD_ID;\n\n var interaction = {\n __count: 1,\n id: interactionIDCounter++,\n name: name,\n timestamp: timestamp\n };\n var prevInteractions = exports.__interactionsRef.current; // Traced interactions should stack/accumulate.\n // To do that, clone the current interactions.\n // The previous set will be restored upon completion.\n\n var interactions = new Set(prevInteractions);\n interactions.add(interaction);\n exports.__interactionsRef.current = interactions;\n var subscriber = exports.__subscriberRef.current;\n var returnValue;\n\n try {\n if (subscriber !== null) {\n subscriber.onInteractionTraced(interaction);\n }\n } finally {\n try {\n if (subscriber !== null) {\n subscriber.onWorkStarted(interactions, threadID);\n }\n } finally {\n try {\n returnValue = callback();\n } finally {\n exports.__interactionsRef.current = prevInteractions;\n\n try {\n if (subscriber !== null) {\n subscriber.onWorkStopped(interactions, threadID);\n }\n } finally {\n interaction.__count--; // If no async work was scheduled for this interaction,\n // Notify subscribers that it's completed.\n\n if (subscriber !== null && interaction.__count === 0) {\n subscriber.onInteractionScheduledWorkCompleted(interaction);\n }\n }\n }\n }\n }\n\n return returnValue;\n}\nfunction unstable_wrap(callback) {\n var threadID = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_THREAD_ID;\n\n var wrappedInteractions = exports.__interactionsRef.current;\n var subscriber = exports.__subscriberRef.current;\n\n if (subscriber !== null) {\n subscriber.onWorkScheduled(wrappedInteractions, threadID);\n } // Update the pending async work count for the current interactions.\n // Update after calling subscribers in case of error.\n\n\n wrappedInteractions.forEach(function (interaction) {\n interaction.__count++;\n });\n var hasRun = false;\n\n function wrapped() {\n var prevInteractions = exports.__interactionsRef.current;\n exports.__interactionsRef.current = wrappedInteractions;\n subscriber = exports.__subscriberRef.current;\n\n try {\n var returnValue;\n\n try {\n if (subscriber !== null) {\n subscriber.onWorkStarted(wrappedInteractions, threadID);\n }\n } finally {\n try {\n returnValue = callback.apply(undefined, arguments);\n } finally {\n exports.__interactionsRef.current = prevInteractions;\n\n if (subscriber !== null) {\n subscriber.onWorkStopped(wrappedInteractions, threadID);\n }\n }\n }\n\n return returnValue;\n } finally {\n if (!hasRun) {\n // We only expect a wrapped function to be executed once,\n // But in the event that it's executed more than once–\n // Only decrement the outstanding interaction counts once.\n hasRun = true; // Update pending async counts for all wrapped interactions.\n // If this was the last scheduled async work for any of them,\n // Mark them as completed.\n\n wrappedInteractions.forEach(function (interaction) {\n interaction.__count--;\n\n if (subscriber !== null && interaction.__count === 0) {\n subscriber.onInteractionScheduledWorkCompleted(interaction);\n }\n });\n }\n }\n }\n\n wrapped.cancel = function cancel() {\n subscriber = exports.__subscriberRef.current;\n\n try {\n if (subscriber !== null) {\n subscriber.onWorkCanceled(wrappedInteractions, threadID);\n }\n } finally {\n // Update pending async counts for all wrapped interactions.\n // If this was the last scheduled async work for any of them,\n // Mark them as completed.\n wrappedInteractions.forEach(function (interaction) {\n interaction.__count--;\n\n if (subscriber && interaction.__count === 0) {\n subscriber.onInteractionScheduledWorkCompleted(interaction);\n }\n });\n }\n };\n\n return wrapped;\n}\n\nvar subscribers = null;\n\n{\n subscribers = new Set();\n}\n\nfunction unstable_subscribe(subscriber) {\n {\n subscribers.add(subscriber);\n\n if (subscribers.size === 1) {\n exports.__subscriberRef.current = {\n onInteractionScheduledWorkCompleted: onInteractionScheduledWorkCompleted,\n onInteractionTraced: onInteractionTraced,\n onWorkCanceled: onWorkCanceled,\n onWorkScheduled: onWorkScheduled,\n onWorkStarted: onWorkStarted,\n onWorkStopped: onWorkStopped\n };\n }\n }\n}\nfunction unstable_unsubscribe(subscriber) {\n {\n subscribers.delete(subscriber);\n\n if (subscribers.size === 0) {\n exports.__subscriberRef.current = null;\n }\n }\n}\n\nfunction onInteractionTraced(interaction) {\n var didCatchError = false;\n var caughtError = null;\n subscribers.forEach(function (subscriber) {\n try {\n subscriber.onInteractionTraced(interaction);\n } catch (error) {\n if (!didCatchError) {\n didCatchError = true;\n caughtError = error;\n }\n }\n });\n\n if (didCatchError) {\n throw caughtError;\n }\n}\n\nfunction onInteractionScheduledWorkCompleted(interaction) {\n var didCatchError = false;\n var caughtError = null;\n subscribers.forEach(function (subscriber) {\n try {\n subscriber.onInteractionScheduledWorkCompleted(interaction);\n } catch (error) {\n if (!didCatchError) {\n didCatchError = true;\n caughtError = error;\n }\n }\n });\n\n if (didCatchError) {\n throw caughtError;\n }\n}\n\nfunction onWorkScheduled(interactions, threadID) {\n var didCatchError = false;\n var caughtError = null;\n subscribers.forEach(function (subscriber) {\n try {\n subscriber.onWorkScheduled(interactions, threadID);\n } catch (error) {\n if (!didCatchError) {\n didCatchError = true;\n caughtError = error;\n }\n }\n });\n\n if (didCatchError) {\n throw caughtError;\n }\n}\n\nfunction onWorkStarted(interactions, threadID) {\n var didCatchError = false;\n var caughtError = null;\n subscribers.forEach(function (subscriber) {\n try {\n subscriber.onWorkStarted(interactions, threadID);\n } catch (error) {\n if (!didCatchError) {\n didCatchError = true;\n caughtError = error;\n }\n }\n });\n\n if (didCatchError) {\n throw caughtError;\n }\n}\n\nfunction onWorkStopped(interactions, threadID) {\n var didCatchError = false;\n var caughtError = null;\n subscribers.forEach(function (subscriber) {\n try {\n subscriber.onWorkStopped(interactions, threadID);\n } catch (error) {\n if (!didCatchError) {\n didCatchError = true;\n caughtError = error;\n }\n }\n });\n\n if (didCatchError) {\n throw caughtError;\n }\n}\n\nfunction onWorkCanceled(interactions, threadID) {\n var didCatchError = false;\n var caughtError = null;\n subscribers.forEach(function (subscriber) {\n try {\n subscriber.onWorkCanceled(interactions, threadID);\n } catch (error) {\n if (!didCatchError) {\n didCatchError = true;\n caughtError = error;\n }\n }\n });\n\n if (didCatchError) {\n throw caughtError;\n }\n}\n\nexports.unstable_clear = unstable_clear;\nexports.unstable_getCurrent = unstable_getCurrent;\nexports.unstable_getThreadID = unstable_getThreadID;\nexports.unstable_subscribe = unstable_subscribe;\nexports.unstable_trace = unstable_trace;\nexports.unstable_unsubscribe = unstable_unsubscribe;\nexports.unstable_wrap = unstable_wrap;\n })();\n}\n\n}).call(this,require('_process'))\n},{\"_process\":67}],80:[function(require,module,exports){\n/** @license React v0.19.1\n * scheduler-tracing.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var b=0;exports.__interactionsRef=null;exports.__subscriberRef=null;exports.unstable_clear=function(a){return a()};exports.unstable_getCurrent=function(){return null};exports.unstable_getThreadID=function(){return++b};exports.unstable_subscribe=function(){};exports.unstable_trace=function(a,d,c){return c()};exports.unstable_unsubscribe=function(){};exports.unstable_wrap=function(a){return a};\n\n},{}],81:[function(require,module,exports){\n(function (process){\n/** @license React v0.19.1\n * scheduler.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n'use strict';\n\nvar enableSchedulerDebugging = false;\nvar enableProfiling = true;\n\nvar requestHostCallback;\nvar requestHostTimeout;\nvar cancelHostTimeout;\nvar shouldYieldToHost;\nvar requestPaint;\n\nif ( // If Scheduler runs in a non-DOM environment, it falls back to a naive\n// implementation using setTimeout.\ntypeof window === 'undefined' || // Check if MessageChannel is supported, too.\ntypeof MessageChannel !== 'function') {\n // If this accidentally gets imported in a non-browser environment, e.g. JavaScriptCore,\n // fallback to a naive implementation.\n var _callback = null;\n var _timeoutID = null;\n\n var _flushCallback = function () {\n if (_callback !== null) {\n try {\n var currentTime = exports.unstable_now();\n var hasRemainingTime = true;\n\n _callback(hasRemainingTime, currentTime);\n\n _callback = null;\n } catch (e) {\n setTimeout(_flushCallback, 0);\n throw e;\n }\n }\n };\n\n var initialTime = Date.now();\n\n exports.unstable_now = function () {\n return Date.now() - initialTime;\n };\n\n requestHostCallback = function (cb) {\n if (_callback !== null) {\n // Protect against re-entrancy.\n setTimeout(requestHostCallback, 0, cb);\n } else {\n _callback = cb;\n setTimeout(_flushCallback, 0);\n }\n };\n\n requestHostTimeout = function (cb, ms) {\n _timeoutID = setTimeout(cb, ms);\n };\n\n cancelHostTimeout = function () {\n clearTimeout(_timeoutID);\n };\n\n shouldYieldToHost = function () {\n return false;\n };\n\n requestPaint = exports.unstable_forceFrameRate = function () {};\n} else {\n // Capture local references to native APIs, in case a polyfill overrides them.\n var performance = window.performance;\n var _Date = window.Date;\n var _setTimeout = window.setTimeout;\n var _clearTimeout = window.clearTimeout;\n\n if (typeof console !== 'undefined') {\n // TODO: Scheduler no longer requires these methods to be polyfilled. But\n // maybe we want to continue warning if they don't exist, to preserve the\n // option to rely on it in the future?\n var requestAnimationFrame = window.requestAnimationFrame;\n var cancelAnimationFrame = window.cancelAnimationFrame; // TODO: Remove fb.me link\n\n if (typeof requestAnimationFrame !== 'function') {\n // Using console['error'] to evade Babel and ESLint\n console['error'](\"This browser doesn't support requestAnimationFrame. \" + 'Make sure that you load a ' + 'polyfill in older browsers. https://fb.me/react-polyfills');\n }\n\n if (typeof cancelAnimationFrame !== 'function') {\n // Using console['error'] to evade Babel and ESLint\n console['error'](\"This browser doesn't support cancelAnimationFrame. \" + 'Make sure that you load a ' + 'polyfill in older browsers. https://fb.me/react-polyfills');\n }\n }\n\n if (typeof performance === 'object' && typeof performance.now === 'function') {\n exports.unstable_now = function () {\n return performance.now();\n };\n } else {\n var _initialTime = _Date.now();\n\n exports.unstable_now = function () {\n return _Date.now() - _initialTime;\n };\n }\n\n var isMessageLoopRunning = false;\n var scheduledHostCallback = null;\n var taskTimeoutID = -1; // Scheduler periodically yields in case there is other work on the main\n // thread, like user events. By default, it yields multiple times per frame.\n // It does not attempt to align with frame boundaries, since most tasks don't\n // need to be frame aligned; for those that do, use requestAnimationFrame.\n\n var yieldInterval = 5;\n var deadline = 0; // TODO: Make this configurable\n\n {\n // `isInputPending` is not available. Since we have no way of knowing if\n // there's pending input, always yield at the end of the frame.\n shouldYieldToHost = function () {\n return exports.unstable_now() >= deadline;\n }; // Since we yield every frame regardless, `requestPaint` has no effect.\n\n\n requestPaint = function () {};\n }\n\n exports.unstable_forceFrameRate = function (fps) {\n if (fps < 0 || fps > 125) {\n // Using console['error'] to evade Babel and ESLint\n console['error']('forceFrameRate takes a positive int between 0 and 125, ' + 'forcing framerates higher than 125 fps is not unsupported');\n return;\n }\n\n if (fps > 0) {\n yieldInterval = Math.floor(1000 / fps);\n } else {\n // reset the framerate\n yieldInterval = 5;\n }\n };\n\n var performWorkUntilDeadline = function () {\n if (scheduledHostCallback !== null) {\n var currentTime = exports.unstable_now(); // Yield after `yieldInterval` ms, regardless of where we are in the vsync\n // cycle. This means there's always time remaining at the beginning of\n // the message event.\n\n deadline = currentTime + yieldInterval;\n var hasTimeRemaining = true;\n\n try {\n var hasMoreWork = scheduledHostCallback(hasTimeRemaining, currentTime);\n\n if (!hasMoreWork) {\n isMessageLoopRunning = false;\n scheduledHostCallback = null;\n } else {\n // If there's more work, schedule the next message event at the end\n // of the preceding one.\n port.postMessage(null);\n }\n } catch (error) {\n // If a scheduler task throws, exit the current browser task so the\n // error can be observed.\n port.postMessage(null);\n throw error;\n }\n } else {\n isMessageLoopRunning = false;\n } // Yielding to the browser will give it a chance to paint, so we can\n };\n\n var channel = new MessageChannel();\n var port = channel.port2;\n channel.port1.onmessage = performWorkUntilDeadline;\n\n requestHostCallback = function (callback) {\n scheduledHostCallback = callback;\n\n if (!isMessageLoopRunning) {\n isMessageLoopRunning = true;\n port.postMessage(null);\n }\n };\n\n requestHostTimeout = function (callback, ms) {\n taskTimeoutID = _setTimeout(function () {\n callback(exports.unstable_now());\n }, ms);\n };\n\n cancelHostTimeout = function () {\n _clearTimeout(taskTimeoutID);\n\n taskTimeoutID = -1;\n };\n}\n\nfunction push(heap, node) {\n var index = heap.length;\n heap.push(node);\n siftUp(heap, node, index);\n}\nfunction peek(heap) {\n var first = heap[0];\n return first === undefined ? null : first;\n}\nfunction pop(heap) {\n var first = heap[0];\n\n if (first !== undefined) {\n var last = heap.pop();\n\n if (last !== first) {\n heap[0] = last;\n siftDown(heap, last, 0);\n }\n\n return first;\n } else {\n return null;\n }\n}\n\nfunction siftUp(heap, node, i) {\n var index = i;\n\n while (true) {\n var parentIndex = index - 1 >>> 1;\n var parent = heap[parentIndex];\n\n if (parent !== undefined && compare(parent, node) > 0) {\n // The parent is larger. Swap positions.\n heap[parentIndex] = node;\n heap[index] = parent;\n index = parentIndex;\n } else {\n // The parent is smaller. Exit.\n return;\n }\n }\n}\n\nfunction siftDown(heap, node, i) {\n var index = i;\n var length = heap.length;\n\n while (index < length) {\n var leftIndex = (index + 1) * 2 - 1;\n var left = heap[leftIndex];\n var rightIndex = leftIndex + 1;\n var right = heap[rightIndex]; // If the left or right node is smaller, swap with the smaller of those.\n\n if (left !== undefined && compare(left, node) < 0) {\n if (right !== undefined && compare(right, left) < 0) {\n heap[index] = right;\n heap[rightIndex] = node;\n index = rightIndex;\n } else {\n heap[index] = left;\n heap[leftIndex] = node;\n index = leftIndex;\n }\n } else if (right !== undefined && compare(right, node) < 0) {\n heap[index] = right;\n heap[rightIndex] = node;\n index = rightIndex;\n } else {\n // Neither child is smaller. Exit.\n return;\n }\n }\n}\n\nfunction compare(a, b) {\n // Compare sort index first, then task id.\n var diff = a.sortIndex - b.sortIndex;\n return diff !== 0 ? diff : a.id - b.id;\n}\n\n// TODO: Use symbols?\nvar NoPriority = 0;\nvar ImmediatePriority = 1;\nvar UserBlockingPriority = 2;\nvar NormalPriority = 3;\nvar LowPriority = 4;\nvar IdlePriority = 5;\n\nvar runIdCounter = 0;\nvar mainThreadIdCounter = 0;\nvar profilingStateSize = 4;\nvar sharedProfilingBuffer = // $FlowFixMe Flow doesn't know about SharedArrayBuffer\ntypeof SharedArrayBuffer === 'function' ? new SharedArrayBuffer(profilingStateSize * Int32Array.BYTES_PER_ELEMENT) : // $FlowFixMe Flow doesn't know about ArrayBuffer\ntypeof ArrayBuffer === 'function' ? new ArrayBuffer(profilingStateSize * Int32Array.BYTES_PER_ELEMENT) : null // Don't crash the init path on IE9\n;\nvar profilingState = sharedProfilingBuffer !== null ? new Int32Array(sharedProfilingBuffer) : []; // We can't read this but it helps save bytes for null checks\n\nvar PRIORITY = 0;\nvar CURRENT_TASK_ID = 1;\nvar CURRENT_RUN_ID = 2;\nvar QUEUE_SIZE = 3;\n\n{\n profilingState[PRIORITY] = NoPriority; // This is maintained with a counter, because the size of the priority queue\n // array might include canceled tasks.\n\n profilingState[QUEUE_SIZE] = 0;\n profilingState[CURRENT_TASK_ID] = 0;\n} // Bytes per element is 4\n\n\nvar INITIAL_EVENT_LOG_SIZE = 131072;\nvar MAX_EVENT_LOG_SIZE = 524288; // Equivalent to 2 megabytes\n\nvar eventLogSize = 0;\nvar eventLogBuffer = null;\nvar eventLog = null;\nvar eventLogIndex = 0;\nvar TaskStartEvent = 1;\nvar TaskCompleteEvent = 2;\nvar TaskErrorEvent = 3;\nvar TaskCancelEvent = 4;\nvar TaskRunEvent = 5;\nvar TaskYieldEvent = 6;\nvar SchedulerSuspendEvent = 7;\nvar SchedulerResumeEvent = 8;\n\nfunction logEvent(entries) {\n if (eventLog !== null) {\n var offset = eventLogIndex;\n eventLogIndex += entries.length;\n\n if (eventLogIndex + 1 > eventLogSize) {\n eventLogSize *= 2;\n\n if (eventLogSize > MAX_EVENT_LOG_SIZE) {\n // Using console['error'] to evade Babel and ESLint\n console['error'](\"Scheduler Profiling: Event log exceeded maximum size. Don't \" + 'forget to call `stopLoggingProfilingEvents()`.');\n stopLoggingProfilingEvents();\n return;\n }\n\n var newEventLog = new Int32Array(eventLogSize * 4);\n newEventLog.set(eventLog);\n eventLogBuffer = newEventLog.buffer;\n eventLog = newEventLog;\n }\n\n eventLog.set(entries, offset);\n }\n}\n\nfunction startLoggingProfilingEvents() {\n eventLogSize = INITIAL_EVENT_LOG_SIZE;\n eventLogBuffer = new ArrayBuffer(eventLogSize * 4);\n eventLog = new Int32Array(eventLogBuffer);\n eventLogIndex = 0;\n}\nfunction stopLoggingProfilingEvents() {\n var buffer = eventLogBuffer;\n eventLogSize = 0;\n eventLogBuffer = null;\n eventLog = null;\n eventLogIndex = 0;\n return buffer;\n}\nfunction markTaskStart(task, ms) {\n {\n profilingState[QUEUE_SIZE]++;\n\n if (eventLog !== null) {\n // performance.now returns a float, representing milliseconds. When the\n // event is logged, it's coerced to an int. Convert to microseconds to\n // maintain extra degrees of precision.\n logEvent([TaskStartEvent, ms * 1000, task.id, task.priorityLevel]);\n }\n }\n}\nfunction markTaskCompleted(task, ms) {\n {\n profilingState[PRIORITY] = NoPriority;\n profilingState[CURRENT_TASK_ID] = 0;\n profilingState[QUEUE_SIZE]--;\n\n if (eventLog !== null) {\n logEvent([TaskCompleteEvent, ms * 1000, task.id]);\n }\n }\n}\nfunction markTaskCanceled(task, ms) {\n {\n profilingState[QUEUE_SIZE]--;\n\n if (eventLog !== null) {\n logEvent([TaskCancelEvent, ms * 1000, task.id]);\n }\n }\n}\nfunction markTaskErrored(task, ms) {\n {\n profilingState[PRIORITY] = NoPriority;\n profilingState[CURRENT_TASK_ID] = 0;\n profilingState[QUEUE_SIZE]--;\n\n if (eventLog !== null) {\n logEvent([TaskErrorEvent, ms * 1000, task.id]);\n }\n }\n}\nfunction markTaskRun(task, ms) {\n {\n runIdCounter++;\n profilingState[PRIORITY] = task.priorityLevel;\n profilingState[CURRENT_TASK_ID] = task.id;\n profilingState[CURRENT_RUN_ID] = runIdCounter;\n\n if (eventLog !== null) {\n logEvent([TaskRunEvent, ms * 1000, task.id, runIdCounter]);\n }\n }\n}\nfunction markTaskYield(task, ms) {\n {\n profilingState[PRIORITY] = NoPriority;\n profilingState[CURRENT_TASK_ID] = 0;\n profilingState[CURRENT_RUN_ID] = 0;\n\n if (eventLog !== null) {\n logEvent([TaskYieldEvent, ms * 1000, task.id, runIdCounter]);\n }\n }\n}\nfunction markSchedulerSuspended(ms) {\n {\n mainThreadIdCounter++;\n\n if (eventLog !== null) {\n logEvent([SchedulerSuspendEvent, ms * 1000, mainThreadIdCounter]);\n }\n }\n}\nfunction markSchedulerUnsuspended(ms) {\n {\n if (eventLog !== null) {\n logEvent([SchedulerResumeEvent, ms * 1000, mainThreadIdCounter]);\n }\n }\n}\n\n/* eslint-disable no-var */\n// Math.pow(2, 30) - 1\n// 0b111111111111111111111111111111\n\nvar maxSigned31BitInt = 1073741823; // Times out immediately\n\nvar IMMEDIATE_PRIORITY_TIMEOUT = -1; // Eventually times out\n\nvar USER_BLOCKING_PRIORITY = 250;\nvar NORMAL_PRIORITY_TIMEOUT = 5000;\nvar LOW_PRIORITY_TIMEOUT = 10000; // Never times out\n\nvar IDLE_PRIORITY = maxSigned31BitInt; // Tasks are stored on a min heap\n\nvar taskQueue = [];\nvar timerQueue = []; // Incrementing id counter. Used to maintain insertion order.\n\nvar taskIdCounter = 1; // Pausing the scheduler is useful for debugging.\nvar currentTask = null;\nvar currentPriorityLevel = NormalPriority; // This is set while performing work, to prevent re-entrancy.\n\nvar isPerformingWork = false;\nvar isHostCallbackScheduled = false;\nvar isHostTimeoutScheduled = false;\n\nfunction advanceTimers(currentTime) {\n // Check for tasks that are no longer delayed and add them to the queue.\n var timer = peek(timerQueue);\n\n while (timer !== null) {\n if (timer.callback === null) {\n // Timer was cancelled.\n pop(timerQueue);\n } else if (timer.startTime <= currentTime) {\n // Timer fired. Transfer to the task queue.\n pop(timerQueue);\n timer.sortIndex = timer.expirationTime;\n push(taskQueue, timer);\n\n {\n markTaskStart(timer, currentTime);\n timer.isQueued = true;\n }\n } else {\n // Remaining timers are pending.\n return;\n }\n\n timer = peek(timerQueue);\n }\n}\n\nfunction handleTimeout(currentTime) {\n isHostTimeoutScheduled = false;\n advanceTimers(currentTime);\n\n if (!isHostCallbackScheduled) {\n if (peek(taskQueue) !== null) {\n isHostCallbackScheduled = true;\n requestHostCallback(flushWork);\n } else {\n var firstTimer = peek(timerQueue);\n\n if (firstTimer !== null) {\n requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime);\n }\n }\n }\n}\n\nfunction flushWork(hasTimeRemaining, initialTime) {\n {\n markSchedulerUnsuspended(initialTime);\n } // We'll need a host callback the next time work is scheduled.\n\n\n isHostCallbackScheduled = false;\n\n if (isHostTimeoutScheduled) {\n // We scheduled a timeout but it's no longer needed. Cancel it.\n isHostTimeoutScheduled = false;\n cancelHostTimeout();\n }\n\n isPerformingWork = true;\n var previousPriorityLevel = currentPriorityLevel;\n\n try {\n if (enableProfiling) {\n try {\n return workLoop(hasTimeRemaining, initialTime);\n } catch (error) {\n if (currentTask !== null) {\n var currentTime = exports.unstable_now();\n markTaskErrored(currentTask, currentTime);\n currentTask.isQueued = false;\n }\n\n throw error;\n }\n } else {\n // No catch in prod codepath.\n return workLoop(hasTimeRemaining, initialTime);\n }\n } finally {\n currentTask = null;\n currentPriorityLevel = previousPriorityLevel;\n isPerformingWork = false;\n\n {\n var _currentTime = exports.unstable_now();\n\n markSchedulerSuspended(_currentTime);\n }\n }\n}\n\nfunction workLoop(hasTimeRemaining, initialTime) {\n var currentTime = initialTime;\n advanceTimers(currentTime);\n currentTask = peek(taskQueue);\n\n while (currentTask !== null && !(enableSchedulerDebugging )) {\n if (currentTask.expirationTime > currentTime && (!hasTimeRemaining || shouldYieldToHost())) {\n // This currentTask hasn't expired, and we've reached the deadline.\n break;\n }\n\n var callback = currentTask.callback;\n\n if (callback !== null) {\n currentTask.callback = null;\n currentPriorityLevel = currentTask.priorityLevel;\n var didUserCallbackTimeout = currentTask.expirationTime <= currentTime;\n markTaskRun(currentTask, currentTime);\n var continuationCallback = callback(didUserCallbackTimeout);\n currentTime = exports.unstable_now();\n\n if (typeof continuationCallback === 'function') {\n currentTask.callback = continuationCallback;\n markTaskYield(currentTask, currentTime);\n } else {\n {\n markTaskCompleted(currentTask, currentTime);\n currentTask.isQueued = false;\n }\n\n if (currentTask === peek(taskQueue)) {\n pop(taskQueue);\n }\n }\n\n advanceTimers(currentTime);\n } else {\n pop(taskQueue);\n }\n\n currentTask = peek(taskQueue);\n } // Return whether there's additional work\n\n\n if (currentTask !== null) {\n return true;\n } else {\n var firstTimer = peek(timerQueue);\n\n if (firstTimer !== null) {\n requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime);\n }\n\n return false;\n }\n}\n\nfunction unstable_runWithPriority(priorityLevel, eventHandler) {\n switch (priorityLevel) {\n case ImmediatePriority:\n case UserBlockingPriority:\n case NormalPriority:\n case LowPriority:\n case IdlePriority:\n break;\n\n default:\n priorityLevel = NormalPriority;\n }\n\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = priorityLevel;\n\n try {\n return eventHandler();\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n}\n\nfunction unstable_next(eventHandler) {\n var priorityLevel;\n\n switch (currentPriorityLevel) {\n case ImmediatePriority:\n case UserBlockingPriority:\n case NormalPriority:\n // Shift down to normal priority\n priorityLevel = NormalPriority;\n break;\n\n default:\n // Anything lower than normal priority should remain at the current level.\n priorityLevel = currentPriorityLevel;\n break;\n }\n\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = priorityLevel;\n\n try {\n return eventHandler();\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n}\n\nfunction unstable_wrapCallback(callback) {\n var parentPriorityLevel = currentPriorityLevel;\n return function () {\n // This is a fork of runWithPriority, inlined for performance.\n var previousPriorityLevel = currentPriorityLevel;\n currentPriorityLevel = parentPriorityLevel;\n\n try {\n return callback.apply(this, arguments);\n } finally {\n currentPriorityLevel = previousPriorityLevel;\n }\n };\n}\n\nfunction timeoutForPriorityLevel(priorityLevel) {\n switch (priorityLevel) {\n case ImmediatePriority:\n return IMMEDIATE_PRIORITY_TIMEOUT;\n\n case UserBlockingPriority:\n return USER_BLOCKING_PRIORITY;\n\n case IdlePriority:\n return IDLE_PRIORITY;\n\n case LowPriority:\n return LOW_PRIORITY_TIMEOUT;\n\n case NormalPriority:\n default:\n return NORMAL_PRIORITY_TIMEOUT;\n }\n}\n\nfunction unstable_scheduleCallback(priorityLevel, callback, options) {\n var currentTime = exports.unstable_now();\n var startTime;\n var timeout;\n\n if (typeof options === 'object' && options !== null) {\n var delay = options.delay;\n\n if (typeof delay === 'number' && delay > 0) {\n startTime = currentTime + delay;\n } else {\n startTime = currentTime;\n }\n\n timeout = typeof options.timeout === 'number' ? options.timeout : timeoutForPriorityLevel(priorityLevel);\n } else {\n timeout = timeoutForPriorityLevel(priorityLevel);\n startTime = currentTime;\n }\n\n var expirationTime = startTime + timeout;\n var newTask = {\n id: taskIdCounter++,\n callback: callback,\n priorityLevel: priorityLevel,\n startTime: startTime,\n expirationTime: expirationTime,\n sortIndex: -1\n };\n\n {\n newTask.isQueued = false;\n }\n\n if (startTime > currentTime) {\n // This is a delayed task.\n newTask.sortIndex = startTime;\n push(timerQueue, newTask);\n\n if (peek(taskQueue) === null && newTask === peek(timerQueue)) {\n // All tasks are delayed, and this is the task with the earliest delay.\n if (isHostTimeoutScheduled) {\n // Cancel an existing timeout.\n cancelHostTimeout();\n } else {\n isHostTimeoutScheduled = true;\n } // Schedule a timeout.\n\n\n requestHostTimeout(handleTimeout, startTime - currentTime);\n }\n } else {\n newTask.sortIndex = expirationTime;\n push(taskQueue, newTask);\n\n {\n markTaskStart(newTask, currentTime);\n newTask.isQueued = true;\n } // Schedule a host callback, if needed. If we're already performing work,\n // wait until the next time we yield.\n\n\n if (!isHostCallbackScheduled && !isPerformingWork) {\n isHostCallbackScheduled = true;\n requestHostCallback(flushWork);\n }\n }\n\n return newTask;\n}\n\nfunction unstable_pauseExecution() {\n}\n\nfunction unstable_continueExecution() {\n\n if (!isHostCallbackScheduled && !isPerformingWork) {\n isHostCallbackScheduled = true;\n requestHostCallback(flushWork);\n }\n}\n\nfunction unstable_getFirstCallbackNode() {\n return peek(taskQueue);\n}\n\nfunction unstable_cancelCallback(task) {\n {\n if (task.isQueued) {\n var currentTime = exports.unstable_now();\n markTaskCanceled(task, currentTime);\n task.isQueued = false;\n }\n } // Null out the callback to indicate the task has been canceled. (Can't\n // remove from the queue because you can't remove arbitrary nodes from an\n // array based heap, only the first one.)\n\n\n task.callback = null;\n}\n\nfunction unstable_getCurrentPriorityLevel() {\n return currentPriorityLevel;\n}\n\nfunction unstable_shouldYield() {\n var currentTime = exports.unstable_now();\n advanceTimers(currentTime);\n var firstTask = peek(taskQueue);\n return firstTask !== currentTask && currentTask !== null && firstTask !== null && firstTask.callback !== null && firstTask.startTime <= currentTime && firstTask.expirationTime < currentTask.expirationTime || shouldYieldToHost();\n}\n\nvar unstable_requestPaint = requestPaint;\nvar unstable_Profiling = {\n startLoggingProfilingEvents: startLoggingProfilingEvents,\n stopLoggingProfilingEvents: stopLoggingProfilingEvents,\n sharedProfilingBuffer: sharedProfilingBuffer\n} ;\n\nexports.unstable_IdlePriority = IdlePriority;\nexports.unstable_ImmediatePriority = ImmediatePriority;\nexports.unstable_LowPriority = LowPriority;\nexports.unstable_NormalPriority = NormalPriority;\nexports.unstable_Profiling = unstable_Profiling;\nexports.unstable_UserBlockingPriority = UserBlockingPriority;\nexports.unstable_cancelCallback = unstable_cancelCallback;\nexports.unstable_continueExecution = unstable_continueExecution;\nexports.unstable_getCurrentPriorityLevel = unstable_getCurrentPriorityLevel;\nexports.unstable_getFirstCallbackNode = unstable_getFirstCallbackNode;\nexports.unstable_next = unstable_next;\nexports.unstable_pauseExecution = unstable_pauseExecution;\nexports.unstable_requestPaint = unstable_requestPaint;\nexports.unstable_runWithPriority = unstable_runWithPriority;\nexports.unstable_scheduleCallback = unstable_scheduleCallback;\nexports.unstable_shouldYield = unstable_shouldYield;\nexports.unstable_wrapCallback = unstable_wrapCallback;\n })();\n}\n\n}).call(this,require('_process'))\n},{\"_process\":67}],82:[function(require,module,exports){\n/** @license React v0.19.1\n * scheduler.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var f,g,h,k,l;\nif(\"undefined\"===typeof window||\"function\"!==typeof MessageChannel){var p=null,q=null,t=function(){if(null!==p)try{var a=exports.unstable_now();p(!0,a);p=null}catch(b){throw setTimeout(t,0),b;}},u=Date.now();exports.unstable_now=function(){return Date.now()-u};f=function(a){null!==p?setTimeout(f,0,a):(p=a,setTimeout(t,0))};g=function(a,b){q=setTimeout(a,b)};h=function(){clearTimeout(q)};k=function(){return!1};l=exports.unstable_forceFrameRate=function(){}}else{var w=window.performance,x=window.Date,\ny=window.setTimeout,z=window.clearTimeout;if(\"undefined\"!==typeof console){var A=window.cancelAnimationFrame;\"function\"!==typeof window.requestAnimationFrame&&console.error(\"This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills\");\"function\"!==typeof A&&console.error(\"This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://fb.me/react-polyfills\")}if(\"object\"===\ntypeof w&&\"function\"===typeof w.now)exports.unstable_now=function(){return w.now()};else{var B=x.now();exports.unstable_now=function(){return x.now()-B}}var C=!1,D=null,E=-1,F=5,G=0;k=function(){return exports.unstable_now()>=G};l=function(){};exports.unstable_forceFrameRate=function(a){0>a||125<a?console.error(\"forceFrameRate takes a positive int between 0 and 125, forcing framerates higher than 125 fps is not unsupported\"):F=0<a?Math.floor(1E3/a):5};var H=new MessageChannel,I=H.port2;H.port1.onmessage=\nfunction(){if(null!==D){var a=exports.unstable_now();G=a+F;try{D(!0,a)?I.postMessage(null):(C=!1,D=null)}catch(b){throw I.postMessage(null),b;}}else C=!1};f=function(a){D=a;C||(C=!0,I.postMessage(null))};g=function(a,b){E=y(function(){a(exports.unstable_now())},b)};h=function(){z(E);E=-1}}function J(a,b){var c=a.length;a.push(b);a:for(;;){var d=c-1>>>1,e=a[d];if(void 0!==e&&0<K(e,b))a[d]=b,a[c]=e,c=d;else break a}}function L(a){a=a[0];return void 0===a?null:a}\nfunction M(a){var b=a[0];if(void 0!==b){var c=a.pop();if(c!==b){a[0]=c;a:for(var d=0,e=a.length;d<e;){var m=2*(d+1)-1,n=a[m],v=m+1,r=a[v];if(void 0!==n&&0>K(n,c))void 0!==r&&0>K(r,n)?(a[d]=r,a[v]=c,d=v):(a[d]=n,a[m]=c,d=m);else if(void 0!==r&&0>K(r,c))a[d]=r,a[v]=c,d=v;else break a}}return b}return null}function K(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}var N=[],O=[],P=1,Q=null,R=3,S=!1,T=!1,U=!1;\nfunction V(a){for(var b=L(O);null!==b;){if(null===b.callback)M(O);else if(b.startTime<=a)M(O),b.sortIndex=b.expirationTime,J(N,b);else break;b=L(O)}}function W(a){U=!1;V(a);if(!T)if(null!==L(N))T=!0,f(X);else{var b=L(O);null!==b&&g(W,b.startTime-a)}}\nfunction X(a,b){T=!1;U&&(U=!1,h());S=!0;var c=R;try{V(b);for(Q=L(N);null!==Q&&(!(Q.expirationTime>b)||a&&!k());){var d=Q.callback;if(null!==d){Q.callback=null;R=Q.priorityLevel;var e=d(Q.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?Q.callback=e:Q===L(N)&&M(N);V(b)}else M(N);Q=L(N)}if(null!==Q)var m=!0;else{var n=L(O);null!==n&&g(W,n.startTime-b);m=!1}return m}finally{Q=null,R=c,S=!1}}\nfunction Y(a){switch(a){case 1:return-1;case 2:return 250;case 5:return 1073741823;case 4:return 1E4;default:return 5E3}}var Z=l;exports.unstable_IdlePriority=5;exports.unstable_ImmediatePriority=1;exports.unstable_LowPriority=4;exports.unstable_NormalPriority=3;exports.unstable_Profiling=null;exports.unstable_UserBlockingPriority=2;exports.unstable_cancelCallback=function(a){a.callback=null};exports.unstable_continueExecution=function(){T||S||(T=!0,f(X))};\nexports.unstable_getCurrentPriorityLevel=function(){return R};exports.unstable_getFirstCallbackNode=function(){return L(N)};exports.unstable_next=function(a){switch(R){case 1:case 2:case 3:var b=3;break;default:b=R}var c=R;R=b;try{return a()}finally{R=c}};exports.unstable_pauseExecution=function(){};exports.unstable_requestPaint=Z;exports.unstable_runWithPriority=function(a,b){switch(a){case 1:case 2:case 3:case 4:case 5:break;default:a=3}var c=R;R=a;try{return b()}finally{R=c}};\nexports.unstable_scheduleCallback=function(a,b,c){var d=exports.unstable_now();if(\"object\"===typeof c&&null!==c){var e=c.delay;e=\"number\"===typeof e&&0<e?d+e:d;c=\"number\"===typeof c.timeout?c.timeout:Y(a)}else c=Y(a),e=d;c=e+c;a={id:P++,callback:b,priorityLevel:a,startTime:e,expirationTime:c,sortIndex:-1};e>d?(a.sortIndex=e,J(O,a),null===L(N)&&a===L(O)&&(U?h():U=!0,g(W,e-d))):(a.sortIndex=c,J(N,a),T||S||(T=!0,f(X)));return a};\nexports.unstable_shouldYield=function(){var a=exports.unstable_now();V(a);var b=L(N);return b!==Q&&null!==Q&&null!==b&&null!==b.callback&&b.startTime<=a&&b.expirationTime<Q.expirationTime||k()};exports.unstable_wrapCallback=function(a){var b=R;return function(){var c=R;R=b;try{return a.apply(this,arguments)}finally{R=c}}};\n\n},{}],83:[function(require,module,exports){\n(function (process){\n'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n\n}).call(this,require('_process'))\n},{\"./cjs/scheduler.development.js\":81,\"./cjs/scheduler.production.min.js\":82,\"_process\":67}],84:[function(require,module,exports){\n(function (process){\n'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler-tracing.production.min.js');\n} else {\n module.exports = require('./cjs/scheduler-tracing.development.js');\n}\n\n}).call(this,require('_process'))\n},{\"./cjs/scheduler-tracing.development.js\":79,\"./cjs/scheduler-tracing.production.min.js\":80,\"_process\":67}],85:[function(require,module,exports){\n(function (global){\n\"use strict\";\nvar g;\n\n\n\nif (typeof window !== \"undefined\")\n{\n\tg = window;\n}\nelse if (typeof global !== \"undefined\")\n{\n\tg = global;\n}\nelse if (typeof self !== \"undefined\")\n{\n\tg = self;\n}\nelse\n{\n\tg = this;\n}\n\n\n\nvar output =\n{\n\tshim: function(){},\n\tURL: g.URL,\n\tURLSearchParams: g.URLSearchParams\n};\n\n\n\nif (typeof define === \"function\" && define.amd)\n{\n\tdefine(function(){ return output });\n}\nelse if (typeof exports === \"object\")\n{\n\tmodule.exports = output;\n}\nelse\n{\n\tg.UniversalURL = output;\n}\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],86:[function(require,module,exports){\nmodule.exports = read\n\nvar MSB = 0x80\n , REST = 0x7F\n\nfunction read(buf, offset) {\n var res = 0\n , offset = offset || 0\n , shift = 0\n , counter = offset\n , b\n , l = buf.length\n\n do {\n if (counter >= l) {\n read.bytes = 0\n throw new RangeError('Could not decode varint')\n }\n b = buf[counter++]\n res += shift < 28\n ? (b & REST) << shift\n : (b & REST) * Math.pow(2, shift)\n shift += 7\n } while (b >= MSB)\n\n read.bytes = counter - offset\n\n return res\n}\n\n},{}],87:[function(require,module,exports){\nmodule.exports = encode\n\nvar MSB = 0x80\n , REST = 0x7F\n , MSBALL = ~REST\n , INT = Math.pow(2, 31)\n\nfunction encode(num, out, offset) {\n out = out || []\n offset = offset || 0\n var oldOffset = offset\n\n while(num >= INT) {\n out[offset++] = (num & 0xFF) | MSB\n num /= 128\n }\n while(num & MSBALL) {\n out[offset++] = (num & 0xFF) | MSB\n num >>>= 7\n }\n out[offset] = num | 0\n \n encode.bytes = offset - oldOffset + 1\n \n return out\n}\n\n},{}],88:[function(require,module,exports){\nmodule.exports = {\n encode: require('./encode.js')\n , decode: require('./decode.js')\n , encodingLength: require('./length.js')\n}\n\n},{\"./decode.js\":86,\"./encode.js\":87,\"./length.js\":89}],89:[function(require,module,exports){\n\nvar N1 = Math.pow(2, 7)\nvar N2 = Math.pow(2, 14)\nvar N3 = Math.pow(2, 21)\nvar N4 = Math.pow(2, 28)\nvar N5 = Math.pow(2, 35)\nvar N6 = Math.pow(2, 42)\nvar N7 = Math.pow(2, 49)\nvar N8 = Math.pow(2, 56)\nvar N9 = Math.pow(2, 63)\n\nmodule.exports = function (value) {\n return (\n value < N1 ? 1\n : value < N2 ? 2\n : value < N3 ? 3\n : value < N4 ? 4\n : value < N5 ? 5\n : value < N6 ? 6\n : value < N7 ? 7\n : value < N8 ? 8\n : value < N9 ? 9\n : 10\n )\n}\n\n},{}],90:[function(require,module,exports){\n(function (global){\n'use strict'\nmodule.exports = (typeof self === 'object' && self.self === self && self) ||\n (typeof global === 'object' && global.global === global && global) ||\n this\n\n}).call(this,typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : {})\n},{}],91:[function(require,module,exports){\n\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _objectDestructuringEmpty2 = _interopRequireDefault(require(\"@babel/runtime/helpers/objectDestructuringEmpty\"));\n\nvar _regenerator = _interopRequireDefault(require(\"@babel/runtime/regenerator\"));\n\nvar _asyncToGenerator2 = _interopRequireDefault(require(\"@babel/runtime/helpers/asyncToGenerator\"));\n\nvar _windowOrGlobal = _interopRequireDefault(require(\"window-or-global\"));\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _reactDom = _interopRequireDefault(require(\"react-dom\"));\n\nvar _profileHover = _interopRequireDefault(require(\"profile-hover\"));\n\n(function () {\n /*jslint node: true, browser: true*/\n 'use strict';\n\n var name = '3box-library'; // https://github.com/ensdomains/resolvers\n\n var BoxLibrary = function BoxLibrary(ipfsLoader) {\n this.ipfsLoader = ipfsLoader;\n };\n\n BoxLibrary.prototype.getLogger = function () {\n return _windowOrGlobal[\"default\"].log.getLogger(name);\n };\n\n BoxLibrary.prototype.loadReact = /*#__PURE__*/(0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee() {\n return _regenerator[\"default\"].wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n if (!(_windowOrGlobal[\"default\"].React === undefined || _windowOrGlobal[\"default\"].React == null)) {\n _context.next = 12;\n break;\n }\n\n _context.prev = 1;\n _context.next = 4;\n return this.ipfsLoader.loadReactLibrary();\n\n case 4:\n if (!(_windowOrGlobal[\"default\"].React !== undefined && _windowOrGlobal[\"default\"].React !== null)) {\n _context.next = 6;\n break;\n }\n\n return _context.abrupt(\"return\");\n\n case 6:\n _context.next = 11;\n break;\n\n case 8:\n _context.prev = 8;\n _context.t0 = _context[\"catch\"](1);\n this.getLogger().error(_context.t0);\n\n case 11:\n throw new Error('Unavailable React library...');\n\n case 12:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee, this, [[1, 8]]);\n }));\n BoxLibrary.prototype.loadThreeBox = /*#__PURE__*/(0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee2() {\n return _regenerator[\"default\"].wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n if (!(_windowOrGlobal[\"default\"].Box === undefined || _windowOrGlobal[\"default\"].Box == null)) {\n _context2.next = 12;\n break;\n }\n\n _context2.prev = 1;\n _context2.next = 4;\n return this.ipfsLoader.loadThreeBoxLibrary();\n\n case 4:\n if (!(_windowOrGlobal[\"default\"].Box !== undefined && _windowOrGlobal[\"default\"].Box !== null)) {\n _context2.next = 6;\n break;\n }\n\n return _context2.abrupt(\"return\");\n\n case 6:\n _context2.next = 11;\n break;\n\n case 8:\n _context2.prev = 8;\n _context2.t0 = _context2[\"catch\"](1);\n this.getLogger().error(_context2.t0);\n\n case 11:\n throw new Error('Unavailable 3box library...');\n\n case 12:\n case \"end\":\n return _context2.stop();\n }\n }\n }, _callee2, this, [[1, 8]]);\n }));\n BoxLibrary.prototype.loadThreeBoxProfile = /*#__PURE__*/(0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee3() {\n return _regenerator[\"default\"].wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n if (!(_windowOrGlobal[\"default\"].ProfileHover === undefined || _windowOrGlobal[\"default\"].ProfileHover == null)) {\n _context3.next = 12;\n break;\n }\n\n _context3.prev = 1;\n _context3.next = 4;\n return this.ipfsLoader.loadThreeBoxProfileLibrary();\n\n case 4:\n if (!(_windowOrGlobal[\"default\"].ProfileHover !== undefined && _windowOrGlobal[\"default\"].ProfileHover !== null)) {\n _context3.next = 6;\n break;\n }\n\n return _context3.abrupt(\"return\");\n\n case 6:\n _context3.next = 11;\n break;\n\n case 8:\n _context3.prev = 8;\n _context3.t0 = _context3[\"catch\"](1);\n this.getLogger().error(_context3.t0);\n\n case 11:\n throw new Error('Unavailable 3box profile hover library...');\n\n case 12:\n case \"end\":\n return _context3.stop();\n }\n }\n }, _callee3, this, [[1, 8]]);\n }));\n /*eslint no-empty-pattern: \"off\"*/\n\n BoxLibrary.prototype.load3BoxProfile = /*#__PURE__*/function () {\n var _ref4 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee4(provider, account) {\n var box, Example, appContainer;\n return _regenerator[\"default\"].wrap(function _callee4$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n if (!(_windowOrGlobal[\"default\"].Box === undefined || _windowOrGlobal[\"default\"].Box == null)) {\n _context4.next = 3;\n break;\n }\n\n _context4.next = 3;\n return this.loadThreeBox();\n\n case 3:\n _context4.next = 5;\n return _windowOrGlobal[\"default\"].Box.openBox(account, provider);\n\n case 5:\n box = _context4.sent;\n _context4.next = 8;\n return box.syncDone;\n\n case 8:\n Example = function Example(_ref5) {\n (0, _objectDestructuringEmpty2[\"default\"])(_ref5);\n return /*#__PURE__*/_react[\"default\"].createElement(\"div\", {\n className: \"ethAddress\"\n }, /*#__PURE__*/_react[\"default\"].createElement(_profileHover[\"default\"], {\n address: account\n }));\n };\n\n appContainer = document.getElementById('reactApp');\n\n _reactDom[\"default\"].render( /*#__PURE__*/_react[\"default\"].createElement(Example, null), appContainer);\n\n case 11:\n case \"end\":\n return _context4.stop();\n }\n }\n }, _callee4, this);\n }));\n\n return function (_x, _x2) {\n return _ref4.apply(this, arguments);\n };\n }();\n\n module.exports = BoxLibrary;\n})();\n\n},{\"@babel/runtime/helpers/asyncToGenerator\":2,\"@babel/runtime/helpers/interopRequireDefault\":3,\"@babel/runtime/helpers/objectDestructuringEmpty\":4,\"@babel/runtime/regenerator\":5,\"profile-hover\":68,\"react\":76,\"react-dom\":73,\"window-or-global\":90}],92:[function(require,module,exports){\n\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _regenerator = _interopRequireDefault(require(\"@babel/runtime/regenerator\"));\n\nvar _asyncToGenerator2 = _interopRequireDefault(require(\"@babel/runtime/helpers/asyncToGenerator\"));\n\nvar _cids = _interopRequireDefault(require(\"cids\"));\n\nvar _contentHash = _interopRequireDefault(require(\"content-hash\"));\n\nvar _windowOrGlobal = _interopRequireDefault(require(\"window-or-global\"));\n\n(function () {\n /*jslint node: true, browser: true*/\n 'use strict';\n\n var name = 'ens-library'; // https://github.com/ensdomains/resolvers\n\n var EnsLibrary = function EnsLibrary(ipfsLoader) {\n this.ipfsLoader = ipfsLoader;\n this.network = {\n 1: 'Ethereum Main Network: \"Mainnet\", chainId: \"1\"',\n 3: 'Ethereum Test Network (PoW): \"Ropsten\", chainId: \"3\"',\n 4: 'Ethereum Test Network (PoA): \"Rinkeby\", chainId: \"4\"',\n 5: 'Ethereum Test Network (PoA): \"Goerli\", chainId: \"5\"',\n 42: 'Ethereum Test Network (PoA): \"Kovan\", chainId: \"42\"'\n };\n this.etherscan = {\n 1: 'https://etherscan.io',\n 3: 'https://ropsten.etherscan.io',\n 4: 'https://rinkeby.etherscan.io',\n 5: 'https://goerli.etherscan.io',\n 42: 'https://kovan.etherscan.io'\n }; // https://docs.ens.domains/ens-deployments\n // https://github.com/ensdomains/ui/blob/master/src/ens.js\n\n this.registry = {\n 1: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e',\n 3: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e',\n 4: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e',\n 5: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e'\n };\n };\n\n EnsLibrary.prototype.getLogger = function () {\n return _windowOrGlobal[\"default\"].log.getLogger(name);\n };\n\n EnsLibrary.prototype.getEtherscanRegistry = function () {\n return this.etherscan;\n };\n\n EnsLibrary.prototype.getNetwork = function () {\n return this.network;\n };\n\n EnsLibrary.prototype.getENSRegistry = function () {\n return this.registry;\n };\n\n EnsLibrary.prototype.loadEthers = /*#__PURE__*/(0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee() {\n return _regenerator[\"default\"].wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n if (!(_windowOrGlobal[\"default\"].ethers === undefined || _windowOrGlobal[\"default\"].ethers == null)) {\n _context.next = 12;\n break;\n }\n\n _context.prev = 1;\n _context.next = 4;\n return this.ipfsLoader.loadEtherJsLibrary();\n\n case 4:\n if (!(_windowOrGlobal[\"default\"].ethers !== undefined && _windowOrGlobal[\"default\"].ethers !== null)) {\n _context.next = 6;\n break;\n }\n\n return _context.abrupt(\"return\");\n\n case 6:\n _context.next = 11;\n break;\n\n case 8:\n _context.prev = 8;\n _context.t0 = _context[\"catch\"](1);\n this.getLogger().error(_context.t0);\n\n case 11:\n throw new Error('Unavailable Ethereum library...');\n\n case 12:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee, this, [[1, 8]]);\n })); // https://github.com/ensdomains/ui/blob/master/src/utils/contents.js\n\n EnsLibrary.prototype.decodeContenthash = function (content) {\n var decoded = null;\n var protocol = null;\n\n if (content.error) {\n throw new Error(content.error);\n }\n\n if (content) {\n var codec = _contentHash[\"default\"].getCodec(content);\n\n decoded = _contentHash[\"default\"].decode(content);\n\n if (codec === 'ipfs-ns') {\n protocol = 'ipfs';\n } else if (codec === 'swarm-ns') {\n protocol = 'bzz';\n } else if (codec === 'onion') {\n protocol = 'onion';\n } else if (codec === 'onion3') {\n protocol = 'onion3';\n }\n }\n\n return {\n decoded: decoded,\n protocol: protocol\n };\n }; // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1577.md\n\n\n EnsLibrary.prototype.encodeContenthash = function (content) {\n var type = null;\n var text = null;\n var encoded = null;\n content = content === undefined || content == null || content.trim() === '' ? null : content.trim();\n\n if (content == null) {\n return null;\n }\n\n var matched = content.match(/^(ipfs|bzz|onion|onion3):\\/\\/(.*)/) || content.match(/\\/(ipfs)\\/(.*)/);\n\n if (matched) {\n type = matched[1];\n text = matched[2];\n }\n\n if (type === 'ipfs') {\n if (text.length >= 4) {\n var cid = new _cids[\"default\"](text);\n\n if (cid.version !== 0) {\n throw new Error(\"ENS domain content should be Base58 (CidV0): \".concat(text));\n }\n\n encoded = '0x' + _contentHash[\"default\"].fromIpfs(text);\n }\n } else {\n throw new Error(\"Unsupported ENS domain protocol: \".concat(type));\n }\n\n return {\n encoded: encoded\n };\n };\n\n EnsLibrary.prototype.enableProvider = /*#__PURE__*/function () {\n var _ref2 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee2(provider) {\n var accounts;\n return _regenerator[\"default\"].wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n if (!(provider === undefined || provider == null)) {\n _context2.next = 2;\n break;\n }\n\n throw new Error('Undefined Ethereum provider...');\n\n case 2:\n // Enable Provider\n accounts = null; // Handle connection, per EIP 1102\n\n if (!(typeof provider.send === 'function')) {\n _context2.next = 20;\n break;\n }\n\n _context2.prev = 4;\n _context2.next = 7;\n return provider.send('eth_requestAccounts');\n\n case 7:\n _context2.next = 14;\n break;\n\n case 9:\n _context2.prev = 9;\n _context2.t0 = _context2[\"catch\"](4);\n\n if (!(_context2.t0.code === 4001)) {\n _context2.next = 13;\n break;\n }\n\n throw new Error('User rejected request...');\n\n case 13:\n throw new Error(_context2.t0.message);\n\n case 14:\n _context2.next = 16;\n return provider.send('eth_accounts');\n\n case 16:\n accounts = _context2.sent;\n\n // https://medium.com/metamask/breaking-changes-to-the-metamask-inpage-provider-b4dde069dd0a\n // Metamask returns accounts.results rather than an array as described in their above communication\n if (accounts !== undefined && accounts !== null && typeof accounts.result !== 'undefined' && Array.isArray(accounts.result)) {\n accounts = accounts.result;\n } // Legacy\n\n\n _context2.next = 24;\n break;\n\n case 20:\n if (!(typeof provider.enable === 'function')) {\n _context2.next = 24;\n break;\n }\n\n _context2.next = 23;\n return provider.enable();\n\n case 23:\n accounts = _context2.sent;\n\n case 24:\n if (!(accounts === undefined || accounts == null || Array.isArray(accounts) === false || accounts.length === 0)) {\n _context2.next = 26;\n break;\n }\n\n throw new Error('Unable to retrieve an Ethereum account...');\n\n case 26:\n return _context2.abrupt(\"return\", accounts[0]);\n\n case 27:\n case \"end\":\n return _context2.stop();\n }\n }\n }, _callee2, null, [[4, 9]]);\n }));\n\n return function (_x) {\n return _ref2.apply(this, arguments);\n };\n }();\n\n EnsLibrary.prototype.getProvider = function () {\n // Retrieve an available Ethereum provider\n var provider = null;\n\n if (typeof _windowOrGlobal[\"default\"].ethereum !== 'undefined') {\n provider = _windowOrGlobal[\"default\"].ethereum;\n this.getLogger().info('Ethereum provider: \"window.ethereum\"...');\n }\n\n if (provider == null && _windowOrGlobal[\"default\"].web3 !== undefined && _windowOrGlobal[\"default\"].web3.currentProvider !== undefined) {\n provider = _windowOrGlobal[\"default\"].web3.currentProvider;\n this.getLogger().info('Ethereum provider: \"window.web3.currentProvider\"...');\n }\n\n if (provider == null) {\n throw new Error('Unable to retrieve an Ethereum provider...');\n } // https://docs.metamask.io/guide/ethereum-provider.html#methods-current-api\n\n\n if (provider.isMetaMask) {\n provider.autoRefreshOnNetworkChange = false;\n } // return provider\n\n\n return provider;\n };\n\n EnsLibrary.prototype.getEnabledWeb3Provider = /*#__PURE__*/function () {\n var _ref3 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee3(provider) {\n var account, web3, network;\n return _regenerator[\"default\"].wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n if (!(provider === undefined || provider == null)) {\n _context3.next = 2;\n break;\n }\n\n throw new Error('Undefined Ethereum provider...');\n\n case 2:\n if (!(_windowOrGlobal[\"default\"].ethers === undefined || _windowOrGlobal[\"default\"].ethers == null)) {\n _context3.next = 5;\n break;\n }\n\n _context3.next = 5;\n return this.loadEthers();\n\n case 5:\n _context3.next = 7;\n return this.enableProvider(provider);\n\n case 7:\n account = _context3.sent;\n // Instantiate a Web3Provider\n web3 = new _windowOrGlobal[\"default\"].ethers.providers.Web3Provider(provider); // Retrieve current network\n\n _context3.next = 11;\n return web3.getNetwork();\n\n case 11:\n network = _context3.sent;\n return _context3.abrupt(\"return\", {\n web3: web3,\n chainId: network.chainId,\n account: account\n });\n\n case 13:\n case \"end\":\n return _context3.stop();\n }\n }\n }, _callee3, this);\n }));\n\n return function (_x2) {\n return _ref3.apply(this, arguments);\n };\n }();\n\n EnsLibrary.prototype.getWeb3Provider = /*#__PURE__*/function () {\n var _ref4 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee4(provider) {\n var web3, network;\n return _regenerator[\"default\"].wrap(function _callee4$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n if (!(provider === undefined || provider == null)) {\n _context4.next = 2;\n break;\n }\n\n throw new Error('Undefined Ethereum provider...');\n\n case 2:\n if (!(_windowOrGlobal[\"default\"].ethers === undefined || _windowOrGlobal[\"default\"].ethers == null)) {\n _context4.next = 5;\n break;\n }\n\n _context4.next = 5;\n return this.loadEthers();\n\n case 5:\n // Instantiate an ethers Web3Provider\n web3 = new _windowOrGlobal[\"default\"].ethers.providers.Web3Provider(provider); // Retrieve the current network\n\n _context4.next = 8;\n return web3.getNetwork();\n\n case 8:\n network = _context4.sent;\n return _context4.abrupt(\"return\", {\n web3: web3,\n chainId: network.chainId\n });\n\n case 10:\n case \"end\":\n return _context4.stop();\n }\n }\n }, _callee4, this);\n }));\n\n return function (_x3) {\n return _ref4.apply(this, arguments);\n };\n }();\n\n EnsLibrary.prototype.getRegistry = /*#__PURE__*/function () {\n var _ref5 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee5(web3) {\n var network, registry;\n return _regenerator[\"default\"].wrap(function _callee5$(_context5) {\n while (1) {\n switch (_context5.prev = _context5.next) {\n case 0:\n if (!(web3 === undefined || web3 == null)) {\n _context5.next = 2;\n break;\n }\n\n throw new Error('Undefined Web3 provider...');\n\n case 2:\n _context5.next = 4;\n return web3.getNetwork();\n\n case 4:\n network = _context5.sent;\n // Retrieve an Ethereum ENS Registry address\n registry = null;\n\n try {\n registry = this.registry[network.chainId];\n } catch (error) {\n this.getLogger().error(error);\n }\n\n if (!(registry === undefined || registry == null)) {\n _context5.next = 9;\n break;\n }\n\n throw new Error(\"Unsupported Ethereum network: \".concat(network.chainId));\n\n case 9:\n return _context5.abrupt(\"return\", {\n chainId: network.chainId,\n registry: registry\n });\n\n case 10:\n case \"end\":\n return _context5.stop();\n }\n }\n }, _callee5, this);\n }));\n\n return function (_x4) {\n return _ref5.apply(this, arguments);\n };\n }();\n\n EnsLibrary.prototype.getResolver = /*#__PURE__*/function () {\n var _ref6 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee6(web3, registry, node) {\n var abi, iface, data, result, decoded;\n return _regenerator[\"default\"].wrap(function _callee6$(_context6) {\n while (1) {\n switch (_context6.prev = _context6.next) {\n case 0:\n if (!(web3 === undefined || web3 == null)) {\n _context6.next = 2;\n break;\n }\n\n throw new Error('Undefined Web3 provider...');\n\n case 2:\n node = node === undefined || node == null || node.trim() === '' ? null : node.trim();\n\n if (!(node == null)) {\n _context6.next = 5;\n break;\n }\n\n throw new Error('Undefined ENS domain resolver...');\n\n case 5:\n registry = registry === undefined || registry == null || registry.trim() === '' ? null : registry.trim();\n\n if (!(registry == null)) {\n _context6.next = 8;\n break;\n }\n\n throw new Error('Undefined ENS registry address...');\n\n case 8:\n if (!(_windowOrGlobal[\"default\"].ethers === undefined || _windowOrGlobal[\"default\"].ethers == null)) {\n _context6.next = 11;\n break;\n }\n\n _context6.next = 11;\n return this.loadEthers();\n\n case 11:\n // Low level call\n abi = [{\n name: 'resolver',\n type: 'function',\n inputs: [{\n type: 'bytes32'\n }]\n }];\n iface = new _windowOrGlobal[\"default\"].ethers.utils.Interface(abi);\n data = iface.functions.resolver.encode([node]);\n _context6.next = 16;\n return web3.call({\n to: registry,\n data: data\n });\n\n case 16:\n result = _context6.sent;\n\n if (!(result === undefined || result == null || result === '0x')) {\n _context6.next = 19;\n break;\n }\n\n return _context6.abrupt(\"return\", null);\n\n case 19:\n _context6.prev = 19;\n decoded = _windowOrGlobal[\"default\"].ethers.utils.defaultAbiCoder.decode(['address'], result);\n return _context6.abrupt(\"return\", decoded[0]);\n\n case 24:\n _context6.prev = 24;\n _context6.t0 = _context6[\"catch\"](19);\n this.getLogger().error(_context6.t0);\n\n case 27:\n return _context6.abrupt(\"return\", null);\n\n case 28:\n case \"end\":\n return _context6.stop();\n }\n }\n }, _callee6, this, [[19, 24]]);\n }));\n\n return function (_x5, _x6, _x7) {\n return _ref6.apply(this, arguments);\n };\n }(); // https://eips.ethereum.org/EIPS/eip-165\n\n\n EnsLibrary.prototype.checkEip165 = /*#__PURE__*/function () {\n var _ref7 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee7(web3, address) {\n var abi, iface, data, result, decoded;\n return _regenerator[\"default\"].wrap(function _callee7$(_context7) {\n while (1) {\n switch (_context7.prev = _context7.next) {\n case 0:\n if (!(web3 === undefined || web3 == null)) {\n _context7.next = 2;\n break;\n }\n\n throw new Error('Undefined Web3 provider...');\n\n case 2:\n address = address === undefined || address == null || address.trim() === '' ? null : address.trim();\n\n if (!(address == null)) {\n _context7.next = 5;\n break;\n }\n\n throw new Error('Undefined Ethereum address...');\n\n case 5:\n if (!(_windowOrGlobal[\"default\"].ethers === undefined || _windowOrGlobal[\"default\"].ethers == null)) {\n _context7.next = 8;\n break;\n }\n\n _context7.next = 8;\n return this.loadEthers();\n\n case 8:\n // true when interfaceID is 0x01ffc9a7\n abi = [{\n name: 'supportsInterface',\n type: 'function',\n inputs: [{\n type: 'bytes4'\n }]\n }];\n iface = new _windowOrGlobal[\"default\"].ethers.utils.Interface(abi);\n data = iface.functions.supportsInterface.encode(['0x01ffc9a7']);\n _context7.next = 13;\n return web3.call({\n to: address,\n data: data\n });\n\n case 13:\n result = _context7.sent;\n\n if (!(result === undefined || result == null || result === '0x')) {\n _context7.next = 16;\n break;\n }\n\n return _context7.abrupt(\"return\", false);\n\n case 16:\n _context7.prev = 16;\n decoded = _windowOrGlobal[\"default\"].ethers.utils.defaultAbiCoder.decode(['bool'], result);\n\n if (!(decoded[0] === false)) {\n _context7.next = 20;\n break;\n }\n\n return _context7.abrupt(\"return\", false);\n\n case 20:\n _context7.next = 26;\n break;\n\n case 22:\n _context7.prev = 22;\n _context7.t0 = _context7[\"catch\"](16);\n this.getLogger().error(_context7.t0);\n return _context7.abrupt(\"return\", false);\n\n case 26:\n // false when interfaceID is 0xffffffff\n data = iface.functions.supportsInterface.encode(['0xffffffff']);\n _context7.next = 29;\n return web3.call({\n to: address,\n data: data\n });\n\n case 29:\n result = _context7.sent;\n\n if (!(result === undefined || result == null || result === '0x')) {\n _context7.next = 32;\n break;\n }\n\n return _context7.abrupt(\"return\", false);\n\n case 32:\n _context7.prev = 32;\n decoded = _windowOrGlobal[\"default\"].ethers.utils.defaultAbiCoder.decode(['bool'], result); // conform to spec\n\n if (!(decoded[0] === false)) {\n _context7.next = 36;\n break;\n }\n\n return _context7.abrupt(\"return\", true);\n\n case 36:\n _context7.next = 41;\n break;\n\n case 38:\n _context7.prev = 38;\n _context7.t1 = _context7[\"catch\"](32);\n this.getLogger().error(_context7.t1);\n\n case 41:\n return _context7.abrupt(\"return\", false);\n\n case 42:\n case \"end\":\n return _context7.stop();\n }\n }\n }, _callee7, this, [[16, 22], [32, 38]]);\n }));\n\n return function (_x8, _x9) {\n return _ref7.apply(this, arguments);\n };\n }(); // https://eips.ethereum.org/EIPS/eip-1577\n\n\n EnsLibrary.prototype.checkEip1577 = /*#__PURE__*/function () {\n var _ref8 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee8(web3, address) {\n var abi, iface, data, result, decoded;\n return _regenerator[\"default\"].wrap(function _callee8$(_context8) {\n while (1) {\n switch (_context8.prev = _context8.next) {\n case 0:\n if (!(web3 === undefined || web3 == null)) {\n _context8.next = 2;\n break;\n }\n\n throw new Error('Undefined Web3 provider...');\n\n case 2:\n address = address === undefined || address == null || address.trim() === '' ? null : address.trim();\n\n if (!(address == null)) {\n _context8.next = 5;\n break;\n }\n\n throw new Error('Undefined Ethereum address...');\n\n case 5:\n if (!(_windowOrGlobal[\"default\"].ethers === undefined || _windowOrGlobal[\"default\"].ethers == null)) {\n _context8.next = 8;\n break;\n }\n\n _context8.next = 8;\n return this.loadEthers();\n\n case 8:\n // contenthash, true when interfaceID is 0xbc1c58d1\n abi = [{\n name: 'supportsInterface',\n type: 'function',\n inputs: [{\n type: 'bytes4'\n }]\n }];\n iface = new _windowOrGlobal[\"default\"].ethers.utils.Interface(abi);\n data = iface.functions.supportsInterface.encode(['0xbc1c58d1']);\n _context8.next = 13;\n return web3.call({\n to: address,\n data: data\n });\n\n case 13:\n result = _context8.sent;\n\n if (!(result === undefined || result == null || result === '0x')) {\n _context8.next = 16;\n break;\n }\n\n return _context8.abrupt(\"return\", false);\n\n case 16:\n _context8.prev = 16;\n // decode\n decoded = _windowOrGlobal[\"default\"].ethers.utils.defaultAbiCoder.decode(['bool'], result);\n\n if (!(decoded[0] === false)) {\n _context8.next = 20;\n break;\n }\n\n return _context8.abrupt(\"return\", false);\n\n case 20:\n _context8.next = 26;\n break;\n\n case 22:\n _context8.prev = 22;\n _context8.t0 = _context8[\"catch\"](16);\n this.getLogger().error(_context8.t0);\n return _context8.abrupt(\"return\", false);\n\n case 26:\n return _context8.abrupt(\"return\", true);\n\n case 27:\n case \"end\":\n return _context8.stop();\n }\n }\n }, _callee8, this, [[16, 22]]);\n }));\n\n return function (_x10, _x11) {\n return _ref8.apply(this, arguments);\n };\n }();\n\n EnsLibrary.prototype.getContentHash = /*#__PURE__*/function () {\n var _ref9 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee9(domain, web3) {\n var _yield$this$getWeb3Pr, domainHash, _yield$this$getRegist, chainId, registry, resolver, eip165, eip1577, abi, iface, data, result, content, _this$decodeContentha, decoded, protocol;\n\n return _regenerator[\"default\"].wrap(function _callee9$(_context9) {\n while (1) {\n switch (_context9.prev = _context9.next) {\n case 0:\n if (!(_windowOrGlobal[\"default\"].ethers === undefined || _windowOrGlobal[\"default\"].ethers == null)) {\n _context9.next = 3;\n break;\n }\n\n _context9.next = 3;\n return this.loadEthers();\n\n case 3:\n domain = domain === undefined || domain == null || domain.trim() === '' ? null : domain.trim();\n\n if (!(domain == null)) {\n _context9.next = 6;\n break;\n }\n\n throw new Error('Undefined ENS domain...');\n\n case 6:\n if (!(web3 === undefined)) {\n _context9.next = 11;\n break;\n }\n\n _context9.next = 9;\n return this.getWeb3Provider();\n\n case 9:\n _yield$this$getWeb3Pr = _context9.sent;\n web3 = _yield$this$getWeb3Pr.web3;\n\n case 11:\n // Resolve domain as namehash\n domainHash = _windowOrGlobal[\"default\"].ethers.utils.namehash(domain); // Fetch ens registry address\n\n _context9.next = 14;\n return this.getRegistry(web3);\n\n case 14:\n _yield$this$getRegist = _context9.sent;\n chainId = _yield$this$getRegist.chainId;\n registry = _yield$this$getRegist.registry;\n // Log\n this.getLogger().info(\"ENS registry: \\n \".concat(this.etherscan[chainId], \"/address/\").concat(registry)); // Fetch resolver address\n\n _context9.next = 20;\n return this.getResolver(web3, registry, domainHash);\n\n case 20:\n resolver = _context9.sent;\n\n if (!(resolver == null || /^0x0+$/.test(resolver) === true)) {\n _context9.next = 23;\n break;\n }\n\n throw new Error('Undefined ENS domain resolver...');\n\n case 23:\n // Log\n this.getLogger().info(\"ENS domain resolver:\\n \".concat(this.etherscan[chainId], \"/address/\").concat(resolver)); // Check if resolver is EIP165\n\n _context9.next = 26;\n return this.checkEip165(web3, resolver);\n\n case 26:\n eip165 = _context9.sent;\n\n if (!(eip165 === false)) {\n _context9.next = 29;\n break;\n }\n\n throw new Error('ENS domain resolver do not conform to EIP165...');\n\n case 29:\n _context9.next = 31;\n return this.checkEip1577(web3, resolver);\n\n case 31:\n eip1577 = _context9.sent;\n\n if (!(eip1577 === false)) {\n _context9.next = 34;\n break;\n }\n\n throw new Error('ENS domain resolver do not conform to EIP1577...');\n\n case 34:\n // Retrieve content hash\n this.getLogger().info('Processing ENS domain content...');\n abi = [{\n name: 'contenthash',\n type: 'function',\n inputs: [{\n type: 'bytes32'\n }]\n }];\n iface = new _windowOrGlobal[\"default\"].ethers.utils.Interface(abi);\n data = iface.functions.contenthash.encode([domainHash]);\n _context9.next = 40;\n return web3.call({\n to: resolver,\n data: data\n });\n\n case 40:\n result = _context9.sent;\n\n if (!(result === undefined || result == null || result === '0x')) {\n _context9.next = 43;\n break;\n }\n\n return _context9.abrupt(\"return\", {\n content: null,\n protocol: null\n });\n\n case 43:\n // decode bytes result\n content = _windowOrGlobal[\"default\"].ethers.utils.defaultAbiCoder.decode(['bytes'], result);\n\n if (!(content === undefined || content == null || Array.isArray(content) === false || content[0] === '0x')) {\n _context9.next = 46;\n break;\n }\n\n return _context9.abrupt(\"return\", {\n content: null,\n protocol: null\n });\n\n case 46:\n // Decode content hash\n _this$decodeContentha = this.decodeContenthash(content[0]), decoded = _this$decodeContentha.decoded, protocol = _this$decodeContentha.protocol;\n return _context9.abrupt(\"return\", {\n content: decoded,\n protocol: protocol\n });\n\n case 48:\n case \"end\":\n return _context9.stop();\n }\n }\n }, _callee9, this);\n }));\n\n return function (_x12, _x13) {\n return _ref9.apply(this, arguments);\n };\n }();\n\n EnsLibrary.prototype.isOwner = /*#__PURE__*/function () {\n var _ref10 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee10(domain, web3, account) {\n var _yield$this$getEnable, domainHash, _yield$this$getRegist2, chainId, registry, abi, iface, data, result, decoded;\n\n return _regenerator[\"default\"].wrap(function _callee10$(_context10) {\n while (1) {\n switch (_context10.prev = _context10.next) {\n case 0:\n if (!(_windowOrGlobal[\"default\"].ethers === undefined || _windowOrGlobal[\"default\"].ethers == null)) {\n _context10.next = 3;\n break;\n }\n\n _context10.next = 3;\n return this.loadEthers();\n\n case 3:\n domain = domain === undefined || domain == null || domain.trim() === '' ? null : domain.trim();\n\n if (!(domain == null)) {\n _context10.next = 6;\n break;\n }\n\n throw new Error('Undefined ENS domain...');\n\n case 6:\n if (!(web3 === undefined || account === undefined)) {\n _context10.next = 12;\n break;\n }\n\n _context10.next = 9;\n return this.getEnabledWeb3Provider();\n\n case 9:\n _yield$this$getEnable = _context10.sent;\n web3 = _yield$this$getEnable.web3;\n account = _yield$this$getEnable.account;\n\n case 12:\n // Resolve domain as namehash\n domainHash = _windowOrGlobal[\"default\"].ethers.utils.namehash(domain); // Fetch ens registry address\n\n _context10.next = 15;\n return this.getRegistry(web3);\n\n case 15:\n _yield$this$getRegist2 = _context10.sent;\n chainId = _yield$this$getRegist2.chainId;\n registry = _yield$this$getRegist2.registry;\n // Log\n this.getLogger().info(\"ENS registry: \\n \".concat(this.etherscan[chainId], \"/address/\").concat(registry));\n this.getLogger().info('Processing owner...');\n abi = [{\n name: 'owner',\n type: 'function',\n inputs: [{\n type: 'bytes32'\n }]\n }];\n iface = new _windowOrGlobal[\"default\"].ethers.utils.Interface(abi);\n data = iface.functions.owner.encode([domainHash]);\n _context10.next = 25;\n return web3.call({\n to: registry,\n data: data\n });\n\n case 25:\n result = _context10.sent;\n\n if (!(result === undefined || result == null || result === '0x')) {\n _context10.next = 28;\n break;\n }\n\n return _context10.abrupt(\"return\", false);\n\n case 28:\n _context10.prev = 28;\n decoded = _windowOrGlobal[\"default\"].ethers.utils.defaultAbiCoder.decode(['address'], result);\n return _context10.abrupt(\"return\", decoded[0].toLowerCase() === account.toLowerCase());\n\n case 33:\n _context10.prev = 33;\n _context10.t0 = _context10[\"catch\"](28);\n this.getLogger().error(_context10.t0);\n\n case 36:\n return _context10.abrupt(\"return\", false);\n\n case 37:\n case \"end\":\n return _context10.stop();\n }\n }\n }, _callee10, this, [[28, 33]]);\n }));\n\n return function (_x14, _x15, _x16) {\n return _ref10.apply(this, arguments);\n };\n }();\n\n EnsLibrary.prototype.setContentHash = /*#__PURE__*/function () {\n var _ref11 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee11(domain, cid, web3, account) {\n var _yield$this$getEnable2, domainHash, _yield$this$getRegist3, chainId, registry, resolver, eip165, eip1577, _this$encodeContentha, encoded, abi, iface, data, signer, tx;\n\n return _regenerator[\"default\"].wrap(function _callee11$(_context11) {\n while (1) {\n switch (_context11.prev = _context11.next) {\n case 0:\n cid = cid === undefined || cid == null || cid.toString().trim() === '' ? null : cid.toString().trim();\n\n if (!(cid == null)) {\n _context11.next = 3;\n break;\n }\n\n throw new Error('Undefined IPFS identifier...');\n\n case 3:\n domain = domain === undefined || domain == null || domain.trim() === '' ? null : domain.trim();\n\n if (!(domain == null)) {\n _context11.next = 6;\n break;\n }\n\n throw new Error('Undefined ENS domain...');\n\n case 6:\n if (!(web3 === undefined || account === undefined)) {\n _context11.next = 12;\n break;\n }\n\n _context11.next = 9;\n return this.getEnabledWeb3Provider();\n\n case 9:\n _yield$this$getEnable2 = _context11.sent;\n web3 = _yield$this$getEnable2.web3;\n account = _yield$this$getEnable2.account;\n\n case 12:\n // Resolve domain as namehash\n domainHash = _windowOrGlobal[\"default\"].ethers.utils.namehash(domain); // Fetch ens registry address\n\n _context11.next = 15;\n return this.getRegistry(web3);\n\n case 15:\n _yield$this$getRegist3 = _context11.sent;\n chainId = _yield$this$getRegist3.chainId;\n registry = _yield$this$getRegist3.registry;\n this.getLogger().info(\"ENS registry:\\n \".concat(this.etherscan[chainId], \"/address/\").concat(registry));\n _context11.next = 21;\n return this.getResolver(web3, registry, domainHash);\n\n case 21:\n resolver = _context11.sent;\n\n if (!(resolver == null || /^0x0+$/.test(resolver) === true)) {\n _context11.next = 24;\n break;\n }\n\n throw new Error('Undefined ENS resolver...');\n\n case 24:\n this.getLogger().info(\"ENS domain resolver:\\n \".concat(this.etherscan[chainId], \"/address/\").concat(resolver)); // Check if resolver is EIP165\n\n _context11.next = 27;\n return this.checkEip165(web3, resolver);\n\n case 27:\n eip165 = _context11.sent;\n\n if (!(eip165 === false)) {\n _context11.next = 30;\n break;\n }\n\n throw new Error('ENS resolver do not conform to EIP165...');\n\n case 30:\n _context11.next = 32;\n return this.checkEip1577(web3, resolver);\n\n case 32:\n eip1577 = _context11.sent;\n\n if (!(eip1577 === false)) {\n _context11.next = 35;\n break;\n }\n\n throw new Error('ENS resolver do not conform to EIP1577...');\n\n case 35:\n // Encode cid\n _this$encodeContentha = this.encodeContenthash('ipfs://' + cid), encoded = _this$encodeContentha.encoded; // Set Contenthash\n\n this.getLogger().info('Processing ENS domain content...');\n abi = [{\n name: 'setContenthash',\n type: 'function',\n inputs: [{\n type: 'bytes32'\n }, {\n type: 'bytes'\n }]\n }];\n iface = new _windowOrGlobal[\"default\"].ethers.utils.Interface(abi);\n data = iface.functions.setContenthash.encode([domainHash, encoded]);\n signer = web3.getSigner();\n _context11.next = 43;\n return signer.sendTransaction({\n to: resolver,\n data: data\n });\n\n case 43:\n tx = _context11.sent;\n this.getLogger().info(\"Processing Transaction:\\n \".concat(this.etherscan[chainId], \"/tx/\").concat(tx.hash)); // Wait for transaction completion\n\n _context11.next = 47;\n return tx.wait();\n\n case 47:\n this.getLogger().info('Processed ENS domain content...');\n\n case 48:\n case \"end\":\n return _context11.stop();\n }\n }\n }, _callee11, this);\n }));\n\n return function (_x17, _x18, _x19, _x20) {\n return _ref11.apply(this, arguments);\n };\n }();\n\n module.exports = EnsLibrary;\n})();\n\n},{\"@babel/runtime/helpers/asyncToGenerator\":2,\"@babel/runtime/helpers/interopRequireDefault\":3,\"@babel/runtime/regenerator\":5,\"cids\":10,\"content-hash\":35,\"window-or-global\":90}],93:[function(require,module,exports){\n\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _regenerator = _interopRequireDefault(require(\"@babel/runtime/regenerator\"));\n\nvar _asyncToGenerator2 = _interopRequireDefault(require(\"@babel/runtime/helpers/asyncToGenerator\"));\n\nvar _cids = _interopRequireDefault(require(\"cids\"));\n\nvar _windowOrGlobal = _interopRequireDefault(require(\"window-or-global\"));\n\nvar _ensLibrary = _interopRequireDefault(require(\"./ens-library\"));\n\nvar _ipfsLibrary = _interopRequireDefault(require(\"./ipfs-library\"));\n\nvar _ipfsLoader = _interopRequireDefault(require(\"./ipfs-loader\"));\n\nvar _ipfsUrl = _interopRequireDefault(require(\"./ipfs-url\"));\n\nvar _boxLibrary = _interopRequireDefault(require(\"./box-library\"));\n\n/*\\\ntitle: $:/plugins/ipfs/ipfs-bundle.js\ntype: application/javascript\ntags: $:/ipfs/core\nmodule-type: library\n\nIPFS Bundle\n\n\\*/\n(function () {\n /*jslint node: true, browser: true*/\n 'use strict';\n\n var cidAnalyser = 'https://cid.ipfs.io/#';\n var name = 'ipfs-bundle';\n\n var IpfsBundle = function IpfsBundle() {\n this.once = false;\n };\n\n IpfsBundle.prototype.getLogger = function () {\n return _windowOrGlobal[\"default\"].log.getLogger(name);\n };\n\n IpfsBundle.prototype.init = function () {\n // Init once\n if (this.once) {\n return;\n }\n\n this.ipfsLoader = new _ipfsLoader[\"default\"](this);\n this.ensLibrary = new _ensLibrary[\"default\"](this.ipfsLoader);\n this.ipfsLibrary = new _ipfsLibrary[\"default\"](this);\n this.ipfsUrl = new _ipfsUrl[\"default\"]();\n this.boxLibrary = new _boxLibrary[\"default\"](this.ipfsLoader); // Init once\n\n this.once = true;\n };\n\n IpfsBundle.prototype.isJson = function (content) {\n return this.ipfsLoader.isJson(content);\n };\n\n IpfsBundle.prototype.loadToBase64 = /*#__PURE__*/function () {\n var _ref = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee(url) {\n return _regenerator[\"default\"].wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n _context.next = 2;\n return this.ipfsLoader.loadToBase64(url);\n\n case 2:\n return _context.abrupt(\"return\", _context.sent);\n\n case 3:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee, this);\n }));\n\n return function (_x) {\n return _ref.apply(this, arguments);\n };\n }();\n\n IpfsBundle.prototype.loadToUtf8 = /*#__PURE__*/function () {\n var _ref2 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee2(url) {\n return _regenerator[\"default\"].wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n _context2.next = 2;\n return this.ipfsLoader.loadToUtf8(url);\n\n case 2:\n return _context2.abrupt(\"return\", _context2.sent);\n\n case 3:\n case \"end\":\n return _context2.stop();\n }\n }\n }, _callee2, this);\n }));\n\n return function (_x2) {\n return _ref2.apply(this, arguments);\n };\n }();\n\n IpfsBundle.prototype.decodeCid = function (pathname) {\n // Check\n if (pathname === undefined || pathname == null || pathname.trim() === '' || pathname.trim() === '/') {\n return {\n cid: null,\n ipnsIdentifier: null,\n protocol: null\n };\n }\n\n var identifier = null;\n var protocol = null; // Parse\n\n var members = pathname.trim().split('/');\n\n for (var i = 0; i < members.length; i++) {\n // Ignore\n if (members[i].trim() === '') {\n continue;\n } // First non empty member\n\n\n if (protocol == null) {\n protocol = members[i];\n continue;\n } // Second non empty member\n\n\n if (identifier == null) {\n identifier = members[i];\n break;\n } // Nothing to process\n\n\n break;\n } // Check\n\n\n if (protocol == null || identifier == null) {\n return {\n cid: null,\n ipnsIdentifier: null,\n protocol: null\n };\n } // Check protocol\n\n\n if (protocol !== 'ipfs' && protocol !== 'ipns') {\n return {\n cid: null,\n ipnsIdentifier: null,\n protocol: null\n };\n } // Check\n\n\n var cid = null;\n var ipnsIdentifier = null;\n\n if (protocol === 'ipns') {\n ipnsIdentifier = identifier;\n } else if (this.isCid(identifier)) {\n cid = identifier;\n } // All good\n\n\n return {\n cid: cid,\n ipnsIdentifier: ipnsIdentifier,\n protocol: protocol\n };\n };\n\n IpfsBundle.prototype.isCid = function (cid) {\n try {\n var newCid = new _cids[\"default\"](cid);\n return _cids[\"default\"].isCID(newCid);\n } catch (error) {\n return false;\n }\n };\n\n IpfsBundle.prototype.cidV1ToCidV0 = function (cidv1) {\n var cidv0 = new _cids[\"default\"](cidv1);\n\n if (cidv0.codec !== 'dag-pb') {\n throw new Error(\"This \\\"cid\\\" is not \\\"dag-pb\\\" encoded: \".concat(cidAnalyser).concat(cidv0));\n }\n\n if (cidv0.version === 1) {\n cidv0 = cidv0.toV0(); // Log\n\n this.getLogger().info(\"Converted:\\n \\\"cidv1\\\" (Base32): \".concat(cidAnalyser).concat(cidv1, \" \\n to \\\"cidv0\\\" (Base58): \").concat(cidAnalyser).concat(cidv0));\n } else {\n // Log\n this.getLogger().info(\"\\\"cidv0\\\" (Base58):\\n \".concat(cidAnalyser).concat(cidv0));\n }\n\n return cidv0.toString();\n };\n\n IpfsBundle.prototype.cidV0ToCidV1 = function (cidv0) {\n var cidv1 = new _cids[\"default\"](cidv0);\n\n if (cidv1.codec !== 'dag-pb') {\n throw new Error(\"This \\\"cid\\\" is not \\\"dag-pb\\\" encoded: \".concat(cidAnalyser).concat(cidv1));\n }\n\n if (cidv1.version === 0) {\n cidv1 = cidv1.toV1();\n this.getLogger().info(\"Converted:\\n \\\"cidv0\\\" (Base58): \".concat(cidAnalyser).concat(cidv0, \" \\n to \\\"cidv1\\\" (Base32): \").concat(cidAnalyser).concat(cidv1));\n } else {\n // Log\n this.getLogger().info(\"\\\"cidv1\\\" (Base32):\\n \".concat(cidAnalyser).concat(cidv1));\n }\n\n return cidv1.toString();\n };\n\n IpfsBundle.prototype.Base64ToUint8Array = function (base64) {\n var raw = atob(base64);\n var ua = new Uint8Array(raw.length);\n\n for (var i = 0; i < raw.length; i++) {\n ua[i] = raw.charCodeAt(i);\n }\n\n return ua;\n };\n\n IpfsBundle.prototype.Uint8ArrayToBase64 = function (uint8) {\n var CHUNK_SIZE = 0x8000; //arbitrary number\n\n var index = 0;\n var length = uint8.length;\n var str = '';\n var slice;\n\n while (index < length) {\n slice = uint8.subarray(index, Math.min(index + CHUNK_SIZE, length));\n str += String.fromCharCode.apply(null, slice);\n index += CHUNK_SIZE;\n }\n\n return btoa(str);\n }; // String to uint array\n\n\n IpfsBundle.prototype.StringToUint8Array = function (string) {\n var escstr = encodeURIComponent(string);\n var binstr = escstr.replace(/%([0-9A-F]{2})/g, function (match, p1) {\n return String.fromCharCode('0x' + p1);\n });\n var ua = new Uint8Array(binstr.length);\n Array.prototype.forEach.call(binstr, function (ch, i) {\n ua[i] = ch.charCodeAt(0);\n });\n return ua;\n }; // http://www.onicos.com/staff/iz/amuse/javascript/expert/utf.txt\n\n /*\n * utf.js - UTF-8 <=> UTF-16 convertion\n *\n * Copyright (C) 1999 Masanao Izumo <iz@onicos.co.jp>\n * Version: 1.0\n * LastModified: Dec 25 1999\n * This library is free. You can redistribute it and/or modify it.\n */\n\n\n IpfsBundle.prototype.Utf8ArrayToStr = function (array) {\n var c, char2, char3;\n var out = '';\n var len = array.length;\n var i = 0;\n\n while (i < len) {\n c = array[i++];\n\n switch (c >> 4) {\n case 0:\n case 1:\n case 2:\n case 3:\n case 4:\n case 5:\n case 6:\n case 7:\n // 0xxxxxxx\n out += String.fromCharCode(c);\n break;\n\n case 12:\n case 13:\n // 110x xxxx 10xx xxxx\n char2 = array[i++];\n out += String.fromCharCode((c & 0x1f) << 6 | char2 & 0x3f);\n break;\n\n case 14:\n // 1110 xxxx 10xx xxxx 10xx xxxx\n char2 = array[i++];\n char3 = array[i++];\n out += String.fromCharCode((c & 0x0f) << 12 | (char2 & 0x3f) << 6 | (char3 & 0x3f) << 0);\n break;\n }\n }\n\n return out;\n };\n\n module.exports = {\n IpfsBundle: IpfsBundle\n };\n})();\n\n},{\"./box-library\":91,\"./ens-library\":92,\"./ipfs-library\":94,\"./ipfs-loader\":95,\"./ipfs-url\":96,\"@babel/runtime/helpers/asyncToGenerator\":2,\"@babel/runtime/helpers/interopRequireDefault\":3,\"@babel/runtime/regenerator\":5,\"cids\":10,\"window-or-global\":90}],94:[function(require,module,exports){\n(function (Buffer){\n\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _regenerator = _interopRequireDefault(require(\"@babel/runtime/regenerator\"));\n\nvar _asyncToGenerator2 = _interopRequireDefault(require(\"@babel/runtime/helpers/asyncToGenerator\"));\n\nvar _asyncIterator2 = _interopRequireDefault(require(\"@babel/runtime/helpers/asyncIterator\"));\n\nvar _ipfsProvider = require(\"ipfs-provider\");\n\nvar _windowOrGlobal = _interopRequireDefault(require(\"window-or-global\"));\n\n(function () {\n /*jslint node: true, browser: true */\n 'use strict';\n\n var name = 'ipfs-library';\n var httpClient = _ipfsProvider.providers.httpClient,\n windowIpfs = _ipfsProvider.providers.windowIpfs;\n /*\n * https://github.com/ipfs/js-ipfs/tree/master/docs/core-api\n **/\n\n var IpfsLibrary = function IpfsLibrary(ipfsBundle) {\n this.ipfsBundle = ipfsBundle;\n this.ipfsLoader = ipfsBundle.ipfsLoader;\n };\n\n IpfsLibrary.prototype.getLogger = function () {\n return _windowOrGlobal[\"default\"].log.getLogger(name);\n };\n\n IpfsLibrary.prototype.loadIpfsHttpClient = /*#__PURE__*/(0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee() {\n var self;\n return _regenerator[\"default\"].wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n self = this;\n\n if (!(typeof _windowOrGlobal[\"default\"].IpfsHttpClient === 'undefined')) {\n _context.next = 13;\n break;\n }\n\n _context.prev = 2;\n _context.next = 5;\n return this.ipfsLoader.loadIpfsHttpLibrary();\n\n case 5:\n if (!(typeof _windowOrGlobal[\"default\"].IpfsHttpClient !== 'undefined')) {\n _context.next = 7;\n break;\n }\n\n return _context.abrupt(\"return\");\n\n case 7:\n _context.next = 12;\n break;\n\n case 9:\n _context.prev = 9;\n _context.t0 = _context[\"catch\"](2);\n self.getLogger().error(_context.t0);\n\n case 12:\n throw new Error('Unavailable IPFS HTTP Client library...');\n\n case 13:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee, this, [[2, 9]]);\n })); // Default\n\n IpfsLibrary.prototype.getDefaultIpfs = /*#__PURE__*/function () {\n var _ref2 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee2(apiUrl) {\n var _yield$this$getWindow, ipfs, provider, _yield$this$getHttpIp, _ipfs, _provider;\n\n return _regenerator[\"default\"].wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n _context2.prev = 0;\n _context2.next = 3;\n return this.getWindowIpfs();\n\n case 3:\n _yield$this$getWindow = _context2.sent;\n ipfs = _yield$this$getWindow.ipfs;\n provider = _yield$this$getWindow.provider;\n\n if (!(ipfs !== null)) {\n _context2.next = 8;\n break;\n }\n\n return _context2.abrupt(\"return\", {\n ipfs: ipfs,\n provider: provider\n });\n\n case 8:\n _context2.next = 12;\n break;\n\n case 10:\n _context2.prev = 10;\n _context2.t0 = _context2[\"catch\"](0);\n\n case 12:\n apiUrl = apiUrl === undefined || apiUrl == null || apiUrl.toString().trim() === '' ? null : apiUrl;\n\n if (!(apiUrl == null)) {\n _context2.next = 15;\n break;\n }\n\n throw new Error('Undefined IPFS API URL...');\n\n case 15:\n _context2.prev = 15;\n _context2.next = 18;\n return this.getHttpIpfs(apiUrl);\n\n case 18:\n _yield$this$getHttpIp = _context2.sent;\n _ipfs = _yield$this$getHttpIp.ipfs;\n _provider = _yield$this$getHttpIp.provider;\n\n if (!(_ipfs !== null)) {\n _context2.next = 23;\n break;\n }\n\n return _context2.abrupt(\"return\", {\n ipfs: _ipfs,\n provider: _provider\n });\n\n case 23:\n _context2.next = 27;\n break;\n\n case 25:\n _context2.prev = 25;\n _context2.t1 = _context2[\"catch\"](15);\n\n case 27:\n throw new Error('Unable to retrieve IPFS Companion and IPFS API URL...');\n\n case 28:\n case \"end\":\n return _context2.stop();\n }\n }\n }, _callee2, this, [[0, 10], [15, 25]]);\n }));\n\n return function (_x) {\n return _ref2.apply(this, arguments);\n };\n }(); // IPFS companion\n\n\n IpfsLibrary.prototype.getWindowIpfs = /*#__PURE__*/(0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee3() {\n var self, _yield$getIpfs, ipfs, provider;\n\n return _regenerator[\"default\"].wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n self = this;\n _context3.prev = 1;\n this.getLogger().info('Processing connection to IPFS Companion...');\n _context3.next = 5;\n return (0, _ipfsProvider.getIpfs)({\n providers: [windowIpfs()]\n });\n\n case 5:\n _yield$getIpfs = _context3.sent;\n ipfs = _yield$getIpfs.ipfs;\n provider = _yield$getIpfs.provider;\n return _context3.abrupt(\"return\", {\n ipfs: ipfs,\n provider: provider\n });\n\n case 11:\n _context3.prev = 11;\n _context3.t0 = _context3[\"catch\"](1);\n self.getLogger().error(_context3.t0);\n\n case 14:\n throw new Error('Unreachable IPFS Companion...');\n\n case 15:\n case \"end\":\n return _context3.stop();\n }\n }\n }, _callee3, this, [[1, 11]]);\n })); // ipfs-http-client\n\n IpfsLibrary.prototype.getHttpIpfs = /*#__PURE__*/function () {\n var _ref4 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee4(apiUrl) {\n var protocol, port, _yield$getIpfs2, ipfs, provider;\n\n return _regenerator[\"default\"].wrap(function _callee4$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n apiUrl = apiUrl === undefined || apiUrl == null || apiUrl.toString().trim() === '' ? null : apiUrl;\n\n if (!(apiUrl == null)) {\n _context4.next = 3;\n break;\n }\n\n throw new Error('Undefined IPFS API URL...');\n\n case 3:\n _context4.prev = 3;\n\n if (!(typeof _windowOrGlobal[\"default\"].IpfsHttpClient === 'undefined')) {\n _context4.next = 7;\n break;\n }\n\n _context4.next = 7;\n return this.loadIpfsHttpClient();\n\n case 7:\n this.getLogger().info(\"Processing connection to IPFS API URL:\\n \".concat(apiUrl));\n protocol = apiUrl.protocol.slice(0, -1);\n port = apiUrl.port;\n\n if (port === undefined || port == null || port.trim() === '') {\n port = 443;\n\n if (protocol === 'http') {\n port = 80;\n }\n }\n\n _context4.next = 13;\n return (0, _ipfsProvider.getIpfs)({\n providers: [httpClient({\n apiAddress: {\n protocol: protocol,\n host: apiUrl.hostname,\n port: port,\n timeout: '4m'\n }\n })]\n });\n\n case 13:\n _yield$getIpfs2 = _context4.sent;\n ipfs = _yield$getIpfs2.ipfs;\n provider = _yield$getIpfs2.provider;\n return _context4.abrupt(\"return\", {\n ipfs: ipfs,\n provider: \"\".concat(provider, \", \").concat(apiUrl)\n });\n\n case 19:\n _context4.prev = 19;\n _context4.t0 = _context4[\"catch\"](3);\n this.getLogger().error(_context4.t0);\n\n case 22:\n throw new Error('Unreachable IPFS API URL...');\n\n case 23:\n case \"end\":\n return _context4.stop();\n }\n }\n }, _callee4, this, [[3, 19]]);\n }));\n\n return function (_x2) {\n return _ref4.apply(this, arguments);\n };\n }();\n\n IpfsLibrary.prototype.add = /*#__PURE__*/function () {\n var _ref5 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee5(client, content) {\n var buffer, addSource, lastResult, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, _value, added;\n\n return _regenerator[\"default\"].wrap(function _callee5$(_context5) {\n while (1) {\n switch (_context5.prev = _context5.next) {\n case 0:\n if (!(client === undefined || client == null)) {\n _context5.next = 2;\n break;\n }\n\n throw new Error('Undefined IPFS provider...');\n\n case 2:\n if (!(content === undefined || content == null)) {\n _context5.next = 4;\n break;\n }\n\n throw new Error('Undefined content...');\n\n case 4:\n if (!client.enable) {\n _context5.next = 8;\n break;\n }\n\n _context5.next = 7;\n return client.enable({\n commands: ['add']\n });\n\n case 7:\n client = _context5.sent;\n\n case 8:\n if (!(client !== undefined && client.add !== undefined)) {\n _context5.next = 51;\n break;\n }\n\n // Process\n buffer = Buffer.from(content);\n this.getLogger().info('Processing IPFS add...'); // 1 - https://github.com/ipfs/go-ipfs/issues/5683\n // default chunker: \"size-262144\"\n // chunker: \"rabin-262144-524288-1048576\"\n // 2 - TODO: small content generates a wrong cid when cidVersion: 1 is set:\n // Not a 'dag-pb' but a 'raw' multicodec instead\n // We generate a V0 and convert it to a V1\n // https://github.com/xmaysonnave/tiddlywiki-ipfs/issues/14\n\n _context5.next = 13;\n return client.add(buffer, {\n cidVersion: 0,\n hashAlg: 'sha2-256',\n chunker: 'rabin-262144-524288-1048576',\n pin: false\n });\n\n case 13:\n addSource = _context5.sent;\n // https://gist.github.com/alanshaw/04b2ddc35a6fff25c040c011ac6acf26\n lastResult = null;\n _iteratorNormalCompletion = true;\n _didIteratorError = false;\n _context5.prev = 17;\n _iterator = (0, _asyncIterator2[\"default\"])(addSource);\n\n case 19:\n _context5.next = 21;\n return _iterator.next();\n\n case 21:\n _step = _context5.sent;\n _iteratorNormalCompletion = _step.done;\n _context5.next = 25;\n return _step.value;\n\n case 25:\n _value = _context5.sent;\n\n if (_iteratorNormalCompletion) {\n _context5.next = 32;\n break;\n }\n\n added = _value;\n lastResult = added;\n\n case 29:\n _iteratorNormalCompletion = true;\n _context5.next = 19;\n break;\n\n case 32:\n _context5.next = 38;\n break;\n\n case 34:\n _context5.prev = 34;\n _context5.t0 = _context5[\"catch\"](17);\n _didIteratorError = true;\n _iteratorError = _context5.t0;\n\n case 38:\n _context5.prev = 38;\n _context5.prev = 39;\n\n if (!(!_iteratorNormalCompletion && _iterator[\"return\"] != null)) {\n _context5.next = 43;\n break;\n }\n\n _context5.next = 43;\n return _iterator[\"return\"]();\n\n case 43:\n _context5.prev = 43;\n\n if (!_didIteratorError) {\n _context5.next = 46;\n break;\n }\n\n throw _iteratorError;\n\n case 46:\n return _context5.finish(43);\n\n case 47:\n return _context5.finish(38);\n\n case 48:\n if (!(lastResult == null || lastResult.path === undefined || lastResult.path == null)) {\n _context5.next = 50;\n break;\n }\n\n throw new Error('IPFS client returned an unknown result...');\n\n case 50:\n return _context5.abrupt(\"return\", {\n hash: this.ipfsBundle.cidV0ToCidV1(lastResult.path),\n size: lastResult.size\n });\n\n case 51:\n throw new Error('Undefined IPFS command add...');\n\n case 52:\n case \"end\":\n return _context5.stop();\n }\n }\n }, _callee5, this, [[17, 34, 38, 48], [39,, 43, 47]]);\n }));\n\n return function (_x3, _x4) {\n return _ref5.apply(this, arguments);\n };\n }();\n\n IpfsLibrary.prototype.pin = /*#__PURE__*/function () {\n var _ref6 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee6(client, cid) {\n var result;\n return _regenerator[\"default\"].wrap(function _callee6$(_context6) {\n while (1) {\n switch (_context6.prev = _context6.next) {\n case 0:\n if (!(client === undefined || client == null)) {\n _context6.next = 2;\n break;\n }\n\n throw new Error('Undefined IPFS provider...');\n\n case 2:\n cid = cid == null || cid === undefined || cid.trim() === '' ? null : cid.trim();\n\n if (!(cid == null)) {\n _context6.next = 5;\n break;\n }\n\n throw new Error('Undefined IPFS identifier...');\n\n case 5:\n if (!client.enable) {\n _context6.next = 9;\n break;\n }\n\n _context6.next = 8;\n return client.enable({\n commands: ['pin']\n });\n\n case 8:\n client = _context6.sent;\n\n case 9:\n if (!(client !== undefined && client.pin !== undefined && client.pin.add !== undefined)) {\n _context6.next = 15;\n break;\n }\n\n this.getLogger().info('Processing IPFS pin add...');\n _context6.next = 13;\n return client.pin.add(cid, {\n recursive: true\n });\n\n case 13:\n result = _context6.sent;\n return _context6.abrupt(\"return\", result);\n\n case 15:\n throw new Error('Undefined IPFS pin add...');\n\n case 16:\n case \"end\":\n return _context6.stop();\n }\n }\n }, _callee6, this);\n }));\n\n return function (_x5, _x6) {\n return _ref6.apply(this, arguments);\n };\n }();\n\n IpfsLibrary.prototype.unpin = /*#__PURE__*/function () {\n var _ref7 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee7(client, cid) {\n var result;\n return _regenerator[\"default\"].wrap(function _callee7$(_context7) {\n while (1) {\n switch (_context7.prev = _context7.next) {\n case 0:\n if (!(client === undefined || client == null)) {\n _context7.next = 2;\n break;\n }\n\n throw new Error('Undefined IPFS provider...');\n\n case 2:\n cid = cid == null || cid === undefined || cid.trim() === '' ? null : cid.trim();\n\n if (!(cid == null)) {\n _context7.next = 5;\n break;\n }\n\n throw new Error('Undefined IPFS identifier...');\n\n case 5:\n if (!client.enable) {\n _context7.next = 9;\n break;\n }\n\n _context7.next = 8;\n return client.enable({\n commands: ['pin']\n });\n\n case 8:\n client = _context7.sent;\n\n case 9:\n if (!(client !== undefined && client.pin !== undefined && client.pin.rm !== undefined)) {\n _context7.next = 15;\n break;\n }\n\n this.getLogger().info('Processing IPFS pin rm...');\n _context7.next = 13;\n return client.pin.rm(cid, {\n recursive: true\n });\n\n case 13:\n result = _context7.sent;\n return _context7.abrupt(\"return\", result);\n\n case 15:\n throw new Error('Undefined IPFS pin rm');\n\n case 16:\n case \"end\":\n return _context7.stop();\n }\n }\n }, _callee7, this);\n }));\n\n return function (_x7, _x8) {\n return _ref7.apply(this, arguments);\n };\n }();\n\n IpfsLibrary.prototype.publish = /*#__PURE__*/function () {\n var _ref8 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee8(client, ipnsName, cid) {\n var result;\n return _regenerator[\"default\"].wrap(function _callee8$(_context8) {\n while (1) {\n switch (_context8.prev = _context8.next) {\n case 0:\n if (!(client === undefined || client == null)) {\n _context8.next = 2;\n break;\n }\n\n throw new Error('Undefined IPFS provider...');\n\n case 2:\n cid = cid == null || cid === undefined || cid.trim() === '' ? null : cid.trim();\n\n if (!(cid == null)) {\n _context8.next = 5;\n break;\n }\n\n throw new Error('Undefined IPFS identifier...');\n\n case 5:\n ipnsName = ipnsName == null || ipnsName === undefined || ipnsName.trim() === '' ? null : ipnsName.trim();\n\n if (!(ipnsName == null)) {\n _context8.next = 8;\n break;\n }\n\n throw new Error('Undefined IPNS name...');\n\n case 8:\n if (!client.enable) {\n _context8.next = 12;\n break;\n }\n\n _context8.next = 11;\n return client.enable({\n commands: ['name']\n });\n\n case 11:\n client = _context8.sent;\n\n case 12:\n if (!(client !== undefined && client.name !== undefined && client.name.publish !== undefined)) {\n _context8.next = 20;\n break;\n }\n\n this.getLogger().info('Processing IPNS name publish...');\n _context8.next = 16;\n return client.name.publish(cid, {\n resolve: true,\n key: ipnsName,\n allowOffline: false\n });\n\n case 16:\n result = _context8.sent;\n\n if (!(result === undefined || result == null)) {\n _context8.next = 19;\n break;\n }\n\n throw new Error('IPFS client returned an unknown result...');\n\n case 19:\n return _context8.abrupt(\"return\", {\n name: result.name,\n value: result.value\n });\n\n case 20:\n throw new Error('Undefined IPNS name publish...');\n\n case 21:\n case \"end\":\n return _context8.stop();\n }\n }\n }, _callee8, this);\n }));\n\n return function (_x9, _x10, _x11) {\n return _ref8.apply(this, arguments);\n };\n }();\n\n IpfsLibrary.prototype.resolve = /*#__PURE__*/function () {\n var _ref9 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee9(client, id) {\n var resolvedSource, lastResult, _iteratorNormalCompletion2, _didIteratorError2, _iteratorError2, _iterator2, _step2, _value2, resolved;\n\n return _regenerator[\"default\"].wrap(function _callee9$(_context9) {\n while (1) {\n switch (_context9.prev = _context9.next) {\n case 0:\n if (!(client === undefined || client == null)) {\n _context9.next = 2;\n break;\n }\n\n throw new Error('Undefined IPFS provider...');\n\n case 2:\n id = id == null || id === undefined || id.trim() === '' ? null : id.trim();\n\n if (!(id == null)) {\n _context9.next = 5;\n break;\n }\n\n throw new Error('Undefined IPNS key...');\n\n case 5:\n if (!client.enable) {\n _context9.next = 9;\n break;\n }\n\n _context9.next = 8;\n return client.enable({\n commands: ['name']\n });\n\n case 8:\n client = _context9.sent;\n\n case 9:\n if (!(client !== undefined && client.name !== undefined && client.name.resolve !== undefined)) {\n _context9.next = 51;\n break;\n }\n\n this.getLogger().info('Processing IPNS name resolve...');\n _context9.next = 13;\n return client.name.resolve(id, {\n nocache: false,\n recursive: true\n });\n\n case 13:\n resolvedSource = _context9.sent;\n // https://gist.github.com/alanshaw/04b2ddc35a6fff25c040c011ac6acf26\n lastResult = null;\n _iteratorNormalCompletion2 = true;\n _didIteratorError2 = false;\n _context9.prev = 17;\n _iterator2 = (0, _asyncIterator2[\"default\"])(resolvedSource);\n\n case 19:\n _context9.next = 21;\n return _iterator2.next();\n\n case 21:\n _step2 = _context9.sent;\n _iteratorNormalCompletion2 = _step2.done;\n _context9.next = 25;\n return _step2.value;\n\n case 25:\n _value2 = _context9.sent;\n\n if (_iteratorNormalCompletion2) {\n _context9.next = 32;\n break;\n }\n\n resolved = _value2;\n lastResult = resolved;\n\n case 29:\n _iteratorNormalCompletion2 = true;\n _context9.next = 19;\n break;\n\n case 32:\n _context9.next = 38;\n break;\n\n case 34:\n _context9.prev = 34;\n _context9.t0 = _context9[\"catch\"](17);\n _didIteratorError2 = true;\n _iteratorError2 = _context9.t0;\n\n case 38:\n _context9.prev = 38;\n _context9.prev = 39;\n\n if (!(!_iteratorNormalCompletion2 && _iterator2[\"return\"] != null)) {\n _context9.next = 43;\n break;\n }\n\n _context9.next = 43;\n return _iterator2[\"return\"]();\n\n case 43:\n _context9.prev = 43;\n\n if (!_didIteratorError2) {\n _context9.next = 46;\n break;\n }\n\n throw _iteratorError2;\n\n case 46:\n return _context9.finish(43);\n\n case 47:\n return _context9.finish(38);\n\n case 48:\n if (!(lastResult == null || lastResult === undefined)) {\n _context9.next = 50;\n break;\n }\n\n throw new Error('IPFS client returned an unknown result...');\n\n case 50:\n return _context9.abrupt(\"return\", lastResult);\n\n case 51:\n throw new Error('Undefined IPNS name resolve...');\n\n case 52:\n case \"end\":\n return _context9.stop();\n }\n }\n }, _callee9, this, [[17, 34, 38, 48], [39,, 43, 47]]);\n }));\n\n return function (_x12, _x13) {\n return _ref9.apply(this, arguments);\n };\n }();\n\n IpfsLibrary.prototype.getKeys = /*#__PURE__*/function () {\n var _ref10 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee10(client) {\n var result;\n return _regenerator[\"default\"].wrap(function _callee10$(_context10) {\n while (1) {\n switch (_context10.prev = _context10.next) {\n case 0:\n if (!(client === undefined || client == null)) {\n _context10.next = 2;\n break;\n }\n\n throw new Error('Undefined IPFS provider...');\n\n case 2:\n if (!client.enable) {\n _context10.next = 6;\n break;\n }\n\n _context10.next = 5;\n return client.enable({\n commands: ['key']\n });\n\n case 5:\n client = _context10.sent;\n\n case 6:\n if (!(client !== undefined && client.key !== undefined && client.key.list !== undefined)) {\n _context10.next = 14;\n break;\n }\n\n this.getLogger().info('Processing IPNS key list...');\n _context10.next = 10;\n return client.key.list();\n\n case 10:\n result = _context10.sent;\n\n if (!(result === undefined || result == null || Array.isArray(result) === false)) {\n _context10.next = 13;\n break;\n }\n\n throw new Error('IPFS client returned an unknown result...');\n\n case 13:\n return _context10.abrupt(\"return\", result);\n\n case 14:\n throw new Error('Undefined IPNS key list...');\n\n case 15:\n case \"end\":\n return _context10.stop();\n }\n }\n }, _callee10, this);\n }));\n\n return function (_x14) {\n return _ref10.apply(this, arguments);\n };\n }(); // Only rsa is supported yet...\n // https://github.com/ipfs/interface-js-ipfs-core/blob/master/SPEC/KEY.md#keygen\n // https://github.com/libp2p/js-libp2p-crypto/issues/145\n\n\n IpfsLibrary.prototype.genKey = /*#__PURE__*/function () {\n var _ref11 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee11(client, ipnsName) {\n var key;\n return _regenerator[\"default\"].wrap(function _callee11$(_context11) {\n while (1) {\n switch (_context11.prev = _context11.next) {\n case 0:\n if (!(client === undefined || client == null)) {\n _context11.next = 2;\n break;\n }\n\n throw new Error('Undefined IPFS provider...');\n\n case 2:\n ipnsName = ipnsName == null || ipnsName === undefined || ipnsName.trim() === '' ? null : ipnsName.trim();\n\n if (!(ipnsName == null)) {\n _context11.next = 5;\n break;\n }\n\n throw new Error('Undefined IPNS name...');\n\n case 5:\n if (!client.enable) {\n _context11.next = 9;\n break;\n }\n\n _context11.next = 8;\n return client.enable({\n commands: ['key']\n });\n\n case 8:\n client = _context11.sent;\n\n case 9:\n if (!(client !== undefined && client.key !== undefined && client.key.gen !== undefined)) {\n _context11.next = 17;\n break;\n }\n\n this.getLogger().info('Processing IPNS key gen...');\n _context11.next = 13;\n return client.key.gen(ipnsName, {\n type: 'rsa',\n size: 2048\n });\n\n case 13:\n key = _context11.sent;\n\n if (!(key === undefined || key == null || key.id === undefined || key.id == null)) {\n _context11.next = 16;\n break;\n }\n\n throw new Error('IPFS client returned an unknown result...');\n\n case 16:\n return _context11.abrupt(\"return\", key.id);\n\n case 17:\n throw new Error('Undefined IPNS key gen...');\n\n case 18:\n case \"end\":\n return _context11.stop();\n }\n }\n }, _callee11, this);\n }));\n\n return function (_x15, _x16) {\n return _ref11.apply(this, arguments);\n };\n }();\n\n IpfsLibrary.prototype.rmKey = /*#__PURE__*/function () {\n var _ref12 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee12(client, ipnsName) {\n var key;\n return _regenerator[\"default\"].wrap(function _callee12$(_context12) {\n while (1) {\n switch (_context12.prev = _context12.next) {\n case 0:\n if (!(client === undefined || client == null)) {\n _context12.next = 2;\n break;\n }\n\n throw new Error('Undefined IPFS provider...');\n\n case 2:\n ipnsName = ipnsName == null || ipnsName === undefined || ipnsName.trim() === '' ? null : ipnsName.trim();\n\n if (!(ipnsName == null)) {\n _context12.next = 5;\n break;\n }\n\n throw new Error('Undefined IPNS name...');\n\n case 5:\n if (!client.enable) {\n _context12.next = 9;\n break;\n }\n\n _context12.next = 8;\n return client.enable({\n commands: ['key']\n });\n\n case 8:\n client = _context12.sent;\n\n case 9:\n if (!(client !== undefined && client.key !== undefined && client.key.rm !== undefined)) {\n _context12.next = 17;\n break;\n }\n\n this.getLogger().info('Processing IPNS key rm...');\n _context12.next = 13;\n return client.key.rm(ipnsName);\n\n case 13:\n key = _context12.sent;\n\n if (!(key === undefined || key == null || key.id === undefined || key.id == null)) {\n _context12.next = 16;\n break;\n }\n\n throw new Error('IPFS client returned an unknown result...');\n\n case 16:\n return _context12.abrupt(\"return\", key.id);\n\n case 17:\n throw new Error('Undefined IPNS key rm...');\n\n case 18:\n case \"end\":\n return _context12.stop();\n }\n }\n }, _callee12, this);\n }));\n\n return function (_x17, _x18) {\n return _ref12.apply(this, arguments);\n };\n }();\n\n IpfsLibrary.prototype.renameKey = /*#__PURE__*/function () {\n var _ref13 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee13(client, oldIpnsName, newIpnsName) {\n var key, id, was, now, overwrite;\n return _regenerator[\"default\"].wrap(function _callee13$(_context13) {\n while (1) {\n switch (_context13.prev = _context13.next) {\n case 0:\n if (!(client === undefined || client == null)) {\n _context13.next = 2;\n break;\n }\n\n throw new Error('Undefined IPFS provider...');\n\n case 2:\n oldIpnsName = oldIpnsName == null || oldIpnsName === undefined || oldIpnsName.trim() === '' ? null : oldIpnsName.trim();\n\n if (!(oldIpnsName == null)) {\n _context13.next = 5;\n break;\n }\n\n throw new Error('Undefined Old IPNS name...');\n\n case 5:\n newIpnsName = newIpnsName == null || newIpnsName === undefined || newIpnsName.trim() === '' ? null : newIpnsName.trim();\n\n if (!(newIpnsName == null)) {\n _context13.next = 8;\n break;\n }\n\n throw new Error('Undefined New IPNS name...');\n\n case 8:\n if (!client.enable) {\n _context13.next = 12;\n break;\n }\n\n _context13.next = 11;\n return client.enable({\n commands: ['key']\n });\n\n case 11:\n client = _context13.sent;\n\n case 12:\n if (!(client !== undefined && client.key !== undefined && client.key.rename !== undefined)) {\n _context13.next = 28;\n break;\n }\n\n this.getLogger().info('Processing IPNS key rename...');\n _context13.next = 16;\n return client.key.rename(oldIpnsName, newIpnsName);\n\n case 16:\n key = _context13.sent;\n\n if (!(key === undefined || key == null)) {\n _context13.next = 19;\n break;\n }\n\n throw new Error('IPFS client returned an unknown result...');\n\n case 19:\n id = null;\n\n if (key.id !== undefined && key.id !== null) {\n id = key.id;\n }\n\n was = null;\n\n if (key.was !== undefined && key.was !== null) {\n was = key.was;\n }\n\n now = null;\n\n if (key.now !== undefined && key.now !== null) {\n now = key.now;\n }\n\n overwrite = null;\n\n if (key.overwrite !== undefined && key.overwrite !== null) {\n overwrite = key.overwrite;\n }\n\n return _context13.abrupt(\"return\", {\n id: id,\n was: was,\n now: now,\n overwrite: overwrite\n });\n\n case 28:\n throw new Error('Undefined IPNS key rename...');\n\n case 29:\n case \"end\":\n return _context13.stop();\n }\n }\n }, _callee13, this);\n }));\n\n return function (_x19, _x20, _x21) {\n return _ref13.apply(this, arguments);\n };\n }();\n\n module.exports = IpfsLibrary;\n})();\n\n}).call(this,require(\"buffer\").Buffer)\n},{\"@babel/runtime/helpers/asyncIterator\":1,\"@babel/runtime/helpers/asyncToGenerator\":2,\"@babel/runtime/helpers/interopRequireDefault\":3,\"@babel/runtime/regenerator\":5,\"buffer\":8,\"ipfs-provider\":41,\"window-or-global\":90}],95:[function(require,module,exports){\n\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _regenerator = _interopRequireDefault(require(\"@babel/runtime/regenerator\"));\n\nvar _asyncToGenerator2 = _interopRequireDefault(require(\"@babel/runtime/helpers/asyncToGenerator\"));\n\nvar _windowOrGlobal = _interopRequireDefault(require(\"window-or-global\"));\n\n(function () {\n /*jslint node: true, browser: true */\n 'use strict';\n\n var name = 'ipfs-loader';\n var eruda = 'https://cdn.jsdelivr.net/npm/eruda@2.3.3/eruda.min.js';\n var erudaSri = 'sha384-O4NQOgwNPEet1/xZmB7hYYb/vMdpWyVJcqL+47zpRWuXtRlhwnEoNM/w3/C3HCoP';\n var ethers = 'https://cdn.jsdelivr.net/npm/ethers@4.0.47/dist/ethers.min.js';\n var ethersSri = 'sha384-Gqf9kLa8S94/ZNsQCadoW0KeT6tg+fapxds7gOiSL72KeOtfgTOmHvJENrQljse5';\n var ipfsHttpClient = 'https://cdn.jsdelivr.net/npm/ipfs-http-client@44.1.1/dist/index.min.js';\n var ipfsHttpClientSri = 'sha384-NvfAKWfwAGQtt53C6QkNMM2whGsF9BeeXkfOWkFV3qmyh1VLVmfxxUrvLcgw0ZYr';\n var react = 'https://cdn.jsdelivr.net/npm/react@16.13.1/index.min.js';\n var reactSri = 'sha384-tJZghk8WS6CmqUSDnhTaMhgcW1ugVL+tICSVl9SKvnxyMxeSPC2i5yL8lNMggV+4';\n var threeBox = 'https://cdn.jsdelivr.net/npm/3box@1.19.0/dist/3box.min.js';\n var threeBoxSri = 'sha384-tbBobUw5fP4CqNpLpF3UHPGHmaCFjUPlgcZP1Oq7Uo+QspWkAx1bT6jXsq87y5vG';\n var threeBoxProfile = 'https://cdn.jsdelivr.net/npm/profile-hover@1.1.2/dist/reactBundle.min.js';\n var threeBoxProfileSri = 'sha384-Rta8n7/RH5Fw3LzGDoGIu0Sskn/laKq9RKpWz2MzxPh/XVxPOd2HInosBPq1vukJ';\n\n var IpfsLoader = function IpfsLoader(ipfsBundle) {\n this.ipfsBundle = ipfsBundle;\n };\n\n IpfsLoader.prototype.getLogger = function () {\n return _windowOrGlobal[\"default\"].log.getLogger(name);\n }; // https://www.srihash.org/\n // https://github.com/liriliri/eruda\n\n\n IpfsLoader.prototype.loadErudaLibrary = /*#__PURE__*/(0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee() {\n return _regenerator[\"default\"].wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n if (!(typeof _windowOrGlobal[\"default\"].eruda === 'undefined')) {\n _context.next = 4;\n break;\n }\n\n _context.next = 3;\n return this.loadLibrary('ErudaLibrary', eruda, erudaSri, true);\n\n case 3:\n if (typeof _windowOrGlobal[\"default\"].eruda !== 'undefined') {\n this.getLogger().info(\"Loaded ErudaLibrary:\\n \".concat(eruda));\n }\n\n case 4:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee, this);\n })); // https://www.srihash.org/\n // https://github.com/ethers-io/ethers.js/\n\n IpfsLoader.prototype.loadEtherJsLibrary = /*#__PURE__*/(0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee2() {\n return _regenerator[\"default\"].wrap(function _callee2$(_context2) {\n while (1) {\n switch (_context2.prev = _context2.next) {\n case 0:\n if (!(typeof _windowOrGlobal[\"default\"].ethers === 'undefined')) {\n _context2.next = 4;\n break;\n }\n\n _context2.next = 3;\n return this.loadLibrary('EtherJsLibrary', ethers, ethersSri, true);\n\n case 3:\n if (typeof _windowOrGlobal[\"default\"].ethers !== 'undefined') {\n this.getLogger().info(\"Loaded EtherJsLibrary:\\n \".concat(ethers));\n }\n\n case 4:\n case \"end\":\n return _context2.stop();\n }\n }\n }, _callee2, this);\n })); // https://www.srihash.org/\n // https://github.com/ipfs/js-ipfs-http-client\n\n IpfsLoader.prototype.loadIpfsHttpLibrary = /*#__PURE__*/(0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee3() {\n return _regenerator[\"default\"].wrap(function _callee3$(_context3) {\n while (1) {\n switch (_context3.prev = _context3.next) {\n case 0:\n if (!(typeof _windowOrGlobal[\"default\"].IpfsHttpClient === 'undefined')) {\n _context3.next = 4;\n break;\n }\n\n _context3.next = 3;\n return this.loadLibrary('IpfsHttpLibrary', ipfsHttpClient, ipfsHttpClientSri, true);\n\n case 3:\n if (typeof _windowOrGlobal[\"default\"].IpfsHttpClient !== 'undefined') {\n this.getLogger().info(\"Loaded IpfsHttpLibrary:\\n \".concat(ipfsHttpClient));\n }\n\n case 4:\n case \"end\":\n return _context3.stop();\n }\n }\n }, _callee3, this);\n })); // https://www.srihash.org/\n\n IpfsLoader.prototype.loadReactLibrary = /*#__PURE__*/(0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee4() {\n return _regenerator[\"default\"].wrap(function _callee4$(_context4) {\n while (1) {\n switch (_context4.prev = _context4.next) {\n case 0:\n if (!(typeof _windowOrGlobal[\"default\"].React === 'undefined')) {\n _context4.next = 4;\n break;\n }\n\n _context4.next = 3;\n return this.loadLibrary('ReactLibrary', react, reactSri, true);\n\n case 3:\n if (typeof _windowOrGlobal[\"default\"].React !== 'undefined') {\n this.getLogger().info(\"Loaded React:\\n \".concat(react));\n }\n\n case 4:\n case \"end\":\n return _context4.stop();\n }\n }\n }, _callee4, this);\n })); // https://www.srihash.org/\n // https://github.com/3box\n\n IpfsLoader.prototype.loadThreeBoxLibrary = /*#__PURE__*/(0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee5() {\n return _regenerator[\"default\"].wrap(function _callee5$(_context5) {\n while (1) {\n switch (_context5.prev = _context5.next) {\n case 0:\n if (!(typeof _windowOrGlobal[\"default\"].Box === 'undefined')) {\n _context5.next = 4;\n break;\n }\n\n _context5.next = 3;\n return this.loadLibrary('ThreeBoxLibrary', threeBox, threeBoxSri, true);\n\n case 3:\n if (typeof _windowOrGlobal[\"default\"].Box !== 'undefined') {\n this.getLogger().info(\"Loaded ThreeBoxLibrary:\\n \".concat(threeBox));\n }\n\n case 4:\n case \"end\":\n return _context5.stop();\n }\n }\n }, _callee5, this);\n })); // https://www.srihash.org/\n // https://github.com/3box\n\n IpfsLoader.prototype.loadThreeBoxProfileLibrary = /*#__PURE__*/(0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee6() {\n return _regenerator[\"default\"].wrap(function _callee6$(_context6) {\n while (1) {\n switch (_context6.prev = _context6.next) {\n case 0:\n if (!(typeof _windowOrGlobal[\"default\"].ProfileHover === 'undefined')) {\n _context6.next = 4;\n break;\n }\n\n _context6.next = 3;\n return this.loadLibrary('ThreeBoxProfileLibrary', threeBoxProfile, threeBoxProfileSri, true);\n\n case 3:\n if (typeof _windowOrGlobal[\"default\"].ProfileHover !== 'undefined') {\n this.getLogger().info(\"Loaded ThreeBoxProfileLibrary:\\n \".concat(threeBoxProfile));\n }\n\n case 4:\n case \"end\":\n return _context6.stop();\n }\n }\n }, _callee6, this);\n }));\n /*eslint no-new: \"off\", no-new-func: \"off\"*/\n\n IpfsLoader.prototype.supportDynamicImport = function () {\n try {\n new Function('import(\"\")');\n return true;\n } catch (error) {\n return false;\n }\n }; // https://observablehq.com/@bryangingechen/dynamic-import-polyfill\n\n\n IpfsLoader.prototype.loadLibrary = function (id, url, sri, asModule) {\n // Dynamic import\n // if (this.supportDynamicImport()) {\n // try {\n // return new Function(`return import(\"${url}\")`)();\n // } catch (error) {\n // // Ignore\n // }\n // }\n var self = this;\n return new Promise(function (resolve, reject) {\n // Process\n var script = _windowOrGlobal[\"default\"].document.createElement('script'); // Functions\n\n\n var cleanup = function cleanup() {\n try {\n delete _windowOrGlobal[\"default\"][id];\n script.onerror = null;\n script.onload = null;\n script.remove();\n URL.revokeObjectURL(script.src);\n script.src = '';\n } catch (error) {\n self.getLogger().error(error);\n }\n };\n\n script.onload = function () {\n resolve(_windowOrGlobal[\"default\"][id]);\n cleanup();\n };\n\n script.onerror = function () {\n reject(new Error(\"Failed to load: \".concat(url)));\n cleanup();\n }; // Attributes\n\n\n if (asModule) {\n script.type = 'module';\n } else {\n script.type = 'text/javascript';\n }\n\n script.id = id;\n script.async = false;\n script.defer = 'defer';\n\n if (sri) {\n script.integrity = sri;\n }\n\n script.crossOrigin = 'anonymous'; // URL\n\n script.src = url; // Load\n\n _windowOrGlobal[\"default\"].document.head.appendChild(script);\n });\n };\n\n IpfsLoader.prototype.isJson = function (content) {\n if (content !== undefined && content !== null && typeof content === 'string') {\n try {\n JSON.parse(content);\n return true;\n } catch (error) {// Ignore\n }\n }\n\n return false;\n };\n\n IpfsLoader.prototype.httpGetToUint8Array = function (url) {\n var self = this;\n var xhr = new XMLHttpRequest();\n return new Promise(function (resolve, reject) {\n xhr.responseType = 'arraybuffer';\n\n xhr.onreadystatechange = function () {\n if (xhr.readyState === 4 && xhr.status !== 0) {\n if (xhr.status >= 300) {\n reject(new Error($tw.language.getString('NetworkError/XMLHttpRequest')));\n return;\n }\n\n try {\n var array = new Uint8Array(this.response);\n self.getLogger().info(\"[\".concat(xhr.status, \"] Loaded:\\n \").concat(url));\n resolve(array);\n } catch (error) {\n reject(error);\n }\n }\n };\n\n xhr.onerror = function () {\n reject(new Error($tw.language.getString('NetworkError/XMLHttpRequest')));\n };\n\n try {\n xhr.open('get', url, true);\n xhr.send();\n } catch (error) {\n reject(error);\n }\n });\n };\n /*\n * Load to Base64\n */\n\n\n IpfsLoader.prototype.loadToBase64 = /*#__PURE__*/function () {\n var _ref7 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee7(url) {\n var array, decrypted, data;\n return _regenerator[\"default\"].wrap(function _callee7$(_context7) {\n while (1) {\n switch (_context7.prev = _context7.next) {\n case 0:\n _context7.next = 2;\n return this.httpGetToUint8Array(url);\n\n case 2:\n array = _context7.sent;\n\n if (!(array.length === 0)) {\n _context7.next = 5;\n break;\n }\n\n return _context7.abrupt(\"return\", {\n data: '',\n decrypted: false\n });\n\n case 5:\n if (!this.isUtf8ArrayEncrypted(array)) {\n _context7.next = 10;\n break;\n }\n\n _context7.next = 8;\n return this.decryptUint8ArrayToBase64(array);\n\n case 8:\n decrypted = _context7.sent;\n return _context7.abrupt(\"return\", {\n data: decrypted,\n decrypted: true\n });\n\n case 10:\n data = this.ipfsBundle.Uint8ArrayToBase64(array);\n return _context7.abrupt(\"return\", {\n data: data,\n decrypted: false\n });\n\n case 12:\n case \"end\":\n return _context7.stop();\n }\n }\n }, _callee7, this);\n }));\n\n return function (_x) {\n return _ref7.apply(this, arguments);\n };\n }();\n /*\n * Load to UTF-8\n */\n\n\n IpfsLoader.prototype.loadToUtf8 = /*#__PURE__*/function () {\n var _ref8 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee8(url) {\n var array;\n return _regenerator[\"default\"].wrap(function _callee8$(_context8) {\n while (1) {\n switch (_context8.prev = _context8.next) {\n case 0:\n _context8.next = 2;\n return this.httpGetToUint8Array(url);\n\n case 2:\n array = _context8.sent;\n\n if (!(array.length === 0)) {\n _context8.next = 5;\n break;\n }\n\n return _context8.abrupt(\"return\", {\n data: '',\n decrypted: false\n });\n\n case 5:\n if (!this.isUtf8ArrayEncrypted(array)) {\n _context8.next = 10;\n break;\n }\n\n _context8.next = 8;\n return this.decryptUint8ArrayToUtf8(array);\n\n case 8:\n _context8.t0 = _context8.sent;\n return _context8.abrupt(\"return\", {\n data: _context8.t0,\n decrypted: true\n });\n\n case 10:\n return _context8.abrupt(\"return\", {\n data: this.ipfsBundle.Utf8ArrayToStr(array),\n decrypted: false\n });\n\n case 11:\n case \"end\":\n return _context8.stop();\n }\n }\n }, _callee8, this);\n }));\n\n return function (_x2) {\n return _ref8.apply(this, arguments);\n };\n }();\n /*\n * Decrypt Uint8 Array to Base64 String\n */\n\n\n IpfsLoader.prototype.decryptUint8ArrayToBase64 = /*#__PURE__*/function () {\n var _ref9 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee9(array) {\n var data;\n return _regenerator[\"default\"].wrap(function _callee9$(_context9) {\n while (1) {\n switch (_context9.prev = _context9.next) {\n case 0:\n data = this.ipfsBundle.Utf8ArrayToStr(array);\n\n if (!($tw.crypto.hasPassword() === false)) {\n _context9.next = 7;\n break;\n }\n\n _context9.next = 4;\n return this.decryptFromPasswordPrompt(data);\n\n case 4:\n data = _context9.sent;\n _context9.next = 8;\n break;\n\n case 7:\n data = $tw.crypto.decrypt(data, $tw.crypto.currentPassword);\n\n case 8:\n return _context9.abrupt(\"return\", btoa(data));\n\n case 9:\n case \"end\":\n return _context9.stop();\n }\n }\n }, _callee9, this);\n }));\n\n return function (_x3) {\n return _ref9.apply(this, arguments);\n };\n }();\n /*\n * Decrypt Uint8 Array to UTF-8 String\n */\n\n\n IpfsLoader.prototype.decryptUint8ArrayToUtf8 = /*#__PURE__*/function () {\n var _ref10 = (0, _asyncToGenerator2[\"default\"])( /*#__PURE__*/_regenerator[\"default\"].mark(function _callee10(array) {\n var data;\n return _regenerator[\"default\"].wrap(function _callee10$(_context10) {\n while (1) {\n switch (_context10.prev = _context10.next) {\n case 0:\n data = this.ipfsBundle.Utf8ArrayToStr(array);\n\n if (!($tw.crypto.hasPassword() === false)) {\n _context10.next = 7;\n break;\n }\n\n _context10.next = 4;\n return this.decryptFromPasswordPrompt(data);\n\n case 4:\n data = _context10.sent;\n _context10.next = 8;\n break;\n\n case 7:\n data = $tw.crypto.decrypt(data, $tw.crypto.currentPassword);\n\n case 8:\n return _context10.abrupt(\"return\", data);\n\n case 9:\n case \"end\":\n return _context10.stop();\n }\n }\n }, _callee10, this);\n }));\n\n return function (_x4) {\n return _ref10.apply(this, arguments);\n };\n }();\n\n IpfsLoader.prototype.decryptFromPasswordPrompt = function (encrypted) {\n return new Promise(function (resolve, reject) {\n $tw.passwordPrompt.createPrompt({\n serviceName: 'Enter a password to decrypt the imported content!!',\n noUserName: true,\n canCancel: true,\n submitText: 'Decrypt',\n callback: function callback(data) {\n if (!data) {\n return false;\n } // Decrypt\n\n\n try {\n var content = $tw.crypto.decrypt(encrypted, data.password);\n resolve(content);\n return true;\n } catch (error) {\n reject(error);\n }\n\n return false;\n }\n });\n });\n };\n\n IpfsLoader.prototype.isUtf8ArrayEncrypted = function (content) {\n // Check\n if (content instanceof Uint8Array === false || content.length === 0) {\n return false;\n } // Process\n\n\n var standford = this.ipfsBundle.StringToUint8Array('{\"iv\":\"');\n var encrypted = false;\n\n for (var i = 0; i < content.length && i < standford.length; i++) {\n if (content[i] === standford[i]) {\n encrypted = true;\n } else {\n encrypted = false;\n break;\n }\n }\n\n return encrypted;\n };\n\n module.exports = IpfsLoader;\n})();\n\n},{\"@babel/runtime/helpers/asyncToGenerator\":2,\"@babel/runtime/helpers/interopRequireDefault\":3,\"@babel/runtime/regenerator\":5,\"window-or-global\":90}],96:[function(require,module,exports){\n\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _windowOrGlobal = _interopRequireDefault(require(\"window-or-global\"));\n\nvar _universalUrl = require(\"universal-url\");\n\n(function () {\n /*jslint node: true, browser: true */\n 'use strict';\n\n var name = 'ipfs-url';\n\n var IpfsUrl = function IpfsUrl() {};\n\n IpfsUrl.prototype.getLogger = function () {\n return _windowOrGlobal[\"default\"].log.getLogger(name);\n };\n\n IpfsUrl.prototype.getIpfsDefaultApiUrl = function () {\n return new _universalUrl.URL(this.getIpfsDefaultApi());\n };\n\n IpfsUrl.prototype.getIpfsDefaultGatewayUrl = function () {\n return new _universalUrl.URL(this.getIpfsDefaultGateway());\n };\n\n IpfsUrl.prototype.getIpfsApiUrl = function () {\n try {\n return this.getUrl($tw.utils.getIpfsSaverApiUrl());\n } catch (error) {\n return this.getIpfsDefaultApiUrl();\n }\n };\n\n IpfsUrl.prototype.getIpfsGatewayUrl = function () {\n try {\n return this.getUrl($tw.utils.getIpfsSaverGatewayUrl());\n } catch (error) {\n return this.getIpfsDefaultGatewayUrl();\n }\n };\n\n IpfsUrl.prototype.getIpfsDefaultApi = function () {\n return 'https://ipfs.infura.io:5001';\n };\n\n IpfsUrl.prototype.getIpfsDefaultGateway = function () {\n return 'https://ipfs.infura.io';\n };\n /**\n * url.href;\n * url.origin\n * url.protocol;\n * url.username;\n * url.password;\n * url.host;\n * url.hostname;\n * url.port;\n * url.pathname;\n * url.search;\n * url.hash;\n * https://jsdom.github.io/whatwg-url/\n * https://github.com/stevenvachon/universal-url\n * https://github.com/stevenvachon/universal-url-lite\n * https://url.spec.whatwg.org/\n */\n\n\n IpfsUrl.prototype.getDocumentUrl = function () {\n try {\n return new _universalUrl.URL(_windowOrGlobal[\"default\"].location.href);\n } catch (error) {\n this.getLogger().error(error);\n }\n\n throw new Error('Invalid current HTML Document URL...');\n };\n\n IpfsUrl.prototype.getUrl = function (url, base) {\n try {\n return new _universalUrl.URL(url, base);\n } catch (error) {// Ignore\n }\n\n throw new Error('Invalid URL...');\n };\n\n IpfsUrl.prototype.getIpfsBaseUrl = function () {\n var base = this.getIpfsGatewayUrl();\n\n try {\n if ($tw.utils.getIpfsUrlPolicy() === 'origin') {\n base = this.getDocumentUrl();\n\n if (base.protocol === 'file:') {\n return this.getUrl(base.toString());\n }\n }\n } catch (error) {\n base = this.getIpfsGatewayUrl();\n }\n\n return this.getUrl(\"\".concat(base.protocol, \"//\").concat(base.host));\n };\n\n IpfsUrl.prototype.normalizeUrl = function (value, base) {\n value = value === undefined || value == null || value.toString().trim() === '' ? null : value.toString().trim();\n\n if (value == null) {\n return null;\n } // Parse\n\n\n var text = false;\n var url = null; // Text or ENS\n\n try {\n url = this.getUrl(value);\n } catch (error) {\n if (value.startsWith('/') === false && value.startsWith('./') === false && value.startsWith('../') === false) {\n text = true;\n\n try {\n url = this.getUrl(\"https://\".concat(value));\n\n if (url.hostname.endsWith('.eth') === false && url.hostname.endsWith('.eth.link') === false) {\n url = null;\n } else {\n text = false;\n }\n } catch (error) {// ignore\n }\n }\n }\n\n if (text) {\n return null;\n } // Invalid URL, try to parse with a Base URL\n\n\n if (url == null) {\n url = this.getUrl(value, base !== undefined && base !== null ? base : this.getIpfsBaseUrl());\n } // Remove .link from .eth.link\n\n\n if (url.hostname.endsWith('.eth.link')) {\n url.hostname = url.hostname.substring(0, url.hostname.indexOf('.link'));\n }\n\n return url;\n };\n\n module.exports = IpfsUrl;\n})();\n\n},{\"@babel/runtime/helpers/interopRequireDefault\":3,\"universal-url\":85,\"window-or-global\":90}]},{},[93])(93)\n});\n",
"type": "application/javascript",
"tags": "$:/ipfs/core",
"module-type": "library"
},
"$:/plugins/ipfs/ipfs-controller.js": {
"title": "$:/plugins/ipfs/ipfs-controller.js",
"text": "/*\\\ntitle: $:/plugins/ipfs/ipfs-controller.js\ntype: application/javascript\ntags: $:/ipfs/core\nmodule-type: library\n\nIPFS Controller\n\n\\*/\n\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n const EnsWrapper = require('$:/plugins/ipfs/ens-wrapper.js').EnsWrapper\n const IpfsBundle = require('$:/plugins/ipfs/ipfs-bundle.js').IpfsBundle\n const IpfsWrapper = require('$:/plugins/ipfs/ipfs-wrapper.js').IpfsWrapper\n\n const ipfsKeyword = 'ipfs'\n const ipnsKeyword = 'ipns'\n\n const name = 'ipfs-controller'\n\n var IpfsController = function () {\n this.ipfsBundle = new IpfsBundle()\n this.ipfsBundle.init()\n this.ensWrapper = new EnsWrapper(this.ipfsBundle)\n this.ipfsUrl = this.ipfsBundle.ipfsUrl\n this.ipfsWrapper = new IpfsWrapper(this.ipfsBundle)\n this.ipfsClients = new Map()\n this.pin = []\n this.unpin = []\n }\n\n IpfsController.prototype.getLogger = function () {\n return window.log.getLogger(name)\n }\n\n IpfsController.prototype.isCid = function (cid) {\n return this.ipfsBundle.isCid(cid)\n }\n\n IpfsController.prototype.load3BoxProfile = async function () {\n return await this.ensWrapper.load3BoxProfile()\n }\n\n IpfsController.prototype.loadToBase64 = async function (url) {\n return await this.ipfsBundle.loadToBase64(url)\n }\n\n IpfsController.prototype.loadToUtf8 = async function (url) {\n return await this.ipfsBundle.loadToUtf8(url)\n }\n\n IpfsController.prototype.Base64ToUint8Array = function (base64) {\n return this.ipfsBundle.Base64ToUint8Array(base64)\n }\n\n IpfsController.prototype.Uint8ArrayToBase64 = function (uint8) {\n return this.ipfsBundle.Uint8ArrayToBase64(uint8)\n }\n\n IpfsController.prototype.StringToUint8Array = function (string) {\n return this.ipfsBundle.StringToUint8Array(string)\n }\n\n IpfsController.prototype.Utf8ArrayToStr = function (array) {\n return this.ipfsBundle.Utf8ArrayToStr(array)\n }\n\n IpfsController.prototype.requestToPin = function (cid, ipnsKey, value) {\n const self = this\n return new Promise((resolve, reject) => {\n if (ipnsKey !== undefined && ipnsKey !== null) {\n self\n .resolveUrl(true, true, value)\n .then(data => {\n const { cid, resolvedUrl } = data\n if (resolvedUrl !== null && cid !== null) {\n resolve(self.addToPin(cid, resolvedUrl))\n } else {\n resolve(false)\n }\n })\n .catch(error => {\n reject(error)\n })\n } else if (cid !== undefined && cid !== null) {\n const normalizedUrl = self.normalizeUrl(`/${ipfsKeyword}/${cid}`)\n resolve(self.addToPin(cid, normalizedUrl))\n } else {\n resolve(false)\n }\n })\n }\n\n IpfsController.prototype.addToPin = function (cid, normalizedUrl) {\n if (cid !== undefined && cid !== null) {\n var index = this.unpin.indexOf(cid)\n if (index !== -1) {\n this.unpin.splice(index, 1)\n this.getLogger().info(`Cancel request to Unpin:\\n ${normalizedUrl}`)\n return false\n }\n if (this.pin.indexOf(cid) === -1) {\n this.pin.push(cid)\n this.getLogger().info(`Request to Pin:\\n ${normalizedUrl}`)\n return true\n }\n }\n return false\n }\n\n IpfsController.prototype.requestToUnpin = function (cid, ipnsKey, value) {\n const self = this\n return new Promise((resolve, reject) => {\n if ($tw.utils.getIpfsUnpin() === false) {\n resolve(false)\n }\n if (ipnsKey !== undefined && ipnsKey !== null) {\n self\n .resolveUrl(true, true, value)\n .then(data => {\n const { cid, resolvedUrl } = data\n if (resolvedUrl !== null && cid !== null) {\n resolve(self.addToUnpin(cid, resolvedUrl))\n } else {\n resolve(false)\n }\n })\n .catch(error => {\n reject(error)\n })\n } else if (cid !== undefined && cid !== null) {\n const normalizedUrl = self.normalizeUrl(`/${ipfsKeyword}/${cid}`)\n resolve(self.addToUnpin(cid, normalizedUrl))\n } else {\n resolve(false)\n }\n })\n }\n\n IpfsController.prototype.addToUnpin = function (cid, normalizedUrl) {\n if (cid !== undefined && cid !== null) {\n // Discard\n var index = this.pin.indexOf(cid)\n if (index !== -1) {\n this.pin.splice(index, 1)\n this.getLogger().info(`Cancel request to Pin:\\n ${normalizedUrl}`)\n return false\n }\n // Add to unpin\n if (this.unpin.indexOf(cid) === -1) {\n this.unpin.push(cid)\n this.getLogger().info(`Request to unpin:\\n ${normalizedUrl}`)\n return true\n }\n }\n return false\n }\n\n IpfsController.prototype.removeFromPinUnpin = function (cid, normalizedUrl) {\n if (cid !== undefined && cid !== null) {\n var index = this.pin.indexOf(cid)\n if (index !== -1) {\n this.pin.splice(index, 1)\n this.getLogger().info(`Cancel request to Pin:\\n ${normalizedUrl}`)\n }\n var index = this.unpin.indexOf(cid)\n if (index !== -1) {\n this.unpin.splice(index, 1)\n this.getLogger().info(`Cancel request to Unpin:\\n ${normalizedUrl}`)\n }\n }\n }\n\n IpfsController.prototype.pinToIpfs = async function (cid) {\n const { ipfs } = await this.getIpfsClient()\n return await this.ipfsWrapper.pinToIpfs(ipfs, cid)\n }\n\n IpfsController.prototype.unpinFromIpfs = async function (cid) {\n const { ipfs } = await this.getIpfsClient()\n return await this.ipfsWrapper.unpinFromIpfs(ipfs, cid)\n }\n\n IpfsController.prototype.addToIpfs = async function (content) {\n const { ipfs } = await this.getIpfsClient()\n return await this.ipfsWrapper.addToIpfs(ipfs, content)\n }\n\n IpfsController.prototype.generateIpnsKey = async function (ipnsName) {\n const { ipfs } = await this.getIpfsClient()\n return await this.ipfsWrapper.generateIpnsKey(ipfs, ipnsName)\n }\n\n IpfsController.prototype.removeIpnsKey = async function (ipnsName) {\n const { ipfs } = await this.getIpfsClient()\n return await this.ipfsWrapper.removeIpnsKey(ipfs, ipnsName)\n }\n\n IpfsController.prototype.renameIpnsName = async function (\n oldIpnsName,\n newIpnsName\n ) {\n const { ipfs } = await this.getIpfsClient()\n return await this.ipfsWrapper.renameIpnsName(ipfs, oldIpnsName, newIpnsName)\n }\n\n IpfsController.prototype.decodeCid = function (pathname) {\n return this.ipfsBundle.decodeCid(pathname)\n }\n\n IpfsController.prototype.getIpnsIdentifiers = async function (\n identifier,\n ipnsName\n ) {\n const { ipfs } = await this.getIpfsClient()\n return await this.ipfsWrapper.getIpnsIdentifiers(ipfs, identifier, ipnsName)\n }\n\n IpfsController.prototype.resolveIpnsKey = async function (ipnsKey) {\n const { ipfs } = await this.getIpfsClient()\n return await this.ipfsWrapper.resolveIpnsKey(ipfs, ipnsKey)\n }\n\n IpfsController.prototype.publishIpnsName = async function (\n cid,\n ipnsKey,\n ipnsName\n ) {\n const { ipfs } = await this.getIpfsClient()\n return await this.ipfsWrapper.publishIpnsName(cid, ipfs, ipnsKey, ipnsName)\n }\n\n IpfsController.prototype.getIpfsBaseUrl = function () {\n return this.ipfsUrl.getIpfsBaseUrl()\n }\n\n IpfsController.prototype.normalizeUrl = function (value, base) {\n return this.ipfsUrl.normalizeUrl(value, base)\n }\n\n IpfsController.prototype.getDocumentUrl = function () {\n return this.ipfsUrl.getDocumentUrl()\n }\n\n IpfsController.prototype.getIpfsDefaultApi = function () {\n return this.ipfsUrl.getIpfsDefaultApi()\n }\n\n IpfsController.prototype.getIpfsDefaultGateway = function () {\n return this.ipfsUrl.getIpfsDefaultGateway()\n }\n\n IpfsController.prototype.getIpfsApiUrl = function () {\n return this.ipfsUrl.getIpfsApiUrl()\n }\n\n IpfsController.prototype.getIpfsGatewayUrl = function () {\n return this.ipfsUrl.getIpfsGatewayUrl()\n }\n\n IpfsController.prototype.resolveUrl = async function (\n resolveIpns,\n resolveEns,\n value,\n base\n ) {\n var cid = null\n var ipnsKey = null\n var ipnsName = null\n var normalizedUrl = null\n var resolvedUrl = null\n value =\n value === undefined || value == null || value.toString().trim() === ''\n ? null\n : value.toString().trim()\n if (value == null) {\n return {\n cid: null,\n ipnsKey: null,\n ipnsName: null,\n normalizedUrl: null,\n resolvedUrl: null\n }\n }\n try {\n normalizedUrl = this.normalizeUrl(value, base)\n } catch (error) {\n // Ignore\n }\n if (normalizedUrl == null) {\n return {\n cid: null,\n ipnsKey: null,\n ipnsName: null,\n normalizedUrl: null,\n resolvedUrl: null\n }\n }\n var { cid, ipnsIdentifier, protocol } = this.decodeCid(\n normalizedUrl.pathname\n )\n if (\n protocol !== null &&\n protocol === ipnsKeyword &&\n ipnsIdentifier !== null\n ) {\n var { ipnsKey, ipnsName, normalizedUrl } = await this.getIpnsIdentifiers(\n ipnsIdentifier\n )\n if (resolveIpns) {\n this.getLogger().info(`Resolving IPNS key:\\n ${normalizedUrl}`)\n $tw.utils.alert(name, 'Resolving an IPNS key...')\n try {\n cid = await this.resolveIpnsKey(ipnsKey)\n if (cid !== null) {\n resolvedUrl = this.normalizeUrl(`/${ipfsKeyword}/${cid}`, base)\n this.getLogger().info(\n `Successfully resolved IPNS key:\\n ${normalizedUrl}`\n )\n $tw.utils.alert(name, 'Successfully resolved an IPNS key...')\n }\n } catch (error) {\n // Unable to resolve the key\n // It usually happen when the key is not initialized\n cid = null\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n }\n }\n } else if (resolveEns && normalizedUrl.hostname.endsWith('.eth')) {\n var { content: cid, resolvedUrl } = await this.resolveEns(\n normalizedUrl.hostname\n )\n } else {\n resolvedUrl = normalizedUrl\n }\n return {\n cid: cid,\n ipnsKey: ipnsKey,\n ipnsName: ipnsName,\n normalizedUrl: normalizedUrl,\n resolvedUrl: resolvedUrl\n }\n }\n\n IpfsController.prototype.getUrl = function (url, base) {\n return this.ipfsUrl.getUrl(\n url,\n base !== undefined && base !== null ? base : this.getIpfsBaseUrl()\n )\n }\n\n IpfsController.prototype.isJson = function (content) {\n return this.ipfsBundle.isJson(content)\n }\n\n IpfsController.prototype.getIpfsClient = async function () {\n // Provider\n const ipfsProvider = $tw.utils.getIpfsProvider()\n // IPFS companion\n if (ipfsProvider === 'window') {\n const client = await this.ipfsWrapper.getWindowIpfsClient()\n return {\n ipfs: client.ipfs,\n provider: client.provider\n }\n }\n // Default, try IPFS companion\n if (ipfsProvider === 'default') {\n try {\n const client = await this.ipfsWrapper.getWindowIpfsClient()\n return {\n ipfs: client.ipfs,\n provider: client.provider\n }\n } catch (error) {\n // Ignore, fallback to HTTP\n }\n }\n // Current API URL\n const url = this.getIpfsApiUrl()\n // Check\n if (url === undefined || url == null || url.toString().trim() === '') {\n throw new Error('Undefined IPFS API URL...')\n }\n // HTTP Client\n const client = this.ipfsClients.get(url.toString())\n if (client !== undefined) {\n // Log\n this.getLogger().info(`Reuse IPFS provider: \"${client.provider}\"`)\n // Done\n return {\n ipfs: client.ipfs,\n provider: client.provider\n }\n }\n // Build a new HTTP client\n const policy = await this.ipfsWrapper.getHttpIpfsClient(url)\n const ipfs = policy.ipfs\n const provider = policy.provider\n // Store\n this.ipfsClients.set(url.toString(), { ipfs, provider })\n // Log\n this.getLogger().info(`New IPFS provider: \"${policy.provider}\"`)\n // Done\n return {\n ipfs: ipfs,\n provider: provider\n }\n }\n\n IpfsController.prototype.resolveEns = async function (ensDomain) {\n const { web3 } = await this.getWeb3Provider()\n const { content, protocol } = await this.ensWrapper.getContentHash(\n ensDomain,\n web3\n )\n if (content !== null && protocol !== null) {\n const url = this.normalizeUrl(`/${protocol}/${content}`)\n this.getLogger().info(\n `Successfully fetched ENS domain content: \"${ensDomain}\"\\n ${url}`\n )\n return {\n content: content,\n protocol: protocol,\n resolvedUrl: url\n }\n }\n return {\n content: null,\n protocol: null,\n resolvedUrl: null\n }\n }\n\n IpfsController.prototype.setEns = async function (ensDomain, cid) {\n const { web3, account } = await this.getEnabledWeb3Provider()\n const { cidV0 } = await this.ensWrapper.setContentHash(\n ensDomain,\n cid,\n web3,\n account\n )\n if (cidV0 !== null) {\n const url = this.normalizeUrl(`/ipfs/${cidV0}`)\n this.getLogger().info(\n `Successfully set ENS domain content:\\n ${url} \\n to: \"${ensDomain}\"`\n )\n return true\n }\n return false\n }\n\n IpfsController.prototype.getEthereumProvider = async function () {\n return await this.ensWrapper.getEthereumProvider()\n }\n\n IpfsController.prototype.getEnabledWeb3Provider = async function () {\n return await this.ensWrapper.getEnabledWeb3Provider()\n }\n\n IpfsController.prototype.getWeb3Provider = async function () {\n return await this.ensWrapper.getWeb3Provider()\n }\n\n IpfsController.prototype.getChainId = function () {\n return this.ensWrapper.getChainId()\n }\n\n exports.IpfsController = IpfsController\n})()\n",
"type": "application/javascript",
"tags": "$:/ipfs/core",
"module-type": "library"
},
"$:/plugins/ipfs/ipfs-default.js": {
"title": "$:/plugins/ipfs/ipfs-default.js",
"text": "/*\\\ntitle: $:/plugins/ipfs/ipfs-default.js\ntype: application/javascript\ntags: $:/ipfs/core\nmodule-type: utils\n\nIPFS Default\n\n\\*/\n\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n /*\n * Retrieve ipfs saver export protocol with default value if applicable\n */\n exports.getIpfsExport = function () {\n var output = null\n var tiddler = $tw.wiki.getTiddler('$:/ipfs/saver/export')\n if (tiddler !== undefined && tiddler !== null) {\n var text = tiddler.getFieldString('text')\n text =\n text === undefined || text == null || text.trim() === ''\n ? null\n : text.trim()\n if (text !== null) {\n output = text\n }\n }\n if (output == null) {\n output = $tw.utils.getIpfsDefaultExport()\n }\n return output\n }\n\n /*\n * Default Export\n */\n exports.getIpfsDefaultExport = function () {\n return 'json'\n }\n\n /*\n * Retrieve ipfs saver protocol with default value if applicable\n */\n exports.getIpfsProtocol = function () {\n var protocol = null\n var tiddler = $tw.wiki.getTiddler('$:/ipfs/saver/protocol')\n if (tiddler !== undefined && tiddler !== null) {\n var text = tiddler.getFieldString('text')\n text =\n text === undefined || text == null || text.trim() === ''\n ? null\n : text.trim()\n if (text !== null) {\n protocol = text\n }\n }\n if (protocol == null) {\n protocol = $tw.utils.getIpfsDefaultProtocol()\n }\n return protocol\n }\n\n /*\n * Default Protocol\n */\n exports.getIpfsDefaultProtocol = function () {\n return 'ipfs'\n }\n\n /*\n * Retrieve ipfs saver api url with default value if applicable\n */\n exports.getIpfsSaverApiUrl = function () {\n var api = null\n var tiddler = $tw.wiki.getTiddler('$:/ipfs/saver/api')\n if (tiddler !== undefined && tiddler !== null) {\n var text = tiddler.getFieldString('text')\n text =\n text === undefined || text == null || text.trim() === ''\n ? null\n : text.trim()\n if (text !== null) {\n api = text\n }\n }\n if (api !== null) {\n tiddler = $tw.wiki.getTiddler(api)\n if (tiddler !== undefined && tiddler !== null) {\n var text = tiddler.getFieldString('text')\n text =\n text === undefined || text == null || text.trim() === ''\n ? null\n : text.trim()\n if (text !== null) {\n api = text\n }\n }\n }\n if (api == null) {\n api = $tw.ipfs.getIpfsDefaultApi()\n }\n return api\n }\n\n /*\n * Retrieve ipfs saver gateway url with default value if applicable\n */\n exports.getIpfsSaverGatewayUrl = function () {\n var gateway = null\n var tiddler = $tw.wiki.getTiddler('$:/ipfs/saver/gateway')\n if (tiddler !== undefined && tiddler !== null) {\n var text = tiddler.getFieldString('text')\n text =\n text === undefined || text == null || text.trim() === ''\n ? null\n : text.trim()\n if (text !== null) {\n gateway = text\n }\n }\n if (gateway !== null) {\n tiddler = $tw.wiki.getTiddler(gateway)\n if (tiddler !== undefined && tiddler !== null) {\n var text = tiddler.getFieldString('text')\n text =\n text === undefined || text == null || text.trim() === ''\n ? null\n : text.trim()\n if (text !== null) {\n gateway = text\n }\n }\n }\n if (gateway == null) {\n gateway = $tw.ipfs.getIpfsDefaultGateway()\n }\n return gateway\n }\n\n /*\n * Retrieve ipfs saver ens domain with default value if applicable\n */\n exports.getIpfsEnsDomain = function () {\n var ensDomain = null\n var tiddler = $tw.wiki.getTiddler('$:/ipfs/saver/ens/domain')\n if (tiddler !== undefined && tiddler !== null) {\n var text = tiddler.getFieldString('text')\n text =\n text === undefined || text == null || text.trim() === ''\n ? null\n : text.trim()\n if (text !== null) {\n ensDomain = text\n }\n }\n return ensDomain\n }\n\n /*\n * Retrieve ipfs saver ipns name with default value if applicable\n */\n exports.getIpfsIpnsName = function () {\n var ipnsName = null\n var tiddler = $tw.wiki.getTiddler('$:/ipfs/saver/ipns/name')\n if (tiddler !== undefined && tiddler !== null) {\n var text = tiddler.getFieldString('text')\n text =\n text === undefined || text == null || text.trim() === ''\n ? null\n : text.trim()\n if (text !== null) {\n ipnsName = text\n }\n }\n return ipnsName\n }\n\n /*\n * Retrieve ipfs saver ipns key with default value if applicable\n */\n exports.getIpfsIpnsKey = function () {\n var ipnsKey = null\n var tiddler = $tw.wiki.getTiddler('$:/ipfs/saver/ipns/key')\n if (tiddler !== undefined && tiddler !== null) {\n var text = tiddler.getFieldString('text')\n text =\n text === undefined || text == null || text.trim() === ''\n ? null\n : text.trim()\n if (text !== null) {\n ipnsKey = text\n }\n }\n return ipnsKey\n }\n\n /*\n * Retrieve ipfs saver verbose with default value if applicable\n */\n exports.getIpfsVerbose = function () {\n var verbose = null\n var tiddler = $tw.wiki.getTiddler('$:/ipfs/saver/verbose')\n if (tiddler !== undefined && tiddler !== null) {\n var text = tiddler.getFieldString('text')\n text =\n text === undefined || text == null || text.trim() === ''\n ? null\n : text.trim()\n if (text !== null) {\n verbose = text\n }\n }\n if (verbose == null) {\n verbose = true // default, see ipfs-saver.tid\n } else {\n verbose = verbose === 'yes'\n }\n return verbose\n }\n\n /*\n * Retrieve ipfs saver unpin with default value if applicable\n */\n exports.getIpfsUnpin = function () {\n var unpin = null\n var tiddler = $tw.wiki.getTiddler('$:/ipfs/saver/unpin')\n if (tiddler !== undefined && tiddler !== null) {\n var text = tiddler.getFieldString('text')\n text =\n text === undefined || text == null || text.trim() === ''\n ? null\n : text.trim()\n if (text !== null) {\n unpin = text\n }\n }\n if (unpin == null) {\n unpin = false // default, see ipfs-saver.tid\n } else {\n unpin = unpin === 'yes'\n }\n return unpin\n }\n\n /*\n * Retrieve ipfs saver url policy with default value if applicable\n */\n exports.getIpfsUrlPolicy = function () {\n var policy = null\n var tiddler = $tw.wiki.getTiddler('$:/ipfs/saver/policy')\n if (tiddler !== undefined && tiddler !== null) {\n var text = tiddler.getFieldString('text')\n text =\n text === undefined || text == null || text.trim() === ''\n ? null\n : text.trim()\n if (text !== null) {\n policy = text\n }\n }\n if (policy == null) {\n policy = $tw.utils.getIpfsDefaultPolicy()\n }\n return policy\n }\n\n /*\n * Default Policy\n */\n exports.getIpfsDefaultPolicy = function () {\n return 'gateway'\n }\n\n /*\n * Retrieve ipfs saver provider with default value if applicable\n */\n exports.getIpfsProvider = function () {\n var provider = null\n var tiddler = $tw.wiki.getTiddler('$:/ipfs/saver/provider')\n if (tiddler !== undefined && tiddler !== null) {\n var text = tiddler.getFieldString('text')\n text =\n text === undefined || text == null || text.trim() === ''\n ? null\n : text.trim()\n if (text !== null) {\n provider = text\n }\n }\n if (provider == null) {\n provider = $tw.utils.getIpfsDefaultProvider()\n }\n return provider\n }\n\n /*\n * Default Provider\n */\n exports.getIpfsDefaultProvider = function () {\n return 'http'\n }\n})()\n",
"type": "application/javascript",
"tags": "$:/ipfs/core",
"module-type": "utils"
},
"$:/plugins/ipfs/ipfs-import.js": {
"title": "$:/plugins/ipfs/ipfs-import.js",
"text": "/*\\\ntitle: $:/plugins/ipfs/ipfs-import.js\ntype: application/javascript\ntags: $:/ipfs/core\nmodule-type: library\n\nIPFS Import\n\n\\*/\n\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n const name = 'ipfs-import'\n\n const local = '<a href=\"'\n const remote = '<a rel=\"noopener noreferrer\" target=\"_blank\" href=\"'\n\n const alertFailed = function (\n strings,\n msg,\n key,\n field,\n parentField,\n parentUrl,\n parentTitle\n ) {\n var space = strings[1]\n var endH1 = strings[2]\n var endL1 = strings[3]\n var from = strings[4]\n var endH2 = strings[5]\n var endL2 = strings[6]\n if (\n parentUrl.hostname === $tw.ipfs.getIpfsBaseUrl().hostname &&\n parentUrl.pathname === $tw.ipfs.getIpfsBaseUrl().pathname\n ) {\n return `${msg}${space}${remote}${key}${endH1}${field}${endL1}${parentField}${from}${local}${parentUrl}${endH2}${parentTitle}${endL2}`\n } else {\n return `${msg}${space}${remote}${key}${endH1}${field}${endL1}${parentField}${from}${remote}${parentUrl}${endH2}${parentTitle}${endL2}`\n }\n }\n\n const alertFieldFailed = function (strings, msg, field, url, title) {\n var failed = strings[1]\n var from = strings[2]\n var endH = strings[3]\n var endL = strings[4]\n if (\n url.hostname === $tw.ipfs.getIpfsBaseUrl().hostname &&\n url.pathname === $tw.ipfs.getIpfsBaseUrl().pathname\n ) {\n return `${msg}${failed}${field}${from}${local}${url}${endH}${title}${endL}`\n } else {\n return `${msg}${failed}${field}${from}${remote}${url}${endH}${title}${endL}`\n }\n }\n\n const alertConditionFailed = function (\n strings,\n msg,\n condition,\n key,\n title,\n parentUrl\n ) {\n var space = strings[1]\n var from = strings[2]\n var endH1 = strings[3]\n var endL1 = strings[4]\n var endH2 = strings[5]\n var endL2 = strings[6]\n if (\n parentUrl.hostname === $tw.ipfs.getIpfsBaseUrl().hostname &&\n parentUrl.pathname === $tw.ipfs.getIpfsBaseUrl().pathname\n ) {\n return `${msg}${space}${condition}${from}${remote}${key}${endH1}${title}${endL1}${local}${parentUrl}${endH2}${title}${endL2}`\n } else {\n return `${msg}${space}${condition}${from}${remote}${key}${endH1}${title}${endL1}${remote}${parentUrl}${endH2}${title}${endL2}`\n }\n }\n\n var IpfsImport = function () {}\n\n IpfsImport.prototype.getLogger = function () {\n return window.log.getLogger(name)\n }\n\n IpfsImport.prototype.removeTiddlers = function (keys, title) {\n var removed = 0\n for (var key of this.loaded.keys()) {\n if (keys.indexOf(key) !== -1) {\n continue\n }\n const { imported, resolvedKey } = this.loaded.get(key)\n if (imported.delete(title)) {\n const msg = 'Remove:'\n const field = ''\n this.getLogger().info(`${msg} ${field}\"${title}\"\\n ${resolvedKey}`)\n $tw.utils.alert(\n name,\n alertFieldFailed`${msg} ${field}${resolvedKey}\">${title}</a>`\n )\n removed += 1\n }\n }\n return removed\n }\n\n IpfsImport.prototype.getKey = async function (base, value) {\n var cid = null\n var ipnsKey = null\n var key = null\n var normalizedUrl = null\n var resolvedUrl = null\n value =\n value === undefined || value == null || value.trim() === ''\n ? null\n : value.trim()\n if (value == null) {\n return {\n key: null,\n isIpfs: false,\n resolvedUrl: null\n }\n }\n var {\n cid,\n ipnsKey,\n normalizedUrl,\n resolvedUrl\n } = await $tw.ipfs.resolveUrl(false, true, value, base)\n if (normalizedUrl == null && resolvedUrl == null) {\n throw new Error(`Failed to resolve value: \"${value}\"`)\n }\n if (cid !== null) {\n key = `/ipfs/${cid}`\n } else if (ipnsKey !== null) {\n key = `/ipns/${ipnsKey}`\n } else if (normalizedUrl.hostname.endsWith('.eth')) {\n key = normalizedUrl.hostname\n } else {\n key = normalizedUrl.toString()\n }\n return {\n key: key,\n resolvedUrl: resolvedUrl\n }\n }\n\n IpfsImport.prototype.isIpfs = async function (key) {\n key =\n key === undefined || key == null || key.trim() === '' ? null : key.trim()\n if (key == null) {\n return false\n }\n const { cid, ipnsIdentifier } = $tw.ipfs.decodeCid(key)\n if (cid !== null || ipnsIdentifier !== null) {\n return true\n } else if (key.endsWith('.eth')) {\n return true\n }\n return false\n }\n\n IpfsImport.prototype.import = async function (\n canonicalUri,\n importUri,\n tiddler\n ) {\n const self = this\n var loadedAdded = 0\n var loadedRemoved = 0\n canonicalUri =\n canonicalUri === undefined ||\n canonicalUri == null ||\n canonicalUri.trim() === ''\n ? null\n : canonicalUri.trim()\n importUri =\n importUri === undefined || importUri == null || importUri.trim() === ''\n ? null\n : importUri.trim()\n this.host = tiddler\n const { type, info } = $tw.utils.getContentType(\n tiddler.fields.title,\n tiddler.fields.type\n )\n this.loaded = new Map()\n this.notLoaded = []\n this.isEmpty = []\n this.resolved = new Map()\n this.notResolved = []\n this.added = []\n this.updated = []\n this.merged = new Map()\n try {\n // Load and prepare imported tiddlers to be processed\n const url = $tw.ipfs.getIpfsBaseUrl()\n url.hash = tiddler.fields.title\n if (canonicalUri !== null || importUri !== null) {\n this.getLogger().info('*** Begin Import ***')\n this.rootUri = importUri !== null ? importUri : canonicalUri\n if (this.rootUri !== null) {\n const {\n loaded: importLoaded,\n removed: importRemoved\n } = await this.load(\n url,\n tiddler.fields.title,\n '_import_uri',\n importUri,\n true\n )\n loadedAdded += importLoaded\n loadedRemoved += importRemoved\n }\n if (canonicalUri !== null) {\n var load = true\n if (info.encoding === 'base64' || type === 'image/svg+xml') {\n load = false\n }\n const {\n loaded: canonicalLoaded,\n removed: canonicalRemoved\n } = await this.load(\n url,\n tiddler.fields.title,\n '_canonical_uri',\n canonicalUri,\n load\n )\n loadedAdded += canonicalLoaded\n loadedRemoved += canonicalRemoved\n }\n const { processed, removed: processedRemoved } = this.processImported()\n this.importTiddlers()\n this.getLogger().info(`*** Loaded: ${this.loaded.size} Resource(s) ***`)\n this.getLogger().info(\n `*** Loaded: ${this.isEmpty.length} Empty Resource(s) ***`\n )\n this.getLogger().info(\n `*** Failed to Load: ${this.notLoaded.length} Resource(s) ***`\n )\n this.getLogger().info(\n `*** Failed to Resolve: ${this.notResolved.length} URL(s) ***`\n )\n this.getLogger().info(\n `*** Loaded: ${loadedAdded}, Removed: ${loadedRemoved} Tiddler(s) ***`\n )\n this.getLogger().info(\n `*** Processed: ${processed}, Removed: ${processedRemoved} Tiddler(s) ***`\n )\n this.getLogger().info(\n `*** Added: ${this.added.length}, Updated: ${this.updated.length} Tiddler(s) ***`\n )\n }\n // Update Wiki\n var reportAdded = ''\n var reportUpdated = ''\n for (var [title, merged] of this.merged.entries()) {\n $tw.wiki.addTiddler(merged)\n if (\n this.host !== null &&\n this.merged.get(this.host.fields.title) === undefined\n ) {\n if (this.added.indexOf(title) !== -1) {\n reportAdded = `${reportAdded}[[${title}]]`\n } else {\n reportUpdated = `${reportUpdated}[[${title}]]`\n }\n }\n }\n // Process deleted\n var deleted = 0\n var reportDeleted = ''\n $tw.wiki.forEachTiddler({ includeSystem: true }, function (\n title,\n tiddler\n ) {\n var value = tiddler.getFieldString('_canonical_uri')\n if (\n value !== undefined &&\n value !== null &&\n value === self.rootUri &&\n self.merged.get(title) === undefined\n ) {\n if (\n self.host !== null &&\n self.merged.get(self.host.fields.title) === undefined &&\n self.host.fields.title !== title\n ) {\n $tw.wiki.deleteTiddler(title)\n reportDeleted = `${reportDeleted}[[${title}]]`\n deleted += 1\n }\n return\n }\n var value = tiddler.getFieldString('_import_uri')\n if (\n value !== undefined &&\n value !== null &&\n value === self.rootUri &&\n self.merged.get(title) === undefined\n ) {\n if (\n self.host !== null &&\n self.merged.get(self.host.fields.title) === undefined &&\n self.host.fields.title !== title\n ) {\n $tw.wiki.deleteTiddler(title)\n reportDeleted = `${reportDeleted}[[${title}]]`\n deleted += 1\n }\n }\n })\n if (this.merged.size > 0) {\n $tw.utils.alert(\n name,\n 'Successfully Imported, Added: ' +\n this.added.length +\n ', Deleted: ' +\n deleted +\n ', Updated: ' +\n this.updated.length\n )\n }\n if (\n this.host !== null &&\n this.merged.get(this.host.fields.title) === undefined\n ) {\n var updatedTiddler = new $tw.Tiddler(this.host)\n if (this.merged.size === 0) {\n updatedTiddler = $tw.utils.updateTiddler({\n tiddler: updatedTiddler,\n fields: [\n {\n key: 'type',\n value: 'text/vnd.tiddlywiki'\n },\n {\n key: 'text',\n value: \"''No Tiddlers have been Imported''\"\n }\n ]\n })\n } else {\n const reportAddedMsg = `<p align='left'>''Added: ${this.added.length}''</p>`\n const reportDeletedMsg = `<p align='left'>''Deleted: ${deleted}''</p>`\n const reportImportedMsg =\n \"<p align='center'>''Successfully Imported''</p>\"\n const reportUpdatedMsg = `<p align='left'>''Updated: ${this.updated.length}''</p>`\n var value = `${reportImportedMsg}`\n if (reportAdded.trim() !== '') {\n value = `${value}\\n\\n${reportAddedMsg}\\n\\n{{{${reportAdded}}}}`\n }\n if (reportDeleted.trim() !== '') {\n value = `${value}\\n\\n${reportDeletedMsg}\\n\\n{{{${reportDeleted}}}}`\n }\n if (reportUpdated.trim() !== '') {\n value = `${value}\\n\\n${reportUpdatedMsg}\\n\\n{{{${reportUpdated}}}}`\n }\n updatedTiddler = $tw.utils.updateTiddler({\n tiddler: updatedTiddler,\n fields: [\n {\n key: 'type',\n value: 'text/vnd.tiddlywiki'\n },\n {\n key: 'text',\n value: value\n }\n ]\n })\n }\n $tw.wiki.addTiddler(updatedTiddler)\n }\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n }\n this.getLogger().info('*** End Import ***')\n this.host = null\n this.loaded = null\n this.isEmpty = null\n this.notLoaded = null\n this.resolved = null\n this.notResolved = null\n this.added = null\n this.updated = null\n this.merged = null\n }\n\n IpfsImport.prototype.load = async function (\n parentUrl,\n parentTitle,\n field,\n url,\n load\n ) {\n var loaded = 0\n var removed = 0\n var key = null\n var resolvedUrl = null\n if (\n url !== null &&\n this.notResolved.indexOf(url) === -1 &&\n this.resolved.get(url) === undefined\n ) {\n try {\n var { key, resolvedUrl } = await this.getKey(parentUrl, url)\n this.resolved.set(url, key)\n } catch (error) {\n const msg = 'Failed to Resolve:'\n this.notResolved.push(url)\n this.getLogger().error(error)\n $tw.utils.alert(\n name,\n alertFieldFailed`${msg} \"${field}\" from ${parentUrl}\">${parentTitle}</a>`\n )\n }\n }\n if (\n load &&\n key !== null &&\n resolvedUrl !== null &&\n this.notLoaded.indexOf(key) === -1 &&\n this.loaded.get(key) === undefined\n ) {\n const {\n loaded: loadedAdded,\n removed: loadedRemoved\n } = await this.loadResource(\n parentUrl,\n parentTitle,\n field,\n url,\n key,\n resolvedUrl\n )\n loaded = loadedAdded\n removed = loadedRemoved\n }\n return {\n loaded: loaded,\n removed: removed\n }\n }\n\n IpfsImport.prototype.loadResource = async function (\n parentUrl,\n parentTitle,\n parentField,\n uri,\n key,\n resolvedKey\n ) {\n var loaded = 0\n var removed = 0\n var content = null\n var imported = new Map()\n var tiddlers = null\n try {\n // Load\n content = await $tw.ipfs.loadToUtf8(resolvedKey.toString())\n if ($tw.ipfs.isJson(content.data)) {\n tiddlers = $tw.wiki.deserializeTiddlers(\n '.json',\n content.data,\n $tw.wiki.getCreationFields()\n )\n } else {\n tiddlers = $tw.wiki.deserializeTiddlers(\n '.tid',\n content.data,\n $tw.wiki.getCreationFields()\n )\n }\n // Loaded\n if (tiddlers !== undefined && tiddlers !== null) {\n this.loaded.set(key, { imported, resolvedKey, uri })\n for (var i in tiddlers) {\n const tiddler = tiddlers[i]\n var title = tiddler.title\n if (title === undefined || title == null || title.trim() === '') {\n const msg = 'Ignore Unknown:'\n const field = 'Title'\n this.getLogger().info(\n `${msg} \"${field}\"\\n ${resolvedKey} \\n from \"${parentField}\", \"${parentTitle}\"\\n ${parentUrl}`\n )\n $tw.utils.alert(\n name,\n alertFailed`${msg} ${resolvedKey}\">${field}</a>, from \"${parentField}\", ${parentUrl}\">${parentTitle}</a>`\n )\n removed += 1\n continue\n }\n if (imported.get(title) !== undefined) {\n const msg = 'Ignore Duplicate:'\n this.getLogger().info(\n `${msg} \"${title}\"\\n ${resolvedKey} \\n from \"${parentField}\", \"${parentTitle}\"\\n ${parentUrl}`\n )\n $tw.utils.alert(\n name,\n alertFailed`${msg} ${resolvedKey}\">${title}</a>, from \"${parentField}\", ${parentUrl}\">${parentTitle}</a>`\n )\n removed += 1\n continue\n }\n var type = tiddler.type\n if (type === undefined || type == null) {\n type = 'text/vnd.tiddlywiki'\n }\n var info = $tw.config.contentTypeInfo[type]\n if (info === undefined || info == null) {\n const msg = 'Unknown:'\n const field = 'Content-Type'\n this.getLogger().info(\n `${msg} \"${field}\": \"${title}\"\\n ${resolvedKey}`\n )\n $tw.utils.alert(\n name,\n alertFieldFailed`${msg} \"${field}\": ${resolvedKey}\">${title}</a>`\n )\n // Default\n type = 'text/vnd.tiddlywiki'\n info = $tw.config.contentTypeInfo[type]\n }\n tiddler.type = type\n // Next\n var canonicalUri = tiddler._canonical_uri\n canonicalUri =\n canonicalUri === undefined ||\n canonicalUri == null ||\n canonicalUri.trim() === ''\n ? null\n : canonicalUri.trim()\n tiddler._canonical_uri = canonicalUri\n var importUri = tiddler._import_uri\n importUri =\n importUri === undefined ||\n importUri == null ||\n importUri.trim() === ''\n ? null\n : importUri.trim()\n tiddler._import_uri = importUri\n if (canonicalUri !== null || importUri !== null) {\n if (importUri !== null) {\n const {\n loaded: loadedAdded,\n removed: loadedRemoved\n } = await this.load(\n resolvedKey,\n title,\n '_import_uri',\n importUri,\n true\n )\n loaded += loadedAdded\n removed += loadedRemoved\n }\n if (canonicalUri !== null) {\n var load = true\n if (\n info.encoding === 'base64' ||\n tiddler.type === 'image/svg+xml'\n ) {\n load = false\n }\n const {\n loaded: loadedAdded,\n removed: loadedRemoved\n } = await this.load(\n resolvedKey,\n title,\n 'canonical_uri',\n canonicalUri,\n load\n )\n loaded += loadedAdded\n removed += loadedRemoved\n }\n }\n imported.set(title, tiddler)\n loaded += 1\n }\n }\n if (imported.size === 0) {\n this.isEmpty.push(key)\n const msg = 'Empty:'\n const field = 'Resource'\n this.getLogger().info(\n `${msg} \"${field}\"\\n ${resolvedKey} \\n from \"${parentField}\", \"${parentTitle}\"\\n ${parentUrl}`\n )\n $tw.utils.alert(\n name,\n alertFailed`${msg} ${resolvedKey}\">${field}</a> from \"${parentField}\", ${parentUrl}\">${parentTitle}</a>`\n )\n }\n } catch (error) {\n this.notLoaded.push(key)\n const msg = 'Failed to Load:'\n const field = 'Resource'\n this.getLogger().info(\n `${msg} \"${field}\"\\n ${resolvedKey} \\n from \"${parentField}\", \"${parentTitle}\"\\n ${parentUrl}`\n )\n this.getLogger().error(error)\n $tw.utils.alert(\n name,\n alertFailed`${msg} ${resolvedKey}\">${field}</a> from \"${parentField}\", ${parentUrl}\">${parentTitle}</a>`\n )\n }\n return {\n loaded: loaded,\n removed: removed\n }\n }\n\n IpfsImport.prototype.processImported = function () {\n var processed = 0\n var removed = 0\n var processedTitles = []\n for (var key of this.loaded.keys()) {\n const { imported, resolvedKey } = this.loaded.get(key)\n for (var title of imported.keys()) {\n if (processedTitles.indexOf(title) !== -1) {\n continue\n }\n const keys = []\n const tiddler = imported.get(title)\n var type = tiddler.type\n var info = $tw.config.contentTypeInfo[type]\n var canonicalUri = tiddler._canonical_uri\n canonicalUri =\n canonicalUri === undefined ||\n canonicalUri == null ||\n canonicalUri.trim() === ''\n ? null\n : canonicalUri.trim()\n var importUri = tiddler._import_uri\n importUri =\n importUri === undefined ||\n importUri == null ||\n importUri.trim() === ''\n ? null\n : importUri.trim()\n if (canonicalUri == null && importUri == null) {\n keys.push(key)\n } else if (canonicalUri == null && importUri !== null) {\n const msg = 'Missing:'\n const field = '_canonical_uri'\n this.getLogger().info(\n `${msg} \"${field}\" from ${title}\"\\n ${resolvedKey}`\n )\n $tw.utils.alert(\n name,\n alertFieldFailed`${msg} \"${field}\" from ${resolvedKey}\">${title}</a>`\n )\n } else {\n var canonicalKey = null\n if (\n canonicalUri !== null &&\n this.notResolved.indexOf(canonicalUri) === -1\n ) {\n canonicalKey = this.resolved.get(canonicalUri)\n }\n if (canonicalKey !== undefined && canonicalKey !== null) {\n if (key === canonicalKey) {\n const msg = 'Cycle Graph:'\n const field = '_canonical_uri'\n this.getLogger().info(\n `${msg} \"${field}\" from ${title}\"\\n ${resolvedKey}`\n )\n $tw.utils.alert(\n name,\n alertFieldFailed`${msg} \"${field}\" from ${resolvedKey}\">${title}</a>`\n )\n } else if (\n this.processCanonicalKey(\n keys,\n resolvedKey,\n title,\n canonicalKey,\n type,\n info\n )\n ) {\n var importKey = null\n if (\n importUri !== null &&\n this.notResolved.indexOf(importUri) === -1\n ) {\n importKey = this.resolved.get(importUri)\n }\n if (importKey === undefined || importKey == null) {\n keys.push(key)\n } else {\n if (canonicalKey === importKey) {\n const msg = 'Matching:'\n const field = '\"_canonical_uri\" and \"_import_uri\"'\n this.getLogger().info(\n `${msg} ${field} from \"${title}\"\\n ${resolvedKey}`\n )\n $tw.utils.alert(\n name,\n alertFieldFailed`${msg} ${field} from ${resolvedKey}\">${title}</a>`\n )\n } else if (key === importKey) {\n const msg = 'Cycle Graph:'\n const field = '_import_uri'\n this.getLogger().info(\n `${msg} \"${field}\" from \"${title}\"\\n ${resolvedKey}`\n )\n $tw.utils.alert(\n name,\n alertFieldFailed`${msg} \"${field}\" from ${resolvedKey}\">${title}</a>`\n )\n } else {\n keys.push(key)\n this.processImportKey(\n keys,\n resolvedKey,\n title,\n canonicalKey,\n importKey\n )\n }\n }\n }\n }\n }\n processed += keys.length\n removed += this.removeTiddlers(keys, title)\n processedTitles.push(title)\n }\n }\n return {\n processed: processed,\n removed: removed\n }\n }\n\n IpfsImport.prototype.processCanonicalKey = function (\n keys,\n parentResolvedKey,\n title,\n canonicalKey,\n type,\n info\n ) {\n if (info.encoding === 'base64' || type === 'image/svg+xml') {\n keys.push(canonicalKey)\n return true\n }\n if (this.notLoaded.indexOf(canonicalKey) !== -1) {\n return false\n }\n const { imported, resolvedKey } = this.loaded.get(canonicalKey)\n if (imported === undefined) {\n return false\n }\n const tiddler = imported.get(title)\n if (tiddler === undefined) {\n return false\n }\n var canonicalUri = tiddler._canonical_uri\n canonicalUri =\n canonicalUri == null ||\n canonicalUri === undefined ||\n canonicalUri.trim() === ''\n ? null\n : canonicalUri.trim()\n if (canonicalUri !== null) {\n const msg = 'Inconsistency:'\n const field = '_canonical_uri'\n this.getLogger().info(\n `${msg} \"${field}\" from \"${title}\"\\n ${resolvedKey} \\n and ${parentResolvedKey}`\n )\n $tw.utils.alert(\n name,\n alertConditionFailed`${msg} \"${field}\" from ${resolvedKey}\">${title}</a> and ${parentResolvedKey}\">${title}</a>`\n )\n return false\n }\n var importUri = tiddler._import_uri\n importUri =\n importUri == null || importUri === undefined || importUri.trim() === ''\n ? null\n : importUri.trim()\n if (importUri !== null) {\n const msg = 'Inconsistency:'\n const field = '_import_uri'\n this.getLogger().info(\n `${msg} \"${field}\" from \"${title}\"\\n ${resolvedKey} \\n and ${parentResolvedKey}`\n )\n $tw.utils.alert(\n name,\n alertConditionFailed`${msg} \"${field}\" from ${resolvedKey}\">${title}</a> and ${parentResolvedKey}\">${title}</a>`\n )\n return false\n }\n keys.push(canonicalKey)\n return true\n }\n\n IpfsImport.prototype.processImportKey = function (\n keys,\n parentResolvedKey,\n title,\n canonicalKey,\n importKey\n ) {\n if (this.notLoaded.indexOf(importKey) !== -1) {\n return\n }\n const { imported, resolvedKey: importResolvedKey } = this.loaded.get(\n importKey\n )\n if (imported === undefined) {\n return\n }\n const tiddler = imported.get(title)\n if (tiddler === undefined) {\n return\n }\n var targetCanonicalUri = tiddler._canonical_uri\n targetCanonicalUri =\n targetCanonicalUri == null ||\n targetCanonicalUri === undefined ||\n targetCanonicalUri.trim() === ''\n ? null\n : targetCanonicalUri.trim()\n var targetCanonicalKey = null\n if (\n targetCanonicalUri !== null &&\n this.notResolved.indexOf(targetCanonicalUri) === -1\n ) {\n targetCanonicalKey = this.resolved.get(targetCanonicalUri)\n }\n if (\n targetCanonicalKey !== undefined &&\n targetCanonicalKey !== null &&\n canonicalKey !== targetCanonicalKey\n ) {\n const msg = 'Inconsistency:'\n const field = '_canonical_uri'\n this.getLogger().info(\n `${msg} \"${field}\" from \"${title}\"\\n ${importResolvedKey} \\n and ${parentResolvedKey}`\n )\n $tw.utils.alert(\n name,\n alertConditionFailed`${msg} \"${field}\" from ${importResolvedKey}\">${title}</a> and ${parentResolvedKey}\">${title}</a>`\n )\n return\n }\n var nextImportUri = tiddler._import_uri\n nextImportUri =\n nextImportUri == null ||\n nextImportUri === undefined ||\n nextImportUri.trim() === ''\n ? null\n : nextImportUri.trim()\n if (targetCanonicalUri == null && nextImportUri !== null) {\n const msg = 'Missing:'\n const field = '_canonical_uri'\n this.getLogger().info(\n `${msg} \"${field}\" from \"${title}\"\\n ${importResolvedKey}`\n )\n $tw.utils.alert(\n name,\n alertFieldFailed`${msg} \"${field}\" from ${importResolvedKey}\">${title}</a>`\n )\n return\n }\n if (nextImportUri == null) {\n keys.push(importKey)\n } else {\n var nextImportKey = null\n if (\n nextImportUri !== null &&\n this.notResolved.indexOf(nextImportUri) === -1\n ) {\n nextImportKey = this.resolved.get(nextImportUri)\n }\n if (nextImportKey !== undefined && nextImportKey !== null) {\n if (canonicalKey === nextImportKey) {\n const msg = 'Matching:'\n const field = '\"_canonical_uri\" and \"_import_uri\"'\n this.getLogger().info(\n `${msg} ${field} from \"${title}\"\\n ${importResolvedKey}`\n )\n $tw.utils.alert(\n name,\n alertFieldFailed`${msg} ${field} from ${importResolvedKey}\">${title}</a>`\n )\n } else if (keys.indexOf(nextImportKey) !== -1) {\n const msg = 'Cycle Graph:'\n const field = '_import_uri'\n this.getLogger().info(\n `${msg} \"${field}\" from \"${title}\"\\n ${importResolvedKey}`\n )\n $tw.utils.alert(\n name,\n alertFieldFailed`${msg} \"${field}\" from ${importResolvedKey}\">${title}</a>`\n )\n } else {\n keys.push(importKey)\n this.processImportKey(\n keys,\n importResolvedKey,\n title,\n canonicalKey,\n nextImportKey\n )\n }\n }\n }\n }\n\n IpfsImport.prototype.importTiddlers = function () {\n var processedTitles = []\n for (var key of this.loaded.keys()) {\n const { imported, uri } = this.loaded.get(key)\n for (var title of imported.keys()) {\n if (processedTitles.indexOf(title) !== -1) {\n continue\n }\n const tiddler = imported.get(title)\n var type = tiddler.type\n var info = $tw.config.contentTypeInfo[type]\n var canonicalUri = tiddler._canonical_uri\n canonicalUri =\n canonicalUri === undefined ||\n canonicalUri == null ||\n canonicalUri.trim() === ''\n ? null\n : canonicalUri.trim()\n var importUri = tiddler._import_uri\n importUri =\n importUri === undefined ||\n importUri == null ||\n importUri.trim() === ''\n ? null\n : importUri.trim()\n var exist = null\n if (importUri !== null) {\n exist = this.importTiddler(title, importUri)\n }\n if (\n exist == null &&\n canonicalUri !== null &&\n info.encoding !== 'base64' &&\n type !== 'image/svg+xml'\n ) {\n this.importTiddler(title, canonicalUri)\n }\n exist = this.mergeTiddler(title, uri)\n if (exist !== null) {\n const merged = this.merged.get(title)\n var type = merged.type\n var info = $tw.config.contentTypeInfo[type]\n if (info.encoding === 'base64' || type === 'image/svg+xml') {\n merged._import_uri = this.rootUri\n } else {\n var canonicalUri = merged._canonical_uri\n if (canonicalUri === undefined || canonicalUri == null) {\n if (uri !== this.rootUri) {\n merged._canonical_uri = this.resolved.get(uri)\n merged._import_uri = this.rootUri\n } else {\n merged._canonical_uri = this.rootUri\n }\n } else {\n merged._canonical_uri = this.resolved.get(merged._canonical_uri)\n if (canonicalUri !== this.rootUri) {\n merged._import_uri = this.rootUri\n }\n }\n }\n if (exist) {\n this.updated.push(title)\n } else {\n this.added.push(title)\n }\n processedTitles.push(title)\n }\n }\n }\n }\n\n IpfsImport.prototype.importTiddler = function (title, uri) {\n const key = this.resolved.get(uri)\n if (key === undefined) {\n return null\n }\n const { imported } = this.loaded.get(key)\n if (imported === undefined) {\n return null\n }\n const tiddler = imported.get(title)\n if (tiddler === undefined) {\n return null\n }\n var type = tiddler.type\n var info = $tw.config.contentTypeInfo[type]\n var importUri = tiddler._import_uri\n importUri =\n importUri == null || importUri === undefined || importUri.trim() === ''\n ? null\n : importUri.trim()\n var canonicalUri = tiddler._canonical_uri\n canonicalUri =\n canonicalUri == null ||\n canonicalUri === undefined ||\n canonicalUri.trim() === ''\n ? null\n : canonicalUri.trim()\n var exist = null\n if (importUri !== null) {\n exist = this.importTiddler(title, importUri)\n }\n if (\n exist == null &&\n canonicalUri !== null &&\n info.encoding !== 'base64' &&\n type !== 'image/svg+xml'\n ) {\n this.importTiddler(title, canonicalUri)\n }\n return this.mergeTiddler(title, uri)\n }\n\n IpfsImport.prototype.mergeTiddler = function (title, uri) {\n var merged = null\n var currentTiddler = null\n const key = this.resolved.get(uri)\n if (key === undefined) {\n return null\n }\n const { imported } = this.loaded.get(key)\n if (imported === undefined) {\n return null\n }\n const tiddler = imported.get(title)\n if (tiddler === undefined) {\n return null\n }\n // Retrieve target host Tiddler\n if (this.host !== null && this.host.fields.title === title) {\n currentTiddler = this.host\n } else {\n currentTiddler = $tw.wiki.getTiddler(title)\n }\n // Retrieve or prepare merged content\n merged = this.merged.get(title)\n if (merged === undefined) {\n merged = {}\n this.merged.set(title, merged)\n }\n // Tags\n var tags = tiddler.tags !== undefined ? tiddler.tags : ''\n // Fields\n var hasModified = false\n for (var field in tiddler) {\n // Discard\n if (field === 'tags') {\n continue\n }\n if (field === 'modified') {\n hasModified = true\n }\n // Unknown from leaf to top, we keep the top modified field\n if (\n merged[field] === undefined ||\n merged[field] == null ||\n field === '_canonical_uri' ||\n field === '_import_uri' ||\n field === 'modified'\n ) {\n merged[field] = tiddler[field]\n }\n }\n if (hasModified === false) {\n merged.modified = new Date()\n }\n // Merge current Tiddler Tags\n if (currentTiddler !== undefined && currentTiddler !== null) {\n const currentTags = (currentTiddler.fields.tags || []).slice(0)\n for (var i = 0; i < currentTags.length; i++) {\n const currentTag = currentTags[i]\n if (tags.includes(currentTag) === false) {\n tags = `${tags} [[${currentTag}]]`\n }\n }\n }\n // Merge merged Tags\n if (merged.tags !== undefined && merged.tags !== null) {\n const mergedTags = $tw.utils.parseStringArray(merged.tags, false)\n for (var i = 0; i < mergedTags.length; i++) {\n const mergedTag = mergedTags[i]\n if (tags.includes(mergedTag) === false) {\n tags = `${tags} [[${mergedTag}]]`\n }\n }\n }\n // IPFS tag\n if (this.isIpfs(key) && tags.includes('$:/isIpfs') === false) {\n tags = `${tags} $:/isIpfs`\n }\n // Imported tag\n if (tags.includes('$:/isImported') === false) {\n tags = `${tags} $:/isImported`\n }\n // Processed tags\n merged.tags = tags\n if (currentTiddler !== undefined && currentTiddler !== null) {\n return true\n }\n return false\n }\n\n exports.IpfsImport = IpfsImport\n})()\n",
"type": "application/javascript",
"tags": "$:/ipfs/core",
"module-type": "library"
},
"$:/plugins/ipfs/macro/ipfs-info-saver.js": {
"title": "$:/plugins/ipfs/macro/ipfs-info-saver.js",
"text": "/*\\\ntitle: $:/plugins/ipfs/macro/ipfs-info-saver.js\ntype: application/javascript\ntags: $:/ipfs/core\nmodule-type: macro\n\nIPFS info saver\n\n\\*/\n\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n /*\n * Information about this macro\n */\n exports.name = 'ipfs-info-saver'\n\n exports.params = [{ name: 'tiddler' }]\n\n /*\n * Run the macro\n */\n exports.run = function (tiddler) {\n return $tw.saverHandler.getSaver(tiddler).module.info.name\n }\n})()\n",
"type": "application/javascript",
"tags": "$:/ipfs/core",
"module-type": "macro"
},
"$:/plugins/ipfs/modules/widgets/ipfs-link.js": {
"title": "$:/plugins/ipfs/modules/widgets/ipfs-link.js",
"text": "/*\\\ntitle: $:/plugins/ipfs/modules/widgets/ipfs-link.js\ntype: application/javascript\nmodule-type: widget\n\nIPFS link widget\n\n\\*/\n\n/**\n * TiddlyWiki created by Jeremy Ruston, (jeremy [at] jermolene [dot] com)\n *\n * Copyright (c) 2004-2007, Jeremy Ruston\n * Copyright (c) 2007-2018, UnaMesa Association\n * Copyright (c) 2019-2020, Blue Light\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * * Neither the name of the copyright holder nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n var Widget = require('$:/core/modules/widgets/widget.js').widget\n\n const name = 'ipfs-link'\n\n var IpfsLinkWidget = function (parseTreeNode, options) {\n this.initialise(parseTreeNode, options)\n }\n\n /*\n * Inherit from the base widget class\n */\n IpfsLinkWidget.prototype = new Widget()\n\n IpfsLinkWidget.prototype.getLogger = function () {\n return window.log.getLogger(name)\n }\n\n /*\n * Render this widget into the DOM\n */\n IpfsLinkWidget.prototype.render = function (parent, nextSibling) {\n var self = this\n // Save the parent dom node\n this.parentDomNode = parent\n // Compute our attributes\n this.computeAttributes()\n // Execute our logic\n this.execute()\n // Tiddler link\n var value = this.url !== undefined ? this.url : this.value\n var tiddler = $tw.wiki.getTiddler(value)\n if (tiddler !== undefined && tiddler !== null) {\n this.renderTiddlerLink(parent, nextSibling)\n } else {\n this.renderText(parent, nextSibling)\n $tw.ipfs\n .resolveUrl(false, false, value)\n .then(data => {\n var { normalizedUrl } = data\n if (normalizedUrl !== null) {\n self.removeChildDomNodes()\n self.renderExternalLink(parent, nextSibling, normalizedUrl)\n }\n })\n .catch(error => {\n self.getLogger().error(error)\n })\n }\n }\n\n /*\n * Render this widget into the DOM\n */\n IpfsLinkWidget.prototype.renderExternalLink = function (\n parent,\n nextSibling,\n url\n ) {\n // Sanitise the specified tag\n var tag = this.linkTag\n if ($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n tag = 'a'\n }\n // Create our element\n var namespace = this.getVariable('namespace', {\n defaultValue: 'http://www.w3.org/1999/xhtml'\n })\n var domNode = this.document.createElementNS(namespace, tag)\n domNode.setAttribute('href', url)\n // Add a click event handler\n $tw.utils.addEventListeners(domNode, [\n {\n name: 'click',\n handlerObject: this,\n handlerMethod: 'handleExternalClickEvent'\n }\n ])\n // Assign classes\n var classes = []\n if (this.classes) {\n classes.push(this.classes)\n }\n if (classes.length > 0) {\n domNode.setAttribute('class', classes.join(' '))\n }\n if (this['aria-label']) {\n domNode.setAttribute('aria-label', this['aria-label'])\n }\n // Insert the URL into the DOM and render any children\n parent.insertBefore(domNode, nextSibling)\n // Process\n this.renderChildren(domNode, null)\n this.domNodes.push(domNode)\n }\n\n /*\n * Render this widget into the DOM\n */\n IpfsLinkWidget.prototype.renderTiddlerLink = function (parent, nextSibling) {\n // self\n var self = this\n // Sanitise the specified tag\n var tag = this.linkTag\n if ($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {\n tag = 'a'\n }\n var value = this.url !== undefined ? this.url : this.value\n var isMissing = !this.wiki.tiddlerExists(value)\n var isShadow = this.wiki.isShadowTiddler(value)\n // Create our element\n var namespace = this.getVariable('namespace', {\n defaultValue: 'http://www.w3.org/1999/xhtml'\n })\n var domNode = this.document.createElementNS(namespace, tag)\n // Assign classes\n var classes = []\n if (this.overrideClasses === undefined) {\n classes.push('tc-tiddlylink')\n if (isShadow) {\n classes.push('tc-tiddlylink-shadow')\n }\n if (isMissing && !isShadow) {\n classes.push('tc-tiddlylink-missing')\n } else {\n if (!isMissing) {\n classes.push('tc-tiddlylink-resolves')\n }\n }\n if (this.linkClasses) {\n classes.push(this.linkClasses)\n }\n } else if (this.overrideClasses !== '') {\n classes.push(this.overrideClasses)\n }\n if (classes.length > 0) {\n domNode.setAttribute('class', classes.join(' '))\n }\n // Set an href\n var wikilinkTransformFilter = this.getVariable('tv-filter-export-link')\n var wikiLinkText\n if (wikilinkTransformFilter) {\n // Use the filter to construct the href\n wikiLinkText = this.wiki.filterTiddlers(\n wikilinkTransformFilter,\n this,\n function (iterator) {\n iterator(self.wiki.getTiddler(value), value)\n }\n )[0]\n } else {\n // Expand the tv-wikilink-template variable to construct the href\n var wikiLinkTemplateMacro = this.getVariable('tv-wikilink-template')\n var wikiLinkTemplate = wikiLinkTemplateMacro\n ? wikiLinkTemplateMacro.trim()\n : '#$uri_encoded$'\n wikiLinkText = $tw.utils.replaceString(\n wikiLinkTemplate,\n '$uri_encoded$',\n encodeURIComponent(value)\n )\n wikiLinkText = $tw.utils.replaceString(\n wikiLinkText,\n '$uri_doubleencoded$',\n encodeURIComponent(encodeURIComponent(value))\n )\n }\n // Override with the value of tv-get-export-link if defined\n wikiLinkText = this.getVariable('tv-get-export-link', {\n params: [{ name: 'to', value: value }],\n defaultValue: wikiLinkText\n })\n if (tag === 'a') {\n var namespaceHref =\n namespace === 'http://www.w3.org/2000/svg'\n ? 'http://www.w3.org/1999/xlink'\n : undefined\n domNode.setAttributeNS(namespaceHref, 'href', wikiLinkText)\n }\n // Set the tabindex\n if (this.tabIndex) {\n domNode.setAttribute('tabindex', this.tabIndex)\n }\n // Set the tooltip\n // HACK: Performance issues with re-parsing the tooltip prevent us defaulting the tooltip to \"<$transclude field='tooltip'><$transclude field='title'/></$transclude>\"\n var tooltipWikiText =\n this.tooltip || this.getVariable('tv-wikilink-tooltip')\n if (tooltipWikiText) {\n var tooltipText = this.wiki.renderText(\n 'text/plain',\n 'text/vnd.tiddlywiki',\n tooltipWikiText,\n {\n parseAsInline: true,\n variables: {\n currentTiddler: value\n },\n parentWidget: this\n }\n )\n domNode.setAttribute('title', tooltipText)\n }\n if (this['aria-label']) {\n domNode.setAttribute('aria-label', this['aria-label'])\n }\n // Add a click event handler\n $tw.utils.addEventListeners(domNode, [\n {\n name: 'click',\n handlerObject: this,\n handlerMethod: 'handleTiddlerClickEvent'\n }\n ])\n // Make the link draggable if required\n if (this.draggable === 'yes') {\n $tw.utils.makeDraggable({\n domNode: domNode,\n dragTiddlerFn: function () {\n return value\n },\n widget: this\n })\n }\n // Insert the link into the DOM and render any children\n parent.insertBefore(domNode, nextSibling)\n // Process\n this.renderChildren(domNode, null)\n this.domNodes.push(domNode)\n }\n\n /*\n * Render this widget into the DOM\n */\n IpfsLinkWidget.prototype.renderText = function (parent, nextSibling) {\n const domNode = this.document.createElement('span')\n // Insert the text into the DOM and render any children\n parent.insertBefore(domNode, nextSibling)\n // Process\n this.renderChildren(domNode, null)\n this.domNodes.push(domNode)\n }\n\n IpfsLinkWidget.prototype.handleExternalClickEvent = function (event) {\n const self = this\n const value = this.url !== undefined ? this.url : this.value\n $tw.ipfs\n .resolveUrl(true, true, value)\n .then(data => {\n const { resolvedUrl } = data\n if (resolvedUrl !== null) {\n window.open(resolvedUrl.toString(), '_blank', 'noopener,noreferrer')\n }\n })\n .catch(error => {\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n event.preventDefault()\n event.stopPropagation()\n return false\n }\n\n IpfsLinkWidget.prototype.handleTiddlerClickEvent = function (event) {\n // Send the click on its way as a navigate event\n const bounds = this.domNodes[0].getBoundingClientRect()\n const value = this.url !== undefined ? this.url : this.value\n this.dispatchEvent({\n type: 'tm-navigate',\n navigateTo: value,\n navigateFromTitle: this.getVariable('storyTiddler'),\n navigateFromNode: this,\n navigateFromClientRect: {\n top: bounds.top,\n left: bounds.left,\n width: bounds.width,\n right: bounds.right,\n bottom: bounds.bottom,\n height: bounds.height\n },\n navigateSuppressNavigation:\n event.metaKey || event.ctrlKey || event.button === 1,\n metaKey: event.metaKey,\n ctrlKey: event.ctrlKey,\n altKey: event.altKey,\n shiftKey: event.shiftKey\n })\n if (this.domNodes[0].hasAttribute('href')) {\n event.preventDefault()\n }\n event.stopPropagation()\n return false\n }\n\n /*\n * Compute the internal state of the widget\n */\n IpfsLinkWidget.prototype.execute = function () {\n // Pick up our attributes\n this.url = undefined\n this.tiddler =\n this.getAttribute('tiddler') !== undefined\n ? this.getAttribute('tiddler')\n : this.getVariable('currentTiddler')\n const tiddler = $tw.wiki.getTiddler(this.tiddler)\n this.field = this.getAttribute('field')\n this.value =\n this.getAttribute('value') !== undefined\n ? this.getAttribute('value')\n : tiddler.getFieldString(this.field) !== ''\n ? tiddler.getFieldString(this.field)\n : this.tiddler\n if (\n this.getAttribute('value') !== undefined &&\n tiddler.getFieldString(this.getAttribute('value')) !== ''\n ) {\n this.url = tiddler.getFieldString(this.getAttribute('value'))\n }\n this.tooltip = this.getAttribute('tooltip')\n this['aria-label'] = this.getAttribute('aria-label')\n this.linkClasses = this.getAttribute('class') || 'tc-ipfs-link-external'\n this.overrideClasses = this.getAttribute('overrideClass')\n this.tabIndex = this.getAttribute('tabindex')\n this.draggable = this.getAttribute('draggable', 'yes')\n this.linkTag = this.getAttribute('tag', 'a')\n var templateTree\n if (this.parseTreeNode.children && this.parseTreeNode.children.length > 0) {\n templateTree = this.parseTreeNode.children\n } else {\n templateTree = [{ type: 'text', text: this.value }]\n }\n this.makeChildWidgets(templateTree)\n }\n\n /*\n * Selectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering\n */\n IpfsLinkWidget.prototype.refresh = function (changedTiddlers) {\n const changedAttributes = this.computeAttributes()\n const tiddler = $tw.wiki.getTiddler(this.tiddler)\n var value = null\n if (this.field !== undefined && this.field !== null) {\n value = tiddler.getFieldString(this.field)\n }\n if (\n changedAttributes.field ||\n changedTiddlers[this.field] ||\n changedAttributes.value ||\n changedTiddlers[this.value] ||\n changedAttributes.tooltip ||\n changedAttributes['aria-label'] ||\n changedTiddlers['$:/ipfs/saver/gateway'] ||\n changedTiddlers['$:/ipfs/saver/policy'] ||\n (value !== null && value !== this.value)\n ) {\n this.refreshSelf()\n return true\n }\n return this.refreshChildren(changedTiddlers)\n }\n\n exports.ipfslink = IpfsLinkWidget\n})()\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/plugins/ipfs/macro/ipfs-plugin-version.js": {
"title": "$:/plugins/ipfs/macro/ipfs-plugin-version.js",
"text": "/*\\\ntitle: $:/plugins/ipfs/macro/ipfs-plugin-version.js\ntype: application/javascript\ntags: $:/ipfs/core\nmodule-type: macro\n\nIPFS plugin version\n\n\\*/\n\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n /*\n * Information about this macro\n */\n exports.name = 'ipfs-plugin-version'\n\n exports.params = []\n\n /*\n * Run the macro\n */\n exports.run = function () {\n return $tw.wiki.getTiddler('$:/plugins/ipfs').fields.version\n }\n})()\n",
"type": "application/javascript",
"tags": "$:/ipfs/core",
"module-type": "macro"
},
"$:/plugins/ipfs/ipfs-saver.js": {
"title": "$:/plugins/ipfs/ipfs-saver.js",
"text": "/*\\\ntitle: $:/plugins/ipfs/ipfs-saver.js\ntype: application/javascript\ntags: $:/ipfs/core\nmodule-type: saver\n\nIPFS Saver\n\n\\*/\n\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n const log = require('$:/plugins/ipfs/loglevel/loglevel.js')\n\n const EnsAction = require('$:/plugins/ipfs/ens-action.js').EnsAction\n const IpfsAction = require('$:/plugins/ipfs/ipfs-action.js').IpfsAction\n const IpfsController = require('$:/plugins/ipfs/ipfs-controller.js')\n .IpfsController\n const IpfsTiddler = require('$:/plugins/ipfs/ipfs-tiddler.js').IpfsTiddler\n\n const ensKeyword = 'ens'\n const ipfsKeyword = 'ipfs'\n const ipnsKeyword = 'ipns'\n\n const name = 'ipfs-saver'\n\n /*\n * Select the appropriate saver module and set it up\n */\n var IpfsSaver = function (wiki) {\n this.wiki = wiki\n this.apiUrl = null\n this.ipfsProvider = null\n // Loglevel\n if (window.log === undefined || window.log == null) {\n // Init\n window.log = log.noConflict()\n if ($tw.utils.getIpfsVerbose()) {\n log.setLevel('info', false)\n } else {\n log.setLevel('warn', false)\n }\n }\n // Controller\n $tw.ipfs = new IpfsController()\n // Listener\n this.ensAction = new EnsAction()\n this.ipfsAction = new IpfsAction()\n this.ipfsTiddler = new IpfsTiddler()\n // Init\n this.ensAction.init()\n this.ipfsAction.init()\n this.ipfsTiddler.init()\n // Logger\n const logger = window.log.getLogger(name)\n // Log\n logger.info('ipfs-saver is starting up...')\n // Log url policy\n const base = $tw.ipfs.getIpfsBaseUrl()\n if ($tw.utils.getIpfsUrlPolicy() === 'origin') {\n logger.info(`Origin base URL: ${base}`)\n } else {\n logger.info(`Gateway base URL: ${base}`)\n }\n }\n\n IpfsSaver.prototype.getLogger = function () {\n return window.log.getLogger(name)\n }\n\n IpfsSaver.prototype.save = async function (text, method, callback, options) {\n if ($tw.saverHandler.isDirty() === false) {\n return false\n }\n try {\n var cid = null\n var ipnsCid = null\n var ipnsKey = null\n var ipnsName = null\n var ensDomain = null\n var ensCid = null\n var options = options || {}\n const wiki = $tw.ipfs.getDocumentUrl()\n const base = $tw.ipfs.getIpfsBaseUrl()\n const nextWiki = $tw.ipfs.getUrl(wiki)\n nextWiki.protocol = base.protocol\n nextWiki.host = base.host\n nextWiki.port = base.port\n try {\n var { cid, ipnsKey } = await $tw.ipfs.resolveUrl(false, true, wiki)\n if (cid != null) {\n await $tw.ipfs.requestToUnpin(cid)\n }\n } catch (error) {\n this.getLogger().error(error)\n callback(error.message)\n return true\n }\n // IPNS\n if (ipnsKey !== null || $tw.utils.getIpfsProtocol() === ipnsKeyword) {\n // Resolve current IPNS\n if (ipnsKey !== null) {\n try {\n var { cid: ipnsCid, ipnsName } = await $tw.ipfs.resolveUrl(\n true,\n false,\n wiki\n )\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n }\n } else {\n // Default IPNS\n ipnsKey = $tw.utils.getIpfsIpnsKey()\n ipnsKey =\n ipnsKey === undefined || ipnsKey == null || ipnsKey.trim() === ''\n ? null\n : ipnsKey.trim()\n ipnsName = $tw.utils.getIpfsIpnsName()\n ipnsName =\n ipnsName === undefined || ipnsName == null || ipnsName.trim() === ''\n ? null\n : ipnsName.trim()\n if (ipnsKey == null && ipnsName == null) {\n callback(null, 'Unknown default IPNS identifiers...')\n return true\n }\n this.getLogger().info('Processing default IPNS identifiers...')\n var identifier = ipnsKey\n if (identifier == null) {\n identifier = ipnsName\n }\n try {\n var { cid: ipnsCid, ipnsKey, ipnsName } = await $tw.ipfs.resolveUrl(\n true,\n false,\n `/${ipnsKeyword}/${identifier}`\n )\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n }\n }\n if (ipnsCid != null) {\n await $tw.ipfs.requestToUnpin(ipnsCid)\n }\n }\n // ENS\n if ($tw.utils.getIpfsProtocol() === ensKeyword) {\n ensDomain = $tw.utils.getIpfsEnsDomain()\n if (ensDomain == null) {\n callback(null, 'Undefined ENS domain...')\n return true\n }\n var { cid: ensCid } = await $tw.ipfs.resolveUrl(false, true, ensDomain)\n if (ensCid != null) {\n await $tw.ipfs.requestToUnpin(ensCid)\n }\n }\n // Upload current document\n this.getLogger().info(`Uploading wiki: ${text.length} bytes`)\n // Add\n const { added } = await $tw.ipfs.addToIpfs(text)\n // Default next\n nextWiki.pathname = `/${ipfsKeyword}/${added}`\n // Pin\n try {\n await $tw.ipfs.pinToIpfs(added)\n } catch (error) {\n this.getLogger().warn(error)\n $tw.utils.alert(name, error.message)\n }\n // Publish to IPNS\n if (ipnsKey !== null && ipnsName !== null) {\n $tw.utils.alert(name, `Publishing IPNS name: ${ipnsName}`)\n try {\n await $tw.ipfs.publishIpnsName(added, ipnsKey, ipnsName)\n nextWiki.pathname = `/${ipnsKeyword}/${ipnsKey}`\n $tw.utils.alert(name, `Successfully Published IPNS name: ${ipnsName}`)\n } catch (error) {\n this.getLogger().warn(error)\n $tw.utils.alert(name, error.message)\n $tw.ipfs.requestToPin(ipnsCid)\n }\n }\n // Publish to ENS\n if ($tw.utils.getIpfsProtocol() === ensKeyword) {\n try {\n $tw.utils.alert(name, `Publishing to ENS: ${ensDomain}`)\n await $tw.ipfs.setEns(ensDomain, added)\n // const chainId = $tw.ipfs.getChainId()\n // if (chainId !== null && chainId === 1) {\n // nextWiki.protocol = 'https:'\n // nextWiki.host = ensDomain\n // } else {\n const { resolvedUrl } = await $tw.ipfs.resolveEns(ensDomain)\n nextWiki.protocol = resolvedUrl.protocol\n nextWiki.host = resolvedUrl.host\n nextWiki.pathname = resolvedUrl.pathname\n // }\n $tw.utils.alert(name, `Successfully published to ENS: ${ensDomain}`)\n } catch (error) {\n this.getLogger().warn(error)\n $tw.utils.alert(name, error.message)\n $tw.ipfs.requestToPin(ensCid)\n }\n }\n $tw.ipfs.pin = []\n // Unpin\n if ($tw.utils.getIpfsUnpin()) {\n for (var i in $tw.ipfs.unpin) {\n try {\n const unpin = $tw.ipfs.unpin[i]\n await $tw.ipfs.unpinFromIpfs(unpin)\n } catch (error) {\n this.getLogger().warn(error)\n $tw.utils.alert(name, error.message)\n }\n }\n }\n $tw.ipfs.unpin = []\n // Pin\n for (var i in $tw.ipfs.pin) {\n try {\n const pin = $tw.ipfs.pin[i]\n await $tw.ipfs.pinToIpfs(pin)\n } catch (error) {\n this.getLogger().warn(error)\n $tw.utils.alert(name, error.message)\n }\n }\n callback(null)\n if (nextWiki.host !== wiki.host || nextWiki.pathname !== wiki.pathname) {\n window.location.assign(nextWiki.toString())\n }\n } catch (error) {\n this.getLogger().error(error)\n callback(error.message)\n return true\n }\n callback(null)\n return true\n }\n\n /*\n * Information about this saver\n */\n IpfsSaver.prototype.info = {\n name: 'Ipfs',\n priority: 3100,\n capabilities: ['save']\n }\n\n /*\n * Static method that returns true if this saver is capable of working\n */\n exports.canSave = function (wiki) {\n return true\n }\n\n /*\n * Create an instance of this saver\n */\n exports.create = function (wiki) {\n return new IpfsSaver(wiki)\n }\n})()\n",
"type": "application/javascript",
"tags": "$:/ipfs/core",
"module-type": "saver"
},
"$:/plugins/ipfs/operator/ipfs-savers.js": {
"title": "$:/plugins/ipfs/operator/ipfs-savers.js",
"text": "/*\\\ntitle: $:/plugins/ipfs/operator/ipfs-savers.js\ntype: application/javascript\nmodule-type: filteroperator\n\nThis Filter operator return savers title\n\n\\*/\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n /*\n Export our filter function\n */\n exports.savers = function (source, operator, options) {\n var results = []\n for (var i in $tw.saverHandler.savers) {\n results.push($tw.saverHandler.savers[i].title)\n }\n return results\n }\n})()\n",
"type": "application/javascript",
"module-type": "filteroperator"
},
"$:/plugins/ipfs/ipfs-startup.js": {
"title": "$:/plugins/ipfs/ipfs-startup.js",
"text": "/*\\\ntitle: $:/plugins/ipfs/ipfs-startup.js\ntype: application/javascript\ntags: $:/ipfs/core\nmodule-type: startup\n\nStartup initialisation\n\n\\*/\n\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n exports.platforms = ['browser']\n exports.after = ['startup']\n exports.synchronous = true\n\n exports.startup = function () {\n // Logger name\n const name = 'ipfs-startup'\n // Missing Media Types\n $tw.utils.registerFileType('application/gzip', 'base64', '.gz')\n $tw.utils.registerFileType('audio/mpeg', 'base64', '.mp2')\n $tw.utils.registerFileType('image/jpg', 'base64', ['.jpg', '.jpeg'], {\n flags: ['image']\n })\n $tw.utils.registerFileType('video/quicktime', 'base64', ['.mov', '.qt'])\n // Log\n const logger = window.log.getLogger(name)\n logger.info('ipfs-startup is starting up...')\n }\n})()\n",
"type": "application/javascript",
"tags": "$:/ipfs/core",
"module-type": "startup"
},
"$:/plugins/ipfs/ipfs-tiddler.js": {
"title": "$:/plugins/ipfs/ipfs-tiddler.js",
"text": "/*\\\ntitle: $:/plugins/ipfs/ipfs-tiddler.js\ntype: application/javascript\ntags: $:/ipfs/core\nmodule-type: library\n\nIPFS Tiddler\n\n\\*/\n\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n const IpfsImport = require('$:/plugins/ipfs/ipfs-import.js').IpfsImport\n\n const name = 'ipfs-tiddler'\n\n /*\n * https://tiddlywiki.com/#TiddlerFields\n * $:/core/modules/server/routes/get-tiddler.js\n * TODO: expose it as Tiddler ??\n */\n const reservedFields = [\n 'bag',\n 'caption',\n 'class',\n 'color',\n 'description',\n 'created',\n 'creator',\n 'fields',\n 'footer',\n 'hide-body',\n 'icon',\n '_is_skinny',\n 'library',\n 'list',\n 'list-after',\n 'list-before',\n 'modified',\n 'modifier',\n 'name',\n 'plugin-priority',\n 'plugin-type',\n 'permissions',\n 'recipe',\n 'revision',\n // \"source\",\n 'subtitle',\n 'tags',\n 'text',\n // \"url\",\n 'throttle.refresh',\n 'toc-link',\n 'title',\n 'type'\n ]\n\n var IpfsTiddler = function () {\n this.once = false\n }\n\n IpfsTiddler.prototype.getLogger = function () {\n return window.log.getLogger(name)\n }\n\n IpfsTiddler.prototype.init = function () {\n // Init once\n if (this.once) {\n return\n }\n const self = this\n // Wiki\n $tw.wiki.addEventListener('change', function (changes) {\n return self.handleChangeEvent(changes)\n })\n // Hook\n $tw.hooks.addHook('th-deleting-tiddler', async function (tiddler) {\n return await self.handleDeleteTiddler(tiddler)\n })\n $tw.hooks.addHook('th-importing-tiddler', function (tiddler) {\n return self.handleFileImport(tiddler)\n })\n $tw.hooks.addHook('th-saving-tiddler', async function (tiddler) {\n return await self.handleSaveTiddler(tiddler)\n })\n // Widget\n $tw.rootWidget.addEventListener('tm-ipfs-pin', function (event) {\n return self.handleIpfsPin(event)\n })\n $tw.rootWidget.addEventListener('tm-refresh-tiddler', function (event) {\n return self.handleRefreshTiddler(event)\n })\n $tw.rootWidget.addEventListener('tm-ipfs-unpin', function (event) {\n return self.handleIpfsUnpin(event)\n })\n // Init once\n this.once = true\n }\n\n IpfsTiddler.prototype.handleChangeEvent = function (changes) {\n // Gateway preference\n const gateway = changes['$:/ipfs/saver/gateway']\n if (gateway !== undefined && gateway.modified) {\n const base = $tw.ipfs.getIpfsBaseUrl()\n if ($tw.utils.getIpfsUrlPolicy() === 'gateway') {\n this.getLogger().info(`Gateway Relative URL:\\n ${base}`)\n }\n }\n // Policy preference\n const policy = changes['$:/ipfs/saver/policy']\n if (policy !== undefined && policy.modified) {\n const base = $tw.ipfs.getIpfsBaseUrl()\n if ($tw.utils.getIpfsUrlPolicy() === 'origin') {\n this.getLogger().info(`Origin base URL: ${base}`)\n } else {\n this.getLogger().info(`Gateway base URL: ${base}`)\n }\n }\n // Unpin preference\n const unpin = changes['$:/ipfs/saver/unpin']\n if (unpin !== undefined && unpin.modified) {\n if ($tw.utils.getIpfsUnpin()) {\n this.getLogger().info('Unpin previous IPFS content...')\n } else {\n this.getLogger().info('Do not unpin previous IPFS content...')\n }\n }\n // Verbose preference\n const verbose = changes['$:/ipfs/saver/verbose']\n if (verbose !== undefined && verbose.modified) {\n if ($tw.utils.getIpfsVerbose()) {\n this.updateLoggers('info')\n } else {\n this.updateLoggers('warn')\n }\n }\n }\n\n IpfsTiddler.prototype.handleIpfsPin = function (event) {\n const title = event.tiddlerTitle\n const tiddler = $tw.wiki.getTiddler(title)\n if (event.param !== undefined && event.param !== null) {\n // Tiddler\n for (var field in tiddler.fields) {\n if (reservedFields.indexOf(field) !== -1) {\n continue\n }\n var value = tiddler.getFieldString(field)\n value =\n value === undefined || value == null || value.trim() === ''\n ? null\n : value.trim()\n if (value !== null) {\n this.ipfsPin(value, field)\n }\n }\n return true\n }\n // Wiki\n this.ipfsPin($tw.ipfs.getDocumentUrl().toString(), 'Wiki')\n return true\n }\n\n IpfsTiddler.prototype.ipfsPin = function (value, field) {\n const self = this\n $tw.ipfs\n .resolveUrl(true, true, value)\n .then(data => {\n const { cid, resolvedUrl } = data\n if (resolvedUrl !== null && cid !== null) {\n self.getLogger().info(`Pinning: \"${field}\"\\n ${resolvedUrl}`)\n $tw.ipfs\n .pinToIpfs(cid)\n .then(data => {\n if (data) {\n $tw.ipfs.removeFromPinUnpin(cid, resolvedUrl)\n $tw.utils.alert(\n name,\n `Successfully Pinned : <a rel=\"noopener noreferrer\" target=\"_blank\" href=\"${resolvedUrl}\">${field}</a>`\n )\n }\n })\n .catch(error => {\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n }\n })\n .catch(error => {\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n }\n\n IpfsTiddler.prototype.handleIpfsUnpin = async function (event) {\n const title = event.tiddlerTitle\n const tiddler = $tw.wiki.getTiddler(title)\n const { type, info } = $tw.utils.getContentType(title, tiddler.fields.type)\n if (event.param !== undefined && event.param !== null) {\n // Tiddler\n for (var field in tiddler.fields) {\n if (reservedFields.indexOf(field) !== -1) {\n continue\n }\n var value = tiddler.getFieldString(field)\n value =\n value === undefined || value == null || value.trim() === ''\n ? null\n : value.trim()\n if (value !== null) {\n if (info.encoding !== 'base64' && type !== 'image/svg+xml') {\n if (field === '_canonical_uri' || field === '_import_uri') {\n continue\n }\n }\n this.ipfsUnpin(value, field)\n }\n }\n return true\n }\n // Wiki\n this.ipfsUnpin($tw.ipfs.getDocumentUrl().toString(), 'Wiki')\n return true\n }\n\n IpfsTiddler.prototype.ipfsUnpin = function (value, field) {\n value =\n value === undefined || value == null || value.trim() === ''\n ? null\n : value.trim()\n if (value == null) {\n return\n }\n field =\n field === undefined || field == null || field.trim() === ''\n ? null\n : field.trim()\n if (field == null) {\n return\n }\n const self = this\n $tw.ipfs\n .resolveUrl(true, true, value)\n .then(data => {\n const { cid, resolvedUrl } = data\n if (resolvedUrl !== null && cid !== null) {\n self.getLogger().info(`Unpinning: \"${field}\\n ${resolvedUrl}`)\n if ($tw.utils.getIpfsUnpin()) {\n $tw.ipfs\n .unpinFromIpfs(cid)\n .then(data => {\n if (data !== undefined && data !== null) {\n $tw.ipfs.removeFromPinUnpin(cid, resolvedUrl)\n $tw.utils.alert(\n name,\n `Successfully Unpinned : <a rel=\"noopener noreferrer\" target=\"_blank\" href=\"${resolvedUrl}\">${field}</a>`\n )\n }\n })\n .catch(error => {\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n }\n }\n })\n .catch(error => {\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n }\n\n IpfsTiddler.prototype.updateLoggers = function (level) {\n window.log.setLevel(level, false)\n const loggers = window.log.getLoggers()\n for (var property in loggers) {\n if (Object.prototype.hasOwnProperty.call(loggers, property)) {\n const logger = window.log.getLogger(property)\n logger.setLevel(level, false)\n }\n }\n }\n\n IpfsTiddler.prototype.handleDeleteTiddler = async function (tiddler) {\n try {\n const { type, info } = $tw.utils.getContentType(\n tiddler.fields.title,\n tiddler.fields.type\n )\n // Process\n var field = null\n if (info.encoding === 'base64' || type === 'image/svg+xml') {\n field = '_canonical_uri'\n } else {\n field = '_export_uri'\n }\n // Value\n var url = null\n const value = tiddler.getFieldString(field)\n if (value !== undefined && value !== null && value !== '') {\n // URL or not\n try {\n url = $tw.ipfs.normalizeUrl(value)\n } catch (error) {\n // Ignore\n }\n // Process\n if (url !== undefined && url !== null) {\n const { cid } = $tw.ipfs.decodeCid(url.pathname)\n // Request to unpin\n if ($tw.utils.getIpfsUnpin() && cid !== null) {\n $tw.ipfs.requestToUnpin(cid)\n }\n }\n }\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n }\n return tiddler\n }\n\n IpfsTiddler.prototype.handleFileImport = function (tiddler) {\n // Update tiddler\n const addition = $tw.wiki.getModificationFields()\n addition.title = tiddler.fields.title\n addition.tags = (tiddler.fields.tags || []).slice(0)\n // Add isAttachment tag\n if (addition.tags.indexOf('$:/isAttachment') === -1) {\n $tw.utils.pushTop(addition.tags, '$:/isAttachment')\n }\n // Add isEmbedded tag\n if (addition.tags.indexOf('$:/isEmbedded') === -1) {\n $tw.utils.pushTop(addition.tags, '$:/isEmbedded')\n }\n return new $tw.Tiddler(tiddler, addition)\n }\n\n IpfsTiddler.prototype.handleRefreshTiddler = function (event) {\n const self = this\n const title = event.tiddlerTitle\n const tiddler = $tw.wiki.getTiddler(title)\n const { type, info } = $tw.utils.getContentType(title, tiddler.fields.type)\n var canonicalUri = tiddler.getFieldString('_canonical_uri')\n canonicalUri =\n canonicalUri === undefined ||\n canonicalUri == null ||\n canonicalUri.trim() === ''\n ? null\n : canonicalUri.trim()\n var importUri = tiddler.getFieldString('_import_uri')\n importUri =\n importUri === undefined || importUri == null || importUri.trim() === ''\n ? null\n : importUri.trim()\n // Reload Attachment\n if (\n (info.encoding === 'base64' || type === 'image/svg+xml') &&\n canonicalUri !== null &&\n importUri == null\n ) {\n const updatedTiddler = $tw.utils.updateTiddler({\n tiddler: tiddler,\n fields: [{ key: 'text', value: '' }]\n })\n $tw.wiki.addTiddler(updatedTiddler)\n return true\n }\n // Async Import\n if (canonicalUri !== null || importUri !== null) {\n var ipfsImport = new IpfsImport()\n ipfsImport.import(canonicalUri, importUri, tiddler).catch(error => {\n self.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n })\n } else {\n $tw.wiki.clearCache(title)\n const changedTiddler = $tw.utils.getChangedTiddler(title)\n $tw.rootWidget.refresh(changedTiddler)\n }\n return true\n }\n\n IpfsTiddler.prototype.handleSaveTiddler = async function (tiddler) {\n // Previous tiddler\n const oldTiddler = $tw.wiki.getTiddler(tiddler.fields.title)\n const { type, info } = $tw.utils.getContentType(\n tiddler.fields.title,\n tiddler.fields.type\n )\n // Prepare\n var updatedTiddler = new $tw.Tiddler(tiddler)\n // Process deleted fields\n if (oldTiddler !== undefined && oldTiddler !== null) {\n for (var field in oldTiddler.fields) {\n // Not a reserved keyword\n if (reservedFields.indexOf(field) !== -1) {\n continue\n }\n // Updated\n const discard = tiddler.fields[field]\n if (\n discard !== undefined &&\n discard !== null &&\n tiddler.getFieldString(field) !== undefined\n ) {\n continue\n }\n // Process\n var oldCid = null\n var oldIpnsKey = null\n var oldNormalizedUrl = null\n var oldResolvedUrl = null\n var oldValue = oldTiddler.getFieldString(field)\n try {\n var {\n cid: oldCid,\n ipnsKey: oldIpnsKey,\n normalizedUrl: oldNormalizedUrl,\n resolvedUrl: oldResolvedUrl\n } = await $tw.ipfs.resolveUrl(false, true, oldValue)\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n return tiddler\n }\n oldResolvedUrl =\n oldResolvedUrl === undefined ||\n oldResolvedUrl == null ||\n oldResolvedUrl.toString().trim() === ''\n ? null\n : oldResolvedUrl.toString().trim()\n if (oldResolvedUrl !== null && field === '_canonical_uri') {\n var content = tiddler.getFieldString('text')\n // Attachment\n if (info.encoding === 'base64' || type === 'image/svg+xml') {\n // Embed\n try {\n if (info.encoding === 'base64') {\n content = await $tw.ipfs.loadToBase64(oldResolvedUrl)\n } else {\n content = await $tw.ipfs.loadToUtf8(oldResolvedUrl)\n }\n updatedTiddler = $tw.utils.updateTiddler({\n tiddler: updatedTiddler,\n addTags: ['$:/isAttachment', '$:/isEmbedded'],\n fields: [{ key: 'text', value: content.data }]\n })\n this.getLogger().info(\n `Embed attachment: ${content.data.length} bytes\\n ${oldResolvedUrl}`\n )\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n return tiddler\n }\n }\n }\n $tw.ipfs.requestToUnpin(oldCid, oldIpnsKey, oldNormalizedUrl)\n }\n }\n var canonicalUri = null\n var exportUri = null\n var importUri = null\n var canonicalCid = null\n var exportCid = null\n var importCid = null\n // Process new and updated fields\n for (var field in tiddler.fields) {\n // Not a reserved keyword\n if (reservedFields.indexOf(field) !== -1) {\n continue\n }\n // Process\n var cid = null\n var ipnsKey = null\n var normalizedUrl = null\n var resolvedUrl = null\n var value = tiddler.getFieldString(field)\n try {\n var {\n cid,\n ipnsKey,\n normalizedUrl,\n resolvedUrl\n } = await $tw.ipfs.resolveUrl(false, true, value)\n } catch (error) {\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n return tiddler\n }\n // Store\n resolvedUrl =\n resolvedUrl === undefined ||\n resolvedUrl == null ||\n resolvedUrl.toString().trim() === ''\n ? null\n : resolvedUrl.toString().trim()\n if (field === '_canonical_uri') {\n canonicalUri = resolvedUrl\n canonicalCid = cid\n }\n if (field === '_import_uri') {\n importUri = resolvedUrl\n importCid = cid\n }\n if (field === '_export_uri') {\n exportUri = resolvedUrl\n exportCid = cid\n }\n // Previous values if any\n var oldValue = null\n if (oldTiddler !== undefined && oldTiddler !== null) {\n oldValue = oldTiddler.getFieldString(field)\n }\n // Process new or updated\n if (value === oldValue) {\n continue\n }\n var oldCid = null\n var oldIpnsKey = null\n var oldNormalizedUrl = null\n try {\n var {\n cid: oldCid,\n ipnsKey: oldIpnsKey,\n normalizedUrl: oldNormalizedUrl\n } = await $tw.ipfs.resolveUrl(false, true, oldValue)\n } catch (error) {\n // We cannot resolve the previous value\n this.getLogger().error(error)\n $tw.utils.alert(name, error.message)\n }\n // Process _canonical_uri\n if (field === '_canonical_uri') {\n updatedTiddler = $tw.utils.updateTiddler({\n tiddler: updatedTiddler,\n fields: [{ key: 'text', value: '' }]\n })\n }\n $tw.ipfs.requestToPin(cid, ipnsKey, normalizedUrl)\n $tw.ipfs.requestToUnpin(oldCid, oldIpnsKey, oldNormalizedUrl)\n }\n // Tag management\n var addTags = []\n var removeTags = []\n if (canonicalUri == null && exportUri == null && importUri == null) {\n removeTags.push('$:/isExported', '$:/isImported', '$:/isIpfs')\n }\n if (canonicalCid == null && exportCid == null && importCid == null) {\n if (removeTags.indexOf('$:/isIpfs') === -1) {\n removeTags.push('$:/isIpfs')\n }\n } else {\n addTags.push('$:/isIpfs')\n }\n if (canonicalUri !== null) {\n // Attachment\n if (info.encoding === 'base64' || type === 'image/svg+xml') {\n if (addTags.indexOf('$:/isAttachment') === -1) {\n addTags.push('$:/isAttachment')\n }\n if (removeTags.indexOf('$:/isEmbedded') === -1) {\n removeTags.push('$:/isEmbedded')\n }\n if (importUri !== null) {\n if (addTags.indexOf('$:/isImported') === -1) {\n addTags.push('$:/isImported')\n }\n } else {\n if (removeTags.indexOf('$:/isImported') === -1) {\n removeTags.push('$:/isImported')\n }\n }\n // Others\n } else {\n if (removeTags.indexOf('$:/isAttachment') === -1) {\n removeTags.push('$:/isAttachment')\n }\n if (removeTags.indexOf('$:/isEmbedded') === -1) {\n removeTags.push('$:/isEmbedded')\n }\n if (addTags.indexOf('$:/isImported') === -1) {\n addTags.push('$:/isImported')\n }\n }\n } else {\n // Attachment\n if (info.encoding === 'base64' || type === 'image/svg+xml') {\n if (addTags.indexOf('$:/isAttachment') === -1) {\n addTags.push('$:/isAttachment')\n }\n if (addTags.indexOf('$:/isEmbedded') === -1) {\n addTags.push('$:/isEmbedded')\n }\n // Others\n } else {\n if (removeTags.indexOf('$:/isAttachment') === -1) {\n removeTags.push('$:/isAttachment')\n }\n if (removeTags.indexOf('$:/isEmbedded') === -1) {\n removeTags.push('$:/isEmbedded')\n }\n }\n if (importUri !== null) {\n if (addTags.indexOf('$:/isImported') === -1) {\n addTags.push('$:/isImported')\n }\n } else {\n if (removeTags.indexOf('$:/isImported') === -1) {\n removeTags.push('$:/isImported')\n }\n }\n }\n if (exportUri !== null) {\n if (addTags.indexOf('$:/isExported') === -1) {\n addTags.push('$:/isExported')\n }\n } else {\n if (removeTags.indexOf('$:/isExported') === -1) {\n removeTags.push('$:/isExported')\n }\n }\n if (addTags.length > 0 || removeTags.length > 0) {\n updatedTiddler = $tw.utils.updateTiddler({\n tiddler: updatedTiddler,\n addTags: addTags,\n removeTags: removeTags\n })\n }\n $tw.wiki.addTiddler(updatedTiddler)\n return updatedTiddler\n }\n\n exports.IpfsTiddler = IpfsTiddler\n})()\n",
"type": "application/javascript",
"tags": "$:/ipfs/core",
"module-type": "library"
},
"$:/plugins/ipfs/ipfs-utils.js": {
"title": "$:/plugins/ipfs/ipfs-utils.js",
"text": "/*\\\ntitle: $:/plugins/ipfs/ipfs-utils.js\ntype: application/javascript\ntags: $:/ipfs/core\nmodule-type: utils\n\nIPFS utils\n\n\\*/\n\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n /**\n * $:/core/modules/utils/logger.js\n *\n * TiddlyWiki created by Jeremy Ruston, (jeremy [at] jermolene [dot] com)\n *\n * Copyright (c) 2004-2007, Jeremy Ruston\n * Copyright (c) 2007-2018, UnaMesa Association\n * Copyright (c) 2019-2020, Blue Light\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * * Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n *\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * * Neither the name of the copyright holder nor the names of its\n * contributors may be used to endorse or promote products derived from\n * this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n /*\n * from $:/core/modules/utils/logger.js\n **/\n exports.alert = function (callee, text) {\n if (\n typeof window === 'undefined' ||\n typeof window.navigator === 'undefined'\n ) {\n return\n }\n const ALERT_TAG = '$:/tags/Alert'\n // Prepare the text of the alert\n // var text = Array.prototype.join.call(arguments,\" \");\n // Check if there is an existing alert with the same text and the same component\n var existingAlerts = $tw.wiki.getTiddlersWithTag(ALERT_TAG)\n var alertFields\n var existingCount\n var self = this\n $tw.utils.each(existingAlerts, function (title) {\n var tiddler = $tw.wiki.getTiddler(title)\n if (\n tiddler.fields.text === text &&\n tiddler.fields.component === self.componentName &&\n tiddler.fields.modified &&\n (!alertFields || tiddler.fields.modified < alertFields.modified)\n ) {\n alertFields = $tw.utils.extend({}, tiddler.fields)\n }\n })\n if (alertFields) {\n existingCount = alertFields.count || 1\n } else {\n alertFields = {\n title: $tw.wiki.generateNewTitle('$:/temp/alerts/alert', {\n prefix: ''\n }),\n text: text,\n tags: [ALERT_TAG],\n component: callee\n }\n existingCount = 0\n }\n alertFields.modified = new Date()\n if (++existingCount > 1) {\n alertFields.count = existingCount\n } else {\n alertFields.count = undefined\n }\n $tw.wiki.addTiddler(new $tw.Tiddler(alertFields))\n }\n\n exports.getChangedTiddler = function (object) {\n // Holder\n const changedTiddler = Object.create(null)\n // Check\n if (object === undefined || object == null) {\n return changedTiddler\n }\n if (object instanceof $tw.Tiddler === false && typeof object !== 'string') {\n return changedTiddler\n }\n // Retrieve title\n var title = null\n if (typeof object === 'string') {\n title = object\n }\n if (object instanceof $tw.Tiddler) {\n title = object.getFieldString('title')\n }\n // Check\n if (title === undefined || title == null) {\n return changedTiddler\n }\n // Process title\n changedTiddler[title] = Object.create(null)\n // Done\n return changedTiddler\n }\n\n exports.updateTiddler = function (updates) {\n // Is there anything to do\n if (\n updates === undefined ||\n updates == null ||\n updates.tiddler === undefined ||\n updates.tiddler == null\n ) {\n return null\n }\n // Prepare updates\n const fields = $tw.wiki.getModificationFields()\n // Tags\n fields.tags = (updates.tiddler.fields.tags || []).slice(0)\n // Process add tags\n if (\n updates.addTags !== undefined &&\n updates.addTags !== null &&\n Array.isArray(updates.addTags)\n ) {\n for (var i = 0; i < updates.addTags.length; i++) {\n const tag = updates.addTags[i]\n if (fields.tags.indexOf(tag) === -1) {\n $tw.utils.pushTop(fields.tags, tag)\n }\n }\n }\n // Process remove tags\n if (\n updates.removeTags !== undefined &&\n updates.removeTags !== null &&\n Array.isArray(updates.removeTags)\n ) {\n for (var i = 0; i < updates.removeTags.length; i++) {\n const tag = updates.removeTags[i]\n const index = fields.tags.indexOf(tag)\n if (index !== -1) {\n fields.tags.splice(index, 1)\n }\n }\n }\n // Process fields\n if (\n updates.fields !== undefined &&\n updates.fields !== null &&\n Array.isArray(updates.fields)\n ) {\n for (var i = 0; i < updates.fields.length; i++) {\n const field = updates.fields[i]\n if (field.key !== undefined && field.key !== null) {\n fields[field.key] = field.value\n }\n }\n }\n // Update tiddler\n return new $tw.Tiddler(updates.tiddler, fields)\n }\n\n exports.getContentType = function (title, type) {\n type =\n type === undefined || type == null || type.trim() === ''\n ? null\n : type.trim()\n if (type == null) {\n type = 'text/vnd.tiddlywiki'\n }\n var info = $tw.config.contentTypeInfo[type]\n if (info === undefined || info == null) {\n const url = $tw.ipfs.getDocumentUrl()\n url.hash = title\n this.getLogger().info(\n `Unknown Content-Type: \"${type}\", default: \"text/vnd.tiddlywiki\":\\n ${url}`\n )\n type = 'text/vnd.tiddlywiki'\n info = $tw.config.contentTypeInfo[type]\n }\n return {\n type: type,\n info: info\n }\n }\n})()\n",
"type": "application/javascript",
"tags": "$:/ipfs/core",
"module-type": "utils"
},
"$:/plugins/ipfs/ipfs-wrapper.js": {
"title": "$:/plugins/ipfs/ipfs-wrapper.js",
"text": "/*\\\ntitle: $:/plugins/ipfs/ipfs-wrapper.js\ntype: application/javascript\ntags: $:/ipfs/core\nmodule-type: library\n\nIPFS Wrapper\n\n\\*/\n\n;(function () {\n /*jslint node: true, browser: true */\n /*global $tw: false */\n 'use strict'\n\n /**\n * https://github.com/purposeindustries/window-or-global\n * The MIT License (MIT) Copyright (c) Purpose Industries\n * version: 1.0.1\n */\n const root =\n (typeof self === 'object' && self.self === self && self) ||\n (typeof global === 'object' && global.global === global && global) ||\n this\n\n const ipfsKeyword = 'ipfs'\n const ipnsKeyword = 'ipns'\n\n const name = 'ipfs-wrapper'\n\n var IpfsWrapper = function (ipfsBundle) {\n this.ipfsBundle = ipfsBundle\n this.ipfsLibrary = ipfsBundle.ipfsLibrary\n this.ipfsUrl = ipfsBundle.ipfsUrl\n }\n\n IpfsWrapper.prototype.getLogger = function () {\n return root.log.getLogger(name)\n }\n\n IpfsWrapper.prototype.getWindowIpfsClient = async function () {\n // IPFS Companion\n try {\n const policy = await this.ipfsLibrary.getWindowIpfs()\n if (policy !== null && policy.ipfs !== null && policy.provider !== null) {\n return policy\n }\n } catch (error) {\n this.getLogger().error(error)\n }\n throw new Error('Failed to retrieve IPFS Companion...')\n }\n\n IpfsWrapper.prototype.getHttpIpfsClient = async function (url) {\n // HTTP Client\n try {\n const policy = await this.ipfsLibrary.getHttpIpfs(url)\n if (policy !== null && policy.ipfs !== null && policy.provider !== null) {\n return policy\n }\n } catch (error) {\n this.getLogger().error(error)\n }\n throw new Error('Failed to retrieve an IPFS HTTP provider...')\n }\n\n IpfsWrapper.prototype.getIpfsClient = async function (url) {\n // IPFS client\n try {\n var policy = null\n const ipfsProvider = $tw.utils.getIpfsProvider()\n if (ipfsProvider === 'window') {\n policy = await this.ipfsLibrary.getWindowIpfs()\n } else if (ipfsProvider === 'http') {\n policy = await this.ipfsLibrary.getHttpIpfs(url)\n } else {\n policy = await this.ipfsLibrary.getDefaultIpfs(url)\n }\n if (policy !== null && policy.ipfs !== null && policy.provider !== null) {\n return policy\n }\n } catch (error) {\n this.getLogger().error(error)\n }\n throw new Error('Failed to retrieve an IPFS provider...')\n }\n\n IpfsWrapper.prototype.getIpnsIdentifiers = async function (\n ipfs,\n identifier,\n ipnsName\n ) {\n identifier =\n identifier === undefined || identifier == null || identifier.trim() === ''\n ? null\n : identifier.trim()\n ipnsName =\n ipnsName === undefined || ipnsName == null || ipnsName.trim() === ''\n ? null\n : ipnsName.trim()\n if (identifier == null && ipnsName == null) {\n throw new Error('Undefined IPNS identifiers...')\n }\n var found = false\n var ipnsKey = null\n var keys = null\n var normalizedUrl = null\n try {\n // Only the server who generates the key has the knowledge\n keys = await this.getIpnsKeys(ipfs)\n } catch (error) {\n this.getLogger().error(error)\n }\n // Do our best\n if (ipnsName !== null && identifier !== null) {\n if (keys !== null && keys !== undefined && Array.isArray(keys)) {\n for (var index = 0; index < keys.length; index++) {\n if (keys[index].id === identifier && keys[index].name === ipnsName) {\n ipnsKey = identifier\n found = true\n break\n }\n }\n }\n } else if (ipnsName !== null) {\n if (keys !== null && keys !== undefined && Array.isArray(keys)) {\n for (var index = 0; index < keys.length; index++) {\n if (keys[index].name === ipnsName) {\n ipnsKey = keys[index].id\n found = true\n break\n }\n }\n }\n } else {\n if (keys !== null && keys !== undefined && Array.isArray(keys)) {\n for (var index = 0; index < keys.length; index++) {\n if (\n keys[index].id === identifier ||\n keys[index].name === identifier\n ) {\n ipnsKey = keys[index].id\n ipnsName = keys[index].name\n found = true\n break\n }\n }\n }\n }\n if (found === false) {\n // Unable to resolve the keys, check if identifier is a an IPFS cid\n if (this.ipfsBundle.isCid(identifier) === false) {\n throw new Error('Unknown IPNS identifier...')\n }\n ipnsKey = identifier\n }\n // Lets build an url, the resolver will do the final check, we cannot do more here\n normalizedUrl = this.ipfsUrl.normalizeUrl(`/${ipnsKeyword}/${ipnsKey}`)\n if (found) {\n this.getLogger().info(\n `Successfully Fetched IPNS identifiers: ${ipnsName}\\n ${normalizedUrl}`\n )\n } else {\n this.getLogger().info(\n `Unable to Fetch IPNS identifiers, default to\\n ${normalizedUrl}`\n )\n }\n return {\n ipnsKey: ipnsKey,\n ipnsName: ipnsName,\n normalizedUrl: normalizedUrl\n }\n }\n\n IpfsWrapper.prototype.generateIpnsKey = async function (ipfs, ipnsName) {\n try {\n const key = await this.ipfsLibrary.genKey(ipfs, ipnsName)\n const url = this.ipfsUrl.normalizeUrl(`/${ipnsKeyword}/${key}`)\n this.getLogger().info(\n `Successfully generated IPNS key with IPNS name: ${ipnsName}\\n ${url}`\n )\n return key\n } catch (error) {\n this.getLogger().error(error)\n }\n throw new Error('Failed to generate and IPNS key...')\n }\n\n IpfsWrapper.prototype.removeIpnsKey = async function (ipfs, ipnsName) {\n try {\n const hash = await this.ipfsLibrary.rmKey(ipfs, ipnsName)\n this.getLogger().info(`Successfully removed IPNS name: ${ipnsName}`)\n return hash\n } catch (error) {\n this.getLogger().error(error)\n }\n throw new Error('Failed to remove an IPNS Key...')\n }\n\n IpfsWrapper.prototype.renameIpnsName = async function (\n ipfs,\n oldIpnsName,\n newIpnsName\n ) {\n try {\n const { id: key, was, now } = await this.ipfsLibrary.renameKey(\n ipfs,\n oldIpnsName,\n newIpnsName\n )\n this.getLogger().info(\n `Successfully renamed IPNS name: ${was} with ${now}`\n )\n return {\n ipnsKey: key,\n ipnsName: now\n }\n } catch (error) {\n this.getLogger().error(error)\n }\n throw new Error('Failed to rename an IPNS name...')\n }\n\n IpfsWrapper.prototype.getIpnsKeys = async function (ipfs) {\n try {\n const keys = await this.ipfsLibrary.getKeys(ipfs)\n this.getLogger().info('Successfully fetched IPNS keys...')\n return keys\n } catch (error) {\n this.getLogger().error(error)\n }\n throw new Error('Failed to fetch IPNS keys...')\n }\n\n IpfsWrapper.prototype.fetchFromIpfs = async function (ipfs, cid) {\n cid =\n cid === undefined || cid == null || cid.toString().trim() === ''\n ? null\n : cid.toString().trim()\n if (cid == null) {\n throw new Error('Undefined IPNS identifier...')\n }\n const pathname = `/${ipfsKeyword}/${cid}`\n try {\n const fetched = await this.ipfsLibrary.cat(ipfs, pathname)\n const url = this.ipfsUrl.normalizeUrl(pathname)\n this.getLogger().info(`Successfully fetched:\\n ${url}`)\n return fetched\n } catch (error) {\n this.getLogger().error(error)\n }\n throw new Error('Failed to fetch from IPFS...')\n }\n\n IpfsWrapper.prototype.addToIpfs = async function (ipfs, content) {\n try {\n const { hash, size } = await this.ipfsLibrary.add(ipfs, content)\n const pathname = '/' + ipfsKeyword + '/' + hash\n const url = this.ipfsUrl.normalizeUrl(pathname)\n this.getLogger().info(`Successfully added ${size} bytes:\\n ${url}`)\n return {\n added: hash,\n size: size\n }\n } catch (error) {\n this.getLogger().error(error)\n }\n throw new Error('Failed to add content to IPFS...')\n }\n\n IpfsWrapper.prototype.resolveIpnsKey = async function (ipfs, ipnsKey) {\n ipnsKey =\n ipnsKey === undefined || ipnsKey == null || ipnsKey.trim() === ''\n ? null\n : ipnsKey.trim()\n if (ipnsKey == null) {\n throw new Error('Undefined IPNS key...')\n }\n const pathname = `/${ipnsKeyword}/${ipnsKey}`\n try {\n const url = this.ipfsUrl.normalizeUrl(pathname)\n const resolved = await this.ipfsLibrary.resolve(ipfs, pathname)\n const { cid } = this.ipfsBundle.decodeCid(resolved)\n if (cid !== null) {\n const parsed = this.ipfsUrl.normalizeUrl(resolved)\n this.getLogger().info(\n `Successfully resolved IPNS key:\\n ${url} \\n ${parsed}`\n )\n return cid\n }\n } catch (error) {\n this.getLogger().error(error)\n }\n throw new Error('Failed to resolve an IPNS key...')\n }\n\n IpfsWrapper.prototype.publishIpnsName = async function (\n cid,\n ipfs,\n ipnsKey,\n ipnsName\n ) {\n ipnsKey =\n ipnsKey === undefined || ipnsKey == null || ipnsKey.trim() === ''\n ? null\n : ipnsKey.trim()\n if (ipnsKey == null) {\n throw new Error('Undefined IPNS key...')\n }\n ipnsName =\n ipnsName === undefined || ipnsName == null || ipnsName.trim() === ''\n ? null\n : ipnsName.trim()\n if (ipnsName == null) {\n throw new Error('Undefined IPNS name...')\n }\n cid =\n cid === undefined || cid == null || cid.toString().trim() === ''\n ? null\n : cid.toString().trim()\n if (cid == null) {\n throw new Error('Undefined IPNS identifier...')\n }\n // Path\n const key = `/${ipnsKeyword}/${ipnsKey}`\n const pathname = `/${ipfsKeyword}/${cid}`\n try {\n // Publish\n const result = await this.ipfsLibrary.publish(ipfs, ipnsName, pathname)\n const keyParsed = this.ipfsUrl.normalizeUrl(key)\n const url = this.ipfsUrl.normalizeUrl(pathname)\n this.getLogger().info(\n `Successfully published IPNS name: ${ipnsName}\\n ${keyParsed}\\n ${url}`\n )\n return result\n } catch (error) {\n this.getLogger().error(error)\n }\n throw new Error('Failed to publish an IPNS name...')\n }\n\n IpfsWrapper.prototype.pinToIpfs = async function (ipfs, cid) {\n cid =\n cid === undefined || cid == null || cid.toString().trim() === ''\n ? null\n : cid.toString().trim()\n if (cid == null) {\n throw new Error('Undefined IPNS identifier...')\n }\n const pathname = `/${ipfsKeyword}/${cid}`\n try {\n const pinned = await this.ipfsLibrary.pin(ipfs, pathname)\n const url = this.ipfsUrl.normalizeUrl(pathname)\n this.getLogger().info(`Successfully pinned:\\n ${url}`)\n return pinned\n } catch (error) {\n this.getLogger().error(error)\n }\n throw new Error('Failed to pin to IPFS...')\n }\n\n IpfsWrapper.prototype.unpinFromIpfs = async function (ipfs, cid) {\n cid =\n cid === undefined || cid == null || cid.toString().trim() === ''\n ? null\n : cid.toString().trim()\n if (cid == null) {\n throw new Error('Undefined IPNS identifier...')\n }\n const pathname = `/${ipfsKeyword}/${cid}`\n try {\n const unpinned = await this.ipfsLibrary.unpin(ipfs, pathname)\n const url = this.ipfsUrl.normalizeUrl(pathname)\n this.getLogger().info(`Successfully unpinned:\\n ${url}`)\n return unpinned\n } catch (error) {\n this.getLogger().error(error)\n }\n throw new Error('Failed to unpin from IPFS...')\n }\n\n exports.IpfsWrapper = IpfsWrapper\n})()\n",
"type": "application/javascript",
"tags": "$:/ipfs/core",
"module-type": "library"
},
"$:/language/Buttons/3Box/Profile/Caption": {
"title": "$:/language/Buttons/3Box/Profile/Caption",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "3Box profile"
},
"$:/language/Buttons/3Box/Profile/Hint": {
"title": "$:/language/Buttons/3Box/Profile/Hint",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "Load 3Box profile"
},
"$:/language/Buttons/Ipfs/Export/Caption": {
"title": "$:/language/Buttons/Ipfs/Export/Caption",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "export to IPFS"
},
"$:/language/Buttons/Ipfs/Export/Hint": {
"title": "$:/language/Buttons/Ipfs/Export/Hint",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "Export this tiddler to IPFS"
},
"$:/language/Buttons/Ipfs/Export/Attachment/Caption": {
"title": "$:/language/Buttons/Ipfs/Export/Attachment/Caption",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "export attachment to IPFS"
},
"$:/language/Buttons/Ipfs/Export/Attachment/Hint": {
"title": "$:/language/Buttons/Ipfs/Export/Attachment/Hint",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "Export attachment to IPFS"
},
"$:/language/Buttons/Ipfs/Export/Content/Caption": {
"title": "$:/language/Buttons/Ipfs/Export/Content/Caption",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "export content to IPFS"
},
"$:/language/Buttons/Ipfs/Export/Content/Hint": {
"title": "$:/language/Buttons/Ipfs/Export/Content/Hint",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "Export this tiddler content to IPFS"
},
"$:/language/Buttons/Ipns/Fetch/Caption": {
"title": "$:/language/Buttons/Ipns/Fetch/Caption",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "fetch from IPNS"
},
"$:/language/Buttons/Ipns/Fetch/Hint": {
"title": "$:/language/Buttons/Ipns/Fetch/Hint",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "Fetch IPNS key"
},
"$:/language/Buttons/Ipns/Generate/Caption": {
"title": "$:/language/Buttons/Ipns/Generate/Caption",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "generate IPNS"
},
"$:/language/Buttons/Ipns/Generate/Hint": {
"title": "$:/language/Buttons/Ipns/Generate/Hint",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "Generate IPNS key"
},
"$:/language/Buttons/Ipfs/Refresh/Caption": {
"title": "$:/language/Buttons/Ipfs/Refresh/Caption",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "refresh"
},
"$:/language/Buttons/Ipfs/Refresh/Hint": {
"title": "$:/language/Buttons/Ipfs/Refresh/Hint",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "Perform a full refresh of the tiddler"
},
"$:/language/Buttons/Ipfs/Pin/Caption": {
"title": "$:/language/Buttons/Ipfs/Pin/Caption",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "pin to IPFS"
},
"$:/language/Buttons/Ipfs/Pin/Hint": {
"title": "$:/language/Buttons/Ipfs/Pin/Hint",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "Pin this wiki to IPFS"
},
"$:/language/Buttons/Ipfs/Tiddler/Pin/Caption": {
"title": "$:/language/Buttons/Ipfs/Tiddler/Pin/Caption",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "pin to IPFS"
},
"$:/language/Buttons/Ipfs/Tiddler/Pin/Hint": {
"title": "$:/language/Buttons/Ipfs/Tiddler/Pin/Hint",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "Pin tiddler resources to IPFS"
},
"$:/language/Buttons/Ipfs/Tiddler/Unpin/Caption": {
"title": "$:/language/Buttons/Ipfs/Tiddler/Unpin/Caption",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "unpin from IPFS"
},
"$:/language/Buttons/Ipfs/Tiddler/Unpin/Hint": {
"title": "$:/language/Buttons/Ipfs/Tiddler/Unpin/Hint",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "Unpin tiddler resources from IPFS"
},
"$:/language/Buttons/Ipfs/Unpin/Caption": {
"title": "$:/language/Buttons/Ipfs/Unpin/Caption",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "unpin from IPFS"
},
"$:/language/Buttons/Ipfs/Unpin/Hint": {
"title": "$:/language/Buttons/Ipfs/Unpin/Hint",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "Unpin this wiki from IPFS"
},
"$:/language/Buttons/Console/Mobile/Caption": {
"title": "$:/language/Buttons/Console/Mobile/Caption",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "mobile console"
},
"$:/language/Buttons/Console/Mobile/Hint": {
"title": "$:/language/Buttons/Console/Mobile/Hint",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "Load/Unload Mobile Console"
},
"$:/language/Buttons/Ens/Manager/Open/Caption": {
"title": "$:/language/Buttons/Ens/Manager/Open/Caption",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "open ENS Manager"
},
"$:/language/Buttons/Ens/Manager/Open/Hint": {
"title": "$:/language/Buttons/Ens/Manager/Open/Hint",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "Open ENS Domain Manager"
},
"$:/language/Buttons/Ens/Publish/Caption": {
"title": "$:/language/Buttons/Ens/Publish/Caption",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "publish to ENS"
},
"$:/language/Buttons/Ens/Publish/Hint": {
"title": "$:/language/Buttons/Ens/Publish/Hint",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "Publish this wiki to ENS"
},
"$:/language/Buttons/Ens/Resolve/And/Open/Caption": {
"title": "$:/language/Buttons/Ens/Resolve/And/Open/Caption",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "open ENS Domain content"
},
"$:/language/Buttons/Ens/Resolve/And/Open/Hint": {
"title": "$:/language/Buttons/Ens/Resolve/And/Open/Hint",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "Open resolved ENS Domain content"
},
"$:/language/Buttons/Ipns/Publish/Caption": {
"title": "$:/language/Buttons/Ipns/Publish/Caption",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "publish to IPNS"
},
"$:/language/Buttons/Ipns/Publish/Hint": {
"title": "$:/language/Buttons/Ipns/Publish/Hint",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "Publish this wiki to IPNS"
},
"$:/language/Buttons/Ipns/Remove/Caption": {
"title": "$:/language/Buttons/Ipns/Remove/Caption",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "remove"
},
"$:/language/Buttons/Ipns/Remove/Hint": {
"title": "$:/language/Buttons/Ipns/Remove/Hint",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "Remove IPNS name and IPNS key"
},
"$:/language/Buttons/Ipns/Rename/Caption": {
"title": "$:/language/Buttons/Ipns/Rename/Caption",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "rename"
},
"$:/language/Buttons/Ipns/Rename/Hint": {
"title": "$:/language/Buttons/Ipns/Rename/Hint",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "Rename IPNS name"
},
"$:/language/Buttons/Ipns/Resolve/And/Open/Caption": {
"title": "$:/language/Buttons/Ipns/Resolve/And/Open/Caption",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "resolve and open"
},
"$:/language/Buttons/Ipns/Resolve/And/Open/Hint": {
"title": "$:/language/Buttons/Ipns/Resolve/And/Open/Hint",
"modified": "20200606094915385",
"tags": "$:/ipfs/core",
"text": "Open resolved IPNS key"
},
"$:/language/ControlPanel/Saving/IpfsService/Caption": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Caption",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "IPFS Saver"
},
"$:/language/ControlPanel/Saving/IpfsService/Description": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Description",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "These settings are only used when saving to IPFS."
},
"$:/language/ControlPanel/Saving/IpfsService/Verbose": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Verbose",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "Saver Verbose"
},
"$:/language/ControlPanel/Saving/IpfsService/Url": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Url",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "IPFS Server URL"
},
"$:/language/ControlPanel/Saving/IpfsService/ApiUrl": {
"title": "$:/language/ControlPanel/Saving/IpfsService/ApiUrl",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "API"
},
"$:/language/ControlPanel/Saving/IpfsService/GatewayUrl": {
"title": "$:/language/ControlPanel/Saving/IpfsService/GatewayUrl",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "Gateway"
},
"$:/language/ControlPanel/Saving/IpfsService/Ens": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Ens",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "ENS"
},
"$:/language/ControlPanel/Saving/IpfsService/EnsDomain": {
"title": "$:/language/ControlPanel/Saving/IpfsService/EnsDomain",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "ENS domain"
},
"$:/language/ControlPanel/Saving/IpfsService/Ipns": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Ipns",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "IPNS"
},
"$:/language/ControlPanel/Saving/IpfsService/IpnsName": {
"title": "$:/language/ControlPanel/Saving/IpfsService/IpnsName",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "IPNS name"
},
"$:/language/ControlPanel/Saving/IpfsService/IpnsKey": {
"title": "$:/language/ControlPanel/Saving/IpfsService/IpnsKey",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "IPNS key"
},
"$:/language/ControlPanel/Saving/IpfsService/Resolved": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Resolved",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "Resolved"
},
"$:/language/ControlPanel/Saving/IpfsService/Global": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Global",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "Global"
},
"$:/language/ControlPanel/Saving/IpfsService/Verbose/Description": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Verbose/Description",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "Verbose"
},
"$:/language/ControlPanel/Saving/IpfsService/Unpin/Description": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Unpin/Description",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "Unpin previous content"
},
"$:/language/ControlPanel/Saving/IpfsService/Wait/Description": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Wait/Description",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "Wait"
},
"$:/language/ControlPanel/Saving/IpfsService/Policy": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Policy",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "Relative URL Policy"
},
"$:/language/ControlPanel/Saving/IpfsService/Policy/Origin/Description": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Policy/Origin/Description",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "Origin"
},
"$:/language/ControlPanel/Saving/IpfsService/Policy/Gateway/Description": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Policy/Gateway/Description",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "Gateway"
},
"$:/language/ControlPanel/Saving/IpfsService/Protocol": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Protocol",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "Protocol"
},
"$:/language/ControlPanel/Saving/IpfsService/Protocol/Ens/Description": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Protocol/Ens/Description",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "ENS"
},
"$:/language/ControlPanel/Saving/IpfsService/Protocol/Ipfs/Description": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Protocol/Ipfs/Description",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "IPFS"
},
"$:/language/ControlPanel/Saving/IpfsService/Protocol/Ipns/Description": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Protocol/Ipns/Description",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "IPNS"
},
"$:/language/ControlPanel/Saving/IpfsService/Export": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Export",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "Export"
},
"$:/language/ControlPanel/Saving/IpfsService/Export/Static/Description": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Export/Static/Description",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "Static"
},
"$:/language/ControlPanel/Saving/IpfsService/Export/Json/Description": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Export/Json/Description",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "JSON"
},
"$:/language/ControlPanel/Saving/IpfsService/Export/Tid/Description": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Export/Tid/Description",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "TID"
},
"$:/language/ControlPanel/Saving/IpfsService/Provider": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Provider",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "IPFS Provider"
},
"$:/language/ControlPanel/Saving/IpfsService/Provider/Default/Description": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Provider/Default/Description",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "Default"
},
"$:/language/ControlPanel/Saving/IpfsService/Provider/Window/Description": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Provider/Window/Description",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "IPFS Companion"
},
"$:/language/ControlPanel/Saving/IpfsService/Provider/HTTP/Description": {
"title": "$:/language/ControlPanel/Saving/IpfsService/Provider/HTTP/Description",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "HTTP Client"
},
"$:/language/ControlPanel/Basics/Version/Prompt": {
"title": "$:/language/ControlPanel/Basics/Version/Prompt",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "<b>~TiddlyWiki</b>:"
},
"$:/language/ControlPanel/Ipfs/Version/Prompt": {
"title": "$:/language/ControlPanel/Ipfs/Version/Prompt",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "<b>IPFS</b>:"
},
"$:/language/ControlPanel/Settings/PreferredSaver/Caption": {
"title": "$:/language/ControlPanel/Settings/PreferredSaver/Caption",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "Preferred Saver"
},
"$:/language/ControlPanel/Appearance/Hint": {
"title": "$:/language/ControlPanel/Appearance/Hint",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "Ways to customise the appearance of your <b>~TiddlyWiki</b>."
},
"$:/language/ControlPanel/Info/Hint": {
"title": "$:/language/ControlPanel/Info/Hint",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "Information about this <b>~TiddlyWiki</b>"
},
"$:/language/ControlPanel/Saving/Hint": {
"title": "$:/language/ControlPanel/Saving/Hint",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "Settings used for saving the entire <b>~TiddlyWiki</b> as a single file via a saver module."
},
"$:/language/ControlPanel/Settings/Hint": {
"title": "$:/language/ControlPanel/Settings/Hint",
"modified": "20200528094915385",
"tags": "$:/ipfs/core",
"text": "These settings let you customise the behaviour of <b>~TiddlyWiki</b>."
},
"$:/language/EditTemplate/Body/External/Hint": {
"title": "$:/language/EditTemplate/Body/External/Hint",
"modified": "20200528094915385",
"text": "This tiddler shows content stored outside of the main ~TiddlyWiki file.<br/>You can edit the tags and fields but cannot directly edit the content itself"
},
"$:/language/NetworkError/XMLHttpRequest": {
"title": "$:/language/NetworkError/XMLHttpRequest",
"modified": "20200528094915385",
"text": "Network Error while loading..."
},
"$:/language/LazyLoadingWarning": {
"title": "$:/language/LazyLoadingWarning",
"modified": "20200528094915385",
"text": "<p>Trying to load external Tiddler content from:<p></p>''<$ipfslink field=\"_canonical_uri\" tiddler=<<currentTiddler>>/>''</p>"
},
"$:/language/EmptyTidddler": {
"title": "$:/language/EmptyTidddler",
"modified": "20200528094915385",
"text": "<p>An external Tiddler content has been loaded:</p><p>''<$ipfslink field=\"_canonical_uri\" tiddler=<<currentTiddler>>/>''</p><p>The imported Tiddler content is empty, possible reasons:</p><ul><li>The Tiddler Content Type doesn't match the type of the external content.</li>"
},
"$:/plugins/ipfs/changelog": {
"title": "$:/plugins/ipfs/changelog",
"modified": "20200525094915385",
"tags": "$:/ipfs/core",
"type": "text/vnd.tiddlywiki",
"text": "!! v0.3.0\n\n[[See GitHub for detailed change history of this release|https://github.com/xmaysonnave/tiddlywiki-ipfs/compare/v0.2.9...v0.3.0]]\n\n!! v0.2.9\n\n[[See GitHub for detailed change history of this release|https://github.com/xmaysonnave/tiddlywiki-ipfs/compare/v0.2.8...v0.2.9]]\n\n!! v0.2.8\n\n[[See GitHub for detailed change history of this release|https://github.com/xmaysonnave/tiddlywiki-ipfs/compare/v0.2.7...v0.2.8]]\n\n...\n\n!! 0.2.2\n\n* First public release"
},
"$:/plugins/ipfs/readme": {
"title": "$:/plugins/ipfs/readme",
"modified": "20200525094915385",
"tags": "$:/ipfs/core",
"type": "text/vnd.tiddlywiki",
"text": "!! IPFS with ~TiddlyWiki\n\nFeatures:\n\n* Store `TiddlyWiki's` and attachments on [ext[IPFS|https://ipfs.io/]]\n* Access `TiddlyWiki's` and attachments from [ext[IPFS|https://ipfs.io/]]\n* Encrypt and Unencrypt `TiddlyWiki` and attachments\n* Publish and Manage IPNS Keys and Names\n* Interact with [ext[Metamask|https://metamask.io]] Ethereum wallets\n* Publish to [ext[ENS|https://ens.domains]]\n* Share over [ext[IPFS|https://ipfs.io/]] `TiddlyWiki's` [ext[Tiddlers|https://tiddlywiki.com/#Tiddlers]] and attachments\n\nSupported Browsers:\n\n* [ext[Firefox|https://www.mozilla.org]]\n* [ext[Chrome|https://www.google.com/chrome/]]\n* [ext[Chromium|https://www.chromium.org]]\n\nSupported Ethereum browser extension:\n\n* [ext[Metamask|https://metamask.io]]\n\nSupported Mobile ĐApp browser:\n\n* [ext[Metamask|https://metamask.io]]\n\nSupported ENS Ethereum Networks\n\n* `Mainnet`: Ethereum Main Network\n* `Ropsten`: Ethereum Test Network (~PoW)\n* `Rinkeby`: Ethereum Test Network (~PoA)\n* `Goerli`: Ethereum Test Network (~PoA)\n\nResources:\n\n* https://github.com/xmaysonnave/tiddlywiki-ipfs/\n* https://github.com/xmaysonnave/tiddlywiki-ipfs/blob/master/README.md\n\n!! With a capable ENS browser:\n\n* [ext[IPFS with TiddlyWiki|https://bluelightav.eth]] on \"Mainnet: Ethereum Main Network\"\n* [ext[IPFS with TiddlyWiki|https://bluelightav.eth]] on [ext[Rinkeby|https://www.rinkeby.io/]] (~PoA): Ethereum Test Network\n* [ext[IPFS with TiddlyWiki plugin|https://bluelightav.eth/#%24%3A%2Fplugins%2Fipfs]]\n* [ext[IPFS with TiddlyWiki Documentation|https://bluelightav.eth/#IPFS%20Documentation]]\n\n!! With a non capable ENS browser:\n\n* [ext[IPFS with TiddlyWiki|https://bluelightav.eth.link]]\n* [ext[IPFS with TiddlyWiki plugin|https://bluelightav.eth.link/#%24%3A%2Fplugins%2Fipfs]]\n* [ext[IPFS with TiddlyWiki Documentation|https://bluelightav.eth.link/#IPFS%20Documentation]]"
},
"$:/ipfs/saver/api/http/localhost/5001": {
"title": "$:/ipfs/saver/api/http/localhost/5001",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/ipfs/saver/api",
"text": "http://127.0.0.1:5001"
},
"$:/ipfs/saver/api/https/ipfs.infura.io/5001": {
"title": "$:/ipfs/saver/api/https/ipfs.infura.io/5001",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/ipfs/saver/api",
"text": "https://ipfs.infura.io:5001"
},
"$:/ipfs/saver/api/https/ipfs.bluelightav.org": {
"title": "$:/ipfs/saver/api/https/ipfs.bluelightav.org",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/ipfs/saver/api",
"text": "https://ipfs.bluelightav.org"
},
"$:/ipfs/saver/gateway/https/ipfs.busy.org": {
"title": "$:/ipfs/saver/gateway/https/ipfs.busy.org",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/ipfs/saver/gateway",
"text": "https://ipfs.busy.org"
},
"$:/ipfs/saver/gateway/https/cloudflare-ipfs.com": {
"title": "$:/ipfs/saver/gateway/https/cloudflare-ipfs.com",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/ipfs/saver/gateway",
"text": "https://cloudflare-ipfs.com"
},
"$:/ipfs/saver/gateway/https/ipfs.eternum.io": {
"title": "$:/ipfs/saver/gateway/https/ipfs.eternum.io",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/ipfs/saver/gateway",
"text": "https://ipfs.eternum.io"
},
"$:/ipfs/saver/gateway/https/gateway.bluelightav.org": {
"title": "$:/ipfs/saver/gateway/https/gateway.bluelightav.org",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/ipfs/saver/gateway",
"text": "https://gateway.bluelightav.org"
},
"$:/ipfs/saver/gateway/https/gateway.ipfs.io": {
"title": "$:/ipfs/saver/gateway/https/gateway.ipfs.io",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/ipfs/saver/gateway",
"text": "https://gateway.ipfs.io"
},
"$:/ipfs/saver/gateway/https/ipfs.greyh.at": {
"title": "$:/ipfs/saver/gateway/https/ipfs.greyh.at",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/ipfs/saver/gateway",
"text": "https://ipfs.greyh.at"
},
"$:/ipfs/saver/gateway/https/hardbin.com": {
"title": "$:/ipfs/saver/gateway/https/hardbin.com",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/ipfs/saver/gateway",
"text": "https://hardbin.com"
},
"$:/ipfs/saver/gateway/http/localhost": {
"title": "$:/ipfs/saver/gateway/http/localhost",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/ipfs/saver/gateway",
"text": "http://127.0.0.1:8080"
},
"$:/ipfs/saver/gateway/https/ipfs.infura.io": {
"title": "$:/ipfs/saver/gateway/https/ipfs.infura.io",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/ipfs/saver/gateway",
"text": "https://ipfs.infura.io"
},
"$:/ipfs/saver/gateway/https/ipfs.bluelightav.org": {
"title": "$:/ipfs/saver/gateway/https/ipfs.bluelightav.org",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/ipfs/saver/gateway",
"text": "https://ipfs.bluelightav.org"
},
"$:/ipfs/saver/gateway/https/ipfs.io": {
"title": "$:/ipfs/saver/gateway/https/ipfs.io",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/ipfs/saver/gateway",
"text": "https://ipfs.io"
},
"$:/ipfs/saver/gateway/https/ipfs.jes.xxx": {
"title": "$:/ipfs/saver/gateway/https/ipfs.jes.xxx",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/ipfs $:/ipfs/saver/gateway",
"text": "https://ipfs.jes.xxx"
},
"$:/ipfs/saver/gateway/https/ninetailed.ninja": {
"title": "$:/ipfs/saver/gateway/https/ninetailed.ninja",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/ipfs/saver/gateway",
"text": "https://ninetailed.ninja"
},
"$:/ipfs/saver/gateway/https/gateway.pinata.cloud": {
"title": "$:/ipfs/saver/gateway/https/gateway.pinata.cloud",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/ipfs/saver/gateway",
"text": "https://gateway.pinata.cloud"
},
"$:/ipfs/saver/gateway/https/siderus.io": {
"title": "$:/ipfs/saver/gateway/https/siderus.io",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/ipfs/saver/gateway",
"text": "https://siderus.io"
},
"$:/ipfs/saver/gateway/https/ipfs.sloppyta.co": {
"title": "$:/ipfs/saver/gateway/https/ipfs.sloppyta.co",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/ipfs/saver/gateway",
"text": "https://ipfs.sloppyta.co"
},
"$:/ipfs/saver/gateway/https/gateway.temporal.cloud": {
"title": "$:/ipfs/saver/gateway/https/gateway.temporal.cloud",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/ipfs/saver/gateway",
"text": "https://gateway.temporal.cloud"
},
"$:/ipfs/saver/gateway/https/ipfs.wa.hle.rs": {
"title": "$:/ipfs/saver/gateway/https/ipfs.wa.hle.rs",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/ipfs/saver/gateway",
"text": "https://ipfs.wa.hle.rs"
},
"$:/core/ui/Buttons/3box/profile": {
"title": "$:/core/ui/Buttons/3box/profile",
"modified": "20200606094915385",
"tags": "$:/ipfs/core $:/tags/PageControls",
"caption": "{{$:/images/fa5/solid/user-cog}} {{$:/language/Buttons/3Box/Profile/Caption}}",
"description": "{{$:/language/Buttons/3Box/Profile/Hint}}",
"text": "<$button message=\"tm-3box-profile\" tooltip={{$:/language/Buttons/3Box/Profile/Hint}} aria-label={{$:/language/Buttons/3Box/Profile/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/images/fa5/solid/user-cog}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/3Box/Profile/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/ipfs/console/mobile": {
"title": "$:/core/ui/Buttons/ipfs/console/mobile",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/tags/PageControls",
"caption": "{{$:/core/images/preview-open}} {{$:/language/Buttons/Console/Mobile/Caption}}",
"description": "{{$:/language/Buttons/Console/Mobile/Hint}}",
"text": "<$button message=\"tm-console-mobile\" tooltip={{$:/language/Buttons/Console/Mobile/Hint}} aria-label={{$:/language/Buttons/Console/Mobile/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/preview-open}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Console/Mobile/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/ipfs/pin": {
"title": "$:/core/ui/Buttons/ipfs/pin",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/tags/PageControls",
"caption": "{{$:/core/images/chevron-up}} {{$:/language/Buttons/Ipfs/Pin/Caption}}",
"description": "{{$:/language/Buttons/Ipfs/Pin/Hint}}",
"text": "<$button message=\"tm-ipfs-pin\" tooltip={{$:/language/Buttons/Ipfs/Pin/Hint}} aria-label={{$:/language/Buttons/Ipfs/Pin/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/chevron-up}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Ipfs/Pin/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/ens/publish": {
"title": "$:/core/ui/Buttons/ens/publish",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/tags/PageControls",
"caption": "{{$:/core/images/ens}} {{$:/language/Buttons/Ens/Publish/Caption}}",
"description": "{{$:/language/Buttons/Ens/Publish/Hint}}",
"text": "<$button message=\"tm-ens-publish\" tooltip={{$:/language/Buttons/Ens/Publish/Hint}} aria-label={{$:/language/Buttons/Ens/Publish/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/ens}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Ens/Publish/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/ipns/publish": {
"title": "$:/core/ui/Buttons/ipns/publish",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/tags/PageControls",
"caption": "{{$:/core/images/excise}} {{$:/language/Buttons/Ipns/Publish/Caption}}",
"description": "{{$:/language/Buttons/Ipns/Publish/Hint}}",
"text": "<$button message=\"tm-ipns-publish\" tooltip={{$:/language/Buttons/Ipns/Publish/Hint}} aria-label={{$:/language/Buttons/Ipns/Publish/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/excise}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Ipns/Publish/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/ipfs/unpin": {
"title": "$:/core/ui/Buttons/ipfs/unpin",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/tags/PageControls",
"caption": "{{$:/core/images/chevron-down}} {{$:/language/Buttons/Ipfs/Unpin/Caption}}",
"description": "{{$:/language/Buttons/Ipfs/Unpin/Hint}}",
"text": "<$button message=\"tm-ipfs-unpin\" tooltip={{$:/language/Buttons/Ipfs/Unpin/Hint}} aria-label={{$:/language/Buttons/Ipfs/Unpin/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/chevron-down}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Ipfs/Unpin/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/ControlPanel/Saving/Ipfs": {
"title": "$:/core/ui/ControlPanel/Saving/Ipfs",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/tags/ControlPanel/Saving",
"caption": "{{$:/language/ControlPanel/Saving/IpfsService/Caption}}",
"text": "\\define lingo-base() $:/language/ControlPanel/Saving/IpfsService/\n\\define service-name() Ipfs\n\n<<lingo Description>>\n\n''<<lingo Global>>''\n\n<table>\n<tbody>\n<tr>\n<td width=\"90%\">''<$link to=\"$:/ipfs/saver/verbose\"><<lingo Verbose/Description>></$link>''</td>\n<td width=\"10%\"><$checkbox tiddler=\"$:/ipfs/saver/verbose\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"yes\"/></td>\n</tr>\n<tr>\n<td width=\"90%\">''<$link to=\"$:/ipfs/saver/unpin\"><<lingo Unpin/Description>></$link>''</td>\n<td width=\"10%\"><$checkbox tiddler=\"$:/ipfs/saver/unpin\" field=\"text\" checked=\"yes\" unchecked=\"no\" default=\"no\"/></td>\n</tr>\n</tbody>\n</table>\n\n''<$link to=\"$:/ipfs/saver/provider\"><<lingo Provider>></$link>''\n\n<$radio tiddler=\"$:/ipfs/saver/provider\" value=\"default\"><<lingo Provider/Default/Description>></$radio>\n<$radio tiddler=\"$:/ipfs/saver/provider\" value=\"window\"><<lingo Provider/Window/Description>></$radio>\n<$radio tiddler=\"$:/ipfs/saver/provider\" value=\"http\"><<lingo Provider/HTTP/Description>></$radio>\n\n''<$link to=\"$:/ipfs/saver/export\"><<lingo Export>></$link>''\n\n<$radio tiddler=\"$:/ipfs/saver/export\" value=\"json\"><<lingo Export/Json/Description>></$radio>\n<$radio tiddler=\"$:/ipfs/saver/export\" value=\"static\"><<lingo Export/Static/Description>></$radio>\n<$radio tiddler=\"$:/ipfs/saver/export\" value=\"tid\"><<lingo Export/Tid/Description>></$radio>\n\n''<$link to=\"$:/ipfs/saver/protocol\"><<lingo Protocol>></$link>''\n\n<$radio tiddler=\"$:/ipfs/saver/protocol\" value=\"ens\"><<lingo Protocol/Ens/Description>></$radio>\n<$radio tiddler=\"$:/ipfs/saver/protocol\" value=\"ipfs\"><<lingo Protocol/Ipfs/Description>></$radio>\n<$radio tiddler=\"$:/ipfs/saver/protocol\" value=\"ipns\"><<lingo Protocol/Ipns/Description>></$radio>\n\n''<$link to=\"$:/ipfs/saver/policy\"><<lingo Policy>></$link>''\n\n<$radio tiddler=\"$:/ipfs/saver/policy\" value=\"origin\"><<lingo Policy/Origin/Description>></$radio>\n<$radio tiddler=\"$:/ipfs/saver/policy\" value=\"gateway\"><<lingo Policy/Gateway/Description>></$radio>\n\n''<<lingo Url>>''\n\n<table>\n<tbody>\n<tr>\n<td width=\"20%\">''<$link to=\"$:/ipfs/saver/api\"><<lingo ApiUrl>></$link>''</td>\n<td width=\"80%\">\n<$select tiddler=\"$:/ipfs/saver/api\" default=\"$:/ipfs/saver/api/https/ipfs.infura.io/5001\" class=\"tc-edit-texteditor\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/ipfs/saver/api]!has[draft.of]]\">\n<option value=<<currentTiddler>>><$transclude field=\"text\"><$text text=<<currentTiddler>>/></$transclude></option>\n</$list>\n</$select>\n</td>\n</tr>\n<tr>\n<td width=\"20%\">''<$link to=\"$:/ipfs/saver/gateway\"><<lingo GatewayUrl>></$link>''</td>\n<td width=\"80%\">\n<$select tiddler=\"$:/ipfs/saver/gateway\" default=\"$:/ipfs/saver/gateway/https/ipfs.infura.io\" class=\"tc-edit-texteditor\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/ipfs/saver/gateway]!has[draft.of]]\">\n<option value=<<currentTiddler>>><$transclude field=\"text\"><$text text=<<currentTiddler>>/></$transclude></option>\n</$list>\n</$select>\n</td>\n</tr>\n</tbody>\n</table>\n\n''<<lingo Ens>>''\n\n<table>\n<tbody>\n<tr>\n<td width=\"20%\">''<$link to=\"$:/ipfs/saver/ens/domain\"><<lingo EnsDomain>></$link>''</td>\n<td width=\"80%\"><$edit-text tiddler=\"$:/ipfs/saver/ens/domain\" class=\"tc-edit-texteditor\" default=\"\" tag=\"input\"/></td>\n</tr>\n</tbody>\n</table>\n\n<table style=\"width:20%;margin-left:40%;margin-right:40%;text-align:center;\">\n<tbody>\n<tr>\n<td style=\"width:10%\">\n<$button message=\"tm-ens-manager-open\" tooltip={{$:/language/Buttons/Ens/Manager/Open/Hint}} aria-label={{$:/language/Buttons/Ens/Manager/Open/Caption}} class=\"tc-btn-invisible tc-ipfs-action\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/ens}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Ens/Manager/Open/Caption}}/></span>\n</$list>\n</$button>\n</td>\n<td style=\"width:10%\">\n<$button message=\"tm-ens-resolve-and-open\" tooltip={{$:/language/Buttons/Ens/Resolve/And/Open/Hint}} aria-label={{$:/language/Buttons/Ens/Resolve/And/Open/Caption}} class=\"tc-btn-invisible tc-ipfs-action\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/globe}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Ens/Resolve/And/Open/Caption}}/></span>\n</$list>\n</$button>\n</td>\n</tr>\n</tbody>\n</table>\n\n''<<lingo Ipns>>''\n\n<table>\n<tbody>\n<tr>\n<td width=\"20%\">''<$link to=\"$:/ipfs/saver/ipns/name\"><<lingo IpnsName>></$link>''</td>\n<td width=\"80%\"><$edit-text tiddler=\"$:/ipfs/saver/ipns/name\" class=\"tc-edit-texteditor\" default=\"\" tag=\"input\"/></td>\n</tr>\n<tr>\n<td width=\"20%\">''<$link to=\"$:/ipfs/saver/ipns/key\"><<lingo IpnsKey>></$link>''</td>\n<td width=\"80%\"><$text text={{$:/ipfs/saver/ipns/key}} class=\"tc-edit-texteditor\"/></td>\n</tr>\n</tbody>\n</table>\n\n<table style=\"width:50%;margin-left:25%;margin-right:25%;text-align:center;\">\n<tbody>\n<tr>\n<td style=\"width:10%\">\n<$button message=\"tm-ipns-rename\" tooltip={{$:/language/Buttons/Ipns/Rename/Hint}} aria-label={{$:/language/Buttons/Ipns/Rename/Caption}} class=\"tc-btn-invisible tc-ipfs-action\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/mono-line}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Ipns/Rename/Caption}}/></span>\n</$list>\n</$button>\n</td>\n<td style=\"width:10%\">\n<$button message=\"tm-ipns-generate\" tooltip={{$:/language/Buttons/Ipns/Generate/Hint}} aria-label={{$:/language/Buttons/Ipns/Generate/Caption}} class=\"tc-btn-invisible tc-ipfs-action\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/new-here-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Ipns/Generate/Caption}}/></span>\n</$list>\n</$button>\n</td>\n<td style=\"width:10%\">\n<$button message=\"tm-ipns-remove\" tooltip={{$:/language/Buttons/Ipns/Remove/Hint}} aria-label={{$:/language/Buttons/Ipns/Remove/Caption}} class=\"tc-btn-invisible tc-ipfs-action\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/delete-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Ipns/Remove/Caption}}/></span>\n</$list>\n</$button>\n</td>\n<td style=\"width:10%\">\n<$button message=\"tm-ipns-fetch\" tooltip={{$:/language/Buttons/Ipns/Fetch/Hint}} aria-label={{$:/language/Buttons/Ipns/Fetch/Caption}} class=\"tc-btn-invisible tc-ipfs-action\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/refresh-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Ipns/Fetch/Caption}}/></span>\n</$list>\n</$button>\n</td>\n<td style=\"width:10%\">\n<$button message=\"tm-ipns-resolve-and-open\" tooltip={{$:/language/Buttons/Ipns/Resolve/And/Open/Hint}} aria-label={{$:/language/Buttons/Ipns/Resolve/And/Open/Caption}} class=\"tc-btn-invisible tc-ipfs-action\">\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/globe}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Ipns/Resolve/And/Open/Caption}}/></span>\n</$list>\n</$button>\n</td>\n</tr>\n</tbody>\n</table>"
},
"$:/core/ui/Buttons/ipfs/export/attachment": {
"title": "$:/core/ui/Buttons/ipfs/export/attachment",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/tags/ViewToolbar",
"caption": "{{$:/core/images/ipfs}} {{$:/language/Buttons/Ipfs/Export/Attachment/Caption}}",
"description": "{{$:/language/Buttons/Ipfs/Export/Attachment/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-ipfs-export-attachment\" param=<<currentTiddler>> tooltip={{$:/language/Buttons/Ipfs/Export/Attachment/Hint}} aria-label={{$:/language/Buttons/Ipfs/Export/Attachment/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/ipfs}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Ipfs/Export/Attachment/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/ipfs/export/content": {
"title": "$:/core/ui/Buttons/ipfs/export/content",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/tags/ViewToolbar",
"caption": "{{$:/core/images/excise}} {{$:/language/Buttons/Ipfs/Export/Content/Caption}}",
"description": "{{$:/language/Buttons/Ipfs/Export/Content/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-ipfs-export-content\" param=<<currentTiddler>> tooltip={{$:/language/Buttons/Ipfs/Export/Content/Hint}} aria-label={{$:/language/Buttons/Ipfs/Export/Content/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/excise}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Ipfs/Export/Content/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/ipfs/export": {
"title": "$:/core/ui/Buttons/ipfs/export",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/tags/ViewToolbar",
"caption": "{{$:/core/images/excise}} {{$:/language/Buttons/Ipfs/Export/Caption}}",
"description": "{{$:/language/Buttons/Ipfs/Export/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-ipfs-export\" param=<<currentTiddler>> tooltip={{$:/language/Buttons/Ipfs/Export/Hint}} aria-label={{$:/language/Buttons/Ipfs/Export/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/excise}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Ipfs/Export/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/ipfs/refresh": {
"title": "$:/core/ui/Buttons/ipfs/refresh",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/tags/ViewToolbar",
"caption": "{{$:/core/images/refresh-button}} {{$:/language/Buttons/Ipfs/Refresh/Caption}}",
"description": "{{$:/language/Buttons/Ipfs/Refresh/Hint}}",
"text": "<$button message=\"tm-refresh-tiddler\" param=<<currentTiddler>> tooltip={{$:/language/Buttons/Ipfs/Refresh/Hint}} aria-label={{$:/language/Buttons/Ipfs/Refresh/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/refresh-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/Ipfs/Refresh/Caption}}/></span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/ipfs/tiddler/pin": {
"title": "$:/core/ui/Buttons/ipfs/tiddler/pin",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/tags/ViewToolbar",
"caption": "{{$:/core/images/chevron-up}} {{$:/language/Buttons/Ipfs/Tiddler/Pin/Caption}}",
"description": "{{$:/language/Buttons/Ipfs/Tiddler/Pin/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-ipfs-pin\" param=<<currentTiddler>> tooltip={{$:/language/Buttons/Ipfs/Tiddler/Pin/Hint}} aria-label={{$:/language/Buttons/Ipfs/Tiddler/Pin/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/chevron-up}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Ipfs/Tiddler/Pin/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/core/ui/Buttons/ipfs/tiddler/unpin": {
"title": "$:/core/ui/Buttons/ipfs/tiddler/unpin",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/tags/ViewToolbar",
"caption": "{{$:/core/images/chevron-down}} {{$:/language/Buttons/Ipfs/Tiddler/Unpin/Caption}}",
"description": "{{$:/language/Buttons/Ipfs/Tiddler/Unpin/Hint}}",
"text": "\\whitespace trim\n<$button message=\"tm-ipfs-unpin\" param=<<currentTiddler>> tooltip={{$:/language/Buttons/Ipfs/Tiddler/Unpin/Hint}} aria-label={{$:/language/Buttons/Ipfs/Tiddler/Unpin/Caption}} class=<<tv-config-toolbar-class>>>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/core/images/chevron-down}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\">\n<$text text=\" \"/>\n<$text text={{$:/language/Buttons/Ipfs/Tiddler/Unpin/Caption}}/>\n</span>\n</$list>\n</$button>"
},
"$:/plugins/ipfs/styles": {
"title": "$:/plugins/ipfs/styles",
"modified": "20200528094915385",
"tags": "$:/ipfs/core $:/tags/Stylesheet",
"type": "text/css",
"text": ".tc-ipfs-action {\n display: block;\n margin: auto;\n width: 18px;\n height: 18px;\n}\n\n.tc-icon-ipfs-wrapper {\n display: inline-block;\n width: 1em;\n height: 1em;\n}\n\na.tc-ipfs-link-external {\n\ttext-decoration: underline;\n\tcolor: <<colour external-link-foreground>>;\n\tbackground-color: <<colour external-link-background>>;\n}\n\na.tc-ipfs-link-external:visited {\n\tcolor: <<colour external-link-foreground-visited>>;\n\tbackground-color: <<colour external-link-background-visited>>;\n}\n\na.tc-ipfs-link-external:hover {\n\tcolor: <<colour external-link-foreground-hover>>;\n\tbackground-color: <<colour external-link-background-hover>>;\n cursor: pointer;\n}"
}
}
}
.tc-image-documentation {
display: block;
margin-left: auto;
margin-right: auto;
width: 90%;
border: 1px solid black;
}
.tc-image-documentation-small {
display: block;
margin-left: auto;
margin-right: auto;
width: 50%;
border: 1px solid black;
}
{
"tiddlers": {
"$:/plugins/tiddlywiki/browser-sniff/sniff.js": {
"title": "$:/plugins/tiddlywiki/browser-sniff/sniff.js",
"text": "/*\\\ntitle: $:/plugins/tiddlywiki/browser-sniff/sniff.js\ntype: application/javascript\nmodule-type: info\n\nInitialise $:/info/browser tiddlers\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nexports.getInfoTiddlerFields = function() {\n\tvar mapBoolean = function(value) {return value ? \"yes\" : \"no\";},\n\t\tinfoTiddlerFields = [];\n\t// Basics\n\tif($tw.browser) {\n\t\t// Mappings from tiddler titles (prefixed with \"$:/info/browser/\") to bowser.browser property name\n\t\tvar bowser = require(\"$:/plugins/tiddlywiki/browser-sniff/bowser/bowser.js\"),\n\t\t\tmappings = [\n\t\t\t\t[\"name\",\"name\",\"unknown\"],\n\t\t\t\t[\"version\",\"version\"],\n\t\t\t\t[\"is/webkit\",\"webkit\"],\n\t\t\t\t[\"is/gecko\",\"gecko\"],\n\t\t\t\t[\"is/chrome\",\"chrome\"],\n\t\t\t\t[\"is/firefox\",\"firefox\"],\n\t\t\t\t[\"is/ios\",\"ios\"],\n\t\t\t\t[\"is/iphone\",\"iphone\"],\n\t\t\t\t[\"is/ipad\",\"ipad\"],\n\t\t\t\t[\"is/ipod\",\"ios\"],\n\t\t\t\t[\"is/opera\",\"opera\"],\n\t\t\t\t[\"is/phantomjs\",\"phantomjs\"],\n\t\t\t\t[\"is/safari\",\"safari\"],\n\t\t\t\t[\"is/seamonkey\",\"seamonkey\"],\n\t\t\t\t[\"is/blackberry\",\"blackberry\"],\n\t\t\t\t[\"is/webos\",\"webos\"],\n\t\t\t\t[\"is/silk\",\"silk\"],\n\t\t\t\t[\"is/bada\",\"bada\"],\n\t\t\t\t[\"is/tizen\",\"tizen\"],\n\t\t\t\t[\"is/sailfish\",\"sailfish\"],\n\t\t\t\t[\"is/android\",\"android\"],\n\t\t\t\t[\"is/windowsphone\",\"windowsphone\"],\n\t\t\t\t[\"is/firefoxos\",\"firefoxos\"]\n\t\t\t];\n\t\t$tw.utils.each(mappings,function(mapping) {\n\t\t\tvar value = bowser.browser[mapping[1]];\n\t\t\tif(value === undefined) {\n\t\t\t\tvalue = mapping[2];\n\t\t\t}\n\t\t\tif(value === undefined) {\n\t\t\t\tvalue = false;\n\t\t\t}\n\t\t\tif(typeof value === \"boolean\") {\n\t\t\t\tvalue = mapBoolean(value);\n\t\t\t}\n\t\t\tinfoTiddlerFields.push({title: \"$:/info/browser/\" + mapping[0], text: value});\n\t\t});\n\t\t// Set $:/info/browser/name to the platform with some changes from Bowser\n\t\tvar platform = bowser.browser.name;\n\t\tif(\"iPad iPhone iPod\".split(\" \").indexOf(platform) !== -1) {\n\t\t\tplatform = \"iOS\";\n\t\t}\n\t\tinfoTiddlerFields.push({title: \"$:/info/browser/name\", text: platform});\n\t\t// Non-bowser settings for TiddlyFox and TiddlyDesktop\n\t\tvar hasTiddlyFox = !!document.getElementById(\"tiddlyfox-message-box\"), // Fails because message box is added after page load\n\t\t\tisTiddlyDesktop = false; // Can't detect it until we update TiddlyDesktop to have a distinct useragent string\n\t\t//infoTiddlerFields.push({title: \"$:/info/browser/has/tiddlyfox\", text: mapBoolean(hasTiddlyFox)});\n\t\t//infoTiddlerFields.push({title: \"$:/info/browser/is/tiddlydesktop\", text: mapBoolean(isTiddlyDesktop)});\n\t\tif(isTiddlyDesktop) {\n\t\t\tinfoTiddlerFields.push({title: \"$:/info/browser/name\", text: \"TiddlyDesktop\"});\n\t\t}\n\t}\n\treturn infoTiddlerFields;\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "info"
},
"$:/plugins/tiddlywiki/browser-sniff/bowser/bowser.js": {
"text": "/*!\n * Bowser - a browser detector\n * https://github.com/ded/bowser\n * MIT License | (c) Dustin Diaz 2014\n */\n\n!function (name, definition) {\n if (typeof module != 'undefined' && module.exports) module.exports['browser'] = definition()\n else if (typeof define == 'function') define(definition)\n else this[name] = definition()\n}('bowser', function () {\n /**\n * See useragents.js for examples of navigator.userAgent\n */\n\n var t = true\n\n function detect(ua) {\n\n function getFirstMatch(regex) {\n var match = ua.match(regex);\n return (match && match.length > 1 && match[1]) || '';\n }\n\n var iosdevice = getFirstMatch(/(ipod|iphone|ipad)/i).toLowerCase()\n , likeAndroid = /like android/i.test(ua)\n , android = !likeAndroid && /android/i.test(ua)\n , versionIdentifier = getFirstMatch(/version\\/(\\d+(\\.\\d+)?)/i)\n , tablet = /tablet/i.test(ua)\n , mobile = !tablet && /[^-]mobi/i.test(ua)\n , result\n\n if (/opera|opr/i.test(ua)) {\n result = {\n name: 'Opera'\n , opera: t\n , version: versionIdentifier || getFirstMatch(/(?:opera|opr)[\\s\\/](\\d+(\\.\\d+)?)/i)\n }\n }\n else if (/windows phone/i.test(ua)) {\n result = {\n name: 'Windows Phone'\n , windowsphone: t\n , msie: t\n , version: getFirstMatch(/iemobile\\/(\\d+(\\.\\d+)?)/i)\n }\n }\n else if (/msie|trident/i.test(ua)) {\n result = {\n name: 'Internet Explorer'\n , msie: t\n , version: getFirstMatch(/(?:msie |rv:)(\\d+(\\.\\d+)?)/i)\n }\n }\n else if (/chrome|crios|crmo/i.test(ua)) {\n result = {\n name: 'Chrome'\n , chrome: t\n , version: getFirstMatch(/(?:chrome|crios|crmo)\\/(\\d+(\\.\\d+)?)/i)\n }\n }\n else if (iosdevice) {\n result = {\n name : iosdevice == 'iphone' ? 'iPhone' : iosdevice == 'ipad' ? 'iPad' : 'iPod'\n }\n // WTF: version is not part of user agent in web apps\n if (versionIdentifier) {\n result.version = versionIdentifier\n }\n }\n else if (/sailfish/i.test(ua)) {\n result = {\n name: 'Sailfish'\n , sailfish: t\n , version: getFirstMatch(/sailfish\\s?browser\\/(\\d+(\\.\\d+)?)/i)\n }\n }\n else if (/seamonkey\\//i.test(ua)) {\n result = {\n name: 'SeaMonkey'\n , seamonkey: t\n , version: getFirstMatch(/seamonkey\\/(\\d+(\\.\\d+)?)/i)\n }\n }\n else if (/firefox|iceweasel/i.test(ua)) {\n result = {\n name: 'Firefox'\n , firefox: t\n , version: getFirstMatch(/(?:firefox|iceweasel)[ \\/](\\d+(\\.\\d+)?)/i)\n }\n if (/\\((mobile|tablet);[^\\)]*rv:[\\d\\.]+\\)/i.test(ua)) {\n result.firefoxos = t\n }\n }\n else if (/silk/i.test(ua)) {\n result = {\n name: 'Amazon Silk'\n , silk: t\n , version : getFirstMatch(/silk\\/(\\d+(\\.\\d+)?)/i)\n }\n }\n else if (android) {\n result = {\n name: 'Android'\n , version: versionIdentifier\n }\n }\n else if (/phantom/i.test(ua)) {\n result = {\n name: 'PhantomJS'\n , phantom: t\n , version: getFirstMatch(/phantomjs\\/(\\d+(\\.\\d+)?)/i)\n }\n }\n else if (/blackberry|\\bbb\\d+/i.test(ua) || /rim\\stablet/i.test(ua)) {\n result = {\n name: 'BlackBerry'\n , blackberry: t\n , version: versionIdentifier || getFirstMatch(/blackberry[\\d]+\\/(\\d+(\\.\\d+)?)/i)\n }\n }\n else if (/(web|hpw)os/i.test(ua)) {\n result = {\n name: 'WebOS'\n , webos: t\n , version: versionIdentifier || getFirstMatch(/w(?:eb)?osbrowser\\/(\\d+(\\.\\d+)?)/i)\n };\n /touchpad\\//i.test(ua) && (result.touchpad = t)\n }\n else if (/bada/i.test(ua)) {\n result = {\n name: 'Bada'\n , bada: t\n , version: getFirstMatch(/dolfin\\/(\\d+(\\.\\d+)?)/i)\n };\n }\n else if (/tizen/i.test(ua)) {\n result = {\n name: 'Tizen'\n , tizen: t\n , version: getFirstMatch(/(?:tizen\\s?)?browser\\/(\\d+(\\.\\d+)?)/i) || versionIdentifier\n };\n }\n else if (/safari/i.test(ua)) {\n result = {\n name: 'Safari'\n , safari: t\n , version: versionIdentifier\n }\n }\n else result = {}\n\n // set webkit or gecko flag for browsers based on these engines\n if (/(apple)?webkit/i.test(ua)) {\n result.name = result.name || \"Webkit\"\n result.webkit = t\n if (!result.version && versionIdentifier) {\n result.version = versionIdentifier\n }\n } else if (!result.opera && /gecko\\//i.test(ua)) {\n result.name = result.name || \"Gecko\"\n result.gecko = t\n result.version = result.version || getFirstMatch(/gecko\\/(\\d+(\\.\\d+)?)/i)\n }\n\n // set OS flags for platforms that have multiple browsers\n if (android || result.silk) {\n result.android = t\n } else if (iosdevice) {\n result[iosdevice] = t\n result.ios = t\n }\n\n // OS version extraction\n var osVersion = '';\n if (iosdevice) {\n osVersion = getFirstMatch(/os (\\d+([_\\s]\\d+)*) like mac os x/i);\n osVersion = osVersion.replace(/[_\\s]/g, '.');\n } else if (android) {\n osVersion = getFirstMatch(/android[ \\/-](\\d+(\\.\\d+)*)/i);\n } else if (result.windowsphone) {\n osVersion = getFirstMatch(/windows phone (?:os)?\\s?(\\d+(\\.\\d+)*)/i);\n } else if (result.webos) {\n osVersion = getFirstMatch(/(?:web|hpw)os\\/(\\d+(\\.\\d+)*)/i);\n } else if (result.blackberry) {\n osVersion = getFirstMatch(/rim\\stablet\\sos\\s(\\d+(\\.\\d+)*)/i);\n } else if (result.bada) {\n osVersion = getFirstMatch(/bada\\/(\\d+(\\.\\d+)*)/i);\n } else if (result.tizen) {\n osVersion = getFirstMatch(/tizen[\\/\\s](\\d+(\\.\\d+)*)/i);\n }\n if (osVersion) {\n result.osversion = osVersion;\n }\n\n // device type extraction\n var osMajorVersion = osVersion.split('.')[0];\n if (tablet || iosdevice == 'ipad' || (android && (osMajorVersion == 3 || (osMajorVersion == 4 && !mobile))) || result.silk) {\n result.tablet = t\n } else if (mobile || iosdevice == 'iphone' || iosdevice == 'ipod' || android || result.blackberry || result.webos || result.bada) {\n result.mobile = t\n }\n\n // Graded Browser Support\n // http://developer.yahoo.com/yui/articles/gbs\n if ((result.msie && result.version >= 10) ||\n (result.chrome && result.version >= 20) ||\n (result.firefox && result.version >= 20.0) ||\n (result.safari && result.version >= 6) ||\n (result.opera && result.version >= 10.0) ||\n (result.ios && result.osversion && result.osversion.split(\".\")[0] >= 6)\n ) {\n result.a = t;\n }\n else if ((result.msie && result.version < 10) ||\n (result.chrome && result.version < 20) ||\n (result.firefox && result.version < 20.0) ||\n (result.safari && result.version < 6) ||\n (result.opera && result.version < 10.0) ||\n (result.ios && result.osversion && result.osversion.split(\".\")[0] < 6)\n ) {\n result.c = t\n } else result.x = t\n\n return result\n }\n\n var bowser = detect(typeof navigator !== 'undefined' ? navigator.userAgent : '')\n\n\n /*\n * Set our detect method to the main bowser object so we can\n * reuse it to test other user agents.\n * This is needed to implement future tests.\n */\n bowser._detect = detect;\n\n return bowser\n});\n",
"type": "application/javascript",
"title": "$:/plugins/tiddlywiki/browser-sniff/bowser/bowser.js",
"module-type": "library"
},
"$:/plugins/tiddlywiki/browser-sniff/readme": {
"title": "$:/plugins/tiddlywiki/browser-sniff/readme",
"text": "This plugin adds a number of `$:/info/` tiddlers containing information about the current browser.\n\nIt allows you to create content that is presented in a way that is responsive to different browsers.\n\nFor example, https://tiddlywiki.com uses this plugin to present the user with the best options for getting started depending on their browser.\n\n[[Source code|https://github.com/Jermolene/TiddlyWiki5/blob/master/plugins/tiddlywiki/browser-sniff]]\n"
},
"$:/plugins/tiddlywiki/browser-sniff/usage": {
"title": "$:/plugins/tiddlywiki/browser-sniff/usage",
"text": "! Information Tiddlers\n\nThe following informational tiddlers are created at startup:\n\n|!Title |!Description |\n|[[$:/info/browser/is/android]] |Running on Android? (\"yes\" or \"no\") |\n|[[$:/info/browser/is/bada]] |Running on Bada? (\"yes\" or \"no\") |\n|[[$:/info/browser/is/blackberry]] |Running on ~BlackBerry? (\"yes\" or \"no\") |\n|[[$:/info/browser/is/chrome]] |Running on Chrome? (\"yes\" or \"no\") |\n|[[$:/info/browser/is/firefox]] |Running on Firefox? (\"yes\" or \"no\") |\n|[[$:/info/browser/is/firefoxos]] |Running on Firefox OS? (\"yes\" or \"no\") |\n|[[$:/info/browser/is/gecko]] |Running on Gecko? (\"yes\" or \"no\") |\n|[[$:/info/browser/is/ios]] |Running on iOS (ie an iPhone, iPad or iPod)? (\"yes\" or \"no\") |\n|[[$:/info/browser/is/ipad]] |Running on iPad? (\"yes\" or \"no\") |\n|[[$:/info/browser/is/iphone]] |Running on iPhone? (\"yes\" or \"no\") |\n|[[$:/info/browser/is/ipod]] |Running on iPod? (\"yes\" or \"no\") |\n|[[$:/info/browser/is/opera]] |Running on Opera? (\"yes\" or \"no\") |\n|[[$:/info/browser/is/phantomjs]] |Running on ~PhantomJS? (\"yes\" or \"no\") |\n|[[$:/info/browser/is/safari]] |Running on Safari? (\"yes\" or \"no\") |\n|[[$:/info/browser/is/sailfish]] |Running on Sailfish? (\"yes\" or \"no\") |\n|[[$:/info/browser/is/seamonkey]] |Running on Sea Monkey? (\"yes\" or \"no\") |\n|[[$:/info/browser/is/silk]] |Running on Amazon's Silk? (\"yes\" or \"no\") |\n|[[$:/info/browser/is/tizen]] |Running on Tizen? (\"yes\" or \"no\") |\n|[[$:/info/browser/is/webkit]] |Running on ~WebKit? (\"yes\" or \"no\") |\n|[[$:/info/browser/is/webos]] |Running on ~WebOS? (\"yes\" or \"no\") |\n|[[$:/info/browser/is/windowsphone]] |Running on Windows Phone? (\"yes\" or \"no\") |\n|[[$:/info/browser/name]] |Platform name (see below) |\n|[[$:/info/browser/version]] |Browser version |\n\nThe browser information is obtained with [[Bowser, a browser detector library from Dustin Diaz|https://github.com/ded/bowser/]]. Possible browser names include:\n\n* ''\"Amazon Silk\"''\n* ''\"Android\"''\n* ''\"Bada\"''\n* ''\"~BlackBerry\"''\n* ''\"Chrome\"''\n* ''\"Firefox\"''\n* ''\"Internet Explorer\"''\n* ''\"iOS\"''\n* ''\"Opera\"''\n* ''\"~PhantomJS\"''\n* ''\"Safari\"''\n* ''\"Sailfish\"''\n* ''\"~SeaMonkey\"''\n* ''\"~TiddlyDesktop\"''\n* ''\"Tizen\"''\n* ''\"~WebOS\"''\n* ''\"Windows Phone\"''\n\nNote that Bowser returns \"iPhone\", \"iPad\" and \"iPod\" as distinct values for the name of the current browser. TiddlyWiki converts all three distinct values into \"iOS\" before copying to [[$:/info/browser/name]].\n"
}
}
}
{
"tiddlers": {
"$:/config/EditorTypeMappings/application/javascript": {
"title": "$:/config/EditorTypeMappings/application/javascript",
"text": "codemirror"
},
"$:/config/EditorTypeMappings/application/json": {
"title": "$:/config/EditorTypeMappings/application/json",
"text": "codemirror"
},
"$:/config/EditorTypeMappings/application/x-tiddler-dictionary": {
"title": "$:/config/EditorTypeMappings/application/x-tiddler-dictionary",
"text": "codemirror"
},
"$:/config/EditorTypeMappings/text/css": {
"title": "$:/config/EditorTypeMappings/text/css",
"text": "codemirror"
},
"$:/config/EditorTypeMappings/text/html": {
"title": "$:/config/EditorTypeMappings/text/html",
"text": "codemirror"
},
"$:/config/EditorTypeMappings/text/plain": {
"title": "$:/config/EditorTypeMappings/text/plain",
"text": "codemirror"
},
"$:/config/EditorTypeMappings/text/vnd.tiddlywiki": {
"title": "$:/config/EditorTypeMappings/text/vnd.tiddlywiki",
"text": "codemirror"
},
"$:/config/EditorTypeMappings/text/x-markdown": {
"title": "$:/config/EditorTypeMappings/text/x-markdown",
"text": "codemirror"
},
"$:/config/EditorTypeMappings/text/x-tiddlywiki": {
"title": "$:/config/EditorTypeMappings/text/x-tiddlywiki",
"text": "codemirror"
},
"$:/config/codemirror/cursorBlinkRate": {
"title": "$:/config/codemirror/cursorBlinkRate",
"type": "integer",
"text": "530"
},
"$:/config/codemirror/extraKeysTW": {
"title": "$:/config/codemirror/extraKeysTW",
"extend": "extraKeys",
"type": "json",
"text": "{\n\t\"Ctrl-Esc\": \"singleSelection\",\n\t\"Esc\": \"\",\n\t\"Ctrl-S\": \"\",\n\t\"Ctrl-U\": \"\",\n\t\"Ctrl-T\": \"\",\n\t\"Alt-T\": \"transposeChars\",\n\t\"Alt-U\": \"undoSelection\",\n\t\"Shift-Alt-U\": \"redoSelection\",\n\t\"Cmd-U\": \"\",\n\t\"Tab\": \"indentAuto()\",\n\t\"Enter\": \"newLineAndIndent()\"\n}\n"
},
"$:/config/codemirror/indentUnit": {
"title": "$:/config/codemirror/indentUnit",
"type": "integer",
"text": "2"
},
"$:/config/codemirror/indentWithTabs": {
"title": "$:/config/codemirror/indentWithTabs",
"type": "bool",
"text": "true"
},
"$:/config/codemirror/inputStyle": {
"title": "$:/config/codemirror/inputStyle",
"type": "string",
"text": "textarea"
},
"$:/config/codemirror/keyMap": {
"title": "$:/config/codemirror/keyMap",
"type": "string",
"text": "default"
},
"$:/config/codemirror/lineNumbers": {
"title": "$:/config/codemirror/lineNumbers",
"type": "bool",
"text": "false"
},
"$:/config/codemirror/lineWrapping": {
"title": "$:/config/codemirror/lineWrapping",
"type": "bool",
"text": "true"
},
"$:/config/codemirror/showCursorWhenSelecting": {
"title": "$:/config/codemirror/showCursorWhenSelecting",
"type": "bool",
"text": "true"
},
"$:/config/codemirror/smartIndent": {
"title": "$:/config/codemirror/smartIndent",
"type": "bool",
"text": "true"
},
"$:/config/codemirror/styleActiveLine": {
"title": "$:/config/codemirror/styleActiveLine",
"type": "bool",
"text": "false"
},
"$:/config/codemirror/tabSize": {
"title": "$:/config/codemirror/tabSize",
"type": "integer",
"text": "2"
},
"$:/config/codemirror/theme": {
"title": "$:/config/codemirror/theme",
"type": "string",
"text": "default"
},
"$:/language/codemirror/homeUrl": {
"title": "$:/language/codemirror/homeUrl",
"text": "http://codemirror.net"
},
"$:/language/codemirror/addOnUrl": {
"title": "$:/language/codemirror/addOnUrl",
"text": "http://codemirror.net/doc/manual.html#addons"
},
"$:/language/codemirror/configUrl": {
"title": "$:/language/codemirror/configUrl",
"text": "http://codemirror.net/doc/manual.html#config"
},
"$:/language/codemirror/controlPanel/hint": {
"title": "$:/language/codemirror/controlPanel/hint",
"text": "These settings let you customise the behaviour of [[CodeMirror|$:/plugins/tiddlywiki/codemirror]]."
},
"$:/language/codemirror/controlPanel/usage": {
"title": "$:/language/codemirror/controlPanel/usage",
"text": "Usage information"
},
"$:/language/codemirror/editorFont/hint": {
"title": "$:/language/codemirror/editorFont/hint",
"text": "Editor font family"
},
"$:/language/codemirror/editorFont/info": {
"title": "$:/language/codemirror/editorFont/info",
"text": "Set the font family for the ~CodeMirror text-editor"
},
"$:/language/codemirror/controlPanel/keyboard": {
"title": "$:/language/codemirror/controlPanel/keyboard",
"text": "Keyboard shortcuts"
},
"$:/language/codemirror/keyMap/hint": {
"title": "$:/language/codemirror/keyMap/hint",
"text": "~CodeMirror keymap"
},
"$:/language/codemirror/keyMap/info": {
"title": "$:/language/codemirror/keyMap/info",
"text": "~The Keyboard KeyMap used within the ~CodeMirror text-editor"
},
"$:/language/codemirror/lineNumbers/hint": {
"title": "$:/language/codemirror/lineNumbers/hint",
"text": "Enable line numbers"
},
"$:/language/codemirror/lineNumbers/info": {
"title": "$:/language/codemirror/lineNumbers/info",
"text": "Whether to show line numbers to the left of the editor."
},
"$:/language/codemirror/lineWrapping/hint": {
"title": "$:/language/codemirror/lineWrapping/hint",
"text": "Enable line wrapping"
},
"$:/language/codemirror/lineWrapping/info": {
"title": "$:/language/codemirror/lineWrapping/info",
"text": "Whether CodeMirror should scroll or wrap for long lines. Defaults to `false` (scroll)."
},
"$:/language/codemirror/showCursorWhenSelecting/hint": {
"title": "$:/language/codemirror/showCursorWhenSelecting/hint",
"text": "Show cursor, when selecting"
},
"$:/language/codemirror/showCursorWhenSelecting/info": {
"title": "$:/language/codemirror/showCursorWhenSelecting/info",
"text": "Whether the cursor should be drawn when a selection is active."
},
"$:/language/codemirror/styleActiveLine/hint": {
"title": "$:/language/codemirror/styleActiveLine/hint",
"text": "Highlight active line"
},
"$:/language/codemirror/styleActiveLine/info": {
"title": "$:/language/codemirror/styleActiveLine/info",
"text": "Whether or not to highlight the active text-editor line"
},
"$:/language/codemirror/theme/hint": {
"title": "$:/language/codemirror/theme/hint",
"text": "Select a theme"
},
"$:/language/codemirror/theme/info": {
"title": "$:/language/codemirror/theme/info",
"text": "Choose between ~CodeMirror themes"
},
"$:/plugins/tiddlywiki/codemirror/edit-codemirror.js": {
"title": "$:/plugins/tiddlywiki/codemirror/edit-codemirror.js",
"text": "/*\\\ntitle: $:/plugins/tiddlywiki/codemirror/edit-codemirror.js\ntype: application/javascript\nmodule-type: widget\n\nEdit-codemirror widget\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar editTextWidgetFactory = require(\"$:/core/modules/editor/factory.js\").editTextWidgetFactory,\n\tCodeMirrorEngine = require(\"$:/plugins/tiddlywiki/codemirror/engine.js\").CodeMirrorEngine;\n\nexports[\"edit-codemirror\"] = editTextWidgetFactory(CodeMirrorEngine,CodeMirrorEngine);\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/plugins/tiddlywiki/codemirror/engine.js": {
"title": "$:/plugins/tiddlywiki/codemirror/engine.js",
"text": "/*\\\ntitle: $:/plugins/tiddlywiki/codemirror/engine.js\ntype: application/javascript\nmodule-type: library\n\nText editor engine based on a CodeMirror instance\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar CODEMIRROR_OPTIONS = \"$:/config/CodeMirror\",\nHEIGHT_VALUE_TITLE = \"$:/config/TextEditor/EditorHeight/Height\",\nCONFIG_FILTER = \"[all[shadows+tiddlers]prefix[$:/config/codemirror/]]\"\n\t\n// Install CodeMirror\nif($tw.browser && !window.CodeMirror) {\n\n\tvar modules = $tw.modules.types[\"codemirror\"];\n\tvar req = Object.getOwnPropertyNames(modules);\n\n\twindow.CodeMirror = require(\"$:/plugins/tiddlywiki/codemirror/lib/codemirror.js\");\n\t// Install required CodeMirror plugins\n\tif(req) {\n\t\tif($tw.utils.isArray(req)) {\n\t\t\tfor(var index=0; index<req.length; index++) {\n\t\t\t\trequire(req[index]);\n\t\t\t}\n\t\t} else {\n\t\t\trequire(req);\n\t\t}\n\t}\n}\n\nfunction getCmConfig() {\n\tvar type,\n\t\ttest,\n\t\tvalue,\n\t\telement,\n\t\textend,\n\t\ttiddler,\n\t\tconfig = {},\n\t\tconfigTiddlers = $tw.wiki.filterTiddlers(CONFIG_FILTER);\n\n\tif ($tw.utils.isArray(configTiddlers)) {\n\t\tfor (var i=0; i<configTiddlers.length; i++) {\n\t\t\ttiddler = $tw.wiki.getTiddler(configTiddlers[i]);\n\t\t\t\tif (tiddler) {\n\t\t\t\telement = configTiddlers[i].replace(/\\$:\\/config\\/codemirror\\//ig,\"\");\n\t\t\t\t\ttype = (tiddler.fields.type) ? tiddler.fields.type.trim().toLocaleLowerCase() : \"string\";\n\t\t\t\tswitch (type) {\n\t\t\t\t\tcase \"bool\":\n\t\t\t\t\ttest = tiddler.fields.text.trim().toLowerCase();\n\t\t\t\t\tvalue = (test === \"true\") ? true : false;\n\t\t\t\t\tconfig[element] = value;\n\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"string\":\n\t\t\t\t\tvalue = tiddler.fields.text.trim();\n\t\t\t\t\tconfig[element] = value;\n\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"integer\":\n\t\t\t\t\tvalue = parseInt(tiddler.fields.text.trim(), 10);\n\t\t\t\t\tconfig[element] = value;\n\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"json\":\n\t\t\t\t\tvalue = JSON.parse(tiddler.fields.text.trim());\n\t\t\t\t\t\textend = (tiddler.fields.extend) ? tiddler.fields.extend : element;\n\n\t\t\t\t\tif (config[extend]) {\n\t\t\t\t\t\t$tw.utils.extend(config[extend], value);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconfig[extend] = value;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn config;\n}\n\nfunction CodeMirrorEngine(options) {\n\n\t// Save our options\n\tvar self = this;\n\toptions = options || {};\n\tthis.widget = options.widget;\n\tthis.value = options.value;\n\tthis.parentNode = options.parentNode;\n\tthis.nextSibling = options.nextSibling;\n\t// Create the wrapper DIV\n\tthis.domNode = this.widget.document.createElement(\"div\");\n\tif(this.widget.editClass) {\n\t\tthis.domNode.className = this.widget.editClass;\n\t}\n\tthis.domNode.style.display = \"inline-block\";\n\tthis.parentNode.insertBefore(this.domNode,this.nextSibling);\n\tthis.widget.domNodes.push(this.domNode);\n\t\n\t// Set all cm-plugin defaults\n\t// Get the configuration options for the CodeMirror object\n\tvar config = getCmConfig();\n\n\tconfig.mode = options.type;\n\tconfig.value = options.value;\n\tif(this.widget.editTabIndex) {\n\t\tconfig[\"tabindex\"] = this.widget.editTabIndex;\n\t}\n\t// Create the CodeMirror instance\n\tthis.cm = window.CodeMirror(function(cmDomNode) {\n\t\t// Note that this is a synchronous callback that is called before the constructor returns\n\t\tif(!self.widget.document.isTiddlyWikiFakeDom) {\n\t\t\tself.domNode.appendChild(cmDomNode);\n\t\t}\n\t},config);\n\n\t// Set up a change event handler\n\tthis.cm.on(\"change\",function() {\n\t\tself.widget.saveChanges(self.getText());\n\t});\n\tthis.cm.on(\"drop\",function(cm,event) {\n\t\tevent.stopPropagation(); // Otherwise TW's dropzone widget sees the drop event\n\t\treturn false;\n\t});\n\tthis.cm.on(\"keydown\",function(cm,event) {\n\t\treturn self.widget.handleKeydownEvent.call(self.widget,event);\n\t});\n}\n\n/*\nSet the text of the engine if it doesn't currently have focus\n*/\nCodeMirrorEngine.prototype.setText = function(text,type) {\n\tvar self = this;\n\tself.cm.setOption(\"mode\",type);\n\tif(!this.cm.hasFocus()) {\n\t\tthis.cm.setValue(text);\n\t}\n};\n\n/*\nGet the text of the engine\n*/\nCodeMirrorEngine.prototype.getText = function() {\n\treturn this.cm.getValue();\n};\n\n/*\nFix the height of textarea to fit content\n*/\nCodeMirrorEngine.prototype.fixHeight = function() {\n\tif(this.widget.editAutoHeight) {\n\t\t// Resize to fit\n\t\tthis.cm.setSize(null,null);\n\t} else {\n\t\tvar fixedHeight = parseInt(this.widget.wiki.getTiddlerText(HEIGHT_VALUE_TITLE,\"400px\"),10);\n\t\tfixedHeight = Math.max(fixedHeight,20);\n\t\tthis.cm.setSize(null,fixedHeight);\n\t}\n};\n\n/*\nFocus the engine node\n*/\nCodeMirrorEngine.prototype.focus = function() {\n\tthis.cm.focus();\n}\n\n/*\nCreate a blank structure representing a text operation\n*/\nCodeMirrorEngine.prototype.createTextOperation = function() {\n\tvar selections = this.cm.listSelections();\n\tif(selections.length > 0) {\n\t\tvar anchorPos = this.cm.indexFromPos(selections[0].anchor),\n\t\theadPos = this.cm.indexFromPos(selections[0].head);\n\t}\n\tvar operation = {\n\t\ttext: this.cm.getValue(),\n\t\tselStart: Math.min(anchorPos,headPos),\n\t\tselEnd: Math.max(anchorPos,headPos),\n\t\tcutStart: null,\n\t\tcutEnd: null,\n\t\treplacement: null,\n\t\tnewSelStart: null,\n\t\tnewSelEnd: null\n\t};\n\toperation.selection = operation.text.substring(operation.selStart,operation.selEnd);\n\treturn operation;\n};\n\n/*\nExecute a text operation\n*/\nCodeMirrorEngine.prototype.executeTextOperation = function(operation) {\n\t// Perform the required changes to the text area and the underlying tiddler\n\tvar newText = operation.text;\n\tif(operation.replacement !== null) {\n\t\tthis.cm.replaceRange(operation.replacement,this.cm.posFromIndex(operation.cutStart),this.cm.posFromIndex(operation.cutEnd));\n\t\tthis.cm.setSelection(this.cm.posFromIndex(operation.newSelStart),this.cm.posFromIndex(operation.newSelEnd));\n\t\tnewText = operation.text.substring(0,operation.cutStart) + operation.replacement + operation.text.substring(operation.cutEnd);\n\t}\n\tthis.cm.focus();\n\treturn newText;\n};\n\nexports.CodeMirrorEngine = CodeMirrorEngine;\n\n})();\n",
"type": "application/javascript",
"module-type": "library"
},
"$:/plugins/tiddlywiki/codemirror/lib/codemirror.js": {
"text": "!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):e.CodeMirror=t()}(this,function(){\"use strict\";var e=navigator.userAgent,t=navigator.platform,r=/gecko\\/\\d/i.test(e),n=/MSIE \\d/.test(e),i=/Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(e),o=/Edge\\/(\\d+)/.exec(e),l=n||i||o,s=l&&(n?document.documentMode||6:+(o||i)[1]),a=!o&&/WebKit\\//.test(e),u=a&&/Qt\\/\\d+\\.\\d+/.test(e),c=!o&&/Chrome\\//.test(e),h=/Opera\\//.test(e),f=/Apple Computer/.test(navigator.vendor),d=/Mac OS X 1\\d\\D([8-9]|\\d\\d)\\D/.test(e),p=/PhantomJS/.test(e),g=!o&&/AppleWebKit/.test(e)&&/Mobile\\/\\w+/.test(e),v=/Android/.test(e),m=g||v||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(e),y=g||/Mac/.test(t),b=/\\bCrOS\\b/.test(e),w=/win/i.test(t),x=h&&e.match(/Version\\/(\\d*\\.\\d*)/);x&&(x=Number(x[1])),x&&x>=15&&(h=!1,a=!0);var C=y&&(u||h&&(null==x||x<12.11)),S=r||l&&s>=9;function L(e){return new RegExp(\"(^|\\\\s)\"+e+\"(?:$|\\\\s)\\\\s*\")}var k,T=function(e,t){var r=e.className,n=L(t).exec(r);if(n){var i=r.slice(n.index+n[0].length);e.className=r.slice(0,n.index)+(i?n[1]+i:\"\")}};function M(e){for(var t=e.childNodes.length;t>0;--t)e.removeChild(e.firstChild);return e}function N(e,t){return M(e).appendChild(t)}function O(e,t,r,n){var i=document.createElement(e);if(r&&(i.className=r),n&&(i.style.cssText=n),\"string\"==typeof t)i.appendChild(document.createTextNode(t));else if(t)for(var o=0;o<t.length;++o)i.appendChild(t[o]);return i}function A(e,t,r,n){var i=O(e,t,r,n);return i.setAttribute(\"role\",\"presentation\"),i}function D(e,t){if(3==t.nodeType&&(t=t.parentNode),e.contains)return e.contains(t);do{if(11==t.nodeType&&(t=t.host),t==e)return!0}while(t=t.parentNode)}function W(){var e;try{e=document.activeElement}catch(t){e=document.body||null}for(;e&&e.shadowRoot&&e.shadowRoot.activeElement;)e=e.shadowRoot.activeElement;return e}function H(e,t){var r=e.className;L(t).test(r)||(e.className+=(r?\" \":\"\")+t)}function F(e,t){for(var r=e.split(\" \"),n=0;n<r.length;n++)r[n]&&!L(r[n]).test(t)&&(t+=\" \"+r[n]);return t}k=document.createRange?function(e,t,r,n){var i=document.createRange();return i.setEnd(n||e,r),i.setStart(e,t),i}:function(e,t,r){var n=document.body.createTextRange();try{n.moveToElementText(e.parentNode)}catch(e){return n}return n.collapse(!0),n.moveEnd(\"character\",r),n.moveStart(\"character\",t),n};var P=function(e){e.select()};function E(e){var t=Array.prototype.slice.call(arguments,1);return function(){return e.apply(null,t)}}function z(e,t,r){for(var n in t||(t={}),e)!e.hasOwnProperty(n)||!1===r&&t.hasOwnProperty(n)||(t[n]=e[n]);return t}function I(e,t,r,n,i){null==t&&-1==(t=e.search(/[^\\s\\u00a0]/))&&(t=e.length);for(var o=n||0,l=i||0;;){var s=e.indexOf(\"\\t\",o);if(s<0||s>=t)return l+(t-o);l+=s-o,l+=r-l%r,o=s+1}}g?P=function(e){e.selectionStart=0,e.selectionEnd=e.value.length}:l&&(P=function(e){try{e.select()}catch(e){}});var R=function(){this.id=null};function B(e,t){for(var r=0;r<e.length;++r)if(e[r]==t)return r;return-1}R.prototype.set=function(e,t){clearTimeout(this.id),this.id=setTimeout(t,e)};var G=30,U={toString:function(){return\"CodeMirror.Pass\"}},V={scroll:!1},K={origin:\"*mouse\"},j={origin:\"+move\"};function X(e,t,r){for(var n=0,i=0;;){var o=e.indexOf(\"\\t\",n);-1==o&&(o=e.length);var l=o-n;if(o==e.length||i+l>=t)return n+Math.min(l,t-i);if(i+=o-n,n=o+1,(i+=r-i%r)>=t)return n}}var Y=[\"\"];function _(e){for(;Y.length<=e;)Y.push(q(Y)+\" \");return Y[e]}function q(e){return e[e.length-1]}function $(e,t){for(var r=[],n=0;n<e.length;n++)r[n]=t(e[n],n);return r}function Z(){}function Q(e,t){var r;return Object.create?r=Object.create(e):(Z.prototype=e,r=new Z),t&&z(t,r),r}var J=/[\\u00df\\u0587\\u0590-\\u05f4\\u0600-\\u06ff\\u3040-\\u309f\\u30a0-\\u30ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\uac00-\\ud7af]/;function ee(e){return/\\w/.test(e)||e>\"\"&&(e.toUpperCase()!=e.toLowerCase()||J.test(e))}function te(e,t){return t?!!(t.source.indexOf(\"\\\\w\")>-1&&ee(e))||t.test(e):ee(e)}function re(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return!1;return!0}var ne=/[\\u0300-\\u036f\\u0483-\\u0489\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u065e\\u0670\\u06d6-\\u06dc\\u06de-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07eb-\\u07f3\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0900-\\u0902\\u093c\\u0941-\\u0948\\u094d\\u0951-\\u0955\\u0962\\u0963\\u0981\\u09bc\\u09be\\u09c1-\\u09c4\\u09cd\\u09d7\\u09e2\\u09e3\\u0a01\\u0a02\\u0a3c\\u0a41\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a70\\u0a71\\u0a75\\u0a81\\u0a82\\u0abc\\u0ac1-\\u0ac5\\u0ac7\\u0ac8\\u0acd\\u0ae2\\u0ae3\\u0b01\\u0b3c\\u0b3e\\u0b3f\\u0b41-\\u0b44\\u0b4d\\u0b56\\u0b57\\u0b62\\u0b63\\u0b82\\u0bbe\\u0bc0\\u0bcd\\u0bd7\\u0c3e-\\u0c40\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0cbc\\u0cbf\\u0cc2\\u0cc6\\u0ccc\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0d3e\\u0d41-\\u0d44\\u0d4d\\u0d57\\u0d62\\u0d63\\u0dca\\u0dcf\\u0dd2-\\u0dd4\\u0dd6\\u0ddf\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0eb1\\u0eb4-\\u0eb9\\u0ebb\\u0ebc\\u0ec8-\\u0ecd\\u0f18\\u0f19\\u0f35\\u0f37\\u0f39\\u0f71-\\u0f7e\\u0f80-\\u0f84\\u0f86\\u0f87\\u0f90-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102d-\\u1030\\u1032-\\u1037\\u1039\\u103a\\u103d\\u103e\\u1058\\u1059\\u105e-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108d\\u109d\\u135f\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b7-\\u17bd\\u17c6\\u17c9-\\u17d3\\u17dd\\u180b-\\u180d\\u18a9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193b\\u1a17\\u1a18\\u1a56\\u1a58-\\u1a5e\\u1a60\\u1a62\\u1a65-\\u1a6c\\u1a73-\\u1a7c\\u1a7f\\u1b00-\\u1b03\\u1b34\\u1b36-\\u1b3a\\u1b3c\\u1b42\\u1b6b-\\u1b73\\u1b80\\u1b81\\u1ba2-\\u1ba5\\u1ba8\\u1ba9\\u1c2c-\\u1c33\\u1c36\\u1c37\\u1cd0-\\u1cd2\\u1cd4-\\u1ce0\\u1ce2-\\u1ce8\\u1ced\\u1dc0-\\u1de6\\u1dfd-\\u1dff\\u200c\\u200d\\u20d0-\\u20f0\\u2cef-\\u2cf1\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\ua66f-\\ua672\\ua67c\\ua67d\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua825\\ua826\\ua8c4\\ua8e0-\\ua8f1\\ua926-\\ua92d\\ua947-\\ua951\\ua980-\\ua982\\ua9b3\\ua9b6-\\ua9b9\\ua9bc\\uaa29-\\uaa2e\\uaa31\\uaa32\\uaa35\\uaa36\\uaa43\\uaa4c\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uabe5\\uabe8\\uabed\\udc00-\\udfff\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe26\\uff9e\\uff9f]/;function ie(e){return e.charCodeAt(0)>=768&&ne.test(e)}function oe(e,t,r){for(;(r<0?t>0:t<e.length)&&ie(e.charAt(t));)t+=r;return t}function le(e,t,r){for(var n=t>r?-1:1;;){if(t==r)return t;var i=(t+r)/2,o=n<0?Math.ceil(i):Math.floor(i);if(o==t)return e(o)?t:r;e(o)?r=o:t=o+n}}function se(e,t){if((t-=e.first)<0||t>=e.size)throw new Error(\"There is no line \"+(t+e.first)+\" in the document.\");for(var r=e;!r.lines;)for(var n=0;;++n){var i=r.children[n],o=i.chunkSize();if(t<o){r=i;break}t-=o}return r.lines[t]}function ae(e,t,r){var n=[],i=t.line;return e.iter(t.line,r.line+1,function(e){var o=e.text;i==r.line&&(o=o.slice(0,r.ch)),i==t.line&&(o=o.slice(t.ch)),n.push(o),++i}),n}function ue(e,t,r){var n=[];return e.iter(t,r,function(e){n.push(e.text)}),n}function ce(e,t){var r=t-e.height;if(r)for(var n=e;n;n=n.parent)n.height+=r}function he(e){if(null==e.parent)return null;for(var t=e.parent,r=B(t.lines,e),n=t.parent;n;t=n,n=n.parent)for(var i=0;n.children[i]!=t;++i)r+=n.children[i].chunkSize();return r+t.first}function fe(e,t){var r=e.first;e:do{for(var n=0;n<e.children.length;++n){var i=e.children[n],o=i.height;if(t<o){e=i;continue e}t-=o,r+=i.chunkSize()}return r}while(!e.lines);for(var l=0;l<e.lines.length;++l){var s=e.lines[l].height;if(t<s)break;t-=s}return r+l}function de(e,t){return t>=e.first&&t<e.first+e.size}function pe(e,t){return String(e.lineNumberFormatter(t+e.firstLineNumber))}function ge(e,t,r){if(void 0===r&&(r=null),!(this instanceof ge))return new ge(e,t,r);this.line=e,this.ch=t,this.sticky=r}function ve(e,t){return e.line-t.line||e.ch-t.ch}function me(e,t){return e.sticky==t.sticky&&0==ve(e,t)}function ye(e){return ge(e.line,e.ch)}function be(e,t){return ve(e,t)<0?t:e}function we(e,t){return ve(e,t)<0?e:t}function xe(e,t){return Math.max(e.first,Math.min(t,e.first+e.size-1))}function Ce(e,t){if(t.line<e.first)return ge(e.first,0);var r,n,i,o=e.first+e.size-1;return t.line>o?ge(o,se(e,o).text.length):(r=t,n=se(e,t.line).text.length,null==(i=r.ch)||i>n?ge(r.line,n):i<0?ge(r.line,0):r)}function Se(e,t){for(var r=[],n=0;n<t.length;n++)r[n]=Ce(e,t[n]);return r}var Le=!1,ke=!1;function Te(e,t,r){this.marker=e,this.from=t,this.to=r}function Me(e,t){if(e)for(var r=0;r<e.length;++r){var n=e[r];if(n.marker==t)return n}}function Ne(e,t){for(var r,n=0;n<e.length;++n)e[n]!=t&&(r||(r=[])).push(e[n]);return r}function Oe(e,t){if(t.full)return null;var r=de(e,t.from.line)&&se(e,t.from.line).markedSpans,n=de(e,t.to.line)&&se(e,t.to.line).markedSpans;if(!r&&!n)return null;var i=t.from.ch,o=t.to.ch,l=0==ve(t.from,t.to),s=function(e,t,r){var n;if(e)for(var i=0;i<e.length;++i){var o=e[i],l=o.marker;if(null==o.from||(l.inclusiveLeft?o.from<=t:o.from<t)||o.from==t&&\"bookmark\"==l.type&&(!r||!o.marker.insertLeft)){var s=null==o.to||(l.inclusiveRight?o.to>=t:o.to>t);(n||(n=[])).push(new Te(l,o.from,s?null:o.to))}}return n}(r,i,l),a=function(e,t,r){var n;if(e)for(var i=0;i<e.length;++i){var o=e[i],l=o.marker;if(null==o.to||(l.inclusiveRight?o.to>=t:o.to>t)||o.from==t&&\"bookmark\"==l.type&&(!r||o.marker.insertLeft)){var s=null==o.from||(l.inclusiveLeft?o.from<=t:o.from<t);(n||(n=[])).push(new Te(l,s?null:o.from-t,null==o.to?null:o.to-t))}}return n}(n,o,l),u=1==t.text.length,c=q(t.text).length+(u?i:0);if(s)for(var h=0;h<s.length;++h){var f=s[h];if(null==f.to){var d=Me(a,f.marker);d?u&&(f.to=null==d.to?null:d.to+c):f.to=i}}if(a)for(var p=0;p<a.length;++p){var g=a[p];if(null!=g.to&&(g.to+=c),null==g.from)Me(s,g.marker)||(g.from=c,u&&(s||(s=[])).push(g));else g.from+=c,u&&(s||(s=[])).push(g)}s&&(s=Ae(s)),a&&a!=s&&(a=Ae(a));var v=[s];if(!u){var m,y=t.text.length-2;if(y>0&&s)for(var b=0;b<s.length;++b)null==s[b].to&&(m||(m=[])).push(new Te(s[b].marker,null,null));for(var w=0;w<y;++w)v.push(m);v.push(a)}return v}function Ae(e){for(var t=0;t<e.length;++t){var r=e[t];null!=r.from&&r.from==r.to&&!1!==r.marker.clearWhenEmpty&&e.splice(t--,1)}return e.length?e:null}function De(e){var t=e.markedSpans;if(t){for(var r=0;r<t.length;++r)t[r].marker.detachLine(e);e.markedSpans=null}}function We(e,t){if(t){for(var r=0;r<t.length;++r)t[r].marker.attachLine(e);e.markedSpans=t}}function He(e){return e.inclusiveLeft?-1:0}function Fe(e){return e.inclusiveRight?1:0}function Pe(e,t){var r=e.lines.length-t.lines.length;if(0!=r)return r;var n=e.find(),i=t.find(),o=ve(n.from,i.from)||He(e)-He(t);if(o)return-o;var l=ve(n.to,i.to)||Fe(e)-Fe(t);return l||t.id-e.id}function Ee(e,t){var r,n=ke&&e.markedSpans;if(n)for(var i=void 0,o=0;o<n.length;++o)(i=n[o]).marker.collapsed&&null==(t?i.from:i.to)&&(!r||Pe(r,i.marker)<0)&&(r=i.marker);return r}function ze(e){return Ee(e,!0)}function Ie(e){return Ee(e,!1)}function Re(e,t,r,n,i){var o=se(e,t),l=ke&&o.markedSpans;if(l)for(var s=0;s<l.length;++s){var a=l[s];if(a.marker.collapsed){var u=a.marker.find(0),c=ve(u.from,r)||He(a.marker)-He(i),h=ve(u.to,n)||Fe(a.marker)-Fe(i);if(!(c>=0&&h<=0||c<=0&&h>=0)&&(c<=0&&(a.marker.inclusiveRight&&i.inclusiveLeft?ve(u.to,r)>=0:ve(u.to,r)>0)||c>=0&&(a.marker.inclusiveRight&&i.inclusiveLeft?ve(u.from,n)<=0:ve(u.from,n)<0)))return!0}}}function Be(e){for(var t;t=ze(e);)e=t.find(-1,!0).line;return e}function Ge(e,t){var r=se(e,t),n=Be(r);return r==n?t:he(n)}function Ue(e,t){if(t>e.lastLine())return t;var r,n=se(e,t);if(!Ve(e,n))return t;for(;r=Ie(n);)n=r.find(1,!0).line;return he(n)+1}function Ve(e,t){var r=ke&&t.markedSpans;if(r)for(var n=void 0,i=0;i<r.length;++i)if((n=r[i]).marker.collapsed){if(null==n.from)return!0;if(!n.marker.widgetNode&&0==n.from&&n.marker.inclusiveLeft&&Ke(e,t,n))return!0}}function Ke(e,t,r){if(null==r.to){var n=r.marker.find(1,!0);return Ke(e,n.line,Me(n.line.markedSpans,r.marker))}if(r.marker.inclusiveRight&&r.to==t.text.length)return!0;for(var i=void 0,o=0;o<t.markedSpans.length;++o)if((i=t.markedSpans[o]).marker.collapsed&&!i.marker.widgetNode&&i.from==r.to&&(null==i.to||i.to!=r.from)&&(i.marker.inclusiveLeft||r.marker.inclusiveRight)&&Ke(e,t,i))return!0}function je(e){for(var t=0,r=(e=Be(e)).parent,n=0;n<r.lines.length;++n){var i=r.lines[n];if(i==e)break;t+=i.height}for(var o=r.parent;o;o=(r=o).parent)for(var l=0;l<o.children.length;++l){var s=o.children[l];if(s==r)break;t+=s.height}return t}function Xe(e){if(0==e.height)return 0;for(var t,r=e.text.length,n=e;t=ze(n);){var i=t.find(0,!0);n=i.from.line,r+=i.from.ch-i.to.ch}for(n=e;t=Ie(n);){var o=t.find(0,!0);r-=n.text.length-o.from.ch,r+=(n=o.to.line).text.length-o.to.ch}return r}function Ye(e){var t=e.display,r=e.doc;t.maxLine=se(r,r.first),t.maxLineLength=Xe(t.maxLine),t.maxLineChanged=!0,r.iter(function(e){var r=Xe(e);r>t.maxLineLength&&(t.maxLineLength=r,t.maxLine=e)})}var _e=null;function qe(e,t,r){var n;_e=null;for(var i=0;i<e.length;++i){var o=e[i];if(o.from<t&&o.to>t)return i;o.to==t&&(o.from!=o.to&&\"before\"==r?n=i:_e=i),o.from==t&&(o.from!=o.to&&\"before\"!=r?n=i:_e=i)}return null!=n?n:_e}var $e=function(){var e=\"bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN\",t=\"nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111\";var r=/[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/,n=/[stwN]/,i=/[LRr]/,o=/[Lb1n]/,l=/[1n]/;function s(e,t,r){this.level=e,this.from=t,this.to=r}return function(a,u){var c=\"ltr\"==u?\"L\":\"R\";if(0==a.length||\"ltr\"==u&&!r.test(a))return!1;for(var h,f=a.length,d=[],p=0;p<f;++p)d.push((h=a.charCodeAt(p))<=247?e.charAt(h):1424<=h&&h<=1524?\"R\":1536<=h&&h<=1785?t.charAt(h-1536):1774<=h&&h<=2220?\"r\":8192<=h&&h<=8203?\"w\":8204==h?\"b\":\"L\");for(var g=0,v=c;g<f;++g){var m=d[g];\"m\"==m?d[g]=v:v=m}for(var y=0,b=c;y<f;++y){var w=d[y];\"1\"==w&&\"r\"==b?d[y]=\"n\":i.test(w)&&(b=w,\"r\"==w&&(d[y]=\"R\"))}for(var x=1,C=d[0];x<f-1;++x){var S=d[x];\"+\"==S&&\"1\"==C&&\"1\"==d[x+1]?d[x]=\"1\":\",\"!=S||C!=d[x+1]||\"1\"!=C&&\"n\"!=C||(d[x]=C),C=S}for(var L=0;L<f;++L){var k=d[L];if(\",\"==k)d[L]=\"N\";else if(\"%\"==k){var T=void 0;for(T=L+1;T<f&&\"%\"==d[T];++T);for(var M=L&&\"!\"==d[L-1]||T<f&&\"1\"==d[T]?\"1\":\"N\",N=L;N<T;++N)d[N]=M;L=T-1}}for(var O=0,A=c;O<f;++O){var D=d[O];\"L\"==A&&\"1\"==D?d[O]=\"L\":i.test(D)&&(A=D)}for(var W=0;W<f;++W)if(n.test(d[W])){var H=void 0;for(H=W+1;H<f&&n.test(d[H]);++H);for(var F=\"L\"==(W?d[W-1]:c),P=F==(\"L\"==(H<f?d[H]:c))?F?\"L\":\"R\":c,E=W;E<H;++E)d[E]=P;W=H-1}for(var z,I=[],R=0;R<f;)if(o.test(d[R])){var B=R;for(++R;R<f&&o.test(d[R]);++R);I.push(new s(0,B,R))}else{var G=R,U=I.length;for(++R;R<f&&\"L\"!=d[R];++R);for(var V=G;V<R;)if(l.test(d[V])){G<V&&I.splice(U,0,new s(1,G,V));var K=V;for(++V;V<R&&l.test(d[V]);++V);I.splice(U,0,new s(2,K,V)),G=V}else++V;G<R&&I.splice(U,0,new s(1,G,R))}return\"ltr\"==u&&(1==I[0].level&&(z=a.match(/^\\s+/))&&(I[0].from=z[0].length,I.unshift(new s(0,0,z[0].length))),1==q(I).level&&(z=a.match(/\\s+$/))&&(q(I).to-=z[0].length,I.push(new s(0,f-z[0].length,f)))),\"rtl\"==u?I.reverse():I}}();function Ze(e,t){var r=e.order;return null==r&&(r=e.order=$e(e.text,t)),r}var Qe=[],Je=function(e,t,r){if(e.addEventListener)e.addEventListener(t,r,!1);else if(e.attachEvent)e.attachEvent(\"on\"+t,r);else{var n=e._handlers||(e._handlers={});n[t]=(n[t]||Qe).concat(r)}};function et(e,t){return e._handlers&&e._handlers[t]||Qe}function tt(e,t,r){if(e.removeEventListener)e.removeEventListener(t,r,!1);else if(e.detachEvent)e.detachEvent(\"on\"+t,r);else{var n=e._handlers,i=n&&n[t];if(i){var o=B(i,r);o>-1&&(n[t]=i.slice(0,o).concat(i.slice(o+1)))}}}function rt(e,t){var r=et(e,t);if(r.length)for(var n=Array.prototype.slice.call(arguments,2),i=0;i<r.length;++i)r[i].apply(null,n)}function nt(e,t,r){return\"string\"==typeof t&&(t={type:t,preventDefault:function(){this.defaultPrevented=!0}}),rt(e,r||t.type,e,t),ut(t)||t.codemirrorIgnore}function it(e){var t=e._handlers&&e._handlers.cursorActivity;if(t)for(var r=e.curOp.cursorActivityHandlers||(e.curOp.cursorActivityHandlers=[]),n=0;n<t.length;++n)-1==B(r,t[n])&&r.push(t[n])}function ot(e,t){return et(e,t).length>0}function lt(e){e.prototype.on=function(e,t){Je(this,e,t)},e.prototype.off=function(e,t){tt(this,e,t)}}function st(e){e.preventDefault?e.preventDefault():e.returnValue=!1}function at(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0}function ut(e){return null!=e.defaultPrevented?e.defaultPrevented:0==e.returnValue}function ct(e){st(e),at(e)}function ht(e){return e.target||e.srcElement}function ft(e){var t=e.which;return null==t&&(1&e.button?t=1:2&e.button?t=3:4&e.button&&(t=2)),y&&e.ctrlKey&&1==t&&(t=3),t}var dt,pt,gt=function(){if(l&&s<9)return!1;var e=O(\"div\");return\"draggable\"in e||\"dragDrop\"in e}();function vt(e){if(null==dt){var t=O(\"span\",\"\");N(e,O(\"span\",[t,document.createTextNode(\"x\")])),0!=e.firstChild.offsetHeight&&(dt=t.offsetWidth<=1&&t.offsetHeight>2&&!(l&&s<8))}var r=dt?O(\"span\",\"\"):O(\"span\",\" \",null,\"display: inline-block; width: 1px; margin-right: -1px\");return r.setAttribute(\"cm-text\",\"\"),r}function mt(e){if(null!=pt)return pt;var t=N(e,document.createTextNode(\"AخA\")),r=k(t,0,1).getBoundingClientRect(),n=k(t,1,2).getBoundingClientRect();return M(e),!(!r||r.left==r.right)&&(pt=n.right-r.right<3)}var yt,bt=3!=\"\\n\\nb\".split(/\\n/).length?function(e){for(var t=0,r=[],n=e.length;t<=n;){var i=e.indexOf(\"\\n\",t);-1==i&&(i=e.length);var o=e.slice(t,\"\\r\"==e.charAt(i-1)?i-1:i),l=o.indexOf(\"\\r\");-1!=l?(r.push(o.slice(0,l)),t+=l+1):(r.push(o),t=i+1)}return r}:function(e){return e.split(/\\r\\n?|\\n/)},wt=window.getSelection?function(e){try{return e.selectionStart!=e.selectionEnd}catch(e){return!1}}:function(e){var t;try{t=e.ownerDocument.selection.createRange()}catch(e){}return!(!t||t.parentElement()!=e)&&0!=t.compareEndPoints(\"StartToEnd\",t)},xt=\"oncopy\"in(yt=O(\"div\"))||(yt.setAttribute(\"oncopy\",\"return;\"),\"function\"==typeof yt.oncopy),Ct=null;var St={},Lt={};function kt(e){if(\"string\"==typeof e&&Lt.hasOwnProperty(e))e=Lt[e];else if(e&&\"string\"==typeof e.name&&Lt.hasOwnProperty(e.name)){var t=Lt[e.name];\"string\"==typeof t&&(t={name:t}),(e=Q(t,e)).name=t.name}else{if(\"string\"==typeof e&&/^[\\w\\-]+\\/[\\w\\-]+\\+xml$/.test(e))return kt(\"application/xml\");if(\"string\"==typeof e&&/^[\\w\\-]+\\/[\\w\\-]+\\+json$/.test(e))return kt(\"application/json\")}return\"string\"==typeof e?{name:e}:e||{name:\"null\"}}function Tt(e,t){t=kt(t);var r=St[t.name];if(!r)return Tt(e,\"text/plain\");var n=r(e,t);if(Mt.hasOwnProperty(t.name)){var i=Mt[t.name];for(var o in i)i.hasOwnProperty(o)&&(n.hasOwnProperty(o)&&(n[\"_\"+o]=n[o]),n[o]=i[o])}if(n.name=t.name,t.helperType&&(n.helperType=t.helperType),t.modeProps)for(var l in t.modeProps)n[l]=t.modeProps[l];return n}var Mt={};function Nt(e,t){z(t,Mt.hasOwnProperty(e)?Mt[e]:Mt[e]={})}function Ot(e,t){if(!0===t)return t;if(e.copyState)return e.copyState(t);var r={};for(var n in t){var i=t[n];i instanceof Array&&(i=i.concat([])),r[n]=i}return r}function At(e,t){for(var r;e.innerMode&&(r=e.innerMode(t))&&r.mode!=e;)t=r.state,e=r.mode;return r||{mode:e,state:t}}function Dt(e,t,r){return!e.startState||e.startState(t,r)}var Wt=function(e,t,r){this.pos=this.start=0,this.string=e,this.tabSize=t||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0,this.lineOracle=r};Wt.prototype.eol=function(){return this.pos>=this.string.length},Wt.prototype.sol=function(){return this.pos==this.lineStart},Wt.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},Wt.prototype.next=function(){if(this.pos<this.string.length)return this.string.charAt(this.pos++)},Wt.prototype.eat=function(e){var t=this.string.charAt(this.pos);if(\"string\"==typeof e?t==e:t&&(e.test?e.test(t):e(t)))return++this.pos,t},Wt.prototype.eatWhile=function(e){for(var t=this.pos;this.eat(e););return this.pos>t},Wt.prototype.eatSpace=function(){for(var e=this.pos;/[\\s\\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e},Wt.prototype.skipToEnd=function(){this.pos=this.string.length},Wt.prototype.skipTo=function(e){var t=this.string.indexOf(e,this.pos);if(t>-1)return this.pos=t,!0},Wt.prototype.backUp=function(e){this.pos-=e},Wt.prototype.column=function(){return this.lastColumnPos<this.start&&(this.lastColumnValue=I(this.string,this.start,this.tabSize,this.lastColumnPos,this.lastColumnValue),this.lastColumnPos=this.start),this.lastColumnValue-(this.lineStart?I(this.string,this.lineStart,this.tabSize):0)},Wt.prototype.indentation=function(){return I(this.string,null,this.tabSize)-(this.lineStart?I(this.string,this.lineStart,this.tabSize):0)},Wt.prototype.match=function(e,t,r){if(\"string\"!=typeof e){var n=this.string.slice(this.pos).match(e);return n&&n.index>0?null:(n&&!1!==t&&(this.pos+=n[0].length),n)}var i=function(e){return r?e.toLowerCase():e};if(i(this.string.substr(this.pos,e.length))==i(e))return!1!==t&&(this.pos+=e.length),!0},Wt.prototype.current=function(){return this.string.slice(this.start,this.pos)},Wt.prototype.hideFirstChars=function(e,t){this.lineStart+=e;try{return t()}finally{this.lineStart-=e}},Wt.prototype.lookAhead=function(e){var t=this.lineOracle;return t&&t.lookAhead(e)},Wt.prototype.baseToken=function(){var e=this.lineOracle;return e&&e.baseToken(this.pos)};var Ht=function(e,t){this.state=e,this.lookAhead=t},Ft=function(e,t,r,n){this.state=t,this.doc=e,this.line=r,this.maxLookAhead=n||0,this.baseTokens=null,this.baseTokenPos=1};function Pt(e,t,r,n){var i=[e.state.modeGen],o={};Kt(e,t.text,e.doc.mode,r,function(e,t){return i.push(e,t)},o,n);for(var l=r.state,s=function(n){r.baseTokens=i;var s=e.state.overlays[n],a=1,u=0;r.state=!0,Kt(e,t.text,s.mode,r,function(e,t){for(var r=a;u<e;){var n=i[a];n>e&&i.splice(a,1,e,i[a+1],n),a+=2,u=Math.min(e,n)}if(t)if(s.opaque)i.splice(r,a-r,e,\"overlay \"+t),a=r+2;else for(;r<a;r+=2){var o=i[r+1];i[r+1]=(o?o+\" \":\"\")+\"overlay \"+t}},o),r.state=l,r.baseTokens=null,r.baseTokenPos=1},a=0;a<e.state.overlays.length;++a)s(a);return{styles:i,classes:o.bgClass||o.textClass?o:null}}function Et(e,t,r){if(!t.styles||t.styles[0]!=e.state.modeGen){var n=zt(e,he(t)),i=t.text.length>e.options.maxHighlightLength&&Ot(e.doc.mode,n.state),o=Pt(e,t,n);i&&(n.state=i),t.stateAfter=n.save(!i),t.styles=o.styles,o.classes?t.styleClasses=o.classes:t.styleClasses&&(t.styleClasses=null),r===e.doc.highlightFrontier&&(e.doc.modeFrontier=Math.max(e.doc.modeFrontier,++e.doc.highlightFrontier))}return t.styles}function zt(e,t,r){var n=e.doc,i=e.display;if(!n.mode.startState)return new Ft(n,!0,t);var o=function(e,t,r){for(var n,i,o=e.doc,l=r?-1:t-(e.doc.mode.innerMode?1e3:100),s=t;s>l;--s){if(s<=o.first)return o.first;var a=se(o,s-1),u=a.stateAfter;if(u&&(!r||s+(u instanceof Ht?u.lookAhead:0)<=o.modeFrontier))return s;var c=I(a.text,null,e.options.tabSize);(null==i||n>c)&&(i=s-1,n=c)}return i}(e,t,r),l=o>n.first&&se(n,o-1).stateAfter,s=l?Ft.fromSaved(n,l,o):new Ft(n,Dt(n.mode),o);return n.iter(o,t,function(r){It(e,r.text,s);var n=s.line;r.stateAfter=n==t-1||n%5==0||n>=i.viewFrom&&n<i.viewTo?s.save():null,s.nextLine()}),r&&(n.modeFrontier=s.line),s}function It(e,t,r,n){var i=e.doc.mode,o=new Wt(t,e.options.tabSize,r);for(o.start=o.pos=n||0,\"\"==t&&Rt(i,r.state);!o.eol();)Bt(i,o,r.state),o.start=o.pos}function Rt(e,t){if(e.blankLine)return e.blankLine(t);if(e.innerMode){var r=At(e,t);return r.mode.blankLine?r.mode.blankLine(r.state):void 0}}function Bt(e,t,r,n){for(var i=0;i<10;i++){n&&(n[0]=At(e,r).mode);var o=e.token(t,r);if(t.pos>t.start)return o}throw new Error(\"Mode \"+e.name+\" failed to advance stream.\")}Ft.prototype.lookAhead=function(e){var t=this.doc.getLine(this.line+e);return null!=t&&e>this.maxLookAhead&&(this.maxLookAhead=e),t},Ft.prototype.baseToken=function(e){if(!this.baseTokens)return null;for(;this.baseTokens[this.baseTokenPos]<=e;)this.baseTokenPos+=2;var t=this.baseTokens[this.baseTokenPos+1];return{type:t&&t.replace(/( |^)overlay .*/,\"\"),size:this.baseTokens[this.baseTokenPos]-e}},Ft.prototype.nextLine=function(){this.line++,this.maxLookAhead>0&&this.maxLookAhead--},Ft.fromSaved=function(e,t,r){return t instanceof Ht?new Ft(e,Ot(e.mode,t.state),r,t.lookAhead):new Ft(e,Ot(e.mode,t),r)},Ft.prototype.save=function(e){var t=!1!==e?Ot(this.doc.mode,this.state):this.state;return this.maxLookAhead>0?new Ht(t,this.maxLookAhead):t};var Gt=function(e,t,r){this.start=e.start,this.end=e.pos,this.string=e.current(),this.type=t||null,this.state=r};function Ut(e,t,r,n){var i,o,l=e.doc,s=l.mode,a=se(l,(t=Ce(l,t)).line),u=zt(e,t.line,r),c=new Wt(a.text,e.options.tabSize,u);for(n&&(o=[]);(n||c.pos<t.ch)&&!c.eol();)c.start=c.pos,i=Bt(s,c,u.state),n&&o.push(new Gt(c,i,Ot(l.mode,u.state)));return n?o:new Gt(c,i,u.state)}function Vt(e,t){if(e)for(;;){var r=e.match(/(?:^|\\s+)line-(background-)?(\\S+)/);if(!r)break;e=e.slice(0,r.index)+e.slice(r.index+r[0].length);var n=r[1]?\"bgClass\":\"textClass\";null==t[n]?t[n]=r[2]:new RegExp(\"(?:^|s)\"+r[2]+\"(?:$|s)\").test(t[n])||(t[n]+=\" \"+r[2])}return e}function Kt(e,t,r,n,i,o,l){var s=r.flattenSpans;null==s&&(s=e.options.flattenSpans);var a,u=0,c=null,h=new Wt(t,e.options.tabSize,n),f=e.options.addModeClass&&[null];for(\"\"==t&&Vt(Rt(r,n.state),o);!h.eol();){if(h.pos>e.options.maxHighlightLength?(s=!1,l&&It(e,t,n,h.pos),h.pos=t.length,a=null):a=Vt(Bt(r,h,n.state,f),o),f){var d=f[0].name;d&&(a=\"m-\"+(a?d+\" \"+a:d))}if(!s||c!=a){for(;u<h.start;)i(u=Math.min(h.start,u+5e3),c);c=a}h.start=h.pos}for(;u<h.pos;){var p=Math.min(h.pos,u+5e3);i(p,c),u=p}}var jt=function(e,t,r){this.text=e,We(this,t),this.height=r?r(this):1};jt.prototype.lineNo=function(){return he(this)},lt(jt);var Xt={},Yt={};function _t(e,t){if(!e||/^\\s*$/.test(e))return null;var r=t.addModeClass?Yt:Xt;return r[e]||(r[e]=e.replace(/\\S+/g,\"cm-$&\"))}function qt(e,t){var r=A(\"span\",null,null,a?\"padding-right: .1px\":null),n={pre:A(\"pre\",[r],\"CodeMirror-line\"),content:r,col:0,pos:0,cm:e,trailingSpace:!1,splitSpaces:(l||a)&&e.getOption(\"lineWrapping\")};t.measure={};for(var i=0;i<=(t.rest?t.rest.length:0);i++){var o=i?t.rest[i-1]:t.line,s=void 0;n.pos=0,n.addToken=Zt,mt(e.display.measure)&&(s=Ze(o,e.doc.direction))&&(n.addToken=Qt(n.addToken,s)),n.map=[],er(o,n,Et(e,o,t!=e.display.externalMeasured&&he(o))),o.styleClasses&&(o.styleClasses.bgClass&&(n.bgClass=F(o.styleClasses.bgClass,n.bgClass||\"\")),o.styleClasses.textClass&&(n.textClass=F(o.styleClasses.textClass,n.textClass||\"\"))),0==n.map.length&&n.map.push(0,0,n.content.appendChild(vt(e.display.measure))),0==i?(t.measure.map=n.map,t.measure.cache={}):((t.measure.maps||(t.measure.maps=[])).push(n.map),(t.measure.caches||(t.measure.caches=[])).push({}))}if(a){var u=n.content.lastChild;(/\\bcm-tab\\b/.test(u.className)||u.querySelector&&u.querySelector(\".cm-tab\"))&&(n.content.className=\"cm-tab-wrap-hack\")}return rt(e,\"renderLine\",e,t.line,n.pre),n.pre.className&&(n.textClass=F(n.pre.className,n.textClass||\"\")),n}function $t(e){var t=O(\"span\",\"•\",\"cm-invalidchar\");return t.title=\"\\\\u\"+e.charCodeAt(0).toString(16),t.setAttribute(\"aria-label\",t.title),t}function Zt(e,t,r,n,i,o,a){if(t){var u,c=e.splitSpaces?function(e,t){if(e.length>1&&!/ /.test(e))return e;for(var r=t,n=\"\",i=0;i<e.length;i++){var o=e.charAt(i);\" \"!=o||!r||i!=e.length-1&&32!=e.charCodeAt(i+1)||(o=\" \"),n+=o,r=\" \"==o}return n}(t,e.trailingSpace):t,h=e.cm.state.specialChars,f=!1;if(h.test(t)){u=document.createDocumentFragment();for(var d=0;;){h.lastIndex=d;var p=h.exec(t),g=p?p.index-d:t.length-d;if(g){var v=document.createTextNode(c.slice(d,d+g));l&&s<9?u.appendChild(O(\"span\",[v])):u.appendChild(v),e.map.push(e.pos,e.pos+g,v),e.col+=g,e.pos+=g}if(!p)break;d+=g+1;var m=void 0;if(\"\\t\"==p[0]){var y=e.cm.options.tabSize,b=y-e.col%y;(m=u.appendChild(O(\"span\",_(b),\"cm-tab\"))).setAttribute(\"role\",\"presentation\"),m.setAttribute(\"cm-text\",\"\\t\"),e.col+=b}else\"\\r\"==p[0]||\"\\n\"==p[0]?((m=u.appendChild(O(\"span\",\"\\r\"==p[0]?\"␍\":\"\",\"cm-invalidchar\"))).setAttribute(\"cm-text\",p[0]),e.col+=1):((m=e.cm.options.specialCharPlaceholder(p[0])).setAttribute(\"cm-text\",p[0]),l&&s<9?u.appendChild(O(\"span\",[m])):u.appendChild(m),e.col+=1);e.map.push(e.pos,e.pos+1,m),e.pos++}}else e.col+=t.length,u=document.createTextNode(c),e.map.push(e.pos,e.pos+t.length,u),l&&s<9&&(f=!0),e.pos+=t.length;if(e.trailingSpace=32==c.charCodeAt(t.length-1),r||n||i||f||a){var w=r||\"\";n&&(w+=n),i&&(w+=i);var x=O(\"span\",[u],w,a);return o&&(x.title=o),e.content.appendChild(x)}e.content.appendChild(u)}}function Qt(e,t){return function(r,n,i,o,l,s,a){i=i?i+\" cm-force-border\":\"cm-force-border\";for(var u=r.pos,c=u+n.length;;){for(var h=void 0,f=0;f<t.length&&!((h=t[f]).to>u&&h.from<=u);f++);if(h.to>=c)return e(r,n,i,o,l,s,a);e(r,n.slice(0,h.to-u),i,o,null,s,a),o=null,n=n.slice(h.to-u),u=h.to}}}function Jt(e,t,r,n){var i=!n&&r.widgetNode;i&&e.map.push(e.pos,e.pos+t,i),!n&&e.cm.display.input.needsContentAttribute&&(i||(i=e.content.appendChild(document.createElement(\"span\"))),i.setAttribute(\"cm-marker\",r.id)),i&&(e.cm.display.input.setUneditable(i),e.content.appendChild(i)),e.pos+=t,e.trailingSpace=!1}function er(e,t,r){var n=e.markedSpans,i=e.text,o=0;if(n)for(var l,s,a,u,c,h,f,d=i.length,p=0,g=1,v=\"\",m=0;;){if(m==p){a=u=c=h=s=\"\",f=null,m=1/0;for(var y=[],b=void 0,w=0;w<n.length;++w){var x=n[w],C=x.marker;\"bookmark\"==C.type&&x.from==p&&C.widgetNode?y.push(C):x.from<=p&&(null==x.to||x.to>p||C.collapsed&&x.to==p&&x.from==p)?(null!=x.to&&x.to!=p&&m>x.to&&(m=x.to,u=\"\"),C.className&&(a+=\" \"+C.className),C.css&&(s=(s?s+\";\":\"\")+C.css),C.startStyle&&x.from==p&&(c+=\" \"+C.startStyle),C.endStyle&&x.to==m&&(b||(b=[])).push(C.endStyle,x.to),C.title&&!h&&(h=C.title),C.collapsed&&(!f||Pe(f.marker,C)<0)&&(f=x)):x.from>p&&m>x.from&&(m=x.from)}if(b)for(var S=0;S<b.length;S+=2)b[S+1]==m&&(u+=\" \"+b[S]);if(!f||f.from==p)for(var L=0;L<y.length;++L)Jt(t,0,y[L]);if(f&&(f.from||0)==p){if(Jt(t,(null==f.to?d+1:f.to)-p,f.marker,null==f.from),null==f.to)return;f.to==p&&(f=!1)}}if(p>=d)break;for(var k=Math.min(d,m);;){if(v){var T=p+v.length;if(!f){var M=T>k?v.slice(0,k-p):v;t.addToken(t,M,l?l+a:a,c,p+M.length==m?u:\"\",h,s)}if(T>=k){v=v.slice(k-p),p=k;break}p=T,c=\"\"}v=i.slice(o,o=r[g++]),l=_t(r[g++],t.cm.options)}}else for(var N=1;N<r.length;N+=2)t.addToken(t,i.slice(o,o=r[N]),_t(r[N+1],t.cm.options))}function tr(e,t,r){this.line=t,this.rest=function(e){for(var t,r;t=Ie(e);)e=t.find(1,!0).line,(r||(r=[])).push(e);return r}(t),this.size=this.rest?he(q(this.rest))-r+1:1,this.node=this.text=null,this.hidden=Ve(e,t)}function rr(e,t,r){for(var n,i=[],o=t;o<r;o=n){var l=new tr(e.doc,se(e.doc,o),o);n=o+l.size,i.push(l)}return i}var nr=null;var ir=null;function or(e,t){var r=et(e,t);if(r.length){var n,i=Array.prototype.slice.call(arguments,2);nr?n=nr.delayedCallbacks:ir?n=ir:(n=ir=[],setTimeout(lr,0));for(var o=function(e){n.push(function(){return r[e].apply(null,i)})},l=0;l<r.length;++l)o(l)}}function lr(){var e=ir;ir=null;for(var t=0;t<e.length;++t)e[t]()}function sr(e,t,r,n){for(var i=0;i<t.changes.length;i++){var o=t.changes[i];\"text\"==o?cr(e,t):\"gutter\"==o?fr(e,t,r,n):\"class\"==o?hr(e,t):\"widget\"==o&&dr(e,t,n)}t.changes=null}function ar(e){return e.node==e.text&&(e.node=O(\"div\",null,null,\"position: relative\"),e.text.parentNode&&e.text.parentNode.replaceChild(e.node,e.text),e.node.appendChild(e.text),l&&s<8&&(e.node.style.zIndex=2)),e.node}function ur(e,t){var r=e.display.externalMeasured;return r&&r.line==t.line?(e.display.externalMeasured=null,t.measure=r.measure,r.built):qt(e,t)}function cr(e,t){var r=t.text.className,n=ur(e,t);t.text==t.node&&(t.node=n.pre),t.text.parentNode.replaceChild(n.pre,t.text),t.text=n.pre,n.bgClass!=t.bgClass||n.textClass!=t.textClass?(t.bgClass=n.bgClass,t.textClass=n.textClass,hr(e,t)):r&&(t.text.className=r)}function hr(e,t){!function(e,t){var r=t.bgClass?t.bgClass+\" \"+(t.line.bgClass||\"\"):t.line.bgClass;if(r&&(r+=\" CodeMirror-linebackground\"),t.background)r?t.background.className=r:(t.background.parentNode.removeChild(t.background),t.background=null);else if(r){var n=ar(t);t.background=n.insertBefore(O(\"div\",null,r),n.firstChild),e.display.input.setUneditable(t.background)}}(e,t),t.line.wrapClass?ar(t).className=t.line.wrapClass:t.node!=t.text&&(t.node.className=\"\");var r=t.textClass?t.textClass+\" \"+(t.line.textClass||\"\"):t.line.textClass;t.text.className=r||\"\"}function fr(e,t,r,n){if(t.gutter&&(t.node.removeChild(t.gutter),t.gutter=null),t.gutterBackground&&(t.node.removeChild(t.gutterBackground),t.gutterBackground=null),t.line.gutterClass){var i=ar(t);t.gutterBackground=O(\"div\",null,\"CodeMirror-gutter-background \"+t.line.gutterClass,\"left: \"+(e.options.fixedGutter?n.fixedPos:-n.gutterTotalWidth)+\"px; width: \"+n.gutterTotalWidth+\"px\"),e.display.input.setUneditable(t.gutterBackground),i.insertBefore(t.gutterBackground,t.text)}var o=t.line.gutterMarkers;if(e.options.lineNumbers||o){var l=ar(t),s=t.gutter=O(\"div\",null,\"CodeMirror-gutter-wrapper\",\"left: \"+(e.options.fixedGutter?n.fixedPos:-n.gutterTotalWidth)+\"px\");if(e.display.input.setUneditable(s),l.insertBefore(s,t.text),t.line.gutterClass&&(s.className+=\" \"+t.line.gutterClass),!e.options.lineNumbers||o&&o[\"CodeMirror-linenumbers\"]||(t.lineNumber=s.appendChild(O(\"div\",pe(e.options,r),\"CodeMirror-linenumber CodeMirror-gutter-elt\",\"left: \"+n.gutterLeft[\"CodeMirror-linenumbers\"]+\"px; width: \"+e.display.lineNumInnerWidth+\"px\"))),o)for(var a=0;a<e.options.gutters.length;++a){var u=e.options.gutters[a],c=o.hasOwnProperty(u)&&o[u];c&&s.appendChild(O(\"div\",[c],\"CodeMirror-gutter-elt\",\"left: \"+n.gutterLeft[u]+\"px; width: \"+n.gutterWidth[u]+\"px\"))}}}function dr(e,t,r){t.alignable&&(t.alignable=null);for(var n=t.node.firstChild,i=void 0;n;n=i)i=n.nextSibling,\"CodeMirror-linewidget\"==n.className&&t.node.removeChild(n);pr(e,t,r)}function pr(e,t,r){if(gr(e,t.line,t,r,!0),t.rest)for(var n=0;n<t.rest.length;n++)gr(e,t.rest[n],t,r,!1)}function gr(e,t,r,n,i){if(t.widgets)for(var o=ar(r),l=0,s=t.widgets;l<s.length;++l){var a=s[l],u=O(\"div\",[a.node],\"CodeMirror-linewidget\");a.handleMouseEvents||u.setAttribute(\"cm-ignore-events\",\"true\"),vr(a,u,r,n),e.display.input.setUneditable(u),i&&a.above?o.insertBefore(u,r.gutter||r.text):o.appendChild(u),or(a,\"redraw\")}}function vr(e,t,r,n){if(e.noHScroll){(r.alignable||(r.alignable=[])).push(t);var i=n.wrapperWidth;t.style.left=n.fixedPos+\"px\",e.coverGutter||(i-=n.gutterTotalWidth,t.style.paddingLeft=n.gutterTotalWidth+\"px\"),t.style.width=i+\"px\"}e.coverGutter&&(t.style.zIndex=5,t.style.position=\"relative\",e.noHScroll||(t.style.marginLeft=-n.gutterTotalWidth+\"px\"))}function mr(e){if(null!=e.height)return e.height;var t=e.doc.cm;if(!t)return 0;if(!D(document.body,e.node)){var r=\"position: relative;\";e.coverGutter&&(r+=\"margin-left: -\"+t.display.gutters.offsetWidth+\"px;\"),e.noHScroll&&(r+=\"width: \"+t.display.wrapper.clientWidth+\"px;\"),N(t.display.measure,O(\"div\",[e.node],null,r))}return e.height=e.node.parentNode.offsetHeight}function yr(e,t){for(var r=ht(t);r!=e.wrapper;r=r.parentNode)if(!r||1==r.nodeType&&\"true\"==r.getAttribute(\"cm-ignore-events\")||r.parentNode==e.sizer&&r!=e.mover)return!0}function br(e){return e.lineSpace.offsetTop}function wr(e){return e.mover.offsetHeight-e.lineSpace.offsetHeight}function xr(e){if(e.cachedPaddingH)return e.cachedPaddingH;var t=N(e.measure,O(\"pre\",\"x\")),r=window.getComputedStyle?window.getComputedStyle(t):t.currentStyle,n={left:parseInt(r.paddingLeft),right:parseInt(r.paddingRight)};return isNaN(n.left)||isNaN(n.right)||(e.cachedPaddingH=n),n}function Cr(e){return G-e.display.nativeBarWidth}function Sr(e){return e.display.scroller.clientWidth-Cr(e)-e.display.barWidth}function Lr(e){return e.display.scroller.clientHeight-Cr(e)-e.display.barHeight}function kr(e,t,r){if(e.line==t)return{map:e.measure.map,cache:e.measure.cache};for(var n=0;n<e.rest.length;n++)if(e.rest[n]==t)return{map:e.measure.maps[n],cache:e.measure.caches[n]};for(var i=0;i<e.rest.length;i++)if(he(e.rest[i])>r)return{map:e.measure.maps[i],cache:e.measure.caches[i],before:!0}}function Tr(e,t,r,n){return Or(e,Nr(e,t),r,n)}function Mr(e,t){if(t>=e.display.viewFrom&&t<e.display.viewTo)return e.display.view[on(e,t)];var r=e.display.externalMeasured;return r&&t>=r.lineN&&t<r.lineN+r.size?r:void 0}function Nr(e,t){var r=he(t),n=Mr(e,r);n&&!n.text?n=null:n&&n.changes&&(sr(e,n,r,Jr(e)),e.curOp.forceUpdate=!0),n||(n=function(e,t){var r=he(t=Be(t)),n=e.display.externalMeasured=new tr(e.doc,t,r);n.lineN=r;var i=n.built=qt(e,n);return n.text=i.pre,N(e.display.lineMeasure,i.pre),n}(e,t));var i=kr(n,t,r);return{line:t,view:n,rect:null,map:i.map,cache:i.cache,before:i.before,hasHeights:!1}}function Or(e,t,r,n,i){t.before&&(r=-1);var o,a=r+(n||\"\");return t.cache.hasOwnProperty(a)?o=t.cache[a]:(t.rect||(t.rect=t.view.text.getBoundingClientRect()),t.hasHeights||(!function(e,t,r){var n=e.options.lineWrapping,i=n&&Sr(e);if(!t.measure.heights||n&&t.measure.width!=i){var o=t.measure.heights=[];if(n){t.measure.width=i;for(var l=t.text.firstChild.getClientRects(),s=0;s<l.length-1;s++){var a=l[s],u=l[s+1];Math.abs(a.bottom-u.bottom)>2&&o.push((a.bottom+u.top)/2-r.top)}}o.push(r.bottom-r.top)}}(e,t.view,t.rect),t.hasHeights=!0),(o=function(e,t,r,n){var i,o=Wr(t.map,r,n),a=o.node,u=o.start,c=o.end,h=o.collapse;if(3==a.nodeType){for(var f=0;f<4;f++){for(;u&&ie(t.line.text.charAt(o.coverStart+u));)--u;for(;o.coverStart+c<o.coverEnd&&ie(t.line.text.charAt(o.coverStart+c));)++c;if((i=l&&s<9&&0==u&&c==o.coverEnd-o.coverStart?a.parentNode.getBoundingClientRect():Hr(k(a,u,c).getClientRects(),n)).left||i.right||0==u)break;c=u,u-=1,h=\"right\"}l&&s<11&&(i=function(e,t){if(!window.screen||null==screen.logicalXDPI||screen.logicalXDPI==screen.deviceXDPI||!function(e){if(null!=Ct)return Ct;var t=N(e,O(\"span\",\"x\")),r=t.getBoundingClientRect(),n=k(t,0,1).getBoundingClientRect();return Ct=Math.abs(r.left-n.left)>1}(e))return t;var r=screen.logicalXDPI/screen.deviceXDPI,n=screen.logicalYDPI/screen.deviceYDPI;return{left:t.left*r,right:t.right*r,top:t.top*n,bottom:t.bottom*n}}(e.display.measure,i))}else{var d;u>0&&(h=n=\"right\"),i=e.options.lineWrapping&&(d=a.getClientRects()).length>1?d[\"right\"==n?d.length-1:0]:a.getBoundingClientRect()}if(l&&s<9&&!u&&(!i||!i.left&&!i.right)){var p=a.parentNode.getClientRects()[0];i=p?{left:p.left,right:p.left+Qr(e.display),top:p.top,bottom:p.bottom}:Dr}for(var g=i.top-t.rect.top,v=i.bottom-t.rect.top,m=(g+v)/2,y=t.view.measure.heights,b=0;b<y.length-1&&!(m<y[b]);b++);var w=b?y[b-1]:0,x=y[b],C={left:(\"right\"==h?i.right:i.left)-t.rect.left,right:(\"left\"==h?i.left:i.right)-t.rect.left,top:w,bottom:x};i.left||i.right||(C.bogus=!0);e.options.singleCursorHeightPerLine||(C.rtop=g,C.rbottom=v);return C}(e,t,r,n)).bogus||(t.cache[a]=o)),{left:o.left,right:o.right,top:i?o.rtop:o.top,bottom:i?o.rbottom:o.bottom}}var Ar,Dr={left:0,right:0,top:0,bottom:0};function Wr(e,t,r){for(var n,i,o,l,s,a,u=0;u<e.length;u+=3)if(s=e[u],a=e[u+1],t<s?(i=0,o=1,l=\"left\"):t<a?o=(i=t-s)+1:(u==e.length-3||t==a&&e[u+3]>t)&&(i=(o=a-s)-1,t>=a&&(l=\"right\")),null!=i){if(n=e[u+2],s==a&&r==(n.insertLeft?\"left\":\"right\")&&(l=r),\"left\"==r&&0==i)for(;u&&e[u-2]==e[u-3]&&e[u-1].insertLeft;)n=e[2+(u-=3)],l=\"left\";if(\"right\"==r&&i==a-s)for(;u<e.length-3&&e[u+3]==e[u+4]&&!e[u+5].insertLeft;)n=e[(u+=3)+2],l=\"right\";break}return{node:n,start:i,end:o,collapse:l,coverStart:s,coverEnd:a}}function Hr(e,t){var r=Dr;if(\"left\"==t)for(var n=0;n<e.length&&(r=e[n]).left==r.right;n++);else for(var i=e.length-1;i>=0&&(r=e[i]).left==r.right;i--);return r}function Fr(e){if(e.measure&&(e.measure.cache={},e.measure.heights=null,e.rest))for(var t=0;t<e.rest.length;t++)e.measure.caches[t]={}}function Pr(e){e.display.externalMeasure=null,M(e.display.lineMeasure);for(var t=0;t<e.display.view.length;t++)Fr(e.display.view[t])}function Er(e){Pr(e),e.display.cachedCharWidth=e.display.cachedTextHeight=e.display.cachedPaddingH=null,e.options.lineWrapping||(e.display.maxLineChanged=!0),e.display.lineNumChars=null}function zr(){return c&&v?-(document.body.getBoundingClientRect().left-parseInt(getComputedStyle(document.body).marginLeft)):window.pageXOffset||(document.documentElement||document.body).scrollLeft}function Ir(){return c&&v?-(document.body.getBoundingClientRect().top-parseInt(getComputedStyle(document.body).marginTop)):window.pageYOffset||(document.documentElement||document.body).scrollTop}function Rr(e){var t=0;if(e.widgets)for(var r=0;r<e.widgets.length;++r)e.widgets[r].above&&(t+=mr(e.widgets[r]));return t}function Br(e,t,r,n,i){if(!i){var o=Rr(t);r.top+=o,r.bottom+=o}if(\"line\"==n)return r;n||(n=\"local\");var l=je(t);if(\"local\"==n?l+=br(e.display):l-=e.display.viewOffset,\"page\"==n||\"window\"==n){var s=e.display.lineSpace.getBoundingClientRect();l+=s.top+(\"window\"==n?0:Ir());var a=s.left+(\"window\"==n?0:zr());r.left+=a,r.right+=a}return r.top+=l,r.bottom+=l,r}function Gr(e,t,r){if(\"div\"==r)return t;var n=t.left,i=t.top;if(\"page\"==r)n-=zr(),i-=Ir();else if(\"local\"==r||!r){var o=e.display.sizer.getBoundingClientRect();n+=o.left,i+=o.top}var l=e.display.lineSpace.getBoundingClientRect();return{left:n-l.left,top:i-l.top}}function Ur(e,t,r,n,i){return n||(n=se(e.doc,t.line)),Br(e,n,Tr(e,n,t.ch,i),r)}function Vr(e,t,r,n,i,o){function l(t,l){var s=Or(e,i,t,l?\"right\":\"left\",o);return l?s.left=s.right:s.right=s.left,Br(e,n,s,r)}n=n||se(e.doc,t.line),i||(i=Nr(e,n));var s=Ze(n,e.doc.direction),a=t.ch,u=t.sticky;if(a>=n.text.length?(a=n.text.length,u=\"before\"):a<=0&&(a=0,u=\"after\"),!s)return l(\"before\"==u?a-1:a,\"before\"==u);function c(e,t,r){return l(r?e-1:e,1==s[t].level!=r)}var h=qe(s,a,u),f=_e,d=c(a,h,\"before\"==u);return null!=f&&(d.other=c(a,f,\"before\"!=u)),d}function Kr(e,t){var r=0;t=Ce(e.doc,t),e.options.lineWrapping||(r=Qr(e.display)*t.ch);var n=se(e.doc,t.line),i=je(n)+br(e.display);return{left:r,right:r,top:i,bottom:i+n.height}}function jr(e,t,r,n,i){var o=ge(e,t,r);return o.xRel=i,n&&(o.outside=!0),o}function Xr(e,t,r){var n=e.doc;if((r+=e.display.viewOffset)<0)return jr(n.first,0,null,!0,-1);var i=fe(n,r),o=n.first+n.size-1;if(i>o)return jr(n.first+n.size-1,se(n,o).text.length,null,!0,1);t<0&&(t=0);for(var l=se(n,i);;){var s=$r(e,l,i,t,r),a=Ie(l),u=a&&a.find(0,!0);if(!a||!(s.ch>u.from.ch||s.ch==u.from.ch&&s.xRel>0))return s;i=he(l=u.to.line)}}function Yr(e,t,r,n){n-=Rr(t);var i=t.text.length,o=le(function(t){return Or(e,r,t-1).bottom<=n},i,0);return{begin:o,end:i=le(function(t){return Or(e,r,t).top>n},o,i)}}function _r(e,t,r,n){return r||(r=Nr(e,t)),Yr(e,t,r,Br(e,t,Or(e,r,n),\"line\").top)}function qr(e,t,r,n){return!(e.bottom<=r)&&(e.top>r||(n?e.left:e.right)>t)}function $r(e,t,r,n,i){i-=je(t);var o=Nr(e,t),l=Rr(t),s=0,a=t.text.length,u=!0,c=Ze(t,e.doc.direction);if(c){var h=(e.options.lineWrapping?function(e,t,r,n,i,o,l){var s=Yr(e,t,n,l),a=s.begin,u=s.end;/\\s/.test(t.text.charAt(u-1))&&u--;for(var c=null,h=null,f=0;f<i.length;f++){var d=i[f];if(!(d.from>=u||d.to<=a)){var p=1!=d.level,g=Or(e,n,p?Math.min(u,d.to)-1:Math.max(a,d.from)).right,v=g<o?o-g+1e9:g-o;(!c||h>v)&&(c=d,h=v)}}c||(c=i[i.length-1]);c.from<a&&(c={from:a,to:c.to,level:c.level});c.to>u&&(c={from:c.from,to:u,level:c.level});return c}:function(e,t,r,n,i,o,l){var s=le(function(s){var a=i[s],u=1!=a.level;return qr(Vr(e,ge(r,u?a.to:a.from,u?\"before\":\"after\"),\"line\",t,n),o,l,!0)},0,i.length-1),a=i[s];if(s>0){var u=1!=a.level,c=Vr(e,ge(r,u?a.from:a.to,u?\"after\":\"before\"),\"line\",t,n);qr(c,o,l,!0)&&c.top>l&&(a=i[s-1])}return a})(e,t,r,o,c,n,i);s=(u=1!=h.level)?h.from:h.to-1,a=u?h.to:h.from-1}var f,d,p=null,g=null,v=le(function(t){var r=Or(e,o,t);return r.top+=l,r.bottom+=l,!!qr(r,n,i,!1)&&(r.top<=i&&r.left<=n&&(p=t,g=r),!0)},s,a),m=!1;if(g){var y=n-g.left<g.right-n,b=y==u;v=p+(b?0:1),d=b?\"after\":\"before\",f=y?g.left:g.right}else{u||v!=a&&v!=s||v++,d=0==v?\"after\":v==t.text.length?\"before\":Or(e,o,v-(u?1:0)).bottom+l<=i==u?\"after\":\"before\";var w=Vr(e,ge(r,v,d),\"line\",t,o);f=w.left,m=i<w.top||i>=w.bottom}return jr(r,v=oe(t.text,v,1),d,m,n-f)}function Zr(e){if(null!=e.cachedTextHeight)return e.cachedTextHeight;if(null==Ar){Ar=O(\"pre\");for(var t=0;t<49;++t)Ar.appendChild(document.createTextNode(\"x\")),Ar.appendChild(O(\"br\"));Ar.appendChild(document.createTextNode(\"x\"))}N(e.measure,Ar);var r=Ar.offsetHeight/50;return r>3&&(e.cachedTextHeight=r),M(e.measure),r||1}function Qr(e){if(null!=e.cachedCharWidth)return e.cachedCharWidth;var t=O(\"span\",\"xxxxxxxxxx\"),r=O(\"pre\",[t]);N(e.measure,r);var n=t.getBoundingClientRect(),i=(n.right-n.left)/10;return i>2&&(e.cachedCharWidth=i),i||10}function Jr(e){for(var t=e.display,r={},n={},i=t.gutters.clientLeft,o=t.gutters.firstChild,l=0;o;o=o.nextSibling,++l)r[e.options.gutters[l]]=o.offsetLeft+o.clientLeft+i,n[e.options.gutters[l]]=o.clientWidth;return{fixedPos:en(t),gutterTotalWidth:t.gutters.offsetWidth,gutterLeft:r,gutterWidth:n,wrapperWidth:t.wrapper.clientWidth}}function en(e){return e.scroller.getBoundingClientRect().left-e.sizer.getBoundingClientRect().left}function tn(e){var t=Zr(e.display),r=e.options.lineWrapping,n=r&&Math.max(5,e.display.scroller.clientWidth/Qr(e.display)-3);return function(i){if(Ve(e.doc,i))return 0;var o=0;if(i.widgets)for(var l=0;l<i.widgets.length;l++)i.widgets[l].height&&(o+=i.widgets[l].height);return r?o+(Math.ceil(i.text.length/n)||1)*t:o+t}}function rn(e){var t=e.doc,r=tn(e);t.iter(function(e){var t=r(e);t!=e.height&&ce(e,t)})}function nn(e,t,r,n){var i=e.display;if(!r&&\"true\"==ht(t).getAttribute(\"cm-not-content\"))return null;var o,l,s=i.lineSpace.getBoundingClientRect();try{o=t.clientX-s.left,l=t.clientY-s.top}catch(t){return null}var a,u=Xr(e,o,l);if(n&&1==u.xRel&&(a=se(e.doc,u.line).text).length==u.ch){var c=I(a,a.length,e.options.tabSize)-a.length;u=ge(u.line,Math.max(0,Math.round((o-xr(e.display).left)/Qr(e.display))-c))}return u}function on(e,t){if(t>=e.display.viewTo)return null;if((t-=e.display.viewFrom)<0)return null;for(var r=e.display.view,n=0;n<r.length;n++)if((t-=r[n].size)<0)return n}function ln(e){e.display.input.showSelection(e.display.input.prepareSelection())}function sn(e,t){void 0===t&&(t=!0);for(var r=e.doc,n={},i=n.cursors=document.createDocumentFragment(),o=n.selection=document.createDocumentFragment(),l=0;l<r.sel.ranges.length;l++)if(t||l!=r.sel.primIndex){var s=r.sel.ranges[l];if(!(s.from().line>=e.display.viewTo||s.to().line<e.display.viewFrom)){var a=s.empty();(a||e.options.showCursorWhenSelecting)&&an(e,s.head,i),a||cn(e,s,o)}}return n}function an(e,t,r){var n=Vr(e,t,\"div\",null,null,!e.options.singleCursorHeightPerLine),i=r.appendChild(O(\"div\",\" \",\"CodeMirror-cursor\"));if(i.style.left=n.left+\"px\",i.style.top=n.top+\"px\",i.style.height=Math.max(0,n.bottom-n.top)*e.options.cursorHeight+\"px\",n.other){var o=r.appendChild(O(\"div\",\" \",\"CodeMirror-cursor CodeMirror-secondarycursor\"));o.style.display=\"\",o.style.left=n.other.left+\"px\",o.style.top=n.other.top+\"px\",o.style.height=.85*(n.other.bottom-n.other.top)+\"px\"}}function un(e,t){return e.top-t.top||e.left-t.left}function cn(e,t,r){var n=e.display,i=e.doc,o=document.createDocumentFragment(),l=xr(e.display),s=l.left,a=Math.max(n.sizerWidth,Sr(e)-n.sizer.offsetLeft)-l.right,u=\"ltr\"==i.direction;function c(e,t,r,n){t<0&&(t=0),t=Math.round(t),n=Math.round(n),o.appendChild(O(\"div\",null,\"CodeMirror-selected\",\"position: absolute; left: \"+e+\"px;\\n top: \"+t+\"px; width: \"+(null==r?a-e:r)+\"px;\\n height: \"+(n-t)+\"px\"))}function h(t,r,n){var o,l,h=se(i,t),f=h.text.length;function d(r,n){return Ur(e,ge(t,r),\"div\",h,n)}function p(t,r,n){var i=_r(e,h,null,t),o=\"ltr\"==r==(\"after\"==n)?\"left\":\"right\";return d(\"after\"==n?i.begin:i.end-(/\\s/.test(h.text.charAt(i.end-1))?2:1),o)[o]}var g=Ze(h,i.direction);return function(e,t,r,n){if(!e)return n(t,r,\"ltr\",0);for(var i=!1,o=0;o<e.length;++o){var l=e[o];(l.from<r&&l.to>t||t==r&&l.to==t)&&(n(Math.max(l.from,t),Math.min(l.to,r),1==l.level?\"rtl\":\"ltr\",o),i=!0)}i||n(t,r,\"ltr\")}(g,r||0,null==n?f:n,function(e,t,i,h){var v=\"ltr\"==i,m=d(e,v?\"left\":\"right\"),y=d(t-1,v?\"right\":\"left\"),b=null==r&&0==e,w=null==n&&t==f,x=0==h,C=!g||h==g.length-1;if(y.top-m.top<=3){var S=(u?w:b)&&C,L=(u?b:w)&&x?s:(v?m:y).left,k=S?a:(v?y:m).right;c(L,m.top,k-L,m.bottom)}else{var T,M,N,O;v?(T=u&&b&&x?s:m.left,M=u?a:p(e,i,\"before\"),N=u?s:p(t,i,\"after\"),O=u&&w&&C?a:y.right):(T=u?p(e,i,\"before\"):s,M=!u&&b&&x?a:m.right,N=!u&&w&&C?s:y.left,O=u?p(t,i,\"after\"):a),c(T,m.top,M-T,m.bottom),m.bottom<y.top&&c(s,m.bottom,null,y.top),c(N,y.top,O-N,y.bottom)}(!o||un(m,o)<0)&&(o=m),un(y,o)<0&&(o=y),(!l||un(m,l)<0)&&(l=m),un(y,l)<0&&(l=y)}),{start:o,end:l}}var f=t.from(),d=t.to();if(f.line==d.line)h(f.line,f.ch,d.ch);else{var p=se(i,f.line),g=se(i,d.line),v=Be(p)==Be(g),m=h(f.line,f.ch,v?p.text.length+1:null).end,y=h(d.line,v?0:null,d.ch).start;v&&(m.top<y.top-2?(c(m.right,m.top,null,m.bottom),c(s,y.top,y.left,y.bottom)):c(m.right,m.top,y.left-m.right,m.bottom)),m.bottom<y.top&&c(s,m.bottom,null,y.top)}r.appendChild(o)}function hn(e){if(e.state.focused){var t=e.display;clearInterval(t.blinker);var r=!0;t.cursorDiv.style.visibility=\"\",e.options.cursorBlinkRate>0?t.blinker=setInterval(function(){return t.cursorDiv.style.visibility=(r=!r)?\"\":\"hidden\"},e.options.cursorBlinkRate):e.options.cursorBlinkRate<0&&(t.cursorDiv.style.visibility=\"hidden\")}}function fn(e){e.state.focused||(e.display.input.focus(),pn(e))}function dn(e){e.state.delayingBlurEvent=!0,setTimeout(function(){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1,gn(e))},100)}function pn(e,t){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1),\"nocursor\"!=e.options.readOnly&&(e.state.focused||(rt(e,\"focus\",e,t),e.state.focused=!0,H(e.display.wrapper,\"CodeMirror-focused\"),e.curOp||e.display.selForContextMenu==e.doc.sel||(e.display.input.reset(),a&&setTimeout(function(){return e.display.input.reset(!0)},20)),e.display.input.receivedFocus()),hn(e))}function gn(e,t){e.state.delayingBlurEvent||(e.state.focused&&(rt(e,\"blur\",e,t),e.state.focused=!1,T(e.display.wrapper,\"CodeMirror-focused\")),clearInterval(e.display.blinker),setTimeout(function(){e.state.focused||(e.display.shift=!1)},150))}function vn(e){for(var t=e.display,r=t.lineDiv.offsetTop,n=0;n<t.view.length;n++){var i=t.view[n],o=void 0;if(!i.hidden){if(l&&s<8){var a=i.node.offsetTop+i.node.offsetHeight;o=a-r,r=a}else{var u=i.node.getBoundingClientRect();o=u.bottom-u.top}var c=i.line.height-o;if(o<2&&(o=Zr(t)),(c>.005||c<-.005)&&(ce(i.line,o),mn(i.line),i.rest))for(var h=0;h<i.rest.length;h++)mn(i.rest[h])}}}function mn(e){if(e.widgets)for(var t=0;t<e.widgets.length;++t){var r=e.widgets[t],n=r.node.parentNode;n&&(r.height=n.offsetHeight)}}function yn(e,t,r){var n=r&&null!=r.top?Math.max(0,r.top):e.scroller.scrollTop;n=Math.floor(n-br(e));var i=r&&null!=r.bottom?r.bottom:n+e.wrapper.clientHeight,o=fe(t,n),l=fe(t,i);if(r&&r.ensure){var s=r.ensure.from.line,a=r.ensure.to.line;s<o?(o=s,l=fe(t,je(se(t,s))+e.wrapper.clientHeight)):Math.min(a,t.lastLine())>=l&&(o=fe(t,je(se(t,a))-e.wrapper.clientHeight),l=a)}return{from:o,to:Math.max(l,o+1)}}function bn(e){var t=e.display,r=t.view;if(t.alignWidgets||t.gutters.firstChild&&e.options.fixedGutter){for(var n=en(t)-t.scroller.scrollLeft+e.doc.scrollLeft,i=t.gutters.offsetWidth,o=n+\"px\",l=0;l<r.length;l++)if(!r[l].hidden){e.options.fixedGutter&&(r[l].gutter&&(r[l].gutter.style.left=o),r[l].gutterBackground&&(r[l].gutterBackground.style.left=o));var s=r[l].alignable;if(s)for(var a=0;a<s.length;a++)s[a].style.left=o}e.options.fixedGutter&&(t.gutters.style.left=n+i+\"px\")}}function wn(e){if(!e.options.lineNumbers)return!1;var t=e.doc,r=pe(e.options,t.first+t.size-1),n=e.display;if(r.length!=n.lineNumChars){var i=n.measure.appendChild(O(\"div\",[O(\"div\",r)],\"CodeMirror-linenumber CodeMirror-gutter-elt\")),o=i.firstChild.offsetWidth,l=i.offsetWidth-o;return n.lineGutter.style.width=\"\",n.lineNumInnerWidth=Math.max(o,n.lineGutter.offsetWidth-l)+1,n.lineNumWidth=n.lineNumInnerWidth+l,n.lineNumChars=n.lineNumInnerWidth?r.length:-1,n.lineGutter.style.width=n.lineNumWidth+\"px\",oi(e),!0}return!1}function xn(e,t){var r=e.display,n=Zr(e.display);t.top<0&&(t.top=0);var i=e.curOp&&null!=e.curOp.scrollTop?e.curOp.scrollTop:r.scroller.scrollTop,o=Lr(e),l={};t.bottom-t.top>o&&(t.bottom=t.top+o);var s=e.doc.height+wr(r),a=t.top<n,u=t.bottom>s-n;if(t.top<i)l.scrollTop=a?0:t.top;else if(t.bottom>i+o){var c=Math.min(t.top,(u?s:t.bottom)-o);c!=i&&(l.scrollTop=c)}var h=e.curOp&&null!=e.curOp.scrollLeft?e.curOp.scrollLeft:r.scroller.scrollLeft,f=Sr(e)-(e.options.fixedGutter?r.gutters.offsetWidth:0),d=t.right-t.left>f;return d&&(t.right=t.left+f),t.left<10?l.scrollLeft=0:t.left<h?l.scrollLeft=Math.max(0,t.left-(d?0:10)):t.right>f+h-3&&(l.scrollLeft=t.right+(d?0:10)-f),l}function Cn(e,t){null!=t&&(kn(e),e.curOp.scrollTop=(null==e.curOp.scrollTop?e.doc.scrollTop:e.curOp.scrollTop)+t)}function Sn(e){kn(e);var t=e.getCursor();e.curOp.scrollToPos={from:t,to:t,margin:e.options.cursorScrollMargin}}function Ln(e,t,r){null==t&&null==r||kn(e),null!=t&&(e.curOp.scrollLeft=t),null!=r&&(e.curOp.scrollTop=r)}function kn(e){var t=e.curOp.scrollToPos;t&&(e.curOp.scrollToPos=null,Tn(e,Kr(e,t.from),Kr(e,t.to),t.margin))}function Tn(e,t,r,n){var i=xn(e,{left:Math.min(t.left,r.left),top:Math.min(t.top,r.top)-n,right:Math.max(t.right,r.right),bottom:Math.max(t.bottom,r.bottom)+n});Ln(e,i.scrollLeft,i.scrollTop)}function Mn(e,t){Math.abs(e.doc.scrollTop-t)<2||(r||ii(e,{top:t}),Nn(e,t,!0),r&&ii(e),Jn(e,100))}function Nn(e,t,r){t=Math.min(e.display.scroller.scrollHeight-e.display.scroller.clientHeight,t),(e.display.scroller.scrollTop!=t||r)&&(e.doc.scrollTop=t,e.display.scrollbars.setScrollTop(t),e.display.scroller.scrollTop!=t&&(e.display.scroller.scrollTop=t))}function On(e,t,r,n){t=Math.min(t,e.display.scroller.scrollWidth-e.display.scroller.clientWidth),(r?t==e.doc.scrollLeft:Math.abs(e.doc.scrollLeft-t)<2)&&!n||(e.doc.scrollLeft=t,bn(e),e.display.scroller.scrollLeft!=t&&(e.display.scroller.scrollLeft=t),e.display.scrollbars.setScrollLeft(t))}function An(e){var t=e.display,r=t.gutters.offsetWidth,n=Math.round(e.doc.height+wr(e.display));return{clientHeight:t.scroller.clientHeight,viewHeight:t.wrapper.clientHeight,scrollWidth:t.scroller.scrollWidth,clientWidth:t.scroller.clientWidth,viewWidth:t.wrapper.clientWidth,barLeft:e.options.fixedGutter?r:0,docHeight:n,scrollHeight:n+Cr(e)+t.barHeight,nativeBarWidth:t.nativeBarWidth,gutterWidth:r}}var Dn=function(e,t,r){this.cm=r;var n=this.vert=O(\"div\",[O(\"div\",null,null,\"min-width: 1px\")],\"CodeMirror-vscrollbar\"),i=this.horiz=O(\"div\",[O(\"div\",null,null,\"height: 100%; min-height: 1px\")],\"CodeMirror-hscrollbar\");e(n),e(i),Je(n,\"scroll\",function(){n.clientHeight&&t(n.scrollTop,\"vertical\")}),Je(i,\"scroll\",function(){i.clientWidth&&t(i.scrollLeft,\"horizontal\")}),this.checkedZeroWidth=!1,l&&s<8&&(this.horiz.style.minHeight=this.vert.style.minWidth=\"18px\")};Dn.prototype.update=function(e){var t=e.scrollWidth>e.clientWidth+1,r=e.scrollHeight>e.clientHeight+1,n=e.nativeBarWidth;if(r){this.vert.style.display=\"block\",this.vert.style.bottom=t?n+\"px\":\"0\";var i=e.viewHeight-(t?n:0);this.vert.firstChild.style.height=Math.max(0,e.scrollHeight-e.clientHeight+i)+\"px\"}else this.vert.style.display=\"\",this.vert.firstChild.style.height=\"0\";if(t){this.horiz.style.display=\"block\",this.horiz.style.right=r?n+\"px\":\"0\",this.horiz.style.left=e.barLeft+\"px\";var o=e.viewWidth-e.barLeft-(r?n:0);this.horiz.firstChild.style.width=Math.max(0,e.scrollWidth-e.clientWidth+o)+\"px\"}else this.horiz.style.display=\"\",this.horiz.firstChild.style.width=\"0\";return!this.checkedZeroWidth&&e.clientHeight>0&&(0==n&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:r?n:0,bottom:t?n:0}},Dn.prototype.setScrollLeft=function(e){this.horiz.scrollLeft!=e&&(this.horiz.scrollLeft=e),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,\"horiz\")},Dn.prototype.setScrollTop=function(e){this.vert.scrollTop!=e&&(this.vert.scrollTop=e),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,\"vert\")},Dn.prototype.zeroWidthHack=function(){var e=y&&!d?\"12px\":\"18px\";this.horiz.style.height=this.vert.style.width=e,this.horiz.style.pointerEvents=this.vert.style.pointerEvents=\"none\",this.disableHoriz=new R,this.disableVert=new R},Dn.prototype.enableZeroWidthBar=function(e,t,r){e.style.pointerEvents=\"auto\",t.set(1e3,function n(){var i=e.getBoundingClientRect();(\"vert\"==r?document.elementFromPoint(i.right-1,(i.top+i.bottom)/2):document.elementFromPoint((i.right+i.left)/2,i.bottom-1))!=e?e.style.pointerEvents=\"none\":t.set(1e3,n)})},Dn.prototype.clear=function(){var e=this.horiz.parentNode;e.removeChild(this.horiz),e.removeChild(this.vert)};var Wn=function(){};function Hn(e,t){t||(t=An(e));var r=e.display.barWidth,n=e.display.barHeight;Fn(e,t);for(var i=0;i<4&&r!=e.display.barWidth||n!=e.display.barHeight;i++)r!=e.display.barWidth&&e.options.lineWrapping&&vn(e),Fn(e,An(e)),r=e.display.barWidth,n=e.display.barHeight}function Fn(e,t){var r=e.display,n=r.scrollbars.update(t);r.sizer.style.paddingRight=(r.barWidth=n.right)+\"px\",r.sizer.style.paddingBottom=(r.barHeight=n.bottom)+\"px\",r.heightForcer.style.borderBottom=n.bottom+\"px solid transparent\",n.right&&n.bottom?(r.scrollbarFiller.style.display=\"block\",r.scrollbarFiller.style.height=n.bottom+\"px\",r.scrollbarFiller.style.width=n.right+\"px\"):r.scrollbarFiller.style.display=\"\",n.bottom&&e.options.coverGutterNextToScrollbar&&e.options.fixedGutter?(r.gutterFiller.style.display=\"block\",r.gutterFiller.style.height=n.bottom+\"px\",r.gutterFiller.style.width=t.gutterWidth+\"px\"):r.gutterFiller.style.display=\"\"}Wn.prototype.update=function(){return{bottom:0,right:0}},Wn.prototype.setScrollLeft=function(){},Wn.prototype.setScrollTop=function(){},Wn.prototype.clear=function(){};var Pn={native:Dn,null:Wn};function En(e){e.display.scrollbars&&(e.display.scrollbars.clear(),e.display.scrollbars.addClass&&T(e.display.wrapper,e.display.scrollbars.addClass)),e.display.scrollbars=new Pn[e.options.scrollbarStyle](function(t){e.display.wrapper.insertBefore(t,e.display.scrollbarFiller),Je(t,\"mousedown\",function(){e.state.focused&&setTimeout(function(){return e.display.input.focus()},0)}),t.setAttribute(\"cm-not-content\",\"true\")},function(t,r){\"horizontal\"==r?On(e,t):Mn(e,t)},e),e.display.scrollbars.addClass&&H(e.display.wrapper,e.display.scrollbars.addClass)}var zn=0;function In(e){var t;e.curOp={cm:e,viewChanged:!1,startHeight:e.doc.height,forceUpdate:!1,updateInput:null,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++zn},t=e.curOp,nr?nr.ops.push(t):t.ownsGroup=nr={ops:[t],delayedCallbacks:[]}}function Rn(e){!function(e,t){var r=e.ownsGroup;if(r)try{!function(e){var t=e.delayedCallbacks,r=0;do{for(;r<t.length;r++)t[r].call(null);for(var n=0;n<e.ops.length;n++){var i=e.ops[n];if(i.cursorActivityHandlers)for(;i.cursorActivityCalled<i.cursorActivityHandlers.length;)i.cursorActivityHandlers[i.cursorActivityCalled++].call(null,i.cm)}}while(r<t.length)}(r)}finally{nr=null,t(r)}}(e.curOp,function(e){for(var t=0;t<e.ops.length;t++)e.ops[t].cm.curOp=null;!function(e){for(var t=e.ops,r=0;r<t.length;r++)Bn(t[r]);for(var n=0;n<t.length;n++)(i=t[n]).updatedDisplay=i.mustUpdate&&ri(i.cm,i.update);var i;for(var o=0;o<t.length;o++)Gn(t[o]);for(var l=0;l<t.length;l++)Un(t[l]);for(var s=0;s<t.length;s++)Vn(t[s])}(e)})}function Bn(e){var t,r,n=e.cm,i=n.display;!(r=(t=n).display).scrollbarsClipped&&r.scroller.offsetWidth&&(r.nativeBarWidth=r.scroller.offsetWidth-r.scroller.clientWidth,r.heightForcer.style.height=Cr(t)+\"px\",r.sizer.style.marginBottom=-r.nativeBarWidth+\"px\",r.sizer.style.borderRightWidth=Cr(t)+\"px\",r.scrollbarsClipped=!0),e.updateMaxLine&&Ye(n),e.mustUpdate=e.viewChanged||e.forceUpdate||null!=e.scrollTop||e.scrollToPos&&(e.scrollToPos.from.line<i.viewFrom||e.scrollToPos.to.line>=i.viewTo)||i.maxLineChanged&&n.options.lineWrapping,e.update=e.mustUpdate&&new ti(n,e.mustUpdate&&{top:e.scrollTop,ensure:e.scrollToPos},e.forceUpdate)}function Gn(e){var t=e.cm,r=t.display;e.updatedDisplay&&vn(t),e.barMeasure=An(t),r.maxLineChanged&&!t.options.lineWrapping&&(e.adjustWidthTo=Tr(t,r.maxLine,r.maxLine.text.length).left+3,t.display.sizerWidth=e.adjustWidthTo,e.barMeasure.scrollWidth=Math.max(r.scroller.clientWidth,r.sizer.offsetLeft+e.adjustWidthTo+Cr(t)+t.display.barWidth),e.maxScrollLeft=Math.max(0,r.sizer.offsetLeft+e.adjustWidthTo-Sr(t))),(e.updatedDisplay||e.selectionChanged)&&(e.preparedSelection=r.input.prepareSelection())}function Un(e){var t=e.cm;null!=e.adjustWidthTo&&(t.display.sizer.style.minWidth=e.adjustWidthTo+\"px\",e.maxScrollLeft<t.doc.scrollLeft&&On(t,Math.min(t.display.scroller.scrollLeft,e.maxScrollLeft),!0),t.display.maxLineChanged=!1);var r=e.focus&&e.focus==W();e.preparedSelection&&t.display.input.showSelection(e.preparedSelection,r),(e.updatedDisplay||e.startHeight!=t.doc.height)&&Hn(t,e.barMeasure),e.updatedDisplay&&li(t,e.barMeasure),e.selectionChanged&&hn(t),t.state.focused&&e.updateInput&&t.display.input.reset(e.typing),r&&fn(e.cm)}function Vn(e){var t=e.cm,r=t.display,n=t.doc;(e.updatedDisplay&&ni(t,e.update),null==r.wheelStartX||null==e.scrollTop&&null==e.scrollLeft&&!e.scrollToPos||(r.wheelStartX=r.wheelStartY=null),null!=e.scrollTop&&Nn(t,e.scrollTop,e.forceScroll),null!=e.scrollLeft&&On(t,e.scrollLeft,!0,!0),e.scrollToPos)&&function(e,t){if(!nt(e,\"scrollCursorIntoView\")){var r=e.display,n=r.sizer.getBoundingClientRect(),i=null;if(t.top+n.top<0?i=!0:t.bottom+n.top>(window.innerHeight||document.documentElement.clientHeight)&&(i=!1),null!=i&&!p){var o=O(\"div\",\"\",null,\"position: absolute;\\n top: \"+(t.top-r.viewOffset-br(e.display))+\"px;\\n height: \"+(t.bottom-t.top+Cr(e)+r.barHeight)+\"px;\\n left: \"+t.left+\"px; width: \"+Math.max(2,t.right-t.left)+\"px;\");e.display.lineSpace.appendChild(o),o.scrollIntoView(i),e.display.lineSpace.removeChild(o)}}}(t,function(e,t,r,n){var i;null==n&&(n=0),e.options.lineWrapping||t!=r||(r=\"before\"==(t=t.ch?ge(t.line,\"before\"==t.sticky?t.ch-1:t.ch,\"after\"):t).sticky?ge(t.line,t.ch+1,\"before\"):t);for(var o=0;o<5;o++){var l=!1,s=Vr(e,t),a=r&&r!=t?Vr(e,r):s,u=xn(e,i={left:Math.min(s.left,a.left),top:Math.min(s.top,a.top)-n,right:Math.max(s.left,a.left),bottom:Math.max(s.bottom,a.bottom)+n}),c=e.doc.scrollTop,h=e.doc.scrollLeft;if(null!=u.scrollTop&&(Mn(e,u.scrollTop),Math.abs(e.doc.scrollTop-c)>1&&(l=!0)),null!=u.scrollLeft&&(On(e,u.scrollLeft),Math.abs(e.doc.scrollLeft-h)>1&&(l=!0)),!l)break}return i}(t,Ce(n,e.scrollToPos.from),Ce(n,e.scrollToPos.to),e.scrollToPos.margin));var i=e.maybeHiddenMarkers,o=e.maybeUnhiddenMarkers;if(i)for(var l=0;l<i.length;++l)i[l].lines.length||rt(i[l],\"hide\");if(o)for(var s=0;s<o.length;++s)o[s].lines.length&&rt(o[s],\"unhide\");r.wrapper.offsetHeight&&(n.scrollTop=t.display.scroller.scrollTop),e.changeObjs&&rt(t,\"changes\",t,e.changeObjs),e.update&&e.update.finish()}function Kn(e,t){if(e.curOp)return t();In(e);try{return t()}finally{Rn(e)}}function jn(e,t){return function(){if(e.curOp)return t.apply(e,arguments);In(e);try{return t.apply(e,arguments)}finally{Rn(e)}}}function Xn(e){return function(){if(this.curOp)return e.apply(this,arguments);In(this);try{return e.apply(this,arguments)}finally{Rn(this)}}}function Yn(e){return function(){var t=this.cm;if(!t||t.curOp)return e.apply(this,arguments);In(t);try{return e.apply(this,arguments)}finally{Rn(t)}}}function _n(e,t,r,n){null==t&&(t=e.doc.first),null==r&&(r=e.doc.first+e.doc.size),n||(n=0);var i=e.display;if(n&&r<i.viewTo&&(null==i.updateLineNumbers||i.updateLineNumbers>t)&&(i.updateLineNumbers=t),e.curOp.viewChanged=!0,t>=i.viewTo)ke&&Ge(e.doc,t)<i.viewTo&&$n(e);else if(r<=i.viewFrom)ke&&Ue(e.doc,r+n)>i.viewFrom?$n(e):(i.viewFrom+=n,i.viewTo+=n);else if(t<=i.viewFrom&&r>=i.viewTo)$n(e);else if(t<=i.viewFrom){var o=Zn(e,r,r+n,1);o?(i.view=i.view.slice(o.index),i.viewFrom=o.lineN,i.viewTo+=n):$n(e)}else if(r>=i.viewTo){var l=Zn(e,t,t,-1);l?(i.view=i.view.slice(0,l.index),i.viewTo=l.lineN):$n(e)}else{var s=Zn(e,t,t,-1),a=Zn(e,r,r+n,1);s&&a?(i.view=i.view.slice(0,s.index).concat(rr(e,s.lineN,a.lineN)).concat(i.view.slice(a.index)),i.viewTo+=n):$n(e)}var u=i.externalMeasured;u&&(r<u.lineN?u.lineN+=n:t<u.lineN+u.size&&(i.externalMeasured=null))}function qn(e,t,r){e.curOp.viewChanged=!0;var n=e.display,i=e.display.externalMeasured;if(i&&t>=i.lineN&&t<i.lineN+i.size&&(n.externalMeasured=null),!(t<n.viewFrom||t>=n.viewTo)){var o=n.view[on(e,t)];if(null!=o.node){var l=o.changes||(o.changes=[]);-1==B(l,r)&&l.push(r)}}}function $n(e){e.display.viewFrom=e.display.viewTo=e.doc.first,e.display.view=[],e.display.viewOffset=0}function Zn(e,t,r,n){var i,o=on(e,t),l=e.display.view;if(!ke||r==e.doc.first+e.doc.size)return{index:o,lineN:r};for(var s=e.display.viewFrom,a=0;a<o;a++)s+=l[a].size;if(s!=t){if(n>0){if(o==l.length-1)return null;i=s+l[o].size-t,o++}else i=s-t;t+=i,r+=i}for(;Ge(e.doc,r)!=r;){if(o==(n<0?0:l.length-1))return null;r+=n*l[o-(n<0?1:0)].size,o+=n}return{index:o,lineN:r}}function Qn(e){for(var t=e.display.view,r=0,n=0;n<t.length;n++){var i=t[n];i.hidden||i.node&&!i.changes||++r}return r}function Jn(e,t){e.doc.highlightFrontier<e.display.viewTo&&e.state.highlight.set(t,E(ei,e))}function ei(e){var t=e.doc;if(!(t.highlightFrontier>=e.display.viewTo)){var r=+new Date+e.options.workTime,n=zt(e,t.highlightFrontier),i=[];t.iter(n.line,Math.min(t.first+t.size,e.display.viewTo+500),function(o){if(n.line>=e.display.viewFrom){var l=o.styles,s=o.text.length>e.options.maxHighlightLength?Ot(t.mode,n.state):null,a=Pt(e,o,n,!0);s&&(n.state=s),o.styles=a.styles;var u=o.styleClasses,c=a.classes;c?o.styleClasses=c:u&&(o.styleClasses=null);for(var h=!l||l.length!=o.styles.length||u!=c&&(!u||!c||u.bgClass!=c.bgClass||u.textClass!=c.textClass),f=0;!h&&f<l.length;++f)h=l[f]!=o.styles[f];h&&i.push(n.line),o.stateAfter=n.save(),n.nextLine()}else o.text.length<=e.options.maxHighlightLength&&It(e,o.text,n),o.stateAfter=n.line%5==0?n.save():null,n.nextLine();if(+new Date>r)return Jn(e,e.options.workDelay),!0}),t.highlightFrontier=n.line,t.modeFrontier=Math.max(t.modeFrontier,n.line),i.length&&Kn(e,function(){for(var t=0;t<i.length;t++)qn(e,i[t],\"text\")})}}var ti=function(e,t,r){var n=e.display;this.viewport=t,this.visible=yn(n,e.doc,t),this.editorIsHidden=!n.wrapper.offsetWidth,this.wrapperHeight=n.wrapper.clientHeight,this.wrapperWidth=n.wrapper.clientWidth,this.oldDisplayWidth=Sr(e),this.force=r,this.dims=Jr(e),this.events=[]};function ri(e,t){var r=e.display,n=e.doc;if(t.editorIsHidden)return $n(e),!1;if(!t.force&&t.visible.from>=r.viewFrom&&t.visible.to<=r.viewTo&&(null==r.updateLineNumbers||r.updateLineNumbers>=r.viewTo)&&r.renderedView==r.view&&0==Qn(e))return!1;wn(e)&&($n(e),t.dims=Jr(e));var i=n.first+n.size,o=Math.max(t.visible.from-e.options.viewportMargin,n.first),l=Math.min(i,t.visible.to+e.options.viewportMargin);r.viewFrom<o&&o-r.viewFrom<20&&(o=Math.max(n.first,r.viewFrom)),r.viewTo>l&&r.viewTo-l<20&&(l=Math.min(i,r.viewTo)),ke&&(o=Ge(e.doc,o),l=Ue(e.doc,l));var s,u,c,h,f=o!=r.viewFrom||l!=r.viewTo||r.lastWrapHeight!=t.wrapperHeight||r.lastWrapWidth!=t.wrapperWidth;u=o,c=l,0==(h=(s=e).display).view.length||u>=h.viewTo||c<=h.viewFrom?(h.view=rr(s,u,c),h.viewFrom=u):(h.viewFrom>u?h.view=rr(s,u,h.viewFrom).concat(h.view):h.viewFrom<u&&(h.view=h.view.slice(on(s,u))),h.viewFrom=u,h.viewTo<c?h.view=h.view.concat(rr(s,h.viewTo,c)):h.viewTo>c&&(h.view=h.view.slice(0,on(s,c)))),h.viewTo=c,r.viewOffset=je(se(e.doc,r.viewFrom)),e.display.mover.style.top=r.viewOffset+\"px\";var d=Qn(e);if(!f&&0==d&&!t.force&&r.renderedView==r.view&&(null==r.updateLineNumbers||r.updateLineNumbers>=r.viewTo))return!1;var p=function(e){if(e.hasFocus())return null;var t=W();if(!t||!D(e.display.lineDiv,t))return null;var r={activeElt:t};if(window.getSelection){var n=window.getSelection();n.anchorNode&&n.extend&&D(e.display.lineDiv,n.anchorNode)&&(r.anchorNode=n.anchorNode,r.anchorOffset=n.anchorOffset,r.focusNode=n.focusNode,r.focusOffset=n.focusOffset)}return r}(e);return d>4&&(r.lineDiv.style.display=\"none\"),function(e,t,r){var n=e.display,i=e.options.lineNumbers,o=n.lineDiv,l=o.firstChild;function s(t){var r=t.nextSibling;return a&&y&&e.display.currentWheelTarget==t?t.style.display=\"none\":t.parentNode.removeChild(t),r}for(var u=n.view,c=n.viewFrom,h=0;h<u.length;h++){var f=u[h];if(f.hidden);else if(f.node&&f.node.parentNode==o){for(;l!=f.node;)l=s(l);var d=i&&null!=t&&t<=c&&f.lineNumber;f.changes&&(B(f.changes,\"gutter\")>-1&&(d=!1),sr(e,f,c,r)),d&&(M(f.lineNumber),f.lineNumber.appendChild(document.createTextNode(pe(e.options,c)))),l=f.node.nextSibling}else{var p=(m=c,b=r,void 0,w=ur(g=e,v=f),v.text=v.node=w.pre,w.bgClass&&(v.bgClass=w.bgClass),w.textClass&&(v.textClass=w.textClass),hr(g,v),fr(g,v,m,b),pr(g,v,b),v.node);o.insertBefore(p,l)}c+=f.size}var g,v,m,b,w;for(;l;)l=s(l)}(e,r.updateLineNumbers,t.dims),d>4&&(r.lineDiv.style.display=\"\"),r.renderedView=r.view,function(e){if(e&&e.activeElt&&e.activeElt!=W()&&(e.activeElt.focus(),e.anchorNode&&D(document.body,e.anchorNode)&&D(document.body,e.focusNode))){var t=window.getSelection(),r=document.createRange();r.setEnd(e.anchorNode,e.anchorOffset),r.collapse(!1),t.removeAllRanges(),t.addRange(r),t.extend(e.focusNode,e.focusOffset)}}(p),M(r.cursorDiv),M(r.selectionDiv),r.gutters.style.height=r.sizer.style.minHeight=0,f&&(r.lastWrapHeight=t.wrapperHeight,r.lastWrapWidth=t.wrapperWidth,Jn(e,400)),r.updateLineNumbers=null,!0}function ni(e,t){for(var r=t.viewport,n=!0;(n&&e.options.lineWrapping&&t.oldDisplayWidth!=Sr(e)||(r&&null!=r.top&&(r={top:Math.min(e.doc.height+wr(e.display)-Lr(e),r.top)}),t.visible=yn(e.display,e.doc,r),!(t.visible.from>=e.display.viewFrom&&t.visible.to<=e.display.viewTo)))&&ri(e,t);n=!1){vn(e);var i=An(e);ln(e),Hn(e,i),li(e,i),t.force=!1}t.signal(e,\"update\",e),e.display.viewFrom==e.display.reportedViewFrom&&e.display.viewTo==e.display.reportedViewTo||(t.signal(e,\"viewportChange\",e,e.display.viewFrom,e.display.viewTo),e.display.reportedViewFrom=e.display.viewFrom,e.display.reportedViewTo=e.display.viewTo)}function ii(e,t){var r=new ti(e,t);if(ri(e,r)){vn(e),ni(e,r);var n=An(e);ln(e),Hn(e,n),li(e,n),r.finish()}}function oi(e){var t=e.display.gutters.offsetWidth;e.display.sizer.style.marginLeft=t+\"px\"}function li(e,t){e.display.sizer.style.minHeight=t.docHeight+\"px\",e.display.heightForcer.style.top=t.docHeight+\"px\",e.display.gutters.style.height=t.docHeight+e.display.barHeight+Cr(e)+\"px\"}function si(e){var t=e.display.gutters,r=e.options.gutters;M(t);for(var n=0;n<r.length;++n){var i=r[n],o=t.appendChild(O(\"div\",null,\"CodeMirror-gutter \"+i));\"CodeMirror-linenumbers\"==i&&(e.display.lineGutter=o,o.style.width=(e.display.lineNumWidth||1)+\"px\")}t.style.display=n?\"\":\"none\",oi(e)}function ai(e){var t=B(e.gutters,\"CodeMirror-linenumbers\");-1==t&&e.lineNumbers?e.gutters=e.gutters.concat([\"CodeMirror-linenumbers\"]):t>-1&&!e.lineNumbers&&(e.gutters=e.gutters.slice(0),e.gutters.splice(t,1))}ti.prototype.signal=function(e,t){ot(e,t)&&this.events.push(arguments)},ti.prototype.finish=function(){for(var e=0;e<this.events.length;e++)rt.apply(null,this.events[e])};var ui=0,ci=null;function hi(e){var t=e.wheelDeltaX,r=e.wheelDeltaY;return null==t&&e.detail&&e.axis==e.HORIZONTAL_AXIS&&(t=e.detail),null==r&&e.detail&&e.axis==e.VERTICAL_AXIS?r=e.detail:null==r&&(r=e.wheelDelta),{x:t,y:r}}function fi(e){var t=hi(e);return t.x*=ci,t.y*=ci,t}function di(e,t){var n=hi(t),i=n.x,o=n.y,l=e.display,s=l.scroller,u=s.scrollWidth>s.clientWidth,c=s.scrollHeight>s.clientHeight;if(i&&u||o&&c){if(o&&y&&a)e:for(var f=t.target,d=l.view;f!=s;f=f.parentNode)for(var p=0;p<d.length;p++)if(d[p].node==f){e.display.currentWheelTarget=f;break e}if(i&&!r&&!h&&null!=ci)return o&&c&&Mn(e,Math.max(0,s.scrollTop+o*ci)),On(e,Math.max(0,s.scrollLeft+i*ci)),(!o||o&&c)&&st(t),void(l.wheelStartX=null);if(o&&null!=ci){var g=o*ci,v=e.doc.scrollTop,m=v+l.wrapper.clientHeight;g<0?v=Math.max(0,v+g-50):m=Math.min(e.doc.height,m+g+50),ii(e,{top:v,bottom:m})}ui<20&&(null==l.wheelStartX?(l.wheelStartX=s.scrollLeft,l.wheelStartY=s.scrollTop,l.wheelDX=i,l.wheelDY=o,setTimeout(function(){if(null!=l.wheelStartX){var e=s.scrollLeft-l.wheelStartX,t=s.scrollTop-l.wheelStartY,r=t&&l.wheelDY&&t/l.wheelDY||e&&l.wheelDX&&e/l.wheelDX;l.wheelStartX=l.wheelStartY=null,r&&(ci=(ci*ui+r)/(ui+1),++ui)}},200)):(l.wheelDX+=i,l.wheelDY+=o))}}l?ci=-.53:r?ci=15:c?ci=-.7:f&&(ci=-1/3);var pi=function(e,t){this.ranges=e,this.primIndex=t};pi.prototype.primary=function(){return this.ranges[this.primIndex]},pi.prototype.equals=function(e){if(e==this)return!0;if(e.primIndex!=this.primIndex||e.ranges.length!=this.ranges.length)return!1;for(var t=0;t<this.ranges.length;t++){var r=this.ranges[t],n=e.ranges[t];if(!me(r.anchor,n.anchor)||!me(r.head,n.head))return!1}return!0},pi.prototype.deepCopy=function(){for(var e=[],t=0;t<this.ranges.length;t++)e[t]=new gi(ye(this.ranges[t].anchor),ye(this.ranges[t].head));return new pi(e,this.primIndex)},pi.prototype.somethingSelected=function(){for(var e=0;e<this.ranges.length;e++)if(!this.ranges[e].empty())return!0;return!1},pi.prototype.contains=function(e,t){t||(t=e);for(var r=0;r<this.ranges.length;r++){var n=this.ranges[r];if(ve(t,n.from())>=0&&ve(e,n.to())<=0)return r}return-1};var gi=function(e,t){this.anchor=e,this.head=t};function vi(e,t){var r=e[t];e.sort(function(e,t){return ve(e.from(),t.from())}),t=B(e,r);for(var n=1;n<e.length;n++){var i=e[n],o=e[n-1];if(ve(o.to(),i.from())>=0){var l=we(o.from(),i.from()),s=be(o.to(),i.to()),a=o.empty()?i.from()==i.head:o.from()==o.head;n<=t&&--t,e.splice(--n,2,new gi(a?s:l,a?l:s))}}return new pi(e,t)}function mi(e,t){return new pi([new gi(e,t||e)],0)}function yi(e){return e.text?ge(e.from.line+e.text.length-1,q(e.text).length+(1==e.text.length?e.from.ch:0)):e.to}function bi(e,t){if(ve(e,t.from)<0)return e;if(ve(e,t.to)<=0)return yi(t);var r=e.line+t.text.length-(t.to.line-t.from.line)-1,n=e.ch;return e.line==t.to.line&&(n+=yi(t).ch-t.to.ch),ge(r,n)}function wi(e,t){for(var r=[],n=0;n<e.sel.ranges.length;n++){var i=e.sel.ranges[n];r.push(new gi(bi(i.anchor,t),bi(i.head,t)))}return vi(r,e.sel.primIndex)}function xi(e,t,r){return e.line==t.line?ge(r.line,e.ch-t.ch+r.ch):ge(r.line+(e.line-t.line),e.ch)}function Ci(e){e.doc.mode=Tt(e.options,e.doc.modeOption),Si(e)}function Si(e){e.doc.iter(function(e){e.stateAfter&&(e.stateAfter=null),e.styles&&(e.styles=null)}),e.doc.modeFrontier=e.doc.highlightFrontier=e.doc.first,Jn(e,100),e.state.modeGen++,e.curOp&&_n(e)}function Li(e,t){return 0==t.from.ch&&0==t.to.ch&&\"\"==q(t.text)&&(!e.cm||e.cm.options.wholeLineUpdateBefore)}function ki(e,t,r,n){function i(e){return r?r[e]:null}function o(e,r,i){!function(e,t,r,n){e.text=t,e.stateAfter&&(e.stateAfter=null),e.styles&&(e.styles=null),null!=e.order&&(e.order=null),De(e),We(e,r);var i=n?n(e):1;i!=e.height&&ce(e,i)}(e,r,i,n),or(e,\"change\",e,t)}function l(e,t){for(var r=[],o=e;o<t;++o)r.push(new jt(u[o],i(o),n));return r}var s=t.from,a=t.to,u=t.text,c=se(e,s.line),h=se(e,a.line),f=q(u),d=i(u.length-1),p=a.line-s.line;if(t.full)e.insert(0,l(0,u.length)),e.remove(u.length,e.size-u.length);else if(Li(e,t)){var g=l(0,u.length-1);o(h,h.text,d),p&&e.remove(s.line,p),g.length&&e.insert(s.line,g)}else if(c==h)if(1==u.length)o(c,c.text.slice(0,s.ch)+f+c.text.slice(a.ch),d);else{var v=l(1,u.length-1);v.push(new jt(f+c.text.slice(a.ch),d,n)),o(c,c.text.slice(0,s.ch)+u[0],i(0)),e.insert(s.line+1,v)}else if(1==u.length)o(c,c.text.slice(0,s.ch)+u[0]+h.text.slice(a.ch),i(0)),e.remove(s.line+1,p);else{o(c,c.text.slice(0,s.ch)+u[0],i(0)),o(h,f+h.text.slice(a.ch),d);var m=l(1,u.length-1);p>1&&e.remove(s.line+1,p-1),e.insert(s.line+1,m)}or(e,\"change\",e,t)}function Ti(e,t,r){!function e(n,i,o){if(n.linked)for(var l=0;l<n.linked.length;++l){var s=n.linked[l];if(s.doc!=i){var a=o&&s.sharedHist;r&&!a||(t(s.doc,a),e(s.doc,n,a))}}}(e,null,!0)}function Mi(e,t){if(t.cm)throw new Error(\"This document is already in use.\");e.doc=t,t.cm=e,rn(e),Ci(e),Ni(e),e.options.lineWrapping||Ye(e),e.options.mode=t.modeOption,_n(e)}function Ni(e){(\"rtl\"==e.doc.direction?H:T)(e.display.lineDiv,\"CodeMirror-rtl\")}function Oi(e){this.done=[],this.undone=[],this.undoDepth=1/0,this.lastModTime=this.lastSelTime=0,this.lastOp=this.lastSelOp=null,this.lastOrigin=this.lastSelOrigin=null,this.generation=this.maxGeneration=e||1}function Ai(e,t){var r={from:ye(t.from),to:yi(t),text:ae(e,t.from,t.to)};return Pi(e,r,t.from.line,t.to.line+1),Ti(e,function(e){return Pi(e,r,t.from.line,t.to.line+1)},!0),r}function Di(e){for(;e.length;){if(!q(e).ranges)break;e.pop()}}function Wi(e,t,r,n){var i=e.history;i.undone.length=0;var o,l,s,a=+new Date;if((i.lastOp==n||i.lastOrigin==t.origin&&t.origin&&(\"+\"==t.origin.charAt(0)&&i.lastModTime>a-(e.cm?e.cm.options.historyEventDelay:500)||\"*\"==t.origin.charAt(0)))&&(s=i,o=i.lastOp==n?(Di(s.done),q(s.done)):s.done.length&&!q(s.done).ranges?q(s.done):s.done.length>1&&!s.done[s.done.length-2].ranges?(s.done.pop(),q(s.done)):void 0))l=q(o.changes),0==ve(t.from,t.to)&&0==ve(t.from,l.to)?l.to=yi(t):o.changes.push(Ai(e,t));else{var u=q(i.done);for(u&&u.ranges||Fi(e.sel,i.done),o={changes:[Ai(e,t)],generation:i.generation},i.done.push(o);i.done.length>i.undoDepth;)i.done.shift(),i.done[0].ranges||i.done.shift()}i.done.push(r),i.generation=++i.maxGeneration,i.lastModTime=i.lastSelTime=a,i.lastOp=i.lastSelOp=n,i.lastOrigin=i.lastSelOrigin=t.origin,l||rt(e,\"historyAdded\")}function Hi(e,t,r,n){var i,o,l,s,a,u=e.history,c=n&&n.origin;r==u.lastSelOp||c&&u.lastSelOrigin==c&&(u.lastModTime==u.lastSelTime&&u.lastOrigin==c||(i=e,o=c,l=q(u.done),s=t,\"*\"==(a=o.charAt(0))||\"+\"==a&&l.ranges.length==s.ranges.length&&l.somethingSelected()==s.somethingSelected()&&new Date-i.history.lastSelTime<=(i.cm?i.cm.options.historyEventDelay:500)))?u.done[u.done.length-1]=t:Fi(t,u.done),u.lastSelTime=+new Date,u.lastSelOrigin=c,u.lastSelOp=r,n&&!1!==n.clearRedo&&Di(u.undone)}function Fi(e,t){var r=q(t);r&&r.ranges&&r.equals(e)||t.push(e)}function Pi(e,t,r,n){var i=t[\"spans_\"+e.id],o=0;e.iter(Math.max(e.first,r),Math.min(e.first+e.size,n),function(r){r.markedSpans&&((i||(i=t[\"spans_\"+e.id]={}))[o]=r.markedSpans),++o})}function Ei(e){if(!e)return null;for(var t,r=0;r<e.length;++r)e[r].marker.explicitlyCleared?t||(t=e.slice(0,r)):t&&t.push(e[r]);return t?t.length?t:null:e}function zi(e,t){var r=function(e,t){var r=t[\"spans_\"+e.id];if(!r)return null;for(var n=[],i=0;i<t.text.length;++i)n.push(Ei(r[i]));return n}(e,t),n=Oe(e,t);if(!r)return n;if(!n)return r;for(var i=0;i<r.length;++i){var o=r[i],l=n[i];if(o&&l)e:for(var s=0;s<l.length;++s){for(var a=l[s],u=0;u<o.length;++u)if(o[u].marker==a.marker)continue e;o.push(a)}else l&&(r[i]=l)}return r}function Ii(e,t,r){for(var n=[],i=0;i<e.length;++i){var o=e[i];if(o.ranges)n.push(r?pi.prototype.deepCopy.call(o):o);else{var l=o.changes,s=[];n.push({changes:s});for(var a=0;a<l.length;++a){var u=l[a],c=void 0;if(s.push({from:u.from,to:u.to,text:u.text}),t)for(var h in u)(c=h.match(/^spans_(\\d+)$/))&&B(t,Number(c[1]))>-1&&(q(s)[h]=u[h],delete u[h])}}}return n}function Ri(e,t,r,n){if(n){var i=e.anchor;if(r){var o=ve(t,i)<0;o!=ve(r,i)<0?(i=t,t=r):o!=ve(t,r)<0&&(t=r)}return new gi(i,t)}return new gi(r||t,t)}function Bi(e,t,r,n,i){null==i&&(i=e.cm&&(e.cm.display.shift||e.extend)),ji(e,new pi([Ri(e.sel.primary(),t,r,i)],0),n)}function Gi(e,t,r){for(var n=[],i=e.cm&&(e.cm.display.shift||e.extend),o=0;o<e.sel.ranges.length;o++)n[o]=Ri(e.sel.ranges[o],t[o],null,i);ji(e,vi(n,e.sel.primIndex),r)}function Ui(e,t,r,n){var i=e.sel.ranges.slice(0);i[t]=r,ji(e,vi(i,e.sel.primIndex),n)}function Vi(e,t,r,n){ji(e,mi(t,r),n)}function Ki(e,t,r){var n=e.history.done,i=q(n);i&&i.ranges?(n[n.length-1]=t,Xi(e,t,r)):ji(e,t,r)}function ji(e,t,r){Xi(e,t,r),Hi(e,e.sel,e.cm?e.cm.curOp.id:NaN,r)}function Xi(e,t,r){var n,i,o,l;(ot(e,\"beforeSelectionChange\")||e.cm&&ot(e.cm,\"beforeSelectionChange\"))&&(n=e,o=r,l={ranges:(i=t).ranges,update:function(e){this.ranges=[];for(var t=0;t<e.length;t++)this.ranges[t]=new gi(Ce(n,e[t].anchor),Ce(n,e[t].head))},origin:o&&o.origin},rt(n,\"beforeSelectionChange\",n,l),n.cm&&rt(n.cm,\"beforeSelectionChange\",n.cm,l),t=l.ranges!=i.ranges?vi(l.ranges,l.ranges.length-1):i),Yi(e,qi(e,t,r&&r.bias||(ve(t.primary().head,e.sel.primary().head)<0?-1:1),!0)),r&&!1===r.scroll||!e.cm||Sn(e.cm)}function Yi(e,t){t.equals(e.sel)||(e.sel=t,e.cm&&(e.cm.curOp.updateInput=e.cm.curOp.selectionChanged=!0,it(e.cm)),or(e,\"cursorActivity\",e))}function _i(e){Yi(e,qi(e,e.sel,null,!1))}function qi(e,t,r,n){for(var i,o=0;o<t.ranges.length;o++){var l=t.ranges[o],s=t.ranges.length==e.sel.ranges.length&&e.sel.ranges[o],a=Zi(e,l.anchor,s&&s.anchor,r,n),u=Zi(e,l.head,s&&s.head,r,n);(i||a!=l.anchor||u!=l.head)&&(i||(i=t.ranges.slice(0,o)),i[o]=new gi(a,u))}return i?vi(i,t.primIndex):t}function $i(e,t,r,n,i){var o=se(e,t.line);if(o.markedSpans)for(var l=0;l<o.markedSpans.length;++l){var s=o.markedSpans[l],a=s.marker;if((null==s.from||(a.inclusiveLeft?s.from<=t.ch:s.from<t.ch))&&(null==s.to||(a.inclusiveRight?s.to>=t.ch:s.to>t.ch))){if(i&&(rt(a,\"beforeCursorEnter\"),a.explicitlyCleared)){if(o.markedSpans){--l;continue}break}if(!a.atomic)continue;if(r){var u=a.find(n<0?1:-1),c=void 0;if((n<0?a.inclusiveRight:a.inclusiveLeft)&&(u=Qi(e,u,-n,u&&u.line==t.line?o:null)),u&&u.line==t.line&&(c=ve(u,r))&&(n<0?c<0:c>0))return $i(e,u,t,n,i)}var h=a.find(n<0?-1:1);return(n<0?a.inclusiveLeft:a.inclusiveRight)&&(h=Qi(e,h,n,h.line==t.line?o:null)),h?$i(e,h,t,n,i):null}}return t}function Zi(e,t,r,n,i){var o=n||1,l=$i(e,t,r,o,i)||!i&&$i(e,t,r,o,!0)||$i(e,t,r,-o,i)||!i&&$i(e,t,r,-o,!0);return l||(e.cantEdit=!0,ge(e.first,0))}function Qi(e,t,r,n){return r<0&&0==t.ch?t.line>e.first?Ce(e,ge(t.line-1)):null:r>0&&t.ch==(n||se(e,t.line)).text.length?t.line<e.first+e.size-1?ge(t.line+1,0):null:new ge(t.line,t.ch+r)}function Ji(e){e.setSelection(ge(e.firstLine(),0),ge(e.lastLine()),V)}function eo(e,t,r){var n={canceled:!1,from:t.from,to:t.to,text:t.text,origin:t.origin,cancel:function(){return n.canceled=!0}};return r&&(n.update=function(t,r,i,o){t&&(n.from=Ce(e,t)),r&&(n.to=Ce(e,r)),i&&(n.text=i),void 0!==o&&(n.origin=o)}),rt(e,\"beforeChange\",e,n),e.cm&&rt(e.cm,\"beforeChange\",e.cm,n),n.canceled?null:{from:n.from,to:n.to,text:n.text,origin:n.origin}}function to(e,t,r){if(e.cm){if(!e.cm.curOp)return jn(e.cm,to)(e,t,r);if(e.cm.state.suppressEdits)return}if(!(ot(e,\"beforeChange\")||e.cm&&ot(e.cm,\"beforeChange\"))||(t=eo(e,t,!0))){var n=Le&&!r&&function(e,t,r){var n=null;if(e.iter(t.line,r.line+1,function(e){if(e.markedSpans)for(var t=0;t<e.markedSpans.length;++t){var r=e.markedSpans[t].marker;!r.readOnly||n&&-1!=B(n,r)||(n||(n=[])).push(r)}}),!n)return null;for(var i=[{from:t,to:r}],o=0;o<n.length;++o)for(var l=n[o],s=l.find(0),a=0;a<i.length;++a){var u=i[a];if(!(ve(u.to,s.from)<0||ve(u.from,s.to)>0)){var c=[a,1],h=ve(u.from,s.from),f=ve(u.to,s.to);(h<0||!l.inclusiveLeft&&!h)&&c.push({from:u.from,to:s.from}),(f>0||!l.inclusiveRight&&!f)&&c.push({from:s.to,to:u.to}),i.splice.apply(i,c),a+=c.length-3}}return i}(e,t.from,t.to);if(n)for(var i=n.length-1;i>=0;--i)ro(e,{from:n[i].from,to:n[i].to,text:i?[\"\"]:t.text,origin:t.origin});else ro(e,t)}}function ro(e,t){if(1!=t.text.length||\"\"!=t.text[0]||0!=ve(t.from,t.to)){var r=wi(e,t);Wi(e,t,r,e.cm?e.cm.curOp.id:NaN),oo(e,t,r,Oe(e,t));var n=[];Ti(e,function(e,r){r||-1!=B(n,e.history)||(uo(e.history,t),n.push(e.history)),oo(e,t,null,Oe(e,t))})}}function no(e,t,r){var n=e.cm&&e.cm.state.suppressEdits;if(!n||r){for(var i,o=e.history,l=e.sel,s=\"undo\"==t?o.done:o.undone,a=\"undo\"==t?o.undone:o.done,u=0;u<s.length&&(i=s[u],r?!i.ranges||i.equals(e.sel):i.ranges);u++);if(u!=s.length){for(o.lastOrigin=o.lastSelOrigin=null;;){if(!(i=s.pop()).ranges){if(n)return void s.push(i);break}if(Fi(i,a),r&&!i.equals(e.sel))return void ji(e,i,{clearRedo:!1});l=i}var c=[];Fi(l,a),a.push({changes:c,generation:o.generation}),o.generation=i.generation||++o.maxGeneration;for(var h=ot(e,\"beforeChange\")||e.cm&&ot(e.cm,\"beforeChange\"),f=function(r){var n=i.changes[r];if(n.origin=t,h&&!eo(e,n,!1))return s.length=0,{};c.push(Ai(e,n));var o=r?wi(e,n):q(s);oo(e,n,o,zi(e,n)),!r&&e.cm&&e.cm.scrollIntoView({from:n.from,to:yi(n)});var l=[];Ti(e,function(e,t){t||-1!=B(l,e.history)||(uo(e.history,n),l.push(e.history)),oo(e,n,null,zi(e,n))})},d=i.changes.length-1;d>=0;--d){var p=f(d);if(p)return p.v}}}}function io(e,t){if(0!=t&&(e.first+=t,e.sel=new pi($(e.sel.ranges,function(e){return new gi(ge(e.anchor.line+t,e.anchor.ch),ge(e.head.line+t,e.head.ch))}),e.sel.primIndex),e.cm)){_n(e.cm,e.first,e.first-t,t);for(var r=e.cm.display,n=r.viewFrom;n<r.viewTo;n++)qn(e.cm,n,\"gutter\")}}function oo(e,t,r,n){if(e.cm&&!e.cm.curOp)return jn(e.cm,oo)(e,t,r,n);if(t.to.line<e.first)io(e,t.text.length-1-(t.to.line-t.from.line));else if(!(t.from.line>e.lastLine())){if(t.from.line<e.first){var i=t.text.length-1-(e.first-t.from.line);io(e,i),t={from:ge(e.first,0),to:ge(t.to.line+i,t.to.ch),text:[q(t.text)],origin:t.origin}}var o=e.lastLine();t.to.line>o&&(t={from:t.from,to:ge(o,se(e,o).text.length),text:[t.text[0]],origin:t.origin}),t.removed=ae(e,t.from,t.to),r||(r=wi(e,t)),e.cm?function(e,t,r){var n=e.doc,i=e.display,o=t.from,l=t.to,s=!1,a=o.line;e.options.lineWrapping||(a=he(Be(se(n,o.line))),n.iter(a,l.line+1,function(e){if(e==i.maxLine)return s=!0,!0}));n.sel.contains(t.from,t.to)>-1&&it(e);ki(n,t,r,tn(e)),e.options.lineWrapping||(n.iter(a,o.line+t.text.length,function(e){var t=Xe(e);t>i.maxLineLength&&(i.maxLine=e,i.maxLineLength=t,i.maxLineChanged=!0,s=!1)}),s&&(e.curOp.updateMaxLine=!0));(function(e,t){if(e.modeFrontier=Math.min(e.modeFrontier,t),!(e.highlightFrontier<t-10)){for(var r=e.first,n=t-1;n>r;n--){var i=se(e,n).stateAfter;if(i&&(!(i instanceof Ht)||n+i.lookAhead<t)){r=n+1;break}}e.highlightFrontier=Math.min(e.highlightFrontier,r)}})(n,o.line),Jn(e,400);var u=t.text.length-(l.line-o.line)-1;t.full?_n(e):o.line!=l.line||1!=t.text.length||Li(e.doc,t)?_n(e,o.line,l.line+1,u):qn(e,o.line,\"text\");var c=ot(e,\"changes\"),h=ot(e,\"change\");if(h||c){var f={from:o,to:l,text:t.text,removed:t.removed,origin:t.origin};h&&or(e,\"change\",e,f),c&&(e.curOp.changeObjs||(e.curOp.changeObjs=[])).push(f)}e.display.selForContextMenu=null}(e.cm,t,n):ki(e,t,n),Xi(e,r,V)}}function lo(e,t,r,n,i){var o;(n||(n=r),ve(n,r)<0)&&(r=(o=[n,r])[0],n=o[1]);\"string\"==typeof t&&(t=e.splitLines(t)),to(e,{from:r,to:n,text:t,origin:i})}function so(e,t,r,n){r<e.line?e.line+=n:t<e.line&&(e.line=t,e.ch=0)}function ao(e,t,r,n){for(var i=0;i<e.length;++i){var o=e[i],l=!0;if(o.ranges){o.copied||((o=e[i]=o.deepCopy()).copied=!0);for(var s=0;s<o.ranges.length;s++)so(o.ranges[s].anchor,t,r,n),so(o.ranges[s].head,t,r,n)}else{for(var a=0;a<o.changes.length;++a){var u=o.changes[a];if(r<u.from.line)u.from=ge(u.from.line+n,u.from.ch),u.to=ge(u.to.line+n,u.to.ch);else if(t<=u.to.line){l=!1;break}}l||(e.splice(0,i+1),i=0)}}}function uo(e,t){var r=t.from.line,n=t.to.line,i=t.text.length-(n-r)-1;ao(e.done,r,n,i),ao(e.undone,r,n,i)}function co(e,t,r,n){var i=t,o=t;return\"number\"==typeof t?o=se(e,xe(e,t)):i=he(t),null==i?null:(n(o,i)&&e.cm&&qn(e.cm,i,r),o)}function ho(e){this.lines=e,this.parent=null;for(var t=0,r=0;r<e.length;++r)e[r].parent=this,t+=e[r].height;this.height=t}function fo(e){this.children=e;for(var t=0,r=0,n=0;n<e.length;++n){var i=e[n];t+=i.chunkSize(),r+=i.height,i.parent=this}this.size=t,this.height=r,this.parent=null}gi.prototype.from=function(){return we(this.anchor,this.head)},gi.prototype.to=function(){return be(this.anchor,this.head)},gi.prototype.empty=function(){return this.head.line==this.anchor.line&&this.head.ch==this.anchor.ch},ho.prototype={chunkSize:function(){return this.lines.length},removeInner:function(e,t){for(var r,n=e,i=e+t;n<i;++n){var o=this.lines[n];this.height-=o.height,(r=o).parent=null,De(r),or(o,\"delete\")}this.lines.splice(e,t)},collapse:function(e){e.push.apply(e,this.lines)},insertInner:function(e,t,r){this.height+=r,this.lines=this.lines.slice(0,e).concat(t).concat(this.lines.slice(e));for(var n=0;n<t.length;++n)t[n].parent=this},iterN:function(e,t,r){for(var n=e+t;e<n;++e)if(r(this.lines[e]))return!0}},fo.prototype={chunkSize:function(){return this.size},removeInner:function(e,t){this.size-=t;for(var r=0;r<this.children.length;++r){var n=this.children[r],i=n.chunkSize();if(e<i){var o=Math.min(t,i-e),l=n.height;if(n.removeInner(e,o),this.height-=l-n.height,i==o&&(this.children.splice(r--,1),n.parent=null),0==(t-=o))break;e=0}else e-=i}if(this.size-t<25&&(this.children.length>1||!(this.children[0]instanceof ho))){var s=[];this.collapse(s),this.children=[new ho(s)],this.children[0].parent=this}},collapse:function(e){for(var t=0;t<this.children.length;++t)this.children[t].collapse(e)},insertInner:function(e,t,r){this.size+=t.length,this.height+=r;for(var n=0;n<this.children.length;++n){var i=this.children[n],o=i.chunkSize();if(e<=o){if(i.insertInner(e,t,r),i.lines&&i.lines.length>50){for(var l=i.lines.length%25+25,s=l;s<i.lines.length;){var a=new ho(i.lines.slice(s,s+=25));i.height-=a.height,this.children.splice(++n,0,a),a.parent=this}i.lines=i.lines.slice(0,l),this.maybeSpill()}break}e-=o}},maybeSpill:function(){if(!(this.children.length<=10)){var e=this;do{var t=new fo(e.children.splice(e.children.length-5,5));if(e.parent){e.size-=t.size,e.height-=t.height;var r=B(e.parent.children,e);e.parent.children.splice(r+1,0,t)}else{var n=new fo(e.children);n.parent=e,e.children=[n,t],e=n}t.parent=e.parent}while(e.children.length>10);e.parent.maybeSpill()}},iterN:function(e,t,r){for(var n=0;n<this.children.length;++n){var i=this.children[n],o=i.chunkSize();if(e<o){var l=Math.min(t,o-e);if(i.iterN(e,l,r))return!0;if(0==(t-=l))break;e=0}else e-=o}}};var po=function(e,t,r){if(r)for(var n in r)r.hasOwnProperty(n)&&(this[n]=r[n]);this.doc=e,this.node=t};function go(e,t,r){je(t)<(e.curOp&&e.curOp.scrollTop||e.doc.scrollTop)&&Cn(e,r)}po.prototype.clear=function(){var e=this.doc.cm,t=this.line.widgets,r=this.line,n=he(r);if(null!=n&&t){for(var i=0;i<t.length;++i)t[i]==this&&t.splice(i--,1);t.length||(r.widgets=null);var o=mr(this);ce(r,Math.max(0,r.height-o)),e&&(Kn(e,function(){go(e,r,-o),qn(e,n,\"widget\")}),or(e,\"lineWidgetCleared\",e,this,n))}},po.prototype.changed=function(){var e=this,t=this.height,r=this.doc.cm,n=this.line;this.height=null;var i=mr(this)-t;i&&(ce(n,n.height+i),r&&Kn(r,function(){r.curOp.forceUpdate=!0,go(r,n,i),or(r,\"lineWidgetChanged\",r,e,he(n))}))},lt(po);var vo=0,mo=function(e,t){this.lines=[],this.type=t,this.doc=e,this.id=++vo};function yo(e,t,r,n,i){if(n&&n.shared)return function(e,t,r,n,i){(n=z(n)).shared=!1;var o=[yo(e,t,r,n,i)],l=o[0],s=n.widgetNode;return Ti(e,function(e){s&&(n.widgetNode=s.cloneNode(!0)),o.push(yo(e,Ce(e,t),Ce(e,r),n,i));for(var a=0;a<e.linked.length;++a)if(e.linked[a].isParent)return;l=q(o)}),new bo(o,l)}(e,t,r,n,i);if(e.cm&&!e.cm.curOp)return jn(e.cm,yo)(e,t,r,n,i);var o=new mo(e,i),l=ve(t,r);if(n&&z(n,o,!1),l>0||0==l&&!1!==o.clearWhenEmpty)return o;if(o.replacedWith&&(o.collapsed=!0,o.widgetNode=A(\"span\",[o.replacedWith],\"CodeMirror-widget\"),n.handleMouseEvents||o.widgetNode.setAttribute(\"cm-ignore-events\",\"true\"),n.insertLeft&&(o.widgetNode.insertLeft=!0)),o.collapsed){if(Re(e,t.line,t,r,o)||t.line!=r.line&&Re(e,r.line,t,r,o))throw new Error(\"Inserting collapsed marker partially overlapping an existing one\");ke=!0}o.addToHistory&&Wi(e,{from:t,to:r,origin:\"markText\"},e.sel,NaN);var s,a=t.line,u=e.cm;if(e.iter(a,r.line+1,function(e){var n,i;u&&o.collapsed&&!u.options.lineWrapping&&Be(e)==u.display.maxLine&&(s=!0),o.collapsed&&a!=t.line&&ce(e,0),n=e,i=new Te(o,a==t.line?t.ch:null,a==r.line?r.ch:null),n.markedSpans=n.markedSpans?n.markedSpans.concat([i]):[i],i.marker.attachLine(n),++a}),o.collapsed&&e.iter(t.line,r.line+1,function(t){Ve(e,t)&&ce(t,0)}),o.clearOnEnter&&Je(o,\"beforeCursorEnter\",function(){return o.clear()}),o.readOnly&&(Le=!0,(e.history.done.length||e.history.undone.length)&&e.clearHistory()),o.collapsed&&(o.id=++vo,o.atomic=!0),u){if(s&&(u.curOp.updateMaxLine=!0),o.collapsed)_n(u,t.line,r.line+1);else if(o.className||o.title||o.startStyle||o.endStyle||o.css)for(var c=t.line;c<=r.line;c++)qn(u,c,\"text\");o.atomic&&_i(u.doc),or(u,\"markerAdded\",u,o)}return o}mo.prototype.clear=function(){var e=this;if(!this.explicitlyCleared){var t=this.doc.cm,r=t&&!t.curOp;if(r&&In(t),ot(this,\"clear\")){var n=this.find();n&&or(this,\"clear\",n.from,n.to)}for(var i=null,o=null,l=0;l<this.lines.length;++l){var s=e.lines[l],a=Me(s.markedSpans,e);t&&!e.collapsed?qn(t,he(s),\"text\"):t&&(null!=a.to&&(o=he(s)),null!=a.from&&(i=he(s))),s.markedSpans=Ne(s.markedSpans,a),null==a.from&&e.collapsed&&!Ve(e.doc,s)&&t&&ce(s,Zr(t.display))}if(t&&this.collapsed&&!t.options.lineWrapping)for(var u=0;u<this.lines.length;++u){var c=Be(e.lines[u]),h=Xe(c);h>t.display.maxLineLength&&(t.display.maxLine=c,t.display.maxLineLength=h,t.display.maxLineChanged=!0)}null!=i&&t&&this.collapsed&&_n(t,i,o+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,t&&_i(t.doc)),t&&or(t,\"markerCleared\",t,this,i,o),r&&Rn(t),this.parent&&this.parent.clear()}},mo.prototype.find=function(e,t){var r,n;null==e&&\"bookmark\"==this.type&&(e=1);for(var i=0;i<this.lines.length;++i){var o=this.lines[i],l=Me(o.markedSpans,this);if(null!=l.from&&(r=ge(t?o:he(o),l.from),-1==e))return r;if(null!=l.to&&(n=ge(t?o:he(o),l.to),1==e))return n}return r&&{from:r,to:n}},mo.prototype.changed=function(){var e=this,t=this.find(-1,!0),r=this,n=this.doc.cm;t&&n&&Kn(n,function(){var i=t.line,o=he(t.line),l=Mr(n,o);if(l&&(Fr(l),n.curOp.selectionChanged=n.curOp.forceUpdate=!0),n.curOp.updateMaxLine=!0,!Ve(r.doc,i)&&null!=r.height){var s=r.height;r.height=null;var a=mr(r)-s;a&&ce(i,i.height+a)}or(n,\"markerChanged\",n,e)})},mo.prototype.attachLine=function(e){if(!this.lines.length&&this.doc.cm){var t=this.doc.cm.curOp;t.maybeHiddenMarkers&&-1!=B(t.maybeHiddenMarkers,this)||(t.maybeUnhiddenMarkers||(t.maybeUnhiddenMarkers=[])).push(this)}this.lines.push(e)},mo.prototype.detachLine=function(e){if(this.lines.splice(B(this.lines,e),1),!this.lines.length&&this.doc.cm){var t=this.doc.cm.curOp;(t.maybeHiddenMarkers||(t.maybeHiddenMarkers=[])).push(this)}},lt(mo);var bo=function(e,t){this.markers=e,this.primary=t;for(var r=0;r<e.length;++r)e[r].parent=this};function wo(e){return e.findMarks(ge(e.first,0),e.clipPos(ge(e.lastLine())),function(e){return e.parent})}function xo(e){for(var t=function(t){var r=e[t],n=[r.primary.doc];Ti(r.primary.doc,function(e){return n.push(e)});for(var i=0;i<r.markers.length;i++){var o=r.markers[i];-1==B(n,o.doc)&&(o.parent=null,r.markers.splice(i--,1))}},r=0;r<e.length;r++)t(r)}bo.prototype.clear=function(){if(!this.explicitlyCleared){this.explicitlyCleared=!0;for(var e=0;e<this.markers.length;++e)this.markers[e].clear();or(this,\"clear\")}},bo.prototype.find=function(e,t){return this.primary.find(e,t)},lt(bo);var Co=0,So=function(e,t,r,n,i){if(!(this instanceof So))return new So(e,t,r,n,i);null==r&&(r=0),fo.call(this,[new ho([new jt(\"\",null)])]),this.first=r,this.scrollTop=this.scrollLeft=0,this.cantEdit=!1,this.cleanGeneration=1,this.modeFrontier=this.highlightFrontier=r;var o=ge(r,0);this.sel=mi(o),this.history=new Oi(null),this.id=++Co,this.modeOption=t,this.lineSep=n,this.direction=\"rtl\"==i?\"rtl\":\"ltr\",this.extend=!1,\"string\"==typeof e&&(e=this.splitLines(e)),ki(this,{from:o,to:o,text:e}),ji(this,mi(o),V)};So.prototype=Q(fo.prototype,{constructor:So,iter:function(e,t,r){r?this.iterN(e-this.first,t-e,r):this.iterN(this.first,this.first+this.size,e)},insert:function(e,t){for(var r=0,n=0;n<t.length;++n)r+=t[n].height;this.insertInner(e-this.first,t,r)},remove:function(e,t){this.removeInner(e-this.first,t)},getValue:function(e){var t=ue(this,this.first,this.first+this.size);return!1===e?t:t.join(e||this.lineSeparator())},setValue:Yn(function(e){var t=ge(this.first,0),r=this.first+this.size-1;to(this,{from:t,to:ge(r,se(this,r).text.length),text:this.splitLines(e),origin:\"setValue\",full:!0},!0),this.cm&&Ln(this.cm,0,0),ji(this,mi(t),V)}),replaceRange:function(e,t,r,n){lo(this,e,t=Ce(this,t),r=r?Ce(this,r):t,n)},getRange:function(e,t,r){var n=ae(this,Ce(this,e),Ce(this,t));return!1===r?n:n.join(r||this.lineSeparator())},getLine:function(e){var t=this.getLineHandle(e);return t&&t.text},getLineHandle:function(e){if(de(this,e))return se(this,e)},getLineNumber:function(e){return he(e)},getLineHandleVisualStart:function(e){return\"number\"==typeof e&&(e=se(this,e)),Be(e)},lineCount:function(){return this.size},firstLine:function(){return this.first},lastLine:function(){return this.first+this.size-1},clipPos:function(e){return Ce(this,e)},getCursor:function(e){var t=this.sel.primary();return null==e||\"head\"==e?t.head:\"anchor\"==e?t.anchor:\"end\"==e||\"to\"==e||!1===e?t.to():t.from()},listSelections:function(){return this.sel.ranges},somethingSelected:function(){return this.sel.somethingSelected()},setCursor:Yn(function(e,t,r){Vi(this,Ce(this,\"number\"==typeof e?ge(e,t||0):e),null,r)}),setSelection:Yn(function(e,t,r){Vi(this,Ce(this,e),Ce(this,t||e),r)}),extendSelection:Yn(function(e,t,r){Bi(this,Ce(this,e),t&&Ce(this,t),r)}),extendSelections:Yn(function(e,t){Gi(this,Se(this,e),t)}),extendSelectionsBy:Yn(function(e,t){Gi(this,Se(this,$(this.sel.ranges,e)),t)}),setSelections:Yn(function(e,t,r){if(e.length){for(var n=[],i=0;i<e.length;i++)n[i]=new gi(Ce(this,e[i].anchor),Ce(this,e[i].head));null==t&&(t=Math.min(e.length-1,this.sel.primIndex)),ji(this,vi(n,t),r)}}),addSelection:Yn(function(e,t,r){var n=this.sel.ranges.slice(0);n.push(new gi(Ce(this,e),Ce(this,t||e))),ji(this,vi(n,n.length-1),r)}),getSelection:function(e){for(var t,r=this.sel.ranges,n=0;n<r.length;n++){var i=ae(this,r[n].from(),r[n].to());t=t?t.concat(i):i}return!1===e?t:t.join(e||this.lineSeparator())},getSelections:function(e){for(var t=[],r=this.sel.ranges,n=0;n<r.length;n++){var i=ae(this,r[n].from(),r[n].to());!1!==e&&(i=i.join(e||this.lineSeparator())),t[n]=i}return t},replaceSelection:function(e,t,r){for(var n=[],i=0;i<this.sel.ranges.length;i++)n[i]=e;this.replaceSelections(n,t,r||\"+input\")},replaceSelections:Yn(function(e,t,r){for(var n=[],i=this.sel,o=0;o<i.ranges.length;o++){var l=i.ranges[o];n[o]={from:l.from(),to:l.to(),text:this.splitLines(e[o]),origin:r}}for(var s=t&&\"end\"!=t&&function(e,t,r){for(var n=[],i=ge(e.first,0),o=i,l=0;l<t.length;l++){var s=t[l],a=xi(s.from,i,o),u=xi(yi(s),i,o);if(i=s.to,o=u,\"around\"==r){var c=e.sel.ranges[l],h=ve(c.head,c.anchor)<0;n[l]=new gi(h?u:a,h?a:u)}else n[l]=new gi(a,a)}return new pi(n,e.sel.primIndex)}(this,n,t),a=n.length-1;a>=0;a--)to(this,n[a]);s?Ki(this,s):this.cm&&Sn(this.cm)}),undo:Yn(function(){no(this,\"undo\")}),redo:Yn(function(){no(this,\"redo\")}),undoSelection:Yn(function(){no(this,\"undo\",!0)}),redoSelection:Yn(function(){no(this,\"redo\",!0)}),setExtending:function(e){this.extend=e},getExtending:function(){return this.extend},historySize:function(){for(var e=this.history,t=0,r=0,n=0;n<e.done.length;n++)e.done[n].ranges||++t;for(var i=0;i<e.undone.length;i++)e.undone[i].ranges||++r;return{undo:t,redo:r}},clearHistory:function(){this.history=new Oi(this.history.maxGeneration)},markClean:function(){this.cleanGeneration=this.changeGeneration(!0)},changeGeneration:function(e){return e&&(this.history.lastOp=this.history.lastSelOp=this.history.lastOrigin=null),this.history.generation},isClean:function(e){return this.history.generation==(e||this.cleanGeneration)},getHistory:function(){return{done:Ii(this.history.done),undone:Ii(this.history.undone)}},setHistory:function(e){var t=this.history=new Oi(this.history.maxGeneration);t.done=Ii(e.done.slice(0),null,!0),t.undone=Ii(e.undone.slice(0),null,!0)},setGutterMarker:Yn(function(e,t,r){return co(this,e,\"gutter\",function(e){var n=e.gutterMarkers||(e.gutterMarkers={});return n[t]=r,!r&&re(n)&&(e.gutterMarkers=null),!0})}),clearGutter:Yn(function(e){var t=this;this.iter(function(r){r.gutterMarkers&&r.gutterMarkers[e]&&co(t,r,\"gutter\",function(){return r.gutterMarkers[e]=null,re(r.gutterMarkers)&&(r.gutterMarkers=null),!0})})}),lineInfo:function(e){var t;if(\"number\"==typeof e){if(!de(this,e))return null;if(t=e,!(e=se(this,e)))return null}else if(null==(t=he(e)))return null;return{line:t,handle:e,text:e.text,gutterMarkers:e.gutterMarkers,textClass:e.textClass,bgClass:e.bgClass,wrapClass:e.wrapClass,widgets:e.widgets}},addLineClass:Yn(function(e,t,r){return co(this,e,\"gutter\"==t?\"gutter\":\"class\",function(e){var n=\"text\"==t?\"textClass\":\"background\"==t?\"bgClass\":\"gutter\"==t?\"gutterClass\":\"wrapClass\";if(e[n]){if(L(r).test(e[n]))return!1;e[n]+=\" \"+r}else e[n]=r;return!0})}),removeLineClass:Yn(function(e,t,r){return co(this,e,\"gutter\"==t?\"gutter\":\"class\",function(e){var n=\"text\"==t?\"textClass\":\"background\"==t?\"bgClass\":\"gutter\"==t?\"gutterClass\":\"wrapClass\",i=e[n];if(!i)return!1;if(null==r)e[n]=null;else{var o=i.match(L(r));if(!o)return!1;var l=o.index+o[0].length;e[n]=i.slice(0,o.index)+(o.index&&l!=i.length?\" \":\"\")+i.slice(l)||null}return!0})}),addLineWidget:Yn(function(e,t,r){return i=e,o=new po(n=this,t,r),(l=n.cm)&&o.noHScroll&&(l.display.alignWidgets=!0),co(n,i,\"widget\",function(e){var t=e.widgets||(e.widgets=[]);if(null==o.insertAt?t.push(o):t.splice(Math.min(t.length-1,Math.max(0,o.insertAt)),0,o),o.line=e,l&&!Ve(n,e)){var r=je(e)<n.scrollTop;ce(e,e.height+mr(o)),r&&Cn(l,o.height),l.curOp.forceUpdate=!0}return!0}),l&&or(l,\"lineWidgetAdded\",l,o,\"number\"==typeof i?i:he(i)),o;var n,i,o,l}),removeLineWidget:function(e){e.clear()},markText:function(e,t,r){return yo(this,Ce(this,e),Ce(this,t),r,r&&r.type||\"range\")},setBookmark:function(e,t){var r={replacedWith:t&&(null==t.nodeType?t.widget:t),insertLeft:t&&t.insertLeft,clearWhenEmpty:!1,shared:t&&t.shared,handleMouseEvents:t&&t.handleMouseEvents};return yo(this,e=Ce(this,e),e,r,\"bookmark\")},findMarksAt:function(e){var t=[],r=se(this,(e=Ce(this,e)).line).markedSpans;if(r)for(var n=0;n<r.length;++n){var i=r[n];(null==i.from||i.from<=e.ch)&&(null==i.to||i.to>=e.ch)&&t.push(i.marker.parent||i.marker)}return t},findMarks:function(e,t,r){e=Ce(this,e),t=Ce(this,t);var n=[],i=e.line;return this.iter(e.line,t.line+1,function(o){var l=o.markedSpans;if(l)for(var s=0;s<l.length;s++){var a=l[s];null!=a.to&&i==e.line&&e.ch>=a.to||null==a.from&&i!=e.line||null!=a.from&&i==t.line&&a.from>=t.ch||r&&!r(a.marker)||n.push(a.marker.parent||a.marker)}++i}),n},getAllMarks:function(){var e=[];return this.iter(function(t){var r=t.markedSpans;if(r)for(var n=0;n<r.length;++n)null!=r[n].from&&e.push(r[n].marker)}),e},posFromIndex:function(e){var t,r=this.first,n=this.lineSeparator().length;return this.iter(function(i){var o=i.text.length+n;if(o>e)return t=e,!0;e-=o,++r}),Ce(this,ge(r,t))},indexFromPos:function(e){var t=(e=Ce(this,e)).ch;if(e.line<this.first||e.ch<0)return 0;var r=this.lineSeparator().length;return this.iter(this.first,e.line,function(e){t+=e.text.length+r}),t},copy:function(e){var t=new So(ue(this,this.first,this.first+this.size),this.modeOption,this.first,this.lineSep,this.direction);return t.scrollTop=this.scrollTop,t.scrollLeft=this.scrollLeft,t.sel=this.sel,t.extend=!1,e&&(t.history.undoDepth=this.history.undoDepth,t.setHistory(this.getHistory())),t},linkedDoc:function(e){e||(e={});var t=this.first,r=this.first+this.size;null!=e.from&&e.from>t&&(t=e.from),null!=e.to&&e.to<r&&(r=e.to);var n=new So(ue(this,t,r),e.mode||this.modeOption,t,this.lineSep,this.direction);return e.sharedHist&&(n.history=this.history),(this.linked||(this.linked=[])).push({doc:n,sharedHist:e.sharedHist}),n.linked=[{doc:this,isParent:!0,sharedHist:e.sharedHist}],function(e,t){for(var r=0;r<t.length;r++){var n=t[r],i=n.find(),o=e.clipPos(i.from),l=e.clipPos(i.to);if(ve(o,l)){var s=yo(e,o,l,n.primary,n.primary.type);n.markers.push(s),s.parent=n}}}(n,wo(this)),n},unlinkDoc:function(e){if(e instanceof wl&&(e=e.doc),this.linked)for(var t=0;t<this.linked.length;++t){if(this.linked[t].doc==e){this.linked.splice(t,1),e.unlinkDoc(this),xo(wo(this));break}}if(e.history==this.history){var r=[e.id];Ti(e,function(e){return r.push(e.id)},!0),e.history=new Oi(null),e.history.done=Ii(this.history.done,r),e.history.undone=Ii(this.history.undone,r)}},iterLinkedDocs:function(e){Ti(this,e)},getMode:function(){return this.mode},getEditor:function(){return this.cm},splitLines:function(e){return this.lineSep?e.split(this.lineSep):bt(e)},lineSeparator:function(){return this.lineSep||\"\\n\"},setDirection:Yn(function(e){var t;(\"rtl\"!=e&&(e=\"ltr\"),e!=this.direction)&&(this.direction=e,this.iter(function(e){return e.order=null}),this.cm&&Kn(t=this.cm,function(){Ni(t),_n(t)}))})}),So.prototype.eachLine=So.prototype.iter;var Lo=0;function ko(e){var t=this;if(To(t),!nt(t,e)&&!yr(t.display,e)){st(e),l&&(Lo=+new Date);var r=nn(t,e,!0),n=e.dataTransfer.files;if(r&&!t.isReadOnly())if(n&&n.length&&window.FileReader&&window.File)for(var i=n.length,o=Array(i),s=0,a=function(e,n){if(!t.options.allowDropFileTypes||-1!=B(t.options.allowDropFileTypes,e.type)){var l=new FileReader;l.onload=jn(t,function(){var e=l.result;if(/[\\x00-\\x08\\x0e-\\x1f]{2}/.test(e)&&(e=\"\"),o[n]=e,++s==i){var a={from:r=Ce(t.doc,r),to:r,text:t.doc.splitLines(o.join(t.doc.lineSeparator())),origin:\"paste\"};to(t.doc,a),Ki(t.doc,mi(r,yi(a)))}}),l.readAsText(e)}},u=0;u<i;++u)a(n[u],u);else{if(t.state.draggingText&&t.doc.sel.contains(r)>-1)return t.state.draggingText(e),void setTimeout(function(){return t.display.input.focus()},20);try{var c=e.dataTransfer.getData(\"Text\");if(c){var h;if(t.state.draggingText&&!t.state.draggingText.copy&&(h=t.listSelections()),Xi(t.doc,mi(r,r)),h)for(var f=0;f<h.length;++f)lo(t.doc,\"\",h[f].anchor,h[f].head,\"drag\");t.replaceSelection(c,\"around\",\"paste\"),t.display.input.focus()}}catch(e){}}}}function To(e){e.display.dragCursor&&(e.display.lineSpace.removeChild(e.display.dragCursor),e.display.dragCursor=null)}function Mo(e){if(document.getElementsByClassName)for(var t=document.getElementsByClassName(\"CodeMirror\"),r=0;r<t.length;r++){var n=t[r].CodeMirror;n&&e(n)}}var No=!1;function Oo(){var e;No||(Je(window,\"resize\",function(){null==e&&(e=setTimeout(function(){e=null,Mo(Ao)},100))}),Je(window,\"blur\",function(){return Mo(gn)}),No=!0)}function Ao(e){var t=e.display;t.lastWrapHeight==t.wrapper.clientHeight&&t.lastWrapWidth==t.wrapper.clientWidth||(t.cachedCharWidth=t.cachedTextHeight=t.cachedPaddingH=null,t.scrollbarsClipped=!1,e.setSize())}for(var Do={3:\"Pause\",8:\"Backspace\",9:\"Tab\",13:\"Enter\",16:\"Shift\",17:\"Ctrl\",18:\"Alt\",19:\"Pause\",20:\"CapsLock\",27:\"Esc\",32:\"Space\",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"Left\",38:\"Up\",39:\"Right\",40:\"Down\",44:\"PrintScrn\",45:\"Insert\",46:\"Delete\",59:\";\",61:\"=\",91:\"Mod\",92:\"Mod\",93:\"Mod\",106:\"*\",107:\"=\",109:\"-\",110:\".\",111:\"/\",127:\"Delete\",145:\"ScrollLock\",173:\"-\",186:\";\",187:\"=\",188:\",\",189:\"-\",190:\".\",191:\"/\",192:\"`\",219:\"[\",220:\"\\\\\",221:\"]\",222:\"'\",63232:\"Up\",63233:\"Down\",63234:\"Left\",63235:\"Right\",63272:\"Delete\",63273:\"Home\",63275:\"End\",63276:\"PageUp\",63277:\"PageDown\",63302:\"Insert\"},Wo=0;Wo<10;Wo++)Do[Wo+48]=Do[Wo+96]=String(Wo);for(var Ho=65;Ho<=90;Ho++)Do[Ho]=String.fromCharCode(Ho);for(var Fo=1;Fo<=12;Fo++)Do[Fo+111]=Do[Fo+63235]=\"F\"+Fo;var Po={};function Eo(e){var t,r,n,i,o=e.split(/-(?!$)/);e=o[o.length-1];for(var l=0;l<o.length-1;l++){var s=o[l];if(/^(cmd|meta|m)$/i.test(s))i=!0;else if(/^a(lt)?$/i.test(s))t=!0;else if(/^(c|ctrl|control)$/i.test(s))r=!0;else{if(!/^s(hift)?$/i.test(s))throw new Error(\"Unrecognized modifier name: \"+s);n=!0}}return t&&(e=\"Alt-\"+e),r&&(e=\"Ctrl-\"+e),i&&(e=\"Cmd-\"+e),n&&(e=\"Shift-\"+e),e}function zo(e){var t={};for(var r in e)if(e.hasOwnProperty(r)){var n=e[r];if(/^(name|fallthrough|(de|at)tach)$/.test(r))continue;if(\"...\"==n){delete e[r];continue}for(var i=$(r.split(\" \"),Eo),o=0;o<i.length;o++){var l=void 0,s=void 0;o==i.length-1?(s=i.join(\" \"),l=n):(s=i.slice(0,o+1).join(\" \"),l=\"...\");var a=t[s];if(a){if(a!=l)throw new Error(\"Inconsistent bindings for \"+s)}else t[s]=l}delete e[r]}for(var u in t)e[u]=t[u];return e}function Io(e,t,r,n){var i=(t=Uo(t)).call?t.call(e,n):t[e];if(!1===i)return\"nothing\";if(\"...\"===i)return\"multi\";if(null!=i&&r(i))return\"handled\";if(t.fallthrough){if(\"[object Array]\"!=Object.prototype.toString.call(t.fallthrough))return Io(e,t.fallthrough,r,n);for(var o=0;o<t.fallthrough.length;o++){var l=Io(e,t.fallthrough[o],r,n);if(l)return l}}}function Ro(e){var t=\"string\"==typeof e?e:Do[e.keyCode];return\"Ctrl\"==t||\"Alt\"==t||\"Shift\"==t||\"Mod\"==t}function Bo(e,t,r){var n=e;return t.altKey&&\"Alt\"!=n&&(e=\"Alt-\"+e),(C?t.metaKey:t.ctrlKey)&&\"Ctrl\"!=n&&(e=\"Ctrl-\"+e),(C?t.ctrlKey:t.metaKey)&&\"Cmd\"!=n&&(e=\"Cmd-\"+e),!r&&t.shiftKey&&\"Shift\"!=n&&(e=\"Shift-\"+e),e}function Go(e,t){if(h&&34==e.keyCode&&e.char)return!1;var r=Do[e.keyCode];return null!=r&&!e.altGraphKey&&(3==e.keyCode&&e.code&&(r=e.code),Bo(r,e,t))}function Uo(e){return\"string\"==typeof e?Po[e]:e}function Vo(e,t){for(var r=e.doc.sel.ranges,n=[],i=0;i<r.length;i++){for(var o=t(r[i]);n.length&&ve(o.from,q(n).to)<=0;){var l=n.pop();if(ve(l.from,o.from)<0){o.from=l.from;break}}n.push(o)}Kn(e,function(){for(var t=n.length-1;t>=0;t--)lo(e.doc,\"\",n[t].from,n[t].to,\"+delete\");Sn(e)})}function Ko(e,t,r){var n=oe(e.text,t+r,r);return n<0||n>e.text.length?null:n}function jo(e,t,r){var n=Ko(e,t.ch,r);return null==n?null:new ge(t.line,n,r<0?\"after\":\"before\")}function Xo(e,t,r,n,i){if(e){var o=Ze(r,t.doc.direction);if(o){var l,s=i<0?q(o):o[0],a=i<0==(1==s.level)?\"after\":\"before\";if(s.level>0||\"rtl\"==t.doc.direction){var u=Nr(t,r);l=i<0?r.text.length-1:0;var c=Or(t,u,l).top;l=le(function(e){return Or(t,u,e).top==c},i<0==(1==s.level)?s.from:s.to-1,l),\"before\"==a&&(l=Ko(r,l,1))}else l=i<0?s.to:s.from;return new ge(n,l,a)}}return new ge(n,i<0?r.text.length:0,i<0?\"before\":\"after\")}Po.basic={Left:\"goCharLeft\",Right:\"goCharRight\",Up:\"goLineUp\",Down:\"goLineDown\",End:\"goLineEnd\",Home:\"goLineStartSmart\",PageUp:\"goPageUp\",PageDown:\"goPageDown\",Delete:\"delCharAfter\",Backspace:\"delCharBefore\",\"Shift-Backspace\":\"delCharBefore\",Tab:\"defaultTab\",\"Shift-Tab\":\"indentAuto\",Enter:\"newlineAndIndent\",Insert:\"toggleOverwrite\",Esc:\"singleSelection\"},Po.pcDefault={\"Ctrl-A\":\"selectAll\",\"Ctrl-D\":\"deleteLine\",\"Ctrl-Z\":\"undo\",\"Shift-Ctrl-Z\":\"redo\",\"Ctrl-Y\":\"redo\",\"Ctrl-Home\":\"goDocStart\",\"Ctrl-End\":\"goDocEnd\",\"Ctrl-Up\":\"goLineUp\",\"Ctrl-Down\":\"goLineDown\",\"Ctrl-Left\":\"goGroupLeft\",\"Ctrl-Right\":\"goGroupRight\",\"Alt-Left\":\"goLineStart\",\"Alt-Right\":\"goLineEnd\",\"Ctrl-Backspace\":\"delGroupBefore\",\"Ctrl-Delete\":\"delGroupAfter\",\"Ctrl-S\":\"save\",\"Ctrl-F\":\"find\",\"Ctrl-G\":\"findNext\",\"Shift-Ctrl-G\":\"findPrev\",\"Shift-Ctrl-F\":\"replace\",\"Shift-Ctrl-R\":\"replaceAll\",\"Ctrl-[\":\"indentLess\",\"Ctrl-]\":\"indentMore\",\"Ctrl-U\":\"undoSelection\",\"Shift-Ctrl-U\":\"redoSelection\",\"Alt-U\":\"redoSelection\",fallthrough:\"basic\"},Po.emacsy={\"Ctrl-F\":\"goCharRight\",\"Ctrl-B\":\"goCharLeft\",\"Ctrl-P\":\"goLineUp\",\"Ctrl-N\":\"goLineDown\",\"Alt-F\":\"goWordRight\",\"Alt-B\":\"goWordLeft\",\"Ctrl-A\":\"goLineStart\",\"Ctrl-E\":\"goLineEnd\",\"Ctrl-V\":\"goPageDown\",\"Shift-Ctrl-V\":\"goPageUp\",\"Ctrl-D\":\"delCharAfter\",\"Ctrl-H\":\"delCharBefore\",\"Alt-D\":\"delWordAfter\",\"Alt-Backspace\":\"delWordBefore\",\"Ctrl-K\":\"killLine\",\"Ctrl-T\":\"transposeChars\",\"Ctrl-O\":\"openLine\"},Po.macDefault={\"Cmd-A\":\"selectAll\",\"Cmd-D\":\"deleteLine\",\"Cmd-Z\":\"undo\",\"Shift-Cmd-Z\":\"redo\",\"Cmd-Y\":\"redo\",\"Cmd-Home\":\"goDocStart\",\"Cmd-Up\":\"goDocStart\",\"Cmd-End\":\"goDocEnd\",\"Cmd-Down\":\"goDocEnd\",\"Alt-Left\":\"goGroupLeft\",\"Alt-Right\":\"goGroupRight\",\"Cmd-Left\":\"goLineLeft\",\"Cmd-Right\":\"goLineRight\",\"Alt-Backspace\":\"delGroupBefore\",\"Ctrl-Alt-Backspace\":\"delGroupAfter\",\"Alt-Delete\":\"delGroupAfter\",\"Cmd-S\":\"save\",\"Cmd-F\":\"find\",\"Cmd-G\":\"findNext\",\"Shift-Cmd-G\":\"findPrev\",\"Cmd-Alt-F\":\"replace\",\"Shift-Cmd-Alt-F\":\"replaceAll\",\"Cmd-[\":\"indentLess\",\"Cmd-]\":\"indentMore\",\"Cmd-Backspace\":\"delWrappedLineLeft\",\"Cmd-Delete\":\"delWrappedLineRight\",\"Cmd-U\":\"undoSelection\",\"Shift-Cmd-U\":\"redoSelection\",\"Ctrl-Up\":\"goDocStart\",\"Ctrl-Down\":\"goDocEnd\",fallthrough:[\"basic\",\"emacsy\"]},Po.default=y?Po.macDefault:Po.pcDefault;var Yo={selectAll:Ji,singleSelection:function(e){return e.setSelection(e.getCursor(\"anchor\"),e.getCursor(\"head\"),V)},killLine:function(e){return Vo(e,function(t){if(t.empty()){var r=se(e.doc,t.head.line).text.length;return t.head.ch==r&&t.head.line<e.lastLine()?{from:t.head,to:ge(t.head.line+1,0)}:{from:t.head,to:ge(t.head.line,r)}}return{from:t.from(),to:t.to()}})},deleteLine:function(e){return Vo(e,function(t){return{from:ge(t.from().line,0),to:Ce(e.doc,ge(t.to().line+1,0))}})},delLineLeft:function(e){return Vo(e,function(e){return{from:ge(e.from().line,0),to:e.from()}})},delWrappedLineLeft:function(e){return Vo(e,function(t){var r=e.charCoords(t.head,\"div\").top+5;return{from:e.coordsChar({left:0,top:r},\"div\"),to:t.from()}})},delWrappedLineRight:function(e){return Vo(e,function(t){var r=e.charCoords(t.head,\"div\").top+5,n=e.coordsChar({left:e.display.lineDiv.offsetWidth+100,top:r},\"div\");return{from:t.from(),to:n}})},undo:function(e){return e.undo()},redo:function(e){return e.redo()},undoSelection:function(e){return e.undoSelection()},redoSelection:function(e){return e.redoSelection()},goDocStart:function(e){return e.extendSelection(ge(e.firstLine(),0))},goDocEnd:function(e){return e.extendSelection(ge(e.lastLine()))},goLineStart:function(e){return e.extendSelectionsBy(function(t){return _o(e,t.head.line)},{origin:\"+move\",bias:1})},goLineStartSmart:function(e){return e.extendSelectionsBy(function(t){return qo(e,t.head)},{origin:\"+move\",bias:1})},goLineEnd:function(e){return e.extendSelectionsBy(function(t){return function(e,t){var r=se(e.doc,t),n=function(e){for(var t;t=Ie(e);)e=t.find(1,!0).line;return e}(r);n!=r&&(t=he(n));return Xo(!0,e,r,t,-1)}(e,t.head.line)},{origin:\"+move\",bias:-1})},goLineRight:function(e){return e.extendSelectionsBy(function(t){var r=e.cursorCoords(t.head,\"div\").top+5;return e.coordsChar({left:e.display.lineDiv.offsetWidth+100,top:r},\"div\")},j)},goLineLeft:function(e){return e.extendSelectionsBy(function(t){var r=e.cursorCoords(t.head,\"div\").top+5;return e.coordsChar({left:0,top:r},\"div\")},j)},goLineLeftSmart:function(e){return e.extendSelectionsBy(function(t){var r=e.cursorCoords(t.head,\"div\").top+5,n=e.coordsChar({left:0,top:r},\"div\");return n.ch<e.getLine(n.line).search(/\\S/)?qo(e,t.head):n},j)},goLineUp:function(e){return e.moveV(-1,\"line\")},goLineDown:function(e){return e.moveV(1,\"line\")},goPageUp:function(e){return e.moveV(-1,\"page\")},goPageDown:function(e){return e.moveV(1,\"page\")},goCharLeft:function(e){return e.moveH(-1,\"char\")},goCharRight:function(e){return e.moveH(1,\"char\")},goColumnLeft:function(e){return e.moveH(-1,\"column\")},goColumnRight:function(e){return e.moveH(1,\"column\")},goWordLeft:function(e){return e.moveH(-1,\"word\")},goGroupRight:function(e){return e.moveH(1,\"group\")},goGroupLeft:function(e){return e.moveH(-1,\"group\")},goWordRight:function(e){return e.moveH(1,\"word\")},delCharBefore:function(e){return e.deleteH(-1,\"char\")},delCharAfter:function(e){return e.deleteH(1,\"char\")},delWordBefore:function(e){return e.deleteH(-1,\"word\")},delWordAfter:function(e){return e.deleteH(1,\"word\")},delGroupBefore:function(e){return e.deleteH(-1,\"group\")},delGroupAfter:function(e){return e.deleteH(1,\"group\")},indentAuto:function(e){return e.indentSelection(\"smart\")},indentMore:function(e){return e.indentSelection(\"add\")},indentLess:function(e){return e.indentSelection(\"subtract\")},insertTab:function(e){return e.replaceSelection(\"\\t\")},insertSoftTab:function(e){for(var t=[],r=e.listSelections(),n=e.options.tabSize,i=0;i<r.length;i++){var o=r[i].from(),l=I(e.getLine(o.line),o.ch,n);t.push(_(n-l%n))}e.replaceSelections(t)},defaultTab:function(e){e.somethingSelected()?e.indentSelection(\"add\"):e.execCommand(\"insertTab\")},transposeChars:function(e){return Kn(e,function(){for(var t=e.listSelections(),r=[],n=0;n<t.length;n++)if(t[n].empty()){var i=t[n].head,o=se(e.doc,i.line).text;if(o)if(i.ch==o.length&&(i=new ge(i.line,i.ch-1)),i.ch>0)i=new ge(i.line,i.ch+1),e.replaceRange(o.charAt(i.ch-1)+o.charAt(i.ch-2),ge(i.line,i.ch-2),i,\"+transpose\");else if(i.line>e.doc.first){var l=se(e.doc,i.line-1).text;l&&(i=new ge(i.line,1),e.replaceRange(o.charAt(0)+e.doc.lineSeparator()+l.charAt(l.length-1),ge(i.line-1,l.length-1),i,\"+transpose\"))}r.push(new gi(i,i))}e.setSelections(r)})},newlineAndIndent:function(e){return Kn(e,function(){for(var t=e.listSelections(),r=t.length-1;r>=0;r--)e.replaceRange(e.doc.lineSeparator(),t[r].anchor,t[r].head,\"+input\");t=e.listSelections();for(var n=0;n<t.length;n++)e.indentLine(t[n].from().line,null,!0);Sn(e)})},openLine:function(e){return e.replaceSelection(\"\\n\",\"start\")},toggleOverwrite:function(e){return e.toggleOverwrite()}};function _o(e,t){var r=se(e.doc,t),n=Be(r);return n!=r&&(t=he(n)),Xo(!0,e,n,t,1)}function qo(e,t){var r=_o(e,t.line),n=se(e.doc,r.line),i=Ze(n,e.doc.direction);if(!i||0==i[0].level){var o=Math.max(0,n.text.search(/\\S/)),l=t.line==r.line&&t.ch<=o&&t.ch;return ge(r.line,l?0:o,r.sticky)}return r}function $o(e,t,r){if(\"string\"==typeof t&&!(t=Yo[t]))return!1;e.display.input.ensurePolled();var n=e.display.shift,i=!1;try{e.isReadOnly()&&(e.state.suppressEdits=!0),r&&(e.display.shift=!1),i=t(e)!=U}finally{e.display.shift=n,e.state.suppressEdits=!1}return i}var Zo=new R;function Qo(e,t,r,n){var i=e.state.keySeq;if(i){if(Ro(t))return\"handled\";if(/\\'$/.test(t)?e.state.keySeq=null:Zo.set(50,function(){e.state.keySeq==i&&(e.state.keySeq=null,e.display.input.reset())}),Jo(e,i+\" \"+t,r,n))return!0}return Jo(e,t,r,n)}function Jo(e,t,r,n){var i=function(e,t,r){for(var n=0;n<e.state.keyMaps.length;n++){var i=Io(t,e.state.keyMaps[n],r,e);if(i)return i}return e.options.extraKeys&&Io(t,e.options.extraKeys,r,e)||Io(t,e.options.keyMap,r,e)}(e,t,n);return\"multi\"==i&&(e.state.keySeq=t),\"handled\"==i&&or(e,\"keyHandled\",e,t,r),\"handled\"!=i&&\"multi\"!=i||(st(r),hn(e)),!!i}function el(e,t){var r=Go(t,!0);return!!r&&(t.shiftKey&&!e.state.keySeq?Qo(e,\"Shift-\"+r,t,function(t){return $o(e,t,!0)})||Qo(e,r,t,function(t){if(\"string\"==typeof t?/^go[A-Z]/.test(t):t.motion)return $o(e,t)}):Qo(e,r,t,function(t){return $o(e,t)}))}var tl=null;function rl(e){var t=this;if(t.curOp.focus=W(),!nt(t,e)){l&&s<11&&27==e.keyCode&&(e.returnValue=!1);var r=e.keyCode;t.display.shift=16==r||e.shiftKey;var n=el(t,e);h&&(tl=n?r:null,!n&&88==r&&!xt&&(y?e.metaKey:e.ctrlKey)&&t.replaceSelection(\"\",null,\"cut\")),18!=r||/\\bCodeMirror-crosshair\\b/.test(t.display.lineDiv.className)||function(e){var t=e.display.lineDiv;function r(e){18!=e.keyCode&&e.altKey||(T(t,\"CodeMirror-crosshair\"),tt(document,\"keyup\",r),tt(document,\"mouseover\",r))}H(t,\"CodeMirror-crosshair\"),Je(document,\"keyup\",r),Je(document,\"mouseover\",r)}(t)}}function nl(e){16==e.keyCode&&(this.doc.sel.shift=!1),nt(this,e)}function il(e){var t=this;if(!(yr(t.display,e)||nt(t,e)||e.ctrlKey&&!e.altKey||y&&e.metaKey)){var r=e.keyCode,n=e.charCode;if(h&&r==tl)return tl=null,void st(e);if(!h||e.which&&!(e.which<10)||!el(t,e)){var i,o=String.fromCharCode(null==n?r:n);if(\"\\b\"!=o)if(!Qo(i=t,\"'\"+o+\"'\",e,function(e){return $o(i,e,!0)}))t.display.input.onKeyPress(e)}}}var ol,ll,sl=function(e,t,r){this.time=e,this.pos=t,this.button=r};function al(e){var t=this,r=t.display;if(!(nt(t,e)||r.activeTouch&&r.input.supportsTouch()))if(r.input.ensurePolled(),r.shift=e.shiftKey,yr(r,e))a||(r.scroller.draggable=!1,setTimeout(function(){return r.scroller.draggable=!0},100));else if(!hl(t,e)){var n,i,o,u=nn(t,e),c=ft(e),h=u?(n=u,i=c,o=+new Date,ll&&ll.compare(o,n,i)?(ol=ll=null,\"triple\"):ol&&ol.compare(o,n,i)?(ll=new sl(o,n,i),ol=null,\"double\"):(ol=new sl(o,n,i),ll=null,\"single\")):\"single\";window.focus(),1==c&&t.state.selectingText&&t.state.selectingText(e),u&&function(e,t,r,n,i){var o=\"Click\";\"double\"==n?o=\"Double\"+o:\"triple\"==n&&(o=\"Triple\"+o);return Qo(e,Bo(o=(1==t?\"Left\":2==t?\"Middle\":\"Right\")+o,i),i,function(t){if(\"string\"==typeof t&&(t=Yo[t]),!t)return!1;var n=!1;try{e.isReadOnly()&&(e.state.suppressEdits=!0),n=t(e,r)!=U}finally{e.state.suppressEdits=!1}return n})}(t,c,u,h,e)||(1==c?u?function(e,t,r,n){l?setTimeout(E(fn,e),0):e.curOp.focus=W();var i,o=function(e,t,r){var n=e.getOption(\"configureMouse\"),i=n?n(e,t,r):{};if(null==i.unit){var o=b?r.shiftKey&&r.metaKey:r.altKey;i.unit=o?\"rectangle\":\"single\"==t?\"char\":\"double\"==t?\"word\":\"line\"}(null==i.extend||e.doc.extend)&&(i.extend=e.doc.extend||r.shiftKey);null==i.addNew&&(i.addNew=y?r.metaKey:r.ctrlKey);null==i.moveOnDrag&&(i.moveOnDrag=!(y?r.altKey:r.ctrlKey));return i}(e,r,n),u=e.doc.sel;e.options.dragDrop&>&&!e.isReadOnly()&&\"single\"==r&&(i=u.contains(t))>-1&&(ve((i=u.ranges[i]).from(),t)<0||t.xRel>0)&&(ve(i.to(),t)>0||t.xRel<0)?function(e,t,r,n){var i=e.display,o=!1,u=jn(e,function(t){a&&(i.scroller.draggable=!1),e.state.draggingText=!1,tt(i.wrapper.ownerDocument,\"mouseup\",u),tt(i.wrapper.ownerDocument,\"mousemove\",c),tt(i.scroller,\"dragstart\",h),tt(i.scroller,\"drop\",u),o||(st(t),n.addNew||Bi(e.doc,r,null,null,n.extend),a||l&&9==s?setTimeout(function(){i.wrapper.ownerDocument.body.focus(),i.input.focus()},20):i.input.focus())}),c=function(e){o=o||Math.abs(t.clientX-e.clientX)+Math.abs(t.clientY-e.clientY)>=10},h=function(){return o=!0};a&&(i.scroller.draggable=!0);e.state.draggingText=u,u.copy=!n.moveOnDrag,i.scroller.dragDrop&&i.scroller.dragDrop();Je(i.wrapper.ownerDocument,\"mouseup\",u),Je(i.wrapper.ownerDocument,\"mousemove\",c),Je(i.scroller,\"dragstart\",h),Je(i.scroller,\"drop\",u),dn(e),setTimeout(function(){return i.input.focus()},20)}(e,n,t,o):function(e,t,r,n){var i=e.display,o=e.doc;st(t);var l,s,a=o.sel,u=a.ranges;n.addNew&&!n.extend?(s=o.sel.contains(r),l=s>-1?u[s]:new gi(r,r)):(l=o.sel.primary(),s=o.sel.primIndex);if(\"rectangle\"==n.unit)n.addNew||(l=new gi(r,r)),r=nn(e,t,!0,!0),s=-1;else{var c=ul(e,r,n.unit);l=n.extend?Ri(l,c.anchor,c.head,n.extend):c}n.addNew?-1==s?(s=u.length,ji(o,vi(u.concat([l]),s),{scroll:!1,origin:\"*mouse\"})):u.length>1&&u[s].empty()&&\"char\"==n.unit&&!n.extend?(ji(o,vi(u.slice(0,s).concat(u.slice(s+1)),0),{scroll:!1,origin:\"*mouse\"}),a=o.sel):Ui(o,s,l,K):(s=0,ji(o,new pi([l],0),K),a=o.sel);var h=r;function f(t){if(0!=ve(h,t))if(h=t,\"rectangle\"==n.unit){for(var i=[],u=e.options.tabSize,c=I(se(o,r.line).text,r.ch,u),f=I(se(o,t.line).text,t.ch,u),d=Math.min(c,f),p=Math.max(c,f),g=Math.min(r.line,t.line),v=Math.min(e.lastLine(),Math.max(r.line,t.line));g<=v;g++){var m=se(o,g).text,y=X(m,d,u);d==p?i.push(new gi(ge(g,y),ge(g,y))):m.length>y&&i.push(new gi(ge(g,y),ge(g,X(m,p,u))))}i.length||i.push(new gi(r,r)),ji(o,vi(a.ranges.slice(0,s).concat(i),s),{origin:\"*mouse\",scroll:!1}),e.scrollIntoView(t)}else{var b,w=l,x=ul(e,t,n.unit),C=w.anchor;ve(x.anchor,C)>0?(b=x.head,C=we(w.from(),x.anchor)):(b=x.anchor,C=be(w.to(),x.head));var S=a.ranges.slice(0);S[s]=function(e,t){var r=t.anchor,n=t.head,i=se(e.doc,r.line);if(0==ve(r,n)&&r.sticky==n.sticky)return t;var o=Ze(i);if(!o)return t;var l=qe(o,r.ch,r.sticky),s=o[l];if(s.from!=r.ch&&s.to!=r.ch)return t;var a,u=l+(s.from==r.ch==(1!=s.level)?0:1);if(0==u||u==o.length)return t;if(n.line!=r.line)a=(n.line-r.line)*(\"ltr\"==e.doc.direction?1:-1)>0;else{var c=qe(o,n.ch,n.sticky),h=c-l||(n.ch-r.ch)*(1==s.level?-1:1);a=c==u-1||c==u?h<0:h>0}var f=o[u+(a?-1:0)],d=a==(1==f.level),p=d?f.from:f.to,g=d?\"after\":\"before\";return r.ch==p&&r.sticky==g?t:new gi(new ge(r.line,p,g),n)}(e,new gi(Ce(o,C),b)),ji(o,vi(S,s),K)}}var d=i.wrapper.getBoundingClientRect(),p=0;function g(t){e.state.selectingText=!1,p=1/0,st(t),i.input.focus(),tt(i.wrapper.ownerDocument,\"mousemove\",v),tt(i.wrapper.ownerDocument,\"mouseup\",m),o.history.lastSelOrigin=null}var v=jn(e,function(t){ft(t)?function t(r){var l=++p;var s=nn(e,r,!0,\"rectangle\"==n.unit);if(!s)return;if(0!=ve(s,h)){e.curOp.focus=W(),f(s);var a=yn(i,o);(s.line>=a.to||s.line<a.from)&&setTimeout(jn(e,function(){p==l&&t(r)}),150)}else{var u=r.clientY<d.top?-20:r.clientY>d.bottom?20:0;u&&setTimeout(jn(e,function(){p==l&&(i.scroller.scrollTop+=u,t(r))}),50)}}(t):g(t)}),m=jn(e,g);e.state.selectingText=m,Je(i.wrapper.ownerDocument,\"mousemove\",v),Je(i.wrapper.ownerDocument,\"mouseup\",m)}(e,n,t,o)}(t,u,h,e):ht(e)==r.scroller&&st(e):2==c?(u&&Bi(t.doc,u),setTimeout(function(){return r.input.focus()},20)):3==c&&(S?fl(t,e):dn(t)))}}function ul(e,t,r){if(\"char\"==r)return new gi(t,t);if(\"word\"==r)return e.findWordAt(t);if(\"line\"==r)return new gi(ge(t.line,0),Ce(e.doc,ge(t.line+1,0)));var n=r(e,t);return new gi(n.from,n.to)}function cl(e,t,r,n){var i,o;if(t.touches)i=t.touches[0].clientX,o=t.touches[0].clientY;else try{i=t.clientX,o=t.clientY}catch(t){return!1}if(i>=Math.floor(e.display.gutters.getBoundingClientRect().right))return!1;n&&st(t);var l=e.display,s=l.lineDiv.getBoundingClientRect();if(o>s.bottom||!ot(e,r))return ut(t);o-=s.top-l.viewOffset;for(var a=0;a<e.options.gutters.length;++a){var u=l.gutters.childNodes[a];if(u&&u.getBoundingClientRect().right>=i)return rt(e,r,e,fe(e.doc,o),e.options.gutters[a],t),ut(t)}}function hl(e,t){return cl(e,t,\"gutterClick\",!0)}function fl(e,t){yr(e.display,t)||function(e,t){if(!ot(e,\"gutterContextMenu\"))return!1;return cl(e,t,\"gutterContextMenu\",!1)}(e,t)||nt(e,t,\"contextmenu\")||e.display.input.onContextMenu(t)}function dl(e){e.display.wrapper.className=e.display.wrapper.className.replace(/\\s*cm-s-\\S+/g,\"\")+e.options.theme.replace(/(^|\\s)\\s*/g,\" cm-s-\"),Er(e)}sl.prototype.compare=function(e,t,r){return this.time+400>e&&0==ve(t,this.pos)&&r==this.button};var pl={toString:function(){return\"CodeMirror.Init\"}},gl={},vl={};function ml(e){si(e),_n(e),bn(e)}function yl(e,t,r){if(!t!=!(r&&r!=pl)){var n=e.display.dragFunctions,i=t?Je:tt;i(e.display.scroller,\"dragstart\",n.start),i(e.display.scroller,\"dragenter\",n.enter),i(e.display.scroller,\"dragover\",n.over),i(e.display.scroller,\"dragleave\",n.leave),i(e.display.scroller,\"drop\",n.drop)}}function bl(e){e.options.lineWrapping?(H(e.display.wrapper,\"CodeMirror-wrap\"),e.display.sizer.style.minWidth=\"\",e.display.sizerWidth=null):(T(e.display.wrapper,\"CodeMirror-wrap\"),Ye(e)),rn(e),_n(e),Er(e),setTimeout(function(){return Hn(e)},100)}function wl(e,t){var n=this;if(!(this instanceof wl))return new wl(e,t);this.options=t=t?z(t):{},z(gl,t,!1),ai(t);var i=t.value;\"string\"==typeof i&&(i=new So(i,t.mode,null,t.lineSeparator,t.direction)),this.doc=i;var o=new wl.inputStyles[t.inputStyle](this),u=this.display=new function(e,t,n){var i=this;this.input=n,i.scrollbarFiller=O(\"div\",null,\"CodeMirror-scrollbar-filler\"),i.scrollbarFiller.setAttribute(\"cm-not-content\",\"true\"),i.gutterFiller=O(\"div\",null,\"CodeMirror-gutter-filler\"),i.gutterFiller.setAttribute(\"cm-not-content\",\"true\"),i.lineDiv=A(\"div\",null,\"CodeMirror-code\"),i.selectionDiv=O(\"div\",null,null,\"position: relative; z-index: 1\"),i.cursorDiv=O(\"div\",null,\"CodeMirror-cursors\"),i.measure=O(\"div\",null,\"CodeMirror-measure\"),i.lineMeasure=O(\"div\",null,\"CodeMirror-measure\"),i.lineSpace=A(\"div\",[i.measure,i.lineMeasure,i.selectionDiv,i.cursorDiv,i.lineDiv],null,\"position: relative; outline: none\");var o=A(\"div\",[i.lineSpace],\"CodeMirror-lines\");i.mover=O(\"div\",[o],null,\"position: relative\"),i.sizer=O(\"div\",[i.mover],\"CodeMirror-sizer\"),i.sizerWidth=null,i.heightForcer=O(\"div\",null,null,\"position: absolute; height: \"+G+\"px; width: 1px;\"),i.gutters=O(\"div\",null,\"CodeMirror-gutters\"),i.lineGutter=null,i.scroller=O(\"div\",[i.sizer,i.heightForcer,i.gutters],\"CodeMirror-scroll\"),i.scroller.setAttribute(\"tabIndex\",\"-1\"),i.wrapper=O(\"div\",[i.scrollbarFiller,i.gutterFiller,i.scroller],\"CodeMirror\"),l&&s<8&&(i.gutters.style.zIndex=-1,i.scroller.style.paddingRight=0),a||r&&m||(i.scroller.draggable=!0),e&&(e.appendChild?e.appendChild(i.wrapper):e(i.wrapper)),i.viewFrom=i.viewTo=t.first,i.reportedViewFrom=i.reportedViewTo=t.first,i.view=[],i.renderedView=null,i.externalMeasured=null,i.viewOffset=0,i.lastWrapHeight=i.lastWrapWidth=0,i.updateLineNumbers=null,i.nativeBarWidth=i.barHeight=i.barWidth=0,i.scrollbarsClipped=!1,i.lineNumWidth=i.lineNumInnerWidth=i.lineNumChars=null,i.alignWidgets=!1,i.cachedCharWidth=i.cachedTextHeight=i.cachedPaddingH=null,i.maxLine=null,i.maxLineLength=0,i.maxLineChanged=!1,i.wheelDX=i.wheelDY=i.wheelStartX=i.wheelStartY=null,i.shift=!1,i.selForContextMenu=null,i.activeTouch=null,n.init(i)}(e,i,o);for(var c in u.wrapper.CodeMirror=this,si(this),dl(this),t.lineWrapping&&(this.display.wrapper.className+=\" CodeMirror-wrap\"),En(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:!1,cutIncoming:!1,selectingText:!1,draggingText:!1,highlight:new R,keySeq:null,specialChars:null},t.autofocus&&!m&&u.input.focus(),l&&s<11&&setTimeout(function(){return n.display.input.reset(!0)},20),function(e){var t=e.display;Je(t.scroller,\"mousedown\",jn(e,al)),Je(t.scroller,\"dblclick\",l&&s<11?jn(e,function(t){if(!nt(e,t)){var r=nn(e,t);if(r&&!hl(e,t)&&!yr(e.display,t)){st(t);var n=e.findWordAt(r);Bi(e.doc,n.anchor,n.head)}}}):function(t){return nt(e,t)||st(t)});S||Je(t.scroller,\"contextmenu\",function(t){return fl(e,t)});var r,n={end:0};function i(){t.activeTouch&&(r=setTimeout(function(){return t.activeTouch=null},1e3),(n=t.activeTouch).end=+new Date)}function o(e,t){if(null==t.left)return!0;var r=t.left-e.left,n=t.top-e.top;return r*r+n*n>400}Je(t.scroller,\"touchstart\",function(i){if(!nt(e,i)&&!function(e){if(1!=e.touches.length)return!1;var t=e.touches[0];return t.radiusX<=1&&t.radiusY<=1}(i)&&!hl(e,i)){t.input.ensurePolled(),clearTimeout(r);var o=+new Date;t.activeTouch={start:o,moved:!1,prev:o-n.end<=300?n:null},1==i.touches.length&&(t.activeTouch.left=i.touches[0].pageX,t.activeTouch.top=i.touches[0].pageY)}}),Je(t.scroller,\"touchmove\",function(){t.activeTouch&&(t.activeTouch.moved=!0)}),Je(t.scroller,\"touchend\",function(r){var n=t.activeTouch;if(n&&!yr(t,r)&&null!=n.left&&!n.moved&&new Date-n.start<300){var l,s=e.coordsChar(t.activeTouch,\"page\");l=!n.prev||o(n,n.prev)?new gi(s,s):!n.prev.prev||o(n,n.prev.prev)?e.findWordAt(s):new gi(ge(s.line,0),Ce(e.doc,ge(s.line+1,0))),e.setSelection(l.anchor,l.head),e.focus(),st(r)}i()}),Je(t.scroller,\"touchcancel\",i),Je(t.scroller,\"scroll\",function(){t.scroller.clientHeight&&(Mn(e,t.scroller.scrollTop),On(e,t.scroller.scrollLeft,!0),rt(e,\"scroll\",e))}),Je(t.scroller,\"mousewheel\",function(t){return di(e,t)}),Je(t.scroller,\"DOMMouseScroll\",function(t){return di(e,t)}),Je(t.wrapper,\"scroll\",function(){return t.wrapper.scrollTop=t.wrapper.scrollLeft=0}),t.dragFunctions={enter:function(t){nt(e,t)||ct(t)},over:function(t){nt(e,t)||(!function(e,t){var r=nn(e,t);if(r){var n=document.createDocumentFragment();an(e,r,n),e.display.dragCursor||(e.display.dragCursor=O(\"div\",null,\"CodeMirror-cursors CodeMirror-dragcursors\"),e.display.lineSpace.insertBefore(e.display.dragCursor,e.display.cursorDiv)),N(e.display.dragCursor,n)}}(e,t),ct(t))},start:function(t){return function(e,t){if(l&&(!e.state.draggingText||+new Date-Lo<100))ct(t);else if(!nt(e,t)&&!yr(e.display,t)&&(t.dataTransfer.setData(\"Text\",e.getSelection()),t.dataTransfer.effectAllowed=\"copyMove\",t.dataTransfer.setDragImage&&!f)){var r=O(\"img\",null,null,\"position: fixed; left: 0; top: 0;\");r.src=\"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\",h&&(r.width=r.height=1,e.display.wrapper.appendChild(r),r._top=r.offsetTop),t.dataTransfer.setDragImage(r,0,0),h&&r.parentNode.removeChild(r)}}(e,t)},drop:jn(e,ko),leave:function(t){nt(e,t)||To(e)}};var a=t.input.getField();Je(a,\"keyup\",function(t){return nl.call(e,t)}),Je(a,\"keydown\",jn(e,rl)),Je(a,\"keypress\",jn(e,il)),Je(a,\"focus\",function(t){return pn(e,t)}),Je(a,\"blur\",function(t){return gn(e,t)})}(this),Oo(),In(this),this.curOp.forceUpdate=!0,Mi(this,i),t.autofocus&&!m||this.hasFocus()?setTimeout(E(pn,this),20):gn(this),vl)vl.hasOwnProperty(c)&&vl[c](n,t[c],pl);wn(this),t.finishInit&&t.finishInit(this);for(var d=0;d<xl.length;++d)xl[d](n);Rn(this),a&&t.lineWrapping&&\"optimizelegibility\"==getComputedStyle(u.lineDiv).textRendering&&(u.lineDiv.style.textRendering=\"auto\")}wl.defaults=gl,wl.optionHandlers=vl;var xl=[];function Cl(e,t,r,n){var i,o=e.doc;null==r&&(r=\"add\"),\"smart\"==r&&(o.mode.indent?i=zt(e,t).state:r=\"prev\");var l=e.options.tabSize,s=se(o,t),a=I(s.text,null,l);s.stateAfter&&(s.stateAfter=null);var u,c=s.text.match(/^\\s*/)[0];if(n||/\\S/.test(s.text)){if(\"smart\"==r&&((u=o.mode.indent(i,s.text.slice(c.length),s.text))==U||u>150)){if(!n)return;r=\"prev\"}}else u=0,r=\"not\";\"prev\"==r?u=t>o.first?I(se(o,t-1).text,null,l):0:\"add\"==r?u=a+e.options.indentUnit:\"subtract\"==r?u=a-e.options.indentUnit:\"number\"==typeof r&&(u=a+r),u=Math.max(0,u);var h=\"\",f=0;if(e.options.indentWithTabs)for(var d=Math.floor(u/l);d;--d)f+=l,h+=\"\\t\";if(f<u&&(h+=_(u-f)),h!=c)return lo(o,h,ge(t,0),ge(t,c.length),\"+input\"),s.stateAfter=null,!0;for(var p=0;p<o.sel.ranges.length;p++){var g=o.sel.ranges[p];if(g.head.line==t&&g.head.ch<c.length){var v=ge(t,c.length);Ui(o,p,new gi(v,v));break}}}wl.defineInitHook=function(e){return xl.push(e)};var Sl=null;function Ll(e){Sl=e}function kl(e,t,r,n,i){var o=e.doc;e.display.shift=!1,n||(n=o.sel);var l,s=e.state.pasteIncoming||\"paste\"==i,a=bt(t),u=null;if(s&&n.ranges.length>1)if(Sl&&Sl.text.join(\"\\n\")==t){if(n.ranges.length%Sl.text.length==0){u=[];for(var c=0;c<Sl.text.length;c++)u.push(o.splitLines(Sl.text[c]))}}else a.length==n.ranges.length&&e.options.pasteLinesPerSelection&&(u=$(a,function(e){return[e]}));for(var h=n.ranges.length-1;h>=0;h--){var f=n.ranges[h],d=f.from(),p=f.to();f.empty()&&(r&&r>0?d=ge(d.line,d.ch-r):e.state.overwrite&&!s?p=ge(p.line,Math.min(se(o,p.line).text.length,p.ch+q(a).length)):Sl&&Sl.lineWise&&Sl.text.join(\"\\n\")==t&&(d=p=ge(d.line,0))),l=e.curOp.updateInput;var g={from:d,to:p,text:u?u[h%u.length]:a,origin:i||(s?\"paste\":e.state.cutIncoming?\"cut\":\"+input\")};to(e.doc,g),or(e,\"inputRead\",e,g)}t&&!s&&Ml(e,t),Sn(e),e.curOp.updateInput=l,e.curOp.typing=!0,e.state.pasteIncoming=e.state.cutIncoming=!1}function Tl(e,t){var r=e.clipboardData&&e.clipboardData.getData(\"Text\");if(r)return e.preventDefault(),t.isReadOnly()||t.options.disableInput||Kn(t,function(){return kl(t,r,0,null,\"paste\")}),!0}function Ml(e,t){if(e.options.electricChars&&e.options.smartIndent)for(var r=e.doc.sel,n=r.ranges.length-1;n>=0;n--){var i=r.ranges[n];if(!(i.head.ch>100||n&&r.ranges[n-1].head.line==i.head.line)){var o=e.getModeAt(i.head),l=!1;if(o.electricChars){for(var s=0;s<o.electricChars.length;s++)if(t.indexOf(o.electricChars.charAt(s))>-1){l=Cl(e,i.head.line,\"smart\");break}}else o.electricInput&&o.electricInput.test(se(e.doc,i.head.line).text.slice(0,i.head.ch))&&(l=Cl(e,i.head.line,\"smart\"));l&&or(e,\"electricInput\",e,i.head.line)}}}function Nl(e){for(var t=[],r=[],n=0;n<e.doc.sel.ranges.length;n++){var i=e.doc.sel.ranges[n].head.line,o={anchor:ge(i,0),head:ge(i+1,0)};r.push(o),t.push(e.getRange(o.anchor,o.head))}return{text:t,ranges:r}}function Ol(e,t){e.setAttribute(\"autocorrect\",\"off\"),e.setAttribute(\"autocapitalize\",\"off\"),e.setAttribute(\"spellcheck\",!!t)}function Al(){var e=O(\"textarea\",null,null,\"position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; outline: none\"),t=O(\"div\",[e],null,\"overflow: hidden; position: relative; width: 3px; height: 0px;\");return a?e.style.width=\"1000px\":e.setAttribute(\"wrap\",\"off\"),g&&(e.style.border=\"1px solid black\"),Ol(e),t}function Dl(e,t,r,n,i){var o=t,l=r,s=se(e,t.line);function a(n){var o,l;if(null==(o=i?function(e,t,r,n){var i=Ze(t,e.doc.direction);if(!i)return jo(t,r,n);r.ch>=t.text.length?(r.ch=t.text.length,r.sticky=\"before\"):r.ch<=0&&(r.ch=0,r.sticky=\"after\");var o=qe(i,r.ch,r.sticky),l=i[o];if(\"ltr\"==e.doc.direction&&l.level%2==0&&(n>0?l.to>r.ch:l.from<r.ch))return jo(t,r,n);var s,a=function(e,r){return Ko(t,e instanceof ge?e.ch:e,r)},u=function(r){return e.options.lineWrapping?(s=s||Nr(e,t),_r(e,t,s,r)):{begin:0,end:t.text.length}},c=u(\"before\"==r.sticky?a(r,-1):r.ch);if(\"rtl\"==e.doc.direction||1==l.level){var h=1==l.level==n<0,f=a(r,h?1:-1);if(null!=f&&(h?f<=l.to&&f<=c.end:f>=l.from&&f>=c.begin)){var d=h?\"before\":\"after\";return new ge(r.line,f,d)}}var p=function(e,t,n){for(var o=function(e,t){return t?new ge(r.line,a(e,1),\"before\"):new ge(r.line,e,\"after\")};e>=0&&e<i.length;e+=t){var l=i[e],s=t>0==(1!=l.level),u=s?n.begin:a(n.end,-1);if(l.from<=u&&u<l.to)return o(u,s);if(u=s?l.from:a(l.to,-1),n.begin<=u&&u<n.end)return o(u,s)}},g=p(o+n,n,c);if(g)return g;var v=n>0?c.end:a(c.begin,-1);return null==v||n>0&&v==t.text.length||!(g=p(n>0?0:i.length-1,n,u(v)))?null:g}(e.cm,s,t,r):jo(s,t,r))){if(n||(l=t.line+r)<e.first||l>=e.first+e.size||(t=new ge(l,t.ch,t.sticky),!(s=se(e,l))))return!1;t=Xo(i,e.cm,s,t.line,r)}else t=o;return!0}if(\"char\"==n)a();else if(\"column\"==n)a(!0);else if(\"word\"==n||\"group\"==n)for(var u=null,c=\"group\"==n,h=e.cm&&e.cm.getHelper(t,\"wordChars\"),f=!0;!(r<0)||a(!f);f=!1){var d=s.text.charAt(t.ch)||\"\\n\",p=te(d,h)?\"w\":c&&\"\\n\"==d?\"n\":!c||/\\s/.test(d)?null:\"p\";if(!c||f||p||(p=\"s\"),u&&u!=p){r<0&&(r=1,a(),t.sticky=\"after\");break}if(p&&(u=p),r>0&&!a(!f))break}var g=Zi(e,t,o,l,!0);return me(o,g)&&(g.hitSide=!0),g}function Wl(e,t,r,n){var i,o,l=e.doc,s=t.left;if(\"page\"==n){var a=Math.min(e.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight),u=Math.max(a-.5*Zr(e.display),3);i=(r>0?t.bottom:t.top)+r*u}else\"line\"==n&&(i=r>0?t.bottom+3:t.top-3);for(;(o=Xr(e,s,i)).outside;){if(r<0?i<=0:i>=l.height){o.hitSide=!0;break}i+=5*r}return o}var Hl=function(e){this.cm=e,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new R,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};function Fl(e,t){var r=Mr(e,t.line);if(!r||r.hidden)return null;var n=se(e.doc,t.line),i=kr(r,n,t.line),o=Ze(n,e.doc.direction),l=\"left\";o&&(l=qe(o,t.ch)%2?\"right\":\"left\");var s=Wr(i.map,t.ch,l);return s.offset=\"right\"==s.collapse?s.end:s.start,s}function Pl(e,t){return t&&(e.bad=!0),e}function El(e,t,r){var n;if(t==e.display.lineDiv){if(!(n=e.display.lineDiv.childNodes[r]))return Pl(e.clipPos(ge(e.display.viewTo-1)),!0);t=null,r=0}else for(n=t;;n=n.parentNode){if(!n||n==e.display.lineDiv)return null;if(n.parentNode&&n.parentNode==e.display.lineDiv)break}for(var i=0;i<e.display.view.length;i++){var o=e.display.view[i];if(o.node==n)return zl(o,t,r)}}function zl(e,t,r){var n=e.text.firstChild,i=!1;if(!t||!D(n,t))return Pl(ge(he(e.line),0),!0);if(t==n&&(i=!0,t=n.childNodes[r],r=0,!t)){var o=e.rest?q(e.rest):e.line;return Pl(ge(he(o),o.text.length),i)}var l=3==t.nodeType?t:null,s=t;for(l||1!=t.childNodes.length||3!=t.firstChild.nodeType||(l=t.firstChild,r&&(r=l.nodeValue.length));s.parentNode!=n;)s=s.parentNode;var a=e.measure,u=a.maps;function c(t,r,n){for(var i=-1;i<(u?u.length:0);i++)for(var o=i<0?a.map:u[i],l=0;l<o.length;l+=3){var s=o[l+2];if(s==t||s==r){var c=he(i<0?e.line:e.rest[i]),h=o[l]+n;return(n<0||s!=t)&&(h=o[l+(n?1:0)]),ge(c,h)}}}var h=c(l,s,r);if(h)return Pl(h,i);for(var f=s.nextSibling,d=l?l.nodeValue.length-r:0;f;f=f.nextSibling){if(h=c(f,f.firstChild,0))return Pl(ge(h.line,h.ch-d),i);d+=f.textContent.length}for(var p=s.previousSibling,g=r;p;p=p.previousSibling){if(h=c(p,p.firstChild,-1))return Pl(ge(h.line,h.ch+g),i);g+=p.textContent.length}}Hl.prototype.init=function(e){var t=this,r=this,n=r.cm,i=r.div=e.lineDiv;function o(e){if(!nt(n,e)){if(n.somethingSelected())Ll({lineWise:!1,text:n.getSelections()}),\"cut\"==e.type&&n.replaceSelection(\"\",null,\"cut\");else{if(!n.options.lineWiseCopyCut)return;var t=Nl(n);Ll({lineWise:!0,text:t.text}),\"cut\"==e.type&&n.operation(function(){n.setSelections(t.ranges,0,V),n.replaceSelection(\"\",null,\"cut\")})}if(e.clipboardData){e.clipboardData.clearData();var o=Sl.text.join(\"\\n\");if(e.clipboardData.setData(\"Text\",o),e.clipboardData.getData(\"Text\")==o)return void e.preventDefault()}var l=Al(),s=l.firstChild;n.display.lineSpace.insertBefore(l,n.display.lineSpace.firstChild),s.value=Sl.text.join(\"\\n\");var a=document.activeElement;P(s),setTimeout(function(){n.display.lineSpace.removeChild(l),a.focus(),a==i&&r.showPrimarySelection()},50)}}Ol(i,n.options.spellcheck),Je(i,\"paste\",function(e){nt(n,e)||Tl(e,n)||s<=11&&setTimeout(jn(n,function(){return t.updateFromDOM()}),20)}),Je(i,\"compositionstart\",function(e){t.composing={data:e.data,done:!1}}),Je(i,\"compositionupdate\",function(e){t.composing||(t.composing={data:e.data,done:!1})}),Je(i,\"compositionend\",function(e){t.composing&&(e.data!=t.composing.data&&t.readFromDOMSoon(),t.composing.done=!0)}),Je(i,\"touchstart\",function(){return r.forceCompositionEnd()}),Je(i,\"input\",function(){t.composing||t.readFromDOMSoon()}),Je(i,\"copy\",o),Je(i,\"cut\",o)},Hl.prototype.prepareSelection=function(){var e=sn(this.cm,!1);return e.focus=this.cm.state.focused,e},Hl.prototype.showSelection=function(e,t){e&&this.cm.display.view.length&&((e.focus||t)&&this.showPrimarySelection(),this.showMultipleSelections(e))},Hl.prototype.showPrimarySelection=function(){var e=window.getSelection(),t=this.cm,n=t.doc.sel.primary(),i=n.from(),o=n.to();if(t.display.viewTo==t.display.viewFrom||i.line>=t.display.viewTo||o.line<t.display.viewFrom)e.removeAllRanges();else{var l=El(t,e.anchorNode,e.anchorOffset),s=El(t,e.focusNode,e.focusOffset);if(!l||l.bad||!s||s.bad||0!=ve(we(l,s),i)||0!=ve(be(l,s),o)){var a=t.display.view,u=i.line>=t.display.viewFrom&&Fl(t,i)||{node:a[0].measure.map[2],offset:0},c=o.line<t.display.viewTo&&Fl(t,o);if(!c){var h=a[a.length-1].measure,f=h.maps?h.maps[h.maps.length-1]:h.map;c={node:f[f.length-1],offset:f[f.length-2]-f[f.length-3]}}if(u&&c){var d,p=e.rangeCount&&e.getRangeAt(0);try{d=k(u.node,u.offset,c.offset,c.node)}catch(e){}d&&(!r&&t.state.focused?(e.collapse(u.node,u.offset),d.collapsed||(e.removeAllRanges(),e.addRange(d))):(e.removeAllRanges(),e.addRange(d)),p&&null==e.anchorNode?e.addRange(p):r&&this.startGracePeriod()),this.rememberSelection()}else e.removeAllRanges()}}},Hl.prototype.startGracePeriod=function(){var e=this;clearTimeout(this.gracePeriod),this.gracePeriod=setTimeout(function(){e.gracePeriod=!1,e.selectionChanged()&&e.cm.operation(function(){return e.cm.curOp.selectionChanged=!0})},20)},Hl.prototype.showMultipleSelections=function(e){N(this.cm.display.cursorDiv,e.cursors),N(this.cm.display.selectionDiv,e.selection)},Hl.prototype.rememberSelection=function(){var e=window.getSelection();this.lastAnchorNode=e.anchorNode,this.lastAnchorOffset=e.anchorOffset,this.lastFocusNode=e.focusNode,this.lastFocusOffset=e.focusOffset},Hl.prototype.selectionInEditor=function(){var e=window.getSelection();if(!e.rangeCount)return!1;var t=e.getRangeAt(0).commonAncestorContainer;return D(this.div,t)},Hl.prototype.focus=function(){\"nocursor\"!=this.cm.options.readOnly&&(this.selectionInEditor()||this.showSelection(this.prepareSelection(),!0),this.div.focus())},Hl.prototype.blur=function(){this.div.blur()},Hl.prototype.getField=function(){return this.div},Hl.prototype.supportsTouch=function(){return!0},Hl.prototype.receivedFocus=function(){var e=this;this.selectionInEditor()?this.pollSelection():Kn(this.cm,function(){return e.cm.curOp.selectionChanged=!0}),this.polling.set(this.cm.options.pollInterval,function t(){e.cm.state.focused&&(e.pollSelection(),e.polling.set(e.cm.options.pollInterval,t))})},Hl.prototype.selectionChanged=function(){var e=window.getSelection();return e.anchorNode!=this.lastAnchorNode||e.anchorOffset!=this.lastAnchorOffset||e.focusNode!=this.lastFocusNode||e.focusOffset!=this.lastFocusOffset},Hl.prototype.pollSelection=function(){if(null==this.readDOMTimeout&&!this.gracePeriod&&this.selectionChanged()){var e=window.getSelection(),t=this.cm;if(v&&c&&this.cm.options.gutters.length&&function(e){for(var t=e;t;t=t.parentNode)if(/CodeMirror-gutter-wrapper/.test(t.className))return!0;return!1}(e.anchorNode))return this.cm.triggerOnKeyDown({type:\"keydown\",keyCode:8,preventDefault:Math.abs}),this.blur(),void this.focus();if(!this.composing){this.rememberSelection();var r=El(t,e.anchorNode,e.anchorOffset),n=El(t,e.focusNode,e.focusOffset);r&&n&&Kn(t,function(){ji(t.doc,mi(r,n),V),(r.bad||n.bad)&&(t.curOp.selectionChanged=!0)})}}},Hl.prototype.pollContent=function(){null!=this.readDOMTimeout&&(clearTimeout(this.readDOMTimeout),this.readDOMTimeout=null);var e,t,r,n=this.cm,i=n.display,o=n.doc.sel.primary(),l=o.from(),s=o.to();if(0==l.ch&&l.line>n.firstLine()&&(l=ge(l.line-1,se(n.doc,l.line-1).length)),s.ch==se(n.doc,s.line).text.length&&s.line<n.lastLine()&&(s=ge(s.line+1,0)),l.line<i.viewFrom||s.line>i.viewTo-1)return!1;l.line==i.viewFrom||0==(e=on(n,l.line))?(t=he(i.view[0].line),r=i.view[0].node):(t=he(i.view[e].line),r=i.view[e-1].node.nextSibling);var a,u,c=on(n,s.line);if(c==i.view.length-1?(a=i.viewTo-1,u=i.lineDiv.lastChild):(a=he(i.view[c+1].line)-1,u=i.view[c+1].node.previousSibling),!r)return!1;for(var h=n.doc.splitLines(function(e,t,r,n,i){var o=\"\",l=!1,s=e.doc.lineSeparator();function a(){l&&(o+=s,l=!1)}function u(e){e&&(a(),o+=e)}function c(t){if(1==t.nodeType){var r=t.getAttribute(\"cm-text\");if(null!=r)return void u(r||t.textContent.replace(/\\u200b/g,\"\"));var o,h=t.getAttribute(\"cm-marker\");if(h){var f=e.findMarks(ge(n,0),ge(i+1,0),(g=+h,function(e){return e.id==g}));return void(f.length&&(o=f[0].find(0))&&u(ae(e.doc,o.from,o.to).join(s)))}if(\"false\"==t.getAttribute(\"contenteditable\"))return;var d=/^(pre|div|p)$/i.test(t.nodeName);d&&a();for(var p=0;p<t.childNodes.length;p++)c(t.childNodes[p]);d&&(l=!0)}else 3==t.nodeType&&u(t.nodeValue);var g}for(;c(t),t!=r;)t=t.nextSibling;return o}(n,r,u,t,a)),f=ae(n.doc,ge(t,0),ge(a,se(n.doc,a).text.length));h.length>1&&f.length>1;)if(q(h)==q(f))h.pop(),f.pop(),a--;else{if(h[0]!=f[0])break;h.shift(),f.shift(),t++}for(var d=0,p=0,g=h[0],v=f[0],m=Math.min(g.length,v.length);d<m&&g.charCodeAt(d)==v.charCodeAt(d);)++d;for(var y=q(h),b=q(f),w=Math.min(y.length-(1==h.length?d:0),b.length-(1==f.length?d:0));p<w&&y.charCodeAt(y.length-p-1)==b.charCodeAt(b.length-p-1);)++p;if(1==h.length&&1==f.length&&t==l.line)for(;d&&d>l.ch&&y.charCodeAt(y.length-p-1)==b.charCodeAt(b.length-p-1);)d--,p++;h[h.length-1]=y.slice(0,y.length-p).replace(/^\\u200b+/,\"\"),h[0]=h[0].slice(d).replace(/\\u200b+$/,\"\");var x=ge(t,d),C=ge(a,f.length?q(f).length-p:0);return h.length>1||h[0]||ve(x,C)?(lo(n.doc,h,x,C,\"+input\"),!0):void 0},Hl.prototype.ensurePolled=function(){this.forceCompositionEnd()},Hl.prototype.reset=function(){this.forceCompositionEnd()},Hl.prototype.forceCompositionEnd=function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},Hl.prototype.readFromDOMSoon=function(){var e=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout(function(){if(e.readDOMTimeout=null,e.composing){if(!e.composing.done)return;e.composing=null}e.updateFromDOM()},80))},Hl.prototype.updateFromDOM=function(){var e=this;!this.cm.isReadOnly()&&this.pollContent()||Kn(this.cm,function(){return _n(e.cm)})},Hl.prototype.setUneditable=function(e){e.contentEditable=\"false\"},Hl.prototype.onKeyPress=function(e){0==e.charCode||this.composing||(e.preventDefault(),this.cm.isReadOnly()||jn(this.cm,kl)(this.cm,String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),0))},Hl.prototype.readOnlyChanged=function(e){this.div.contentEditable=String(\"nocursor\"!=e)},Hl.prototype.onContextMenu=function(){},Hl.prototype.resetPosition=function(){},Hl.prototype.needsContentAttribute=!0;var Il,Rl,Bl,Gl=function(e){this.cm=e,this.prevInput=\"\",this.pollingFast=!1,this.polling=new R,this.hasSelection=!1,this.composing=null};Gl.prototype.init=function(e){var t=this,r=this,n=this.cm;this.createField(e);var i=this.textarea;function o(e){if(!nt(n,e)){if(n.somethingSelected())Ll({lineWise:!1,text:n.getSelections()});else{if(!n.options.lineWiseCopyCut)return;var t=Nl(n);Ll({lineWise:!0,text:t.text}),\"cut\"==e.type?n.setSelections(t.ranges,null,V):(r.prevInput=\"\",i.value=t.text.join(\"\\n\"),P(i))}\"cut\"==e.type&&(n.state.cutIncoming=!0)}}e.wrapper.insertBefore(this.wrapper,e.wrapper.firstChild),g&&(i.style.width=\"0px\"),Je(i,\"input\",function(){l&&s>=9&&t.hasSelection&&(t.hasSelection=null),r.poll()}),Je(i,\"paste\",function(e){nt(n,e)||Tl(e,n)||(n.state.pasteIncoming=!0,r.fastPoll())}),Je(i,\"cut\",o),Je(i,\"copy\",o),Je(e.scroller,\"paste\",function(t){yr(e,t)||nt(n,t)||(n.state.pasteIncoming=!0,r.focus())}),Je(e.lineSpace,\"selectstart\",function(t){yr(e,t)||st(t)}),Je(i,\"compositionstart\",function(){var e=n.getCursor(\"from\");r.composing&&r.composing.range.clear(),r.composing={start:e,range:n.markText(e,n.getCursor(\"to\"),{className:\"CodeMirror-composing\"})}}),Je(i,\"compositionend\",function(){r.composing&&(r.poll(),r.composing.range.clear(),r.composing=null)})},Gl.prototype.createField=function(e){this.wrapper=Al(),this.textarea=this.wrapper.firstChild},Gl.prototype.prepareSelection=function(){var e=this.cm,t=e.display,r=e.doc,n=sn(e);if(e.options.moveInputWithCursor){var i=Vr(e,r.sel.primary().head,\"div\"),o=t.wrapper.getBoundingClientRect(),l=t.lineDiv.getBoundingClientRect();n.teTop=Math.max(0,Math.min(t.wrapper.clientHeight-10,i.top+l.top-o.top)),n.teLeft=Math.max(0,Math.min(t.wrapper.clientWidth-10,i.left+l.left-o.left))}return n},Gl.prototype.showSelection=function(e){var t=this.cm.display;N(t.cursorDiv,e.cursors),N(t.selectionDiv,e.selection),null!=e.teTop&&(this.wrapper.style.top=e.teTop+\"px\",this.wrapper.style.left=e.teLeft+\"px\")},Gl.prototype.reset=function(e){if(!this.contextMenuPending&&!this.composing){var t=this.cm;if(t.somethingSelected()){this.prevInput=\"\";var r=t.getSelection();this.textarea.value=r,t.state.focused&&P(this.textarea),l&&s>=9&&(this.hasSelection=r)}else e||(this.prevInput=this.textarea.value=\"\",l&&s>=9&&(this.hasSelection=null))}},Gl.prototype.getField=function(){return this.textarea},Gl.prototype.supportsTouch=function(){return!1},Gl.prototype.focus=function(){if(\"nocursor\"!=this.cm.options.readOnly&&(!m||W()!=this.textarea))try{this.textarea.focus()}catch(e){}},Gl.prototype.blur=function(){this.textarea.blur()},Gl.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},Gl.prototype.receivedFocus=function(){this.slowPoll()},Gl.prototype.slowPoll=function(){var e=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,function(){e.poll(),e.cm.state.focused&&e.slowPoll()})},Gl.prototype.fastPoll=function(){var e=!1,t=this;t.pollingFast=!0,t.polling.set(20,function r(){t.poll()||e?(t.pollingFast=!1,t.slowPoll()):(e=!0,t.polling.set(60,r))})},Gl.prototype.poll=function(){var e=this,t=this.cm,r=this.textarea,n=this.prevInput;if(this.contextMenuPending||!t.state.focused||wt(r)&&!n&&!this.composing||t.isReadOnly()||t.options.disableInput||t.state.keySeq)return!1;var i=r.value;if(i==n&&!t.somethingSelected())return!1;if(l&&s>=9&&this.hasSelection===i||y&&/[\\uf700-\\uf7ff]/.test(i))return t.display.input.reset(),!1;if(t.doc.sel==t.display.selForContextMenu){var o=i.charCodeAt(0);if(8203!=o||n||(n=\"\"),8666==o)return this.reset(),this.cm.execCommand(\"undo\")}for(var a=0,u=Math.min(n.length,i.length);a<u&&n.charCodeAt(a)==i.charCodeAt(a);)++a;return Kn(t,function(){kl(t,i.slice(a),n.length-a,null,e.composing?\"*compose\":null),i.length>1e3||i.indexOf(\"\\n\")>-1?r.value=e.prevInput=\"\":e.prevInput=i,e.composing&&(e.composing.range.clear(),e.composing.range=t.markText(e.composing.start,t.getCursor(\"to\"),{className:\"CodeMirror-composing\"}))}),!0},Gl.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},Gl.prototype.onKeyPress=function(){l&&s>=9&&(this.hasSelection=null),this.fastPoll()},Gl.prototype.onContextMenu=function(e){var t=this,r=t.cm,n=r.display,i=t.textarea,o=nn(r,e),u=n.scroller.scrollTop;if(o&&!h){r.options.resetSelectionOnContextMenu&&-1==r.doc.sel.contains(o)&&jn(r,ji)(r.doc,mi(o),V);var c=i.style.cssText,f=t.wrapper.style.cssText;t.wrapper.style.cssText=\"position: absolute\";var d,p=t.wrapper.getBoundingClientRect();if(i.style.cssText=\"position: absolute; width: 30px; height: 30px;\\n top: \"+(e.clientY-p.top-5)+\"px; left: \"+(e.clientX-p.left-5)+\"px;\\n z-index: 1000; background: \"+(l?\"rgba(255, 255, 255, .05)\":\"transparent\")+\";\\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);\",a&&(d=window.scrollY),n.input.focus(),a&&window.scrollTo(null,d),n.input.reset(),r.somethingSelected()||(i.value=t.prevInput=\" \"),t.contextMenuPending=!0,n.selForContextMenu=r.doc.sel,clearTimeout(n.detectingSelectAll),l&&s>=9&&v(),S){ct(e);var g=function(){tt(window,\"mouseup\",g),setTimeout(m,20)};Je(window,\"mouseup\",g)}else setTimeout(m,50)}function v(){if(null!=i.selectionStart){var e=r.somethingSelected(),o=\"\"+(e?i.value:\"\");i.value=\"⇚\",i.value=o,t.prevInput=e?\"\":\"\",i.selectionStart=1,i.selectionEnd=o.length,n.selForContextMenu=r.doc.sel}}function m(){if(t.contextMenuPending=!1,t.wrapper.style.cssText=f,i.style.cssText=c,l&&s<9&&n.scrollbars.setScrollTop(n.scroller.scrollTop=u),null!=i.selectionStart){(!l||l&&s<9)&&v();var e=0,o=function(){n.selForContextMenu==r.doc.sel&&0==i.selectionStart&&i.selectionEnd>0&&\"\"==t.prevInput?jn(r,Ji)(r):e++<10?n.detectingSelectAll=setTimeout(o,500):(n.selForContextMenu=null,n.input.reset())};n.detectingSelectAll=setTimeout(o,200)}}},Gl.prototype.readOnlyChanged=function(e){e||this.reset(),this.textarea.disabled=\"nocursor\"==e},Gl.prototype.setUneditable=function(){},Gl.prototype.needsContentAttribute=!1,function(e){var t=e.optionHandlers;function r(r,n,i,o){e.defaults[r]=n,i&&(t[r]=o?function(e,t,r){r!=pl&&i(e,t,r)}:i)}e.defineOption=r,e.Init=pl,r(\"value\",\"\",function(e,t){return e.setValue(t)},!0),r(\"mode\",null,function(e,t){e.doc.modeOption=t,Ci(e)},!0),r(\"indentUnit\",2,Ci,!0),r(\"indentWithTabs\",!1),r(\"smartIndent\",!0),r(\"tabSize\",4,function(e){Si(e),Er(e),_n(e)},!0),r(\"lineSeparator\",null,function(e,t){if(e.doc.lineSep=t,t){var r=[],n=e.doc.first;e.doc.iter(function(e){for(var i=0;;){var o=e.text.indexOf(t,i);if(-1==o)break;i=o+t.length,r.push(ge(n,o))}n++});for(var i=r.length-1;i>=0;i--)lo(e.doc,t,r[i],ge(r[i].line,r[i].ch+t.length))}}),r(\"specialChars\",/[\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u061c\\u200b-\\u200f\\u2028\\u2029\\ufeff]/g,function(e,t,r){e.state.specialChars=new RegExp(t.source+(t.test(\"\\t\")?\"\":\"|\\t\"),\"g\"),r!=pl&&e.refresh()}),r(\"specialCharPlaceholder\",$t,function(e){return e.refresh()},!0),r(\"electricChars\",!0),r(\"inputStyle\",m?\"contenteditable\":\"textarea\",function(){throw new Error(\"inputStyle can not (yet) be changed in a running editor\")},!0),r(\"spellcheck\",!1,function(e,t){return e.getInputField().spellcheck=t},!0),r(\"rtlMoveVisually\",!w),r(\"wholeLineUpdateBefore\",!0),r(\"theme\",\"default\",function(e){dl(e),ml(e)},!0),r(\"keyMap\",\"default\",function(e,t,r){var n=Uo(t),i=r!=pl&&Uo(r);i&&i.detach&&i.detach(e,n),n.attach&&n.attach(e,i||null)}),r(\"extraKeys\",null),r(\"configureMouse\",null),r(\"lineWrapping\",!1,bl,!0),r(\"gutters\",[],function(e){ai(e.options),ml(e)},!0),r(\"fixedGutter\",!0,function(e,t){e.display.gutters.style.left=t?en(e.display)+\"px\":\"0\",e.refresh()},!0),r(\"coverGutterNextToScrollbar\",!1,function(e){return Hn(e)},!0),r(\"scrollbarStyle\",\"native\",function(e){En(e),Hn(e),e.display.scrollbars.setScrollTop(e.doc.scrollTop),e.display.scrollbars.setScrollLeft(e.doc.scrollLeft)},!0),r(\"lineNumbers\",!1,function(e){ai(e.options),ml(e)},!0),r(\"firstLineNumber\",1,ml,!0),r(\"lineNumberFormatter\",function(e){return e},ml,!0),r(\"showCursorWhenSelecting\",!1,ln,!0),r(\"resetSelectionOnContextMenu\",!0),r(\"lineWiseCopyCut\",!0),r(\"pasteLinesPerSelection\",!0),r(\"readOnly\",!1,function(e,t){\"nocursor\"==t&&(gn(e),e.display.input.blur()),e.display.input.readOnlyChanged(t)}),r(\"disableInput\",!1,function(e,t){t||e.display.input.reset()},!0),r(\"dragDrop\",!0,yl),r(\"allowDropFileTypes\",null),r(\"cursorBlinkRate\",530),r(\"cursorScrollMargin\",0),r(\"cursorHeight\",1,ln,!0),r(\"singleCursorHeightPerLine\",!0,ln,!0),r(\"workTime\",100),r(\"workDelay\",100),r(\"flattenSpans\",!0,Si,!0),r(\"addModeClass\",!1,Si,!0),r(\"pollInterval\",100),r(\"undoDepth\",200,function(e,t){return e.doc.history.undoDepth=t}),r(\"historyEventDelay\",1250),r(\"viewportMargin\",10,function(e){return e.refresh()},!0),r(\"maxHighlightLength\",1e4,Si,!0),r(\"moveInputWithCursor\",!0,function(e,t){t||e.display.input.resetPosition()}),r(\"tabindex\",null,function(e,t){return e.display.input.getField().tabIndex=t||\"\"}),r(\"autofocus\",null),r(\"direction\",\"ltr\",function(e,t){return e.doc.setDirection(t)},!0)}(wl),Rl=(Il=wl).optionHandlers,Bl=Il.helpers={},Il.prototype={constructor:Il,focus:function(){window.focus(),this.display.input.focus()},setOption:function(e,t){var r=this.options,n=r[e];r[e]==t&&\"mode\"!=e||(r[e]=t,Rl.hasOwnProperty(e)&&jn(this,Rl[e])(this,t,n),rt(this,\"optionChange\",this,e))},getOption:function(e){return this.options[e]},getDoc:function(){return this.doc},addKeyMap:function(e,t){this.state.keyMaps[t?\"push\":\"unshift\"](Uo(e))},removeKeyMap:function(e){for(var t=this.state.keyMaps,r=0;r<t.length;++r)if(t[r]==e||t[r].name==e)return t.splice(r,1),!0},addOverlay:Xn(function(e,t){var r=e.token?e:Il.getMode(this.options,e);if(r.startState)throw new Error(\"Overlays may not be stateful.\");!function(e,t,r){for(var n=0,i=r(t);n<e.length&&r(e[n])<=i;)n++;e.splice(n,0,t)}(this.state.overlays,{mode:r,modeSpec:e,opaque:t&&t.opaque,priority:t&&t.priority||0},function(e){return e.priority}),this.state.modeGen++,_n(this)}),removeOverlay:Xn(function(e){for(var t=this.state.overlays,r=0;r<t.length;++r){var n=t[r].modeSpec;if(n==e||\"string\"==typeof e&&n.name==e)return t.splice(r,1),this.state.modeGen++,void _n(this)}}),indentLine:Xn(function(e,t,r){\"string\"!=typeof t&&\"number\"!=typeof t&&(t=null==t?this.options.smartIndent?\"smart\":\"prev\":t?\"add\":\"subtract\"),de(this.doc,e)&&Cl(this,e,t,r)}),indentSelection:Xn(function(e){for(var t=this,r=this.doc.sel.ranges,n=-1,i=0;i<r.length;i++){var o=r[i];if(o.empty())o.head.line>n&&(Cl(t,o.head.line,e,!0),n=o.head.line,i==t.doc.sel.primIndex&&Sn(t));else{var l=o.from(),s=o.to(),a=Math.max(n,l.line);n=Math.min(t.lastLine(),s.line-(s.ch?0:1))+1;for(var u=a;u<n;++u)Cl(t,u,e);var c=t.doc.sel.ranges;0==l.ch&&r.length==c.length&&c[i].from().ch>0&&Ui(t.doc,i,new gi(l,c[i].to()),V)}}}),getTokenAt:function(e,t){return Ut(this,e,t)},getLineTokens:function(e,t){return Ut(this,ge(e),t,!0)},getTokenTypeAt:function(e){e=Ce(this.doc,e);var t,r=Et(this,se(this.doc,e.line)),n=0,i=(r.length-1)/2,o=e.ch;if(0==o)t=r[2];else for(;;){var l=n+i>>1;if((l?r[2*l-1]:0)>=o)i=l;else{if(!(r[2*l+1]<o)){t=r[2*l+2];break}n=l+1}}var s=t?t.indexOf(\"overlay \"):-1;return s<0?t:0==s?null:t.slice(0,s-1)},getModeAt:function(e){var t=this.doc.mode;return t.innerMode?Il.innerMode(t,this.getTokenAt(e).state).mode:t},getHelper:function(e,t){return this.getHelpers(e,t)[0]},getHelpers:function(e,t){var r=[];if(!Bl.hasOwnProperty(t))return r;var n=Bl[t],i=this.getModeAt(e);if(\"string\"==typeof i[t])n[i[t]]&&r.push(n[i[t]]);else if(i[t])for(var o=0;o<i[t].length;o++){var l=n[i[t][o]];l&&r.push(l)}else i.helperType&&n[i.helperType]?r.push(n[i.helperType]):n[i.name]&&r.push(n[i.name]);for(var s=0;s<n._global.length;s++){var a=n._global[s];a.pred(i,this)&&-1==B(r,a.val)&&r.push(a.val)}return r},getStateAfter:function(e,t){var r=this.doc;return zt(this,(e=xe(r,null==e?r.first+r.size-1:e))+1,t).state},cursorCoords:function(e,t){var r=this.doc.sel.primary();return Vr(this,null==e?r.head:\"object\"==typeof e?Ce(this.doc,e):e?r.from():r.to(),t||\"page\")},charCoords:function(e,t){return Ur(this,Ce(this.doc,e),t||\"page\")},coordsChar:function(e,t){return Xr(this,(e=Gr(this,e,t||\"page\")).left,e.top)},lineAtHeight:function(e,t){return e=Gr(this,{top:e,left:0},t||\"page\").top,fe(this.doc,e+this.display.viewOffset)},heightAtLine:function(e,t,r){var n,i=!1;if(\"number\"==typeof e){var o=this.doc.first+this.doc.size-1;e<this.doc.first?e=this.doc.first:e>o&&(e=o,i=!0),n=se(this.doc,e)}else n=e;return Br(this,n,{top:0,left:0},t||\"page\",r||i).top+(i?this.doc.height-je(n):0)},defaultTextHeight:function(){return Zr(this.display)},defaultCharWidth:function(){return Qr(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(e,t,r,n,i){var o,l,s,a=this.display,u=(e=Vr(this,Ce(this.doc,e))).bottom,c=e.left;if(t.style.position=\"absolute\",t.setAttribute(\"cm-ignore-events\",\"true\"),this.display.input.setUneditable(t),a.sizer.appendChild(t),\"over\"==n)u=e.top;else if(\"above\"==n||\"near\"==n){var h=Math.max(a.wrapper.clientHeight,this.doc.height),f=Math.max(a.sizer.clientWidth,a.lineSpace.clientWidth);(\"above\"==n||e.bottom+t.offsetHeight>h)&&e.top>t.offsetHeight?u=e.top-t.offsetHeight:e.bottom+t.offsetHeight<=h&&(u=e.bottom),c+t.offsetWidth>f&&(c=f-t.offsetWidth)}t.style.top=u+\"px\",t.style.left=t.style.right=\"\",\"right\"==i?(c=a.sizer.clientWidth-t.offsetWidth,t.style.right=\"0px\"):(\"left\"==i?c=0:\"middle\"==i&&(c=(a.sizer.clientWidth-t.offsetWidth)/2),t.style.left=c+\"px\"),r&&(o=this,l={left:c,top:u,right:c+t.offsetWidth,bottom:u+t.offsetHeight},null!=(s=xn(o,l)).scrollTop&&Mn(o,s.scrollTop),null!=s.scrollLeft&&On(o,s.scrollLeft))},triggerOnKeyDown:Xn(rl),triggerOnKeyPress:Xn(il),triggerOnKeyUp:nl,triggerOnMouseDown:Xn(al),execCommand:function(e){if(Yo.hasOwnProperty(e))return Yo[e].call(null,this)},triggerElectric:Xn(function(e){Ml(this,e)}),findPosH:function(e,t,r,n){var i=1;t<0&&(i=-1,t=-t);for(var o=Ce(this.doc,e),l=0;l<t&&!(o=Dl(this.doc,o,i,r,n)).hitSide;++l);return o},moveH:Xn(function(e,t){var r=this;this.extendSelectionsBy(function(n){return r.display.shift||r.doc.extend||n.empty()?Dl(r.doc,n.head,e,t,r.options.rtlMoveVisually):e<0?n.from():n.to()},j)}),deleteH:Xn(function(e,t){var r=this.doc.sel,n=this.doc;r.somethingSelected()?n.replaceSelection(\"\",null,\"+delete\"):Vo(this,function(r){var i=Dl(n,r.head,e,t,!1);return e<0?{from:i,to:r.head}:{from:r.head,to:i}})}),findPosV:function(e,t,r,n){var i=1,o=n;t<0&&(i=-1,t=-t);for(var l=Ce(this.doc,e),s=0;s<t;++s){var a=Vr(this,l,\"div\");if(null==o?o=a.left:a.left=o,(l=Wl(this,a,i,r)).hitSide)break}return l},moveV:Xn(function(e,t){var r=this,n=this.doc,i=[],o=!this.display.shift&&!n.extend&&n.sel.somethingSelected();if(n.extendSelectionsBy(function(l){if(o)return e<0?l.from():l.to();var s=Vr(r,l.head,\"div\");null!=l.goalColumn&&(s.left=l.goalColumn),i.push(s.left);var a=Wl(r,s,e,t);return\"page\"==t&&l==n.sel.primary()&&Cn(r,Ur(r,a,\"div\").top-s.top),a},j),i.length)for(var l=0;l<n.sel.ranges.length;l++)n.sel.ranges[l].goalColumn=i[l]}),findWordAt:function(e){var t=se(this.doc,e.line).text,r=e.ch,n=e.ch;if(t){var i=this.getHelper(e,\"wordChars\");\"before\"!=e.sticky&&n!=t.length||!r?++n:--r;for(var o=t.charAt(r),l=te(o,i)?function(e){return te(e,i)}:/\\s/.test(o)?function(e){return/\\s/.test(e)}:function(e){return!/\\s/.test(e)&&!te(e)};r>0&&l(t.charAt(r-1));)--r;for(;n<t.length&&l(t.charAt(n));)++n}return new gi(ge(e.line,r),ge(e.line,n))},toggleOverwrite:function(e){null!=e&&e==this.state.overwrite||((this.state.overwrite=!this.state.overwrite)?H(this.display.cursorDiv,\"CodeMirror-overwrite\"):T(this.display.cursorDiv,\"CodeMirror-overwrite\"),rt(this,\"overwriteToggle\",this,this.state.overwrite))},hasFocus:function(){return this.display.input.getField()==W()},isReadOnly:function(){return!(!this.options.readOnly&&!this.doc.cantEdit)},scrollTo:Xn(function(e,t){Ln(this,e,t)}),getScrollInfo:function(){var e=this.display.scroller;return{left:e.scrollLeft,top:e.scrollTop,height:e.scrollHeight-Cr(this)-this.display.barHeight,width:e.scrollWidth-Cr(this)-this.display.barWidth,clientHeight:Lr(this),clientWidth:Sr(this)}},scrollIntoView:Xn(function(e,t){var r,n;null==e?(e={from:this.doc.sel.primary().head,to:null},null==t&&(t=this.options.cursorScrollMargin)):\"number\"==typeof e?e={from:ge(e,0),to:null}:null==e.from&&(e={from:e,to:null}),e.to||(e.to=e.from),e.margin=t||0,null!=e.from.line?(n=e,kn(r=this),r.curOp.scrollToPos=n):Tn(this,e.from,e.to,e.margin)}),setSize:Xn(function(e,t){var r=this,n=function(e){return\"number\"==typeof e||/^\\d+$/.test(String(e))?e+\"px\":e};null!=e&&(this.display.wrapper.style.width=n(e)),null!=t&&(this.display.wrapper.style.height=n(t)),this.options.lineWrapping&&Pr(this);var i=this.display.viewFrom;this.doc.iter(i,this.display.viewTo,function(e){if(e.widgets)for(var t=0;t<e.widgets.length;t++)if(e.widgets[t].noHScroll){qn(r,i,\"widget\");break}++i}),this.curOp.forceUpdate=!0,rt(this,\"refresh\",this)}),operation:function(e){return Kn(this,e)},startOperation:function(){return In(this)},endOperation:function(){return Rn(this)},refresh:Xn(function(){var e=this.display.cachedTextHeight;_n(this),this.curOp.forceUpdate=!0,Er(this),Ln(this,this.doc.scrollLeft,this.doc.scrollTop),oi(this),(null==e||Math.abs(e-Zr(this.display))>.5)&&rn(this),rt(this,\"refresh\",this)}),swapDoc:Xn(function(e){var t=this.doc;return t.cm=null,Mi(this,e),Er(this),this.display.input.reset(),Ln(this,e.scrollLeft,e.scrollTop),this.curOp.forceScroll=!0,or(this,\"swapDoc\",this,t),t}),getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},lt(Il),Il.registerHelper=function(e,t,r){Bl.hasOwnProperty(e)||(Bl[e]=Il[e]={_global:[]}),Bl[e][t]=r},Il.registerGlobalHelper=function(e,t,r,n){Il.registerHelper(e,t,n),Bl[e]._global.push({pred:r,val:n})};var Ul,Vl=\"iter insert remove copy getEditor constructor\".split(\" \");for(var Kl in So.prototype)So.prototype.hasOwnProperty(Kl)&&B(Vl,Kl)<0&&(wl.prototype[Kl]=function(e){return function(){return e.apply(this.doc,arguments)}}(So.prototype[Kl]));return lt(So),wl.inputStyles={textarea:Gl,contenteditable:Hl},wl.defineMode=function(e){wl.defaults.mode||\"null\"==e||(wl.defaults.mode=e),function(e,t){arguments.length>2&&(t.dependencies=Array.prototype.slice.call(arguments,2)),St[e]=t}.apply(this,arguments)},wl.defineMIME=function(e,t){Lt[e]=t},wl.defineMode(\"null\",function(){return{token:function(e){return e.skipToEnd()}}}),wl.defineMIME(\"text/plain\",\"null\"),wl.defineExtension=function(e,t){wl.prototype[e]=t},wl.defineDocExtension=function(e,t){So.prototype[e]=t},wl.fromTextArea=function(e,t){if((t=t?z(t):{}).value=e.value,!t.tabindex&&e.tabIndex&&(t.tabindex=e.tabIndex),!t.placeholder&&e.placeholder&&(t.placeholder=e.placeholder),null==t.autofocus){var r=W();t.autofocus=r==e||null!=e.getAttribute(\"autofocus\")&&r==document.body}function n(){e.value=s.getValue()}var i;if(e.form&&(Je(e.form,\"submit\",n),!t.leaveSubmitMethodAlone)){var o=e.form;i=o.submit;try{var l=o.submit=function(){n(),o.submit=i,o.submit(),o.submit=l}}catch(e){}}t.finishInit=function(t){t.save=n,t.getTextArea=function(){return e},t.toTextArea=function(){t.toTextArea=isNaN,n(),e.parentNode.removeChild(t.getWrapperElement()),e.style.display=\"\",e.form&&(tt(e.form,\"submit\",n),\"function\"==typeof e.form.submit&&(e.form.submit=i))}},e.style.display=\"none\";var s=wl(function(t){return e.parentNode.insertBefore(t,e.nextSibling)},t);return s},(Ul=wl).off=tt,Ul.on=Je,Ul.wheelEventPixels=fi,Ul.Doc=So,Ul.splitLines=bt,Ul.countColumn=I,Ul.findColumn=X,Ul.isWordChar=ee,Ul.Pass=U,Ul.signal=rt,Ul.Line=jt,Ul.changeEnd=yi,Ul.scrollbarModel=Pn,Ul.Pos=ge,Ul.cmpPos=ve,Ul.modes=St,Ul.mimeModes=Lt,Ul.resolveMode=kt,Ul.getMode=Tt,Ul.modeExtensions=Mt,Ul.extendMode=Nt,Ul.copyState=Ot,Ul.startState=Dt,Ul.innerMode=At,Ul.commands=Yo,Ul.keyMap=Po,Ul.keyName=Go,Ul.isModifierKey=Ro,Ul.lookupKey=Io,Ul.normalizeKeyMap=zo,Ul.StringStream=Wt,Ul.SharedTextMarker=bo,Ul.TextMarker=mo,Ul.LineWidget=po,Ul.e_preventDefault=st,Ul.e_stopPropagation=at,Ul.e_stop=ct,Ul.addClass=H,Ul.contains=D,Ul.rmClass=T,Ul.keyNames=Do,wl.version=\"5.37.1\",wl});\n",
"type": "application/javascript",
"title": "$:/plugins/tiddlywiki/codemirror/lib/codemirror.js",
"module-type": "library"
},
"$:/plugins/tiddlywiki/codemirror/lib/codemirror.css": {
"text": ".CodeMirror{font-family:monospace;height:300px;color:black;direction:ltr}.CodeMirror-lines{padding:4px 0}.CodeMirror pre{padding:0 4px}.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{background-color:white}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:black}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid black;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0!important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor-mark{background-color:rgba(20,255,20,.5);-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite}.cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;-moz-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-moz-keyframes blink{0%{}50%{background-color:transparent}}@-webkit-keyframes blink{0%{}50%{background-color:transparent}}@keyframes blink{0%{}50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:-20px;overflow:hidden}.CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.cm-s-default .cm-header{color:blue}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-variable-3,.cm-s-default .cm-type{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta{color:#555}.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-s-default .cm-error{color:red}.cm-invalidchar{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:white}.CodeMirror-scroll{overflow:scroll!important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative}.CodeMirror-sizer{position:relative;border-right:30px solid transparent}.CodeMirror-vscrollbar,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:none!important;border:none!important}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:transparent;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.CodeMirror-wrap pre{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.CodeMirror-rtl pre{direction:rtl}.CodeMirror-code{outline:none}.CodeMirror-scroll,.CodeMirror-sizer,.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber{-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute;pointer-events:none}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:''}span.CodeMirror-selectedtext{background:none}\n",
"type": "text/vnd.tiddlywiki",
"title": "$:/plugins/tiddlywiki/codemirror/lib/codemirror.css",
"tags": "[[$:/tags/Stylesheet]]"
},
"$:/plugins/tiddlywiki/codemirror/addon/dialog/dialog.css": {
"text": ".CodeMirror-dialog {\n position: absolute;\n left: 0; right: 0;\n background: inherit;\n z-index: 15;\n padding: .1em .8em;\n overflow: hidden;\n color: inherit;\n}\n\n.CodeMirror-dialog-top {\n border-bottom: 1px solid #eee;\n top: 0;\n}\n\n.CodeMirror-dialog-bottom {\n border-top: 1px solid #eee;\n bottom: 0;\n}\n\n.CodeMirror-dialog input {\n border: none;\n outline: none;\n background: transparent;\n width: 20em;\n color: inherit;\n font-family: monospace;\n}\n\n.CodeMirror-dialog button {\n font-size: 70%;\n}\n",
"type": "text/css",
"title": "$:/plugins/tiddlywiki/codemirror/addon/dialog/dialog.css",
"tags": "[[$:/tags/Stylesheet]]"
},
"$:/plugins/tiddlywiki/codemirror/addon/dialog/dialog.js": {
"text": "!function(e){\"object\"==typeof exports&&\"object\"==typeof module?e(require(\"../../lib/codemirror\")):\"function\"==typeof define&&define.amd?define([\"../../lib/codemirror\"],e):e(CodeMirror)}(function(e){function o(e,o,n){var t;return(t=e.getWrapperElement().appendChild(document.createElement(\"div\"))).className=n?\"CodeMirror-dialog CodeMirror-dialog-bottom\":\"CodeMirror-dialog CodeMirror-dialog-top\",\"string\"==typeof o?t.innerHTML=o:t.appendChild(o),t}function n(e,o){e.state.currentNotificationClose&&e.state.currentNotificationClose(),e.state.currentNotificationClose=o}e.defineExtension(\"openDialog\",function(t,i,r){r||(r={}),n(this,null);var u=o(this,t,r.bottom),l=!1,c=this;function a(e){if(\"string\"==typeof e)s.value=e;else{if(l)return;l=!0,u.parentNode.removeChild(u),c.focus(),r.onClose&&r.onClose(u)}}var f,s=u.getElementsByTagName(\"input\")[0];return s?(s.focus(),r.value&&(s.value=r.value,!1!==r.selectValueOnOpen&&s.select()),r.onInput&&e.on(s,\"input\",function(e){r.onInput(e,s.value,a)}),r.onKeyUp&&e.on(s,\"keyup\",function(e){r.onKeyUp(e,s.value,a)}),e.on(s,\"keydown\",function(o){r&&r.onKeyDown&&r.onKeyDown(o,s.value,a)||((27==o.keyCode||!1!==r.closeOnEnter&&13==o.keyCode)&&(s.blur(),e.e_stop(o),a()),13==o.keyCode&&i(s.value,o))}),!1!==r.closeOnBlur&&e.on(s,\"blur\",a)):(f=u.getElementsByTagName(\"button\")[0])&&(e.on(f,\"click\",function(){a(),c.focus()}),!1!==r.closeOnBlur&&e.on(f,\"blur\",a),f.focus()),a}),e.defineExtension(\"openConfirm\",function(t,i,r){n(this,null);var u=o(this,t,r&&r.bottom),l=u.getElementsByTagName(\"button\"),c=!1,a=this,f=1;function s(){c||(c=!0,u.parentNode.removeChild(u),a.focus())}l[0].focus();for(var d=0;d<l.length;++d){var p=l[d];!function(o){e.on(p,\"click\",function(n){e.e_preventDefault(n),s(),o&&o(a)})}(i[d]),e.on(p,\"blur\",function(){--f,setTimeout(function(){f<=0&&s()},200)}),e.on(p,\"focus\",function(){++f})}}),e.defineExtension(\"openNotification\",function(t,i){n(this,a);var r,u=o(this,t,i&&i.bottom),l=!1,c=i&&void 0!==i.duration?i.duration:5e3;function a(){l||(l=!0,clearTimeout(r),u.parentNode.removeChild(u))}return e.on(u,\"click\",function(o){e.e_preventDefault(o),a()}),c&&(r=setTimeout(a,c)),a})});",
"type": "application/javascript",
"title": "$:/plugins/tiddlywiki/codemirror/addon/dialog/dialog.js",
"module-type": "codemirror"
},
"$:/plugins/tiddlywiki/codemirror/addon/selection/activeline.js": {
"text": "!function(e){\"object\"==typeof exports&&\"object\"==typeof module?e(require(\"../../lib/codemirror\")):\"function\"==typeof define&&define.amd?define([\"../../lib/codemirror\"],e):e(CodeMirror)}(function(e){\"use strict\";var t=\"CodeMirror-activeline\",n=\"CodeMirror-activeline-background\",i=\"CodeMirror-activeline-gutter\";function r(e){for(var r=0;r<e.state.activeLines.length;r++)e.removeLineClass(e.state.activeLines[r],\"wrap\",t),e.removeLineClass(e.state.activeLines[r],\"background\",n),e.removeLineClass(e.state.activeLines[r],\"gutter\",i)}function o(e,o){for(var a=[],s=0;s<o.length;s++){var c=o[s],l=e.getOption(\"styleActiveLine\");if(\"object\"==typeof l&&l.nonEmpty?c.anchor.line==c.head.line:c.empty()){var f=e.getLineHandleVisualStart(c.head.line);a[a.length-1]!=f&&a.push(f)}}(function(e,t){if(e.length!=t.length)return!1;for(var n=0;n<e.length;n++)if(e[n]!=t[n])return!1;return!0})(e.state.activeLines,a)||e.operation(function(){r(e);for(var o=0;o<a.length;o++)e.addLineClass(a[o],\"wrap\",t),e.addLineClass(a[o],\"background\",n),e.addLineClass(a[o],\"gutter\",i);e.state.activeLines=a})}function a(e,t){o(e,t.ranges)}e.defineOption(\"styleActiveLine\",!1,function(t,n,i){var s=i!=e.Init&&i;n!=s&&(s&&(t.off(\"beforeSelectionChange\",a),r(t),delete t.state.activeLines),n&&(t.state.activeLines=[],o(t,t.listSelections()),t.on(\"beforeSelectionChange\",a)))})});\n",
"type": "application/javascript",
"title": "$:/plugins/tiddlywiki/codemirror/addon/selection/activeline.js",
"module-type": "codemirror"
},
"$:/plugins/tiddlywiki/codemirror/mode/tw-meta.js": {
"text": "!function(e){\"object\"==typeof exports&&\"object\"==typeof module?e(require(\"../lib/codemirror\")):\"function\"==typeof define&&define.amd?define([\"../lib/codemirror\"],e):e(CodeMirror)}(function(e){\"use strict\";e.modeInfo=[{name:\"CMake\",mime:\"text/x-cmake\",mode:\"cmake\",ext:[\"cmake\",\"cmake.in\"],file:/^CMakeLists.txt$/},{name:\"Cython\",mime:\"text/x-cython\",mode:\"python\",ext:[\"pyx\",\"pxd\",\"pxi\"]},{name:\"CSS\",mime:\"text/css\",mode:\"css\",ext:[\"css\"]},{name:\"diff\",mime:\"text/x-diff\",mode:\"diff\",ext:[\"diff\",\"patch\"]},{name:\"Embedded Javascript\",mime:\"application/x-ejs\",mode:\"htmlembedded\",ext:[\"ejs\"]},{name:\"Embedded Ruby\",mime:\"application/x-erb\",mode:\"htmlembedded\",ext:[\"erb\"]},{name:\"Erlang\",mime:\"text/x-erlang\",mode:\"erlang\",ext:[\"erl\"]},{name:\"GitHub Flavored Markdown\",mime:\"text/x-gfm\",mode:\"gfm\",file:/^(readme|contributing|history).md$/i},{name:\"Go\",mime:\"text/x-go\",mode:\"go\",ext:[\"go\"]},{name:\"ASP.NET\",mime:\"application/x-aspx\",mode:\"htmlembedded\",ext:[\"aspx\"],alias:[\"asp\",\"aspx\"]},{name:\"HTML\",mime:\"text/html\",mode:\"htmlmixed\",ext:[\"html\",\"htm\",\"handlebars\",\"hbs\"],alias:[\"xhtml\"]},{name:\"HTTP\",mime:\"message/http\",mode:\"http\"},{name:\"JavaScript\",mimes:[\"text/javascript\",\"text/ecmascript\",\"application/javascript\",\"application/x-javascript\",\"application/ecmascript\"],mode:\"javascript\",ext:[\"js\"],alias:[\"ecmascript\",\"js\",\"node\"]},{name:\"JSON\",mimes:[\"application/json\",\"application/x-json\"],mode:\"javascript\",ext:[\"json\",\"map\"],alias:[\"json5\"]},{name:\"JSON-LD\",mime:\"application/ld+json\",mode:\"javascript\",ext:[\"jsonld\"],alias:[\"jsonld\"]},{name:\"Lua\",mime:\"text/x-lua\",mode:\"lua\",ext:[\"lua\"]},{name:\"Markdown\",mime:\"text/x-markdown\",mode:\"markdown\",ext:[\"markdown\",\"md\",\"mkd\"]},{name:\"MySQL\",mime:\"text/x-mysql\",mode:\"sql\"},{name:\"Plain Text\",mime:\"text/plain\",mode:\"null\",ext:[\"txt\",\"text\",\"conf\",\"def\",\"list\",\"log\"]},{name:\"Python\",mime:\"text/x-python\",mode:\"python\",ext:[\"BUILD\",\"bzl\",\"py\",\"pyw\"],file:/^(BUCK|BUILD)$/},{name:\"SCSS\",mime:\"text/x-scss\",mode:\"css\",ext:[\"scss\"]},{name:\"LaTeX\",mime:\"text/x-latex\",mode:\"stex\",ext:[\"text\",\"ltx\",\"tex\"],alias:[\"tex\"]},{name:\"TiddlyWiki \",mime:\"text/x-tiddlywiki\",mode:\"tiddlywiki\"}];for(var t=0;t<e.modeInfo.length;t++){var m=e.modeInfo[t];m.mimes&&(m.mime=m.mimes[0])}e.findModeByMIME=function(t){t=t.toLowerCase();for(var m=0;m<e.modeInfo.length;m++){var i=e.modeInfo[m];if(i.mime==t)return i;if(i.mimes)for(var a=0;a<i.mimes.length;a++)if(i.mimes[a]==t)return i}return/\\+xml$/.test(t)?e.findModeByMIME(\"application/xml\"):/\\+json$/.test(t)?e.findModeByMIME(\"application/json\"):void 0},e.findModeByExtension=function(t){for(var m=0;m<e.modeInfo.length;m++){var i=e.modeInfo[m];if(i.ext)for(var a=0;a<i.ext.length;a++)if(i.ext[a]==t)return i}},e.findModeByFileName=function(t){for(var m=0;m<e.modeInfo.length;m++){var i=e.modeInfo[m];if(i.file&&i.file.test(t))return i}var a=t.lastIndexOf(\".\"),o=a>-1&&t.substring(a+1,t.length);if(o)return e.findModeByExtension(o)},e.findModeByName=function(t){t=t.toLowerCase();for(var m=0;m<e.modeInfo.length;m++){var i=e.modeInfo[m];if(i.name.toLowerCase()==t)return i;if(i.alias)for(var a=0;a<i.alias.length;a++)if(i.alias[a].toLowerCase()==t)return i}}});\n",
"type": "application/javascript",
"title": "$:/plugins/tiddlywiki/codemirror/mode/tw-meta.js",
"module-type": "codemirror"
},
"$:/plugins/tiddlywiki/codemirror/keyboard": {
"title": "$:/plugins/tiddlywiki/codemirror/keyboard",
"text": "\n!!Default keyboard shortcuts\n\n!!!Basic shortcuts\n\n|Shortcut |Function |h\n|Left |goCharLeft |\n|Right |goCharRight |\n|Up |goLineUp |\n|Down |goLineDown |\n|End |goLineEnd |\n|Home |goLineStartSmart |\n|~PageUp |goPageUp |\n|~PageDown |goPageDown |\n|Delete |delCharAfter |\n|Backspace |delCharBefore |\n|Shift-Backspace |delCharBefore |\n|Tab |defaultTab |\n|Shift-Tab |indentAuto |\n|Enter |newlineAndIndent |\n|Insert |toggleOverwrite |\n|Ctrl-Esc |singleSelection |\n\n\n!!!Shortcuts on Windows and Linux\n\n|Shortcut |Function |h\n|Ctrl-A |selectAll |\n|Ctrl-D |deleteLine |\n|Ctrl-Z |undo |\n|Shift-Ctrl-Z |redo |\n|Ctrl-Y |redo |\n|Ctrl-Home |goDocStart |\n|Ctrl-End |goDocEnd |\n|Ctrl-Up |goLineUp |\n|Ctrl-Down |goLineDown |\n|Ctrl-Left |goGroupLeft |\n|Ctrl-Right |goGroupRight |\n|Alt-Left |goLineStart |\n|Alt-Right |goLineEnd |\n|Ctrl-Backspace |delGroupBefore |\n|Ctrl-Delete |delGroupAfter |\n|Ctrl-F |find |\n|Ctrl-G |findNext |\n|Shift-Ctrl-G |findPrev |\n|Shift-Ctrl-F |replace |\n|Shift-Ctrl-R |replaceAll |\n|Ctrl-[ |indentLess |\n|Ctrl-] |indentMore |\n|Alt-U |undoSelection |\n|Shift-Ctrl-U |redoSelection |\n|Shift-Alt-U |redoSelection |\n\n\n!!!Shortcuts on ~MacOs\n\n|Shortcut |Function |h\n|Cmd-A |selectAll |\n|Cmd-D |deleteLine |\n|Cmd-Z |undo |\n|Shift-Cmd-Z |redo |\n|Cmd-Y |redo |\n|Cmd-Home |goDocStart |\n|Cmd-Up |goDocStart |\n|Cmd-End |goDocEnd |\n|Cmd-Down |goDocEnd |\n|Alt-Left |goGroupLeft |\n|Alt-Right |goGroupRight |\n|Cmd-Left |goLineLeft |\n|Cmd-Right |goLineRight |\n|Alt-Backspace |delGroupBefore |\n|Ctrl-Alt-Backspace |delGroupAfter |\n|Alt-Delete |delGroupAfter |\n|Cmd-F |find |\n|Cmd-G |findNext |\n|Shift-Cmd-G |findPrev |\n|Cmd-Alt-F |replace |\n|Shift-Cmd-Alt-F |replaceAll |\n|Cmd-[ |indentLess |\n|Cmd-] |indentMore |\n|Cmd-Backspace |delWrappedLineLeft |\n|Cmd-Delete |delWrappedLineRight |\n|Alt-U |undoSelection |\n|Shift-Alt-U |redoSelection |\n|Ctrl-Up |goDocStart |\n|Ctrl-Down |goDocEnd |\n|Ctrl-F |goCharRight |\n|Ctrl-B |goCharLeft |\n|Ctrl-P |goLineUp |\n|Ctrl-N |goLineDown |\n|Alt-F |goWordRight |\n|Alt-B |goWordLeft |\n|Ctrl-A |goLineStart |\n|Ctrl-E |goLineEnd |\n|Ctrl-V |goPageDown |\n|Shift-Ctrl-V |goPageUp |\n|Ctrl-D |delCharAfter |\n|Ctrl-H |delCharBefore |\n|Alt-D |delWordAfter |\n|Alt-Backspace |delWordBefore |\n|Ctrl-K |killLine |\n|Alt-T |transposeChars |\n|Ctrl-O |openLine |\n\n\n"
},
"$:/plugins/tiddlywiki/codemirror/license": {
"title": "$:/plugins/tiddlywiki/codemirror/license",
"text": "\"\"\"\n~CodeMirror, copyright (c) by Marijn Haverbeke and others\nDistributed under an MIT license: http://codemirror.net/LICENSE\n\nCopyright (c) 2004-2007, Jeremy Ruston\nCopyright (c) 2007-2018, UnaMesa Association\nDistributed under an BSD license: https://tiddlywiki.com/#License\n\"\"\"\n"
},
"$:/plugins/tiddlywiki/codemirror/readme": {
"title": "$:/plugins/tiddlywiki/codemirror/readme",
"text": "This plugin provides an enhanced text editor component based on [[CodeMirror|http://codemirror.net]]. The basic configuration is designed to be as lightweight as possible and is just around 235kb of size. Additional features can be installed with ~CodeMirror ~AddOns from the plugin library.\n\n[[Source code|https://github.com/Jermolene/TiddlyWiki5/blob/master/plugins/tiddlywiki/codemirror]]\n\nBased on ~CodeMirror version 5.37.0\n"
},
"$:/core/ui/ControlPanel/Settings/codemirror/editorFont": {
"title": "$:/core/ui/ControlPanel/Settings/codemirror/editorFont",
"tags": "$:/tags/ControlPanel/Settings/CodeMirror",
"caption": "{{$:/language/codemirror/editorFont/hint}}",
"text": "\\define lingo-base() $:/language/ThemeTweaks/\n\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/editorfontfamily\"><<lingo Settings/EditorFontFamily>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/editorfontfamily\" default=\"\" tag=\"input\"/> | |\n"
},
"$:/core/ui/ControlPanel/Settings/codemirror/keyMap": {
"title": "$:/core/ui/ControlPanel/Settings/codemirror/keyMap",
"tags": "$:/tags/ControlPanel/Settings/CodeMirror",
"caption": "{{$:/language/codemirror/keyMap/hint}}",
"text": "\\define lingo-base() $:/language/codemirror/keyMap\n\n<$link to=\"$:/config/codemirror/keyMap\"><<lingo hint>></$link>\n\n<$select tiddler=\"$:/config/codemirror/keyMap\" default=\"default\">\n<option value=\"default\">default</option>\n<$list filter=\"[all[shadows+tiddlers]module-type[codemirror-keymap]!has[draft.of]get[text]]\">\n<option value=<<currentTiddler>>><$transclude><$text text=<<currentTiddler>>/></$transclude></option>\n</$list>\n</$select>\n\n"
},
"$:/core/ui/ControlPanel/Settings/codemirror/lineNumbers": {
"title": "$:/core/ui/ControlPanel/Settings/codemirror/lineNumbers",
"tags": "$:/tags/ControlPanel/Settings/CodeMirror",
"caption": "{{$:/language/codemirror/lineNumbers/hint}}",
"text": "\\define lingo-base() $:/language/codemirror/lineNumbers/\n<<lingo hint>>\n\n<$checkbox tiddler=\"$:/config/codemirror/lineNumbers\" field=\"text\" checked=\"true\" unchecked=\"false\" default=\"false\"> <$link to=\"$:/config/codemirror/lineNumbers\"><<lingo info>></$link> </$checkbox>\n\n"
},
"$:/core/ui/ControlPanel/Settings/codemirror/lineWrapping": {
"title": "$:/core/ui/ControlPanel/Settings/codemirror/lineWrapping",
"tags": "$:/tags/ControlPanel/Settings/CodeMirror",
"caption": "{{$:/language/codemirror/lineWrapping/hint}}",
"text": "\\define lingo-base() $:/language/codemirror/lineWrapping/\n<<lingo hint>>\n\n<$checkbox tiddler=\"$:/config/codemirror/lineWrapping\" field=\"text\" checked=\"true\" unchecked=\"false\" default=\"true\"> <$link to=\"$:/config/codemirror/lineWrapping\"><<lingo info>></$link> </$checkbox>\n\n"
},
"$:/core/ui/ControlPanel/Settings/codemirror/showCursorWhenSelecting": {
"title": "$:/core/ui/ControlPanel/Settings/codemirror/showCursorWhenSelecting",
"tags": "$:/tags/ControlPanel/Settings/CodeMirror",
"caption": "{{$:/language/codemirror/showCursorWhenSelecting/hint}}",
"text": "\\define lingo-base() $:/language/codemirror/showCursorWhenSelecting/\n<<lingo hint>>\n\n<$checkbox tiddler=\"$:/config/codemirror/showCursorWhenSelecting\" field=\"text\" checked=\"true\" unchecked=\"false\" default=\"true\"> <$link to=\"$:/config/codemirror/showCursorWhenSelecting\"><<lingo info>></$link> </$checkbox>\n\n"
},
"$:/core/ui/ControlPanel/Settings/codemirror/styleActiveLine": {
"title": "$:/core/ui/ControlPanel/Settings/codemirror/styleActiveLine",
"tags": "$:/tags/ControlPanel/Settings/CodeMirror",
"caption": "{{$:/language/codemirror/styleActiveLine/hint}}",
"text": "\\define lingo-base() $:/language/codemirror/styleActiveLine/\n<<lingo hint>>\n\n<$checkbox tiddler=\"$:/config/codemirror/styleActiveLine\" field=\"text\" checked=\"true\" unchecked=\"false\" default=\"false\"> <$link to=\"$:/config/codemirror/styleActiveLine\"><<lingo info>></$link> </$checkbox>\n\n"
},
"$:/core/ui/ControlPanel/Settings/codemirror/theme": {
"title": "$:/core/ui/ControlPanel/Settings/codemirror/theme",
"tags": "$:/tags/ControlPanel/Settings/CodeMirror",
"caption": "{{$:/language/codemirror/theme/hint}}",
"text": "\\define lingo-base() $:/language/codemirror/\n\n<$link to=\"$:/config/codemirror/theme\"><<lingo hint>></$link>\n\n<$select tiddler=\"$:/config/codemirror/theme\" default=\"default\">\n<option value=\"default\">default</option>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/Stylesheet]module-type[codemirror-theme]!has[draft.of]get[name]]\">\n<option value=<<currentTiddler>>><$transclude field=\"name\"><$text text=<<currentTiddler>>/></$transclude></option>\n</$list>\n</$select>\n\n//see the [[CodeMirror Usage|$:/plugins/tiddlywiki/codemirror/usage]] how to add themes//\n"
},
"$:/plugins/tiddlywiki/codemirror/styles": {
"title": "$:/plugins/tiddlywiki/codemirror/styles",
"tags": "[[$:/tags/Stylesheet]]",
"text": "/* Make the editor resize to fit its content */\n\n.CodeMirror {\n\theight: auto;\n\tborder: 1px solid <<colour tiddler-editor-border>>;\n\tline-height: 1.5;\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/editorfontfamily}};\n\tfont-size: {{$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize}};\n}\n\n.CodeMirror-scroll {\n\toverflow-x: auto;\n\toverflow-y: hidden;\t\n}\n"
},
"$:/core/ui/ControlPanel/Settings/CodeMirror": {
"title": "$:/core/ui/ControlPanel/Settings/CodeMirror",
"tags": "$:/tags/ControlPanel/SettingsTab",
"caption": "CodeMirror",
"list-after": "$:/core/ui/ControlPanel/Settings/TiddlyWiki",
"text": "\\define lingo-base() $:/language/codemirror/controlPanel/\n\n<<lingo hint>>\n\n<$link to=\"$:/plugins/tiddlywiki/codemirror/usage\"><<lingo usage>></$link>\n\n<$link to=\"$:/plugins/tiddlywiki/codemirror/keyboard\"><<lingo keyboard>></$link>\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Settings/CodeMirror]]\">\n\n<div style=\"border-top:1px solid #eee;\">\n\n!! <$link><$transclude field=\"caption\"/></$link>\n\n<$transclude/>\n\n</div>\n\n</$list>\n"
},
"$:/core/ui/ControlPanel/Settings": {
"title": "$:/core/ui/ControlPanel/Settings",
"tags": "$:/tags/ControlPanel",
"caption": "{{$:/language/ControlPanel/Settings/Caption}}",
"text": "<div class=\"tc-control-panel\">\n<<tabs \"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/SettingsTab]!has[draft.of]]\" \"$:/core/ui/ControlPanel/Settings/TiddlyWiki\">>\n</div>\n"
},
"$:/core/ui/ControlPanel/Settings/TiddlyWiki": {
"title": "$:/core/ui/ControlPanel/Settings/TiddlyWiki",
"tags": "$:/tags/ControlPanel/SettingsTab",
"caption": "TiddlyWiki",
"text": "\\define lingo-base() $:/language/ControlPanel/Settings/\n\n<<lingo Hint>>\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/ControlPanel/Settings]]\">\n\n<div style=\"border-top:1px solid #eee;\">\n\n!! <$link><$transclude field=\"caption\"/></$link>\n\n<$transclude/>\n\n</div>\n\n</$list>\n"
},
"$:/plugins/tiddlywiki/codemirror/usage": {
"title": "$:/plugins/tiddlywiki/codemirror/usage",
"text": "! Configuration\n\nConfiguration for the ~CodeMirror text-editor can be done from within the CodeMirror Settings Tab in the [[ControlPanel|$:/ControlPanel]] (Settings - ~CodeMirror)\n\n\n!!Setting a different Theme\n\n~CodeMirror themes are available in the [ext[official GitHub repository|https://github.com/codemirror/CodeMirror/tree/master/theme]]\n\nMore themes can be found at https://github.com/FarhadG/code-mirror-themes/tree/master/themes and previewed [ext[here|http://farhadg.github.io/code-mirror-themes/]]\n\n\nTo add a theme to your wiki, follow these four steps:\n\n* choose one of the CSS files and copy its content to a new tiddler\n* remove all comments from the top and tag the tiddler with <<tag-pill \"$:/tags/Stylesheet\">>\n* add a field \"module-type\" with the value \"codemirror-theme\". add a field \"name\" with the exact ''name'' of the theme as value\n* save the tiddler and go to the Settings tab in $:/ControlPanel - look for the \"theme\" dropdown to select your newly added theme\n\n\n!!Line Numbers\n\nTo show or hide the Line Numbers at the left, go to ~ControlPanel - Settings - ~CodeMirror and look for the \"Line Numbers\" checkbox\n\n\n!!Line Wrapping\n\nControls if long lines get visually wrapped to a new line if they're too long to fit the editor width or if the editor should scroll horizontally\n\nTo change the line-wrapping behaviour, go to ~ControlPanel - Settings - ~CodeMirror and look for the \"Line Wrapping\" checkbox\n\n\n!!Show Cursor when selecting\n\nDefines whether the Mouse cursor should be visually shown or hidden when making a text-selection\n\nTo change the show-cursor-when-selecting behaviour, go to ~ControlPanel - Settings - ~CodeMirror and look for the \"Show cursor when selecting\" checkbox\n\n\n!!~CodeMirror Font Family\n\nThe Font-Family used within the ~CodeMirror text-editor defaults to \"monospace\" which will choose your configured monospace system-font\n\nThat setting can be overridden entering one or more Font-Families in the \"Font Family\" input field at ~ControlPanel - Settings - ~CodeMirror\n\n* The entries must be separated by semicolons ','\n* Font-Family Names that contain spaces must be quoted like \"My Font\"\n* If a list of Font-Families is specified, the last Font-Family found on the user-system gets used, non-existing fonts get ignored\n* If none of the specified Font-Families is available, ~CodeMirror uses the default \"monospace\"\n\n\n!!\"Hidden\" Settings:\n\n!!!Cursor Blink Rate\n\nThe cursor blink-rate defines how fast (in milliseconds) the cursor blinks inside the textarea\n\nYou can change it by editing $:/config/codemirror/cursorBlinkRate\n\"0\" disables blinking\n\n!!!Tabsize\n\nThe Tabsize defines the width of a tab character. Default is 4.\n\nYou can change it by editing $:/config/codemirror/tabSize\n\n!!!Indent Unit\n\nNot enabled for vnd.tiddlywiki and x-tiddlywiki\n\nDefines how many spaces a text-block should be indented. Defaults to 2.\n\nYou can change it by editing $:/config/codemirror/indentUnit\n\n"
}
}
}
{
"tiddlers": {
"$:/config/codemirror/autoCloseBrackets": {
"title": "$:/config/codemirror/autoCloseBrackets",
"type": "bool",
"text": "true"
},
"$:/config/codemirror/matchBrackets": {
"title": "$:/config/codemirror/matchBrackets",
"type": "bool",
"text": "true\n"
},
"$:/plugins/tiddlywiki/codemirror/addon/edit/closebrackets.js": {
"text": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n!function(e){\"object\"==typeof exports&&\"object\"==typeof module?e(require(\"../../lib/codemirror\")):\"function\"==typeof define&&define.amd?define([\"../../lib/codemirror\"],e):e(CodeMirror)}(function(e){var t={pairs:\"()[]{}''\\\"\\\"\",triples:\"\",explode:\"[]{}\"},r=e.Pos;function n(e,r){return\"pairs\"==r&&\"string\"==typeof e?e:\"object\"==typeof e&&null!=e[r]?e[r]:t[r]}e.defineOption(\"autoCloseBrackets\",!1,function(t,r,o){o&&o!=e.Init&&(t.removeKeyMap(i),t.state.closeBrackets=null),r&&(a(n(r,\"pairs\")),t.state.closeBrackets=r,t.addKeyMap(i))});var i={Backspace:function(t){var i=s(t);if(!i||t.getOption(\"disableInput\"))return e.Pass;for(var a=n(i,\"pairs\"),o=t.listSelections(),c=0;c<o.length;c++){if(!o[c].empty())return e.Pass;var f=l(t,o[c].head);if(!f||a.indexOf(f)%2!=0)return e.Pass}for(var c=o.length-1;c>=0;c--){var h=o[c].head;t.replaceRange(\"\",r(h.line,h.ch-1),r(h.line,h.ch+1),\"+delete\")}},Enter:function(t){var r=s(t),i=r&&n(r,\"explode\");if(!i||t.getOption(\"disableInput\"))return e.Pass;for(var a=t.listSelections(),o=0;o<a.length;o++){if(!a[o].empty())return e.Pass;var c=l(t,a[o].head);if(!c||i.indexOf(c)%2!=0)return e.Pass}t.operation(function(){var e=t.lineSeparator()||\"\\n\";t.replaceSelection(e+e,null),t.execCommand(\"goCharLeft\"),a=t.listSelections();for(var r=0;r<a.length;r++){var n=a[r].head.line;t.indentLine(n,null,!0),t.indentLine(n+1,null,!0)}})}};function a(e){for(var t=0;t<e.length;t++){var r=e.charAt(t),n=\"'\"+r+\"'\";i[n]||(i[n]=o(r))}}function o(t){return function(i){return function(t,i){var a=s(t);if(!a||t.getOption(\"disableInput\"))return e.Pass;var o=n(a,\"pairs\"),l=o.indexOf(i);if(-1==l)return e.Pass;for(var c,f=n(a,\"triples\"),h=o.charAt(l+1)==i,d=t.listSelections(),u=l%2==0,g=0;g<d.length;g++){var p,v=d[g],m=v.head,b=t.getRange(m,r(m.line,m.ch+1));if(u&&!v.empty())p=\"surround\";else if(!h&&u||b!=i)if(h&&m.ch>1&&f.indexOf(i)>=0&&t.getRange(r(m.line,m.ch-2),m)==i+i){if(m.ch>2&&/\\bstring/.test(t.getTokenTypeAt(r(m.line,m.ch-2))))return e.Pass;p=\"addFour\"}else if(h){var C=0==m.ch?\" \":t.getRange(r(m.line,m.ch-1),m);if(e.isWordChar(b)||C==i||e.isWordChar(C))return e.Pass;p=\"both\"}else{if(!u||!(t.getLine(m.line).length==m.ch||(x=b,P=o,void 0,k=P.lastIndexOf(x),k>-1&&k%2==1)||/\\s/.test(b)))return e.Pass;p=\"both\"}else p=!h||(S=m,void 0,O=(y=t).getTokenAt(r(S.line,S.ch+1)),!/\\bstring/.test(O.type)||O.start!=S.ch||0!=S.ch&&/\\bstring/.test(y.getTokenTypeAt(S)))?f.indexOf(i)>=0&&t.getRange(m,r(m.line,m.ch+3))==i+i+i?\"skipThree\":\"skip\":\"both\";if(c){if(c!=p)return e.Pass}else c=p}var x,P,k;var y,S,O;var R=l%2?o.charAt(l-1):i,A=l%2?i:o.charAt(l+1);t.operation(function(){if(\"skip\"==c)t.execCommand(\"goCharRight\");else if(\"skipThree\"==c)for(var n=0;n<3;n++)t.execCommand(\"goCharRight\");else if(\"surround\"==c){for(var i=t.getSelections(),n=0;n<i.length;n++)i[n]=R+i[n]+A;t.replaceSelections(i,\"around\"),i=t.listSelections().slice();for(var n=0;n<i.length;n++)i[n]=(a=i[n],void 0,o=e.cmpPos(a.anchor,a.head)>0,{anchor:new r(a.anchor.line,a.anchor.ch+(o?-1:1)),head:new r(a.head.line,a.head.ch+(o?1:-1))});t.setSelections(i)}else\"both\"==c?(t.replaceSelection(R+A,null),t.triggerElectric(R+A),t.execCommand(\"goCharLeft\")):\"addFour\"==c&&(t.replaceSelection(R+R+R+R,\"before\"),t.execCommand(\"goCharRight\"));var a,o})}(i,t)}}function s(e){var t=e.state.closeBrackets;return!t||t.override?t:e.getModeAt(e.getCursor()).closeBrackets||t}function l(e,t){var n=e.getRange(r(t.line,t.ch-1),r(t.line,t.ch+1));return 2==n.length?n:null}a(t.pairs+\"`\")});",
"type": "application/javascript",
"title": "$:/plugins/tiddlywiki/codemirror/addon/edit/closebrackets.js",
"module-type": "codemirror"
},
"$:/plugins/tiddlywiki/codemirror/addon/edit/matchbrackets.js": {
"text": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n!function(t){\"object\"==typeof exports&&\"object\"==typeof module?t(require(\"../../lib/codemirror\")):\"function\"==typeof define&&define.amd?define([\"../../lib/codemirror\"],t):t(CodeMirror)}(function(t){var e=/MSIE \\d/.test(navigator.userAgent)&&(null==document.documentMode||document.documentMode<8),n=t.Pos,r={\"(\":\")>\",\")\":\"(<\",\"[\":\"]>\",\"]\":\"[<\",\"{\":\"}>\",\"}\":\"{<\"};function i(t,e,i){var c=t.getLineHandle(e.line),o=e.ch-1,l=i&&i.afterCursor;null==l&&(l=/(^| )cm-fat-cursor($| )/.test(t.getWrapperElement().className));var h=!l&&o>=0&&r[c.text.charAt(o)]||r[c.text.charAt(++o)];if(!h)return null;var s=\">\"==h.charAt(1)?1:-1;if(i&&i.strict&&s>0!=(o==e.ch))return null;var u=t.getTokenTypeAt(n(e.line,o+1)),f=a(t,n(e.line,o+(s>0?1:0)),s,u||null,i);return null==f?null:{from:n(e.line,o),to:f&&f.pos,match:f&&f.ch==h.charAt(0),forward:s>0}}function a(t,e,i,a,c){for(var o=c&&c.maxScanLineLength||1e4,l=c&&c.maxScanLines||1e3,h=[],s=c&&c.bracketRegex?c.bracketRegex:/[(){}[\\]]/,u=i>0?Math.min(e.line+l,t.lastLine()+1):Math.max(t.firstLine()-1,e.line-l),f=e.line;f!=u;f+=i){var m=t.getLine(f);if(m){var g=i>0?0:m.length-1,d=i>0?m.length:-1;if(!(m.length>o))for(f==e.line&&(g=e.ch-(i<0?1:0));g!=d;g+=i){var k=m.charAt(g);if(s.test(k)&&(void 0===a||t.getTokenTypeAt(n(f,g+1))==a))if(\">\"==r[k].charAt(1)==i>0)h.push(k);else{if(!h.length)return{pos:n(f,g),ch:k};h.pop()}}}}return f-i!=(i>0?t.lastLine():t.firstLine())&&null}function c(t,r,a){for(var c=t.state.matchBrackets.maxHighlightLineLength||1e3,o=[],l=t.listSelections(),h=0;h<l.length;h++){var s=l[h].empty()&&i(t,l[h].head,a);if(s&&t.getLine(s.from.line).length<=c){var u=s.match?\"CodeMirror-matchingbracket\":\"CodeMirror-nonmatchingbracket\";o.push(t.markText(s.from,n(s.from.line,s.from.ch+1),{className:u})),s.to&&t.getLine(s.to.line).length<=c&&o.push(t.markText(s.to,n(s.to.line,s.to.ch+1),{className:u}))}}if(o.length){e&&t.state.focused&&t.focus();var f=function(){t.operation(function(){for(var t=0;t<o.length;t++)o[t].clear()})};if(!r)return f;setTimeout(f,800)}}function o(t){t.operation(function(){t.state.matchBrackets.currentlyHighlighted&&(t.state.matchBrackets.currentlyHighlighted(),t.state.matchBrackets.currentlyHighlighted=null),t.state.matchBrackets.currentlyHighlighted=c(t,!1,t.state.matchBrackets)})}t.defineOption(\"matchBrackets\",!1,function(e,n,r){r&&r!=t.Init&&(e.off(\"cursorActivity\",o),e.state.matchBrackets&&e.state.matchBrackets.currentlyHighlighted&&(e.state.matchBrackets.currentlyHighlighted(),e.state.matchBrackets.currentlyHighlighted=null)),n&&(e.state.matchBrackets=\"object\"==typeof n?n:{},e.on(\"cursorActivity\",o))}),t.defineExtension(\"matchBrackets\",function(){c(this,!0)}),t.defineExtension(\"findMatchingBracket\",function(t,e,n){return(n||\"boolean\"==typeof e)&&(n?(n.strict=e,e=n):e=e?{strict:!0}:null),i(this,t,e)}),t.defineExtension(\"scanForBracket\",function(t,e,n,r){return a(this,t,e,n,r)})});",
"type": "application/javascript",
"title": "$:/plugins/tiddlywiki/codemirror/addon/edit/matchbrackets.js",
"module-type": "codemirror"
},
"$:/plugins/tiddlywiki/codemirror-closebrackets/readme": {
"title": "$:/plugins/tiddlywiki/codemirror-closebrackets/readme",
"text": "This plugin adds the ability to automatically insert the closing brackets when you type an opening bracket.\nAlso enables highlighting of matching brackets.\n\nIt needs the latest [[CodeMirror plugin|$:/plugins/tiddlywiki/codemirror]] to be installed\n\n"
}
}
}
{
"tiddlers": {
"$:/config/codemirror/autoCloseTags": {
"title": "$:/config/codemirror/autoCloseTags",
"type": "bool",
"text": "true\n"
},
"$:/language/codemirror/autoCloseTags/hint": {
"title": "$:/language/codemirror/autoCloseTags/hint",
"text": "Auto-close tags"
},
"$:/language/codemirror/autoCloseTags/info": {
"title": "$:/language/codemirror/autoCloseTags/info",
"text": "Whether or not to automatically close tags"
},
"$:/plugins/tiddlywiki/codemirror/addon/fold/xml-fold.js": {
"text": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n!function(e){\"object\"==typeof exports&&\"object\"==typeof module?e(require(\"../../lib/codemirror\")):\"function\"==typeof define&&define.amd?define([\"../../lib/codemirror\"],e):e(CodeMirror)}(function(e){\"use strict\";var n=e.Pos;function t(e,n){return e.line-n.line||e.ch-n.ch}var i=\"A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\",r=new RegExp(\"<(/?)([\"+i+\"][A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD-:.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*)\",\"g\");function u(e,n,t,i){this.line=n,this.ch=t,this.cm=e,this.text=e.getLine(n),this.min=i?Math.max(i.from,e.firstLine()):e.firstLine(),this.max=i?Math.min(i.to-1,e.lastLine()):e.lastLine()}function f(e,t){var i=e.cm.getTokenTypeAt(n(e.line,t));return i&&/\\btag\\b/.test(i)}function o(e){if(!(e.line>=e.max))return e.ch=0,e.text=e.cm.getLine(++e.line),!0}function l(e){if(!(e.line<=e.min))return e.text=e.cm.getLine(--e.line),e.ch=e.text.length,!0}function c(e){for(;;){var n=e.text.indexOf(\">\",e.ch);if(-1==n){if(o(e))continue;return}if(f(e,n+1)){var t=e.text.lastIndexOf(\"/\",n),i=t>-1&&!/\\S/.test(e.text.slice(t+1,n));return e.ch=n+1,i?\"selfClose\":\"regular\"}e.ch=n+1}}function a(e){for(;;){var n=e.ch?e.text.lastIndexOf(\"<\",e.ch-1):-1;if(-1==n){if(l(e))continue;return}if(f(e,n+1)){r.lastIndex=n,e.ch=n;var t=r.exec(e.text);if(t&&t.index==n)return t}else e.ch=n}}function s(e){for(;;){r.lastIndex=e.ch;var n=r.exec(e.text);if(!n){if(o(e))continue;return}if(f(e,n.index+1))return e.ch=n.index+n[0].length,n;e.ch=n.index+1}}function h(e){for(;;){var n=e.ch?e.text.lastIndexOf(\">\",e.ch-1):-1;if(-1==n){if(l(e))continue;return}if(f(e,n+1)){var t=e.text.lastIndexOf(\"/\",n),i=t>-1&&!/\\S/.test(e.text.slice(t+1,n));return e.ch=n+1,i?\"selfClose\":\"regular\"}e.ch=n}}function F(e,t){for(var i=[];;){var r,u=s(e),f=e.line,o=e.ch-(u?u[0].length:0);if(!u||!(r=c(e)))return;if(\"selfClose\"!=r)if(u[1]){for(var l=i.length-1;l>=0;--l)if(i[l]==u[2]){i.length=l;break}if(l<0&&(!t||t==u[2]))return{tag:u[2],from:n(f,o),to:n(e.line,e.ch)}}else i.push(u[2])}}function x(e,t){for(var i=[];;){var r=h(e);if(!r)return;if(\"selfClose\"!=r){var u=e.line,f=e.ch,o=a(e);if(!o)return;if(o[1])i.push(o[2]);else{for(var l=i.length-1;l>=0;--l)if(i[l]==o[2]){i.length=l;break}if(l<0&&(!t||t==o[2]))return{tag:o[2],from:n(e.line,e.ch),to:n(u,f)}}}else a(e)}}e.registerHelper(\"fold\",\"xml\",function(e,i){for(var r=new u(e,i.line,0);;){var f=s(r);if(!f||r.line!=i.line)return;var o=c(r);if(!o)return;if(!f[1]&&\"selfClose\"!=o){var l=n(r.line,r.ch),a=F(r,f[2]);return a&&t(a.from,l)>0?{from:l,to:a.from}:null}}}),e.findMatchingTag=function(e,i,r){var f=new u(e,i.line,i.ch,r);if(-1!=f.text.indexOf(\">\")||-1!=f.text.indexOf(\"<\")){var o=c(f),l=o&&n(f.line,f.ch),s=o&&a(f);if(o&&s&&!(t(f,i)>0)){var h={from:n(f.line,f.ch),to:l,tag:s[2]};return\"selfClose\"==o?{open:h,close:null,at:\"open\"}:s[1]?{open:x(f,s[2]),close:h,at:\"close\"}:{open:h,close:F(f=new u(e,l.line,l.ch,r),s[2]),at:\"open\"}}}},e.findEnclosingTag=function(e,n,t,i){for(var r=new u(e,n.line,n.ch,t);;){var f=x(r,i);if(!f)break;var o=F(new u(e,n.line,n.ch,t),f.tag);if(o)return{open:f,close:o}}},e.scanForClosingTag=function(e,n,t,i){return F(new u(e,n.line,n.ch,i?{from:0,to:i}:null),t)}});\n",
"type": "application/javascript",
"title": "$:/plugins/tiddlywiki/codemirror/addon/fold/xml-fold.js",
"module-type": "codemirror"
},
"$:/plugins/tiddlywiki/codemirror/addon/edit/closetag.js": {
"text": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n!function(e){\"object\"==typeof exports&&\"object\"==typeof module?e(require(\"../../lib/codemirror\"),require(\"../fold/xml-fold\")):\"function\"==typeof define&&define.amd?define([\"../../lib/codemirror\",\"../fold/xml-fold\"],e):e(CodeMirror)}(function(e){e.defineOption(\"autoCloseTags\",!1,function(i,s,l){if(l!=e.Init&&l&&i.removeKeyMap(\"autoCloseTags\"),s){var d={name:\"autoCloseTags\"};(\"object\"!=typeof s||s.whenClosing)&&(d[\"'/'\"]=function(t){return(n=t).getOption(\"disableInput\")?e.Pass:o(n,!0);var n}),(\"object\"!=typeof s||s.whenOpening)&&(d[\"'>'\"]=function(o){return function(o){if(o.getOption(\"disableInput\"))return e.Pass;for(var i=o.listSelections(),s=[],l=o.getOption(\"autoCloseTags\"),d=0;d<i.length;d++){if(!i[d].empty())return e.Pass;var c=i[d].head,f=o.getTokenAt(c),g=e.innerMode(o.getMode(),f.state),u=g.state;if(\"xml\"!=g.mode.name||!u.tagName)return e.Pass;var m=\"html\"==g.mode.configuration,h=\"object\"==typeof l&&l.dontCloseTags||m&&t,p=\"object\"==typeof l&&l.indentTags||m&&n,v=u.tagName;f.end>c.ch&&(v=v.slice(0,v.length-f.end+c.ch));var b=v.toLowerCase();if(!v||\"string\"==f.type&&(f.end!=c.ch||!/[\\\"\\']/.test(f.string.charAt(f.string.length-1))||1==f.string.length)||\"tag\"==f.type&&\"closeTag\"==u.type||f.string.indexOf(\"/\")==f.string.length-1||h&&a(h,b)>-1||r(o,v,c,u,!0))return e.Pass;var y=p&&a(p,b)>-1;s[d]={indent:y,text:\">\"+(y?\"\\n\\n\":\"\")+\"</\"+v+\">\",newPos:y?e.Pos(c.line+1,0):e.Pos(c.line,c.ch+1)}}for(var x=\"object\"==typeof l&&l.dontIndentOnAutoClose,d=i.length-1;d>=0;d--){var P=s[d];o.replaceRange(P.text,i[d].head,i[d].anchor,\"+insert\");var T=o.listSelections().slice(0);T[d]={head:P.newPos,anchor:P.newPos},o.setSelections(T),!x&&P.indent&&(o.indentLine(P.newPos.line,null,!0),o.indentLine(P.newPos.line+1,null,!0))}}(o)}),i.addKeyMap(d)}});var t=[\"area\",\"base\",\"br\",\"col\",\"command\",\"embed\",\"hr\",\"img\",\"input\",\"keygen\",\"link\",\"meta\",\"param\",\"source\",\"track\",\"wbr\"],n=[\"applet\",\"blockquote\",\"body\",\"button\",\"div\",\"dl\",\"fieldset\",\"form\",\"frameset\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"head\",\"html\",\"iframe\",\"layer\",\"legend\",\"object\",\"ol\",\"p\",\"select\",\"table\",\"ul\"];function o(t,n){for(var o=t.listSelections(),a=[],i=n?\"/\":\"</\",s=t.getOption(\"autoCloseTags\"),l=\"object\"==typeof s&&s.dontIndentOnSlash,d=0;d<o.length;d++){if(!o[d].empty())return e.Pass;var c,f=o[d].head,g=t.getTokenAt(f),u=e.innerMode(t.getMode(),g.state),m=u.state;if(n&&(\"string\"==g.type||\"<\"!=g.string.charAt(0)||g.start!=f.ch-1))return e.Pass;if(\"xml\"!=u.mode.name)if(\"htmlmixed\"==t.getMode().name&&\"javascript\"==u.mode.name)c=i+\"script\";else{if(\"htmlmixed\"!=t.getMode().name||\"css\"!=u.mode.name)return e.Pass;c=i+\"style\"}else{if(!m.context||!m.context.tagName||r(t,m.context.tagName,f,m))return e.Pass;c=i+m.context.tagName}\">\"!=t.getLine(f.line).charAt(g.end)&&(c+=\">\"),a[d]=c}if(t.replaceSelections(a),o=t.listSelections(),!l)for(d=0;d<o.length;d++)(d==o.length-1||o[d].head.line<o[d+1].head.line)&&t.indentLine(o[d].head.line)}function a(e,t){if(e.indexOf)return e.indexOf(t);for(var n=0,o=e.length;n<o;++n)if(e[n]==t)return n;return-1}function r(t,n,o,a,r){if(!e.scanForClosingTag)return!1;var i=Math.min(t.lastLine()+1,o.line+500),s=e.scanForClosingTag(t,o,null,i);if(!s||s.tag!=n)return!1;for(var l=a.context,d=r?1:0;l&&l.tagName==n;l=l.prev)++d;o=s.to;for(var c=1;c<d;c++){var f=e.scanForClosingTag(t,o,null,i);if(!f||f.tag!=n)return!1;o=f.to}return!0}e.commands.closeTag=function(e){return o(e)}});",
"type": "application/javascript",
"title": "$:/plugins/tiddlywiki/codemirror/addon/edit/closetag.js",
"module-type": "codemirror"
},
"$:/plugins/tiddlywiki/codemirror-closetag/readme": {
"title": "$:/plugins/tiddlywiki/codemirror-closetag/readme",
"text": "This plugin adds the ability to ''automatically close Tags''. It needs the latest [[CodeMirror plugin|$:/plugins/tiddlywiki/codemirror]] to be installed\n\n\n"
},
"$:/core/ui/ControlPanel/Settings/codemirror/autoCloseTags": {
"title": "$:/core/ui/ControlPanel/Settings/codemirror/autoCloseTags",
"tags": "$:/tags/ControlPanel/Settings/CodeMirror",
"caption": "{{$:/language/codemirror/autoCloseTags/hint}}",
"text": "\\define lingo-base() $:/language/codemirror/autoCloseTags/\n<<lingo hint>>\n\n<$checkbox tiddler=\"$:/config/codemirror/autoCloseTags\" field=\"text\" checked=\"true\" unchecked=\"false\" default=\"true\"> <$link to=\"$:/config/codemirror/autoCloseTags\"><<lingo info>></$link> </$checkbox>\n\n"
}
}
}
{
"tiddlers": {
"$:/config/codemirror/fullscreen": {
"title": "$:/config/codemirror/fullscreen",
"extend": "extraKeys",
"type": "json",
"text": "{\n\t\"F11\": \"togglefullscreen\"\n}"
},
"$:/plugins/tiddlywiki/codemirror/addon/fullscreen/fullscreen.js": {
"text": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n!function(e){\"object\"==typeof exports&&\"object\"==typeof module?e(require(\"../../lib/codemirror\")):\"function\"==typeof define&&define.amd?define([\"../../lib/codemirror\"],e):e(CodeMirror)}(function(e){\"use strict\";e.defineOption(\"fullScreen\",!1,function(t,l,o){var r,n;(o==e.Init&&(o=!1),!o!=!l)&&(l?(n=(r=t).getWrapperElement(),r.state.fullScreenRestore={scrollTop:window.pageYOffset,scrollLeft:window.pageXOffset,width:n.style.width,height:n.style.height},n.style.width=\"\",n.style.height=\"auto\",n.className+=\" CodeMirror-fullscreen\",document.documentElement.style.overflow=\"hidden\",r.refresh()):function(e){var t=e.getWrapperElement();t.className=t.className.replace(/\\s*CodeMirror-fullscreen\\b/,\"\"),document.documentElement.style.overflow=\"\";var l=e.state.fullScreenRestore;t.style.width=l.width,t.style.height=l.height,window.scrollTo(l.scrollLeft,l.scrollTop),e.refresh()}(t))}),e.toggleFullscreen=function(e){e.setOption(\"fullScreen\",!e.getOption(\"fullScreen\"))},e.commands.togglefullscreen=e.toggleFullscreen});",
"type": "application/javascript",
"title": "$:/plugins/tiddlywiki/codemirror/addon/fullscreen/fullscreen.js",
"module-type": "codemirror"
},
"$:/plugins/tiddlywiki/codemirror/addon/fullscreen/fullscreen.css": {
"text": ".CodeMirror-fullscreen {\n position: fixed;\n top: 0; left: 0; right: 0; bottom: 0;\n height: auto;\n z-index: 9;\n}\n",
"type": "text/css",
"title": "$:/plugins/tiddlywiki/codemirror/addon/fullscreen/fullscreen.css",
"tags": "[[$:/tags/Stylesheet]]"
},
"$:/plugins/tiddlywiki/codemirror-fullscreen/readme": {
"title": "$:/plugins/tiddlywiki/codemirror-fullscreen/readme",
"text": "This plugin adds a ''Fullscreen editing Mode'' to the [[CodeMirror|http://codemirror.net]] text editor. It needs the latest [[CodeMirror plugin|$:/plugins/tiddlywiki/codemirror]] to be installed\n\nPressing ''F11'' with the focus within the editor-textarea will make the editor go fullscreen, pressing ''F11'' again leaves fullscreen-mode\n\n"
}
}
}
{
"tiddlers": {
"$:/plugins/tiddlywiki/codemirror/mode/css/css.js": {
"text": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n!function(e){\"object\"==typeof exports&&\"object\"==typeof module?e(require(\"../../lib/codemirror\")):\"function\"==typeof define&&define.amd?define([\"../../lib/codemirror\"],e):e(CodeMirror)}(function(e){\"use strict\";function t(e){for(var t={},r=0;r<e.length;++r)t[e[r].toLowerCase()]=!0;return t}e.defineMode(\"css\",function(t,r){var o=r.inline;r.propertyKeywords||(r=e.resolveMode(\"text/css\"));var i,a,n=t.indentUnit,l=r.tokenHooks,s=r.documentTypes||{},c=r.mediaTypes||{},d=r.mediaFeatures||{},p=r.mediaValueKeywords||{},u=r.propertyKeywords||{},m=r.nonStandardPropertyKeywords||{},h=r.fontProperties||{},g=r.counterDescriptors||{},b=r.colorKeywords||{},f=r.valueKeywords||{},y=r.allowNested,w=r.lineComment,k=!0===r.supportsAtComponent;function v(e,t){return i=t,e}function x(e){return function(t,r){for(var o,i=!1;null!=(o=t.next());){if(o==e&&!i){\")\"==e&&t.backUp(1);break}i=!i&&\"\\\\\"==o}return(o==e||!i&&\")\"!=e)&&(r.tokenize=null),v(\"string\",\"string\")}}function z(e,t){return e.next(),e.match(/\\s*[\\\"\\')]/,!1)?t.tokenize=null:t.tokenize=x(\")\"),v(null,\"(\")}function j(e,t,r){this.type=e,this.indent=t,this.prev=r}function q(e,t,r,o){return e.context=new j(r,t.indentation()+(!1===o?0:n),e.context),r}function P(e){return e.context.prev&&(e.context=e.context.prev),e.context.type}function K(e,t,r){return T[r.context.type](e,t,r)}function C(e,t,r,o){for(var i=o||1;i>0;i--)r.context=r.context.prev;return K(e,t,r)}function B(e){var t=e.current().toLowerCase();a=f.hasOwnProperty(t)?\"atom\":b.hasOwnProperty(t)?\"keyword\":\"variable\"}var T={top:function(e,t,r){if(\"{\"==e)return q(r,t,\"block\");if(\"}\"==e&&r.context.prev)return P(r);if(k&&/@component/i.test(e))return q(r,t,\"atComponentBlock\");if(/^@(-moz-)?document$/i.test(e))return q(r,t,\"documentTypes\");if(/^@(media|supports|(-moz-)?document|import)$/i.test(e))return q(r,t,\"atBlock\");if(/^@(font-face|counter-style)/i.test(e))return r.stateArg=e,\"restricted_atBlock_before\";if(/^@(-(moz|ms|o|webkit)-)?keyframes$/i.test(e))return\"keyframes\";if(e&&\"@\"==e.charAt(0))return q(r,t,\"at\");if(\"hash\"==e)a=\"builtin\";else if(\"word\"==e)a=\"tag\";else{if(\"variable-definition\"==e)return\"maybeprop\";if(\"interpolation\"==e)return q(r,t,\"interpolation\");if(\":\"==e)return\"pseudo\";if(y&&\"(\"==e)return q(r,t,\"parens\")}return r.context.type},block:function(e,t,r){if(\"word\"==e){var o=t.current().toLowerCase();return u.hasOwnProperty(o)?(a=\"property\",\"maybeprop\"):m.hasOwnProperty(o)?(a=\"string-2\",\"maybeprop\"):y?(a=t.match(/^\\s*:(?:\\s|$)/,!1)?\"property\":\"tag\",\"block\"):(a+=\" error\",\"maybeprop\")}return\"meta\"==e?\"block\":y||\"hash\"!=e&&\"qualifier\"!=e?T.top(e,t,r):(a=\"error\",\"block\")},maybeprop:function(e,t,r){return\":\"==e?q(r,t,\"prop\"):K(e,t,r)},prop:function(e,t,r){if(\";\"==e)return P(r);if(\"{\"==e&&y)return q(r,t,\"propBlock\");if(\"}\"==e||\"{\"==e)return C(e,t,r);if(\"(\"==e)return q(r,t,\"parens\");if(\"hash\"!=e||/^#([0-9a-fA-f]{3,4}|[0-9a-fA-f]{6}|[0-9a-fA-f]{8})$/.test(t.current())){if(\"word\"==e)B(t);else if(\"interpolation\"==e)return q(r,t,\"interpolation\")}else a+=\" error\";return\"prop\"},propBlock:function(e,t,r){return\"}\"==e?P(r):\"word\"==e?(a=\"property\",\"maybeprop\"):r.context.type},parens:function(e,t,r){return\"{\"==e||\"}\"==e?C(e,t,r):\")\"==e?P(r):\"(\"==e?q(r,t,\"parens\"):\"interpolation\"==e?q(r,t,\"interpolation\"):(\"word\"==e&&B(t),\"parens\")},pseudo:function(e,t,r){return\"meta\"==e?\"pseudo\":\"word\"==e?(a=\"variable-3\",r.context.type):K(e,t,r)},documentTypes:function(e,t,r){return\"word\"==e&&s.hasOwnProperty(t.current())?(a=\"tag\",r.context.type):T.atBlock(e,t,r)},atBlock:function(e,t,r){if(\"(\"==e)return q(r,t,\"atBlock_parens\");if(\"}\"==e||\";\"==e)return C(e,t,r);if(\"{\"==e)return P(r)&&q(r,t,y?\"block\":\"top\");if(\"interpolation\"==e)return q(r,t,\"interpolation\");if(\"word\"==e){var o=t.current().toLowerCase();a=\"only\"==o||\"not\"==o||\"and\"==o||\"or\"==o?\"keyword\":c.hasOwnProperty(o)?\"attribute\":d.hasOwnProperty(o)?\"property\":p.hasOwnProperty(o)?\"keyword\":u.hasOwnProperty(o)?\"property\":m.hasOwnProperty(o)?\"string-2\":f.hasOwnProperty(o)?\"atom\":b.hasOwnProperty(o)?\"keyword\":\"error\"}return r.context.type},atComponentBlock:function(e,t,r){return\"}\"==e?C(e,t,r):\"{\"==e?P(r)&&q(r,t,y?\"block\":\"top\",!1):(\"word\"==e&&(a=\"error\"),r.context.type)},atBlock_parens:function(e,t,r){return\")\"==e?P(r):\"{\"==e||\"}\"==e?C(e,t,r,2):T.atBlock(e,t,r)},restricted_atBlock_before:function(e,t,r){return\"{\"==e?q(r,t,\"restricted_atBlock\"):\"word\"==e&&\"@counter-style\"==r.stateArg?(a=\"variable\",\"restricted_atBlock_before\"):K(e,t,r)},restricted_atBlock:function(e,t,r){return\"}\"==e?(r.stateArg=null,P(r)):\"word\"==e?(a=\"@font-face\"==r.stateArg&&!h.hasOwnProperty(t.current().toLowerCase())||\"@counter-style\"==r.stateArg&&!g.hasOwnProperty(t.current().toLowerCase())?\"error\":\"property\",\"maybeprop\"):\"restricted_atBlock\"},keyframes:function(e,t,r){return\"word\"==e?(a=\"variable\",\"keyframes\"):\"{\"==e?q(r,t,\"top\"):K(e,t,r)},at:function(e,t,r){return\";\"==e?P(r):\"{\"==e||\"}\"==e?C(e,t,r):(\"word\"==e?a=\"tag\":\"hash\"==e&&(a=\"builtin\"),\"at\")},interpolation:function(e,t,r){return\"}\"==e?P(r):\"{\"==e||\";\"==e?C(e,t,r):(\"word\"==e?a=\"variable\":\"variable\"!=e&&\"(\"!=e&&\")\"!=e&&(a=\"error\"),\"interpolation\")}};return{startState:function(e){return{tokenize:null,state:o?\"block\":\"top\",stateArg:null,context:new j(o?\"block\":\"top\",e||0,null)}},token:function(e,t){if(!t.tokenize&&e.eatSpace())return null;var r=(t.tokenize||function(e,t){var r=e.next();if(l[r]){var o=l[r](e,t);if(!1!==o)return o}return\"@\"==r?(e.eatWhile(/[\\w\\\\\\-]/),v(\"def\",e.current())):\"=\"==r||(\"~\"==r||\"|\"==r)&&e.eat(\"=\")?v(null,\"compare\"):'\"'==r||\"'\"==r?(t.tokenize=x(r),t.tokenize(e,t)):\"#\"==r?(e.eatWhile(/[\\w\\\\\\-]/),v(\"atom\",\"hash\")):\"!\"==r?(e.match(/^\\s*\\w*/),v(\"keyword\",\"important\")):/\\d/.test(r)||\".\"==r&&e.eat(/\\d/)?(e.eatWhile(/[\\w.%]/),v(\"number\",\"unit\")):\"-\"!==r?/[,+>*\\/]/.test(r)?v(null,\"select-op\"):\".\"==r&&e.match(/^-?[_a-z][_a-z0-9-]*/i)?v(\"qualifier\",\"qualifier\"):/[:;{}\\[\\]\\(\\)]/.test(r)?v(null,r):(\"u\"==r||\"U\"==r)&&e.match(/rl(-prefix)?\\(/i)||(\"d\"==r||\"D\"==r)&&e.match(\"omain(\",!0,!0)||(\"r\"==r||\"R\"==r)&&e.match(\"egexp(\",!0,!0)?(e.backUp(1),t.tokenize=z,v(\"property\",\"word\")):/[\\w\\\\\\-]/.test(r)?(e.eatWhile(/[\\w\\\\\\-]/),v(\"property\",\"word\")):v(null,null):/[\\d.]/.test(e.peek())?(e.eatWhile(/[\\w.%]/),v(\"number\",\"unit\")):e.match(/^-[\\w\\\\\\-]+/)?(e.eatWhile(/[\\w\\\\\\-]/),e.match(/^\\s*:/,!1)?v(\"variable-2\",\"variable-definition\"):v(\"variable-2\",\"variable\")):e.match(/^\\w+-/)?v(\"meta\",\"meta\"):void 0})(e,t);return r&&\"object\"==typeof r&&(i=r[1],r=r[0]),a=r,\"comment\"!=i&&(t.state=T[t.state](i,e,t)),a},indent:function(e,t){var r=e.context,o=t&&t.charAt(0),i=r.indent;return\"prop\"!=r.type||\"}\"!=o&&\")\"!=o||(r=r.prev),r.prev&&(\"}\"!=o||\"block\"!=r.type&&\"top\"!=r.type&&\"interpolation\"!=r.type&&\"restricted_atBlock\"!=r.type?(\")\"!=o||\"parens\"!=r.type&&\"atBlock_parens\"!=r.type)&&(\"{\"!=o||\"at\"!=r.type&&\"atBlock\"!=r.type)||(i=Math.max(0,r.indent-n)):i=(r=r.prev).indent),i},electricChars:\"}\",blockCommentStart:\"/*\",blockCommentEnd:\"*/\",blockCommentContinue:\" * \",lineComment:w,fold:\"brace\"}});var r=[\"domain\",\"regexp\",\"url\",\"url-prefix\"],o=t(r),i=[\"all\",\"aural\",\"braille\",\"handheld\",\"print\",\"projection\",\"screen\",\"tty\",\"tv\",\"embossed\"],a=t(i),n=[\"width\",\"min-width\",\"max-width\",\"height\",\"min-height\",\"max-height\",\"device-width\",\"min-device-width\",\"max-device-width\",\"device-height\",\"min-device-height\",\"max-device-height\",\"aspect-ratio\",\"min-aspect-ratio\",\"max-aspect-ratio\",\"device-aspect-ratio\",\"min-device-aspect-ratio\",\"max-device-aspect-ratio\",\"color\",\"min-color\",\"max-color\",\"color-index\",\"min-color-index\",\"max-color-index\",\"monochrome\",\"min-monochrome\",\"max-monochrome\",\"resolution\",\"min-resolution\",\"max-resolution\",\"scan\",\"grid\",\"orientation\",\"device-pixel-ratio\",\"min-device-pixel-ratio\",\"max-device-pixel-ratio\",\"pointer\",\"any-pointer\",\"hover\",\"any-hover\"],l=t(n),s=[\"landscape\",\"portrait\",\"none\",\"coarse\",\"fine\",\"on-demand\",\"hover\",\"interlace\",\"progressive\"],c=t(s),d=[\"align-content\",\"align-items\",\"align-self\",\"alignment-adjust\",\"alignment-baseline\",\"anchor-point\",\"animation\",\"animation-delay\",\"animation-direction\",\"animation-duration\",\"animation-fill-mode\",\"animation-iteration-count\",\"animation-name\",\"animation-play-state\",\"animation-timing-function\",\"appearance\",\"azimuth\",\"backface-visibility\",\"background\",\"background-attachment\",\"background-blend-mode\",\"background-clip\",\"background-color\",\"background-image\",\"background-origin\",\"background-position\",\"background-repeat\",\"background-size\",\"baseline-shift\",\"binding\",\"bleed\",\"bookmark-label\",\"bookmark-level\",\"bookmark-state\",\"bookmark-target\",\"border\",\"border-bottom\",\"border-bottom-color\",\"border-bottom-left-radius\",\"border-bottom-right-radius\",\"border-bottom-style\",\"border-bottom-width\",\"border-collapse\",\"border-color\",\"border-image\",\"border-image-outset\",\"border-image-repeat\",\"border-image-slice\",\"border-image-source\",\"border-image-width\",\"border-left\",\"border-left-color\",\"border-left-style\",\"border-left-width\",\"border-radius\",\"border-right\",\"border-right-color\",\"border-right-style\",\"border-right-width\",\"border-spacing\",\"border-style\",\"border-top\",\"border-top-color\",\"border-top-left-radius\",\"border-top-right-radius\",\"border-top-style\",\"border-top-width\",\"border-width\",\"bottom\",\"box-decoration-break\",\"box-shadow\",\"box-sizing\",\"break-after\",\"break-before\",\"break-inside\",\"caption-side\",\"caret-color\",\"clear\",\"clip\",\"color\",\"color-profile\",\"column-count\",\"column-fill\",\"column-gap\",\"column-rule\",\"column-rule-color\",\"column-rule-style\",\"column-rule-width\",\"column-span\",\"column-width\",\"columns\",\"content\",\"counter-increment\",\"counter-reset\",\"crop\",\"cue\",\"cue-after\",\"cue-before\",\"cursor\",\"direction\",\"display\",\"dominant-baseline\",\"drop-initial-after-adjust\",\"drop-initial-after-align\",\"drop-initial-before-adjust\",\"drop-initial-before-align\",\"drop-initial-size\",\"drop-initial-value\",\"elevation\",\"empty-cells\",\"fit\",\"fit-position\",\"flex\",\"flex-basis\",\"flex-direction\",\"flex-flow\",\"flex-grow\",\"flex-shrink\",\"flex-wrap\",\"float\",\"float-offset\",\"flow-from\",\"flow-into\",\"font\",\"font-feature-settings\",\"font-family\",\"font-kerning\",\"font-language-override\",\"font-size\",\"font-size-adjust\",\"font-stretch\",\"font-style\",\"font-synthesis\",\"font-variant\",\"font-variant-alternates\",\"font-variant-caps\",\"font-variant-east-asian\",\"font-variant-ligatures\",\"font-variant-numeric\",\"font-variant-position\",\"font-weight\",\"grid\",\"grid-area\",\"grid-auto-columns\",\"grid-auto-flow\",\"grid-auto-rows\",\"grid-column\",\"grid-column-end\",\"grid-column-gap\",\"grid-column-start\",\"grid-gap\",\"grid-row\",\"grid-row-end\",\"grid-row-gap\",\"grid-row-start\",\"grid-template\",\"grid-template-areas\",\"grid-template-columns\",\"grid-template-rows\",\"hanging-punctuation\",\"height\",\"hyphens\",\"icon\",\"image-orientation\",\"image-rendering\",\"image-resolution\",\"inline-box-align\",\"justify-content\",\"justify-items\",\"justify-self\",\"left\",\"letter-spacing\",\"line-break\",\"line-height\",\"line-stacking\",\"line-stacking-ruby\",\"line-stacking-shift\",\"line-stacking-strategy\",\"list-style\",\"list-style-image\",\"list-style-position\",\"list-style-type\",\"margin\",\"margin-bottom\",\"margin-left\",\"margin-right\",\"margin-top\",\"marks\",\"marquee-direction\",\"marquee-loop\",\"marquee-play-count\",\"marquee-speed\",\"marquee-style\",\"max-height\",\"max-width\",\"min-height\",\"min-width\",\"move-to\",\"nav-down\",\"nav-index\",\"nav-left\",\"nav-right\",\"nav-up\",\"object-fit\",\"object-position\",\"opacity\",\"order\",\"orphans\",\"outline\",\"outline-color\",\"outline-offset\",\"outline-style\",\"outline-width\",\"overflow\",\"overflow-style\",\"overflow-wrap\",\"overflow-x\",\"overflow-y\",\"padding\",\"padding-bottom\",\"padding-left\",\"padding-right\",\"padding-top\",\"page\",\"page-break-after\",\"page-break-before\",\"page-break-inside\",\"page-policy\",\"pause\",\"pause-after\",\"pause-before\",\"perspective\",\"perspective-origin\",\"pitch\",\"pitch-range\",\"place-content\",\"place-items\",\"place-self\",\"play-during\",\"position\",\"presentation-level\",\"punctuation-trim\",\"quotes\",\"region-break-after\",\"region-break-before\",\"region-break-inside\",\"region-fragment\",\"rendering-intent\",\"resize\",\"rest\",\"rest-after\",\"rest-before\",\"richness\",\"right\",\"rotation\",\"rotation-point\",\"ruby-align\",\"ruby-overhang\",\"ruby-position\",\"ruby-span\",\"shape-image-threshold\",\"shape-inside\",\"shape-margin\",\"shape-outside\",\"size\",\"speak\",\"speak-as\",\"speak-header\",\"speak-numeral\",\"speak-punctuation\",\"speech-rate\",\"stress\",\"string-set\",\"tab-size\",\"table-layout\",\"target\",\"target-name\",\"target-new\",\"target-position\",\"text-align\",\"text-align-last\",\"text-decoration\",\"text-decoration-color\",\"text-decoration-line\",\"text-decoration-skip\",\"text-decoration-style\",\"text-emphasis\",\"text-emphasis-color\",\"text-emphasis-position\",\"text-emphasis-style\",\"text-height\",\"text-indent\",\"text-justify\",\"text-outline\",\"text-overflow\",\"text-shadow\",\"text-size-adjust\",\"text-space-collapse\",\"text-transform\",\"text-underline-position\",\"text-wrap\",\"top\",\"transform\",\"transform-origin\",\"transform-style\",\"transition\",\"transition-delay\",\"transition-duration\",\"transition-property\",\"transition-timing-function\",\"unicode-bidi\",\"user-select\",\"vertical-align\",\"visibility\",\"voice-balance\",\"voice-duration\",\"voice-family\",\"voice-pitch\",\"voice-range\",\"voice-rate\",\"voice-stress\",\"voice-volume\",\"volume\",\"white-space\",\"widows\",\"width\",\"will-change\",\"word-break\",\"word-spacing\",\"word-wrap\",\"z-index\",\"clip-path\",\"clip-rule\",\"mask\",\"enable-background\",\"filter\",\"flood-color\",\"flood-opacity\",\"lighting-color\",\"stop-color\",\"stop-opacity\",\"pointer-events\",\"color-interpolation\",\"color-interpolation-filters\",\"color-rendering\",\"fill\",\"fill-opacity\",\"fill-rule\",\"image-rendering\",\"marker\",\"marker-end\",\"marker-mid\",\"marker-start\",\"shape-rendering\",\"stroke\",\"stroke-dasharray\",\"stroke-dashoffset\",\"stroke-linecap\",\"stroke-linejoin\",\"stroke-miterlimit\",\"stroke-opacity\",\"stroke-width\",\"text-rendering\",\"baseline-shift\",\"dominant-baseline\",\"glyph-orientation-horizontal\",\"glyph-orientation-vertical\",\"text-anchor\",\"writing-mode\"],p=t(d),u=[\"scrollbar-arrow-color\",\"scrollbar-base-color\",\"scrollbar-dark-shadow-color\",\"scrollbar-face-color\",\"scrollbar-highlight-color\",\"scrollbar-shadow-color\",\"scrollbar-3d-light-color\",\"scrollbar-track-color\",\"shape-inside\",\"searchfield-cancel-button\",\"searchfield-decoration\",\"searchfield-results-button\",\"searchfield-results-decoration\",\"zoom\"],m=t(u),h=t([\"font-family\",\"src\",\"unicode-range\",\"font-variant\",\"font-feature-settings\",\"font-stretch\",\"font-weight\",\"font-style\"]),g=t([\"additive-symbols\",\"fallback\",\"negative\",\"pad\",\"prefix\",\"range\",\"speak-as\",\"suffix\",\"symbols\",\"system\"]),b=[\"aliceblue\",\"antiquewhite\",\"aqua\",\"aquamarine\",\"azure\",\"beige\",\"bisque\",\"black\",\"blanchedalmond\",\"blue\",\"blueviolet\",\"brown\",\"burlywood\",\"cadetblue\",\"chartreuse\",\"chocolate\",\"coral\",\"cornflowerblue\",\"cornsilk\",\"crimson\",\"cyan\",\"darkblue\",\"darkcyan\",\"darkgoldenrod\",\"darkgray\",\"darkgreen\",\"darkkhaki\",\"darkmagenta\",\"darkolivegreen\",\"darkorange\",\"darkorchid\",\"darkred\",\"darksalmon\",\"darkseagreen\",\"darkslateblue\",\"darkslategray\",\"darkturquoise\",\"darkviolet\",\"deeppink\",\"deepskyblue\",\"dimgray\",\"dodgerblue\",\"firebrick\",\"floralwhite\",\"forestgreen\",\"fuchsia\",\"gainsboro\",\"ghostwhite\",\"gold\",\"goldenrod\",\"gray\",\"grey\",\"green\",\"greenyellow\",\"honeydew\",\"hotpink\",\"indianred\",\"indigo\",\"ivory\",\"khaki\",\"lavender\",\"lavenderblush\",\"lawngreen\",\"lemonchiffon\",\"lightblue\",\"lightcoral\",\"lightcyan\",\"lightgoldenrodyellow\",\"lightgray\",\"lightgreen\",\"lightpink\",\"lightsalmon\",\"lightseagreen\",\"lightskyblue\",\"lightslategray\",\"lightsteelblue\",\"lightyellow\",\"lime\",\"limegreen\",\"linen\",\"magenta\",\"maroon\",\"mediumaquamarine\",\"mediumblue\",\"mediumorchid\",\"mediumpurple\",\"mediumseagreen\",\"mediumslateblue\",\"mediumspringgreen\",\"mediumturquoise\",\"mediumvioletred\",\"midnightblue\",\"mintcream\",\"mistyrose\",\"moccasin\",\"navajowhite\",\"navy\",\"oldlace\",\"olive\",\"olivedrab\",\"orange\",\"orangered\",\"orchid\",\"palegoldenrod\",\"palegreen\",\"paleturquoise\",\"palevioletred\",\"papayawhip\",\"peachpuff\",\"peru\",\"pink\",\"plum\",\"powderblue\",\"purple\",\"rebeccapurple\",\"red\",\"rosybrown\",\"royalblue\",\"saddlebrown\",\"salmon\",\"sandybrown\",\"seagreen\",\"seashell\",\"sienna\",\"silver\",\"skyblue\",\"slateblue\",\"slategray\",\"snow\",\"springgreen\",\"steelblue\",\"tan\",\"teal\",\"thistle\",\"tomato\",\"turquoise\",\"violet\",\"wheat\",\"white\",\"whitesmoke\",\"yellow\",\"yellowgreen\"],f=t(b),y=[\"above\",\"absolute\",\"activeborder\",\"additive\",\"activecaption\",\"afar\",\"after-white-space\",\"ahead\",\"alias\",\"all\",\"all-scroll\",\"alphabetic\",\"alternate\",\"always\",\"amharic\",\"amharic-abegede\",\"antialiased\",\"appworkspace\",\"arabic-indic\",\"armenian\",\"asterisks\",\"attr\",\"auto\",\"auto-flow\",\"avoid\",\"avoid-column\",\"avoid-page\",\"avoid-region\",\"background\",\"backwards\",\"baseline\",\"below\",\"bidi-override\",\"binary\",\"bengali\",\"blink\",\"block\",\"block-axis\",\"bold\",\"bolder\",\"border\",\"border-box\",\"both\",\"bottom\",\"break\",\"break-all\",\"break-word\",\"bullets\",\"button\",\"button-bevel\",\"buttonface\",\"buttonhighlight\",\"buttonshadow\",\"buttontext\",\"calc\",\"cambodian\",\"capitalize\",\"caps-lock-indicator\",\"caption\",\"captiontext\",\"caret\",\"cell\",\"center\",\"checkbox\",\"circle\",\"cjk-decimal\",\"cjk-earthly-branch\",\"cjk-heavenly-stem\",\"cjk-ideographic\",\"clear\",\"clip\",\"close-quote\",\"col-resize\",\"collapse\",\"color\",\"color-burn\",\"color-dodge\",\"column\",\"column-reverse\",\"compact\",\"condensed\",\"contain\",\"content\",\"contents\",\"content-box\",\"context-menu\",\"continuous\",\"copy\",\"counter\",\"counters\",\"cover\",\"crop\",\"cross\",\"crosshair\",\"currentcolor\",\"cursive\",\"cyclic\",\"darken\",\"dashed\",\"decimal\",\"decimal-leading-zero\",\"default\",\"default-button\",\"dense\",\"destination-atop\",\"destination-in\",\"destination-out\",\"destination-over\",\"devanagari\",\"difference\",\"disc\",\"discard\",\"disclosure-closed\",\"disclosure-open\",\"document\",\"dot-dash\",\"dot-dot-dash\",\"dotted\",\"double\",\"down\",\"e-resize\",\"ease\",\"ease-in\",\"ease-in-out\",\"ease-out\",\"element\",\"ellipse\",\"ellipsis\",\"embed\",\"end\",\"ethiopic\",\"ethiopic-abegede\",\"ethiopic-abegede-am-et\",\"ethiopic-abegede-gez\",\"ethiopic-abegede-ti-er\",\"ethiopic-abegede-ti-et\",\"ethiopic-halehame-aa-er\",\"ethiopic-halehame-aa-et\",\"ethiopic-halehame-am-et\",\"ethiopic-halehame-gez\",\"ethiopic-halehame-om-et\",\"ethiopic-halehame-sid-et\",\"ethiopic-halehame-so-et\",\"ethiopic-halehame-ti-er\",\"ethiopic-halehame-ti-et\",\"ethiopic-halehame-tig\",\"ethiopic-numeric\",\"ew-resize\",\"exclusion\",\"expanded\",\"extends\",\"extra-condensed\",\"extra-expanded\",\"fantasy\",\"fast\",\"fill\",\"fixed\",\"flat\",\"flex\",\"flex-end\",\"flex-start\",\"footnotes\",\"forwards\",\"from\",\"geometricPrecision\",\"georgian\",\"graytext\",\"grid\",\"groove\",\"gujarati\",\"gurmukhi\",\"hand\",\"hangul\",\"hangul-consonant\",\"hard-light\",\"hebrew\",\"help\",\"hidden\",\"hide\",\"higher\",\"highlight\",\"highlighttext\",\"hiragana\",\"hiragana-iroha\",\"horizontal\",\"hsl\",\"hsla\",\"hue\",\"icon\",\"ignore\",\"inactiveborder\",\"inactivecaption\",\"inactivecaptiontext\",\"infinite\",\"infobackground\",\"infotext\",\"inherit\",\"initial\",\"inline\",\"inline-axis\",\"inline-block\",\"inline-flex\",\"inline-grid\",\"inline-table\",\"inset\",\"inside\",\"intrinsic\",\"invert\",\"italic\",\"japanese-formal\",\"japanese-informal\",\"justify\",\"kannada\",\"katakana\",\"katakana-iroha\",\"keep-all\",\"khmer\",\"korean-hangul-formal\",\"korean-hanja-formal\",\"korean-hanja-informal\",\"landscape\",\"lao\",\"large\",\"larger\",\"left\",\"level\",\"lighter\",\"lighten\",\"line-through\",\"linear\",\"linear-gradient\",\"lines\",\"list-item\",\"listbox\",\"listitem\",\"local\",\"logical\",\"loud\",\"lower\",\"lower-alpha\",\"lower-armenian\",\"lower-greek\",\"lower-hexadecimal\",\"lower-latin\",\"lower-norwegian\",\"lower-roman\",\"lowercase\",\"ltr\",\"luminosity\",\"malayalam\",\"match\",\"matrix\",\"matrix3d\",\"media-controls-background\",\"media-current-time-display\",\"media-fullscreen-button\",\"media-mute-button\",\"media-play-button\",\"media-return-to-realtime-button\",\"media-rewind-button\",\"media-seek-back-button\",\"media-seek-forward-button\",\"media-slider\",\"media-sliderthumb\",\"media-time-remaining-display\",\"media-volume-slider\",\"media-volume-slider-container\",\"media-volume-sliderthumb\",\"medium\",\"menu\",\"menulist\",\"menulist-button\",\"menulist-text\",\"menulist-textfield\",\"menutext\",\"message-box\",\"middle\",\"min-intrinsic\",\"mix\",\"mongolian\",\"monospace\",\"move\",\"multiple\",\"multiply\",\"myanmar\",\"n-resize\",\"narrower\",\"ne-resize\",\"nesw-resize\",\"no-close-quote\",\"no-drop\",\"no-open-quote\",\"no-repeat\",\"none\",\"normal\",\"not-allowed\",\"nowrap\",\"ns-resize\",\"numbers\",\"numeric\",\"nw-resize\",\"nwse-resize\",\"oblique\",\"octal\",\"opacity\",\"open-quote\",\"optimizeLegibility\",\"optimizeSpeed\",\"oriya\",\"oromo\",\"outset\",\"outside\",\"outside-shape\",\"overlay\",\"overline\",\"padding\",\"padding-box\",\"painted\",\"page\",\"paused\",\"persian\",\"perspective\",\"plus-darker\",\"plus-lighter\",\"pointer\",\"polygon\",\"portrait\",\"pre\",\"pre-line\",\"pre-wrap\",\"preserve-3d\",\"progress\",\"push-button\",\"radial-gradient\",\"radio\",\"read-only\",\"read-write\",\"read-write-plaintext-only\",\"rectangle\",\"region\",\"relative\",\"repeat\",\"repeating-linear-gradient\",\"repeating-radial-gradient\",\"repeat-x\",\"repeat-y\",\"reset\",\"reverse\",\"rgb\",\"rgba\",\"ridge\",\"right\",\"rotate\",\"rotate3d\",\"rotateX\",\"rotateY\",\"rotateZ\",\"round\",\"row\",\"row-resize\",\"row-reverse\",\"rtl\",\"run-in\",\"running\",\"s-resize\",\"sans-serif\",\"saturation\",\"scale\",\"scale3d\",\"scaleX\",\"scaleY\",\"scaleZ\",\"screen\",\"scroll\",\"scrollbar\",\"scroll-position\",\"se-resize\",\"searchfield\",\"searchfield-cancel-button\",\"searchfield-decoration\",\"searchfield-results-button\",\"searchfield-results-decoration\",\"self-start\",\"self-end\",\"semi-condensed\",\"semi-expanded\",\"separate\",\"serif\",\"show\",\"sidama\",\"simp-chinese-formal\",\"simp-chinese-informal\",\"single\",\"skew\",\"skewX\",\"skewY\",\"skip-white-space\",\"slide\",\"slider-horizontal\",\"slider-vertical\",\"sliderthumb-horizontal\",\"sliderthumb-vertical\",\"slow\",\"small\",\"small-caps\",\"small-caption\",\"smaller\",\"soft-light\",\"solid\",\"somali\",\"source-atop\",\"source-in\",\"source-out\",\"source-over\",\"space\",\"space-around\",\"space-between\",\"space-evenly\",\"spell-out\",\"square\",\"square-button\",\"start\",\"static\",\"status-bar\",\"stretch\",\"stroke\",\"sub\",\"subpixel-antialiased\",\"super\",\"sw-resize\",\"symbolic\",\"symbols\",\"system-ui\",\"table\",\"table-caption\",\"table-cell\",\"table-column\",\"table-column-group\",\"table-footer-group\",\"table-header-group\",\"table-row\",\"table-row-group\",\"tamil\",\"telugu\",\"text\",\"text-bottom\",\"text-top\",\"textarea\",\"textfield\",\"thai\",\"thick\",\"thin\",\"threeddarkshadow\",\"threedface\",\"threedhighlight\",\"threedlightshadow\",\"threedshadow\",\"tibetan\",\"tigre\",\"tigrinya-er\",\"tigrinya-er-abegede\",\"tigrinya-et\",\"tigrinya-et-abegede\",\"to\",\"top\",\"trad-chinese-formal\",\"trad-chinese-informal\",\"transform\",\"translate\",\"translate3d\",\"translateX\",\"translateY\",\"translateZ\",\"transparent\",\"ultra-condensed\",\"ultra-expanded\",\"underline\",\"unset\",\"up\",\"upper-alpha\",\"upper-armenian\",\"upper-greek\",\"upper-hexadecimal\",\"upper-latin\",\"upper-norwegian\",\"upper-roman\",\"uppercase\",\"urdu\",\"url\",\"var\",\"vertical\",\"vertical-text\",\"visible\",\"visibleFill\",\"visiblePainted\",\"visibleStroke\",\"visual\",\"w-resize\",\"wait\",\"wave\",\"wider\",\"window\",\"windowframe\",\"windowtext\",\"words\",\"wrap\",\"wrap-reverse\",\"x-large\",\"x-small\",\"xor\",\"xx-large\",\"xx-small\"],w=t(y),k=r.concat(i).concat(n).concat(s).concat(d).concat(u).concat(b).concat(y);function v(e,t){for(var r,o=!1;null!=(r=e.next());){if(o&&\"/\"==r){t.tokenize=null;break}o=\"*\"==r}return[\"comment\",\"comment\"]}e.registerHelper(\"hintWords\",\"css\",k),e.defineMIME(\"text/css\",{documentTypes:o,mediaTypes:a,mediaFeatures:l,mediaValueKeywords:c,propertyKeywords:p,nonStandardPropertyKeywords:m,fontProperties:h,counterDescriptors:g,colorKeywords:f,valueKeywords:w,tokenHooks:{\"/\":function(e,t){return!!e.eat(\"*\")&&(t.tokenize=v,v(e,t))}},name:\"css\"}),e.defineMIME(\"text/x-scss\",{mediaTypes:a,mediaFeatures:l,mediaValueKeywords:c,propertyKeywords:p,nonStandardPropertyKeywords:m,colorKeywords:f,valueKeywords:w,fontProperties:h,allowNested:!0,lineComment:\"//\",tokenHooks:{\"/\":function(e,t){return e.eat(\"/\")?(e.skipToEnd(),[\"comment\",\"comment\"]):e.eat(\"*\")?(t.tokenize=v,v(e,t)):[\"operator\",\"operator\"]},\":\":function(e){return!!e.match(/\\s*\\{/,!1)&&[null,null]},$:function(e){return e.match(/^[\\w-]+/),e.match(/^\\s*:/,!1)?[\"variable-2\",\"variable-definition\"]:[\"variable-2\",\"variable\"]},\"#\":function(e){return!!e.eat(\"{\")&&[null,\"interpolation\"]}},name:\"css\",helperType:\"scss\"}),e.defineMIME(\"text/x-less\",{mediaTypes:a,mediaFeatures:l,mediaValueKeywords:c,propertyKeywords:p,nonStandardPropertyKeywords:m,colorKeywords:f,valueKeywords:w,fontProperties:h,allowNested:!0,lineComment:\"//\",tokenHooks:{\"/\":function(e,t){return e.eat(\"/\")?(e.skipToEnd(),[\"comment\",\"comment\"]):e.eat(\"*\")?(t.tokenize=v,v(e,t)):[\"operator\",\"operator\"]},\"@\":function(e){return e.eat(\"{\")?[null,\"interpolation\"]:!e.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\\b/i,!1)&&(e.eatWhile(/[\\w\\\\\\-]/),e.match(/^\\s*:/,!1)?[\"variable-2\",\"variable-definition\"]:[\"variable-2\",\"variable\"])},\"&\":function(){return[\"atom\",\"atom\"]}},name:\"css\",helperType:\"less\"}),e.defineMIME(\"text/x-gss\",{documentTypes:o,mediaTypes:a,mediaFeatures:l,propertyKeywords:p,nonStandardPropertyKeywords:m,fontProperties:h,counterDescriptors:g,colorKeywords:f,valueKeywords:w,supportsAtComponent:!0,tokenHooks:{\"/\":function(e,t){return!!e.eat(\"*\")&&(t.tokenize=v,v(e,t))}},name:\"css\",helperType:\"gss\"})});",
"type": "application/javascript",
"title": "$:/plugins/tiddlywiki/codemirror/mode/css/css.js",
"module-type": "codemirror"
},
"$:/plugins/tiddlywiki/codemirror-mode-css/readme": {
"title": "$:/plugins/tiddlywiki/codemirror-mode-css/readme",
"text": "This plugin adds Syntax Highlighting for CSS tiddlers (text/css) to the [[CodeMirror|http://codemirror.net]] text editor. It needs the latest [[CodeMirror plugin|$:/plugins/tiddlywiki/codemirror]] to be installed\n\n\n"
}
}
}
{
"tiddlers": {
"$:/plugins/tiddlywiki/codemirror/addon/mode/multiplex.js": {
"text": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n!function(e){\"object\"==typeof exports&&\"object\"==typeof module?e(require(\"../../lib/codemirror\")):\"function\"==typeof define&&define.amd?define([\"../../lib/codemirror\"],e):e(CodeMirror)}(function(e){\"use strict\";e.multiplexingMode=function(n){var i=Array.prototype.slice.call(arguments,1);function t(e,n,i,t){if(\"string\"==typeof n){var r=e.indexOf(n,i);return t&&r>-1?r+n.length:r}var o=n.exec(i?e.slice(i):e);return o?o.index+i+(t?o[0].length:0):-1}return{startState:function(){return{outer:e.startState(n),innerActive:null,inner:null}},copyState:function(i){return{outer:e.copyState(n,i.outer),innerActive:i.innerActive,inner:i.innerActive&&e.copyState(i.innerActive.mode,i.inner)}},token:function(r,o){if(o.innerActive){var c=o.innerActive;a=r.string;if(!c.close&&r.sol())return o.innerActive=o.inner=null,this.token(r,o);if((v=c.close?t(a,c.close,r.pos,c.parseDelimiters):-1)==r.pos&&!c.parseDelimiters)return r.match(c.close),o.innerActive=o.inner=null,c.delimStyle&&c.delimStyle+\" \"+c.delimStyle+\"-close\";v>-1&&(r.string=a.slice(0,v));var l=c.mode.token(r,o.inner);return v>-1&&(r.string=a),v==r.pos&&c.parseDelimiters&&(o.innerActive=o.inner=null),c.innerStyle&&(l=l?l+\" \"+c.innerStyle:c.innerStyle),l}for(var s=1/0,a=r.string,u=0;u<i.length;++u){var v,d=i[u];if((v=t(a,d.open,r.pos))==r.pos){d.parseDelimiters||r.match(d.open),o.innerActive=d;var f=0;if(n.indent){var m=n.indent(o.outer,\"\");m!==e.Pass&&(f=m)}return o.inner=e.startState(d.mode,f),d.delimStyle&&d.delimStyle+\" \"+d.delimStyle+\"-open\"}-1!=v&&v<s&&(s=v)}s!=1/0&&(r.string=a.slice(0,s));var p=n.token(r,o.outer);return s!=1/0&&(r.string=a),p},indent:function(i,t){var r=i.innerActive?i.innerActive.mode:n;return r.indent?r.indent(i.innerActive?i.inner:i.outer,t):e.Pass},blankLine:function(t){var r=t.innerActive?t.innerActive.mode:n;if(r.blankLine&&r.blankLine(t.innerActive?t.inner:t.outer),t.innerActive)\"\\n\"===t.innerActive.close&&(t.innerActive=t.inner=null);else for(var o=0;o<i.length;++o){var c=i[o];\"\\n\"===c.open&&(t.innerActive=c,t.inner=e.startState(c.mode,r.indent?r.indent(t.outer,\"\"):0))}},electricChars:n.electricChars,innerMode:function(e){return e.inner?{state:e.inner,mode:e.innerActive.mode}:{state:e.outer,mode:n}}}}});\n",
"type": "application/javascript",
"title": "$:/plugins/tiddlywiki/codemirror/addon/mode/multiplex.js",
"module-type": "codemirror"
},
"$:/plugins/tiddlywiki/codemirror/mode/htmlembedded/htmlembedded.js": {
"text": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n!function(e){\"object\"==typeof exports&&\"object\"==typeof module?e(require(\"../../lib/codemirror\"),require(\"../htmlmixed/htmlmixed\"),require(\"../../addon/mode/multiplex\")):\"function\"==typeof define&&define.amd?define([\"../../lib/codemirror\",\"../htmlmixed/htmlmixed\",\"../../addon/mode/multiplex\"],e):e(CodeMirror)}(function(e){\"use strict\";e.defineMode(\"htmlembedded\",function(i,t){var d=t.closeComment||\"--%>\";return e.multiplexingMode(e.getMode(i,\"htmlmixed\"),{open:t.openComment||\"<%--\",close:d,delimStyle:\"comment\",mode:{token:function(e){return e.skipTo(d)||e.skipToEnd(),\"comment\"}}},{open:t.open||t.scriptStartRegex||\"<%\",close:t.close||t.scriptEndRegex||\"%>\",mode:e.getMode(i,t.scriptingModeSpec)})},\"htmlmixed\"),e.defineMIME(\"application/x-ejs\",{name:\"htmlembedded\",scriptingModeSpec:\"javascript\"}),e.defineMIME(\"application/x-aspx\",{name:\"htmlembedded\",scriptingModeSpec:\"text/x-csharp\"}),e.defineMIME(\"application/x-jsp\",{name:\"htmlembedded\",scriptingModeSpec:\"text/x-java\"}),e.defineMIME(\"application/x-erb\",{name:\"htmlembedded\",scriptingModeSpec:\"ruby\"})});",
"type": "application/javascript",
"title": "$:/plugins/tiddlywiki/codemirror/mode/htmlembedded/htmlembedded.js",
"module-type": "codemirror"
},
"$:/plugins/tiddlywiki/codemirror-mode-htmlembedded/readme": {
"title": "$:/plugins/tiddlywiki/codemirror-mode-htmlembedded/readme",
"text": "This plugin adds Syntax Highlighting for Embedded-HTML tiddlers (application/x-aspx, application/x-ejs, application/x-jsp and application/x-erb) to the [[CodeMirror|http://codemirror.net]] text editor. It needs the latest [[CodeMirror plugin|$:/plugins/tiddlywiki/codemirror]] to be installed\n\n"
}
}
}
{
"tiddlers": {
"$:/plugins/tiddlywiki/codemirror/mode/htmlmixed/htmlmixed.js": {
"text": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n!function(t){\"object\"==typeof exports&&\"object\"==typeof module?t(require(\"../../lib/codemirror\"),require(\"../xml/xml\"),require(\"../javascript/javascript\"),require(\"../css/css\")):\"function\"==typeof define&&define.amd?define([\"../../lib/codemirror\",\"../xml/xml\",\"../javascript/javascript\",\"../css/css\"],t):t(CodeMirror)}(function(t){\"use strict\";var e={script:[[\"lang\",/(javascript|babel)/i,\"javascript\"],[\"type\",/^(?:text|application)\\/(?:x-)?(?:java|ecma)script$|^module$|^$/i,\"javascript\"],[\"type\",/./,\"text/plain\"],[null,null,\"javascript\"]],style:[[\"lang\",/^css$/i,\"css\"],[\"type\",/^(text\\/)?(x-)?(stylesheet|css)$/i,\"css\"],[\"type\",/./,\"text/plain\"],[null,null,\"css\"]]};var a={};function n(t,e){var n,l=t.match(a[n=e]||(a[n]=new RegExp(\"\\\\s+\"+n+\"\\\\s*=\\\\s*('|\\\")?([^'\\\"]+)('|\\\")?\\\\s*\")));return l?/^\\s*(.*?)\\s*$/.exec(l[2])[1]:\"\"}function l(t,e){return new RegExp((e?\"^\":\"\")+\"</s*\"+t+\"s*>\",\"i\")}function r(t,e){for(var a in t)for(var n=e[a]||(e[a]=[]),l=t[a],r=l.length-1;r>=0;r--)n.unshift(l[r])}t.defineMode(\"htmlmixed\",function(a,o){var c=t.getMode(a,{name:\"xml\",htmlMode:!0,multilineTagIndentFactor:o.multilineTagIndentFactor,multilineTagIndentPastTag:o.multilineTagIndentPastTag}),i={},s=o&&o.tags,u=o&&o.scriptTypes;if(r(e,i),s&&r(s,i),u)for(var m=u.length-1;m>=0;m--)i.script.unshift([\"type\",u[m].matches,u[m].mode]);function d(e,r){var o,s=c.token(e,r.htmlState),u=/\\btag\\b/.test(s);if(u&&!/[<>\\s\\/]/.test(e.current())&&(o=r.htmlState.tagName&&r.htmlState.tagName.toLowerCase())&&i.hasOwnProperty(o))r.inTag=o+\" \";else if(r.inTag&&u&&/>$/.test(e.current())){var m=/^([\\S]+) (.*)/.exec(r.inTag);r.inTag=null;var p=\">\"==e.current()&&function(t,e){for(var a=0;a<t.length;a++){var l=t[a];if(!l[0]||l[1].test(n(e,l[0])))return l[2]}}(i[m[1]],m[2]),f=t.getMode(a,p),g=l(m[1],!0),h=l(m[1],!1);r.token=function(t,e){return t.match(g,!1)?(e.token=d,e.localState=e.localMode=null,null):(a=t,n=h,l=e.localMode.token(t,e.localState),r=a.current(),(o=r.search(n))>-1?a.backUp(r.length-o):r.match(/<\\/?$/)&&(a.backUp(r.length),a.match(n,!1)||a.match(r)),l);var a,n,l,r,o},r.localMode=f,r.localState=t.startState(f,c.indent(r.htmlState,\"\"))}else r.inTag&&(r.inTag+=e.current(),e.eol()&&(r.inTag+=\" \"));return s}return{startState:function(){return{token:d,inTag:null,localMode:null,localState:null,htmlState:t.startState(c)}},copyState:function(e){var a;return e.localState&&(a=t.copyState(e.localMode,e.localState)),{token:e.token,inTag:e.inTag,localMode:e.localMode,localState:a,htmlState:t.copyState(c,e.htmlState)}},token:function(t,e){return e.token(t,e)},indent:function(e,a,n){return!e.localMode||/^\\s*<\\//.test(a)?c.indent(e.htmlState,a):e.localMode.indent?e.localMode.indent(e.localState,a,n):t.Pass},innerMode:function(t){return{state:t.localState||t.htmlState,mode:t.localMode||c}}}},\"xml\",\"javascript\",\"css\"),t.defineMIME(\"text/html\",\"htmlmixed\")});",
"type": "application/javascript",
"title": "$:/plugins/tiddlywiki/codemirror/mode/htmlmixed/htmlmixed.js",
"module-type": "codemirror"
},
"$:/plugins/tiddlywiki/codemirror-mode-htmlmixed/readme": {
"title": "$:/plugins/tiddlywiki/codemirror-mode-htmlmixed/readme",
"text": "This plugin adds Syntax Highlighting for HTML tiddlers (text/html) to the [[CodeMirror|http://codemirror.net]] text editor. It needs the latest [[CodeMirror plugin|$:/plugins/tiddlywiki/codemirror]] to be installed\n\n"
}
}
}
{
"tiddlers": {
"$:/plugins/tiddlywiki/codemirror/mode/javascript/javascript.js": {
"text": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n!function(e){\"object\"==typeof exports&&\"object\"==typeof module?e(require(\"../../lib/codemirror\")):\"function\"==typeof define&&define.amd?define([\"../../lib/codemirror\"],e):e(CodeMirror)}(function(e){\"use strict\";e.defineMode(\"javascript\",function(t,r){var n,a,i=t.indentUnit,o=r.statementIndent,c=r.jsonld,u=r.json||c,s=r.typescript,f=r.wordCharacters||/[\\w$\\xa1-\\uffff]/,l=function(){function e(e){return{type:e,style:\"keyword\"}}var t=e(\"keyword a\"),r=e(\"keyword b\"),n=e(\"keyword c\"),a=e(\"keyword d\"),i=e(\"operator\"),o={type:\"atom\",style:\"atom\"};return{if:e(\"if\"),while:t,with:t,else:r,do:r,try:r,finally:r,return:a,break:a,continue:a,new:e(\"new\"),delete:n,void:n,throw:n,debugger:e(\"debugger\"),var:e(\"var\"),const:e(\"var\"),let:e(\"var\"),function:e(\"function\"),catch:e(\"catch\"),for:e(\"for\"),switch:e(\"switch\"),case:e(\"case\"),default:e(\"default\"),in:i,typeof:i,instanceof:i,true:o,false:o,null:o,undefined:o,NaN:o,Infinity:o,this:e(\"this\"),class:e(\"class\"),super:e(\"atom\"),yield:n,export:e(\"export\"),import:e(\"import\"),extends:n,await:n}}(),d=/[+\\-*&%=<>!?|~^@]/,p=/^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)\"/;function m(e,t,r){return n=e,a=r,t}function k(e,t){var r,n=e.next();if('\"'==n||\"'\"==n)return t.tokenize=(r=n,function(e,t){var n,a=!1;if(c&&\"@\"==e.peek()&&e.match(p))return t.tokenize=k,m(\"jsonld-keyword\",\"meta\");for(;null!=(n=e.next())&&(n!=r||a);)a=!a&&\"\\\\\"==n;return a||(t.tokenize=k),m(\"string\",\"string\")}),t.tokenize(e,t);if(\".\"==n&&e.match(/^\\d+(?:[eE][+\\-]?\\d+)?/))return m(\"number\",\"number\");if(\".\"==n&&e.match(\"..\"))return m(\"spread\",\"meta\");if(/[\\[\\]{}\\(\\),;\\:\\.]/.test(n))return m(n);if(\"=\"==n&&e.eat(\">\"))return m(\"=>\",\"operator\");if(\"0\"==n&&e.eat(/x/i))return e.eatWhile(/[\\da-f]/i),m(\"number\",\"number\");if(\"0\"==n&&e.eat(/o/i))return e.eatWhile(/[0-7]/i),m(\"number\",\"number\");if(\"0\"==n&&e.eat(/b/i))return e.eatWhile(/[01]/i),m(\"number\",\"number\");if(/\\d/.test(n))return e.match(/^\\d*(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/),m(\"number\",\"number\");if(\"/\"==n)return e.eat(\"*\")?(t.tokenize=v,v(e,t)):e.eat(\"/\")?(e.skipToEnd(),m(\"comment\",\"comment\")):He(e,t,1)?(function(e){for(var t,r=!1,n=!1;null!=(t=e.next());){if(!r){if(\"/\"==t&&!n)return;\"[\"==t?n=!0:n&&\"]\"==t&&(n=!1)}r=!r&&\"\\\\\"==t}}(e),e.match(/^\\b(([gimyu])(?![gimyu]*\\2))+\\b/),m(\"regexp\",\"string-2\")):(e.eat(\"=\"),m(\"operator\",\"operator\",e.current()));if(\"`\"==n)return t.tokenize=y,y(e,t);if(\"#\"==n)return e.skipToEnd(),m(\"error\",\"error\");if(d.test(n))return\">\"==n&&t.lexical&&\">\"==t.lexical.type||(e.eat(\"=\")?\"!\"!=n&&\"=\"!=n||e.eat(\"=\"):/[<>*+\\-]/.test(n)&&(e.eat(n),\">\"==n&&e.eat(n))),m(\"operator\",\"operator\",e.current());if(f.test(n)){e.eatWhile(f);var a=e.current();if(\".\"!=t.lastType){if(l.propertyIsEnumerable(a)){var i=l[a];return m(i.type,i.style,a)}if(\"async\"==a&&e.match(/^(\\s|\\/\\*.*?\\*\\/)*[\\[\\(\\w]/,!1))return m(\"async\",\"keyword\",a)}return m(\"variable\",\"variable\",a)}}function v(e,t){for(var r,n=!1;r=e.next();){if(\"/\"==r&&n){t.tokenize=k;break}n=\"*\"==r}return m(\"comment\",\"comment\")}function y(e,t){for(var r,n=!1;null!=(r=e.next());){if(!n&&(\"`\"==r||\"$\"==r&&e.eat(\"{\"))){t.tokenize=k;break}n=!n&&\"\\\\\"==r}return m(\"quasi\",\"string-2\",e.current())}var b=\"([{}])\";function w(e,t){t.fatArrowAt&&(t.fatArrowAt=null);var r=e.string.indexOf(\"=>\",e.start);if(!(r<0)){if(s){var n=/:\\s*(?:\\w+(?:<[^>]*>|\\[\\])?|\\{[^}]*\\})\\s*$/.exec(e.string.slice(e.start,r));n&&(r=n.index)}for(var a=0,i=!1,o=r-1;o>=0;--o){var c=e.string.charAt(o),u=b.indexOf(c);if(u>=0&&u<3){if(!a){++o;break}if(0==--a){\"(\"==c&&(i=!0);break}}else if(u>=3&&u<6)++a;else if(f.test(c))i=!0;else{if(/[\"'\\/]/.test(c))return;if(i&&!a){++o;break}}}i&&!a&&(t.fatArrowAt=o)}}var x={atom:!0,number:!0,variable:!0,string:!0,regexp:!0,this:!0,\"jsonld-keyword\":!0};function h(e,t,r,n,a,i){this.indented=e,this.column=t,this.type=r,this.prev=a,this.info=i,null!=n&&(this.align=n)}function g(e,t){for(var r=e.localVars;r;r=r.next)if(r.name==t)return!0;for(var n=e.context;n;n=n.prev)for(r=n.vars;r;r=r.next)if(r.name==t)return!0}var j={state:null,column:null,marked:null,cc:null};function M(){for(var e=arguments.length-1;e>=0;e--)j.cc.push(arguments[e])}function V(){return M.apply(null,arguments),!0}function A(e){function t(t){for(var r=t;r;r=r.next)if(r.name==e)return!0;return!1}var n=j.state;if(j.marked=\"def\",n.context){if(t(n.localVars))return;n.localVars={name:e,next:n.localVars}}else{if(t(n.globalVars))return;r.globalVars&&(n.globalVars={name:e,next:n.globalVars})}}function E(e){return\"public\"==e||\"private\"==e||\"protected\"==e||\"abstract\"==e||\"readonly\"==e}var z={name:\"this\",next:{name:\"arguments\"}};function I(){j.state.context={prev:j.state.context,vars:j.state.localVars},j.state.localVars=z}function T(){j.state.localVars=j.state.context.vars,j.state.context=j.state.context.prev}function $(e,t){var r=function(){var r=j.state,n=r.indented;if(\"stat\"==r.lexical.type)n=r.lexical.indented;else for(var a=r.lexical;a&&\")\"==a.type&&a.align;a=a.prev)n=a.indented;r.lexical=new h(n,j.stream.column(),e,null,r.lexical,t)};return r.lex=!0,r}function C(){var e=j.state;e.lexical.prev&&(\")\"==e.lexical.type&&(e.indented=e.lexical.indented),e.lexical=e.lexical.prev)}function q(e){return function t(r){return r==e?V():\";\"==e?M():V(t)}}function O(e,t){return\"var\"==e?V($(\"vardef\",t.length),pe,q(\";\"),C):\"keyword a\"==e?V($(\"form\"),W,O,C):\"keyword b\"==e?V($(\"form\"),O,C):\"keyword d\"==e?j.stream.match(/^\\s*$/,!1)?V():V($(\"stat\"),U,q(\";\"),C):\"debugger\"==e?V(q(\";\")):\"{\"==e?V($(\"}\"),te,C):\";\"==e?V():\"if\"==e?(\"else\"==j.state.lexical.info&&j.state.cc[j.state.cc.length-1]==C&&j.state.cc.pop()(),V($(\"form\"),W,O,C,be)):\"function\"==e?V(Me):\"for\"==e?V($(\"form\"),we,O,C):\"class\"==e||s&&\"interface\"==t?(j.marked=\"keyword\",V($(\"form\"),Ee,C)):\"variable\"==e?s&&\"declare\"==t?(j.marked=\"keyword\",V(O)):s&&(\"module\"==t||\"enum\"==t||\"type\"==t)&&j.stream.match(/^\\s*\\w/,!1)?(j.marked=\"keyword\",\"enum\"==t?V(Ue):\"type\"==t?V(ie,q(\"operator\"),ie,q(\";\")):V($(\"form\"),me,q(\"{\"),$(\"}\"),te,C,C)):s&&\"namespace\"==t?(j.marked=\"keyword\",V($(\"form\"),P,te,C)):s&&\"abstract\"==t?(j.marked=\"keyword\",V(O)):V($(\"stat\"),Q):\"switch\"==e?V($(\"form\"),W,q(\"{\"),$(\"}\",\"switch\"),te,C,C):\"case\"==e?V(P,q(\":\")):\"default\"==e?V(q(\":\")):\"catch\"==e?V($(\"form\"),I,q(\"(\"),Ve,q(\")\"),O,C,T):\"export\"==e?V($(\"stat\"),$e,C):\"import\"==e?V($(\"stat\"),qe,C):\"async\"==e?V(O):\"@\"==t?V(P,O):M($(\"stat\"),P,q(\";\"),C)}function P(e,t){return N(e,t,!1)}function S(e,t){return N(e,t,!0)}function W(e){return\"(\"!=e?M():V($(\")\"),P,q(\")\"),C)}function N(e,t,r){if(j.state.fatArrowAt==j.stream.start){var n=r?J:G;if(\"(\"==e)return V(I,$(\")\"),_(Ve,\")\"),C,q(\"=>\"),n,T);if(\"variable\"==e)return M(I,me,q(\"=>\"),n,T)}var a,i=r?H:B;return x.hasOwnProperty(e)?V(i):\"function\"==e?V(Me,i):\"class\"==e||s&&\"interface\"==t?(j.marked=\"keyword\",V($(\"form\"),Ae,C)):\"keyword c\"==e||\"async\"==e?V(r?S:P):\"(\"==e?V($(\")\"),U,q(\")\"),C,i):\"operator\"==e||\"spread\"==e?V(r?S:P):\"[\"==e?V($(\"]\"),Ne,C,i):\"{\"==e?ee(X,\"}\",null,i):\"quasi\"==e?M(D,i):\"new\"==e?V((a=r,function(e){return\".\"==e?V(a?L:K):\"variable\"==e&&s?V(fe,a?H:B):M(a?S:P)})):\"import\"==e?V(P):V()}function U(e){return e.match(/[;\\}\\)\\],]/)?M():M(P)}function B(e,t){return\",\"==e?V(P):H(e,t,!1)}function H(e,t,r){var n=0==r?B:H,a=0==r?P:S;return\"=>\"==e?V(I,r?J:G,T):\"operator\"==e?/\\+\\+|--/.test(t)||s&&\"!\"==t?V(n):s&&\"<\"==t&&j.stream.match(/^([^>]|<.*?>)*>\\s*\\(/,!1)?V($(\">\"),_(ie,\">\"),C,n):\"?\"==t?V(P,q(\":\"),a):V(a):\"quasi\"==e?M(D,n):\";\"!=e?\"(\"==e?ee(S,\")\",\"call\",n):\".\"==e?V(R,n):\"[\"==e?V($(\"]\"),U,q(\"]\"),C,n):s&&\"as\"==t?(j.marked=\"keyword\",V(ie,n)):\"regexp\"==e?(j.state.lastType=j.marked=\"operator\",j.stream.backUp(j.stream.pos-j.stream.start-1),V(a)):void 0:void 0}function D(e,t){return\"quasi\"!=e?M():\"${\"!=t.slice(t.length-2)?V(D):V(P,F)}function F(e){if(\"}\"==e)return j.marked=\"string-2\",j.state.tokenize=y,V(D)}function G(e){return w(j.stream,j.state),M(\"{\"==e?O:P)}function J(e){return w(j.stream,j.state),M(\"{\"==e?O:S)}function K(e,t){if(\"target\"==t)return j.marked=\"keyword\",V(B)}function L(e,t){if(\"target\"==t)return j.marked=\"keyword\",V(H)}function Q(e){return\":\"==e?V(C,O):M(B,q(\";\"),C)}function R(e){if(\"variable\"==e)return j.marked=\"property\",V()}function X(e,t){if(\"async\"==e)return j.marked=\"property\",V(X);if(\"variable\"==e||\"keyword\"==j.style){return j.marked=\"property\",\"get\"==t||\"set\"==t?V(Y):(s&&j.state.fatArrowAt==j.stream.start&&(r=j.stream.match(/^\\s*:\\s*/,!1))&&(j.state.fatArrowAt=j.stream.pos+r[0].length),V(Z));var r}else{if(\"number\"==e||\"string\"==e)return j.marked=c?\"property\":j.style+\" property\",V(Z);if(\"jsonld-keyword\"==e)return V(Z);if(s&&E(t))return j.marked=\"keyword\",V(X);if(\"[\"==e)return V(P,re,q(\"]\"),Z);if(\"spread\"==e)return V(S,Z);if(\"*\"==t)return j.marked=\"keyword\",V(X);if(\":\"==e)return M(Z)}}function Y(e){return\"variable\"!=e?M(Z):(j.marked=\"property\",V(Me))}function Z(e){return\":\"==e?V(S):\"(\"==e?M(Me):void 0}function _(e,t,r){function n(a,i){if(r?r.indexOf(a)>-1:\",\"==a){var o=j.state.lexical;return\"call\"==o.info&&(o.pos=(o.pos||0)+1),V(function(r,n){return r==t||n==t?M():M(e)},n)}return a==t||i==t?V():V(q(t))}return function(r,a){return r==t||a==t?V():M(e,n)}}function ee(e,t,r){for(var n=3;n<arguments.length;n++)j.cc.push(arguments[n]);return V($(t,r),_(e,t),C)}function te(e){return\"}\"==e?V():M(O,te)}function re(e,t){if(s){if(\":\"==e)return V(ie);if(\"?\"==t)return V(re)}}function ne(e){if(s&&\":\"==e)return j.stream.match(/^\\s*\\w+\\s+is\\b/,!1)?V(P,ae,ie):V(ie)}function ae(e,t){if(\"is\"==t)return j.marked=\"keyword\",V()}function ie(e,t){return\"keyof\"==t||\"typeof\"==t?(j.marked=\"keyword\",V(\"keyof\"==t?ie:S)):\"variable\"==e||\"void\"==t?(j.marked=\"type\",V(se)):\"string\"==e||\"number\"==e||\"atom\"==e?V(se):\"[\"==e?V($(\"]\"),_(ie,\"]\",\",\"),C,se):\"{\"==e?V($(\"}\"),_(ce,\"}\",\",;\"),C,se):\"(\"==e?V(_(ue,\")\"),oe):\"<\"==e?V(_(ie,\">\"),ie):void 0}function oe(e){if(\"=>\"==e)return V(ie)}function ce(e,t){return\"variable\"==e||\"keyword\"==j.style?(j.marked=\"property\",V(ce)):\"?\"==t?V(ce):\":\"==e?V(ie):\"[\"==e?V(P,re,q(\"]\"),ce):void 0}function ue(e,t){return\"variable\"==e&&j.stream.match(/^\\s*[?:]/,!1)||\"?\"==t?V(ue):\":\"==e?V(ie):M(ie)}function se(e,t){return\"<\"==t?V($(\">\"),_(ie,\">\"),C,se):\"|\"==t||\".\"==e||\"&\"==t?V(ie):\"[\"==e?V(q(\"]\"),se):\"extends\"==t||\"implements\"==t?(j.marked=\"keyword\",V(ie)):void 0}function fe(e,t){if(\"<\"==t)return V($(\">\"),_(ie,\">\"),C,se)}function le(){return M(ie,de)}function de(e,t){if(\"=\"==t)return V(ie)}function pe(e,t){return\"enum\"==t?(j.marked=\"keyword\",V(Ue)):M(me,re,ve,ye)}function me(e,t){return s&&E(t)?(j.marked=\"keyword\",V(me)):\"variable\"==e?(A(t),V()):\"spread\"==e?V(me):\"[\"==e?ee(me,\"]\"):\"{\"==e?ee(ke,\"}\"):void 0}function ke(e,t){return\"variable\"!=e||j.stream.match(/^\\s*:/,!1)?(\"variable\"==e&&(j.marked=\"property\"),\"spread\"==e?V(me):\"}\"==e?M():V(q(\":\"),me,ve)):(A(t),V(ve))}function ve(e,t){if(\"=\"==t)return V(S)}function ye(e){if(\",\"==e)return V(pe)}function be(e,t){if(\"keyword b\"==e&&\"else\"==t)return V($(\"form\",\"else\"),O,C)}function we(e,t){return\"await\"==t?V(we):\"(\"==e?V($(\")\"),xe,q(\")\"),C):void 0}function xe(e){return\"var\"==e?V(pe,q(\";\"),ge):\";\"==e?V(ge):\"variable\"==e?V(he):M(P,q(\";\"),ge)}function he(e,t){return\"in\"==t||\"of\"==t?(j.marked=\"keyword\",V(P)):V(B,ge)}function ge(e,t){return\";\"==e?V(je):\"in\"==t||\"of\"==t?(j.marked=\"keyword\",V(P)):M(P,q(\";\"),je)}function je(e){\")\"!=e&&V(P)}function Me(e,t){return\"*\"==t?(j.marked=\"keyword\",V(Me)):\"variable\"==e?(A(t),V(Me)):\"(\"==e?V(I,$(\")\"),_(Ve,\")\"),C,ne,O,T):s&&\"<\"==t?V($(\">\"),_(le,\">\"),C,Me):void 0}function Ve(e,t){return\"@\"==t&&V(P,Ve),\"spread\"==e?V(Ve):s&&E(t)?(j.marked=\"keyword\",V(Ve)):M(me,re,ve)}function Ae(e,t){return\"variable\"==e?Ee(e,t):ze(e,t)}function Ee(e,t){if(\"variable\"==e)return A(t),V(ze)}function ze(e,t){return\"<\"==t?V($(\">\"),_(le,\">\"),C,ze):\"extends\"==t||\"implements\"==t||s&&\",\"==e?(\"implements\"==t&&(j.marked=\"keyword\"),V(s?ie:P,ze)):\"{\"==e?V($(\"}\"),Ie,C):void 0}function Ie(e,t){return\"async\"==e||\"variable\"==e&&(\"static\"==t||\"get\"==t||\"set\"==t||s&&E(t))&&j.stream.match(/^\\s+[\\w$\\xa1-\\uffff]/,!1)?(j.marked=\"keyword\",V(Ie)):\"variable\"==e||\"keyword\"==j.style?(j.marked=\"property\",V(s?Te:Me,Ie)):\"[\"==e?V(P,re,q(\"]\"),s?Te:Me,Ie):\"*\"==t?(j.marked=\"keyword\",V(Ie)):\";\"==e?V(Ie):\"}\"==e?V():\"@\"==t?V(P,Ie):void 0}function Te(e,t){return\"?\"==t?V(Te):\":\"==e?V(ie,ve):\"=\"==t?V(S):M(Me)}function $e(e,t){return\"*\"==t?(j.marked=\"keyword\",V(We,q(\";\"))):\"default\"==t?(j.marked=\"keyword\",V(P,q(\";\"))):\"{\"==e?V(_(Ce,\"}\"),We,q(\";\")):M(O)}function Ce(e,t){return\"as\"==t?(j.marked=\"keyword\",V(q(\"variable\"))):\"variable\"==e?M(S,Ce):void 0}function qe(e){return\"string\"==e?V():\"(\"==e?M(P):M(Oe,Pe,We)}function Oe(e,t){return\"{\"==e?ee(Oe,\"}\"):(\"variable\"==e&&A(t),\"*\"==t&&(j.marked=\"keyword\"),V(Se))}function Pe(e){if(\",\"==e)return V(Oe,Pe)}function Se(e,t){if(\"as\"==t)return j.marked=\"keyword\",V(Oe)}function We(e,t){if(\"from\"==t)return j.marked=\"keyword\",V(P)}function Ne(e){return\"]\"==e?V():M(_(S,\"]\"))}function Ue(){return M($(\"form\"),me,q(\"{\"),$(\"}\"),_(Be,\"}\"),C,C)}function Be(){return M(me,ve)}function He(e,t,r){return t.tokenize==k&&/^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\\[{}\\(,;:]|=>)$/.test(t.lastType)||\"quasi\"==t.lastType&&/\\{\\s*$/.test(e.string.slice(0,e.pos-(r||0)))}return C.lex=!0,{startState:function(e){var t={tokenize:k,lastType:\"sof\",cc:[],lexical:new h((e||0)-i,0,\"block\",!1),localVars:r.localVars,context:r.localVars&&{vars:r.localVars},indented:e||0};return r.globalVars&&\"object\"==typeof r.globalVars&&(t.globalVars=r.globalVars),t},token:function(e,t){if(e.sol()&&(t.lexical.hasOwnProperty(\"align\")||(t.lexical.align=!1),t.indented=e.indentation(),w(e,t)),t.tokenize!=v&&e.eatSpace())return null;var r=t.tokenize(e,t);return\"comment\"==n?r:(t.lastType=\"operator\"!=n||\"++\"!=a&&\"--\"!=a?n:\"incdec\",function(e,t,r,n,a){var i=e.cc;for(j.state=e,j.stream=a,j.marked=null,j.cc=i,j.style=t,e.lexical.hasOwnProperty(\"align\")||(e.lexical.align=!0);;)if((i.length?i.pop():u?P:O)(r,n)){for(;i.length&&i[i.length-1].lex;)i.pop()();return j.marked?j.marked:\"variable\"==r&&g(e,n)?\"variable-2\":t}}(t,r,n,a,e))},indent:function(t,n){if(t.tokenize==v)return e.Pass;if(t.tokenize!=k)return 0;var a,c=n&&n.charAt(0),u=t.lexical;if(!/^\\s*else\\b/.test(n))for(var s=t.cc.length-1;s>=0;--s){var f=t.cc[s];if(f==C)u=u.prev;else if(f!=be)break}for(;(\"stat\"==u.type||\"form\"==u.type)&&(\"}\"==c||(a=t.cc[t.cc.length-1])&&(a==B||a==H)&&!/^[,\\.=+\\-*:?[\\(]/.test(n));)u=u.prev;o&&\")\"==u.type&&\"stat\"==u.prev.type&&(u=u.prev);var l,p,m=u.type,y=c==m;return\"vardef\"==m?u.indented+(\"operator\"==t.lastType||\",\"==t.lastType?u.info+1:0):\"form\"==m&&\"{\"==c?u.indented:\"form\"==m?u.indented+i:\"stat\"==m?u.indented+(p=n,\"operator\"==(l=t).lastType||\",\"==l.lastType||d.test(p.charAt(0))||/[,.]/.test(p.charAt(0))?o||i:0):\"switch\"!=u.info||y||0==r.doubleIndentSwitch?u.align?u.column+(y?0:1):u.indented+(y?0:i):u.indented+(/^(?:case|default)\\b/.test(n)?i:2*i)},electricInput:/^\\s*(?:case .*?:|default:|\\{|\\})$/,blockCommentStart:u?null:\"/*\",blockCommentEnd:u?null:\"*/\",blockCommentContinue:u?null:\" * \",lineComment:u?null:\"//\",fold:\"brace\",closeBrackets:\"()[]{}''\\\"\\\"``\",helperType:u?\"json\":\"javascript\",jsonldMode:c,jsonMode:u,expressionAllowed:He,skipExpression:function(e){var t=e.cc[e.cc.length-1];t!=P&&t!=S||e.cc.pop()}}}),e.registerHelper(\"wordChars\",\"javascript\",/[\\w$]/),e.defineMIME(\"text/javascript\",\"javascript\"),e.defineMIME(\"text/ecmascript\",\"javascript\"),e.defineMIME(\"application/javascript\",\"javascript\"),e.defineMIME(\"application/x-javascript\",\"javascript\"),e.defineMIME(\"application/ecmascript\",\"javascript\"),e.defineMIME(\"application/json\",{name:\"javascript\",json:!0}),e.defineMIME(\"application/x-json\",{name:\"javascript\",json:!0}),e.defineMIME(\"application/ld+json\",{name:\"javascript\",jsonld:!0}),e.defineMIME(\"text/typescript\",{name:\"javascript\",typescript:!0}),e.defineMIME(\"application/typescript\",{name:\"javascript\",typescript:!0})});\n",
"type": "application/javascript",
"title": "$:/plugins/tiddlywiki/codemirror/mode/javascript/javascript.js",
"module-type": "codemirror"
},
"$:/plugins/tiddlywiki/codemirror-mode-javascript/readme": {
"title": "$:/plugins/tiddlywiki/codemirror-mode-javascript/readme",
"text": "This plugin adds Syntax Highlighting for Javascript tiddlers (application/javascript) to the [[CodeMirror|http://codemirror.net]] text editor. It needs the latest [[CodeMirror plugin|$:/plugins/tiddlywiki/codemirror]] to be installed\n\n"
}
}
}
{
"tiddlers": {
"$:/plugins/tiddlywiki/codemirror/mode/markdown/markdown.js": {
"text": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n!function(t){\"object\"==typeof exports&&\"object\"==typeof module?t(require(\"../../lib/codemirror\"),require(\"../xml/xml\"),require(\"../tw-meta\")):\"function\"==typeof define&&define.amd?define([\"../../lib/codemirror\",\"../xml/xml\",\"../meta\"],t):t(CodeMirror)}(function(t){\"use strict\";t.defineMode(\"markdown\",function(e,i){var n=t.getMode(e,\"text/html\"),r=\"null\"==n.name;void 0===i.highlightFormatting&&(i.highlightFormatting=!1),void 0===i.maxBlockquoteDepth&&(i.maxBlockquoteDepth=0),void 0===i.taskLists&&(i.taskLists=!1),void 0===i.strikethrough&&(i.strikethrough=!1),void 0===i.emoji&&(i.emoji=!1),void 0===i.fencedCodeBlockHighlighting&&(i.fencedCodeBlockHighlighting=!0),void 0===i.xml&&(i.xml=!0),void 0===i.tokenTypeOverrides&&(i.tokenTypeOverrides={});var a={header:\"header\",code:\"comment\",quote:\"quote\",list1:\"variable-2\",list2:\"variable-3\",list3:\"keyword\",hr:\"hr\",image:\"image\",imageAltText:\"image-alt-text\",imageMarker:\"image-marker\",formatting:\"formatting\",linkInline:\"link\",linkEmail:\"link\",linkText:\"link\",linkHref:\"string\",em:\"em\",strong:\"strong\",strikethrough:\"strikethrough\",emoji:\"builtin\"};for(var l in a)a.hasOwnProperty(l)&&i.tokenTypeOverrides[l]&&(a[l]=i.tokenTypeOverrides[l]);var o=/^([*\\-_])(?:\\s*\\1){2,}\\s*$/,h=/^(?:[*\\-+]|^[0-9]+([.)]))\\s+/,g=/^\\[(x| )\\](?=\\s)/i,s=i.allowAtxHeaderWithoutSpace?/^(#+)/:/^(#+)(?: |$)/,m=/^ *(?:\\={1,}|-{1,})\\s*$/,u=/^[^#!\\[\\]*_\\\\<>` \"'(~:]+/,f=/^(~~~+|```+)[ \\t]*([\\w+#-]*)[^\\n`]*$/,c=/^\\s*\\[[^\\]]+?\\]:.*$/,d=/[!\\\"#$%&\\'()*+,\\-\\.\\/:;<=>?@\\[\\\\\\]^_`{|}~—]/;function k(t,e,i){return e.f=e.inline=i,i(t,e)}function p(t,e,i){return e.f=e.block=i,i(t,e)}function x(t){return t.linkTitle=!1,t.linkHref=!1,t.linkText=!1,t.em=!1,t.strong=!1,t.strikethrough=!1,t.quote=0,t.indentedCode=!1,t.f==S&&(t.f=M,t.block=v),t.trailingSpace=0,t.trailingSpaceNewLine=!1,t.prevLine=t.thisLine,t.thisLine={stream:null},null}function v(n,r){var l,u=n.column()===r.indentation,d=!(l=r.prevLine.stream)||!/\\S/.test(l.string),p=r.indentedCode,x=r.prevLine.hr,v=!1!==r.list,S=(r.listStack[r.listStack.length-1]||0)+3;r.indentedCode=!1;var q=r.indentation;if(null===r.indentationDiff&&(r.indentationDiff=r.indentation,v)){for(r.em=!1,r.strong=!1,r.code=!1,r.strikethrough=!1,r.list=null;q<r.listStack[r.listStack.length-1];)r.listStack.pop(),r.listStack.length?r.indentation=r.listStack[r.listStack.length-1]:r.list=!1;!1!==r.list&&(r.indentationDiff=q-r.listStack[r.listStack.length-1])}var M=!(d||x||r.prevLine.header||v&&p||r.prevLine.fencedCodeEnd),F=(!1===r.list||x||d)&&r.indentation<=S&&n.match(o),b=null;if(r.indentationDiff>=4&&(p||r.prevLine.fencedCodeEnd||r.prevLine.header||d))return n.skipToEnd(),r.indentedCode=!0,a.code;if(n.eatSpace())return null;if(u&&r.indentation<=S&&(b=n.match(s))&&b[1].length<=6)return r.quote=0,r.header=b[1].length,r.thisLine.header=!0,i.highlightFormatting&&(r.formatting=\"header\"),r.f=r.inline,T(r);if(r.indentation<=S&&n.eat(\">\"))return r.quote=u?1:r.quote+1,i.highlightFormatting&&(r.formatting=\"quote\"),n.eatSpace(),T(r);if(!F&&!r.setext&&u&&r.indentation<=S&&(b=n.match(h))){var E=b[1]?\"ol\":\"ul\";return r.indentation=q+n.current().length,r.list=!0,r.quote=0,r.listStack.push(r.indentation),i.taskLists&&n.match(g,!1)&&(r.taskList=!0),r.f=r.inline,i.highlightFormatting&&(r.formatting=[\"list\",\"list-\"+E]),T(r)}return u&&r.indentation<=S&&(b=n.match(f,!0))?(r.quote=0,r.fencedEndRE=new RegExp(b[1]+\"+ *$\"),r.localMode=i.fencedCodeBlockHighlighting&&function(i){if(t.findModeByName){var n=t.findModeByName(i);n&&(i=n.mime||n.mimes[0])}var r=t.getMode(e,i);return\"null\"==r.name?null:r}(b[2]),r.localMode&&(r.localState=t.startState(r.localMode)),r.f=r.block=L,i.highlightFormatting&&(r.formatting=\"code-block\"),r.code=-1,T(r)):r.setext||!(M&&v||r.quote||!1!==r.list||r.code||F||c.test(n.string))&&(b=n.lookAhead(1))&&(b=b.match(m))?(r.setext?(r.header=r.setext,r.setext=0,n.skipToEnd(),i.highlightFormatting&&(r.formatting=\"header\")):(r.header=\"=\"==b[0].charAt(0)?1:2,r.setext=r.header),r.thisLine.header=!0,r.f=r.inline,T(r)):F?(n.skipToEnd(),r.hr=!0,r.thisLine.hr=!0,a.hr):\"[\"===n.peek()?k(n,r,w):k(n,r,r.inline)}function S(e,i){var a=n.token(e,i.htmlState);if(!r){var l=t.innerMode(n,i.htmlState);(\"xml\"==l.mode.name&&null===l.state.tagStart&&!l.state.context&&l.state.tokenize.isInText||i.md_inside&&e.current().indexOf(\">\")>-1)&&(i.f=M,i.block=v,i.htmlState=null)}return a}function L(t,e){var n,r=e.listStack[e.listStack.length-1]||0,l=e.indentation<r,o=r+3;return e.fencedEndRE&&e.indentation<=o&&(l||t.match(e.fencedEndRE))?(i.highlightFormatting&&(e.formatting=\"code-block\"),l||(n=T(e)),e.localMode=e.localState=null,e.block=v,e.f=M,e.fencedEndRE=null,e.code=0,e.thisLine.fencedCodeEnd=!0,l?p(t,e,e.block):n):e.localMode?e.localMode.token(t,e.localState):(t.skipToEnd(),a.code)}function T(t){var e=[];if(t.formatting){e.push(a.formatting),\"string\"==typeof t.formatting&&(t.formatting=[t.formatting]);for(var n=0;n<t.formatting.length;n++)e.push(a.formatting+\"-\"+t.formatting[n]),\"header\"===t.formatting[n]&&e.push(a.formatting+\"-\"+t.formatting[n]+\"-\"+t.header),\"quote\"===t.formatting[n]&&(!i.maxBlockquoteDepth||i.maxBlockquoteDepth>=t.quote?e.push(a.formatting+\"-\"+t.formatting[n]+\"-\"+t.quote):e.push(\"error\"))}if(t.taskOpen)return e.push(\"meta\"),e.length?e.join(\" \"):null;if(t.taskClosed)return e.push(\"property\"),e.length?e.join(\" \"):null;if(t.linkHref?e.push(a.linkHref,\"url\"):(t.strong&&e.push(a.strong),t.em&&e.push(a.em),t.strikethrough&&e.push(a.strikethrough),t.emoji&&e.push(a.emoji),t.linkText&&e.push(a.linkText),t.code&&e.push(a.code),t.image&&e.push(a.image),t.imageAltText&&e.push(a.imageAltText,\"link\"),t.imageMarker&&e.push(a.imageMarker)),t.header&&e.push(a.header,a.header+\"-\"+t.header),t.quote&&(e.push(a.quote),!i.maxBlockquoteDepth||i.maxBlockquoteDepth>=t.quote?e.push(a.quote+\"-\"+t.quote):e.push(a.quote+\"-\"+i.maxBlockquoteDepth)),!1!==t.list){var r=(t.listStack.length-1)%3;r?1===r?e.push(a.list2):e.push(a.list3):e.push(a.list1)}return t.trailingSpaceNewLine?e.push(\"trailing-space-new-line\"):t.trailingSpace&&e.push(\"trailing-space-\"+(t.trailingSpace%2?\"a\":\"b\")),e.length?e.join(\" \"):null}function q(t,e){if(t.match(u,!0))return T(e)}function M(e,r){var l=r.text(e,r);if(void 0!==l)return l;if(r.list)return r.list=null,T(r);if(r.taskList)return\" \"===e.match(g,!0)[1]?r.taskOpen=!0:r.taskClosed=!0,i.highlightFormatting&&(r.formatting=\"task\"),r.taskList=!1,T(r);if(r.taskOpen=!1,r.taskClosed=!1,r.header&&e.match(/^#+$/,!0))return i.highlightFormatting&&(r.formatting=\"header\"),T(r);var o=e.next();if(r.linkTitle){r.linkTitle=!1;var h=o;\"(\"===o&&(h=\")\");var s=\"^\\\\s*(?:[^\"+(h=(h+\"\").replace(/([.?*+^\\[\\]\\\\(){}|-])/g,\"\\\\$1\"))+\"\\\\\\\\]+|\\\\\\\\\\\\\\\\|\\\\\\\\.)\"+h;if(e.match(new RegExp(s),!0))return a.linkHref}if(\"`\"===o){var m=r.formatting;i.highlightFormatting&&(r.formatting=\"code\"),e.eatWhile(\"`\");var u=e.current().length;if(0!=r.code||r.quote&&1!=u){if(u==r.code){var f=T(r);return r.code=0,f}return r.formatting=m,T(r)}return r.code=u,T(r)}if(r.code)return T(r);if(\"\\\\\"===o&&(e.next(),i.highlightFormatting)){var c=T(r),k=a.formatting+\"-escape\";return c?c+\" \"+k:k}if(\"!\"===o&&e.match(/\\[[^\\]]*\\] ?(?:\\(|\\[)/,!1))return r.imageMarker=!0,r.image=!0,i.highlightFormatting&&(r.formatting=\"image\"),T(r);if(\"[\"===o&&r.imageMarker&&e.match(/[^\\]]*\\](\\(.*?\\)| ?\\[.*?\\])/,!1))return r.imageMarker=!1,r.imageAltText=!0,i.highlightFormatting&&(r.formatting=\"image\"),T(r);if(\"]\"===o&&r.imageAltText){i.highlightFormatting&&(r.formatting=\"image\");var c=T(r);return r.imageAltText=!1,r.image=!1,r.inline=r.f=b,c}if(\"[\"===o&&!r.image)return r.linkText=!0,i.highlightFormatting&&(r.formatting=\"link\"),T(r);if(\"]\"===o&&r.linkText){i.highlightFormatting&&(r.formatting=\"link\");var c=T(r);return r.linkText=!1,r.inline=r.f=e.match(/\\(.*?\\)| ?\\[.*?\\]/,!1)?b:M,c}if(\"<\"===o&&e.match(/^(https?|ftps?):\\/\\/(?:[^\\\\>]|\\\\.)+>/,!1))return r.f=r.inline=F,i.highlightFormatting&&(r.formatting=\"link\"),(c=T(r))?c+=\" \":c=\"\",c+a.linkInline;if(\"<\"===o&&e.match(/^[^> \\\\]+@(?:[^\\\\>]|\\\\.)+>/,!1))return r.f=r.inline=F,i.highlightFormatting&&(r.formatting=\"link\"),(c=T(r))?c+=\" \":c=\"\",c+a.linkEmail;if(i.xml&&\"<\"===o&&e.match(/^(!--|[a-z][a-z0-9-]*(?:\\s+[a-z_:.\\-]+(?:\\s*=\\s*[^>]+)?)*\\s*>)/i,!1)){var x=e.string.indexOf(\">\",e.pos);if(-1!=x){var v=e.string.substring(e.start,x);/markdown\\s*=\\s*('|\"){0,1}1('|\"){0,1}/.test(v)&&(r.md_inside=!0)}return e.backUp(1),r.htmlState=t.startState(n),p(e,r,S)}if(i.xml&&\"<\"===o&&e.match(/^\\/\\w*?>/))return r.md_inside=!1,\"tag\";if(\"*\"===o||\"_\"===o){for(var L=1,q=1==e.pos?\" \":e.string.charAt(e.pos-2);L<3&&e.eat(o);)L++;var E=e.peek()||\" \",w=!/\\s/.test(E)&&(!d.test(E)||/\\s/.test(q)||d.test(q)),j=!/\\s/.test(q)&&(!d.test(q)||/\\s/.test(E)||d.test(E)),y=null,C=null;if(L%2&&(r.em||!w||\"*\"!==o&&j&&!d.test(q)?r.em!=o||!j||\"*\"!==o&&w&&!d.test(E)||(y=!1):y=!0),L>1&&(r.strong||!w||\"*\"!==o&&j&&!d.test(q)?r.strong!=o||!j||\"*\"!==o&&w&&!d.test(E)||(C=!1):C=!0),null!=C||null!=y){i.highlightFormatting&&(r.formatting=null==y?\"strong\":null==C?\"em\":\"strong em\"),!0===y&&(r.em=o),!0===C&&(r.strong=o);f=T(r);return!1===y&&(r.em=!1),!1===C&&(r.strong=!1),f}}else if(\" \"===o&&(e.eat(\"*\")||e.eat(\"_\"))){if(\" \"===e.peek())return T(r);e.backUp(1)}if(i.strikethrough)if(\"~\"===o&&e.eatWhile(o)){if(r.strikethrough){i.highlightFormatting&&(r.formatting=\"strikethrough\");f=T(r);return r.strikethrough=!1,f}if(e.match(/^[^\\s]/,!1))return r.strikethrough=!0,i.highlightFormatting&&(r.formatting=\"strikethrough\"),T(r)}else if(\" \"===o&&e.match(/^~~/,!0)){if(\" \"===e.peek())return T(r);e.backUp(2)}if(i.emoji&&\":\"===o&&e.match(/^[a-z_\\d+-]+:/)){r.emoji=!0,i.highlightFormatting&&(r.formatting=\"emoji\");var H=T(r);return r.emoji=!1,H}return\" \"===o&&(e.match(/ +$/,!1)?r.trailingSpace++:r.trailingSpace&&(r.trailingSpaceNewLine=!0)),T(r)}function F(t,e){if(\">\"===t.next()){e.f=e.inline=M,i.highlightFormatting&&(e.formatting=\"link\");var n=T(e);return n?n+=\" \":n=\"\",n+a.linkInline}return t.match(/^[^>]+/,!0),a.linkInline}function b(t,e){if(t.eatSpace())return null;var n,r=t.next();return\"(\"===r||\"[\"===r?(e.f=e.inline=(n=\"(\"===r?\")\":\"]\",function(t,e){var r=t.next();if(r===n){e.f=e.inline=M,i.highlightFormatting&&(e.formatting=\"link-string\");var a=T(e);return e.linkHref=!1,a}return t.match(E[n]),e.linkHref=!0,T(e)}),i.highlightFormatting&&(e.formatting=\"link-string\"),e.linkHref=!0,T(e)):\"error\"}var E={\")\":/^(?:[^\\\\\\(\\)]|\\\\.|\\((?:[^\\\\\\(\\)]|\\\\.)*\\))*?(?=\\))/,\"]\":/^(?:[^\\\\\\[\\]]|\\\\.|\\[(?:[^\\\\\\[\\]]|\\\\.)*\\])*?(?=\\])/};function w(t,e){return t.match(/^([^\\]\\\\]|\\\\.)*\\]:/,!1)?(e.f=j,t.next(),i.highlightFormatting&&(e.formatting=\"link\"),e.linkText=!0,T(e)):k(t,e,M)}function j(t,e){if(t.match(/^\\]:/,!0)){e.f=e.inline=y,i.highlightFormatting&&(e.formatting=\"link\");var n=T(e);return e.linkText=!1,n}return t.match(/^([^\\]\\\\]|\\\\.)+/,!0),a.linkText}function y(t,e){return t.eatSpace()?null:(t.match(/^[^\\s]+/,!0),void 0===t.peek()?e.linkTitle=!0:t.match(/^(?:\\s+(?:\"(?:[^\"\\\\]|\\\\\\\\|\\\\.)+\"|'(?:[^'\\\\]|\\\\\\\\|\\\\.)+'|\\((?:[^)\\\\]|\\\\\\\\|\\\\.)+\\)))?/,!0),e.f=e.inline=M,a.linkHref+\" url\")}var C={startState:function(){return{f:v,prevLine:{stream:null},thisLine:{stream:null},block:v,htmlState:null,indentation:0,inline:M,text:q,formatting:!1,linkText:!1,linkHref:!1,linkTitle:!1,code:0,em:!1,strong:!1,header:0,setext:0,hr:!1,taskList:!1,list:!1,listStack:[],quote:0,trailingSpace:0,trailingSpaceNewLine:!1,strikethrough:!1,emoji:!1,fencedEndRE:null}},copyState:function(e){return{f:e.f,prevLine:e.prevLine,thisLine:e.thisLine,block:e.block,htmlState:e.htmlState&&t.copyState(n,e.htmlState),indentation:e.indentation,localMode:e.localMode,localState:e.localMode?t.copyState(e.localMode,e.localState):null,inline:e.inline,text:e.text,formatting:!1,linkText:e.linkText,linkTitle:e.linkTitle,linkHref:e.linkHref,code:e.code,em:e.em,strong:e.strong,strikethrough:e.strikethrough,emoji:e.emoji,header:e.header,setext:e.setext,hr:e.hr,taskList:e.taskList,list:e.list,listStack:e.listStack.slice(0),quote:e.quote,indentedCode:e.indentedCode,trailingSpace:e.trailingSpace,trailingSpaceNewLine:e.trailingSpaceNewLine,md_inside:e.md_inside,fencedEndRE:e.fencedEndRE}},token:function(t,e){if(e.formatting=!1,t!=e.thisLine.stream){if(e.header=0,e.hr=!1,t.match(/^\\s*$/,!0))return x(e),null;if(e.prevLine=e.thisLine,e.thisLine={stream:t},e.taskList=!1,e.trailingSpace=0,e.trailingSpaceNewLine=!1,!e.localState&&(e.f=e.block,e.f!=S)){var i=t.match(/^\\s*/,!0)[0].replace(/\\t/g,\" \").length;if(e.indentation=i,e.indentationDiff=null,i>0)return null}}return e.f(t,e)},innerMode:function(t){return t.block==S?{state:t.htmlState,mode:n}:t.localState?{state:t.localState,mode:t.localMode}:{state:t,mode:C}},indent:function(e,i,r){return e.block==S&&n.indent?n.indent(e.htmlState,i,r):e.localState&&e.localMode.indent?e.localMode.indent(e.localState,i,r):t.Pass},blankLine:x,getType:T,closeBrackets:\"()[]{}''\\\"\\\"``\",fold:\"markdown\"};return C},\"xml\"),t.defineMIME(\"text/markdown\",\"markdown\"),t.defineMIME(\"text/x-markdown\",\"markdown\")});\n",
"type": "application/javascript",
"title": "$:/plugins/tiddlywiki/codemirror/mode/markdown/markdown.js",
"module-type": "codemirror"
},
"$:/plugins/tiddlywiki/codemirror-mode-markdown/readme": {
"title": "$:/plugins/tiddlywiki/codemirror-mode-markdown/readme",
"text": "This plugin adds Syntax Highlighting for Markdown tiddlers (text/x-markdown) to the [[CodeMirror|http://codemirror.net]] text editor. It needs the latest [[CodeMirror plugin|$:/plugins/tiddlywiki/codemirror]] to be installed\n\n"
}
}
}
{
"tiddlers": {
"$:/plugins/tiddlywiki/codemirror/mode/xml/xml.js": {
"text": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n!function(t){\"object\"==typeof exports&&\"object\"==typeof module?t(require(\"../../lib/codemirror\")):\"function\"==typeof define&&define.amd?define([\"../../lib/codemirror\"],t):t(CodeMirror)}(function(t){\"use strict\";var e={autoSelfClosers:{area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0,menuitem:!0},implicitlyClosed:{dd:!0,li:!0,optgroup:!0,option:!0,p:!0,rp:!0,rt:!0,tbody:!0,td:!0,tfoot:!0,th:!0,tr:!0},contextGrabbers:{dd:{dd:!0,dt:!0},dt:{dd:!0,dt:!0},li:{li:!0},option:{option:!0,optgroup:!0},optgroup:{optgroup:!0},p:{address:!0,article:!0,aside:!0,blockquote:!0,dir:!0,div:!0,dl:!0,fieldset:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,menu:!0,nav:!0,ol:!0,p:!0,pre:!0,section:!0,table:!0,ul:!0},rp:{rp:!0,rt:!0},rt:{rp:!0,rt:!0},tbody:{tbody:!0,tfoot:!0},td:{td:!0,th:!0},tfoot:{tbody:!0},th:{td:!0,th:!0},thead:{tbody:!0,tfoot:!0},tr:{tr:!0}},doNotIndent:{pre:!0},allowUnquoted:!0,allowMissing:!0,caseFold:!0},n={autoSelfClosers:{},implicitlyClosed:{},contextGrabbers:{},doNotIndent:{},allowUnquoted:!1,allowMissing:!1,allowMissingTagName:!1,caseFold:!1};t.defineMode(\"xml\",function(r,o){var a,i,l=r.indentUnit,u={},d=o.htmlMode?e:n;for(var c in d)u[c]=d[c];for(var c in o)u[c]=o[c];function s(t,e){function n(n){return e.tokenize=n,n(t,e)}var r=t.next();return\"<\"==r?t.eat(\"!\")?t.eat(\"[\")?t.match(\"CDATA[\")?n(m(\"atom\",\"]]>\")):null:t.match(\"--\")?n(m(\"comment\",\"--\\x3e\")):t.match(\"DOCTYPE\",!0,!0)?(t.eatWhile(/[\\w\\._\\-]/),n(function t(e){return function(n,r){for(var o;null!=(o=n.next());){if(\"<\"==o)return r.tokenize=t(e+1),r.tokenize(n,r);if(\">\"==o){if(1==e){r.tokenize=s;break}return r.tokenize=t(e-1),r.tokenize(n,r)}}return\"meta\"}}(1))):null:t.eat(\"?\")?(t.eatWhile(/[\\w\\._\\-]/),e.tokenize=m(\"meta\",\"?>\"),\"meta\"):(a=t.eat(\"/\")?\"closeTag\":\"openTag\",e.tokenize=f,\"tag bracket\"):\"&\"==r?(t.eat(\"#\")?t.eat(\"x\")?t.eatWhile(/[a-fA-F\\d]/)&&t.eat(\";\"):t.eatWhile(/[\\d]/)&&t.eat(\";\"):t.eatWhile(/[\\w\\.\\-:]/)&&t.eat(\";\"))?\"atom\":\"error\":(t.eatWhile(/[^&<]/),null)}function f(t,e){var n,r,o=t.next();if(\">\"==o||\"/\"==o&&t.eat(\">\"))return e.tokenize=s,a=\">\"==o?\"endTag\":\"selfcloseTag\",\"tag bracket\";if(\"=\"==o)return a=\"equals\",null;if(\"<\"==o){e.tokenize=s,e.state=h,e.tagName=e.tagStart=null;var i=e.tokenize(t,e);return i?i+\" tag error\":\"tag error\"}return/[\\'\\\"]/.test(o)?(e.tokenize=(n=o,(r=function(t,e){for(;!t.eol();)if(t.next()==n){e.tokenize=f;break}return\"string\"}).isInAttribute=!0,r),e.stringStartCol=t.column(),e.tokenize(t,e)):(t.match(/^[^\\s\\u00a0=<>\\\"\\']*[^\\s\\u00a0=<>\\\"\\'\\/]/),\"word\")}function m(t,e){return function(n,r){for(;!n.eol();){if(n.match(e)){r.tokenize=s;break}n.next()}return t}}function g(t){t.context&&(t.context=t.context.prev)}function p(t,e){for(var n;;){if(!t.context)return;if(n=t.context.tagName,!u.contextGrabbers.hasOwnProperty(n)||!u.contextGrabbers[n].hasOwnProperty(e))return;g(t)}}function h(t,e,n){return\"openTag\"==t?(n.tagStart=e.column(),x):\"closeTag\"==t?b:h}function x(t,e,n){return\"word\"==t?(n.tagName=e.current(),i=\"tag\",v):u.allowMissingTagName&&\"endTag\"==t?(i=\"tag bracket\",v(t,e,n)):(i=\"error\",x)}function b(t,e,n){if(\"word\"==t){var r=e.current();return n.context&&n.context.tagName!=r&&u.implicitlyClosed.hasOwnProperty(n.context.tagName)&&g(n),n.context&&n.context.tagName==r||!1===u.matchClosing?(i=\"tag\",k):(i=\"tag error\",w)}return u.allowMissingTagName&&\"endTag\"==t?(i=\"tag bracket\",k(t,e,n)):(i=\"error\",w)}function k(t,e,n){return\"endTag\"!=t?(i=\"error\",k):(g(n),h)}function w(t,e,n){return i=\"error\",k(t,0,n)}function v(t,e,n){if(\"word\"==t)return i=\"attribute\",T;if(\"endTag\"==t||\"selfcloseTag\"==t){var r=n.tagName,o=n.tagStart;return n.tagName=n.tagStart=null,\"selfcloseTag\"==t||u.autoSelfClosers.hasOwnProperty(r)?p(n,r):(p(n,r),n.context=new function(t,e,n){this.prev=t.context,this.tagName=e,this.indent=t.indented,this.startOfLine=n,(u.doNotIndent.hasOwnProperty(e)||t.context&&t.context.noIndent)&&(this.noIndent=!0)}(n,r,o==n.indented)),h}return i=\"error\",v}function T(t,e,n){return\"equals\"==t?y:(u.allowMissing||(i=\"error\"),v(t,0,n))}function y(t,e,n){return\"string\"==t?N:\"word\"==t&&u.allowUnquoted?(i=\"string\",v):(i=\"error\",v(t,0,n))}function N(t,e,n){return\"string\"==t?N:v(t,0,n)}return s.isInText=!0,{startState:function(t){var e={tokenize:s,state:h,indented:t||0,tagName:null,tagStart:null,context:null};return null!=t&&(e.baseIndent=t),e},token:function(t,e){if(!e.tagName&&t.sol()&&(e.indented=t.indentation()),t.eatSpace())return null;a=null;var n=e.tokenize(t,e);return(n||a)&&\"comment\"!=n&&(i=null,e.state=e.state(a||n,t,e),i&&(n=\"error\"==i?n+\" error\":i)),n},indent:function(e,n,r){var o=e.context;if(e.tokenize.isInAttribute)return e.tagStart==e.indented?e.stringStartCol+1:e.indented+l;if(o&&o.noIndent)return t.Pass;if(e.tokenize!=f&&e.tokenize!=s)return r?r.match(/^(\\s*)/)[0].length:0;if(e.tagName)return!1!==u.multilineTagIndentPastTag?e.tagStart+e.tagName.length+2:e.tagStart+l*(u.multilineTagIndentFactor||1);if(u.alignCDATA&&/<!\\[CDATA\\[/.test(n))return 0;var a=n&&/^<(\\/)?([\\w_:\\.-]*)/.exec(n);if(a&&a[1])for(;o;){if(o.tagName==a[2]){o=o.prev;break}if(!u.implicitlyClosed.hasOwnProperty(o.tagName))break;o=o.prev}else if(a)for(;o;){var i=u.contextGrabbers[o.tagName];if(!i||!i.hasOwnProperty(a[2]))break;o=o.prev}for(;o&&o.prev&&!o.startOfLine;)o=o.prev;return o?o.indent+l:e.baseIndent||0},electricInput:/<\\/[\\s\\w:]+>$/,blockCommentStart:\"\\x3c!--\",blockCommentEnd:\"--\\x3e\",configuration:u.htmlMode?\"html\":\"xml\",helperType:u.htmlMode?\"html\":\"xml\",skipAttribute:function(t){t.state==y&&(t.state=v)}}}),t.defineMIME(\"text/xml\",\"xml\"),t.defineMIME(\"application/xml\",\"xml\"),t.mimeModes.hasOwnProperty(\"text/html\")||t.defineMIME(\"text/html\",{name:\"xml\",htmlMode:!0})});",
"type": "application/javascript",
"title": "$:/plugins/tiddlywiki/codemirror/mode/xml/xml.js",
"module-type": "codemirror"
},
"$:/plugins/tiddlywiki/codemirror-mode-xml/readme": {
"title": "$:/plugins/tiddlywiki/codemirror-mode-xml/readme",
"text": "This plugin is a requirement for other Syntax-highlighting plugins and adds Highlighting for XML tiddlers (application/xml) to the [[CodeMirror|http://codemirror.net]] text editor. It needs the latest [[CodeMirror plugin|$:/plugins/tiddlywiki/codemirror]] to be installed\n\n"
}
}
}
{
"tiddlers": {
"$:/plugins/tiddlywiki/codemirror/addon/search/search.js": {
"text": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n!function(e){\"object\"==typeof exports&&\"object\"==typeof module?e(require(\"../../lib/codemirror\"),require(\"./searchcursor\"),require(\"../dialog/dialog\")):\"function\"==typeof define&&define.amd?define([\"../../lib/codemirror\",\"./searchcursor\",\"../dialog/dialog\"],e):e(CodeMirror)}(function(e){\"use strict\";function o(e){return e.state.search||(e.state.search=new function(){this.posFrom=this.posTo=this.lastQuery=this.query=null,this.overlay=null})}function n(e){return\"string\"==typeof e&&e==e.toLowerCase()}function r(e,o,r){return e.getSearchCursor(o,r,{caseFold:n(o),multiline:!0})}function t(e,o,n,r,t){e.openDialog?e.openDialog(o,t,{value:r,selectValueOnOpen:!0}):t(prompt(n,r))}function i(e){return e.replace(/\\\\(.)/g,function(e,o){return\"n\"==o?\"\\n\":\"r\"==o?\"\\r\":o})}function a(e){var o=e.match(/^\\/(.*)\\/([a-z]*)$/);if(o)try{e=new RegExp(o[1],-1==o[2].indexOf(\"i\")?\"\":\"i\")}catch(e){}else e=i(e);return(\"string\"==typeof e?\"\"==e:e.test(\"\"))&&(e=/x^/),e}var s='<span class=\"CodeMirror-search-label\">Search:</span> <input type=\"text\" style=\"width: 10em\" class=\"CodeMirror-search-field\"/> <span style=\"color: #888\" class=\"CodeMirror-search-hint\">(Use /re/ syntax for regexp search)</span>';function c(e,o,r){var t,i;o.queryText=r,o.query=a(r),e.removeOverlay(o.overlay,n(o.query)),o.overlay=(t=o.query,i=n(o.query),\"string\"==typeof t?t=new RegExp(t.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g,\"\\\\$&\"),i?\"gi\":\"g\"):t.global||(t=new RegExp(t.source,t.ignoreCase?\"gi\":\"g\")),{token:function(e){t.lastIndex=e.pos;var o=t.exec(e.string);if(o&&o.index==e.pos)return e.pos+=o[0].length||1,\"searching\";o?e.pos=o.index:e.skipToEnd()}}),e.addOverlay(o.overlay),e.showMatchesOnScrollbar&&(o.annotate&&(o.annotate.clear(),o.annotate=null),o.annotate=e.showMatchesOnScrollbar(o.query,n(o.query)))}function l(n,r,i,a){var l=o(n);if(l.query)return u(n,r);var p,d,y,m,g,h=n.getSelection()||l.lastQuery;if(h instanceof RegExp&&\"x^\"==h.source&&(h=null),i&&n.openDialog){var v=null,x=function(o,r){e.e_stop(r),o&&(o!=l.queryText&&(c(n,l,o),l.posFrom=l.posTo=n.getCursor()),v&&(v.style.opacity=1),u(n,r.shiftKey,function(e,o){var r;o.line<3&&document.querySelector&&(r=n.display.wrapper.querySelector(\".CodeMirror-dialog\"))&&r.getBoundingClientRect().bottom-4>n.cursorCoords(o,\"window\").top&&((v=r).style.opacity=.4)}))};d=s,y=h,m=x,g=function(r,t){var i=e.keyName(r),a=n.getOption(\"extraKeys\"),s=a&&a[i]||e.keyMap[n.getOption(\"keyMap\")][i];\"findNext\"==s||\"findPrev\"==s||\"findPersistentNext\"==s||\"findPersistentPrev\"==s?(e.e_stop(r),c(n,o(n),t),n.execCommand(s)):\"find\"!=s&&\"findPersistent\"!=s||(e.e_stop(r),x(t,r))},(p=n).openDialog(d,m,{value:y,selectValueOnOpen:!0,closeOnEnter:!1,onClose:function(){f(p)},onKeyDown:g}),a&&h&&(c(n,l,h),u(n,r))}else t(n,s,\"Search for:\",h,function(e){e&&!l.query&&n.operation(function(){c(n,l,e),l.posFrom=l.posTo=n.getCursor(),u(n,r)})})}function u(n,t,i){n.operation(function(){var a=o(n),s=r(n,a.query,t?a.posFrom:a.posTo);(s.find(t)||(s=r(n,a.query,t?e.Pos(n.lastLine()):e.Pos(n.firstLine(),0))).find(t))&&(n.setSelection(s.from(),s.to()),n.scrollIntoView({from:s.from(),to:s.to()},20),a.posFrom=s.from(),a.posTo=s.to(),i&&i(s.from(),s.to()))})}function f(e){e.operation(function(){var n=o(e);n.lastQuery=n.query,n.query&&(n.query=n.queryText=null,e.removeOverlay(n.overlay),n.annotate&&(n.annotate.clear(),n.annotate=null))})}var p=' <input type=\"text\" style=\"width: 10em\" class=\"CodeMirror-search-field\"/> <span style=\"color: #888\" class=\"CodeMirror-search-hint\">(Use /re/ syntax for regexp search)</span>',d='<span class=\"CodeMirror-search-label\">With:</span> <input type=\"text\" style=\"width: 10em\" class=\"CodeMirror-search-field\"/>',y='<span class=\"CodeMirror-search-label\">Replace?</span> <button>Yes</button> <button>No</button> <button>All</button> <button>Stop</button>';function m(e,o,n){e.operation(function(){for(var t=r(e,o);t.findNext();)if(\"string\"!=typeof o){var i=e.getRange(t.from(),t.to()).match(o);t.replace(n.replace(/\\$(\\d)/g,function(e,o){return i[o]}))}else t.replace(n)})}function g(e,n){if(!e.getOption(\"readOnly\")){var s=e.getSelection()||o(e).lastQuery,c='<span class=\"CodeMirror-search-label\">'+(n?\"Replace all:\":\"Replace:\")+\"</span>\";t(e,c+p,c,s,function(o){o&&(o=a(o),t(e,d,\"Replace with:\",\"\",function(t){if(t=i(t),n)m(e,o,t);else{f(e);var a=r(e,o,e.getCursor(\"from\")),s=function(){var n,i,l,u,f,p=a.from();!(n=a.findNext())&&(a=r(e,o),!(n=a.findNext())||p&&a.from().line==p.line&&a.from().ch==p.ch)||(e.setSelection(a.from(),a.to()),e.scrollIntoView({from:a.from(),to:a.to()}),l=y,u=\"Replace?\",f=[function(){c(n)},s,function(){m(e,o,t)}],(i=e).openConfirm?i.openConfirm(l,f):confirm(u)&&f[0]())},c=function(e){a.replace(\"string\"==typeof o?t:t.replace(/\\$(\\d)/g,function(o,n){return e[n]})),s()};s()}}))})}}e.commands.find=function(e){f(e),l(e)},e.commands.findPersistent=function(e){f(e),l(e,!1,!0)},e.commands.findPersistentNext=function(e){l(e,!1,!0,!0)},e.commands.findPersistentPrev=function(e){l(e,!0,!0,!0)},e.commands.findNext=l,e.commands.findPrev=function(e){l(e,!0)},e.commands.clearSearch=f,e.commands.replace=g,e.commands.replaceAll=function(e){g(e,!0)}});",
"type": "application/javascript",
"title": "$:/plugins/tiddlywiki/codemirror/addon/search/search.js",
"module-type": "codemirror"
},
"$:/plugins/tiddlywiki/codemirror/addon/search/jump-to-line.js": {
"text": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n!function(e){\"object\"==typeof exports&&\"object\"==typeof module?e(require(\"../../lib/codemirror\"),require(\"../dialog/dialog\")):\"function\"==typeof define&&define.amd?define([\"../../lib/codemirror\",\"../dialog/dialog\"],e):e(CodeMirror)}(function(e){\"use strict\";function o(e,o){var r=Number(o);return/^[-+]/.test(o)?e.getCursor().line+r:r-1}e.commands.jumpToLine=function(e){var r,i,t,s,n,l=e.getCursor();r=e,i='Jump to line: <input type=\"text\" style=\"width: 10em\" class=\"CodeMirror-search-field\"/> <span style=\"color: #888\" class=\"CodeMirror-search-hint\">(Use line:column or scroll% syntax)</span>',t=\"Jump to line:\",s=l.line+1+\":\"+l.ch,n=function(r){var i;if(r)if(i=/^\\s*([\\+\\-]?\\d+)\\s*\\:\\s*(\\d+)\\s*$/.exec(r))e.setCursor(o(e,i[1]),Number(i[2]));else if(i=/^\\s*([\\+\\-]?\\d+(\\.\\d+)?)\\%\\s*/.exec(r)){var t=Math.round(e.lineCount()*Number(i[1])/100);/^[-+]/.test(i[1])&&(t=l.line+t+1),e.setCursor(t-1,l.ch)}else(i=/^\\s*\\:?\\s*([\\+\\-]?\\d+)\\s*/.exec(r))&&e.setCursor(o(e,i[1]),l.ch)},r.openDialog?r.openDialog(i,n,{value:s,selectValueOnOpen:!0}):n(prompt(t,s))},e.keyMap.default[\"Alt-G\"]=\"jumpToLine\"});",
"type": "application/javascript",
"title": "$:/plugins/tiddlywiki/codemirror/addon/search/jump-to-line.js",
"module-type": "codemirror"
},
"$:/plugins/tiddlywiki/codemirror/addon/search/searchcursor.js": {
"text": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n!function(t){\"object\"==typeof exports&&\"object\"==typeof module?t(require(\"../../lib/codemirror\")):\"function\"==typeof define&&define.amd?define([\"../../lib/codemirror\"],t):t(CodeMirror)}(function(t){\"use strict\";var e,n,r=t.Pos;function i(t,e){for(var n,r,i=null!=(r=(n=t).flags)?r:(n.ignoreCase?\"i\":\"\")+(n.global?\"g\":\"\")+(n.multiline?\"m\":\"\"),o=i,l=0;l<e.length;l++)-1==o.indexOf(e.charAt(l))&&(o+=e.charAt(l));return i==o?t:new RegExp(t.source,o)}function o(t,e,n){e=i(e,\"g\");for(var o=n.line,l=n.ch,h=t.lastLine();o<=h;o++,l=0){e.lastIndex=l;var s=t.getLine(o),c=e.exec(s);if(c)return{from:r(o,c.index),to:r(o,c.index+c[0].length),match:c}}}function l(t,e){for(var n,r=0;;){e.lastIndex=r;var i=e.exec(t);if(!i)return n;if((r=(n=i).index+(n[0].length||1))==t.length)return n}}function h(t,e,n,r){if(t.length==e.length)return n;for(var i=0,o=n+Math.max(0,t.length-e.length);;){if(i==o)return i;var l=i+o>>1,h=r(t.slice(0,l)).length;if(h==n)return l;h>n?o=l:i=l+1}}function s(t,s,c,f){var u;this.atOccurrence=!1,this.doc=t,c=c?t.clipPos(c):r(0,0),this.pos={from:c,to:c},\"object\"==typeof f?u=f.caseFold:(u=f,f=null),\"string\"==typeof s?(null==u&&(u=!1),this.matches=function(i,o){return(i?function(t,i,o,l){if(!i.length)return null;var s=l?e:n,c=s(i).split(/\\r|\\n\\r?/);t:for(var f=o.line,u=o.ch,a=t.firstLine()-1+c.length;f>=a;f--,u=-1){var g=t.getLine(f);u>-1&&(g=g.slice(0,u));var m=s(g);if(1==c.length){var d=m.lastIndexOf(c[0]);if(-1==d)continue t;return{from:r(f,h(g,m,d,s)),to:r(f,h(g,m,d+c[0].length,s))}}var v=c[c.length-1];if(m.slice(0,v.length)==v){var p=1;for(o=f-c.length+1;p<c.length-1;p++)if(s(t.getLine(o+p))!=c[p])continue t;var x=t.getLine(f+1-c.length),L=s(x);if(L.slice(L.length-c[0].length)==c[0])return{from:r(f+1-c.length,h(x,L,x.length-c[0].length,s)),to:r(f,h(g,m,v.length,s))}}}}:function(t,i,o,l){if(!i.length)return null;var s=l?e:n,c=s(i).split(/\\r|\\n\\r?/);t:for(var f=o.line,u=o.ch,a=t.lastLine()+1-c.length;f<=a;f++,u=0){var g=t.getLine(f).slice(u),m=s(g);if(1==c.length){var d=m.indexOf(c[0]);if(-1==d)continue t;return o=h(g,m,d,s)+u,{from:r(f,h(g,m,d,s)+u),to:r(f,h(g,m,d+c[0].length,s)+u)}}var v=m.length-c[0].length;if(m.slice(v)==c[0]){for(var p=1;p<c.length-1;p++)if(s(t.getLine(f+p))!=c[p])continue t;var x=t.getLine(f+c.length-1),L=s(x),C=c[c.length-1];if(L.slice(0,C.length)==C)return{from:r(f,h(g,m,v,s)+u),to:r(f+c.length-1,h(x,L,C.length,s))}}}})(t,s,o,u)}):(s=i(s,\"gm\"),f&&!1===f.multiline?this.matches=function(e,n){return(e?function(t,e,n){e=i(e,\"g\");for(var o=n.line,h=n.ch,s=t.firstLine();o>=s;o--,h=-1){var c=t.getLine(o);h>-1&&(c=c.slice(0,h));var f=l(c,e);if(f)return{from:r(o,f.index),to:r(o,f.index+f[0].length),match:f}}}:o)(t,s,n)}:this.matches=function(e,n){return(e?function(t,e,n){e=i(e,\"gm\");for(var o,h=1,s=n.line,c=t.firstLine();s>=c;){for(var f=0;f<h;f++){var u=t.getLine(s--);o=null==o?u.slice(0,n.ch):u+\"\\n\"+o}h*=2;var a=l(o,e);if(a){var g=o.slice(0,a.index).split(\"\\n\"),m=a[0].split(\"\\n\"),d=s+g.length,v=g[g.length-1].length;return{from:r(d,v),to:r(d+m.length-1,1==m.length?v+m[0].length:m[m.length-1].length),match:a}}}}:function(t,e,n){if(!/\\\\s|\\\\n|\\n|\\\\W|\\\\D|\\[\\^/.test(e.source))return o(t,e,n);e=i(e,\"gm\");for(var l,h=1,s=n.line,c=t.lastLine();s<=c;){for(var f=0;f<h&&!(s>c);f++){var u=t.getLine(s++);l=null==l?u:l+\"\\n\"+u}h*=2,e.lastIndex=n.ch;var a=e.exec(l);if(a){var g=l.slice(0,a.index).split(\"\\n\"),m=a[0].split(\"\\n\"),d=n.line+g.length-1,v=g[g.length-1].length;return{from:r(d,v),to:r(d+m.length-1,1==m.length?v+m[0].length:m[m.length-1].length),match:a}}}})(t,s,n)})}String.prototype.normalize?(e=function(t){return t.normalize(\"NFD\").toLowerCase()},n=function(t){return t.normalize(\"NFD\")}):(e=function(t){return t.toLowerCase()},n=function(t){return t}),s.prototype={findNext:function(){return this.find(!1)},findPrevious:function(){return this.find(!0)},find:function(e){for(var n=this.matches(e,this.doc.clipPos(e?this.pos.from:this.pos.to));n&&0==t.cmpPos(n.from,n.to);)e?n.from.ch?n.from=r(n.from.line,n.from.ch-1):n=n.from.line==this.doc.firstLine()?null:this.matches(e,this.doc.clipPos(r(n.from.line-1))):n.to.ch<this.doc.getLine(n.to.line).length?n.to=r(n.to.line,n.to.ch+1):n=n.to.line==this.doc.lastLine()?null:this.matches(e,r(n.to.line+1,0));if(n)return this.pos=n,this.atOccurrence=!0,this.pos.match||!0;var i=r(e?this.doc.firstLine():this.doc.lastLine()+1,0);return this.pos={from:i,to:i},this.atOccurrence=!1},from:function(){if(this.atOccurrence)return this.pos.from},to:function(){if(this.atOccurrence)return this.pos.to},replace:function(e,n){if(this.atOccurrence){var i=t.splitLines(e);this.doc.replaceRange(i,this.pos.from,this.pos.to,n),this.pos.to=r(this.pos.from.line+i.length-1,i[i.length-1].length+(1==i.length?this.pos.from.ch:0))}}},t.defineExtension(\"getSearchCursor\",function(t,e,n){return new s(this.doc,t,e,n)}),t.defineDocExtension(\"getSearchCursor\",function(t,e,n){return new s(this,t,e,n)}),t.defineExtension(\"selectMatches\",function(e,n){for(var r=[],i=this.getSearchCursor(e,this.getCursor(\"from\"),n);i.findNext()&&!(t.cmpPos(i.to(),this.getCursor(\"to\"))>0);)r.push({anchor:i.from(),head:i.to()});r.length&&this.setSelections(r,0)})});",
"type": "application/javascript",
"title": "$:/plugins/tiddlywiki/codemirror/addon/search/searchcursor.js",
"module-type": "codemirror"
},
"$:/plugins/tiddlywiki/codemirror-search-replace/readme": {
"title": "$:/plugins/tiddlywiki/codemirror-search-replace/readme",
"text": "This plugin enhances the [[CodeMirror|http://codemirror.net]] text editor with Search and Replace functionality. It needs the latest [[CodeMirror plugin|$:/plugins/tiddlywiki/codemirror]] to be installed\n\nIt adds these Keyboard Shortcuts to ~CodeMirror:\n\n|Shortcut |Function |h\n|Ctrl-F / Cmd-F |Start searching |\n|Ctrl-G / Cmd-G / Shift-F3 |Find next |\n|Shift-Ctrl-G / Shift-Cmd-G / F3 |Find previous |\n|Shift-Ctrl-F / Cmd-Option-F |Replace |\n|Shift-Ctrl-R / Shift-Cmd-Option-F |Replace all |\n|Alt-F |Persistent search (dialog doesn't autoclose, enter to find next, Shift-Enter to find previous) |\n|Alt-G |Jump to line |\n\n"
}
}
}
{
"tiddlers": {
"$:/config/HighlightPlugin/TypeMappings/application/javascript": {
"title": "$:/config/HighlightPlugin/TypeMappings/application/javascript",
"text": "javascript"
},
"$:/config/HighlightPlugin/TypeMappings/application/json": {
"title": "$:/config/HighlightPlugin/TypeMappings/application/json",
"text": "json"
},
"$:/config/HighlightPlugin/TypeMappings/text/css": {
"title": "$:/config/HighlightPlugin/TypeMappings/text/css",
"text": "css"
},
"$:/config/HighlightPlugin/TypeMappings/text/html": {
"title": "$:/config/HighlightPlugin/TypeMappings/text/html",
"text": "html"
},
"$:/config/HighlightPlugin/TypeMappings/image/svg+xml": {
"title": "$:/config/HighlightPlugin/TypeMappings/image/svg+xml",
"text": "xml"
},
"$:/config/HighlightPlugin/TypeMappings/text/x-markdown": {
"title": "$:/config/HighlightPlugin/TypeMappings/text/x-markdown",
"text": "markdown"
},
"$:/plugins/tiddlywiki/highlight/highlight.js": {
"text": "var hljs = require(\"$:/plugins/tiddlywiki/highlight/highlight.js\");\n/*! highlight.js v9.18.1 | BSD3 License | git.io/hljslicense */\n!function(e){var n=\"object\"==typeof window&&window||\"object\"==typeof self&&self;\"undefined\"==typeof exports||exports.nodeType?n&&(n.hljs=e({}),\"function\"==typeof define&&define.amd&&define([],function(){return n.hljs})):e(exports)}(function(a){var f=[],i=Object.keys,_={},c={},C=!0,n=/^(no-?highlight|plain|text)$/i,l=/\\blang(?:uage)?-([\\w-]+)\\b/i,t=/((^(<[^>]+>|\\t|)+|(?:\\n)))/gm,r={case_insensitive:\"cI\",lexemes:\"l\",contains:\"c\",keywords:\"k\",subLanguage:\"sL\",className:\"cN\",begin:\"b\",beginKeywords:\"bK\",end:\"e\",endsWithParent:\"eW\",illegal:\"i\",excludeBegin:\"eB\",excludeEnd:\"eE\",returnBegin:\"rB\",returnEnd:\"rE\",variants:\"v\",IDENT_RE:\"IR\",UNDERSCORE_IDENT_RE:\"UIR\",NUMBER_RE:\"NR\",C_NUMBER_RE:\"CNR\",BINARY_NUMBER_RE:\"BNR\",RE_STARTERS_RE:\"RSR\",BACKSLASH_ESCAPE:\"BE\",APOS_STRING_MODE:\"ASM\",QUOTE_STRING_MODE:\"QSM\",PHRASAL_WORDS_MODE:\"PWM\",C_LINE_COMMENT_MODE:\"CLCM\",C_BLOCK_COMMENT_MODE:\"CBCM\",HASH_COMMENT_MODE:\"HCM\",NUMBER_MODE:\"NM\",C_NUMBER_MODE:\"CNM\",BINARY_NUMBER_MODE:\"BNM\",CSS_NUMBER_MODE:\"CSSNM\",REGEXP_MODE:\"RM\",TITLE_MODE:\"TM\",UNDERSCORE_TITLE_MODE:\"UTM\",COMMENT:\"C\",beginRe:\"bR\",endRe:\"eR\",illegalRe:\"iR\",lexemesRe:\"lR\",terminators:\"t\",terminator_end:\"tE\"},m=\"</span>\",O=\"Could not find the language '{}', did you forget to load/include a language module?\",B={classPrefix:\"hljs-\",tabReplace:null,useBR:!1,languages:void 0},o=\"of and for in not or if then\".split(\" \");function x(e){return e.replace(/&/g,\"&\").replace(/</g,\"<\").replace(/>/g,\">\")}function g(e){return e.nodeName.toLowerCase()}function u(e){return n.test(e)}function s(e){var n,t={},r=Array.prototype.slice.call(arguments,1);for(n in e)t[n]=e[n];return r.forEach(function(e){for(n in e)t[n]=e[n]}),t}function E(e){var a=[];return function e(n,t){for(var r=n.firstChild;r;r=r.nextSibling)3===r.nodeType?t+=r.nodeValue.length:1===r.nodeType&&(a.push({event:\"start\",offset:t,node:r}),t=e(r,t),g(r).match(/br|hr|img|input/)||a.push({event:\"stop\",offset:t,node:r}));return t}(e,0),a}function d(e,n,t){var r=0,a=\"\",i=[];function o(){return e.length&&n.length?e[0].offset!==n[0].offset?e[0].offset<n[0].offset?e:n:\"start\"===n[0].event?e:n:e.length?e:n}function c(e){a+=\"<\"+g(e)+f.map.call(e.attributes,function(e){return\" \"+e.nodeName+'=\"'+x(e.value).replace(/\"/g,\""\")+'\"'}).join(\"\")+\">\"}function l(e){a+=\"</\"+g(e)+\">\"}function u(e){(\"start\"===e.event?c:l)(e.node)}for(;e.length||n.length;){var s=o();if(a+=x(t.substring(r,s[0].offset)),r=s[0].offset,s===e){for(i.reverse().forEach(l);u(s.splice(0,1)[0]),(s=o())===e&&s.length&&s[0].offset===r;);i.reverse().forEach(c)}else\"start\"===s[0].event?i.push(s[0].node):i.pop(),u(s.splice(0,1)[0])}return a+x(t.substr(r))}function R(n){return n.v&&!n.cached_variants&&(n.cached_variants=n.v.map(function(e){return s(n,{v:null},e)})),n.cached_variants?n.cached_variants:function e(n){return!!n&&(n.eW||e(n.starts))}(n)?[s(n,{starts:n.starts?s(n.starts):null})]:Object.isFrozen(n)?[s(n)]:[n]}function p(e){if(r&&!e.langApiRestored){for(var n in e.langApiRestored=!0,r)e[n]&&(e[r[n]]=e[n]);(e.c||[]).concat(e.v||[]).forEach(p)}}function v(n,r){var a={};return\"string\"==typeof n?t(\"keyword\",n):i(n).forEach(function(e){t(e,n[e])}),a;function t(t,e){r&&(e=e.toLowerCase()),e.split(\" \").forEach(function(e){var n=e.split(\"|\");a[n[0]]=[t,function(e,n){return n?Number(n):function(e){return-1!=o.indexOf(e.toLowerCase())}(e)?0:1}(n[0],n[1])]})}}function S(r){function s(e){return e&&e.source||e}function f(e,n){return new RegExp(s(e),\"m\"+(r.cI?\"i\":\"\")+(n?\"g\":\"\"))}function a(a){var i,e,o={},c=[],l={},t=1;function n(e,n){o[t]=e,c.push([e,n]),t+=function(e){return new RegExp(e.toString()+\"|\").exec(\"\").length-1}(n)+1}for(var r=0;r<a.c.length;r++){n(e=a.c[r],e.bK?\"\\\\.?(?:\"+e.b+\")\\\\.?\":e.b)}a.tE&&n(\"end\",a.tE),a.i&&n(\"illegal\",a.i);var u=c.map(function(e){return e[1]});return i=f(function(e,n){for(var t=/\\[(?:[^\\\\\\]]|\\\\.)*\\]|\\(\\??|\\\\([1-9][0-9]*)|\\\\./,r=0,a=\"\",i=0;i<e.length;i++){var o=r+=1,c=s(e[i]);for(0<i&&(a+=n),a+=\"(\";0<c.length;){var l=t.exec(c);if(null==l){a+=c;break}a+=c.substring(0,l.index),c=c.substring(l.index+l[0].length),\"\\\\\"==l[0][0]&&l[1]?a+=\"\\\\\"+String(Number(l[1])+o):(a+=l[0],\"(\"==l[0]&&r++)}a+=\")\"}return a}(u,\"|\"),!0),l.lastIndex=0,l.exec=function(e){var n;if(0===c.length)return null;i.lastIndex=l.lastIndex;var t=i.exec(e);if(!t)return null;for(var r=0;r<t.length;r++)if(null!=t[r]&&null!=o[\"\"+r]){n=o[\"\"+r];break}return\"string\"==typeof n?(t.type=n,t.extra=[a.i,a.tE]):(t.type=\"begin\",t.rule=n),t},l}if(r.c&&-1!=r.c.indexOf(\"self\")){if(!C)throw new Error(\"ERR: contains `self` is not supported at the top-level of a language. See documentation.\");r.c=r.c.filter(function(e){return\"self\"!=e})}!function n(t,e){t.compiled||(t.compiled=!0,t.k=t.k||t.bK,t.k&&(t.k=v(t.k,r.cI)),t.lR=f(t.l||/\\w+/,!0),e&&(t.bK&&(t.b=\"\\\\b(\"+t.bK.split(\" \").join(\"|\")+\")\\\\b\"),t.b||(t.b=/\\B|\\b/),t.bR=f(t.b),t.endSameAsBegin&&(t.e=t.b),t.e||t.eW||(t.e=/\\B|\\b/),t.e&&(t.eR=f(t.e)),t.tE=s(t.e)||\"\",t.eW&&e.tE&&(t.tE+=(t.e?\"|\":\"\")+e.tE)),t.i&&(t.iR=f(t.i)),null==t.relevance&&(t.relevance=1),t.c||(t.c=[]),t.c=Array.prototype.concat.apply([],t.c.map(function(e){return R(\"self\"===e?t:e)})),t.c.forEach(function(e){n(e,t)}),t.starts&&n(t.starts,e),t.t=a(t))}(r)}function T(n,e,a,t){var i=e;function o(e,n){if(function(e,n){var t=e&&e.exec(n);return t&&0===t.index}(e.eR,n)){for(;e.endsParent&&e.parent;)e=e.parent;return e}if(e.eW)return o(e.parent,n)}function c(e,n,t,r){if(!t&&\"\"===n)return\"\";if(!e)return n;var a='<span class=\"'+(r?\"\":B.classPrefix);return(a+=e+'\">')+n+(t?\"\":m)}function l(){p+=null!=d.sL?function(){var e=\"string\"==typeof d.sL;if(e&&!_[d.sL])return x(v);var n=e?T(d.sL,v,!0,R[d.sL]):w(v,d.sL.length?d.sL:void 0);return 0<d.relevance&&(M+=n.relevance),e&&(R[d.sL]=n.top),c(n.language,n.value,!1,!0)}():function(){var e,n,t,r,a,i,o;if(!d.k)return x(v);for(r=\"\",n=0,d.lR.lastIndex=0,t=d.lR.exec(v);t;)r+=x(v.substring(n,t.index)),a=d,i=t,void 0,o=g.cI?i[0].toLowerCase():i[0],(e=a.k.hasOwnProperty(o)&&a.k[o])?(M+=e[1],r+=c(e[0],x(t[0]))):r+=x(t[0]),n=d.lR.lastIndex,t=d.lR.exec(v);return r+x(v.substr(n))}(),v=\"\"}function u(e){p+=e.cN?c(e.cN,\"\",!0):\"\",d=Object.create(e,{parent:{value:d}})}function s(e){var n=e[0],t=e.rule;return t&&t.endSameAsBegin&&(t.eR=function(e){return new RegExp(e.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g,\"\\\\$&\"),\"m\")}(n)),t.skip?v+=n:(t.eB&&(v+=n),l(),t.rB||t.eB||(v=n)),u(t),t.rB?0:n.length}var f={};function r(e,n){var t=n&&n[0];if(v+=e,null==t)return l(),0;if(\"begin\"==f.type&&\"end\"==n.type&&f.index==n.index&&\"\"===t)return v+=i.slice(n.index,n.index+1),1;if(\"begin\"===(f=n).type)return s(n);if(\"illegal\"===n.type&&!a)throw new Error('Illegal lexeme \"'+t+'\" for mode \"'+(d.cN||\"<unnamed>\")+'\"');if(\"end\"===n.type){var r=function(e){var n=e[0],t=i.substr(e.index),r=o(d,t);if(r){var a=d;for(a.skip?v+=n:(a.rE||a.eE||(v+=n),l(),a.eE&&(v=n));d.cN&&(p+=m),d.skip||d.sL||(M+=d.relevance),(d=d.parent)!==r.parent;);return r.starts&&(r.endSameAsBegin&&(r.starts.eR=r.eR),u(r.starts)),a.rE?0:n.length}}(n);if(null!=r)return r}return v+=t,t.length}var g=D(n);if(!g)throw console.error(O.replace(\"{}\",n)),new Error('Unknown language: \"'+n+'\"');S(g);var E,d=t||g,R={},p=\"\";for(E=d;E!==g;E=E.parent)E.cN&&(p=c(E.cN,\"\",!0)+p);var v=\"\",M=0;try{for(var b,h,N=0;d.t.lastIndex=N,b=d.t.exec(i);)h=r(i.substring(N,b.index),b),N=b.index+h;for(r(i.substr(N)),E=d;E.parent;E=E.parent)E.cN&&(p+=m);return{relevance:M,value:p,i:!1,language:n,top:d}}catch(e){if(e.message&&-1!==e.message.indexOf(\"Illegal\"))return{i:!0,relevance:0,value:x(i)};if(C)return{relevance:0,value:x(i),language:n,top:d,errorRaised:e};throw e}}function w(t,e){e=e||B.languages||i(_);var r={relevance:0,value:x(t)},a=r;return e.filter(D).filter(L).forEach(function(e){var n=T(e,t,!1);n.language=e,n.relevance>a.relevance&&(a=n),n.relevance>r.relevance&&(a=r,r=n)}),a.language&&(r.second_best=a),r}function M(e){return B.tabReplace||B.useBR?e.replace(t,function(e,n){return B.useBR&&\"\\n\"===e?\"<br>\":B.tabReplace?n.replace(/\\t/g,B.tabReplace):\"\"}):e}function b(e){var n,t,r,a,i,o=function(e){var n,t,r,a,i=e.className+\" \";if(i+=e.parentNode?e.parentNode.className:\"\",t=l.exec(i)){var o=D(t[1]);return o||(console.warn(O.replace(\"{}\",t[1])),console.warn(\"Falling back to no-highlight mode for this block.\",e)),o?t[1]:\"no-highlight\"}for(n=0,r=(i=i.split(/\\s+/)).length;n<r;n++)if(u(a=i[n])||D(a))return a}(e);u(o)||(B.useBR?(n=document.createElement(\"div\")).innerHTML=e.innerHTML.replace(/\\n/g,\"\").replace(/<br[ \\/]*>/g,\"\\n\"):n=e,i=n.textContent,r=o?T(o,i,!0):w(i),(t=E(n)).length&&((a=document.createElement(\"div\")).innerHTML=r.value,r.value=d(t,E(a),i)),r.value=M(r.value),e.innerHTML=r.value,e.className=function(e,n,t){var r=n?c[n]:t,a=[e.trim()];return e.match(/\\bhljs\\b/)||a.push(\"hljs\"),-1===e.indexOf(r)&&a.push(r),a.join(\" \").trim()}(e.className,o,r.language),e.result={language:r.language,re:r.relevance},r.second_best&&(e.second_best={language:r.second_best.language,re:r.second_best.relevance}))}function h(){if(!h.called){h.called=!0;var e=document.querySelectorAll(\"pre code\");f.forEach.call(e,b)}}var N={disableAutodetect:!0};function D(e){return e=(e||\"\").toLowerCase(),_[e]||_[c[e]]}function L(e){var n=D(e);return n&&!n.disableAutodetect}return a.highlight=T,a.highlightAuto=w,a.fixMarkup=M,a.highlightBlock=b,a.configure=function(e){B=s(B,e)},a.initHighlighting=h,a.initHighlightingOnLoad=function(){window.addEventListener(\"DOMContentLoaded\",h,!1),window.addEventListener(\"load\",h,!1)},a.registerLanguage=function(n,e){var t;try{t=e(a)}catch(e){if(console.error(\"Language definition for '{}' could not be registered.\".replace(\"{}\",n)),!C)throw e;console.error(e),t=N}p(_[n]=t),t.rawDefinition=e.bind(null,a),t.aliases&&t.aliases.forEach(function(e){c[e]=n})},a.listLanguages=function(){return i(_)},a.getLanguage=D,a.requireLanguage=function(e){var n=D(e);if(n)return n;throw new Error(\"The '{}' language is required, but not loaded.\".replace(\"{}\",e))},a.autoDetection=L,a.inherit=s,a.debugMode=function(){C=!1},a.IR=a.IDENT_RE=\"[a-zA-Z]\\\\w*\",a.UIR=a.UNDERSCORE_IDENT_RE=\"[a-zA-Z_]\\\\w*\",a.NR=a.NUMBER_RE=\"\\\\b\\\\d+(\\\\.\\\\d+)?\",a.CNR=a.C_NUMBER_RE=\"(-?)(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)\",a.BNR=a.BINARY_NUMBER_RE=\"\\\\b(0b[01]+)\",a.RSR=a.RE_STARTERS_RE=\"!|!=|!==|%|%=|&|&&|&=|\\\\*|\\\\*=|\\\\+|\\\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\\\?|\\\\[|\\\\{|\\\\(|\\\\^|\\\\^=|\\\\||\\\\|=|\\\\|\\\\||~\",a.BE=a.BACKSLASH_ESCAPE={b:\"\\\\\\\\[\\\\s\\\\S]\",relevance:0},a.ASM=a.APOS_STRING_MODE={cN:\"string\",b:\"'\",e:\"'\",i:\"\\\\n\",c:[a.BE]},a.QSM=a.QUOTE_STRING_MODE={cN:\"string\",b:'\"',e:'\"',i:\"\\\\n\",c:[a.BE]},a.PWM=a.PHRASAL_WORDS_MODE={b:/\\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\\b/},a.C=a.COMMENT=function(e,n,t){var r=a.inherit({cN:\"comment\",b:e,e:n,c:[]},t||{});return r.c.push(a.PWM),r.c.push({cN:\"doctag\",b:\"(?:TODO|FIXME|NOTE|BUG|XXX):\",relevance:0}),r},a.CLCM=a.C_LINE_COMMENT_MODE=a.C(\"//\",\"$\"),a.CBCM=a.C_BLOCK_COMMENT_MODE=a.C(\"/\\\\*\",\"\\\\*/\"),a.HCM=a.HASH_COMMENT_MODE=a.C(\"#\",\"$\"),a.NM=a.NUMBER_MODE={cN:\"number\",b:a.NR,relevance:0},a.CNM=a.C_NUMBER_MODE={cN:\"number\",b:a.CNR,relevance:0},a.BNM=a.BINARY_NUMBER_MODE={cN:\"number\",b:a.BNR,relevance:0},a.CSSNM=a.CSS_NUMBER_MODE={cN:\"number\",b:a.NR+\"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?\",relevance:0},a.RM=a.REGEXP_MODE={cN:\"regexp\",b:/\\//,e:/\\/[gimuy]*/,i:/\\n/,c:[a.BE,{b:/\\[/,e:/\\]/,relevance:0,c:[a.BE]}]},a.TM=a.TITLE_MODE={cN:\"title\",b:a.IR,relevance:0},a.UTM=a.UNDERSCORE_TITLE_MODE={cN:\"title\",b:a.UIR,relevance:0},a.METHOD_GUARD={b:\"\\\\.\\\\s*\"+a.UIR,relevance:0},[a.BE,a.ASM,a.QSM,a.PWM,a.C,a.CLCM,a.CBCM,a.HCM,a.NM,a.CNM,a.BNM,a.CSSNM,a.RM,a.TM,a.UTM,a.METHOD_GUARD].forEach(function(e){!function n(t){Object.freeze(t);var r=\"function\"==typeof t;Object.getOwnPropertyNames(t).forEach(function(e){!t.hasOwnProperty(e)||null===t[e]||\"object\"!=typeof t[e]&&\"function\"!=typeof t[e]||r&&(\"caller\"===e||\"callee\"===e||\"arguments\"===e)||Object.isFrozen(t[e])||n(t[e])});return t}(e)}),a});hljs.registerLanguage(\"swift\",function(e){var i={keyword:\"#available #colorLiteral #column #else #elseif #endif #file #fileLiteral #function #if #imageLiteral #line #selector #sourceLocation _ __COLUMN__ __FILE__ __FUNCTION__ __LINE__ Any as as! as? associatedtype associativity break case catch class continue convenience default defer deinit didSet do dynamic dynamicType else enum extension fallthrough false fileprivate final for func get guard if import in indirect infix init inout internal is lazy left let mutating nil none nonmutating open operator optional override postfix precedence prefix private protocol Protocol public repeat required rethrows return right self Self set static struct subscript super switch throw throws true try try! try? Type typealias unowned var weak where while willSet\",literal:\"true false nil\",built_in:\"abs advance alignof alignofValue anyGenerator assert assertionFailure bridgeFromObjectiveC bridgeFromObjectiveCUnconditional bridgeToObjectiveC bridgeToObjectiveCUnconditional c contains count countElements countLeadingZeros debugPrint debugPrintln distance dropFirst dropLast dump encodeBitsAsWords enumerate equal fatalError filter find getBridgedObjectiveCType getVaList indices insertionSort isBridgedToObjectiveC isBridgedVerbatimToObjectiveC isUniquelyReferenced isUniquelyReferencedNonObjC join lazy lexicographicalCompare map max maxElement min minElement numericCast overlaps partition posix precondition preconditionFailure print println quickSort readLine reduce reflect reinterpretCast reverse roundUpToAlignment sizeof sizeofValue sort split startsWith stride strideof strideofValue swap toString transcode underestimateCount unsafeAddressOf unsafeBitCast unsafeDowncast unsafeUnwrap unsafeReflect withExtendedLifetime withObjectAtPlusZero withUnsafePointer withUnsafePointerToObject withUnsafeMutablePointer withUnsafeMutablePointers withUnsafePointer withUnsafePointers withVaList zip\"},t=e.C(\"/\\\\*\",\"\\\\*/\",{c:[\"self\"]}),n={cN:\"subst\",b:/\\\\\\(/,e:\"\\\\)\",k:i,c:[]},r={cN:\"string\",c:[e.BE,n],v:[{b:/\"\"\"/,e:/\"\"\"/},{b:/\"/,e:/\"/}]},a={cN:\"number\",b:\"\\\\b([\\\\d_]+(\\\\.[\\\\deE_]+)?|0x[a-fA-F0-9_]+(\\\\.[a-fA-F0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\\\b\",relevance:0};return n.c=[a],{k:i,c:[r,e.CLCM,t,{cN:\"type\",b:\"\\\\b[A-Z][\\\\wÀ-ʸ']*[!?]\"},{cN:\"type\",b:\"\\\\b[A-Z][\\\\wÀ-ʸ']*\",relevance:0},a,{cN:\"function\",bK:\"func\",e:\"{\",eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/}),{b:/</,e:/>/},{cN:\"params\",b:/\\(/,e:/\\)/,endsParent:!0,k:i,c:[\"self\",a,r,e.CBCM,{b:\":\"}],i:/[\"']/}],i:/\\[|%/},{cN:\"class\",bK:\"struct protocol class extension enum\",k:i,e:\"\\\\{\",eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][\\u00C0-\\u02B80-9A-Za-z$_]*/})]},{cN:\"meta\",b:\"(@discardableResult|@warn_unused_result|@exported|@lazy|@noescape|@NSCopying|@NSManaged|@objc|@objcMembers|@convention|@required|@noreturn|@IBAction|@IBDesignable|@IBInspectable|@IBOutlet|@infix|@prefix|@postfix|@autoclosure|@testable|@available|@nonobjc|@NSApplicationMain|@UIApplicationMain|@dynamicMemberLookup|@propertyWrapper)\"},{bK:\"import\",e:/$/,c:[e.CLCM,t]}]}});hljs.registerLanguage(\"less\",function(e){function r(e){return{cN:\"string\",b:\"~?\"+e+\".*?\"+e}}function t(e,r,t){return{cN:e,b:r,relevance:t}}var a=\"[\\\\w-]+\",c=\"(\"+a+\"|@{\"+a+\"})\",s=[],n=[],b={b:\"\\\\(\",e:\"\\\\)\",c:n,relevance:0};n.push(e.CLCM,e.CBCM,r(\"'\"),r('\"'),e.CSSNM,{b:\"(url|data-uri)\\\\(\",starts:{cN:\"string\",e:\"[\\\\)\\\\n]\",eE:!0}},t(\"number\",\"#[0-9A-Fa-f]+\\\\b\"),b,t(\"variable\",\"@@?\"+a,10),t(\"variable\",\"@{\"+a+\"}\"),t(\"built_in\",\"~?`[^`]*?`\"),{cN:\"attribute\",b:a+\"\\\\s*:\",e:\":\",rB:!0,eE:!0},{cN:\"meta\",b:\"!important\"});var i=n.concat({b:\"{\",e:\"}\",c:s}),l={bK:\"when\",eW:!0,c:[{bK:\"and not\"}].concat(n)},o={b:c+\"\\\\s*:\",rB:!0,e:\"[;}]\",relevance:0,c:[{cN:\"attribute\",b:c,e:\":\",eE:!0,starts:{eW:!0,i:\"[<=$]\",relevance:0,c:n}}]},u={cN:\"keyword\",b:\"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\\\b\",starts:{e:\"[;{}]\",rE:!0,c:n,relevance:0}},v={cN:\"variable\",v:[{b:\"@\"+a+\"\\\\s*:\",relevance:15},{b:\"@\"+a}],starts:{e:\"[;}]\",rE:!0,c:i}},C={v:[{b:\"[\\\\.#:&\\\\[>]\",e:\"[;{}]\"},{b:c,e:\"{\"}],rB:!0,rE:!0,i:\"[<='$\\\"]\",relevance:0,c:[e.CLCM,e.CBCM,l,t(\"keyword\",\"all\\\\b\"),t(\"variable\",\"@{\"+a+\"}\"),t(\"selector-tag\",c+\"%?\",0),t(\"selector-id\",\"#\"+c),t(\"selector-class\",\"\\\\.\"+c,0),t(\"selector-tag\",\"&\",0),{cN:\"selector-attr\",b:\"\\\\[\",e:\"\\\\]\"},{cN:\"selector-pseudo\",b:/:(:)?[a-zA-Z0-9\\_\\-\\+\\(\\)\"'.]+/},{b:\"\\\\(\",e:\"\\\\)\",c:i},{b:\"!important\"}]};return s.push(e.CLCM,e.CBCM,u,v,o,C),{cI:!0,i:\"[=>'/<($\\\"]\",c:s}});hljs.registerLanguage(\"armasm\",function(s){return{cI:!0,aliases:[\"arm\"],l:\"\\\\.?\"+s.IR,k:{meta:\".2byte .4byte .align .ascii .asciz .balign .byte .code .data .else .end .endif .endm .endr .equ .err .exitm .extern .global .hword .if .ifdef .ifndef .include .irp .long .macro .rept .req .section .set .skip .space .text .word .arm .thumb .code16 .code32 .force_thumb .thumb_func .ltorg ALIAS ALIGN ARM AREA ASSERT ATTR CN CODE CODE16 CODE32 COMMON CP DATA DCB DCD DCDU DCDO DCFD DCFDU DCI DCQ DCQU DCW DCWU DN ELIF ELSE END ENDFUNC ENDIF ENDP ENTRY EQU EXPORT EXPORTAS EXTERN FIELD FILL FUNCTION GBLA GBLL GBLS GET GLOBAL IF IMPORT INCBIN INCLUDE INFO KEEP LCLA LCLL LCLS LTORG MACRO MAP MEND MEXIT NOFP OPT PRESERVE8 PROC QN READONLY RELOC REQUIRE REQUIRE8 RLIST FN ROUT SETA SETL SETS SN SPACE SUBT THUMB THUMBX TTL WHILE WEND \",built_in:\"r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 pc lr sp ip sl sb fp a1 a2 a3 a4 v1 v2 v3 v4 v5 v6 v7 v8 f0 f1 f2 f3 f4 f5 f6 f7 p0 p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12 q13 q14 q15 cpsr_c cpsr_x cpsr_s cpsr_f cpsr_cx cpsr_cxs cpsr_xs cpsr_xsf cpsr_sf cpsr_cxsf spsr_c spsr_x spsr_s spsr_f spsr_cx spsr_cxs spsr_xs spsr_xsf spsr_sf spsr_cxsf s0 s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 s16 s17 s18 s19 s20 s21 s22 s23 s24 s25 s26 s27 s28 s29 s30 s31 d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d10 d11 d12 d13 d14 d15 d16 d17 d18 d19 d20 d21 d22 d23 d24 d25 d26 d27 d28 d29 d30 d31 {PC} {VAR} {TRUE} {FALSE} {OPT} {CONFIG} {ENDIAN} {CODESIZE} {CPU} {FPU} {ARCHITECTURE} {PCSTOREOFFSET} {ARMASM_VERSION} {INTER} {ROPI} {RWPI} {SWST} {NOSWST} . @\"},c:[{cN:\"keyword\",b:\"\\\\b(adc|(qd?|sh?|u[qh]?)?add(8|16)?|usada?8|(q|sh?|u[qh]?)?(as|sa)x|and|adrl?|sbc|rs[bc]|asr|b[lx]?|blx|bxj|cbn?z|tb[bh]|bic|bfc|bfi|[su]bfx|bkpt|cdp2?|clz|clrex|cmp|cmn|cpsi[ed]|cps|setend|dbg|dmb|dsb|eor|isb|it[te]{0,3}|lsl|lsr|ror|rrx|ldm(([id][ab])|f[ds])?|ldr((s|ex)?[bhd])?|movt?|mvn|mra|mar|mul|[us]mull|smul[bwt][bt]|smu[as]d|smmul|smmla|mla|umlaal|smlal?([wbt][bt]|d)|mls|smlsl?[ds]|smc|svc|sev|mia([bt]{2}|ph)?|mrr?c2?|mcrr2?|mrs|msr|orr|orn|pkh(tb|bt)|rbit|rev(16|sh)?|sel|[su]sat(16)?|nop|pop|push|rfe([id][ab])?|stm([id][ab])?|str(ex)?[bhd]?|(qd?)?sub|(sh?|q|u[qh]?)?sub(8|16)|[su]xt(a?h|a?b(16)?)|srs([id][ab])?|swpb?|swi|smi|tst|teq|wfe|wfi|yield)(eq|ne|cs|cc|mi|pl|vs|vc|hi|ls|ge|lt|gt|le|al|hs|lo)?[sptrx]?\",e:\"\\\\s\"},s.C(\"[;@]\",\"$\",{relevance:0}),s.CBCM,s.QSM,{cN:\"string\",b:\"'\",e:\"[^\\\\\\\\]'\",relevance:0},{cN:\"title\",b:\"\\\\|\",e:\"\\\\|\",i:\"\\\\n\",relevance:0},{cN:\"number\",v:[{b:\"[#$=]?0x[0-9a-f]+\"},{b:\"[#$=]?0b[01]+\"},{b:\"[#$=]\\\\d+\"},{b:\"\\\\b\\\\d+\"}],relevance:0},{cN:\"symbol\",v:[{b:\"^[a-z_\\\\.\\\\$][a-z0-9_\\\\.\\\\$]+\"},{b:\"^\\\\s*[a-z_\\\\.\\\\$][a-z0-9_\\\\.\\\\$]+:\"},{b:\"[=#]\\\\w+\"}],relevance:0}]}});hljs.registerLanguage(\"ruby\",function(e){var c=\"[a-zA-Z_]\\\\w*[!?=]?|[-+~]\\\\@|<<|>>|=~|===?|<=>|[<>]=?|\\\\*\\\\*|[-/+%^&*~`|]|\\\\[\\\\]=?\",b={keyword:\"and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor\",literal:\"true false nil\"},r={cN:\"doctag\",b:\"@[A-Za-z]+\"},a={b:\"#<\",e:\">\"},n=[e.C(\"#\",\"$\",{c:[r]}),e.C(\"^\\\\=begin\",\"^\\\\=end\",{c:[r],relevance:10}),e.C(\"^__END__\",\"\\\\n$\")],s={cN:\"subst\",b:\"#\\\\{\",e:\"}\",k:b},t={cN:\"string\",c:[e.BE,s],v:[{b:/'/,e:/'/},{b:/\"/,e:/\"/},{b:/`/,e:/`/},{b:\"%[qQwWx]?\\\\(\",e:\"\\\\)\"},{b:\"%[qQwWx]?\\\\[\",e:\"\\\\]\"},{b:\"%[qQwWx]?{\",e:\"}\"},{b:\"%[qQwWx]?<\",e:\">\"},{b:\"%[qQwWx]?/\",e:\"/\"},{b:\"%[qQwWx]?%\",e:\"%\"},{b:\"%[qQwWx]?-\",e:\"-\"},{b:\"%[qQwWx]?\\\\|\",e:\"\\\\|\"},{b:/\\B\\?(\\\\\\d{1,3}|\\\\x[A-Fa-f0-9]{1,2}|\\\\u[A-Fa-f0-9]{4}|\\\\?\\S)\\b/},{b:/<<[-~]?'?(\\w+)(?:.|\\n)*?\\n\\s*\\1\\b/,rB:!0,c:[{b:/<<[-~]?'?/},{b:/\\w+/,endSameAsBegin:!0,c:[e.BE,s]}]}]},i={cN:\"params\",b:\"\\\\(\",e:\"\\\\)\",endsParent:!0,k:b},l=[t,a,{cN:\"class\",bK:\"class module\",e:\"$|;\",i:/=/,c:[e.inherit(e.TM,{b:\"[A-Za-z_]\\\\w*(::\\\\w+)*(\\\\?|\\\\!)?\"}),{b:\"<\\\\s*\",c:[{b:\"(\"+e.IR+\"::)?\"+e.IR}]}].concat(n)},{cN:\"function\",bK:\"def\",e:\"$|;\",c:[e.inherit(e.TM,{b:c}),i].concat(n)},{b:e.IR+\"::\"},{cN:\"symbol\",b:e.UIR+\"(\\\\!|\\\\?)?:\",relevance:0},{cN:\"symbol\",b:\":(?!\\\\s)\",c:[t,{b:c}],relevance:0},{cN:\"number\",b:\"(\\\\b0[0-7_]+)|(\\\\b0x[0-9a-fA-F_]+)|(\\\\b[1-9][0-9_]*(\\\\.[0-9_]+)?)|[0_]\\\\b\",relevance:0},{b:\"(\\\\$\\\\W)|((\\\\$|\\\\@\\\\@?)(\\\\w+))\"},{cN:\"params\",b:/\\|/,e:/\\|/,k:b},{b:\"(\"+e.RSR+\"|unless)\\\\s*\",k:\"unless\",c:[a,{cN:\"regexp\",c:[e.BE,s],i:/\\n/,v:[{b:\"/\",e:\"/[a-z]*\"},{b:\"%r{\",e:\"}[a-z]*\"},{b:\"%r\\\\(\",e:\"\\\\)[a-z]*\"},{b:\"%r!\",e:\"![a-z]*\"},{b:\"%r\\\\[\",e:\"\\\\][a-z]*\"}]}].concat(n),relevance:0}].concat(n);s.c=l;var d=[{b:/^\\s*=>/,starts:{e:\"$\",c:i.c=l}},{cN:\"meta\",b:\"^([>?]>|[\\\\w#]+\\\\(\\\\w+\\\\):\\\\d+:\\\\d+>|(\\\\w+-)?\\\\d+\\\\.\\\\d+\\\\.\\\\d(p\\\\d+)?[^>]+>)\",starts:{e:\"$\",c:l}}];return{aliases:[\"rb\",\"gemspec\",\"podspec\",\"thor\",\"irb\"],k:b,i:/\\/\\*/,c:n.concat(d).concat(l)}});hljs.registerLanguage(\"lua\",function(e){var t=\"\\\\[=*\\\\[\",a=\"\\\\]=*\\\\]\",n={b:t,e:a,c:[\"self\"]},l=[e.C(\"--(?!\"+t+\")\",\"$\"),e.C(\"--\"+t,a,{c:[n],relevance:10})];return{l:e.UIR,k:{literal:\"true false nil\",keyword:\"and break do else elseif end for goto if in local not or repeat return then until while\",built_in:\"_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstringmodule next pairs pcall print rawequal rawget rawset require select setfenvsetmetatable tonumber tostring type unpack xpcall arg selfcoroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove\"},c:l.concat([{cN:\"function\",bK:\"function\",e:\"\\\\)\",c:[e.inherit(e.TM,{b:\"([_a-zA-Z]\\\\w*\\\\.)*([_a-zA-Z]\\\\w*:)?[_a-zA-Z]\\\\w*\"}),{cN:\"params\",b:\"\\\\(\",eW:!0,c:l}].concat(l)},e.CNM,e.ASM,e.QSM,{cN:\"string\",b:t,e:a,c:[n],relevance:5}])}});hljs.registerLanguage(\"matlab\",function(e){var a=\"('|\\\\.')+\",s={relevance:0,c:[{b:a}]};return{k:{keyword:\"break case catch classdef continue else elseif end enumerated events for function global if methods otherwise parfor persistent properties return spmd switch try while\",built_in:\"sin sind sinh asin asind asinh cos cosd cosh acos acosd acosh tan tand tanh atan atand atan2 atanh sec secd sech asec asecd asech csc cscd csch acsc acscd acsch cot cotd coth acot acotd acoth hypot exp expm1 log log1p log10 log2 pow2 realpow reallog realsqrt sqrt nthroot nextpow2 abs angle complex conj imag real unwrap isreal cplxpair fix floor ceil round mod rem sign airy besselj bessely besselh besseli besselk beta betainc betaln ellipj ellipke erf erfc erfcx erfinv expint gamma gammainc gammaln psi legendre cross dot factor isprime primes gcd lcm rat rats perms nchoosek factorial cart2sph cart2pol pol2cart sph2cart hsv2rgb rgb2hsv zeros ones eye repmat rand randn linspace logspace freqspace meshgrid accumarray size length ndims numel disp isempty isequal isequalwithequalnans cat reshape diag blkdiag tril triu fliplr flipud flipdim rot90 find sub2ind ind2sub bsxfun ndgrid permute ipermute shiftdim circshift squeeze isscalar isvector ans eps realmax realmin pi i inf nan isnan isinf isfinite j why compan gallery hadamard hankel hilb invhilb magic pascal rosser toeplitz vander wilkinson max min nanmax nanmin mean nanmean type table readtable writetable sortrows sort figure plot plot3 scatter scatter3 cellfun legend intersect ismember procrustes hold num2cell \"},i:'(//|\"|#|/\\\\*|\\\\s+/\\\\w+)',c:[{cN:\"function\",bK:\"function\",e:\"$\",c:[e.UTM,{cN:\"params\",v:[{b:\"\\\\(\",e:\"\\\\)\"},{b:\"\\\\[\",e:\"\\\\]\"}]}]},{cN:\"built_in\",b:/true|false/,relevance:0,starts:s},{b:\"[a-zA-Z][a-zA-Z_0-9]*\"+a,relevance:0},{cN:\"number\",b:e.CNR,relevance:0,starts:s},{cN:\"string\",b:\"'\",e:\"'\",c:[e.BE,{b:\"''\"}]},{b:/\\]|}|\\)/,relevance:0,starts:s},{cN:\"string\",b:'\"',e:'\"',c:[e.BE,{b:'\"\"'}],starts:s},e.C(\"^\\\\s*\\\\%\\\\{\\\\s*$\",\"^\\\\s*\\\\%\\\\}\\\\s*$\"),e.C(\"\\\\%\",\"$\")]}});hljs.registerLanguage(\"apache\",function(e){var r={cN:\"number\",b:\"[\\\\$%]\\\\d+\"};return{aliases:[\"apacheconf\"],cI:!0,c:[e.HCM,{cN:\"section\",b:\"</?\",e:\">\"},{cN:\"attribute\",b:/\\w+/,relevance:0,k:{nomarkup:\"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername\"},starts:{e:/$/,relevance:0,k:{literal:\"on off all\"},c:[{cN:\"meta\",b:\"\\\\s\\\\[\",e:\"\\\\]$\"},{cN:\"variable\",b:\"[\\\\$%]\\\\{\",e:\"\\\\}\",c:[\"self\",r]},r,e.QSM]}}],i:/\\S/}});hljs.registerLanguage(\"yaml\",function(e){var b=\"true false yes no null\",a={cN:\"string\",relevance:0,v:[{b:/'/,e:/'/},{b:/\"/,e:/\"/},{b:/\\S+/}],c:[e.BE,{cN:\"template-variable\",v:[{b:\"{{\",e:\"}}\"},{b:\"%{\",e:\"}\"}]}]};return{cI:!0,aliases:[\"yml\",\"YAML\",\"yaml\"],c:[{cN:\"attr\",v:[{b:\"\\\\w[\\\\w :\\\\/.-]*:(?=[ \\t]|$)\"},{b:'\"\\\\w[\\\\w :\\\\/.-]*\":(?=[ \\t]|$)'},{b:\"'\\\\w[\\\\w :\\\\/.-]*':(?=[ \\t]|$)\"}]},{cN:\"meta\",b:\"^---s*$\",relevance:10},{cN:\"string\",b:\"[\\\\|>]([0-9]?[+-])?[ ]*\\\\n( *)[\\\\S ]+\\\\n(\\\\2[\\\\S ]+\\\\n?)*\"},{b:\"<%[%=-]?\",e:\"[%-]?%>\",sL:\"ruby\",eB:!0,eE:!0,relevance:0},{cN:\"type\",b:\"!\"+e.UIR},{cN:\"type\",b:\"!!\"+e.UIR},{cN:\"meta\",b:\"&\"+e.UIR+\"$\"},{cN:\"meta\",b:\"\\\\*\"+e.UIR+\"$\"},{cN:\"bullet\",b:\"\\\\-(?=[ ]|$)\",relevance:0},e.HCM,{bK:b,k:{literal:b}},{cN:\"number\",b:e.CNR+\"\\\\b\"},a]}});hljs.registerLanguage(\"plaintext\",function(e){return{disableAutodetect:!0}});hljs.registerLanguage(\"erlang-repl\",function(e){return{k:{built_in:\"spawn spawn_link self\",keyword:\"after and andalso|10 band begin bnot bor bsl bsr bxor case catch cond div end fun if let not of or orelse|10 query receive rem try when xor\"},c:[{cN:\"meta\",b:\"^[0-9]+> \",relevance:10},e.C(\"%\",\"$\"),{cN:\"number\",b:\"\\\\b(\\\\d+#[a-fA-F0-9]+|\\\\d+(\\\\.\\\\d+)?([eE][-+]?\\\\d+)?)\",relevance:0},e.ASM,e.QSM,{b:\"\\\\?(::)?([A-Z]\\\\w*(::)?)+\"},{b:\"->\"},{b:\"ok\"},{b:\"!\"},{b:\"(\\\\b[a-z'][a-zA-Z0-9_']*:[a-z'][a-zA-Z0-9_']*)|(\\\\b[a-z'][a-zA-Z0-9_']*)\",relevance:0},{b:\"[A-Z][a-zA-Z0-9_']*\",relevance:0}]}});hljs.registerLanguage(\"cmake\",function(e){return{aliases:[\"cmake.in\"],cI:!0,k:{keyword:\"break cmake_host_system_information cmake_minimum_required cmake_parse_arguments cmake_policy configure_file continue elseif else endforeach endfunction endif endmacro endwhile execute_process file find_file find_library find_package find_path find_program foreach function get_cmake_property get_directory_property get_filename_component get_property if include include_guard list macro mark_as_advanced math message option return separate_arguments set_directory_properties set_property set site_name string unset variable_watch while add_compile_definitions add_compile_options add_custom_command add_custom_target add_definitions add_dependencies add_executable add_library add_link_options add_subdirectory add_test aux_source_directory build_command create_test_sourcelist define_property enable_language enable_testing export fltk_wrap_ui get_source_file_property get_target_property get_test_property include_directories include_external_msproject include_regular_expression install link_directories link_libraries load_cache project qt_wrap_cpp qt_wrap_ui remove_definitions set_source_files_properties set_target_properties set_tests_properties source_group target_compile_definitions target_compile_features target_compile_options target_include_directories target_link_directories target_link_libraries target_link_options target_sources try_compile try_run ctest_build ctest_configure ctest_coverage ctest_empty_binary_directory ctest_memcheck ctest_read_custom_files ctest_run_script ctest_sleep ctest_start ctest_submit ctest_test ctest_update ctest_upload build_name exec_program export_library_dependencies install_files install_programs install_targets load_command make_directory output_required_files remove subdir_depends subdirs use_mangled_mesa utility_source variable_requires write_file qt5_use_modules qt5_use_package qt5_wrap_cpp on off true false and or not command policy target test exists is_newer_than is_directory is_symlink is_absolute matches less greater equal less_equal greater_equal strless strgreater strequal strless_equal strgreater_equal version_less version_greater version_equal version_less_equal version_greater_equal in_list defined\"},c:[{cN:\"variable\",b:\"\\\\${\",e:\"}\"},e.HCM,e.QSM,e.NM]}});hljs.registerLanguage(\"kotlin\",function(e){var t={keyword:\"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual trait volatile transient native default\",built_in:\"Byte Short Char Int Long Boolean Float Double Void Unit Nothing\",literal:\"true false null\"},a={cN:\"symbol\",b:e.UIR+\"@\"},n={cN:\"subst\",b:\"\\\\${\",e:\"}\",c:[e.CNM]},c={cN:\"variable\",b:\"\\\\$\"+e.UIR},r={cN:\"string\",v:[{b:'\"\"\"',e:'\"\"\"(?=[^\"])',c:[c,n]},{b:\"'\",e:\"'\",i:/\\n/,c:[e.BE]},{b:'\"',e:'\"',i:/\\n/,c:[e.BE,c,n]}]};n.c.push(r);var i={cN:\"meta\",b:\"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\\\s*:(?:\\\\s*\"+e.UIR+\")?\"},l={cN:\"meta\",b:\"@\"+e.UIR,c:[{b:/\\(/,e:/\\)/,c:[e.inherit(r,{cN:\"meta-string\"})]}]},s={cN:\"number\",b:\"\\\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\\\d]+[\\\\d_]+[\\\\d]+|[\\\\d]+)(\\\\.([\\\\d]+[\\\\d_]+[\\\\d]+|[\\\\d]+))?|\\\\.([\\\\d]+[\\\\d_]+[\\\\d]+|[\\\\d]+))([eE][-+]?\\\\d+)?)[lLfF]?\",relevance:0},b=e.C(\"/\\\\*\",\"\\\\*/\",{c:[e.CBCM]}),o={v:[{cN:\"type\",b:e.UIR},{b:/\\(/,e:/\\)/,c:[]}]},d=o;return d.v[1].c=[o],o.v[1].c=[d],{aliases:[\"kt\"],k:t,c:[e.C(\"/\\\\*\\\\*\",\"\\\\*/\",{relevance:0,c:[{cN:\"doctag\",b:\"@[A-Za-z]+\"}]}),e.CLCM,b,{cN:\"keyword\",b:/\\b(break|continue|return|this)\\b/,starts:{c:[{cN:\"symbol\",b:/@\\w+/}]}},a,i,l,{cN:\"function\",bK:\"fun\",e:\"[(]|$\",rB:!0,eE:!0,k:t,i:/fun\\s+(<.*>)?[^\\s\\(]+(\\s+[^\\s\\(]+)\\s*=/,relevance:5,c:[{b:e.UIR+\"\\\\s*\\\\(\",rB:!0,relevance:0,c:[e.UTM]},{cN:\"type\",b:/</,e:/>/,k:\"reified\",relevance:0},{cN:\"params\",b:/\\(/,e:/\\)/,endsParent:!0,k:t,relevance:0,c:[{b:/:/,e:/[=,\\/]/,eW:!0,c:[o,e.CLCM,b],relevance:0},e.CLCM,b,i,l,r,e.CNM]},b]},{cN:\"class\",bK:\"class interface trait\",e:/[:\\{(]|$/,eE:!0,i:\"extends implements\",c:[{bK:\"public protected internal private constructor\"},e.UTM,{cN:\"type\",b:/</,e:/>/,eB:!0,eE:!0,relevance:0},{cN:\"type\",b:/[,:]\\s*/,e:/[<\\(,]|$/,eB:!0,rE:!0},i,l]},r,{cN:\"meta\",b:\"^#!/usr/bin/env\",e:\"$\",i:\"\\n\"},s]}});hljs.registerLanguage(\"javascript\",function(e){var r=\"<>\",a=\"</>\",t={b:/<[A-Za-z0-9\\\\._:-]+/,e:/\\/[A-Za-z0-9\\\\._:-]+>|\\/>/},c=\"[A-Za-z$_][0-9A-Za-z$_]*\",n={keyword:\"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await static import from as\",literal:\"true false null undefined NaN Infinity\",built_in:\"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise\"},s={cN:\"number\",v:[{b:\"\\\\b(0[bB][01]+)n?\"},{b:\"\\\\b(0[oO][0-7]+)n?\"},{b:e.CNR+\"n?\"}],relevance:0},o={cN:\"subst\",b:\"\\\\$\\\\{\",e:\"\\\\}\",k:n,c:[]},i={b:\"html`\",e:\"\",starts:{e:\"`\",rE:!1,c:[e.BE,o],sL:\"xml\"}},b={b:\"css`\",e:\"\",starts:{e:\"`\",rE:!1,c:[e.BE,o],sL:\"css\"}},l={cN:\"string\",b:\"`\",e:\"`\",c:[e.BE,o]};o.c=[e.ASM,e.QSM,i,b,l,s,e.RM];var u=o.c.concat([e.CBCM,e.CLCM]);return{aliases:[\"js\",\"jsx\",\"mjs\",\"cjs\"],k:n,c:[{cN:\"meta\",relevance:10,b:/^\\s*['\"]use (strict|asm)['\"]/},{cN:\"meta\",b:/^#!/,e:/$/},e.ASM,e.QSM,i,b,l,e.CLCM,e.C(\"/\\\\*\\\\*\",\"\\\\*/\",{relevance:0,c:[{cN:\"doctag\",b:\"@[A-Za-z]+\",c:[{cN:\"type\",b:\"\\\\{\",e:\"\\\\}\",relevance:0},{cN:\"variable\",b:c+\"(?=\\\\s*(-)|$)\",endsParent:!0,relevance:0},{b:/(?=[^\\n])\\s/,relevance:0}]}]}),e.CBCM,s,{b:/[{,\\n]\\s*/,relevance:0,c:[{b:c+\"\\\\s*:\",rB:!0,relevance:0,c:[{cN:\"attr\",b:c,relevance:0}]}]},{b:\"(\"+e.RSR+\"|\\\\b(case|return|throw)\\\\b)\\\\s*\",k:\"return throw case\",c:[e.CLCM,e.CBCM,e.RM,{cN:\"function\",b:\"(\\\\(.*?\\\\)|\"+c+\")\\\\s*=>\",rB:!0,e:\"\\\\s*=>\",c:[{cN:\"params\",v:[{b:c},{b:/\\(\\s*\\)/},{b:/\\(/,e:/\\)/,eB:!0,eE:!0,k:n,c:u}]}]},{cN:\"\",b:/\\s/,e:/\\s*/,skip:!0},{v:[{b:r,e:a},{b:t.b,e:t.e}],sL:\"xml\",c:[{b:t.b,e:t.e,skip:!0,c:[\"self\"]}]}],relevance:0},{cN:\"function\",bK:\"function\",e:/\\{/,eE:!0,c:[e.inherit(e.TM,{b:c}),{cN:\"params\",b:/\\(/,e:/\\)/,eB:!0,eE:!0,c:u}],i:/\\[|%/},{b:/\\$[(.]/},e.METHOD_GUARD,{cN:\"class\",bK:\"class\",e:/[{;=]/,eE:!0,i:/[:\"\\[\\]]/,c:[{bK:\"extends\"},e.UTM]},{bK:\"constructor get set\",e:/\\{/,eE:!0}],i:/#(?!!)/}});hljs.registerLanguage(\"scss\",function(e){var t=\"@[a-z-]+\",r={cN:\"variable\",b:\"(\\\\$[a-zA-Z-][a-zA-Z0-9_-]*)\\\\b\"},i={cN:\"number\",b:\"#[0-9A-Fa-f]+\"};e.CSSNM,e.QSM,e.ASM,e.CBCM;return{cI:!0,i:\"[=/|']\",c:[e.CLCM,e.CBCM,{cN:\"selector-id\",b:\"\\\\#[A-Za-z0-9_-]+\",relevance:0},{cN:\"selector-class\",b:\"\\\\.[A-Za-z0-9_-]+\",relevance:0},{cN:\"selector-attr\",b:\"\\\\[\",e:\"\\\\]\",i:\"$\"},{cN:\"selector-tag\",b:\"\\\\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figcaption|figure|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\\\\b\",relevance:0},{cN:\"selector-pseudo\",b:\":(visited|valid|root|right|required|read-write|read-only|out-range|optional|only-of-type|only-child|nth-of-type|nth-last-of-type|nth-last-child|nth-child|not|link|left|last-of-type|last-child|lang|invalid|indeterminate|in-range|hover|focus|first-of-type|first-line|first-letter|first-child|first|enabled|empty|disabled|default|checked|before|after|active)\"},{cN:\"selector-pseudo\",b:\"::(after|before|choices|first-letter|first-line|repeat-index|repeat-item|selection|value)\"},r,{cN:\"attribute\",b:\"\\\\b(src|z-index|word-wrap|word-spacing|word-break|width|widows|white-space|visibility|vertical-align|unicode-bidi|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform-style|transform-origin|transform|top|text-underline-position|text-transform|text-shadow|text-rendering|text-overflow|text-indent|text-decoration-style|text-decoration-line|text-decoration-color|text-decoration|text-align-last|text-align|tab-size|table-layout|right|resize|quotes|position|pointer-events|perspective-origin|perspective|page-break-inside|page-break-before|page-break-after|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-y|overflow-x|overflow-wrap|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|order|opacity|object-position|object-fit|normal|none|nav-up|nav-right|nav-left|nav-index|nav-down|min-width|min-height|max-width|max-height|mask|marks|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|letter-spacing|left|justify-content|initial|inherit|ime-mode|image-orientation|image-resolution|image-rendering|icon|hyphens|height|font-weight|font-variant-ligatures|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-language-override|font-kerning|font-feature-settings|font-family|font|float|flex-wrap|flex-shrink|flex-grow|flex-flow|flex-direction|flex-basis|flex|filter|empty-cells|display|direction|cursor|counter-reset|counter-increment|content|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|columns|color|clip-path|clip|clear|caption-side|break-inside|break-before|break-after|box-sizing|box-shadow|box-decoration-break|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-left-width|border-left-style|border-left-color|border-left|border-image-width|border-image-source|border-image-slice|border-image-repeat|border-image-outset|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-attachment|background-blend-mode|background|backface-visibility|auto|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-fill-mode|animation-duration|animation-direction|animation-delay|animation|align-self|align-items|align-content)\\\\b\",i:\"[^\\\\s]\"},{b:\"\\\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\\\b\"},{b:\":\",e:\";\",c:[r,i,e.CSSNM,e.QSM,e.ASM,{cN:\"meta\",b:\"!important\"}]},{b:\"@(page|font-face)\",l:t,k:\"@page @font-face\"},{b:\"@\",e:\"[{;]\",rB:!0,k:\"and or not only\",c:[{b:t,cN:\"keyword\"},r,e.QSM,e.ASM,i,e.CSSNM]}]}});hljs.registerLanguage(\"perl\",function(e){var t=\"getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when\",r={cN:\"subst\",b:\"[$@]\\\\{\",e:\"\\\\}\",k:t},s={b:\"->{\",e:\"}\"},n={v:[{b:/\\$\\d/},{b:/[\\$%@](\\^\\w\\b|#\\w+(::\\w+)*|{\\w+}|\\w+(::\\w*)*)/},{b:/[\\$%@][^\\s\\w{]/,relevance:0}]},c=[e.BE,r,n],a=[n,e.HCM,e.C(\"^\\\\=\\\\w\",\"\\\\=cut\",{eW:!0}),s,{cN:\"string\",c:c,v:[{b:\"q[qwxr]?\\\\s*\\\\(\",e:\"\\\\)\",relevance:5},{b:\"q[qwxr]?\\\\s*\\\\[\",e:\"\\\\]\",relevance:5},{b:\"q[qwxr]?\\\\s*\\\\{\",e:\"\\\\}\",relevance:5},{b:\"q[qwxr]?\\\\s*\\\\|\",e:\"\\\\|\",relevance:5},{b:\"q[qwxr]?\\\\s*\\\\<\",e:\"\\\\>\",relevance:5},{b:\"qw\\\\s+q\",e:\"q\",relevance:5},{b:\"'\",e:\"'\",c:[e.BE]},{b:'\"',e:'\"'},{b:\"`\",e:\"`\",c:[e.BE]},{b:\"{\\\\w+}\",c:[],relevance:0},{b:\"-?\\\\w+\\\\s*\\\\=\\\\>\",c:[],relevance:0}]},{cN:\"number\",b:\"(\\\\b0[0-7_]+)|(\\\\b0x[0-9a-fA-F_]+)|(\\\\b[1-9][0-9_]*(\\\\.[0-9_]+)?)|[0_]\\\\b\",relevance:0},{b:\"(\\\\/\\\\/|\"+e.RSR+\"|\\\\b(split|return|print|reverse|grep)\\\\b)\\\\s*\",k:\"split return print reverse grep\",relevance:0,c:[e.HCM,{cN:\"regexp\",b:\"(s|tr|y)/(\\\\\\\\.|[^/])*/(\\\\\\\\.|[^/])*/[a-z]*\",relevance:10},{cN:\"regexp\",b:\"(m|qr)?/\",e:\"/[a-z]*\",c:[e.BE],relevance:0}]},{cN:\"function\",bK:\"sub\",e:\"(\\\\s*\\\\(.*?\\\\))?[;{]\",eE:!0,relevance:5,c:[e.TM]},{b:\"-\\\\w\\\\b\",relevance:0},{b:\"^__DATA__$\",e:\"^__END__$\",sL:\"mojolicious\",c:[{b:\"^@@.*\",e:\"$\",cN:\"comment\"}]}];return r.c=a,{aliases:[\"pl\",\"pm\"],l:/[\\w\\.]+/,k:t,c:s.c=a}});hljs.registerLanguage(\"go\",function(e){var n={keyword:\"break default func interface select case map struct chan else goto package switch const fallthrough if range type continue for import return var go defer bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 uint16 uint32 uint64 int uint uintptr rune\",literal:\"true false iota nil\",built_in:\"append cap close complex copy imag len make new panic print println real recover delete\"};return{aliases:[\"golang\"],k:n,i:\"</\",c:[e.CLCM,e.CBCM,{cN:\"string\",v:[e.QSM,e.ASM,{b:\"`\",e:\"`\"}]},{cN:\"number\",v:[{b:e.CNR+\"[i]\",relevance:1},e.CNM]},{b:/:=/},{cN:\"function\",bK:\"func\",e:\"\\\\s*(\\\\{|$)\",eE:!0,c:[e.TM,{cN:\"params\",b:/\\(/,e:/\\)/,k:n,i:/[\"']/}]}]}});hljs.registerLanguage(\"x86asm\",function(s){return{cI:!0,l:\"[.%]?\"+s.IR,k:{keyword:\"lock rep repe repz repne repnz xaquire xrelease bnd nobnd aaa aad aam aas adc add and arpl bb0_reset bb1_reset bound bsf bsr bswap bt btc btr bts call cbw cdq cdqe clc cld cli clts cmc cmp cmpsb cmpsd cmpsq cmpsw cmpxchg cmpxchg486 cmpxchg8b cmpxchg16b cpuid cpu_read cpu_write cqo cwd cwde daa das dec div dmint emms enter equ f2xm1 fabs fadd faddp fbld fbstp fchs fclex fcmovb fcmovbe fcmove fcmovnb fcmovnbe fcmovne fcmovnu fcmovu fcom fcomi fcomip fcomp fcompp fcos fdecstp fdisi fdiv fdivp fdivr fdivrp femms feni ffree ffreep fiadd ficom ficomp fidiv fidivr fild fimul fincstp finit fist fistp fisttp fisub fisubr fld fld1 fldcw fldenv fldl2e fldl2t fldlg2 fldln2 fldpi fldz fmul fmulp fnclex fndisi fneni fninit fnop fnsave fnstcw fnstenv fnstsw fpatan fprem fprem1 fptan frndint frstor fsave fscale fsetpm fsin fsincos fsqrt fst fstcw fstenv fstp fstsw fsub fsubp fsubr fsubrp ftst fucom fucomi fucomip fucomp fucompp fxam fxch fxtract fyl2x fyl2xp1 hlt ibts icebp idiv imul in inc incbin insb insd insw int int01 int1 int03 int3 into invd invpcid invlpg invlpga iret iretd iretq iretw jcxz jecxz jrcxz jmp jmpe lahf lar lds lea leave les lfence lfs lgdt lgs lidt lldt lmsw loadall loadall286 lodsb lodsd lodsq lodsw loop loope loopne loopnz loopz lsl lss ltr mfence monitor mov movd movq movsb movsd movsq movsw movsx movsxd movzx mul mwait neg nop not or out outsb outsd outsw packssdw packsswb packuswb paddb paddd paddsb paddsiw paddsw paddusb paddusw paddw pand pandn pause paveb pavgusb pcmpeqb pcmpeqd pcmpeqw pcmpgtb pcmpgtd pcmpgtw pdistib pf2id pfacc pfadd pfcmpeq pfcmpge pfcmpgt pfmax pfmin pfmul pfrcp pfrcpit1 pfrcpit2 pfrsqit1 pfrsqrt pfsub pfsubr pi2fd pmachriw pmaddwd pmagw pmulhriw pmulhrwa pmulhrwc pmulhw pmullw pmvgezb pmvlzb pmvnzb pmvzb pop popa popad popaw popf popfd popfq popfw por prefetch prefetchw pslld psllq psllw psrad psraw psrld psrlq psrlw psubb psubd psubsb psubsiw psubsw psubusb psubusw psubw punpckhbw punpckhdq punpckhwd punpcklbw punpckldq punpcklwd push pusha pushad pushaw pushf pushfd pushfq pushfw pxor rcl rcr rdshr rdmsr rdpmc rdtsc rdtscp ret retf retn rol ror rdm rsdc rsldt rsm rsts sahf sal salc sar sbb scasb scasd scasq scasw sfence sgdt shl shld shr shrd sidt sldt skinit smi smint smintold smsw stc std sti stosb stosd stosq stosw str sub svdc svldt svts swapgs syscall sysenter sysexit sysret test ud0 ud1 ud2b ud2 ud2a umov verr verw fwait wbinvd wrshr wrmsr xadd xbts xchg xlatb xlat xor cmove cmovz cmovne cmovnz cmova cmovnbe cmovae cmovnb cmovb cmovnae cmovbe cmovna cmovg cmovnle cmovge cmovnl cmovl cmovnge cmovle cmovng cmovc cmovnc cmovo cmovno cmovs cmovns cmovp cmovpe cmovnp cmovpo je jz jne jnz ja jnbe jae jnb jb jnae jbe jna jg jnle jge jnl jl jnge jle jng jc jnc jo jno js jns jpo jnp jpe jp sete setz setne setnz seta setnbe setae setnb setnc setb setnae setcset setbe setna setg setnle setge setnl setl setnge setle setng sets setns seto setno setpe setp setpo setnp addps addss andnps andps cmpeqps cmpeqss cmpleps cmpless cmpltps cmpltss cmpneqps cmpneqss cmpnleps cmpnless cmpnltps cmpnltss cmpordps cmpordss cmpunordps cmpunordss cmpps cmpss comiss cvtpi2ps cvtps2pi cvtsi2ss cvtss2si cvttps2pi cvttss2si divps divss ldmxcsr maxps maxss minps minss movaps movhps movlhps movlps movhlps movmskps movntps movss movups mulps mulss orps rcpps rcpss rsqrtps rsqrtss shufps sqrtps sqrtss stmxcsr subps subss ucomiss unpckhps unpcklps xorps fxrstor fxrstor64 fxsave fxsave64 xgetbv xsetbv xsave xsave64 xsaveopt xsaveopt64 xrstor xrstor64 prefetchnta prefetcht0 prefetcht1 prefetcht2 maskmovq movntq pavgb pavgw pextrw pinsrw pmaxsw pmaxub pminsw pminub pmovmskb pmulhuw psadbw pshufw pf2iw pfnacc pfpnacc pi2fw pswapd maskmovdqu clflush movntdq movnti movntpd movdqa movdqu movdq2q movq2dq paddq pmuludq pshufd pshufhw pshuflw pslldq psrldq psubq punpckhqdq punpcklqdq addpd addsd andnpd andpd cmpeqpd cmpeqsd cmplepd cmplesd cmpltpd cmpltsd cmpneqpd cmpneqsd cmpnlepd cmpnlesd cmpnltpd cmpnltsd cmpordpd cmpordsd cmpunordpd cmpunordsd cmppd comisd cvtdq2pd cvtdq2ps cvtpd2dq cvtpd2pi cvtpd2ps cvtpi2pd cvtps2dq cvtps2pd cvtsd2si cvtsd2ss cvtsi2sd cvtss2sd cvttpd2pi cvttpd2dq cvttps2dq cvttsd2si divpd divsd maxpd maxsd minpd minsd movapd movhpd movlpd movmskpd movupd mulpd mulsd orpd shufpd sqrtpd sqrtsd subpd subsd ucomisd unpckhpd unpcklpd xorpd addsubpd addsubps haddpd haddps hsubpd hsubps lddqu movddup movshdup movsldup clgi stgi vmcall vmclear vmfunc vmlaunch vmload vmmcall vmptrld vmptrst vmread vmresume vmrun vmsave vmwrite vmxoff vmxon invept invvpid pabsb pabsw pabsd palignr phaddw phaddd phaddsw phsubw phsubd phsubsw pmaddubsw pmulhrsw pshufb psignb psignw psignd extrq insertq movntsd movntss lzcnt blendpd blendps blendvpd blendvps dppd dpps extractps insertps movntdqa mpsadbw packusdw pblendvb pblendw pcmpeqq pextrb pextrd pextrq phminposuw pinsrb pinsrd pinsrq pmaxsb pmaxsd pmaxud pmaxuw pminsb pminsd pminud pminuw pmovsxbw pmovsxbd pmovsxbq pmovsxwd pmovsxwq pmovsxdq pmovzxbw pmovzxbd pmovzxbq pmovzxwd pmovzxwq pmovzxdq pmuldq pmulld ptest roundpd roundps roundsd roundss crc32 pcmpestri pcmpestrm pcmpistri pcmpistrm pcmpgtq popcnt getsec pfrcpv pfrsqrtv movbe aesenc aesenclast aesdec aesdeclast aesimc aeskeygenassist vaesenc vaesenclast vaesdec vaesdeclast vaesimc vaeskeygenassist vaddpd vaddps vaddsd vaddss vaddsubpd vaddsubps vandpd vandps vandnpd vandnps vblendpd vblendps vblendvpd vblendvps vbroadcastss vbroadcastsd vbroadcastf128 vcmpeq_ospd vcmpeqpd vcmplt_ospd vcmpltpd vcmple_ospd vcmplepd vcmpunord_qpd vcmpunordpd vcmpneq_uqpd vcmpneqpd vcmpnlt_uspd vcmpnltpd vcmpnle_uspd vcmpnlepd vcmpord_qpd vcmpordpd vcmpeq_uqpd vcmpnge_uspd vcmpngepd vcmpngt_uspd vcmpngtpd vcmpfalse_oqpd vcmpfalsepd vcmpneq_oqpd vcmpge_ospd vcmpgepd vcmpgt_ospd vcmpgtpd vcmptrue_uqpd vcmptruepd vcmplt_oqpd vcmple_oqpd vcmpunord_spd vcmpneq_uspd vcmpnlt_uqpd vcmpnle_uqpd vcmpord_spd vcmpeq_uspd vcmpnge_uqpd vcmpngt_uqpd vcmpfalse_ospd vcmpneq_ospd vcmpge_oqpd vcmpgt_oqpd vcmptrue_uspd vcmppd vcmpeq_osps vcmpeqps vcmplt_osps vcmpltps vcmple_osps vcmpleps vcmpunord_qps vcmpunordps vcmpneq_uqps vcmpneqps vcmpnlt_usps vcmpnltps vcmpnle_usps vcmpnleps vcmpord_qps vcmpordps vcmpeq_uqps vcmpnge_usps vcmpngeps vcmpngt_usps vcmpngtps vcmpfalse_oqps vcmpfalseps vcmpneq_oqps vcmpge_osps vcmpgeps vcmpgt_osps vcmpgtps vcmptrue_uqps vcmptrueps vcmplt_oqps vcmple_oqps vcmpunord_sps vcmpneq_usps vcmpnlt_uqps vcmpnle_uqps vcmpord_sps vcmpeq_usps vcmpnge_uqps vcmpngt_uqps vcmpfalse_osps vcmpneq_osps vcmpge_oqps vcmpgt_oqps vcmptrue_usps vcmpps vcmpeq_ossd vcmpeqsd vcmplt_ossd vcmpltsd vcmple_ossd vcmplesd vcmpunord_qsd vcmpunordsd vcmpneq_uqsd vcmpneqsd vcmpnlt_ussd vcmpnltsd vcmpnle_ussd vcmpnlesd vcmpord_qsd vcmpordsd vcmpeq_uqsd vcmpnge_ussd vcmpngesd vcmpngt_ussd vcmpngtsd vcmpfalse_oqsd vcmpfalsesd vcmpneq_oqsd vcmpge_ossd vcmpgesd vcmpgt_ossd vcmpgtsd vcmptrue_uqsd vcmptruesd vcmplt_oqsd vcmple_oqsd vcmpunord_ssd vcmpneq_ussd vcmpnlt_uqsd vcmpnle_uqsd vcmpord_ssd vcmpeq_ussd vcmpnge_uqsd vcmpngt_uqsd vcmpfalse_ossd vcmpneq_ossd vcmpge_oqsd vcmpgt_oqsd vcmptrue_ussd vcmpsd vcmpeq_osss vcmpeqss vcmplt_osss vcmpltss vcmple_osss vcmpless vcmpunord_qss vcmpunordss vcmpneq_uqss vcmpneqss vcmpnlt_usss vcmpnltss vcmpnle_usss vcmpnless vcmpord_qss vcmpordss vcmpeq_uqss vcmpnge_usss vcmpngess vcmpngt_usss vcmpngtss vcmpfalse_oqss vcmpfalsess vcmpneq_oqss vcmpge_osss vcmpgess vcmpgt_osss vcmpgtss vcmptrue_uqss vcmptruess vcmplt_oqss vcmple_oqss vcmpunord_sss vcmpneq_usss vcmpnlt_uqss vcmpnle_uqss vcmpord_sss vcmpeq_usss vcmpnge_uqss vcmpngt_uqss vcmpfalse_osss vcmpneq_osss vcmpge_oqss vcmpgt_oqss vcmptrue_usss vcmpss vcomisd vcomiss vcvtdq2pd vcvtdq2ps vcvtpd2dq vcvtpd2ps vcvtps2dq vcvtps2pd vcvtsd2si vcvtsd2ss vcvtsi2sd vcvtsi2ss vcvtss2sd vcvtss2si vcvttpd2dq vcvttps2dq vcvttsd2si vcvttss2si vdivpd vdivps vdivsd vdivss vdppd vdpps vextractf128 vextractps vhaddpd vhaddps vhsubpd vhsubps vinsertf128 vinsertps vlddqu vldqqu vldmxcsr vmaskmovdqu vmaskmovps vmaskmovpd vmaxpd vmaxps vmaxsd vmaxss vminpd vminps vminsd vminss vmovapd vmovaps vmovd vmovq vmovddup vmovdqa vmovqqa vmovdqu vmovqqu vmovhlps vmovhpd vmovhps vmovlhps vmovlpd vmovlps vmovmskpd vmovmskps vmovntdq vmovntqq vmovntdqa vmovntpd vmovntps vmovsd vmovshdup vmovsldup vmovss vmovupd vmovups vmpsadbw vmulpd vmulps vmulsd vmulss vorpd vorps vpabsb vpabsw vpabsd vpacksswb vpackssdw vpackuswb vpackusdw vpaddb vpaddw vpaddd vpaddq vpaddsb vpaddsw vpaddusb vpaddusw vpalignr vpand vpandn vpavgb vpavgw vpblendvb vpblendw vpcmpestri vpcmpestrm vpcmpistri vpcmpistrm vpcmpeqb vpcmpeqw vpcmpeqd vpcmpeqq vpcmpgtb vpcmpgtw vpcmpgtd vpcmpgtq vpermilpd vpermilps vperm2f128 vpextrb vpextrw vpextrd vpextrq vphaddw vphaddd vphaddsw vphminposuw vphsubw vphsubd vphsubsw vpinsrb vpinsrw vpinsrd vpinsrq vpmaddwd vpmaddubsw vpmaxsb vpmaxsw vpmaxsd vpmaxub vpmaxuw vpmaxud vpminsb vpminsw vpminsd vpminub vpminuw vpminud vpmovmskb vpmovsxbw vpmovsxbd vpmovsxbq vpmovsxwd vpmovsxwq vpmovsxdq vpmovzxbw vpmovzxbd vpmovzxbq vpmovzxwd vpmovzxwq vpmovzxdq vpmulhuw vpmulhrsw vpmulhw vpmullw vpmulld vpmuludq vpmuldq vpor vpsadbw vpshufb vpshufd vpshufhw vpshuflw vpsignb vpsignw vpsignd vpslldq vpsrldq vpsllw vpslld vpsllq vpsraw vpsrad vpsrlw vpsrld vpsrlq vptest vpsubb vpsubw vpsubd vpsubq vpsubsb vpsubsw vpsubusb vpsubusw vpunpckhbw vpunpckhwd vpunpckhdq vpunpckhqdq vpunpcklbw vpunpcklwd vpunpckldq vpunpcklqdq vpxor vrcpps vrcpss vrsqrtps vrsqrtss vroundpd vroundps vroundsd vroundss vshufpd vshufps vsqrtpd vsqrtps vsqrtsd vsqrtss vstmxcsr vsubpd vsubps vsubsd vsubss vtestps vtestpd vucomisd vucomiss vunpckhpd vunpckhps vunpcklpd vunpcklps vxorpd vxorps vzeroall vzeroupper pclmullqlqdq pclmulhqlqdq pclmullqhqdq pclmulhqhqdq pclmulqdq vpclmullqlqdq vpclmulhqlqdq vpclmullqhqdq vpclmulhqhqdq vpclmulqdq vfmadd132ps vfmadd132pd vfmadd312ps vfmadd312pd vfmadd213ps vfmadd213pd vfmadd123ps vfmadd123pd vfmadd231ps vfmadd231pd vfmadd321ps vfmadd321pd vfmaddsub132ps vfmaddsub132pd vfmaddsub312ps vfmaddsub312pd vfmaddsub213ps vfmaddsub213pd vfmaddsub123ps vfmaddsub123pd vfmaddsub231ps vfmaddsub231pd vfmaddsub321ps vfmaddsub321pd vfmsub132ps vfmsub132pd vfmsub312ps vfmsub312pd vfmsub213ps vfmsub213pd vfmsub123ps vfmsub123pd vfmsub231ps vfmsub231pd vfmsub321ps vfmsub321pd vfmsubadd132ps vfmsubadd132pd vfmsubadd312ps vfmsubadd312pd vfmsubadd213ps vfmsubadd213pd vfmsubadd123ps vfmsubadd123pd vfmsubadd231ps vfmsubadd231pd vfmsubadd321ps vfmsubadd321pd vfnmadd132ps vfnmadd132pd vfnmadd312ps vfnmadd312pd vfnmadd213ps vfnmadd213pd vfnmadd123ps vfnmadd123pd vfnmadd231ps vfnmadd231pd vfnmadd321ps vfnmadd321pd vfnmsub132ps vfnmsub132pd vfnmsub312ps vfnmsub312pd vfnmsub213ps vfnmsub213pd vfnmsub123ps vfnmsub123pd vfnmsub231ps vfnmsub231pd vfnmsub321ps vfnmsub321pd vfmadd132ss vfmadd132sd vfmadd312ss vfmadd312sd vfmadd213ss vfmadd213sd vfmadd123ss vfmadd123sd vfmadd231ss vfmadd231sd vfmadd321ss vfmadd321sd vfmsub132ss vfmsub132sd vfmsub312ss vfmsub312sd vfmsub213ss vfmsub213sd vfmsub123ss vfmsub123sd vfmsub231ss vfmsub231sd vfmsub321ss vfmsub321sd vfnmadd132ss vfnmadd132sd vfnmadd312ss vfnmadd312sd vfnmadd213ss vfnmadd213sd vfnmadd123ss vfnmadd123sd vfnmadd231ss vfnmadd231sd vfnmadd321ss vfnmadd321sd vfnmsub132ss vfnmsub132sd vfnmsub312ss vfnmsub312sd vfnmsub213ss vfnmsub213sd vfnmsub123ss vfnmsub123sd vfnmsub231ss vfnmsub231sd vfnmsub321ss vfnmsub321sd rdfsbase rdgsbase rdrand wrfsbase wrgsbase vcvtph2ps vcvtps2ph adcx adox rdseed clac stac xstore xcryptecb xcryptcbc xcryptctr xcryptcfb xcryptofb montmul xsha1 xsha256 llwpcb slwpcb lwpval lwpins vfmaddpd vfmaddps vfmaddsd vfmaddss vfmaddsubpd vfmaddsubps vfmsubaddpd vfmsubaddps vfmsubpd vfmsubps vfmsubsd vfmsubss vfnmaddpd vfnmaddps vfnmaddsd vfnmaddss vfnmsubpd vfnmsubps vfnmsubsd vfnmsubss vfrczpd vfrczps vfrczsd vfrczss vpcmov vpcomb vpcomd vpcomq vpcomub vpcomud vpcomuq vpcomuw vpcomw vphaddbd vphaddbq vphaddbw vphadddq vphaddubd vphaddubq vphaddubw vphaddudq vphadduwd vphadduwq vphaddwd vphaddwq vphsubbw vphsubdq vphsubwd vpmacsdd vpmacsdqh vpmacsdql vpmacssdd vpmacssdqh vpmacssdql vpmacsswd vpmacssww vpmacswd vpmacsww vpmadcsswd vpmadcswd vpperm vprotb vprotd vprotq vprotw vpshab vpshad vpshaq vpshaw vpshlb vpshld vpshlq vpshlw vbroadcasti128 vpblendd vpbroadcastb vpbroadcastw vpbroadcastd vpbroadcastq vpermd vpermpd vpermps vpermq vperm2i128 vextracti128 vinserti128 vpmaskmovd vpmaskmovq vpsllvd vpsllvq vpsravd vpsrlvd vpsrlvq vgatherdpd vgatherqpd vgatherdps vgatherqps vpgatherdd vpgatherqd vpgatherdq vpgatherqq xabort xbegin xend xtest andn bextr blci blcic blsi blsic blcfill blsfill blcmsk blsmsk blsr blcs bzhi mulx pdep pext rorx sarx shlx shrx tzcnt tzmsk t1mskc valignd valignq vblendmpd vblendmps vbroadcastf32x4 vbroadcastf64x4 vbroadcasti32x4 vbroadcasti64x4 vcompresspd vcompressps vcvtpd2udq vcvtps2udq vcvtsd2usi vcvtss2usi vcvttpd2udq vcvttps2udq vcvttsd2usi vcvttss2usi vcvtudq2pd vcvtudq2ps vcvtusi2sd vcvtusi2ss vexpandpd vexpandps vextractf32x4 vextractf64x4 vextracti32x4 vextracti64x4 vfixupimmpd vfixupimmps vfixupimmsd vfixupimmss vgetexppd vgetexpps vgetexpsd vgetexpss vgetmantpd vgetmantps vgetmantsd vgetmantss vinsertf32x4 vinsertf64x4 vinserti32x4 vinserti64x4 vmovdqa32 vmovdqa64 vmovdqu32 vmovdqu64 vpabsq vpandd vpandnd vpandnq vpandq vpblendmd vpblendmq vpcmpltd vpcmpled vpcmpneqd vpcmpnltd vpcmpnled vpcmpd vpcmpltq vpcmpleq vpcmpneqq vpcmpnltq vpcmpnleq vpcmpq vpcmpequd vpcmpltud vpcmpleud vpcmpnequd vpcmpnltud vpcmpnleud vpcmpud vpcmpequq vpcmpltuq vpcmpleuq vpcmpnequq vpcmpnltuq vpcmpnleuq vpcmpuq vpcompressd vpcompressq vpermi2d vpermi2pd vpermi2ps vpermi2q vpermt2d vpermt2pd vpermt2ps vpermt2q vpexpandd vpexpandq vpmaxsq vpmaxuq vpminsq vpminuq vpmovdb vpmovdw vpmovqb vpmovqd vpmovqw vpmovsdb vpmovsdw vpmovsqb vpmovsqd vpmovsqw vpmovusdb vpmovusdw vpmovusqb vpmovusqd vpmovusqw vpord vporq vprold vprolq vprolvd vprolvq vprord vprorq vprorvd vprorvq vpscatterdd vpscatterdq vpscatterqd vpscatterqq vpsraq vpsravq vpternlogd vpternlogq vptestmd vptestmq vptestnmd vptestnmq vpxord vpxorq vrcp14pd vrcp14ps vrcp14sd vrcp14ss vrndscalepd vrndscaleps vrndscalesd vrndscaless vrsqrt14pd vrsqrt14ps vrsqrt14sd vrsqrt14ss vscalefpd vscalefps vscalefsd vscalefss vscatterdpd vscatterdps vscatterqpd vscatterqps vshuff32x4 vshuff64x2 vshufi32x4 vshufi64x2 kandnw kandw kmovw knotw kortestw korw kshiftlw kshiftrw kunpckbw kxnorw kxorw vpbroadcastmb2q vpbroadcastmw2d vpconflictd vpconflictq vplzcntd vplzcntq vexp2pd vexp2ps vrcp28pd vrcp28ps vrcp28sd vrcp28ss vrsqrt28pd vrsqrt28ps vrsqrt28sd vrsqrt28ss vgatherpf0dpd vgatherpf0dps vgatherpf0qpd vgatherpf0qps vgatherpf1dpd vgatherpf1dps vgatherpf1qpd vgatherpf1qps vscatterpf0dpd vscatterpf0dps vscatterpf0qpd vscatterpf0qps vscatterpf1dpd vscatterpf1dps vscatterpf1qpd vscatterpf1qps prefetchwt1 bndmk bndcl bndcu bndcn bndmov bndldx bndstx sha1rnds4 sha1nexte sha1msg1 sha1msg2 sha256rnds2 sha256msg1 sha256msg2 hint_nop0 hint_nop1 hint_nop2 hint_nop3 hint_nop4 hint_nop5 hint_nop6 hint_nop7 hint_nop8 hint_nop9 hint_nop10 hint_nop11 hint_nop12 hint_nop13 hint_nop14 hint_nop15 hint_nop16 hint_nop17 hint_nop18 hint_nop19 hint_nop20 hint_nop21 hint_nop22 hint_nop23 hint_nop24 hint_nop25 hint_nop26 hint_nop27 hint_nop28 hint_nop29 hint_nop30 hint_nop31 hint_nop32 hint_nop33 hint_nop34 hint_nop35 hint_nop36 hint_nop37 hint_nop38 hint_nop39 hint_nop40 hint_nop41 hint_nop42 hint_nop43 hint_nop44 hint_nop45 hint_nop46 hint_nop47 hint_nop48 hint_nop49 hint_nop50 hint_nop51 hint_nop52 hint_nop53 hint_nop54 hint_nop55 hint_nop56 hint_nop57 hint_nop58 hint_nop59 hint_nop60 hint_nop61 hint_nop62 hint_nop63\",built_in:\"ip eip rip al ah bl bh cl ch dl dh sil dil bpl spl r8b r9b r10b r11b r12b r13b r14b r15b ax bx cx dx si di bp sp r8w r9w r10w r11w r12w r13w r14w r15w eax ebx ecx edx esi edi ebp esp eip r8d r9d r10d r11d r12d r13d r14d r15d rax rbx rcx rdx rsi rdi rbp rsp r8 r9 r10 r11 r12 r13 r14 r15 cs ds es fs gs ss st st0 st1 st2 st3 st4 st5 st6 st7 mm0 mm1 mm2 mm3 mm4 mm5 mm6 mm7 xmm0 xmm1 xmm2 xmm3 xmm4 xmm5 xmm6 xmm7 xmm8 xmm9 xmm10 xmm11 xmm12 xmm13 xmm14 xmm15 xmm16 xmm17 xmm18 xmm19 xmm20 xmm21 xmm22 xmm23 xmm24 xmm25 xmm26 xmm27 xmm28 xmm29 xmm30 xmm31 ymm0 ymm1 ymm2 ymm3 ymm4 ymm5 ymm6 ymm7 ymm8 ymm9 ymm10 ymm11 ymm12 ymm13 ymm14 ymm15 ymm16 ymm17 ymm18 ymm19 ymm20 ymm21 ymm22 ymm23 ymm24 ymm25 ymm26 ymm27 ymm28 ymm29 ymm30 ymm31 zmm0 zmm1 zmm2 zmm3 zmm4 zmm5 zmm6 zmm7 zmm8 zmm9 zmm10 zmm11 zmm12 zmm13 zmm14 zmm15 zmm16 zmm17 zmm18 zmm19 zmm20 zmm21 zmm22 zmm23 zmm24 zmm25 zmm26 zmm27 zmm28 zmm29 zmm30 zmm31 k0 k1 k2 k3 k4 k5 k6 k7 bnd0 bnd1 bnd2 bnd3 cr0 cr1 cr2 cr3 cr4 cr8 dr0 dr1 dr2 dr3 dr8 tr3 tr4 tr5 tr6 tr7 r0 r1 r2 r3 r4 r5 r6 r7 r0b r1b r2b r3b r4b r5b r6b r7b r0w r1w r2w r3w r4w r5w r6w r7w r0d r1d r2d r3d r4d r5d r6d r7d r0h r1h r2h r3h r0l r1l r2l r3l r4l r5l r6l r7l r8l r9l r10l r11l r12l r13l r14l r15l db dw dd dq dt ddq do dy dz resb resw resd resq rest resdq reso resy resz incbin equ times byte word dword qword nosplit rel abs seg wrt strict near far a32 ptr\",meta:\"%define %xdefine %+ %undef %defstr %deftok %assign %strcat %strlen %substr %rotate %elif %else %endif %if %ifmacro %ifctx %ifidn %ifidni %ifid %ifnum %ifstr %iftoken %ifempty %ifenv %error %warning %fatal %rep %endrep %include %push %pop %repl %pathsearch %depend %use %arg %stacksize %local %line %comment %endcomment .nolist __FILE__ __LINE__ __SECT__ __BITS__ __OUTPUT_FORMAT__ __DATE__ __TIME__ __DATE_NUM__ __TIME_NUM__ __UTC_DATE__ __UTC_TIME__ __UTC_DATE_NUM__ __UTC_TIME_NUM__ __PASS__ struc endstruc istruc at iend align alignb sectalign daz nodaz up down zero default option assume public bits use16 use32 use64 default section segment absolute extern global common cpu float __utf16__ __utf16le__ __utf16be__ __utf32__ __utf32le__ __utf32be__ __float8__ __float16__ __float32__ __float64__ __float80m__ __float80e__ __float128l__ __float128h__ __Infinity__ __QNaN__ __SNaN__ Inf NaN QNaN SNaN float8 float16 float32 float64 float80m float80e float128l float128h __FLOAT_DAZ__ __FLOAT_ROUND__ __FLOAT__\"},c:[s.C(\";\",\"$\",{relevance:0}),{cN:\"number\",v:[{b:\"\\\\b(?:([0-9][0-9_]*)?\\\\.[0-9_]*(?:[eE][+-]?[0-9_]+)?|(0[Xx])?[0-9][0-9_]*\\\\.?[0-9_]*(?:[pP](?:[+-]?[0-9_]+)?)?)\\\\b\",relevance:0},{b:\"\\\\$[0-9][0-9A-Fa-f]*\",relevance:0},{b:\"\\\\b(?:[0-9A-Fa-f][0-9A-Fa-f_]*[Hh]|[0-9][0-9_]*[DdTt]?|[0-7][0-7_]*[QqOo]|[0-1][0-1_]*[BbYy])\\\\b\"},{b:\"\\\\b(?:0[Xx][0-9A-Fa-f_]+|0[DdTt][0-9_]+|0[QqOo][0-7_]+|0[BbYy][0-1_]+)\\\\b\"}]},s.QSM,{cN:\"string\",v:[{b:\"'\",e:\"[^\\\\\\\\]'\"},{b:\"`\",e:\"[^\\\\\\\\]`\"}],relevance:0},{cN:\"symbol\",v:[{b:\"^\\\\s*[A-Za-z._?][A-Za-z0-9_$#@~.?]*(:|\\\\s+label)\"},{b:\"^\\\\s*%%[A-Za-z0-9_$#@~.?]*:\"}],relevance:0},{cN:\"subst\",b:\"%[0-9]+\",relevance:0},{cN:\"subst\",b:\"%!S+\",relevance:0},{cN:\"meta\",b:/^\\s*\\.[\\w_-]+/}]}});hljs.registerLanguage(\"cpp\",function(e){function t(e){return\"(?:\"+e+\")?\"}var r=\"decltype\\\\(auto\\\\)\",a=\"[a-zA-Z_]\\\\w*::\",i=\"(\"+r+\"|\"+t(a)+\"[a-zA-Z_]\\\\w*\"+t(\"<.*?>\")+\")\",c={cN:\"keyword\",b:\"\\\\b[a-z\\\\d_]*_t\\\\b\"},s={cN:\"string\",v:[{b:'(u8?|U|L)?\"',e:'\"',i:\"\\\\n\",c:[e.BE]},{b:\"(u8?|U|L)?'(\\\\\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\\\S)|.)\",e:\"'\",i:\".\"},{b:/(?:u8?|U|L)?R\"([^()\\\\ ]{0,16})\\((?:.|\\n)*?\\)\\1\"/}]},n={cN:\"number\",v:[{b:\"\\\\b(0b[01']+)\"},{b:\"(-?)\\\\b([\\\\d']+(\\\\.[\\\\d']*)?|\\\\.[\\\\d']+)(u|U|l|L|ul|UL|f|F|b|B)\"},{b:\"(-?)(\\\\b0[xX][a-fA-F0-9']+|(\\\\b[\\\\d']+(\\\\.[\\\\d']*)?|\\\\.[\\\\d']+)([eE][-+]?[\\\\d']+)?)\"}],relevance:0},o={cN:\"meta\",b:/#\\s*[a-z]+\\b/,e:/$/,k:{\"meta-keyword\":\"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include\"},c:[{b:/\\\\\\n/,relevance:0},e.inherit(s,{cN:\"meta-string\"}),{cN:\"meta-string\",b:/<.*?>/,e:/$/,i:\"\\\\n\"},e.CLCM,e.CBCM]},l={cN:\"title\",b:t(a)+e.IR,relevance:0},u=t(a)+e.IR+\"\\\\s*\\\\(\",p={keyword:\"int float while private char char8_t char16_t char32_t catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid wchar_tshort reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignas alignof constexpr consteval constinit decltype concept co_await co_return co_yield requires noexcept static_assert thread_local restrict final override atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq\",built_in:\"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr _Bool complex _Complex imaginary _Imaginary\",literal:\"true false nullptr NULL\"},m=[c,e.CLCM,e.CBCM,n,s],d={v:[{b:/=/,e:/;/},{b:/\\(/,e:/\\)/},{bK:\"new throw return else\",e:/;/}],k:p,c:m.concat([{b:/\\(/,e:/\\)/,k:p,c:m.concat([\"self\"]),relevance:0}]),relevance:0},b={cN:\"function\",b:\"(\"+i+\"[\\\\*&\\\\s]+)+\"+u,rB:!0,e:/[{;=]/,eE:!0,k:p,i:/[^\\w\\s\\*&:<>]/,c:[{b:r,k:p,relevance:0},{b:u,rB:!0,c:[l],relevance:0},{cN:\"params\",b:/\\(/,e:/\\)/,k:p,relevance:0,c:[e.CLCM,e.CBCM,s,n,c,{b:/\\(/,e:/\\)/,k:p,relevance:0,c:[\"self\",e.CLCM,e.CBCM,s,n,c]}]},c,e.CLCM,e.CBCM,o]};return{aliases:[\"c\",\"cc\",\"h\",\"c++\",\"h++\",\"hpp\",\"hh\",\"hxx\",\"cxx\"],k:p,i:\"</\",c:[].concat(d,b,m,[o,{b:\"\\\\b(deque|list|queue|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\\\s*<\",e:\">\",k:p,c:[\"self\",c]},{b:e.IR+\"::\",k:p},{cN:\"class\",bK:\"class struct\",e:/[{;:]/,c:[{b:/</,e:/>/,c:[\"self\"]},e.TM]}]),exports:{preprocessor:o,strings:s,k:p}}});hljs.registerLanguage(\"arduino\",function(e){var t=\"boolean byte word String\",r=\"setup loopKeyboardController MouseController SoftwareSerial EthernetServer EthernetClient LiquidCrystal RobotControl GSMVoiceCall EthernetUDP EsploraTFT HttpClient RobotMotor WiFiClient GSMScanner FileSystem Scheduler GSMServer YunClient YunServer IPAddress GSMClient GSMModem Keyboard Ethernet Console GSMBand Esplora Stepper Process WiFiUDP GSM_SMS Mailbox USBHost Firmata PImage Client Server GSMPIN FileIO Bridge Serial EEPROM Stream Mouse Audio Servo File Task GPRS WiFi Wire TFT GSM SPI SD runShellCommandAsynchronously analogWriteResolution retrieveCallingNumber printFirmwareVersion analogReadResolution sendDigitalPortPair noListenOnLocalhost readJoystickButton setFirmwareVersion readJoystickSwitch scrollDisplayRight getVoiceCallStatus scrollDisplayLeft writeMicroseconds delayMicroseconds beginTransmission getSignalStrength runAsynchronously getAsynchronously listenOnLocalhost getCurrentCarrier readAccelerometer messageAvailable sendDigitalPorts lineFollowConfig countryNameWrite runShellCommand readStringUntil rewindDirectory readTemperature setClockDivider readLightSensor endTransmission analogReference detachInterrupt countryNameRead attachInterrupt encryptionType readBytesUntil robotNameWrite readMicrophone robotNameRead cityNameWrite userNameWrite readJoystickY readJoystickX mouseReleased openNextFile scanNetworks noInterrupts digitalWrite beginSpeaker mousePressed isActionDone mouseDragged displayLogos noAutoscroll addParameter remoteNumber getModifiers keyboardRead userNameRead waitContinue processInput parseCommand printVersion readNetworks writeMessage blinkVersion cityNameRead readMessage setDataMode parsePacket isListening setBitOrder beginPacket isDirectory motorsWrite drawCompass digitalRead clearScreen serialEvent rightToLeft setTextSize leftToRight requestFrom keyReleased compassRead analogWrite interrupts WiFiServer disconnect playMelody parseFloat autoscroll getPINUsed setPINUsed setTimeout sendAnalog readSlider analogRead beginWrite createChar motorsStop keyPressed tempoWrite readButton subnetMask debugPrint macAddress writeGreen randomSeed attachGPRS readString sendString remotePort releaseAll mouseMoved background getXChange getYChange answerCall getResult voiceCall endPacket constrain getSocket writeJSON getButton available connected findUntil readBytes exitValue readGreen writeBlue startLoop IPAddress isPressed sendSysex pauseMode gatewayIP setCursor getOemKey tuneWrite noDisplay loadImage switchPIN onRequest onReceive changePIN playFile noBuffer parseInt overflow checkPIN knobRead beginTFT bitClear updateIR bitWrite position writeRGB highByte writeRed setSpeed readBlue noStroke remoteIP transfer shutdown hangCall beginSMS endWrite attached maintain noCursor checkReg checkPUK shiftOut isValid shiftIn pulseIn connect println localIP pinMode getIMEI display noBlink process getBand running beginSD drawBMP lowByte setBand release bitRead prepare pointTo readRed setMode noFill remove listen stroke detach attach noTone exists buffer height bitSet circle config cursor random IRread setDNS endSMS getKey micros millis begin print write ready flush width isPIN blink clear press mkdir rmdir close point yield image BSSID click delay read text move peek beep rect line open seek fill size turn stop home find step tone sqrt RSSI SSID end bit tan cos sin pow map abs max min get run put\",i=\"DIGITAL_MESSAGE FIRMATA_STRING ANALOG_MESSAGE REPORT_DIGITAL REPORT_ANALOG INPUT_PULLUP SET_PIN_MODE INTERNAL2V56 SYSTEM_RESET LED_BUILTIN INTERNAL1V1 SYSEX_START INTERNAL EXTERNAL DEFAULT OUTPUT INPUT HIGH LOW\",o=e.requireLanguage(\"cpp\").rawDefinition(),a=o.k;return a.keyword+=\" \"+t,a.literal+=\" \"+i,a.built_in+=\" \"+r,o});hljs.registerLanguage(\"nginx\",function(e){var r={cN:\"variable\",v:[{b:/\\$\\d+/},{b:/\\$\\{/,e:/}/},{b:\"[\\\\$\\\\@]\"+e.UIR}]},b={eW:!0,l:\"[a-z/_]+\",k:{literal:\"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll\"},relevance:0,i:\"=>\",c:[e.HCM,{cN:\"string\",c:[e.BE,r],v:[{b:/\"/,e:/\"/},{b:/'/,e:/'/}]},{b:\"([a-z]+):/\",e:\"\\\\s\",eW:!0,eE:!0,c:[r]},{cN:\"regexp\",c:[e.BE,r],v:[{b:\"\\\\s\\\\^\",e:\"\\\\s|{|;\",rE:!0},{b:\"~\\\\*?\\\\s+\",e:\"\\\\s|{|;\",rE:!0},{b:\"\\\\*(\\\\.[a-z\\\\-]+)+\"},{b:\"([a-z\\\\-]+\\\\.)+\\\\*\"}]},{cN:\"number\",b:\"\\\\b\\\\d{1,3}\\\\.\\\\d{1,3}\\\\.\\\\d{1,3}\\\\.\\\\d{1,3}(:\\\\d{1,5})?\\\\b\"},{cN:\"number\",b:\"\\\\b\\\\d+[kKmMgGdshdwy]*\\\\b\",relevance:0},r]};return{aliases:[\"nginxconf\"],c:[e.HCM,{b:e.UIR+\"\\\\s+{\",rB:!0,e:\"{\",c:[{cN:\"section\",b:e.UIR}],relevance:0},{b:e.UIR+\"\\\\s\",e:\";|{\",rB:!0,c:[{cN:\"attribute\",b:e.UIR,starts:b}],relevance:0}],i:\"[^\\\\s\\\\}]\"}});hljs.registerLanguage(\"xml\",function(e){var c={cN:\"symbol\",b:\"&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;\"},s={b:\"\\\\s\",c:[{cN:\"meta-keyword\",b:\"#?[a-z_][a-z1-9_-]+\",i:\"\\\\n\"}]},a=e.inherit(s,{b:\"\\\\(\",e:\"\\\\)\"}),t=e.inherit(e.ASM,{cN:\"meta-string\"}),l=e.inherit(e.QSM,{cN:\"meta-string\"}),r={eW:!0,i:/</,relevance:0,c:[{cN:\"attr\",b:\"[A-Za-z0-9\\\\._:-]+\",relevance:0},{b:/=\\s*/,relevance:0,c:[{cN:\"string\",endsParent:!0,v:[{b:/\"/,e:/\"/,c:[c]},{b:/'/,e:/'/,c:[c]},{b:/[^\\s\"'=<>`]+/}]}]}]};return{aliases:[\"html\",\"xhtml\",\"rss\",\"atom\",\"xjb\",\"xsd\",\"xsl\",\"plist\",\"wsf\",\"svg\"],cI:!0,c:[{cN:\"meta\",b:\"<![a-z]\",e:\">\",relevance:10,c:[s,l,t,a,{b:\"\\\\[\",e:\"\\\\]\",c:[{cN:\"meta\",b:\"<![a-z]\",e:\">\",c:[s,a,l,t]}]}]},e.C(\"\\x3c!--\",\"--\\x3e\",{relevance:10}),{b:\"<\\\\!\\\\[CDATA\\\\[\",e:\"\\\\]\\\\]>\",relevance:10},c,{cN:\"meta\",b:/<\\?xml/,e:/\\?>/,relevance:10},{b:/<\\?(php)?/,e:/\\?>/,sL:\"php\",c:[{b:\"/\\\\*\",e:\"\\\\*/\",skip:!0},{b:'b\"',e:'\"',skip:!0},{b:\"b'\",e:\"'\",skip:!0},e.inherit(e.ASM,{i:null,cN:null,c:null,skip:!0}),e.inherit(e.QSM,{i:null,cN:null,c:null,skip:!0})]},{cN:\"tag\",b:\"<style(?=\\\\s|>)\",e:\">\",k:{name:\"style\"},c:[r],starts:{e:\"</style>\",rE:!0,sL:[\"css\",\"xml\"]}},{cN:\"tag\",b:\"<script(?=\\\\s|>)\",e:\">\",k:{name:\"script\"},c:[r],starts:{e:\"<\\/script>\",rE:!0,sL:[\"actionscript\",\"javascript\",\"handlebars\",\"xml\"]}},{cN:\"tag\",b:\"</?\",e:\"/?>\",c:[{cN:\"name\",b:/[^\\/><\\s]+/,relevance:0},r]}]}});hljs.registerLanguage(\"markdown\",function(e){return{aliases:[\"md\",\"mkdown\",\"mkd\"],c:[{cN:\"section\",v:[{b:\"^#{1,6}\",e:\"$\"},{b:\"^.+?\\\\n[=-]{2,}$\"}]},{b:\"<\",e:\">\",sL:\"xml\",relevance:0},{cN:\"bullet\",b:\"^\\\\s*([*+-]|(\\\\d+\\\\.))\\\\s+\"},{cN:\"strong\",b:\"[*_]{2}.+?[*_]{2}\"},{cN:\"emphasis\",v:[{b:\"\\\\*.+?\\\\*\"},{b:\"_.+?_\",relevance:0}]},{cN:\"quote\",b:\"^>\\\\s+\",e:\"$\"},{cN:\"code\",v:[{b:\"^```\\\\w*\\\\s*$\",e:\"^```[ ]*$\"},{b:\"`.+?`\"},{b:\"^( {4}|\\\\t)\",e:\"$\",relevance:0}]},{b:\"^[-\\\\*]{3,}\",e:\"$\"},{b:\"\\\\[.+?\\\\][\\\\(\\\\[].*?[\\\\)\\\\]]\",rB:!0,c:[{cN:\"string\",b:\"\\\\[\",e:\"\\\\]\",eB:!0,rE:!0,relevance:0},{cN:\"link\",b:\"\\\\]\\\\(\",e:\"\\\\)\",eB:!0,eE:!0},{cN:\"symbol\",b:\"\\\\]\\\\[\",e:\"\\\\]\",eB:!0,eE:!0}],relevance:10},{b:/^\\[[^\\n]+\\]:/,rB:!0,c:[{cN:\"symbol\",b:/\\[/,e:/\\]/,eB:!0,eE:!0},{cN:\"link\",b:/:\\s*/,e:/$/,eB:!0}]}]}});hljs.registerLanguage(\"properties\",function(e){var r=\"[ \\\\t\\\\f]*\",t=\"(\"+r+\"[:=]\"+r+\"|[ \\\\t\\\\f]+)\",n=\"([^\\\\\\\\\\\\W:= \\\\t\\\\f\\\\n]|\\\\\\\\.)+\",a=\"([^\\\\\\\\:= \\\\t\\\\f\\\\n]|\\\\\\\\.)+\",c={e:t,relevance:0,starts:{cN:\"string\",e:/$/,relevance:0,c:[{b:\"\\\\\\\\\\\\n\"}]}};return{cI:!0,i:/\\S/,c:[e.C(\"^\\\\s*[!#]\",\"$\"),{b:n+t,rB:!0,c:[{cN:\"attr\",b:n,endsParent:!0,relevance:0}],starts:c},{b:a+t,rB:!0,relevance:0,c:[{cN:\"meta\",b:a,endsParent:!0,relevance:0}],starts:c},{cN:\"attr\",relevance:0,b:a+r+\"$\"}]}});hljs.registerLanguage(\"bash\",function(e){var t={cN:\"variable\",v:[{b:/\\$[\\w\\d#@][\\w\\d_]*/},{b:/\\$\\{(.*?)}/}]},a={cN:\"string\",b:/\"/,e:/\"/,c:[e.BE,t,{cN:\"variable\",b:/\\$\\(/,e:/\\)/,c:[e.BE]}]};return{aliases:[\"sh\",\"zsh\"],l:/\\b-?[a-z\\._]+\\b/,k:{keyword:\"if then else elif fi for while in do done case esac function\",literal:\"true false\",built_in:\"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp\",_:\"-ne -eq -lt -gt -f -d -e -s -l -a\"},c:[{cN:\"meta\",b:/^#![^\\n]+sh\\s*$/,relevance:10},{cN:\"function\",b:/\\w[\\w\\d_]*\\s*\\(\\s*\\)\\s*\\{/,rB:!0,c:[e.inherit(e.TM,{b:/\\w[\\w\\d_]*/})],relevance:0},e.HCM,a,{cN:\"\",b:/\\\\\"/},{cN:\"string\",b:/'/,e:/'/},t]}});hljs.registerLanguage(\"dockerfile\",function(e){return{aliases:[\"docker\"],cI:!0,k:\"from maintainer expose env arg user onbuild stopsignal\",c:[e.HCM,e.ASM,e.QSM,e.NM,{bK:\"run cmd entrypoint volume add copy workdir label healthcheck shell\",starts:{e:/[^\\\\]$/,sL:\"bash\"}}],i:\"</\"}});hljs.registerLanguage(\"python\",function(e){var r={keyword:\"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10\",built_in:\"Ellipsis NotImplemented\",literal:\"False None True\"},b={cN:\"meta\",b:/^(>>>|\\.\\.\\.) /},c={cN:\"subst\",b:/\\{/,e:/\\}/,k:r,i:/#/},a={b:/\\{\\{/,relevance:0},l={cN:\"string\",c:[e.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,c:[e.BE,b],relevance:10},{b:/(u|b)?r?\"\"\"/,e:/\"\"\"/,c:[e.BE,b],relevance:10},{b:/(fr|rf|f)'''/,e:/'''/,c:[e.BE,b,a,c]},{b:/(fr|rf|f)\"\"\"/,e:/\"\"\"/,c:[e.BE,b,a,c]},{b:/(u|r|ur)'/,e:/'/,relevance:10},{b:/(u|r|ur)\"/,e:/\"/,relevance:10},{b:/(b|br)'/,e:/'/},{b:/(b|br)\"/,e:/\"/},{b:/(fr|rf|f)'/,e:/'/,c:[e.BE,a,c]},{b:/(fr|rf|f)\"/,e:/\"/,c:[e.BE,a,c]},e.ASM,e.QSM]},n={cN:\"number\",relevance:0,v:[{b:e.BNR+\"[lLjJ]?\"},{b:\"\\\\b(0o[0-7]+)[lLjJ]?\"},{b:e.CNR+\"[lLjJ]?\"}]},i={cN:\"params\",b:/\\(/,e:/\\)/,c:[\"self\",b,n,l,e.HCM]};return c.c=[l,n,b],{aliases:[\"py\",\"gyp\",\"ipython\"],k:r,i:/(<\\/|->|\\?)|=>/,c:[b,n,{bK:\"if\",relevance:0},l,e.HCM,{v:[{cN:\"function\",bK:\"def\"},{cN:\"class\",bK:\"class\"}],e:/:/,i:/[${=;\\n,]/,c:[e.UTM,i,{b:/->/,eW:!0,k:\"None\"}]},{cN:\"meta\",b:/^[\\t ]*@/,e:/$/},{b:/\\b(print|exec)\\(/}]}});hljs.registerLanguage(\"ini\",function(e){var b={cN:\"number\",relevance:0,v:[{b:/([\\+\\-]+)?[\\d]+_[\\d_]+/},{b:e.NR}]},a=e.C();a.v=[{b:/;/,e:/$/},{b:/#/,e:/$/}];var c={cN:\"variable\",v:[{b:/\\$[\\w\\d\"][\\w\\d_]*/},{b:/\\$\\{(.*?)}/}]},r={cN:\"literal\",b:/\\bon|off|true|false|yes|no\\b/},n={cN:\"string\",c:[e.BE],v:[{b:\"'''\",e:\"'''\",relevance:10},{b:'\"\"\"',e:'\"\"\"',relevance:10},{b:'\"',e:'\"'},{b:\"'\",e:\"'\"}]};return{aliases:[\"toml\"],cI:!0,i:/\\S/,c:[a,{cN:\"section\",b:/\\[+/,e:/\\]+/},{b:/^[a-z0-9\\[\\]_\\.-]+(?=\\s*=\\s*)/,cN:\"attr\",starts:{e:/$/,c:[a,{b:/\\[/,e:/\\]/,c:[a,r,c,n,b,\"self\"],relevance:0},r,c,n,b]}}]}});hljs.registerLanguage(\"diff\",function(e){return{aliases:[\"patch\"],c:[{cN:\"meta\",relevance:10,v:[{b:/^@@ +\\-\\d+,\\d+ +\\+\\d+,\\d+ +@@$/},{b:/^\\*\\*\\* +\\d+,\\d+ +\\*\\*\\*\\*$/},{b:/^\\-\\-\\- +\\d+,\\d+ +\\-\\-\\-\\-$/}]},{cN:\"comment\",v:[{b:/Index: /,e:/$/},{b:/={3,}/,e:/$/},{b:/^\\-{3}/,e:/$/},{b:/^\\*{3} /,e:/$/},{b:/^\\+{3}/,e:/$/},{b:/^\\*{15}$/}]},{cN:\"addition\",b:\"^\\\\+\",e:\"$\"},{cN:\"deletion\",b:\"^\\\\-\",e:\"$\"},{cN:\"addition\",b:\"^\\\\!\",e:\"$\"}]}});hljs.registerLanguage(\"http\",function(e){var t=\"HTTP/[0-9\\\\.]+\";return{aliases:[\"https\"],i:\"\\\\S\",c:[{b:\"^\"+t,e:\"$\",c:[{cN:\"number\",b:\"\\\\b\\\\d{3}\\\\b\"}]},{b:\"^[A-Z]+ (.*?) \"+t+\"$\",rB:!0,e:\"$\",c:[{cN:\"string\",b:\" \",e:\" \",eB:!0,eE:!0},{b:t},{cN:\"keyword\",b:\"[A-Z]+\"}]},{cN:\"attribute\",b:\"^\\\\w\",e:\": \",eE:!0,i:\"\\\\n|\\\\s|=\",starts:{e:\"$\",relevance:0}},{b:\"\\\\n\\\\n\",starts:{sL:[],eW:!0}}]}});hljs.registerLanguage(\"sql\",function(e){var t=e.C(\"--\",\"$\");return{cI:!0,i:/[<>{}*]/,c:[{bK:\"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke comment values with\",e:/;/,eW:!0,l:/[\\w\\.]+/,k:{keyword:\"as abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias all allocate allow alter always analyze ancillary and anti any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound bucket buffer_cache buffer_pool build bulk by byte byteordermark bytes cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain explode export export_set extended extent external external_1 external_2 externally extract failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force foreign form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour hours http id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists keep keep_duplicates key keys kill language large last last_day last_insert_id last_value lateral lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minutes minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notnull notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second seconds section securefile security seed segment select self semi sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime table tables tablespace tablesample tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unnest unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace window with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek\",literal:\"true false null unknown\",built_in:\"array bigint binary bit blob bool boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text time timestamp tinyint varchar varchar2 varying void\"},c:[{cN:\"string\",b:\"'\",e:\"'\",c:[{b:\"''\"}]},{cN:\"string\",b:'\"',e:'\"',c:[{b:'\"\"'}]},{cN:\"string\",b:\"`\",e:\"`\"},e.CNM,e.CBCM,t,e.HCM]},e.CBCM,t,e.HCM]}});hljs.registerLanguage(\"vala\",function(e){return{k:{keyword:\"char uchar unichar int uint long ulong short ushort int8 int16 int32 int64 uint8 uint16 uint32 uint64 float double bool struct enum string void weak unowned owned async signal static abstract interface override virtual delegate if while do for foreach else switch case break default return try catch public private protected internal using new this get set const stdout stdin stderr var\",built_in:\"DBus GLib CCode Gee Object Gtk Posix\",literal:\"false true null\"},c:[{cN:\"class\",bK:\"class interface namespace\",e:\"{\",eE:!0,i:\"[^,:\\\\n\\\\s\\\\.]\",c:[e.UTM]},e.CLCM,e.CBCM,{cN:\"string\",b:'\"\"\"',e:'\"\"\"',relevance:5},e.ASM,e.QSM,e.CNM,{cN:\"meta\",b:\"^#\",e:\"$\",relevance:2}]}});hljs.registerLanguage(\"asciidoc\",function(e){return{aliases:[\"adoc\"],c:[e.C(\"^/{4,}\\\\n\",\"\\\\n/{4,}$\",{relevance:10}),e.C(\"^//\",\"$\",{relevance:0}),{cN:\"title\",b:\"^\\\\.\\\\w.*$\"},{b:\"^[=\\\\*]{4,}\\\\n\",e:\"\\\\n^[=\\\\*]{4,}$\",relevance:10},{cN:\"section\",relevance:10,v:[{b:\"^(={1,5}) .+?( \\\\1)?$\"},{b:\"^[^\\\\[\\\\]\\\\n]+?\\\\n[=\\\\-~\\\\^\\\\+]{2,}$\"}]},{cN:\"meta\",b:\"^:.+?:\",e:\"\\\\s\",eE:!0,relevance:10},{cN:\"meta\",b:\"^\\\\[.+?\\\\]$\",relevance:0},{cN:\"quote\",b:\"^_{4,}\\\\n\",e:\"\\\\n_{4,}$\",relevance:10},{cN:\"code\",b:\"^[\\\\-\\\\.]{4,}\\\\n\",e:\"\\\\n[\\\\-\\\\.]{4,}$\",relevance:10},{b:\"^\\\\+{4,}\\\\n\",e:\"\\\\n\\\\+{4,}$\",c:[{b:\"<\",e:\">\",sL:\"xml\",relevance:0}],relevance:10},{cN:\"bullet\",b:\"^(\\\\*+|\\\\-+|\\\\.+|[^\\\\n]+?::)\\\\s+\"},{cN:\"symbol\",b:\"^(NOTE|TIP|IMPORTANT|WARNING|CAUTION):\\\\s+\",relevance:10},{cN:\"strong\",b:\"\\\\B\\\\*(?![\\\\*\\\\s])\",e:\"(\\\\n{2}|\\\\*)\",c:[{b:\"\\\\\\\\*\\\\w\",relevance:0}]},{cN:\"emphasis\",b:\"\\\\B'(?!['\\\\s])\",e:\"(\\\\n{2}|')\",c:[{b:\"\\\\\\\\'\\\\w\",relevance:0}],relevance:0},{cN:\"emphasis\",b:\"_(?![_\\\\s])\",e:\"(\\\\n{2}|_)\",relevance:0},{cN:\"string\",v:[{b:\"``.+?''\"},{b:\"`.+?'\"}]},{cN:\"code\",b:\"(`.+?`|\\\\+.+?\\\\+)\",relevance:0},{cN:\"code\",b:\"^[ \\\\t]\",e:\"$\",relevance:0},{b:\"^'{3,}[ \\\\t]*$\",relevance:10},{b:\"(link:)?(http|https|ftp|file|irc|image:?):\\\\S+\\\\[.*?\\\\]\",rB:!0,c:[{b:\"(link|image:?):\",relevance:0},{cN:\"link\",b:\"\\\\w\",e:\"[^\\\\[]+\",relevance:0},{cN:\"string\",b:\"\\\\[\",e:\"\\\\]\",eB:!0,eE:!0,relevance:0}],relevance:10}]}});hljs.registerLanguage(\"json\",function(e){var i={literal:\"true false null\"},n=[e.CLCM,e.CBCM],c=[e.QSM,e.CNM],r={e:\",\",eW:!0,eE:!0,c:c,k:i},t={b:\"{\",e:\"}\",c:[{cN:\"attr\",b:/\"/,e:/\"/,c:[e.BE],i:\"\\\\n\"},e.inherit(r,{b:/:/})].concat(n),i:\"\\\\S\"},a={b:\"\\\\[\",e:\"\\\\]\",c:[e.inherit(r)],i:\"\\\\S\"};return c.push(t,a),n.forEach(function(e){c.push(e)}),{c:c,k:i,i:\"\\\\S\"}});hljs.registerLanguage(\"rust\",function(e){var t=\"([ui](8|16|32|64|128|size)|f(32|64))?\",r=\"drop i8 i16 i32 i64 i128 isize u8 u16 u32 u64 u128 usize f32 f64 str char bool Box Option Result String Vec Copy Send Sized Sync Drop Fn FnMut FnOnce ToOwned Clone Debug PartialEq PartialOrd Eq Ord AsRef AsMut Into From Default Iterator Extend IntoIterator DoubleEndedIterator ExactSizeIterator SliceConcatExt ToString assert! assert_eq! bitflags! bytes! cfg! col! concat! concat_idents! debug_assert! debug_assert_eq! env! panic! file! format! format_args! include_bin! include_str! line! local_data_key! module_path! option_env! print! println! select! stringify! try! unimplemented! unreachable! vec! write! writeln! macro_rules! assert_ne! debug_assert_ne!\";return{aliases:[\"rs\"],k:{keyword:\"abstract as async await become box break const continue crate do dyn else enum extern false final fn for if impl in let loop macro match mod move mut override priv pub ref return self Self static struct super trait true try type typeof unsafe unsized use virtual where while yield\",literal:\"true false Some None Ok Err\",built_in:r},l:e.IR+\"!?\",i:\"</\",c:[e.CLCM,e.C(\"/\\\\*\",\"\\\\*/\",{c:[\"self\"]}),e.inherit(e.QSM,{b:/b?\"/,i:null}),{cN:\"string\",v:[{b:/r(#*)\"(.|\\n)*?\"\\1(?!#)/},{b:/b?'\\\\?(x\\w{2}|u\\w{4}|U\\w{8}|.)'/}]},{cN:\"symbol\",b:/'[a-zA-Z_][a-zA-Z0-9_]*/},{cN:\"number\",v:[{b:\"\\\\b0b([01_]+)\"+t},{b:\"\\\\b0o([0-7_]+)\"+t},{b:\"\\\\b0x([A-Fa-f0-9_]+)\"+t},{b:\"\\\\b(\\\\d[\\\\d_]*(\\\\.[0-9_]+)?([eE][+-]?[0-9_]+)?)\"+t}],relevance:0},{cN:\"function\",bK:\"fn\",e:\"(\\\\(|<)\",eE:!0,c:[e.UTM]},{cN:\"meta\",b:\"#\\\\!?\\\\[\",e:\"\\\\]\",c:[{cN:\"meta-string\",b:/\"/,e:/\"/}]},{cN:\"class\",bK:\"type\",e:\";\",c:[e.inherit(e.UTM,{endsParent:!0})],i:\"\\\\S\"},{cN:\"class\",bK:\"trait enum struct union\",e:\"{\",c:[e.inherit(e.UTM,{endsParent:!0})],i:\"[\\\\w\\\\d]\"},{b:e.IR+\"::\",k:{built_in:r}},{b:\"->\"}]}});hljs.registerLanguage(\"awk\",function(e){return{k:{keyword:\"BEGIN END if else while do for in break continue delete next nextfile function func exit|10\"},c:[{cN:\"variable\",v:[{b:/\\$[\\w\\d#@][\\w\\d_]*/},{b:/\\$\\{(.*?)}/}]},{cN:\"string\",c:[e.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,relevance:10},{b:/(u|b)?r?\"\"\"/,e:/\"\"\"/,relevance:10},{b:/(u|r|ur)'/,e:/'/,relevance:10},{b:/(u|r|ur)\"/,e:/\"/,relevance:10},{b:/(b|br)'/,e:/'/},{b:/(b|br)\"/,e:/\"/},e.ASM,e.QSM]},e.RM,e.HCM,e.NM]}});hljs.registerLanguage(\"java\",function(e){var a=\"false synchronized int abstract float private char boolean var static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private module requires exports do\",t={cN:\"number\",b:\"\\\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\\\d]+[\\\\d_]+[\\\\d]+|[\\\\d]+)(\\\\.([\\\\d]+[\\\\d_]+[\\\\d]+|[\\\\d]+))?|\\\\.([\\\\d]+[\\\\d_]+[\\\\d]+|[\\\\d]+))([eE][-+]?\\\\d+)?)[lLfF]?\",relevance:0};return{aliases:[\"jsp\"],k:a,i:/<\\/|#/,c:[e.C(\"/\\\\*\\\\*\",\"\\\\*/\",{relevance:0,c:[{b:/\\w+@/,relevance:0},{cN:\"doctag\",b:\"@[A-Za-z]+\"}]}),e.CLCM,e.CBCM,e.ASM,e.QSM,{cN:\"class\",bK:\"class interface\",e:/[{;=]/,eE:!0,k:\"class interface\",i:/[:\"\\[\\]]/,c:[{bK:\"extends implements\"},e.UTM]},{bK:\"new throw return else\",relevance:0},{cN:\"function\",b:\"([À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(<[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*(\\\\s*,\\\\s*[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*)*>)?\\\\s+)+\"+e.UIR+\"\\\\s*\\\\(\",rB:!0,e:/[{;=]/,eE:!0,k:a,c:[{b:e.UIR+\"\\\\s*\\\\(\",rB:!0,relevance:0,c:[e.UTM]},{cN:\"params\",b:/\\(/,e:/\\)/,k:a,relevance:0,c:[e.ASM,e.QSM,e.CNM,e.CBCM]},e.CLCM,e.CBCM]},t,{cN:\"meta\",b:\"@[A-Za-z]+\"}]}});hljs.registerLanguage(\"cs\",function(e){var a={keyword:\"abstract as base bool break byte case catch char checked const continue decimal default delegate do double enum event explicit extern finally fixed float for foreach goto if implicit in int interface internal is lock long object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this try typeof uint ulong unchecked unsafe ushort using virtual void volatile while add alias ascending async await by descending dynamic equals from get global group into join let nameof on orderby partial remove select set value var when where yield\",literal:\"null false true\"},i={cN:\"number\",v:[{b:\"\\\\b(0b[01']+)\"},{b:\"(-?)\\\\b([\\\\d']+(\\\\.[\\\\d']*)?|\\\\.[\\\\d']+)(u|U|l|L|ul|UL|f|F|b|B)\"},{b:\"(-?)(\\\\b0[xX][a-fA-F0-9']+|(\\\\b[\\\\d']+(\\\\.[\\\\d']*)?|\\\\.[\\\\d']+)([eE][-+]?[\\\\d']+)?)\"}],relevance:0},c={cN:\"string\",b:'@\"',e:'\"',c:[{b:'\"\"'}]},r=e.inherit(c,{i:/\\n/}),n={cN:\"subst\",b:\"{\",e:\"}\",k:a},t=e.inherit(n,{i:/\\n/}),s={cN:\"string\",b:/\\$\"/,e:'\"',i:/\\n/,c:[{b:\"{{\"},{b:\"}}\"},e.BE,t]},l={cN:\"string\",b:/\\$@\"/,e:'\"',c:[{b:\"{{\"},{b:\"}}\"},{b:'\"\"'},n]},b=e.inherit(l,{i:/\\n/,c:[{b:\"{{\"},{b:\"}}\"},{b:'\"\"'},t]});n.c=[l,s,c,e.ASM,e.QSM,i,e.CBCM],t.c=[b,s,r,e.ASM,e.QSM,i,e.inherit(e.CBCM,{i:/\\n/})];var o={v:[l,s,c,e.ASM,e.QSM]},d=e.IR+\"(<\"+e.IR+\"(\\\\s*,\\\\s*\"+e.IR+\")*>)?(\\\\[\\\\])?\";return{aliases:[\"csharp\",\"c#\"],k:a,i:/::/,c:[e.C(\"///\",\"$\",{rB:!0,c:[{cN:\"doctag\",v:[{b:\"///\",relevance:0},{b:\"\\x3c!--|--\\x3e\"},{b:\"</?\",e:\">\"}]}]}),e.CLCM,e.CBCM,{cN:\"meta\",b:\"#\",e:\"$\",k:{\"meta-keyword\":\"if else elif endif define undef warning error line region endregion pragma checksum\"}},o,i,{bK:\"class interface\",e:/[{;=]/,i:/[^\\s:,]/,c:[e.TM,e.CLCM,e.CBCM]},{bK:\"namespace\",e:/[{;=]/,i:/[^\\s:]/,c:[e.inherit(e.TM,{b:\"[a-zA-Z](\\\\.?\\\\w)*\"}),e.CLCM,e.CBCM]},{cN:\"meta\",b:\"^\\\\s*\\\\[\",eB:!0,e:\"\\\\]\",eE:!0,c:[{cN:\"meta-string\",b:/\"/,e:/\"/}]},{bK:\"new return throw await else\",relevance:0},{cN:\"function\",b:\"(\"+d+\"\\\\s+)+\"+e.IR+\"\\\\s*\\\\(\",rB:!0,e:/\\s*[{;=]/,eE:!0,k:a,c:[{b:e.IR+\"\\\\s*\\\\(\",rB:!0,c:[e.TM],relevance:0},{cN:\"params\",b:/\\(/,e:/\\)/,eB:!0,eE:!0,k:a,relevance:0,c:[o,i,e.CBCM]},e.CLCM,e.CBCM]}]}});hljs.registerLanguage(\"mathematica\",function(e){return{aliases:[\"mma\",\"wl\"],l:\"(\\\\$|\\\\b)\"+e.IR+\"\\\\b\",k:\"AASTriangle AbelianGroup Abort AbortKernels AbortProtect AbortScheduledTask Above Abs AbsArg AbsArgPlot Absolute AbsoluteCorrelation AbsoluteCorrelationFunction AbsoluteCurrentValue AbsoluteDashing AbsoluteFileName AbsoluteOptions AbsolutePointSize AbsoluteThickness AbsoluteTime AbsoluteTiming AcceptanceThreshold AccountingForm Accumulate Accuracy AccuracyGoal ActionDelay ActionMenu ActionMenuBox ActionMenuBoxOptions Activate Active ActiveClassification ActiveClassificationObject ActiveItem ActivePrediction ActivePredictionObject ActiveStyle AcyclicGraphQ AddOnHelpPath AddSides AddTo AddToSearchIndex AddUsers AdjacencyGraph AdjacencyList AdjacencyMatrix AdjustmentBox AdjustmentBoxOptions AdjustTimeSeriesForecast AdministrativeDivisionData AffineHalfSpace AffineSpace AffineStateSpaceModel AffineTransform After AggregatedEntityClass AggregationLayer AircraftData AirportData AirPressureData AirTemperatureData AiryAi AiryAiPrime AiryAiZero AiryBi AiryBiPrime AiryBiZero AlgebraicIntegerQ AlgebraicNumber AlgebraicNumberDenominator AlgebraicNumberNorm AlgebraicNumberPolynomial AlgebraicNumberTrace AlgebraicRules AlgebraicRulesData Algebraics AlgebraicUnitQ Alignment AlignmentMarker AlignmentPoint All AllowAdultContent AllowedCloudExtraParameters AllowedCloudParameterExtensions AllowedDimensions AllowedFrequencyRange AllowedHeads AllowGroupClose AllowIncomplete AllowInlineCells AllowKernelInitialization AllowLooseGrammar AllowReverseGroupClose AllowScriptLevelChange AllTrue Alphabet AlphabeticOrder AlphabeticSort AlphaChannel AlternateImage AlternatingFactorial AlternatingGroup AlternativeHypothesis Alternatives AltitudeMethod AmbientLight AmbiguityFunction AmbiguityList Analytic AnatomyData AnatomyForm AnatomyPlot3D AnatomySkinStyle AnatomyStyling AnchoredSearch And AndersonDarlingTest AngerJ AngleBisector AngleBracket AnglePath AnglePath3D AngleVector AngularGauge Animate AnimationCycleOffset AnimationCycleRepetitions AnimationDirection AnimationDisplayTime AnimationRate AnimationRepetitions AnimationRunning AnimationRunTime AnimationTimeIndex Animator AnimatorBox AnimatorBoxOptions AnimatorElements Annotate Annotation AnnotationDelete AnnotationNames AnnotationRules AnnotationValue Annuity AnnuityDue Annulus AnomalyDetection AnomalyDetectorFunction Anonymous Antialiasing AntihermitianMatrixQ Antisymmetric AntisymmetricMatrixQ Antonyms AnyOrder AnySubset AnyTrue Apart ApartSquareFree APIFunction Appearance AppearanceElements AppearanceRules AppellF1 Append AppendCheck AppendLayer AppendTo ApplicationIdentificationKey Apply ApplySides ArcCos ArcCosh ArcCot ArcCoth ArcCsc ArcCsch ArcCurvature ARCHProcess ArcLength ArcSec ArcSech ArcSin ArcSinDistribution ArcSinh ArcTan ArcTanh Area Arg ArgMax ArgMin ArgumentCountQ ARIMAProcess ArithmeticGeometricMean ARMAProcess Around AroundReplace ARProcess Array ArrayComponents ArrayDepth ArrayFilter ArrayFlatten ArrayMesh ArrayPad ArrayPlot ArrayQ ArrayResample ArrayReshape ArrayRules Arrays Arrow Arrow3DBox ArrowBox Arrowheads ASATriangle Ask AskAppend AskConfirm AskDisplay AskedQ AskedValue AskFunction AskState AskTemplateDisplay AspectRatio AspectRatioFixed Assert AssociateTo Association AssociationFormat AssociationMap AssociationQ AssociationThread AssumeDeterministic Assuming Assumptions AstronomicalData AsymptoticDSolveValue AsymptoticEqual AsymptoticEquivalent AsymptoticGreater AsymptoticGreaterEqual AsymptoticIntegrate AsymptoticLess AsymptoticLessEqual AsymptoticOutputTracker AsymptoticRSolveValue AsymptoticSolve AsymptoticSum Asynchronous AsynchronousTaskObject AsynchronousTasks Atom AtomCoordinates AtomCount AtomDiagramCoordinates AtomList AtomQ AttentionLayer Attributes Audio AudioAmplify AudioAnnotate AudioAnnotationLookup AudioBlockMap AudioCapture AudioChannelAssignment AudioChannelCombine AudioChannelMix AudioChannels AudioChannelSeparate AudioData AudioDelay AudioDelete AudioDevice AudioDistance AudioFade AudioFrequencyShift AudioGenerator AudioIdentify AudioInputDevice AudioInsert AudioIntervals AudioJoin AudioLabel AudioLength AudioLocalMeasurements AudioLooping AudioLoudness AudioMeasurements AudioNormalize AudioOutputDevice AudioOverlay AudioPad AudioPan AudioPartition AudioPause AudioPitchShift AudioPlay AudioPlot AudioQ AudioRecord AudioReplace AudioResample AudioReverb AudioSampleRate AudioSpectralMap AudioSpectralTransformation AudioSplit AudioStop AudioStream AudioStreams AudioTimeStretch AudioTrim AudioType AugmentedPolyhedron AugmentedSymmetricPolynomial Authenticate Authentication AuthenticationDialog AutoAction Autocomplete AutocompletionFunction AutoCopy AutocorrelationTest AutoDelete AutoEvaluateEvents AutoGeneratedPackage AutoIndent AutoIndentSpacings AutoItalicWords AutoloadPath AutoMatch Automatic AutomaticImageSize AutoMultiplicationSymbol AutoNumberFormatting AutoOpenNotebooks AutoOpenPalettes AutoQuoteCharacters AutoRefreshed AutoRemove AutorunSequencing AutoScaling AutoScroll AutoSpacing AutoStyleOptions AutoStyleWords AutoSubmitting Axes AxesEdge AxesLabel AxesOrigin AxesStyle AxiomaticTheory AxisBabyMonsterGroupB Back Background BackgroundAppearance BackgroundTasksSettings Backslash Backsubstitution Backward Ball Band BandpassFilter BandstopFilter BarabasiAlbertGraphDistribution BarChart BarChart3D BarcodeImage BarcodeRecognize BaringhausHenzeTest BarLegend BarlowProschanImportance BarnesG BarOrigin BarSpacing BartlettHannWindow BartlettWindow BaseDecode BaseEncode BaseForm Baseline BaselinePosition BaseStyle BasicRecurrentLayer BatchNormalizationLayer BatchSize BatesDistribution BattleLemarieWavelet BayesianMaximization BayesianMaximizationObject BayesianMinimization BayesianMinimizationObject Because BeckmannDistribution Beep Before Begin BeginDialogPacket BeginFrontEndInteractionPacket BeginPackage BellB BellY Below BenfordDistribution BeniniDistribution BenktanderGibratDistribution BenktanderWeibullDistribution BernoulliB BernoulliDistribution BernoulliGraphDistribution BernoulliProcess BernsteinBasis BesselFilterModel BesselI BesselJ BesselJZero BesselK BesselY BesselYZero Beta BetaBinomialDistribution BetaDistribution BetaNegativeBinomialDistribution BetaPrimeDistribution BetaRegularized Between BetweennessCentrality BeveledPolyhedron BezierCurve BezierCurve3DBox BezierCurve3DBoxOptions BezierCurveBox BezierCurveBoxOptions BezierFunction BilateralFilter Binarize BinaryDeserialize BinaryDistance BinaryFormat BinaryImageQ BinaryRead BinaryReadList BinarySerialize BinaryWrite BinCounts BinLists Binomial BinomialDistribution BinomialProcess BinormalDistribution BiorthogonalSplineWavelet BipartiteGraphQ BiquadraticFilterModel BirnbaumImportance BirnbaumSaundersDistribution BitAnd BitClear BitGet BitLength BitNot BitOr BitSet BitShiftLeft BitShiftRight BitXor BiweightLocation BiweightMidvariance Black BlackmanHarrisWindow BlackmanNuttallWindow BlackmanWindow Blank BlankForm BlankNullSequence BlankSequence Blend Block BlockchainAddressData BlockchainBase BlockchainBlockData BlockchainContractValue BlockchainData BlockchainGet BlockchainKeyEncode BlockchainPut BlockchainTokenData BlockchainTransaction BlockchainTransactionData BlockchainTransactionSign BlockchainTransactionSubmit BlockMap BlockRandom BlomqvistBeta BlomqvistBetaTest Blue Blur BodePlot BohmanWindow Bold Bond BondCount BondList BondQ Bookmarks Boole BooleanConsecutiveFunction BooleanConvert BooleanCountingFunction BooleanFunction BooleanGraph BooleanMaxterms BooleanMinimize BooleanMinterms BooleanQ BooleanRegion Booleans BooleanStrings BooleanTable BooleanVariables BorderDimensions BorelTannerDistribution Bottom BottomHatTransform BoundaryDiscretizeGraphics BoundaryDiscretizeRegion BoundaryMesh BoundaryMeshRegion BoundaryMeshRegionQ BoundaryStyle BoundedRegionQ BoundingRegion Bounds Box BoxBaselineShift BoxData BoxDimensions Boxed Boxes BoxForm BoxFormFormatTypes BoxFrame BoxID BoxMargins BoxMatrix BoxObject BoxRatios BoxRotation BoxRotationPoint BoxStyle BoxWhiskerChart Bra BracketingBar BraKet BrayCurtisDistance BreadthFirstScan Break BridgeData BrightnessEqualize BroadcastStationData Brown BrownForsytheTest BrownianBridgeProcess BrowserCategory BSplineBasis BSplineCurve BSplineCurve3DBox BSplineCurve3DBoxOptions BSplineCurveBox BSplineCurveBoxOptions BSplineFunction BSplineSurface BSplineSurface3DBox BSplineSurface3DBoxOptions BubbleChart BubbleChart3D BubbleScale BubbleSizes BuildingData BulletGauge BusinessDayQ ButterflyGraph ButterworthFilterModel Button ButtonBar ButtonBox ButtonBoxOptions ButtonCell ButtonContents ButtonData ButtonEvaluator ButtonExpandable ButtonFrame ButtonFunction ButtonMargins ButtonMinHeight ButtonNote ButtonNotebook ButtonSource ButtonStyle ButtonStyleMenuListing Byte ByteArray ByteArrayFormat ByteArrayQ ByteArrayToString ByteCount ByteOrderingC CachedValue CacheGraphics CachePersistence CalendarConvert CalendarData CalendarType Callout CalloutMarker CalloutStyle CallPacket CanberraDistance Cancel CancelButton CandlestickChart CanonicalGraph CanonicalizePolygon CanonicalizePolyhedron CanonicalName CanonicalWarpingCorrespondence CanonicalWarpingDistance CantorMesh CantorStaircase Cap CapForm CapitalDifferentialD Capitalize CapsuleShape CaptureRunning CardinalBSplineBasis CarlemanLinearize CarmichaelLambda CaseOrdering Cases CaseSensitive Cashflow Casoratian Catalan CatalanNumber Catch Catenate CatenateLayer CauchyDistribution CauchyWindow CayleyGraph CDF CDFDeploy CDFInformation CDFWavelet Ceiling CelestialSystem Cell CellAutoOverwrite CellBaseline CellBoundingBox CellBracketOptions CellChangeTimes CellContents CellContext CellDingbat CellDynamicExpression CellEditDuplicate CellElementsBoundingBox CellElementSpacings CellEpilog CellEvaluationDuplicate CellEvaluationFunction CellEvaluationLanguage CellEventActions CellFrame CellFrameColor CellFrameLabelMargins CellFrameLabels CellFrameMargins CellGroup CellGroupData CellGrouping CellGroupingRules CellHorizontalScrolling CellID CellLabel CellLabelAutoDelete CellLabelMargins CellLabelPositioning CellLabelStyle CellLabelTemplate CellMargins CellObject CellOpen CellPrint CellProlog Cells CellSize CellStyle CellTags CellularAutomaton CensoredDistribution Censoring Center CenterArray CenterDot CentralFeature CentralMoment CentralMomentGeneratingFunction Cepstrogram CepstrogramArray CepstrumArray CForm ChampernowneNumber ChangeOptions ChannelBase ChannelBrokerAction ChannelDatabin ChannelHistoryLength ChannelListen ChannelListener ChannelListeners ChannelListenerWait ChannelObject ChannelPreSendFunction ChannelReceiverFunction ChannelSend ChannelSubscribers ChanVeseBinarize Character CharacterCounts CharacterEncoding CharacterEncodingsPath CharacteristicFunction CharacteristicPolynomial CharacterName CharacterRange Characters ChartBaseStyle ChartElementData ChartElementDataFunction ChartElementFunction ChartElements ChartLabels ChartLayout ChartLegends ChartStyle Chebyshev1FilterModel Chebyshev2FilterModel ChebyshevDistance ChebyshevT ChebyshevU Check CheckAbort CheckAll Checkbox CheckboxBar CheckboxBox CheckboxBoxOptions ChemicalData ChessboardDistance ChiDistribution ChineseRemainder ChiSquareDistribution ChoiceButtons ChoiceDialog CholeskyDecomposition Chop ChromaticityPlot ChromaticityPlot3D ChromaticPolynomial Circle CircleBox CircleDot CircleMinus CirclePlus CirclePoints CircleThrough CircleTimes CirculantGraph CircularOrthogonalMatrixDistribution CircularQuaternionMatrixDistribution CircularRealMatrixDistribution CircularSymplecticMatrixDistribution CircularUnitaryMatrixDistribution Circumsphere CityData ClassifierFunction ClassifierInformation ClassifierMeasurements ClassifierMeasurementsObject Classify ClassPriors Clear ClearAll ClearAttributes ClearCookies ClearPermissions ClearSystemCache ClebschGordan ClickPane Clip ClipboardNotebook ClipFill ClippingStyle ClipPlanes ClipPlanesStyle ClipRange Clock ClockGauge ClockwiseContourIntegral Close Closed CloseKernels ClosenessCentrality Closing ClosingAutoSave ClosingEvent CloudAccountData CloudBase CloudConnect CloudDeploy CloudDirectory CloudDisconnect CloudEvaluate CloudExport CloudExpression CloudExpressions CloudFunction CloudGet CloudImport CloudLoggingData CloudObject CloudObjectInformation CloudObjectInformationData CloudObjectNameFormat CloudObjects CloudObjectURLType CloudPublish CloudPut CloudRenderingMethod CloudSave CloudShare CloudSubmit CloudSymbol CloudUnshare ClusterClassify ClusterDissimilarityFunction ClusteringComponents ClusteringTree CMYKColor Coarse CodeAssistOptions Coefficient CoefficientArrays CoefficientDomain CoefficientList CoefficientRules CoifletWavelet Collect Colon ColonForm ColorBalance ColorCombine ColorConvert ColorCoverage ColorData ColorDataFunction ColorDetect ColorDistance ColorFunction ColorFunctionScaling Colorize ColorNegate ColorOutput ColorProfileData ColorQ ColorQuantize ColorReplace ColorRules ColorSelectorSettings ColorSeparate ColorSetter ColorSetterBox ColorSetterBoxOptions ColorSlider ColorsNear ColorSpace ColorToneMapping Column ColumnAlignments ColumnBackgrounds ColumnForm ColumnLines ColumnsEqual ColumnSpacings ColumnWidths CombinedEntityClass CombinerFunction CometData CommonDefaultFormatTypes Commonest CommonestFilter CommonName CommonUnits CommunityBoundaryStyle CommunityGraphPlot CommunityLabels CommunityRegionStyle CompanyData CompatibleUnitQ CompilationOptions CompilationTarget Compile Compiled CompiledCodeFunction CompiledFunction CompilerOptions Complement CompleteGraph CompleteGraphQ CompleteKaryTree CompletionsListPacket Complex Complexes ComplexExpand ComplexInfinity ComplexityFunction ComplexListPlot ComplexPlot ComplexPlot3D ComponentMeasurements ComponentwiseContextMenu Compose ComposeList ComposeSeries CompositeQ Composition CompoundElement CompoundExpression CompoundPoissonDistribution CompoundPoissonProcess CompoundRenewalProcess Compress CompressedData ComputeUncertainty Condition ConditionalExpression Conditioned Cone ConeBox ConfidenceLevel ConfidenceRange ConfidenceTransform ConfigurationPath ConformAudio ConformImages Congruent ConicHullRegion ConicHullRegion3DBox ConicHullRegionBox ConicOptimization Conjugate ConjugateTranspose Conjunction Connect ConnectedComponents ConnectedGraphComponents ConnectedGraphQ ConnectedMeshComponents ConnectedMoleculeComponents ConnectedMoleculeQ ConnectionSettings ConnectLibraryCallbackFunction ConnectSystemModelComponents ConnesWindow ConoverTest ConsoleMessage ConsoleMessagePacket ConsolePrint Constant ConstantArray ConstantArrayLayer ConstantImage ConstantPlusLayer ConstantRegionQ Constants ConstantTimesLayer ConstellationData ConstrainedMax ConstrainedMin Construct Containing ContainsAll ContainsAny ContainsExactly ContainsNone ContainsOnly ContentFieldOptions ContentLocationFunction ContentObject ContentPadding ContentsBoundingBox ContentSelectable ContentSize Context ContextMenu Contexts ContextToFileName Continuation Continue ContinuedFraction ContinuedFractionK ContinuousAction ContinuousMarkovProcess ContinuousTask ContinuousTimeModelQ ContinuousWaveletData ContinuousWaveletTransform ContourDetect ContourGraphics ContourIntegral ContourLabels ContourLines ContourPlot ContourPlot3D Contours ContourShading ContourSmoothing ContourStyle ContraharmonicMean ContrastiveLossLayer Control ControlActive ControlAlignment ControlGroupContentsBox ControllabilityGramian ControllabilityMatrix ControllableDecomposition ControllableModelQ ControllerDuration ControllerInformation ControllerInformationData ControllerLinking ControllerManipulate ControllerMethod ControllerPath ControllerState ControlPlacement ControlsRendering ControlType Convergents ConversionOptions ConversionRules ConvertToBitmapPacket ConvertToPostScript ConvertToPostScriptPacket ConvexHullMesh ConvexPolygonQ ConvexPolyhedronQ ConvolutionLayer Convolve ConwayGroupCo1 ConwayGroupCo2 ConwayGroupCo3 CookieFunction Cookies CoordinateBoundingBox CoordinateBoundingBoxArray CoordinateBounds CoordinateBoundsArray CoordinateChartData CoordinatesToolOptions CoordinateTransform CoordinateTransformData CoprimeQ Coproduct CopulaDistribution Copyable CopyDatabin CopyDirectory CopyFile CopyTag CopyToClipboard CornerFilter CornerNeighbors Correlation CorrelationDistance CorrelationFunction CorrelationTest Cos Cosh CoshIntegral CosineDistance CosineWindow CosIntegral Cot Coth Count CountDistinct CountDistinctBy CounterAssignments CounterBox CounterBoxOptions CounterClockwiseContourIntegral CounterEvaluator CounterFunction CounterIncrements CounterStyle CounterStyleMenuListing CountRoots CountryData Counts CountsBy Covariance CovarianceEstimatorFunction CovarianceFunction CoxianDistribution CoxIngersollRossProcess CoxModel CoxModelFit CramerVonMisesTest CreateArchive CreateCellID CreateChannel CreateCloudExpression CreateDatabin CreateDataSystemModel CreateDialog CreateDirectory CreateDocument CreateFile CreateIntermediateDirectories CreateManagedLibraryExpression CreateNotebook CreatePalette CreatePalettePacket CreatePermissionsGroup CreateScheduledTask CreateSearchIndex CreateSystemModel CreateTemporary CreateUUID CreateWindow CriterionFunction CriticalityFailureImportance CriticalitySuccessImportance CriticalSection Cross CrossEntropyLossLayer CrossingCount CrossingDetect CrossingPolygon CrossMatrix Csc Csch CTCLossLayer Cube CubeRoot Cubics Cuboid CuboidBox Cumulant CumulantGeneratingFunction Cup CupCap Curl CurlyDoubleQuote CurlyQuote CurrencyConvert CurrentDate CurrentImage CurrentlySpeakingPacket CurrentNotebookImage CurrentScreenImage CurrentValue Curry CurvatureFlowFilter CurveClosed Cyan CycleGraph CycleIndexPolynomial Cycles CyclicGroup Cyclotomic Cylinder CylinderBox CylindricalDecompositionD DagumDistribution DamData DamerauLevenshteinDistance DampingFactor Darker Dashed Dashing DatabaseConnect DatabaseDisconnect DatabaseReference Databin DatabinAdd DatabinRemove Databins DatabinUpload DataCompression DataDistribution DataRange DataReversed Dataset Date DateBounds Dated DateDelimiters DateDifference DatedUnit DateFormat DateFunction DateHistogram DateList DateListLogPlot DateListPlot DateListStepPlot DateObject DateObjectQ DateOverlapsQ DatePattern DatePlus DateRange DateReduction DateString DateTicksFormat DateValue DateWithinQ DaubechiesWavelet DavisDistribution DawsonF DayCount DayCountConvention DayHemisphere DaylightQ DayMatchQ DayName DayNightTerminator DayPlus DayRange DayRound DeBruijnGraph DeBruijnSequence Debug DebugTag Decapitalize Decimal DecimalForm DeclareKnownSymbols DeclarePackage Decompose DeconvolutionLayer Decrement Decrypt DecryptFile DedekindEta DeepSpaceProbeData Default DefaultAxesStyle DefaultBaseStyle DefaultBoxStyle DefaultButton DefaultColor DefaultControlPlacement DefaultDuplicateCellStyle DefaultDuration DefaultElement DefaultFaceGridsStyle DefaultFieldHintStyle DefaultFont DefaultFontProperties DefaultFormatType DefaultFormatTypeForStyle DefaultFrameStyle DefaultFrameTicksStyle DefaultGridLinesStyle DefaultInlineFormatType DefaultInputFormatType DefaultLabelStyle DefaultMenuStyle DefaultNaturalLanguage DefaultNewCellStyle DefaultNewInlineCellStyle DefaultNotebook DefaultOptions DefaultOutputFormatType DefaultPrintPrecision DefaultStyle DefaultStyleDefinitions DefaultTextFormatType DefaultTextInlineFormatType DefaultTicksStyle DefaultTooltipStyle DefaultValue DefaultValues Defer DefineExternal DefineInputStreamMethod DefineOutputStreamMethod DefineResourceFunction Definition Degree DegreeCentrality DegreeGraphDistribution DegreeLexicographic DegreeReverseLexicographic DEigensystem DEigenvalues Deinitialization Del DelaunayMesh Delayed Deletable Delete DeleteAnomalies DeleteBorderComponents DeleteCases DeleteChannel DeleteCloudExpression DeleteContents DeleteDirectory DeleteDuplicates DeleteDuplicatesBy DeleteFile DeleteMissing DeleteObject DeletePermissionsKey DeleteSearchIndex DeleteSmallComponents DeleteStopwords DeleteWithContents DeletionWarning DelimitedArray DelimitedSequence Delimiter DelimiterFlashTime DelimiterMatching Delimiters DeliveryFunction Dendrogram Denominator DensityGraphics DensityHistogram DensityPlot DensityPlot3D DependentVariables Deploy Deployed Depth DepthFirstScan Derivative DerivativeFilter DerivedKey DescriptorStateSpace DesignMatrix DestroyAfterEvaluation Det DeviceClose DeviceConfigure DeviceExecute DeviceExecuteAsynchronous DeviceObject DeviceOpen DeviceOpenQ DeviceRead DeviceReadBuffer DeviceReadLatest DeviceReadList DeviceReadTimeSeries Devices DeviceStreams DeviceWrite DeviceWriteBuffer DGaussianWavelet DiacriticalPositioning Diagonal DiagonalizableMatrixQ DiagonalMatrix DiagonalMatrixQ Dialog DialogIndent DialogInput DialogLevel DialogNotebook DialogProlog DialogReturn DialogSymbols Diamond DiamondMatrix DiceDissimilarity DictionaryLookup DictionaryWordQ DifferenceDelta DifferenceOrder DifferenceQuotient DifferenceRoot DifferenceRootReduce Differences DifferentialD DifferentialRoot DifferentialRootReduce DifferentiatorFilter DigitalSignature DigitBlock DigitBlockMinimum DigitCharacter DigitCount DigitQ DihedralAngle DihedralGroup Dilation DimensionalCombinations DimensionalMeshComponents DimensionReduce DimensionReducerFunction DimensionReduction Dimensions DiracComb DiracDelta DirectedEdge DirectedEdges DirectedGraph DirectedGraphQ DirectedInfinity Direction Directive Directory DirectoryName DirectoryQ DirectoryStack DirichletBeta DirichletCharacter DirichletCondition DirichletConvolve DirichletDistribution DirichletEta DirichletL DirichletLambda DirichletTransform DirichletWindow DisableConsolePrintPacket DisableFormatting DiscreteChirpZTransform DiscreteConvolve DiscreteDelta DiscreteHadamardTransform DiscreteIndicator DiscreteLimit DiscreteLQEstimatorGains DiscreteLQRegulatorGains DiscreteLyapunovSolve DiscreteMarkovProcess DiscreteMaxLimit DiscreteMinLimit DiscretePlot DiscretePlot3D DiscreteRatio DiscreteRiccatiSolve DiscreteShift DiscreteTimeModelQ DiscreteUniformDistribution DiscreteVariables DiscreteWaveletData DiscreteWaveletPacketTransform DiscreteWaveletTransform DiscretizeGraphics DiscretizeRegion Discriminant DisjointQ Disjunction Disk DiskBox DiskMatrix DiskSegment Dispatch DispatchQ DispersionEstimatorFunction Display DisplayAllSteps DisplayEndPacket DisplayFlushImagePacket DisplayForm DisplayFunction DisplayPacket DisplayRules DisplaySetSizePacket DisplayString DisplayTemporary DisplayWith DisplayWithRef DisplayWithVariable DistanceFunction DistanceMatrix DistanceTransform Distribute Distributed DistributedContexts DistributeDefinitions DistributionChart DistributionDomain DistributionFitTest DistributionParameterAssumptions DistributionParameterQ Dithering Div Divergence Divide DivideBy Dividers DivideSides Divisible Divisors DivisorSigma DivisorSum DMSList DMSString Do DockedCells DocumentGenerator DocumentGeneratorInformation DocumentGeneratorInformationData DocumentGenerators DocumentNotebook DocumentWeightingRules Dodecahedron DomainRegistrationInformation DominantColors DOSTextFormat Dot DotDashed DotEqual DotLayer DotPlusLayer Dotted DoubleBracketingBar DoubleContourIntegral DoubleDownArrow DoubleLeftArrow DoubleLeftRightArrow DoubleLeftTee DoubleLongLeftArrow DoubleLongLeftRightArrow DoubleLongRightArrow DoubleRightArrow DoubleRightTee DoubleUpArrow DoubleUpDownArrow DoubleVerticalBar DoublyInfinite Down DownArrow DownArrowBar DownArrowUpArrow DownLeftRightVector DownLeftTeeVector DownLeftVector DownLeftVectorBar DownRightTeeVector DownRightVector DownRightVectorBar Downsample DownTee DownTeeArrow DownValues DragAndDrop DrawEdges DrawFrontFaces DrawHighlighted Drop DropoutLayer DSolve DSolveValue Dt DualLinearProgramming DualPolyhedron DualSystemsModel DumpGet DumpSave DuplicateFreeQ Duration Dynamic DynamicBox DynamicBoxOptions DynamicEvaluationTimeout DynamicGeoGraphics DynamicImage DynamicLocation DynamicModule DynamicModuleBox DynamicModuleBoxOptions DynamicModuleParent DynamicModuleValues DynamicName DynamicNamespace DynamicReference DynamicSetting DynamicUpdating DynamicWrapper DynamicWrapperBox DynamicWrapperBoxOptionsE EarthImpactData EarthquakeData EccentricityCentrality Echo EchoFunction EclipseType EdgeAdd EdgeBetweennessCentrality EdgeCapacity EdgeCapForm EdgeColor EdgeConnectivity EdgeContract EdgeCost EdgeCount EdgeCoverQ EdgeCycleMatrix EdgeDashing EdgeDelete EdgeDetect EdgeForm EdgeIndex EdgeJoinForm EdgeLabeling EdgeLabels EdgeLabelStyle EdgeList EdgeOpacity EdgeQ EdgeRenderingFunction EdgeRules EdgeShapeFunction EdgeStyle EdgeThickness EdgeWeight EdgeWeightedGraphQ Editable EditButtonSettings EditCellTagsSettings EditDistance EffectiveInterest Eigensystem Eigenvalues EigenvectorCentrality Eigenvectors Element ElementData ElementwiseLayer ElidedForms Eliminate EliminationOrder Ellipsoid EllipticE EllipticExp EllipticExpPrime EllipticF EllipticFilterModel EllipticK EllipticLog EllipticNomeQ EllipticPi EllipticReducedHalfPeriods EllipticTheta EllipticThetaPrime EmbedCode EmbeddedHTML EmbeddedService EmbeddingLayer EmbeddingObject EmitSound EmphasizeSyntaxErrors EmpiricalDistribution Empty EmptyGraphQ EmptyRegion EnableConsolePrintPacket Enabled Encode Encrypt EncryptedObject EncryptFile End EndAdd EndDialogPacket EndFrontEndInteractionPacket EndOfBuffer EndOfFile EndOfLine EndOfString EndPackage EngineEnvironment EngineeringForm Enter EnterExpressionPacket EnterTextPacket Entity EntityClass EntityClassList EntityCopies EntityFunction EntityGroup EntityInstance EntityList EntityPrefetch EntityProperties EntityProperty EntityPropertyClass EntityRegister EntityStore EntityStores EntityTypeName EntityUnregister EntityValue Entropy EntropyFilter Environment Epilog EpilogFunction Equal EqualColumns EqualRows EqualTilde EqualTo EquatedTo Equilibrium EquirippleFilterKernel Equivalent Erf Erfc Erfi ErlangB ErlangC ErlangDistribution Erosion ErrorBox ErrorBoxOptions ErrorNorm ErrorPacket ErrorsDialogSettings EscapeRadius EstimatedBackground EstimatedDistribution EstimatedProcess EstimatorGains EstimatorRegulator EuclideanDistance EulerAngles EulerCharacteristic EulerE EulerGamma EulerianGraphQ EulerMatrix EulerPhi Evaluatable Evaluate Evaluated EvaluatePacket EvaluateScheduledTask EvaluationBox EvaluationCell EvaluationCompletionAction EvaluationData EvaluationElements EvaluationEnvironment EvaluationMode EvaluationMonitor EvaluationNotebook EvaluationObject EvaluationOrder Evaluator EvaluatorNames EvenQ EventData EventEvaluator EventHandler EventHandlerTag EventLabels EventSeries ExactBlackmanWindow ExactNumberQ ExactRootIsolation ExampleData Except ExcludedForms ExcludedLines ExcludedPhysicalQuantities ExcludePods Exclusions ExclusionsStyle Exists Exit ExitDialog ExoplanetData Exp Expand ExpandAll ExpandDenominator ExpandFileName ExpandNumerator Expectation ExpectationE ExpectedValue ExpGammaDistribution ExpIntegralE ExpIntegralEi ExpirationDate Exponent ExponentFunction ExponentialDistribution ExponentialFamily ExponentialGeneratingFunction ExponentialMovingAverage ExponentialPowerDistribution ExponentPosition ExponentStep Export ExportAutoReplacements ExportByteArray ExportForm ExportPacket ExportString Expression ExpressionCell ExpressionPacket ExpressionUUID ExpToTrig ExtendedEntityClass ExtendedGCD Extension ExtentElementFunction ExtentMarkers ExtentSize ExternalBundle ExternalCall ExternalDataCharacterEncoding ExternalEvaluate ExternalFunction ExternalFunctionName ExternalObject ExternalOptions ExternalSessionObject ExternalSessions ExternalTypeSignature ExternalValue Extract ExtractArchive ExtractLayer ExtremeValueDistributionFaceForm FaceGrids FaceGridsStyle FacialFeatures Factor FactorComplete Factorial Factorial2 FactorialMoment FactorialMomentGeneratingFunction FactorialPower FactorInteger FactorList FactorSquareFree FactorSquareFreeList FactorTerms FactorTermsList Fail Failure FailureAction FailureDistribution FailureQ False FareySequence FARIMAProcess FeatureDistance FeatureExtract FeatureExtraction FeatureExtractor FeatureExtractorFunction FeatureNames FeatureNearest FeatureSpacePlot FeatureSpacePlot3D FeatureTypes FEDisableConsolePrintPacket FeedbackLinearize FeedbackSector FeedbackSectorStyle FeedbackType FEEnableConsolePrintPacket FetalGrowthData Fibonacci Fibonorial FieldCompletionFunction FieldHint FieldHintStyle FieldMasked FieldSize File FileBaseName FileByteCount FileConvert FileDate FileExistsQ FileExtension FileFormat FileHandler FileHash FileInformation FileName FileNameDepth FileNameDialogSettings FileNameDrop FileNameForms FileNameJoin FileNames FileNameSetter FileNameSplit FileNameTake FilePrint FileSize FileSystemMap FileSystemScan FileTemplate FileTemplateApply FileType FilledCurve FilledCurveBox FilledCurveBoxOptions Filling FillingStyle FillingTransform FilteredEntityClass FilterRules FinancialBond FinancialData FinancialDerivative FinancialIndicator Find FindAnomalies FindArgMax FindArgMin FindChannels FindClique FindClusters FindCookies FindCurvePath FindCycle FindDevices FindDistribution FindDistributionParameters FindDivisions FindEdgeCover FindEdgeCut FindEdgeIndependentPaths FindEquationalProof FindEulerianCycle FindExternalEvaluators FindFaces FindFile FindFit FindFormula FindFundamentalCycles FindGeneratingFunction FindGeoLocation FindGeometricConjectures FindGeometricTransform FindGraphCommunities FindGraphIsomorphism FindGraphPartition FindHamiltonianCycle FindHamiltonianPath FindHiddenMarkovStates FindIndependentEdgeSet FindIndependentVertexSet FindInstance FindIntegerNullVector FindKClan FindKClique FindKClub FindKPlex FindLibrary FindLinearRecurrence FindList FindMatchingColor FindMaximum FindMaximumFlow FindMaxValue FindMeshDefects FindMinimum FindMinimumCostFlow FindMinimumCut FindMinValue FindMoleculeSubstructure FindPath FindPeaks FindPermutation FindPostmanTour FindProcessParameters FindRepeat FindRoot FindSequenceFunction FindSettings FindShortestPath FindShortestTour FindSpanningTree FindSystemModelEquilibrium FindTextualAnswer FindThreshold FindTransientRepeat FindVertexCover FindVertexCut FindVertexIndependentPaths Fine FinishDynamic FiniteAbelianGroupCount FiniteGroupCount FiniteGroupData First FirstCase FirstPassageTimeDistribution FirstPosition FischerGroupFi22 FischerGroupFi23 FischerGroupFi24Prime FisherHypergeometricDistribution FisherRatioTest FisherZDistribution Fit FitAll FitRegularization FittedModel FixedOrder FixedPoint FixedPointList FlashSelection Flat Flatten FlattenAt FlattenLayer FlatTopWindow FlipView Floor FlowPolynomial FlushPrintOutputPacket Fold FoldList FoldPair FoldPairList FollowRedirects Font FontColor FontFamily FontForm FontName FontOpacity FontPostScriptName FontProperties FontReencoding FontSize FontSlant FontSubstitutions FontTracking FontVariations FontWeight For ForAll Format FormatRules FormatType FormatTypeAutoConvert FormatValues FormBox FormBoxOptions FormControl FormFunction FormLayoutFunction FormObject FormPage FormTheme FormulaData FormulaLookup FortranForm Forward ForwardBackward Fourier FourierCoefficient FourierCosCoefficient FourierCosSeries FourierCosTransform FourierDCT FourierDCTFilter FourierDCTMatrix FourierDST FourierDSTMatrix FourierMatrix FourierParameters FourierSequenceTransform FourierSeries FourierSinCoefficient FourierSinSeries FourierSinTransform FourierTransform FourierTrigSeries FractionalBrownianMotionProcess FractionalGaussianNoiseProcess FractionalPart FractionBox FractionBoxOptions FractionLine Frame FrameBox FrameBoxOptions Framed FrameInset FrameLabel Frameless FrameMargins FrameRate FrameStyle FrameTicks FrameTicksStyle FRatioDistribution FrechetDistribution FreeQ FrenetSerretSystem FrequencySamplingFilterKernel FresnelC FresnelF FresnelG FresnelS Friday FrobeniusNumber FrobeniusSolve FromAbsoluteTime FromCharacterCode FromCoefficientRules FromContinuedFraction FromDate FromDigits FromDMS FromEntity FromJulianDate FromLetterNumber FromPolarCoordinates FromRomanNumeral FromSphericalCoordinates FromUnixTime Front FrontEndDynamicExpression FrontEndEventActions FrontEndExecute FrontEndObject FrontEndResource FrontEndResourceString FrontEndStackSize FrontEndToken FrontEndTokenExecute FrontEndValueCache FrontEndVersion FrontFaceColor FrontFaceOpacity Full FullAxes FullDefinition FullForm FullGraphics FullInformationOutputRegulator FullOptions FullRegion FullSimplify Function FunctionCompile FunctionCompileExport FunctionCompileExportByteArray FunctionCompileExportLibrary FunctionCompileExportString FunctionDomain FunctionExpand FunctionInterpolation FunctionPeriod FunctionRange FunctionSpace FussellVeselyImportanceGaborFilter GaborMatrix GaborWavelet GainMargins GainPhaseMargins GalaxyData GalleryView Gamma GammaDistribution GammaRegularized GapPenalty GARCHProcess GatedRecurrentLayer Gather GatherBy GaugeFaceElementFunction GaugeFaceStyle GaugeFrameElementFunction GaugeFrameSize GaugeFrameStyle GaugeLabels GaugeMarkers GaugeStyle GaussianFilter GaussianIntegers GaussianMatrix GaussianOrthogonalMatrixDistribution GaussianSymplecticMatrixDistribution GaussianUnitaryMatrixDistribution GaussianWindow GCD GegenbauerC General GeneralizedLinearModelFit GenerateAsymmetricKeyPair GenerateConditions GeneratedCell GeneratedDocumentBinding GenerateDerivedKey GenerateDigitalSignature GenerateDocument GeneratedParameters GeneratedQuantityMagnitudes GenerateHTTPResponse GenerateSecuredAuthenticationKey GenerateSymmetricKey GeneratingFunction GeneratorDescription GeneratorHistoryLength GeneratorOutputType Generic GenericCylindricalDecomposition GenomeData GenomeLookup GeoAntipode GeoArea GeoArraySize GeoBackground GeoBoundingBox GeoBounds GeoBoundsRegion GeoBubbleChart GeoCenter GeoCircle GeodesicClosing GeodesicDilation GeodesicErosion GeodesicOpening GeoDestination GeodesyData GeoDirection GeoDisk GeoDisplacement GeoDistance GeoDistanceList GeoElevationData GeoEntities GeoGraphics GeogravityModelData GeoGridDirectionDifference GeoGridLines GeoGridLinesStyle GeoGridPosition GeoGridRange GeoGridRangePadding GeoGridUnitArea GeoGridUnitDistance GeoGridVector GeoGroup GeoHemisphere GeoHemisphereBoundary GeoHistogram GeoIdentify GeoImage GeoLabels GeoLength GeoListPlot GeoLocation GeologicalPeriodData GeomagneticModelData GeoMarker GeometricAssertion GeometricBrownianMotionProcess GeometricDistribution GeometricMean GeometricMeanFilter GeometricScene GeometricTransformation GeometricTransformation3DBox GeometricTransformation3DBoxOptions GeometricTransformationBox GeometricTransformationBoxOptions GeoModel GeoNearest GeoPath GeoPosition GeoPositionENU GeoPositionXYZ GeoProjection GeoProjectionData GeoRange GeoRangePadding GeoRegionValuePlot GeoResolution GeoScaleBar GeoServer GeoSmoothHistogram GeoStreamPlot GeoStyling GeoStylingImageFunction GeoVariant GeoVector GeoVectorENU GeoVectorPlot GeoVectorXYZ GeoVisibleRegion GeoVisibleRegionBoundary GeoWithinQ GeoZoomLevel GestureHandler GestureHandlerTag Get GetBoundingBoxSizePacket GetContext GetEnvironment GetFileName GetFrontEndOptionsDataPacket GetLinebreakInformationPacket GetMenusPacket GetPageBreakInformationPacket Glaisher GlobalClusteringCoefficient GlobalPreferences GlobalSession Glow GoldenAngle GoldenRatio GompertzMakehamDistribution GoodmanKruskalGamma GoodmanKruskalGammaTest Goto Grad Gradient GradientFilter GradientOrientationFilter GrammarApply GrammarRules GrammarToken Graph Graph3D GraphAssortativity GraphAutomorphismGroup GraphCenter GraphComplement GraphData GraphDensity GraphDiameter GraphDifference GraphDisjointUnion GraphDistance GraphDistanceMatrix GraphElementData GraphEmbedding GraphHighlight GraphHighlightStyle GraphHub Graphics Graphics3D Graphics3DBox Graphics3DBoxOptions GraphicsArray GraphicsBaseline GraphicsBox GraphicsBoxOptions GraphicsColor GraphicsColumn GraphicsComplex GraphicsComplex3DBox GraphicsComplex3DBoxOptions GraphicsComplexBox GraphicsComplexBoxOptions GraphicsContents GraphicsData GraphicsGrid GraphicsGridBox GraphicsGroup GraphicsGroup3DBox GraphicsGroup3DBoxOptions GraphicsGroupBox GraphicsGroupBoxOptions GraphicsGrouping GraphicsHighlightColor GraphicsRow GraphicsSpacing GraphicsStyle GraphIntersection GraphLayout GraphLinkEfficiency GraphPeriphery GraphPlot GraphPlot3D GraphPower GraphPropertyDistribution GraphQ GraphRadius GraphReciprocity GraphRoot GraphStyle GraphUnion Gray GrayLevel Greater GreaterEqual GreaterEqualLess GreaterEqualThan GreaterFullEqual GreaterGreater GreaterLess GreaterSlantEqual GreaterThan GreaterTilde Green GreenFunction Grid GridBaseline GridBox GridBoxAlignment GridBoxBackground GridBoxDividers GridBoxFrame GridBoxItemSize GridBoxItemStyle GridBoxOptions GridBoxSpacings GridCreationSettings GridDefaultElement GridElementStyleOptions GridFrame GridFrameMargins GridGraph GridLines GridLinesStyle GroebnerBasis GroupActionBase GroupBy GroupCentralizer GroupElementFromWord GroupElementPosition GroupElementQ GroupElements GroupElementToWord GroupGenerators Groupings GroupMultiplicationTable GroupOrbits GroupOrder GroupPageBreakWithin GroupSetwiseStabilizer GroupStabilizer GroupStabilizerChain GroupTogetherGrouping GroupTogetherNestedGrouping GrowCutComponents Gudermannian GuidedFilter GumbelDistributionHaarWavelet HadamardMatrix HalfLine HalfNormalDistribution HalfPlane HalfSpace HamiltonianGraphQ HammingDistance HammingWindow HandlerFunctions HandlerFunctionsKeys HankelH1 HankelH2 HankelMatrix HankelTransform HannPoissonWindow HannWindow HaradaNortonGroupHN HararyGraph HarmonicMean HarmonicMeanFilter HarmonicNumber Hash Haversine HazardFunction Head HeadCompose HeaderLines Heads HeavisideLambda HeavisidePi HeavisideTheta HeldGroupHe HeldPart HelpBrowserLookup HelpBrowserNotebook HelpBrowserSettings Here HermiteDecomposition HermiteH HermitianMatrixQ HessenbergDecomposition Hessian HexadecimalCharacter Hexahedron HexahedronBox HexahedronBoxOptions HiddenMarkovProcess HiddenSurface Highlighted HighlightGraph HighlightImage HighlightMesh HighpassFilter HigmanSimsGroupHS HilbertCurve HilbertFilter HilbertMatrix Histogram Histogram3D HistogramDistribution HistogramList HistogramTransform HistogramTransformInterpolation HistoricalPeriodData HitMissTransform HITSCentrality HjorthDistribution HodgeDual HoeffdingD HoeffdingDTest Hold HoldAll HoldAllComplete HoldComplete HoldFirst HoldForm HoldPattern HoldRest HolidayCalendar HomeDirectory HomePage Horizontal HorizontalForm HorizontalGauge HorizontalScrollPosition HornerForm HostLookup HotellingTSquareDistribution HoytDistribution HTMLSave HTTPErrorResponse HTTPRedirect HTTPRequest HTTPRequestData HTTPResponse Hue HumanGrowthData HumpDownHump HumpEqual HurwitzLerchPhi HurwitzZeta HyperbolicDistribution HypercubeGraph HyperexponentialDistribution Hyperfactorial Hypergeometric0F1 Hypergeometric0F1Regularized Hypergeometric1F1 Hypergeometric1F1Regularized Hypergeometric2F1 Hypergeometric2F1Regularized HypergeometricDistribution HypergeometricPFQ HypergeometricPFQRegularized HypergeometricU Hyperlink HyperlinkCreationSettings Hyperplane Hyphenation HyphenationOptions HypoexponentialDistribution HypothesisTestDataI IconData Iconize IconizedObject IconRules Icosahedron Identity IdentityMatrix If IgnoreCase IgnoreDiacritics IgnorePunctuation IgnoreSpellCheck IgnoringInactive Im Image Image3D Image3DProjection Image3DSlices ImageAccumulate ImageAdd ImageAdjust ImageAlign ImageApply ImageApplyIndexed ImageAspectRatio ImageAssemble ImageAugmentationLayer ImageBoundingBoxes ImageCache ImageCacheValid ImageCapture ImageCaptureFunction ImageCases ImageChannels ImageClip ImageCollage ImageColorSpace ImageCompose ImageContainsQ ImageContents ImageConvolve ImageCooccurrence ImageCorners ImageCorrelate ImageCorrespondingPoints ImageCrop ImageData ImageDeconvolve ImageDemosaic ImageDifference ImageDimensions ImageDisplacements ImageDistance ImageEffect ImageExposureCombine ImageFeatureTrack ImageFileApply ImageFileFilter ImageFileScan ImageFilter ImageFocusCombine ImageForestingComponents ImageFormattingWidth ImageForwardTransformation ImageGraphics ImageHistogram ImageIdentify ImageInstanceQ ImageKeypoints ImageLevels ImageLines ImageMargins ImageMarker ImageMarkers ImageMeasurements ImageMesh ImageMultiply ImageOffset ImagePad ImagePadding ImagePartition ImagePeriodogram ImagePerspectiveTransformation ImagePosition ImagePreviewFunction ImagePyramid ImagePyramidApply ImageQ ImageRangeCache ImageRecolor ImageReflect ImageRegion ImageResize ImageResolution ImageRestyle ImageRotate ImageRotated ImageSaliencyFilter ImageScaled ImageScan ImageSize ImageSizeAction ImageSizeCache ImageSizeMultipliers ImageSizeRaw ImageSubtract ImageTake ImageTransformation ImageTrim ImageType ImageValue ImageValuePositions ImagingDevice ImplicitRegion Implies Import ImportAutoReplacements ImportByteArray ImportOptions ImportString ImprovementImportance In Inactivate Inactive IncidenceGraph IncidenceList IncidenceMatrix IncludeAromaticBonds IncludeConstantBasis IncludeDefinitions IncludeDirectories IncludeFileExtension IncludeGeneratorTasks IncludeHydrogens IncludeInflections IncludeMetaInformation IncludePods IncludeQuantities IncludeRelatedTables IncludeSingularTerm IncludeWindowTimes Increment IndefiniteMatrixQ Indent IndentingNewlineSpacings IndentMaxFraction IndependenceTest IndependentEdgeSetQ IndependentPhysicalQuantity IndependentUnit IndependentUnitDimension IndependentVertexSetQ Indeterminate IndeterminateThreshold IndexCreationOptions Indexed IndexGraph IndexTag Inequality InexactNumberQ InexactNumbers InfiniteLine InfinitePlane Infinity Infix InflationAdjust InflationMethod Information InformationData InformationDataGrid Inherited InheritScope InhomogeneousPoissonProcess InitialEvaluationHistory Initialization InitializationCell InitializationCellEvaluation InitializationCellWarning InitializationObjects InitializationValue Initialize InitialSeeding InlineCounterAssignments InlineCounterIncrements InlineRules Inner InnerPolygon InnerPolyhedron Inpaint Input InputAliases InputAssumptions InputAutoReplacements InputField InputFieldBox InputFieldBoxOptions InputForm InputGrouping InputNamePacket InputNotebook InputPacket InputSettings InputStream InputString InputStringPacket InputToBoxFormPacket Insert InsertionFunction InsertionPointObject InsertLinebreaks InsertResults Inset Inset3DBox Inset3DBoxOptions InsetBox InsetBoxOptions Insphere Install InstallService InstanceNormalizationLayer InString Integer IntegerDigits IntegerExponent IntegerLength IntegerName IntegerPart IntegerPartitions IntegerQ IntegerReverse Integers IntegerString Integral Integrate Interactive InteractiveTradingChart Interlaced Interleaving InternallyBalancedDecomposition InterpolatingFunction InterpolatingPolynomial Interpolation InterpolationOrder InterpolationPoints InterpolationPrecision Interpretation InterpretationBox InterpretationBoxOptions InterpretationFunction Interpreter InterpretTemplate InterquartileRange Interrupt InterruptSettings IntersectingQ Intersection Interval IntervalIntersection IntervalMarkers IntervalMarkersStyle IntervalMemberQ IntervalSlider IntervalUnion Into Inverse InverseBetaRegularized InverseCDF InverseChiSquareDistribution InverseContinuousWaveletTransform InverseDistanceTransform InverseEllipticNomeQ InverseErf InverseErfc InverseFourier InverseFourierCosTransform InverseFourierSequenceTransform InverseFourierSinTransform InverseFourierTransform InverseFunction InverseFunctions InverseGammaDistribution InverseGammaRegularized InverseGaussianDistribution InverseGudermannian InverseHankelTransform InverseHaversine InverseImagePyramid InverseJacobiCD InverseJacobiCN InverseJacobiCS InverseJacobiDC InverseJacobiDN InverseJacobiDS InverseJacobiNC InverseJacobiND InverseJacobiNS InverseJacobiSC InverseJacobiSD InverseJacobiSN InverseLaplaceTransform InverseMellinTransform InversePermutation InverseRadon InverseRadonTransform InverseSeries InverseShortTimeFourier InverseSpectrogram InverseSurvivalFunction InverseTransformedRegion InverseWaveletTransform InverseWeierstrassP InverseWishartMatrixDistribution InverseZTransform Invisible InvisibleApplication InvisibleTimes IPAddress IrreduciblePolynomialQ IslandData IsolatingInterval IsomorphicGraphQ IsotopeData Italic Item ItemAspectRatio ItemBox ItemBoxOptions ItemSize ItemStyle ItoProcessJaccardDissimilarity JacobiAmplitude Jacobian JacobiCD JacobiCN JacobiCS JacobiDC JacobiDN JacobiDS JacobiNC JacobiND JacobiNS JacobiP JacobiSC JacobiSD JacobiSN JacobiSymbol JacobiZeta JankoGroupJ1 JankoGroupJ2 JankoGroupJ3 JankoGroupJ4 JarqueBeraALMTest JohnsonDistribution Join JoinAcross Joined JoinedCurve JoinedCurveBox JoinedCurveBoxOptions JoinForm JordanDecomposition JordanModelDecomposition JulianDate JuliaSetBoettcher JuliaSetIterationCount JuliaSetPlot JuliaSetPointsK KagiChart KaiserBesselWindow KaiserWindow KalmanEstimator KalmanFilter KarhunenLoeveDecomposition KaryTree KatzCentrality KCoreComponents KDistribution KEdgeConnectedComponents KEdgeConnectedGraphQ KelvinBei KelvinBer KelvinKei KelvinKer KendallTau KendallTauTest KernelExecute KernelFunction KernelMixtureDistribution Kernels Ket Key KeyCollisionFunction KeyComplement KeyDrop KeyDropFrom KeyExistsQ KeyFreeQ KeyIntersection KeyMap KeyMemberQ KeypointStrength Keys KeySelect KeySort KeySortBy KeyTake KeyUnion KeyValueMap KeyValuePattern Khinchin KillProcess KirchhoffGraph KirchhoffMatrix KleinInvariantJ KnapsackSolve KnightTourGraph KnotData KnownUnitQ KochCurve KolmogorovSmirnovTest KroneckerDelta KroneckerModelDecomposition KroneckerProduct KroneckerSymbol KuiperTest KumaraswamyDistribution Kurtosis KuwaharaFilter KVertexConnectedComponents KVertexConnectedGraphQLABColor Label Labeled LabeledSlider LabelingFunction LabelingSize LabelStyle LabelVisibility LaguerreL LakeData LambdaComponents LambertW LaminaData LanczosWindow LandauDistribution Language LanguageCategory LanguageData LanguageIdentify LanguageOptions LaplaceDistribution LaplaceTransform Laplacian LaplacianFilter LaplacianGaussianFilter Large Larger Last Latitude LatitudeLongitude LatticeData LatticeReduce Launch LaunchKernels LayeredGraphPlot LayerSizeFunction LayoutInformation LCHColor LCM LeaderSize LeafCount LeapYearQ LearnDistribution LearnedDistribution LearningRate LearningRateMultipliers LeastSquares LeastSquaresFilterKernel Left LeftArrow LeftArrowBar LeftArrowRightArrow LeftDownTeeVector LeftDownVector LeftDownVectorBar LeftRightArrow LeftRightVector LeftTee LeftTeeArrow LeftTeeVector LeftTriangle LeftTriangleBar LeftTriangleEqual LeftUpDownVector LeftUpTeeVector LeftUpVector LeftUpVectorBar LeftVector LeftVectorBar LegendAppearance Legended LegendFunction LegendLabel LegendLayout LegendMargins LegendMarkers LegendMarkerSize LegendreP LegendreQ LegendreType Length LengthWhile LerchPhi Less LessEqual LessEqualGreater LessEqualThan LessFullEqual LessGreater LessLess LessSlantEqual LessThan LessTilde LetterCharacter LetterCounts LetterNumber LetterQ Level LeveneTest LeviCivitaTensor LevyDistribution Lexicographic LibraryDataType LibraryFunction LibraryFunctionError LibraryFunctionInformation LibraryFunctionLoad LibraryFunctionUnload LibraryLoad LibraryUnload LicenseID LiftingFilterData LiftingWaveletTransform LightBlue LightBrown LightCyan Lighter LightGray LightGreen Lighting LightingAngle LightMagenta LightOrange LightPink LightPurple LightRed LightSources LightYellow Likelihood Limit LimitsPositioning LimitsPositioningTokens LindleyDistribution Line Line3DBox Line3DBoxOptions LinearFilter LinearFractionalOptimization LinearFractionalTransform LinearGradientImage LinearizingTransformationData LinearLayer LinearModelFit LinearOffsetFunction LinearOptimization LinearProgramming LinearRecurrence LinearSolve LinearSolveFunction LineBox LineBoxOptions LineBreak LinebreakAdjustments LineBreakChart LinebreakSemicolonWeighting LineBreakWithin LineColor LineGraph LineIndent LineIndentMaxFraction LineIntegralConvolutionPlot LineIntegralConvolutionScale LineLegend LineOpacity LineSpacing LineWrapParts LinkActivate LinkClose LinkConnect LinkConnectedQ LinkCreate LinkError LinkFlush LinkFunction LinkHost LinkInterrupt LinkLaunch LinkMode LinkObject LinkOpen LinkOptions LinkPatterns LinkProtocol LinkRankCentrality LinkRead LinkReadHeld LinkReadyQ Links LinkService LinkWrite LinkWriteHeld LiouvilleLambda List Listable ListAnimate ListContourPlot ListContourPlot3D ListConvolve ListCorrelate ListCurvePathPlot ListDeconvolve ListDensityPlot ListDensityPlot3D Listen ListFormat ListFourierSequenceTransform ListInterpolation ListLineIntegralConvolutionPlot ListLinePlot ListLogLinearPlot ListLogLogPlot ListLogPlot ListPicker ListPickerBox ListPickerBoxBackground ListPickerBoxOptions ListPlay ListPlot ListPlot3D ListPointPlot3D ListPolarPlot ListQ ListSliceContourPlot3D ListSliceDensityPlot3D ListSliceVectorPlot3D ListStepPlot ListStreamDensityPlot ListStreamPlot ListSurfacePlot3D ListVectorDensityPlot ListVectorPlot ListVectorPlot3D ListZTransform Literal LiteralSearch LocalAdaptiveBinarize LocalCache LocalClusteringCoefficient LocalizeDefinitions LocalizeVariables LocalObject LocalObjects LocalResponseNormalizationLayer LocalSubmit LocalSymbol LocalTime LocalTimeZone LocationEquivalenceTest LocationTest Locator LocatorAutoCreate LocatorBox LocatorBoxOptions LocatorCentering LocatorPane LocatorPaneBox LocatorPaneBoxOptions LocatorRegion Locked Log Log10 Log2 LogBarnesG LogGamma LogGammaDistribution LogicalExpand LogIntegral LogisticDistribution LogisticSigmoid LogitModelFit LogLikelihood LogLinearPlot LogLogisticDistribution LogLogPlot LogMultinormalDistribution LogNormalDistribution LogPlot LogRankTest LogSeriesDistribution LongEqual Longest LongestCommonSequence LongestCommonSequencePositions LongestCommonSubsequence LongestCommonSubsequencePositions LongestMatch LongestOrderedSequence LongForm Longitude LongLeftArrow LongLeftRightArrow LongRightArrow LongShortTermMemoryLayer Lookup Loopback LoopFreeGraphQ LossFunction LowerCaseQ LowerLeftArrow LowerRightArrow LowerTriangularize LowerTriangularMatrixQ LowpassFilter LQEstimatorGains LQGRegulator LQOutputRegulatorGains LQRegulatorGains LUBackSubstitution LucasL LuccioSamiComponents LUDecomposition LunarEclipse LUVColor LyapunovSolve LyonsGroupLyMachineID MachineName MachineNumberQ MachinePrecision MacintoshSystemPageSetup Magenta Magnification Magnify MailAddressValidation MailExecute MailFolder MailItem MailReceiverFunction MailResponseFunction MailSearch MailServerConnect MailServerConnection MailSettings MainSolve MaintainDynamicCaches Majority MakeBoxes MakeExpression MakeRules ManagedLibraryExpressionID ManagedLibraryExpressionQ MandelbrotSetBoettcher MandelbrotSetDistance MandelbrotSetIterationCount MandelbrotSetMemberQ MandelbrotSetPlot MangoldtLambda ManhattanDistance Manipulate Manipulator MannedSpaceMissionData MannWhitneyTest MantissaExponent Manual Map MapAll MapAt MapIndexed MAProcess MapThread MarchenkoPasturDistribution MarcumQ MardiaCombinedTest MardiaKurtosisTest MardiaSkewnessTest MarginalDistribution MarkovProcessProperties Masking MatchingDissimilarity MatchLocalNameQ MatchLocalNames MatchQ Material MathematicalFunctionData MathematicaNotation MathieuC MathieuCharacteristicA MathieuCharacteristicB MathieuCharacteristicExponent MathieuCPrime MathieuGroupM11 MathieuGroupM12 MathieuGroupM22 MathieuGroupM23 MathieuGroupM24 MathieuS MathieuSPrime MathMLForm MathMLText Matrices MatrixExp MatrixForm MatrixFunction MatrixLog MatrixNormalDistribution MatrixPlot MatrixPower MatrixPropertyDistribution MatrixQ MatrixRank MatrixTDistribution Max MaxBend MaxCellMeasure MaxColorDistance MaxDetect MaxDuration MaxExtraBandwidths MaxExtraConditions MaxFeatureDisplacement MaxFeatures MaxFilter MaximalBy Maximize MaxItems MaxIterations MaxLimit MaxMemoryUsed MaxMixtureKernels MaxOverlapFraction MaxPlotPoints MaxPoints MaxRecursion MaxStableDistribution MaxStepFraction MaxSteps MaxStepSize MaxTrainingRounds MaxValue MaxwellDistribution MaxWordGap McLaughlinGroupMcL Mean MeanAbsoluteLossLayer MeanAround MeanClusteringCoefficient MeanDegreeConnectivity MeanDeviation MeanFilter MeanGraphDistance MeanNeighborDegree MeanShift MeanShiftFilter MeanSquaredLossLayer Median MedianDeviation MedianFilter MedicalTestData Medium MeijerG MeijerGReduce MeixnerDistribution MellinConvolve MellinTransform MemberQ MemoryAvailable MemoryConstrained MemoryConstraint MemoryInUse MengerMesh Menu MenuAppearance MenuCommandKey MenuEvaluator MenuItem MenuList MenuPacket MenuSortingValue MenuStyle MenuView Merge MergeDifferences MergingFunction MersennePrimeExponent MersennePrimeExponentQ Mesh MeshCellCentroid MeshCellCount MeshCellHighlight MeshCellIndex MeshCellLabel MeshCellMarker MeshCellMeasure MeshCellQuality MeshCells MeshCellShapeFunction MeshCellStyle MeshCoordinates MeshFunctions MeshPrimitives MeshQualityGoal MeshRange MeshRefinementFunction MeshRegion MeshRegionQ MeshShading MeshStyle Message MessageDialog MessageList MessageName MessageObject MessageOptions MessagePacket Messages MessagesNotebook MetaCharacters MetaInformation MeteorShowerData Method MethodOptions MexicanHatWavelet MeyerWavelet Midpoint Min MinColorDistance MinDetect MineralData MinFilter MinimalBy MinimalPolynomial MinimalStateSpaceModel Minimize MinimumTimeIncrement MinIntervalSize MinkowskiQuestionMark MinLimit MinMax MinorPlanetData Minors MinRecursion MinSize MinStableDistribution Minus MinusPlus MinValue Missing MissingBehavior MissingDataMethod MissingDataRules MissingQ MissingString MissingStyle MissingValuePattern MittagLefflerE MixedFractionParts MixedGraphQ MixedMagnitude MixedRadix MixedRadixQuantity MixedUnit MixtureDistribution Mod Modal Mode Modular ModularInverse ModularLambda Module Modulus MoebiusMu Molecule MoleculeContainsQ MoleculeEquivalentQ MoleculeGraph MoleculeModify MoleculePattern MoleculePlot MoleculePlot3D MoleculeProperty MoleculeQ MoleculeValue Moment Momentary MomentConvert MomentEvaluate MomentGeneratingFunction MomentOfInertia Monday Monitor MonomialList MonomialOrder MonsterGroupM MoonPhase MoonPosition MorletWavelet MorphologicalBinarize MorphologicalBranchPoints MorphologicalComponents MorphologicalEulerNumber MorphologicalGraph MorphologicalPerimeter MorphologicalTransform MortalityData Most MountainData MouseAnnotation MouseAppearance MouseAppearanceTag MouseButtons Mouseover MousePointerNote MousePosition MovieData MovingAverage MovingMap MovingMedian MoyalDistribution Multicolumn MultiedgeStyle MultigraphQ MultilaunchWarning MultiLetterItalics MultiLetterStyle MultilineFunction Multinomial MultinomialDistribution MultinormalDistribution MultiplicativeOrder Multiplicity MultiplySides Multiselection MultivariateHypergeometricDistribution MultivariatePoissonDistribution MultivariateTDistributionN NakagamiDistribution NameQ Names NamespaceBox NamespaceBoxOptions Nand NArgMax NArgMin NBernoulliB NBodySimulation NBodySimulationData NCache NDEigensystem NDEigenvalues NDSolve NDSolveValue Nearest NearestFunction NearestNeighborGraph NearestTo NebulaData NeedCurrentFrontEndPackagePacket NeedCurrentFrontEndSymbolsPacket NeedlemanWunschSimilarity Needs Negative NegativeBinomialDistribution NegativeDefiniteMatrixQ NegativeIntegers NegativeMultinomialDistribution NegativeRationals NegativeReals NegativeSemidefiniteMatrixQ NeighborhoodData NeighborhoodGraph Nest NestedGreaterGreater NestedLessLess NestedScriptRules NestGraph NestList NestWhile NestWhileList NetAppend NetBidirectionalOperator NetChain NetDecoder NetDelete NetDrop NetEncoder NetEvaluationMode NetExtract NetFlatten NetFoldOperator NetGraph NetInformation NetInitialize NetInsert NetInsertSharedArrays NetJoin NetMapOperator NetMapThreadOperator NetMeasurements NetModel NetNestOperator NetPairEmbeddingOperator NetPort NetPortGradient NetPrepend NetRename NetReplace NetReplacePart NetSharedArray NetStateObject NetTake NetTrain NetTrainResultsObject NetworkPacketCapture NetworkPacketRecording NetworkPacketRecordingDuring NetworkPacketTrace NeumannValue NevilleThetaC NevilleThetaD NevilleThetaN NevilleThetaS NewPrimitiveStyle NExpectation Next NextCell NextDate NextPrime NextScheduledTaskTime NHoldAll NHoldFirst NHoldRest NicholsGridLines NicholsPlot NightHemisphere NIntegrate NMaximize NMaxValue NMinimize NMinValue NominalVariables NonAssociative NoncentralBetaDistribution NoncentralChiSquareDistribution NoncentralFRatioDistribution NoncentralStudentTDistribution NonCommutativeMultiply NonConstants NondimensionalizationTransform None NoneTrue NonlinearModelFit NonlinearStateSpaceModel NonlocalMeansFilter NonNegative NonNegativeIntegers NonNegativeRationals NonNegativeReals NonPositive NonPositiveIntegers NonPositiveRationals NonPositiveReals Nor NorlundB Norm Normal NormalDistribution NormalGrouping NormalizationLayer Normalize Normalized NormalizedSquaredEuclideanDistance NormalMatrixQ NormalsFunction NormFunction Not NotCongruent NotCupCap NotDoubleVerticalBar Notebook NotebookApply NotebookAutoSave NotebookClose NotebookConvertSettings NotebookCreate NotebookCreateReturnObject NotebookDefault NotebookDelete NotebookDirectory NotebookDynamicExpression NotebookEvaluate NotebookEventActions NotebookFileName NotebookFind NotebookFindReturnObject NotebookGet NotebookGetLayoutInformationPacket NotebookGetMisspellingsPacket NotebookImport NotebookInformation NotebookInterfaceObject NotebookLocate NotebookObject NotebookOpen NotebookOpenReturnObject NotebookPath NotebookPrint NotebookPut NotebookPutReturnObject NotebookRead NotebookResetGeneratedCells Notebooks NotebookSave NotebookSaveAs NotebookSelection NotebookSetupLayoutInformationPacket NotebooksMenu NotebookTemplate NotebookWrite NotElement NotEqualTilde NotExists NotGreater NotGreaterEqual NotGreaterFullEqual NotGreaterGreater NotGreaterLess NotGreaterSlantEqual NotGreaterTilde Nothing NotHumpDownHump NotHumpEqual NotificationFunction NotLeftTriangle NotLeftTriangleBar NotLeftTriangleEqual NotLess NotLessEqual NotLessFullEqual NotLessGreater NotLessLess NotLessSlantEqual NotLessTilde NotNestedGreaterGreater NotNestedLessLess NotPrecedes NotPrecedesEqual NotPrecedesSlantEqual NotPrecedesTilde NotReverseElement NotRightTriangle NotRightTriangleBar NotRightTriangleEqual NotSquareSubset NotSquareSubsetEqual NotSquareSuperset NotSquareSupersetEqual NotSubset NotSubsetEqual NotSucceeds NotSucceedsEqual NotSucceedsSlantEqual NotSucceedsTilde NotSuperset NotSupersetEqual NotTilde NotTildeEqual NotTildeFullEqual NotTildeTilde NotVerticalBar Now NoWhitespace NProbability NProduct NProductFactors NRoots NSolve NSum NSumTerms NuclearExplosionData NuclearReactorData Null NullRecords NullSpace NullWords Number NumberCompose NumberDecompose NumberExpand NumberFieldClassNumber NumberFieldDiscriminant NumberFieldFundamentalUnits NumberFieldIntegralBasis NumberFieldNormRepresentatives NumberFieldRegulator NumberFieldRootsOfUnity NumberFieldSignature NumberForm NumberFormat NumberLinePlot NumberMarks NumberMultiplier NumberPadding NumberPoint NumberQ NumberSeparator NumberSigns NumberString Numerator NumeratorDenominator NumericalOrder NumericalSort NumericArray NumericArrayQ NumericArrayType NumericFunction NumericQ NuttallWindow NValues NyquistGridLines NyquistPlotO ObservabilityGramian ObservabilityMatrix ObservableDecomposition ObservableModelQ OceanData Octahedron OddQ Off Offset OLEData On ONanGroupON Once OneIdentity Opacity OpacityFunction OpacityFunctionScaling Open OpenAppend Opener OpenerBox OpenerBoxOptions OpenerView OpenFunctionInspectorPacket Opening OpenRead OpenSpecialOptions OpenTemporary OpenWrite Operate OperatingSystem OptimumFlowData Optional OptionalElement OptionInspectorSettings OptionQ Options OptionsPacket OptionsPattern OptionValue OptionValueBox OptionValueBoxOptions Or Orange Order OrderDistribution OrderedQ Ordering OrderingBy OrderingLayer Orderless OrderlessPatternSequence OrnsteinUhlenbeckProcess Orthogonalize OrthogonalMatrixQ Out Outer OuterPolygon OuterPolyhedron OutputAutoOverwrite OutputControllabilityMatrix OutputControllableModelQ OutputForm OutputFormData OutputGrouping OutputMathEditExpression OutputNamePacket OutputResponse OutputSizeLimit OutputStream Over OverBar OverDot Overflow OverHat Overlaps Overlay OverlayBox OverlayBoxOptions Overscript OverscriptBox OverscriptBoxOptions OverTilde OverVector OverwriteTarget OwenT OwnValuesPackage PackingMethod PaddedForm Padding PaddingLayer PaddingSize PadeApproximant PadLeft PadRight PageBreakAbove PageBreakBelow PageBreakWithin PageFooterLines PageFooters PageHeaderLines PageHeaders PageHeight PageRankCentrality PageTheme PageWidth Pagination PairedBarChart PairedHistogram PairedSmoothHistogram PairedTTest PairedZTest PaletteNotebook PalettePath PalindromeQ Pane PaneBox PaneBoxOptions Panel PanelBox PanelBoxOptions Paneled PaneSelector PaneSelectorBox PaneSelectorBoxOptions PaperWidth ParabolicCylinderD ParagraphIndent ParagraphSpacing ParallelArray ParallelCombine ParallelDo Parallelepiped ParallelEvaluate Parallelization Parallelize ParallelMap ParallelNeeds Parallelogram ParallelProduct ParallelSubmit ParallelSum ParallelTable ParallelTry Parameter ParameterEstimator ParameterMixtureDistribution ParameterVariables ParametricFunction ParametricNDSolve ParametricNDSolveValue ParametricPlot ParametricPlot3D ParametricRegion ParentBox ParentCell ParentConnect ParentDirectory ParentForm Parenthesize ParentList ParentNotebook ParetoDistribution ParetoPickandsDistribution ParkData Part PartBehavior PartialCorrelationFunction PartialD ParticleAcceleratorData ParticleData Partition PartitionGranularity PartitionsP PartitionsQ PartLayer PartOfSpeech PartProtection ParzenWindow PascalDistribution PassEventsDown PassEventsUp Paste PasteAutoQuoteCharacters PasteBoxFormInlineCells PasteButton Path PathGraph PathGraphQ Pattern PatternSequence PatternTest PauliMatrix PaulWavelet Pause PausedTime PDF PeakDetect PeanoCurve PearsonChiSquareTest PearsonCorrelationTest PearsonDistribution PercentForm PerfectNumber PerfectNumberQ PerformanceGoal Perimeter PeriodicBoundaryCondition PeriodicInterpolation Periodogram PeriodogramArray Permanent Permissions PermissionsGroup PermissionsGroupMemberQ PermissionsGroups PermissionsKey PermissionsKeys PermutationCycles PermutationCyclesQ PermutationGroup PermutationLength PermutationList PermutationListQ PermutationMax PermutationMin PermutationOrder PermutationPower PermutationProduct PermutationReplace Permutations PermutationSupport Permute PeronaMalikFilter Perpendicular PerpendicularBisector PersistenceLocation PersistenceTime PersistentObject PersistentObjects PersistentValue PersonData PERTDistribution PetersenGraph PhaseMargins PhaseRange PhysicalSystemData Pi Pick PIDData PIDDerivativeFilter PIDFeedforward PIDTune Piecewise PiecewiseExpand PieChart PieChart3D PillaiTrace PillaiTraceTest PingTime Pink PitchRecognize Pivoting PixelConstrained PixelValue PixelValuePositions Placed Placeholder PlaceholderReplace Plain PlanarAngle PlanarGraph PlanarGraphQ PlanckRadiationLaw PlaneCurveData PlanetaryMoonData PlanetData PlantData Play PlayRange Plot Plot3D Plot3Matrix PlotDivision PlotJoined PlotLabel PlotLabels PlotLayout PlotLegends PlotMarkers PlotPoints PlotRange PlotRangeClipping PlotRangeClipPlanesStyle PlotRangePadding PlotRegion PlotStyle PlotTheme Pluralize Plus PlusMinus Pochhammer PodStates PodWidth Point Point3DBox Point3DBoxOptions PointBox PointBoxOptions PointFigureChart PointLegend PointSize PoissonConsulDistribution PoissonDistribution PoissonProcess PoissonWindow PolarAxes PolarAxesOrigin PolarGridLines PolarPlot PolarTicks PoleZeroMarkers PolyaAeppliDistribution PolyGamma Polygon Polygon3DBox Polygon3DBoxOptions PolygonalNumber PolygonAngle PolygonBox PolygonBoxOptions PolygonCoordinates PolygonDecomposition PolygonHoleScale PolygonIntersections PolygonScale Polyhedron PolyhedronAngle PolyhedronCoordinates PolyhedronData PolyhedronDecomposition PolyhedronGenus PolyLog PolynomialExtendedGCD PolynomialForm PolynomialGCD PolynomialLCM PolynomialMod PolynomialQ PolynomialQuotient PolynomialQuotientRemainder PolynomialReduce PolynomialRemainder Polynomials PoolingLayer PopupMenu PopupMenuBox PopupMenuBoxOptions PopupView PopupWindow Position PositionIndex Positive PositiveDefiniteMatrixQ PositiveIntegers PositiveRationals PositiveReals PositiveSemidefiniteMatrixQ PossibleZeroQ Postfix PostScript Power PowerDistribution PowerExpand PowerMod PowerModList PowerRange PowerSpectralDensity PowersRepresentations PowerSymmetricPolynomial Precedence PrecedenceForm Precedes PrecedesEqual PrecedesSlantEqual PrecedesTilde Precision PrecisionGoal PreDecrement Predict PredictionRoot PredictorFunction PredictorInformation PredictorMeasurements PredictorMeasurementsObject PreemptProtect PreferencesPath Prefix PreIncrement Prepend PrependLayer PrependTo PreprocessingRules PreserveColor PreserveImageOptions Previous PreviousCell PreviousDate PriceGraphDistribution PrimaryPlaceholder Prime PrimeNu PrimeOmega PrimePi PrimePowerQ PrimeQ Primes PrimeZetaP PrimitivePolynomialQ PrimitiveRoot PrimitiveRootList PrincipalComponents PrincipalValue Print PrintableASCIIQ PrintAction PrintForm PrintingCopies PrintingOptions PrintingPageRange PrintingStartingPageNumber PrintingStyleEnvironment Printout3D Printout3DPreviewer PrintPrecision PrintTemporary Prism PrismBox PrismBoxOptions PrivateCellOptions PrivateEvaluationOptions PrivateFontOptions PrivateFrontEndOptions PrivateKey PrivateNotebookOptions PrivatePaths Probability ProbabilityDistribution ProbabilityPlot ProbabilityPr ProbabilityScalePlot ProbitModelFit ProcessConnection ProcessDirectory ProcessEnvironment Processes ProcessEstimator ProcessInformation ProcessObject ProcessParameterAssumptions ProcessParameterQ ProcessStateDomain ProcessStatus ProcessTimeDomain Product ProductDistribution ProductLog ProgressIndicator ProgressIndicatorBox ProgressIndicatorBoxOptions Projection Prolog PromptForm ProofObject Properties Property PropertyList PropertyValue Proportion Proportional Protect Protected ProteinData Pruning PseudoInverse PsychrometricPropertyData PublicKey PublisherID PulsarData PunctuationCharacter Purple Put PutAppend Pyramid PyramidBox PyramidBoxOptionsQBinomial QFactorial QGamma QHypergeometricPFQ QnDispersion QPochhammer QPolyGamma QRDecomposition QuadraticIrrationalQ QuadraticOptimization Quantile QuantilePlot Quantity QuantityArray QuantityDistribution QuantityForm QuantityMagnitude QuantityQ QuantityUnit QuantityVariable QuantityVariableCanonicalUnit QuantityVariableDimensions QuantityVariableIdentifier QuantityVariablePhysicalQuantity Quartics QuartileDeviation Quartiles QuartileSkewness Query QueueingNetworkProcess QueueingProcess QueueProperties Quiet Quit Quotient QuotientRemainderRadialGradientImage RadialityCentrality RadicalBox RadicalBoxOptions RadioButton RadioButtonBar RadioButtonBox RadioButtonBoxOptions Radon RadonTransform RamanujanTau RamanujanTauL RamanujanTauTheta RamanujanTauZ Ramp Random RandomChoice RandomColor RandomComplex RandomEntity RandomFunction RandomGeoPosition RandomGraph RandomImage RandomInstance RandomInteger RandomPermutation RandomPoint RandomPolygon RandomPolyhedron RandomPrime RandomReal RandomSample RandomSeed RandomSeeding RandomVariate RandomWalkProcess RandomWord Range RangeFilter RangeSpecification RankedMax RankedMin RarerProbability Raster Raster3D Raster3DBox Raster3DBoxOptions RasterArray RasterBox RasterBoxOptions Rasterize RasterSize Rational RationalFunctions Rationalize Rationals Ratios RawArray RawBoxes RawData RawMedium RayleighDistribution Re Read ReadByteArray ReadLine ReadList ReadProtected ReadString Real RealAbs RealBlockDiagonalForm RealDigits RealExponent Reals RealSign Reap RecognitionPrior RecognitionThreshold Record RecordLists RecordSeparators Rectangle RectangleBox RectangleBoxOptions RectangleChart RectangleChart3D RectangularRepeatingElement RecurrenceFilter RecurrenceTable RecurringDigitsForm Red Reduce RefBox ReferenceLineStyle ReferenceMarkers ReferenceMarkerStyle Refine ReflectionMatrix ReflectionTransform Refresh RefreshRate Region RegionBinarize RegionBoundary RegionBounds RegionCentroid RegionDifference RegionDimension RegionDisjoint RegionDistance RegionDistanceFunction RegionEmbeddingDimension RegionEqual RegionFunction RegionImage RegionIntersection RegionMeasure RegionMember RegionMemberFunction RegionMoment RegionNearest RegionNearestFunction RegionPlot RegionPlot3D RegionProduct RegionQ RegionResize RegionSize RegionSymmetricDifference RegionUnion RegionWithin RegisterExternalEvaluator RegularExpression Regularization RegularlySampledQ RegularPolygon ReIm ReImLabels ReImPlot ReImStyle Reinstall RelationalDatabase RelationGraph Release ReleaseHold ReliabilityDistribution ReliefImage ReliefPlot RemoteAuthorizationCaching RemoteConnect RemoteConnectionObject RemoteFile RemoteRun RemoteRunProcess Remove RemoveAlphaChannel RemoveAsynchronousTask RemoveAudioStream RemoveBackground RemoveChannelListener RemoveChannelSubscribers Removed RemoveDiacritics RemoveInputStreamMethod RemoveOutputStreamMethod RemoveProperty RemoveScheduledTask RemoveUsers RenameDirectory RenameFile RenderAll RenderingOptions RenewalProcess RenkoChart RepairMesh Repeated RepeatedNull RepeatedString RepeatedTiming RepeatingElement Replace ReplaceAll ReplaceHeldPart ReplaceImageValue ReplaceList ReplacePart ReplacePixelValue ReplaceRepeated ReplicateLayer RequiredPhysicalQuantities Resampling ResamplingAlgorithmData ResamplingMethod Rescale RescalingTransform ResetDirectory ResetMenusPacket ResetScheduledTask ReshapeLayer Residue ResizeLayer Resolve ResourceAcquire ResourceData ResourceFunction ResourceObject ResourceRegister ResourceRemove ResourceSearch ResourceSubmissionObject ResourceSubmit ResourceSystemBase ResourceUpdate ResponseForm Rest RestartInterval Restricted Resultant ResumePacket Return ReturnEntersInput ReturnExpressionPacket ReturnInputFormPacket ReturnPacket ReturnReceiptFunction ReturnTextPacket Reverse ReverseBiorthogonalSplineWavelet ReverseElement ReverseEquilibrium ReverseGraph ReverseSort ReverseSortBy ReverseUpEquilibrium RevolutionAxis RevolutionPlot3D RGBColor RiccatiSolve RiceDistribution RidgeFilter RiemannR RiemannSiegelTheta RiemannSiegelZ RiemannXi Riffle Right RightArrow RightArrowBar RightArrowLeftArrow RightComposition RightCosetRepresentative RightDownTeeVector RightDownVector RightDownVectorBar RightTee RightTeeArrow RightTeeVector RightTriangle RightTriangleBar RightTriangleEqual RightUpDownVector RightUpTeeVector RightUpVector RightUpVectorBar RightVector RightVectorBar RiskAchievementImportance RiskReductionImportance RogersTanimotoDissimilarity RollPitchYawAngles RollPitchYawMatrix RomanNumeral Root RootApproximant RootIntervals RootLocusPlot RootMeanSquare RootOfUnityQ RootReduce Roots RootSum Rotate RotateLabel RotateLeft RotateRight RotationAction RotationBox RotationBoxOptions RotationMatrix RotationTransform Round RoundImplies RoundingRadius Row RowAlignments RowBackgrounds RowBox RowHeights RowLines RowMinHeight RowReduce RowsEqual RowSpacings RSolve RSolveValue RudinShapiro RudvalisGroupRu Rule RuleCondition RuleDelayed RuleForm RulePlot RulerUnits Run RunProcess RunScheduledTask RunThrough RuntimeAttributes RuntimeOptions RussellRaoDissimilaritySameQ SameTest SampledEntityClass SampleDepth SampledSoundFunction SampledSoundList SampleRate SamplingPeriod SARIMAProcess SARMAProcess SASTriangle SatelliteData SatisfiabilityCount SatisfiabilityInstances SatisfiableQ Saturday Save Saveable SaveAutoDelete SaveConnection SaveDefinitions SavitzkyGolayMatrix SawtoothWave Scale Scaled ScaleDivisions ScaledMousePosition ScaleOrigin ScalePadding ScaleRanges ScaleRangeStyle ScalingFunctions ScalingMatrix ScalingTransform Scan ScheduledTask ScheduledTaskActiveQ ScheduledTaskInformation ScheduledTaskInformationData ScheduledTaskObject ScheduledTasks SchurDecomposition ScientificForm ScientificNotationThreshold ScorerGi ScorerGiPrime ScorerHi ScorerHiPrime ScreenRectangle ScreenStyleEnvironment ScriptBaselineShifts ScriptForm ScriptLevel ScriptMinSize ScriptRules ScriptSizeMultipliers Scrollbars ScrollingOptions ScrollPosition SearchAdjustment SearchIndexObject SearchIndices SearchQueryString SearchResultObject Sec Sech SechDistribution SecondOrderConeOptimization SectionGrouping SectorChart SectorChart3D SectorOrigin SectorSpacing SecuredAuthenticationKey SecuredAuthenticationKeys SeedRandom Select Selectable SelectComponents SelectedCells SelectedNotebook SelectFirst Selection SelectionAnimate SelectionCell SelectionCellCreateCell SelectionCellDefaultStyle SelectionCellParentStyle SelectionCreateCell SelectionDebuggerTag SelectionDuplicateCell SelectionEvaluate SelectionEvaluateCreateCell SelectionMove SelectionPlaceholder SelectionSetStyle SelectWithContents SelfLoops SelfLoopStyle SemanticImport SemanticImportString SemanticInterpretation SemialgebraicComponentInstances SemidefiniteOptimization SendMail SendMessage Sequence SequenceAlignment SequenceAttentionLayer SequenceCases SequenceCount SequenceFold SequenceFoldList SequenceForm SequenceHold SequenceLastLayer SequenceMostLayer SequencePosition SequencePredict SequencePredictorFunction SequenceReplace SequenceRestLayer SequenceReverseLayer SequenceSplit Series SeriesCoefficient SeriesData ServiceConnect ServiceDisconnect ServiceExecute ServiceObject ServiceRequest ServiceResponse ServiceSubmit SessionSubmit SessionTime Set SetAccuracy SetAlphaChannel SetAttributes Setbacks SetBoxFormNamesPacket SetCloudDirectory SetCookies SetDelayed SetDirectory SetEnvironment SetEvaluationNotebook SetFileDate SetFileLoadingContext SetNotebookStatusLine SetOptions SetOptionsPacket SetPermissions SetPrecision SetProperty SetSecuredAuthenticationKey SetSelectedNotebook SetSharedFunction SetSharedVariable SetSpeechParametersPacket SetStreamPosition SetSystemModel SetSystemOptions Setter SetterBar SetterBox SetterBoxOptions Setting SetUsers SetValue Shading Shallow ShannonWavelet ShapiroWilkTest Share SharingList Sharpen ShearingMatrix ShearingTransform ShellRegion ShenCastanMatrix ShiftedGompertzDistribution ShiftRegisterSequence Short ShortDownArrow Shortest ShortestMatch ShortestPathFunction ShortLeftArrow ShortRightArrow ShortTimeFourier ShortTimeFourierData ShortUpArrow Show ShowAutoConvert ShowAutoSpellCheck ShowAutoStyles ShowCellBracket ShowCellLabel ShowCellTags ShowClosedCellArea ShowCodeAssist ShowContents ShowControls ShowCursorTracker ShowGroupOpenCloseIcon ShowGroupOpener ShowInvisibleCharacters ShowPageBreaks ShowPredictiveInterface ShowSelection ShowShortBoxForm ShowSpecialCharacters ShowStringCharacters ShowSyntaxStyles ShrinkingDelay ShrinkWrapBoundingBox SiderealTime SiegelTheta SiegelTukeyTest SierpinskiCurve SierpinskiMesh Sign Signature SignedRankTest SignedRegionDistance SignificanceLevel SignPadding SignTest SimilarityRules SimpleGraph SimpleGraphQ SimplePolygonQ SimplePolyhedronQ Simplex Simplify Sin Sinc SinghMaddalaDistribution SingleEvaluation SingleLetterItalics SingleLetterStyle SingularValueDecomposition SingularValueList SingularValuePlot SingularValues Sinh SinhIntegral SinIntegral SixJSymbol Skeleton SkeletonTransform SkellamDistribution Skewness SkewNormalDistribution SkinStyle Skip SliceContourPlot3D SliceDensityPlot3D SliceDistribution SliceVectorPlot3D Slider Slider2D Slider2DBox Slider2DBoxOptions SliderBox SliderBoxOptions SlideView Slot SlotSequence Small SmallCircle Smaller SmithDecomposition SmithDelayCompensator SmithWatermanSimilarity SmoothDensityHistogram SmoothHistogram SmoothHistogram3D SmoothKernelDistribution SnDispersion Snippet SnubPolyhedron SocialMediaData Socket SocketConnect SocketListen SocketListener SocketObject SocketOpen SocketReadMessage SocketReadyQ Sockets SocketWaitAll SocketWaitNext SoftmaxLayer SokalSneathDissimilarity SolarEclipse SolarSystemFeatureData SolidAngle SolidData SolidRegionQ Solve SolveAlways SolveDelayed Sort SortBy SortedBy SortedEntityClass Sound SoundAndGraphics SoundNote SoundVolume SourceLink Sow Space SpaceCurveData SpaceForm Spacer Spacings Span SpanAdjustments SpanCharacterRounding SpanFromAbove SpanFromBoth SpanFromLeft SpanLineThickness SpanMaxSize SpanMinSize SpanningCharacters SpanSymmetric SparseArray SpatialGraphDistribution SpatialMedian SpatialTransformationLayer Speak SpeakTextPacket SpearmanRankTest SpearmanRho SpeciesData SpecificityGoal SpectralLineData Spectrogram SpectrogramArray Specularity SpeechRecognize SpeechSynthesize SpellingCorrection SpellingCorrectionList SpellingDictionaries SpellingDictionariesPath SpellingOptions SpellingSuggestionsPacket Sphere SphereBox SpherePoints SphericalBesselJ SphericalBesselY SphericalHankelH1 SphericalHankelH2 SphericalHarmonicY SphericalPlot3D SphericalRegion SphericalShell SpheroidalEigenvalue SpheroidalJoiningFactor SpheroidalPS SpheroidalPSPrime SpheroidalQS SpheroidalQSPrime SpheroidalRadialFactor SpheroidalS1 SpheroidalS1Prime SpheroidalS2 SpheroidalS2Prime Splice SplicedDistribution SplineClosed SplineDegree SplineKnots SplineWeights Split SplitBy SpokenString Sqrt SqrtBox SqrtBoxOptions Square SquaredEuclideanDistance SquareFreeQ SquareIntersection SquareMatrixQ SquareRepeatingElement SquaresR SquareSubset SquareSubsetEqual SquareSuperset SquareSupersetEqual SquareUnion SquareWave SSSTriangle StabilityMargins StabilityMarginsStyle StableDistribution Stack StackBegin StackComplete StackedDateListPlot StackedListPlot StackInhibit StadiumShape StandardAtmosphereData StandardDeviation StandardDeviationFilter StandardForm Standardize Standardized StandardOceanData StandbyDistribution Star StarClusterData StarData StarGraph StartAsynchronousTask StartExternalSession StartingStepSize StartOfLine StartOfString StartProcess StartScheduledTask StartupSound StartWebSession StateDimensions StateFeedbackGains StateOutputEstimator StateResponse StateSpaceModel StateSpaceRealization StateSpaceTransform StateTransformationLinearize StationaryDistribution StationaryWaveletPacketTransform StationaryWaveletTransform StatusArea StatusCentrality StepMonitor StereochemistryElements StieltjesGamma StirlingS1 StirlingS2 StopAsynchronousTask StoppingPowerData StopScheduledTask StrataVariables StratonovichProcess StreamColorFunction StreamColorFunctionScaling StreamDensityPlot StreamMarkers StreamPlot StreamPoints StreamPosition Streams StreamScale StreamStyle String StringBreak StringByteCount StringCases StringContainsQ StringCount StringDelete StringDrop StringEndsQ StringExpression StringExtract StringForm StringFormat StringFreeQ StringInsert StringJoin StringLength StringMatchQ StringPadLeft StringPadRight StringPart StringPartition StringPosition StringQ StringRepeat StringReplace StringReplaceList StringReplacePart StringReverse StringRiffle StringRotateLeft StringRotateRight StringSkeleton StringSplit StringStartsQ StringTake StringTemplate StringToByteArray StringToStream StringTrim StripBoxes StripOnInput StripWrapperBoxes StrokeForm StructuralImportance StructuredArray StructuredSelection StruveH StruveL Stub StudentTDistribution Style StyleBox StyleBoxAutoDelete StyleData StyleDefinitions StyleForm StyleHints StyleKeyMapping StyleMenuListing StyleNameDialogSettings StyleNames StylePrint StyleSheetPath Subdivide Subfactorial Subgraph SubMinus SubPlus SubresultantPolynomialRemainders SubresultantPolynomials Subresultants Subscript SubscriptBox SubscriptBoxOptions Subscripted Subsequences Subset SubsetEqual SubsetMap SubsetQ Subsets SubStar SubstitutionSystem Subsuperscript SubsuperscriptBox SubsuperscriptBoxOptions Subtract SubtractFrom SubtractSides SubValues Succeeds SucceedsEqual SucceedsSlantEqual SucceedsTilde Success SuchThat Sum SumConvergence SummationLayer Sunday SunPosition Sunrise Sunset SuperDagger SuperMinus SupernovaData SuperPlus Superscript SuperscriptBox SuperscriptBoxOptions Superset SupersetEqual SuperStar Surd SurdForm SurfaceArea SurfaceColor SurfaceData SurfaceGraphics SurvivalDistribution SurvivalFunction SurvivalModel SurvivalModelFit SuspendPacket SuzukiDistribution SuzukiGroupSuz SwatchLegend Switch Symbol SymbolName SymletWavelet Symmetric SymmetricGroup SymmetricKey SymmetricMatrixQ SymmetricPolynomial SymmetricReduction Symmetrize SymmetrizedArray SymmetrizedArrayRules SymmetrizedDependentComponents SymmetrizedIndependentComponents SymmetrizedReplacePart SynchronousInitialization SynchronousUpdating Synonyms Syntax SyntaxForm SyntaxInformation SyntaxLength SyntaxPacket SyntaxQ SynthesizeMissingValues SystemDialogInput SystemException SystemGet SystemHelpPath SystemInformation SystemInformationData SystemInstall SystemModel SystemModeler SystemModelExamples SystemModelLinearize SystemModelParametricSimulate SystemModelPlot SystemModelProgressReporting SystemModelReliability SystemModels SystemModelSimulate SystemModelSimulateSensitivity SystemModelSimulationData SystemOpen SystemOptions SystemProcessData SystemProcesses SystemsConnectionsModel SystemsModelDelay SystemsModelDelayApproximate SystemsModelDelete SystemsModelDimensions SystemsModelExtract SystemsModelFeedbackConnect SystemsModelLabels SystemsModelLinearity SystemsModelMerge SystemsModelOrder SystemsModelParallelConnect SystemsModelSeriesConnect SystemsModelStateFeedbackConnect SystemsModelVectorRelativeOrders SystemStub SystemTestTab TabFilling Table TableAlignments TableDepth TableDirections TableForm TableHeadings TableSpacing TableView TableViewBox TableViewBoxBackground TableViewBoxOptions TabSpacings TabView TabViewBox TabViewBoxOptions TagBox TagBoxNote TagBoxOptions TaggingRules TagSet TagSetDelayed TagStyle TagUnset Take TakeDrop TakeLargest TakeLargestBy TakeList TakeSmallest TakeSmallestBy TakeWhile Tally Tan Tanh TargetDevice TargetFunctions TargetSystem TargetUnits TaskAbort TaskExecute TaskObject TaskRemove TaskResume Tasks TaskSuspend TaskWait TautologyQ TelegraphProcess TemplateApply TemplateArgBox TemplateBox TemplateBoxOptions TemplateEvaluate TemplateExpression TemplateIf TemplateObject TemplateSequence TemplateSlot TemplateSlotSequence TemplateUnevaluated TemplateVerbatim TemplateWith TemporalData TemporalRegularity Temporary TemporaryVariable TensorContract TensorDimensions TensorExpand TensorProduct TensorQ TensorRank TensorReduce TensorSymmetry TensorTranspose TensorWedge TestID TestReport TestReportObject TestResultObject Tetrahedron TetrahedronBox TetrahedronBoxOptions TeXForm TeXSave Text Text3DBox Text3DBoxOptions TextAlignment TextBand TextBoundingBox TextBox TextCases TextCell TextClipboardType TextContents TextData TextElement TextForm TextGrid TextJustification TextLine TextPacket TextParagraph TextPosition TextRecognize TextSearch TextSearchReport TextSentences TextString TextStructure TextStyle TextTranslation Texture TextureCoordinateFunction TextureCoordinateScaling TextWords Therefore ThermodynamicData ThermometerGauge Thick Thickness Thin Thinning ThisLink ThompsonGroupTh Thread ThreadingLayer ThreeJSymbol Threshold Through Throw ThueMorse Thumbnail Thursday Ticks TicksStyle TideData Tilde TildeEqual TildeFullEqual TildeTilde TimeConstrained TimeConstraint TimeDirection TimeFormat TimeGoal TimelinePlot TimeObject TimeObjectQ Times TimesBy TimeSeries TimeSeriesAggregate TimeSeriesForecast TimeSeriesInsert TimeSeriesInvertibility TimeSeriesMap TimeSeriesMapThread TimeSeriesModel TimeSeriesModelFit TimeSeriesResample TimeSeriesRescale TimeSeriesShift TimeSeriesThread TimeSeriesWindow TimeUsed TimeValue TimeWarpingCorrespondence TimeWarpingDistance TimeZone TimeZoneConvert TimeZoneOffset Timing Tiny TitleGrouping TitsGroupT ToBoxes ToCharacterCode ToColor ToContinuousTimeModel ToDate Today ToDiscreteTimeModel ToEntity ToeplitzMatrix ToExpression ToFileName Together Toggle ToggleFalse Toggler TogglerBar TogglerBox TogglerBoxOptions ToHeldExpression ToInvertibleTimeSeries TokenWords Tolerance ToLowerCase Tomorrow ToNumberField TooBig Tooltip TooltipBox TooltipBoxOptions TooltipDelay TooltipStyle Top TopHatTransform ToPolarCoordinates TopologicalSort ToRadicals ToRules ToSphericalCoordinates ToString Total TotalHeight TotalLayer TotalVariationFilter TotalWidth TouchPosition TouchscreenAutoZoom TouchscreenControlPlacement ToUpperCase Tr Trace TraceAbove TraceAction TraceBackward TraceDepth TraceDialog TraceForward TraceInternal TraceLevel TraceOff TraceOn TraceOriginal TracePrint TraceScan TrackedSymbols TrackingFunction TracyWidomDistribution TradingChart TraditionalForm TraditionalFunctionNotation TraditionalNotation TraditionalOrder TrainingProgressCheckpointing TrainingProgressFunction TrainingProgressMeasurements TrainingProgressReporting TrainingStoppingCriterion TransferFunctionCancel TransferFunctionExpand TransferFunctionFactor TransferFunctionModel TransferFunctionPoles TransferFunctionTransform TransferFunctionZeros TransformationClass TransformationFunction TransformationFunctions TransformationMatrix TransformedDistribution TransformedField TransformedProcess TransformedRegion TransitionDirection TransitionDuration TransitionEffect TransitiveClosureGraph TransitiveReductionGraph Translate TranslationOptions TranslationTransform Transliterate Transparent TransparentColor Transpose TransposeLayer TrapSelection TravelDirections TravelDirectionsData TravelDistance TravelDistanceList TravelMethod TravelTime TreeForm TreeGraph TreeGraphQ TreePlot TrendStyle Triangle TriangleCenter TriangleConstruct TriangleMeasurement TriangleWave TriangularDistribution TriangulateMesh Trig TrigExpand TrigFactor TrigFactorList Trigger TrigReduce TrigToExp TrimmedMean TrimmedVariance TropicalStormData True TrueQ TruncatedDistribution TruncatedPolyhedron TsallisQExponentialDistribution TsallisQGaussianDistribution TTest Tube TubeBezierCurveBox TubeBezierCurveBoxOptions TubeBox TubeBoxOptions TubeBSplineCurveBox TubeBSplineCurveBoxOptions Tuesday TukeyLambdaDistribution TukeyWindow TunnelData Tuples TuranGraph TuringMachine TuttePolynomial TwoWayRule Typed TypeSpecifierUnateQ Uncompress UnconstrainedParameters Undefined UnderBar Underflow Underlined Underoverscript UnderoverscriptBox UnderoverscriptBoxOptions Underscript UnderscriptBox UnderscriptBoxOptions UnderseaFeatureData UndirectedEdge UndirectedGraph UndirectedGraphQ UndoOptions UndoTrackedVariables Unequal UnequalTo Unevaluated UniformDistribution UniformGraphDistribution UniformPolyhedron UniformSumDistribution Uninstall Union UnionPlus Unique UnitaryMatrixQ UnitBox UnitConvert UnitDimensions Unitize UnitRootTest UnitSimplify UnitStep UnitSystem UnitTriangle UnitVector UnitVectorLayer UnityDimensions UniverseModelData UniversityData UnixTime Unprotect UnregisterExternalEvaluator UnsameQ UnsavedVariables Unset UnsetShared UntrackedVariables Up UpArrow UpArrowBar UpArrowDownArrow Update UpdateDynamicObjects UpdateDynamicObjectsSynchronous UpdateInterval UpdateSearchIndex UpDownArrow UpEquilibrium UpperCaseQ UpperLeftArrow UpperRightArrow UpperTriangularize UpperTriangularMatrixQ Upsample UpSet UpSetDelayed UpTee UpTeeArrow UpTo UpValues URL URLBuild URLDecode URLDispatcher URLDownload URLDownloadSubmit URLEncode URLExecute URLExpand URLFetch URLFetchAsynchronous URLParse URLQueryDecode URLQueryEncode URLRead URLResponseTime URLSave URLSaveAsynchronous URLShorten URLSubmit UseGraphicsRange UserDefinedWavelet Using UsingFrontEnd UtilityFunctionV2Get ValenceErrorHandling ValidationLength ValidationSet Value ValueBox ValueBoxOptions ValueDimensions ValueForm ValuePreprocessingFunction ValueQ Values ValuesData Variables Variance VarianceEquivalenceTest VarianceEstimatorFunction VarianceGammaDistribution VarianceTest VectorAngle VectorAround VectorColorFunction VectorColorFunctionScaling VectorDensityPlot VectorGlyphData VectorGreater VectorGreaterEqual VectorLess VectorLessEqual VectorMarkers VectorPlot VectorPlot3D VectorPoints VectorQ Vectors VectorScale VectorStyle Vee Verbatim Verbose VerboseConvertToPostScriptPacket VerificationTest VerifyConvergence VerifyDerivedKey VerifyDigitalSignature VerifyInterpretation VerifySecurityCertificates VerifySolutions VerifyTestAssumptions Version VersionNumber VertexAdd VertexCapacity VertexColors VertexComponent VertexConnectivity VertexContract VertexCoordinateRules VertexCoordinates VertexCorrelationSimilarity VertexCosineSimilarity VertexCount VertexCoverQ VertexDataCoordinates VertexDegree VertexDelete VertexDiceSimilarity VertexEccentricity VertexInComponent VertexInDegree VertexIndex VertexJaccardSimilarity VertexLabeling VertexLabels VertexLabelStyle VertexList VertexNormals VertexOutComponent VertexOutDegree VertexQ VertexRenderingFunction VertexReplace VertexShape VertexShapeFunction VertexSize VertexStyle VertexTextureCoordinates VertexWeight VertexWeightedGraphQ Vertical VerticalBar VerticalForm VerticalGauge VerticalSeparator VerticalSlider VerticalTilde ViewAngle ViewCenter ViewMatrix ViewPoint ViewPointSelectorSettings ViewPort ViewProjection ViewRange ViewVector ViewVertical VirtualGroupData Visible VisibleCell VoiceStyleData VoigtDistribution VolcanoData Volume VonMisesDistribution VoronoiMeshWaitAll WaitAsynchronousTask WaitNext WaitUntil WakebyDistribution WalleniusHypergeometricDistribution WaringYuleDistribution WarpingCorrespondence WarpingDistance WatershedComponents WatsonUSquareTest WattsStrogatzGraphDistribution WaveletBestBasis WaveletFilterCoefficients WaveletImagePlot WaveletListPlot WaveletMapIndexed WaveletMatrixPlot WaveletPhi WaveletPsi WaveletScale WaveletScalogram WaveletThreshold WeaklyConnectedComponents WeaklyConnectedGraphComponents WeaklyConnectedGraphQ WeakStationarity WeatherData WeatherForecastData WebAudioSearch WebElementObject WeberE WebExecute WebImage WebImageSearch WebSearch WebSessionObject WebSessions WebWindowObject Wedge Wednesday WeibullDistribution WeierstrassE1 WeierstrassE2 WeierstrassE3 WeierstrassEta1 WeierstrassEta2 WeierstrassEta3 WeierstrassHalfPeriods WeierstrassHalfPeriodW1 WeierstrassHalfPeriodW2 WeierstrassHalfPeriodW3 WeierstrassInvariantG2 WeierstrassInvariantG3 WeierstrassInvariants WeierstrassP WeierstrassPPrime WeierstrassSigma WeierstrassZeta WeightedAdjacencyGraph WeightedAdjacencyMatrix WeightedData WeightedGraphQ Weights WelchWindow WheelGraph WhenEvent Which While White WhiteNoiseProcess WhitePoint Whitespace WhitespaceCharacter WhittakerM WhittakerW WienerFilter WienerProcess WignerD WignerSemicircleDistribution WikipediaData WikipediaSearch WilksW WilksWTest WindDirectionData WindingCount WindingPolygon WindowClickSelect WindowElements WindowFloating WindowFrame WindowFrameElements WindowMargins WindowMovable WindowOpacity WindowPersistentStyles WindowSelected WindowSize WindowStatusArea WindowTitle WindowToolbars WindowWidth WindSpeedData WindVectorData WinsorizedMean WinsorizedVariance WishartMatrixDistribution With WolframAlpha WolframAlphaDate WolframAlphaQuantity WolframAlphaResult WolframLanguageData Word WordBoundary WordCharacter WordCloud WordCount WordCounts WordData WordDefinition WordFrequency WordFrequencyData WordList WordOrientation WordSearch WordSelectionFunction WordSeparators WordSpacings WordStem WordTranslation WorkingPrecision WrapAround Write WriteLine WriteString WronskianXMLElement XMLObject XMLTemplate Xnor Xor XYZColorYellow Yesterday YuleDissimilarityZernikeR ZeroSymmetric ZeroTest ZeroWidthTimes Zeta ZetaZero ZIPCodeData ZipfDistribution ZoomCenter ZoomFactor ZTest ZTransform$Aborted $ActivationGroupID $ActivationKey $ActivationUserRegistered $AddOnsDirectory $AllowExternalChannelFunctions $AssertFunction $Assumptions $AsynchronousTask $AudioInputDevices $AudioOutputDevices $BaseDirectory $BatchInput $BatchOutput $BlockchainBase $BoxForms $ByteOrdering $CacheBaseDirectory $Canceled $ChannelBase $CharacterEncoding $CharacterEncodings $CloudBase $CloudConnected $CloudCreditsAvailable $CloudEvaluation $CloudExpressionBase $CloudObjectNameFormat $CloudObjectURLType $CloudRootDirectory $CloudSymbolBase $CloudUserID $CloudUserUUID $CloudVersion $CloudVersionNumber $CloudWolframEngineVersionNumber $CommandLine $CompilationTarget $ConditionHold $ConfiguredKernels $Context $ContextPath $ControlActiveSetting $Cookies $CookieStore $CreationDate $CurrentLink $CurrentTask $CurrentWebSession $DateStringFormat $DefaultAudioInputDevice $DefaultAudioOutputDevice $DefaultFont $DefaultFrontEnd $DefaultImagingDevice $DefaultLocalBase $DefaultMailbox $DefaultNetworkInterface $DefaultPath $Display $DisplayFunction $DistributedContexts $DynamicEvaluation $Echo $EmbedCodeEnvironments $EmbeddableServices $EntityStores $Epilog $EvaluationCloudBase $EvaluationCloudObject $EvaluationEnvironment $ExportFormats $Failed $FinancialDataSource $FontFamilies $FormatType $FrontEnd $FrontEndSession $GeoEntityTypes $GeoLocation $GeoLocationCity $GeoLocationCountry $GeoLocationPrecision $GeoLocationSource $HistoryLength $HomeDirectory $HTMLExportRules $HTTPCookies $HTTPRequest $IgnoreEOF $ImageFormattingWidth $ImagingDevice $ImagingDevices $ImportFormats $IncomingMailSettings $InitialDirectory $Initialization $InitializationContexts $Input $InputFileName $InputStreamMethods $Inspector $InstallationDate $InstallationDirectory $InterfaceEnvironment $InterpreterTypes $IterationLimit $KernelCount $KernelID $Language $LaunchDirectory $LibraryPath $LicenseExpirationDate $LicenseID $LicenseProcesses $LicenseServer $LicenseSubprocesses $LicenseType $Line $Linked $LinkSupported $LoadedFiles $LocalBase $LocalSymbolBase $MachineAddresses $MachineDomain $MachineDomains $MachineEpsilon $MachineID $MachineName $MachinePrecision $MachineType $MaxExtraPrecision $MaxLicenseProcesses $MaxLicenseSubprocesses $MaxMachineNumber $MaxNumber $MaxPiecewiseCases $MaxPrecision $MaxRootDegree $MessageGroups $MessageList $MessagePrePrint $Messages $MinMachineNumber $MinNumber $MinorReleaseNumber $MinPrecision $MobilePhone $ModuleNumber $NetworkConnected $NetworkInterfaces $NetworkLicense $NewMessage $NewSymbol $Notebooks $NoValue $NumberMarks $Off $OperatingSystem $Output $OutputForms $OutputSizeLimit $OutputStreamMethods $Packages $ParentLink $ParentProcessID $PasswordFile $PatchLevelID $Path $PathnameSeparator $PerformanceGoal $Permissions $PermissionsGroupBase $PersistenceBase $PersistencePath $PipeSupported $PlotTheme $Post $Pre $PreferencesDirectory $PreInitialization $PrePrint $PreRead $PrintForms $PrintLiteral $Printout3DPreviewer $ProcessID $ProcessorCount $ProcessorType $ProductInformation $ProgramName $PublisherID $RandomState $RecursionLimit $RegisteredDeviceClasses $RegisteredUserName $ReleaseNumber $RequesterAddress $RequesterWolframID $RequesterWolframUUID $ResourceSystemBase $RootDirectory $ScheduledTask $ScriptCommandLine $ScriptInputString $SecuredAuthenticationKeyTokens $ServiceCreditsAvailable $Services $SessionID $SetParentLink $SharedFunctions $SharedVariables $SoundDisplay $SoundDisplayFunction $SourceLink $SSHAuthentication $SummaryBoxDataSizeLimit $SuppressInputFormHeads $SynchronousEvaluation $SyntaxHandler $System $SystemCharacterEncoding $SystemID $SystemMemory $SystemShell $SystemTimeZone $SystemWordLength $TemplatePath $TemporaryDirectory $TemporaryPrefix $TestFileName $TextStyle $TimedOut $TimeUnit $TimeZone $TimeZoneEntity $TopDirectory $TraceOff $TraceOn $TracePattern $TracePostAction $TracePreAction $UnitSystem $Urgent $UserAddOnsDirectory $UserAgentLanguages $UserAgentMachine $UserAgentName $UserAgentOperatingSystem $UserAgentString $UserAgentVersion $UserBaseDirectory $UserDocumentsDirectory $Username $UserName $UserURLBase $Version $VersionNumber $VoiceStyles $WolframID $WolframUUID\",c:[e.C(\"\\\\(\\\\*\",\"\\\\*\\\\)\",{c:[\"self\"]}),e.QSM,e.CNM]}});hljs.registerLanguage(\"vim\",function(e){return{l:/[!#@\\w]+/,k:{keyword:\"N|0 P|0 X|0 a|0 ab abc abo al am an|0 ar arga argd arge argdo argg argl argu as au aug aun b|0 bN ba bad bd be bel bf bl bm bn bo bp br brea breaka breakd breakl bro bufdo buffers bun bw c|0 cN cNf ca cabc caddb cad caddf cal cat cb cc ccl cd ce cex cf cfir cgetb cgete cg changes chd che checkt cl cla clo cm cmapc cme cn cnew cnf cno cnorea cnoreme co col colo com comc comp con conf cope cp cpf cq cr cs cst cu cuna cunme cw delm deb debugg delc delf dif diffg diffo diffp diffpu diffs diffthis dig di dl dell dj dli do doautoa dp dr ds dsp e|0 ea ec echoe echoh echom echon el elsei em en endfo endf endt endw ene ex exe exi exu f|0 files filet fin fina fini fir fix fo foldc foldd folddoc foldo for fu go gr grepa gu gv ha helpf helpg helpt hi hid his ia iabc if ij il im imapc ime ino inorea inoreme int is isp iu iuna iunme j|0 ju k|0 keepa kee keepj lN lNf l|0 lad laddb laddf la lan lat lb lc lch lcl lcs le lefta let lex lf lfir lgetb lgete lg lgr lgrepa lh ll lla lli lmak lm lmapc lne lnew lnf ln loadk lo loc lockv lol lope lp lpf lr ls lt lu lua luad luaf lv lvimgrepa lw m|0 ma mak map mapc marks mat me menut mes mk mks mksp mkv mkvie mod mz mzf nbc nb nbs new nm nmapc nme nn nnoreme noa no noh norea noreme norm nu nun nunme ol o|0 om omapc ome on ono onoreme opt ou ounme ow p|0 profd prof pro promptr pc ped pe perld po popu pp pre prev ps pt ptN ptf ptj ptl ptn ptp ptr pts pu pw py3 python3 py3d py3f py pyd pyf quita qa rec red redi redr redraws reg res ret retu rew ri rightb rub rubyd rubyf rund ru rv sN san sa sal sav sb sbN sba sbf sbl sbm sbn sbp sbr scrip scripte scs se setf setg setl sf sfir sh sim sig sil sl sla sm smap smapc sme sn sni sno snor snoreme sor so spelld spe spelli spellr spellu spellw sp spr sre st sta startg startr star stopi stj sts sun sunm sunme sus sv sw sy synti sync tN tabN tabc tabdo tabe tabf tabfir tabl tabm tabnew tabn tabo tabp tabr tabs tab ta tags tc tcld tclf te tf th tj tl tm tn to tp tr try ts tu u|0 undoj undol una unh unl unlo unm unme uns up ve verb vert vim vimgrepa vi viu vie vm vmapc vme vne vn vnoreme vs vu vunme windo w|0 wN wa wh wi winc winp wn wp wq wqa ws wu wv x|0 xa xmapc xm xme xn xnoreme xu xunme y|0 z|0 ~ Next Print append abbreviate abclear aboveleft all amenu anoremenu args argadd argdelete argedit argglobal arglocal argument ascii autocmd augroup aunmenu buffer bNext ball badd bdelete behave belowright bfirst blast bmodified bnext botright bprevious brewind break breakadd breakdel breaklist browse bunload bwipeout change cNext cNfile cabbrev cabclear caddbuffer caddexpr caddfile call catch cbuffer cclose center cexpr cfile cfirst cgetbuffer cgetexpr cgetfile chdir checkpath checktime clist clast close cmap cmapclear cmenu cnext cnewer cnfile cnoremap cnoreabbrev cnoremenu copy colder colorscheme command comclear compiler continue confirm copen cprevious cpfile cquit crewind cscope cstag cunmap cunabbrev cunmenu cwindow delete delmarks debug debuggreedy delcommand delfunction diffupdate diffget diffoff diffpatch diffput diffsplit digraphs display deletel djump dlist doautocmd doautoall deletep drop dsearch dsplit edit earlier echo echoerr echohl echomsg else elseif emenu endif endfor endfunction endtry endwhile enew execute exit exusage file filetype find finally finish first fixdel fold foldclose folddoopen folddoclosed foldopen function global goto grep grepadd gui gvim hardcopy help helpfind helpgrep helptags highlight hide history insert iabbrev iabclear ijump ilist imap imapclear imenu inoremap inoreabbrev inoremenu intro isearch isplit iunmap iunabbrev iunmenu join jumps keepalt keepmarks keepjumps lNext lNfile list laddexpr laddbuffer laddfile last language later lbuffer lcd lchdir lclose lcscope left leftabove lexpr lfile lfirst lgetbuffer lgetexpr lgetfile lgrep lgrepadd lhelpgrep llast llist lmake lmap lmapclear lnext lnewer lnfile lnoremap loadkeymap loadview lockmarks lockvar lolder lopen lprevious lpfile lrewind ltag lunmap luado luafile lvimgrep lvimgrepadd lwindow move mark make mapclear match menu menutranslate messages mkexrc mksession mkspell mkvimrc mkview mode mzscheme mzfile nbclose nbkey nbsart next nmap nmapclear nmenu nnoremap nnoremenu noautocmd noremap nohlsearch noreabbrev noremenu normal number nunmap nunmenu oldfiles open omap omapclear omenu only onoremap onoremenu options ounmap ounmenu ownsyntax print profdel profile promptfind promptrepl pclose pedit perl perldo pop popup ppop preserve previous psearch ptag ptNext ptfirst ptjump ptlast ptnext ptprevious ptrewind ptselect put pwd py3do py3file python pydo pyfile quit quitall qall read recover redo redir redraw redrawstatus registers resize retab return rewind right rightbelow ruby rubydo rubyfile rundo runtime rviminfo substitute sNext sandbox sargument sall saveas sbuffer sbNext sball sbfirst sblast sbmodified sbnext sbprevious sbrewind scriptnames scriptencoding scscope set setfiletype setglobal setlocal sfind sfirst shell simalt sign silent sleep slast smagic smapclear smenu snext sniff snomagic snoremap snoremenu sort source spelldump spellgood spellinfo spellrepall spellundo spellwrong split sprevious srewind stop stag startgreplace startreplace startinsert stopinsert stjump stselect sunhide sunmap sunmenu suspend sview swapname syntax syntime syncbind tNext tabNext tabclose tabedit tabfind tabfirst tablast tabmove tabnext tabonly tabprevious tabrewind tag tcl tcldo tclfile tearoff tfirst throw tjump tlast tmenu tnext topleft tprevious trewind tselect tunmenu undo undojoin undolist unabbreviate unhide unlet unlockvar unmap unmenu unsilent update vglobal version verbose vertical vimgrep vimgrepadd visual viusage view vmap vmapclear vmenu vnew vnoremap vnoremenu vsplit vunmap vunmenu write wNext wall while winsize wincmd winpos wnext wprevious wqall wsverb wundo wviminfo xit xall xmapclear xmap xmenu xnoremap xnoremenu xunmap xunmenu yank\",built_in:\"synIDtrans atan2 range matcharg did_filetype asin feedkeys xor argv complete_check add getwinposx getqflist getwinposy screencol clearmatches empty extend getcmdpos mzeval garbagecollect setreg ceil sqrt diff_hlID inputsecret get getfperm getpid filewritable shiftwidth max sinh isdirectory synID system inputrestore winline atan visualmode inputlist tabpagewinnr round getregtype mapcheck hasmapto histdel argidx findfile sha256 exists toupper getcmdline taglist string getmatches bufnr strftime winwidth bufexists strtrans tabpagebuflist setcmdpos remote_read printf setloclist getpos getline bufwinnr float2nr len getcmdtype diff_filler luaeval resolve libcallnr foldclosedend reverse filter has_key bufname str2float strlen setline getcharmod setbufvar index searchpos shellescape undofile foldclosed setqflist buflisted strchars str2nr virtcol floor remove undotree remote_expr winheight gettabwinvar reltime cursor tabpagenr finddir localtime acos getloclist search tanh matchend rename gettabvar strdisplaywidth type abs py3eval setwinvar tolower wildmenumode log10 spellsuggest bufloaded synconcealed nextnonblank server2client complete settabwinvar executable input wincol setmatches getftype hlID inputsave searchpair or screenrow line settabvar histadd deepcopy strpart remote_peek and eval getftime submatch screenchar winsaveview matchadd mkdir screenattr getfontname libcall reltimestr getfsize winnr invert pow getbufline byte2line soundfold repeat fnameescape tagfiles sin strwidth spellbadword trunc maparg log lispindent hostname setpos globpath remote_foreground getchar synIDattr fnamemodify cscope_connection stridx winbufnr indent min complete_add nr2char searchpairpos inputdialog values matchlist items hlexists strridx browsedir expand fmod pathshorten line2byte argc count getwinvar glob foldtextresult getreg foreground cosh matchdelete has char2nr simplify histget searchdecl iconv winrestcmd pumvisible writefile foldlevel haslocaldir keys cos matchstr foldtext histnr tan tempname getcwd byteidx getbufvar islocked escape eventhandler remote_send serverlist winrestview synstack pyeval prevnonblank readfile cindent filereadable changenr exp\"},i:/;/,c:[e.NM,{cN:\"string\",b:\"'\",e:\"'\",i:\"\\\\n\"},{cN:\"string\",b:/\"(\\\\\"|\\n\\\\|[^\"\\n])*\"/},e.C('\"',\"$\"),{cN:\"variable\",b:/[bwtglsav]:[\\w\\d_]*/},{cN:\"function\",bK:\"function function!\",e:\"$\",relevance:0,c:[e.TM,{cN:\"params\",b:\"\\\\(\",e:\"\\\\)\"}]},{cN:\"symbol\",b:/<[\\w-]+>/}]}});hljs.registerLanguage(\"makefile\",function(e){var i={cN:\"variable\",v:[{b:\"\\\\$\\\\(\"+e.UIR+\"\\\\)\",c:[e.BE]},{b:/\\$[@%<?\\^\\+\\*]/}]},r={cN:\"string\",b:/\"/,e:/\"/,c:[e.BE,i]},a={cN:\"variable\",b:/\\$\\([\\w-]+\\s/,e:/\\)/,k:{built_in:\"subst patsubst strip findstring filter filter-out sort word wordlist firstword lastword dir notdir suffix basename addsuffix addprefix join wildcard realpath abspath error warning shell origin flavor foreach if or and call eval file value\"},c:[i]},n={b:\"^\"+e.UIR+\"\\\\s*(?=[:+?]?=)\"},t={cN:\"section\",b:/^[^\\s]+:/,e:/$/,c:[i]};return{aliases:[\"mk\",\"mak\"],k:\"define endef undefine ifdef ifndef ifeq ifneq else endif include -include sinclude override export unexport private vpath\",l:/[\\w-]+/,c:[e.HCM,i,r,a,n,{cN:\"meta\",b:/^\\.PHONY:/,e:/$/,k:{\"meta-keyword\":\".PHONY\"},l:/[\\.\\w]+/},t]}});hljs.registerLanguage(\"objectivec\",function(e){var t=/[a-zA-Z@][a-zA-Z0-9_]*/,i=\"@interface @class @protocol @implementation\";return{aliases:[\"mm\",\"objc\",\"obj-c\"],k:{keyword:\"int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required @encode @package @import @defs @compatibility_alias __bridge __bridge_transfer __bridge_retained __bridge_retain __covariant __contravariant __kindof _Nonnull _Nullable _Null_unspecified __FUNCTION__ __PRETTY_FUNCTION__ __attribute__ getter setter retain unsafe_unretained nonnull nullable null_unspecified null_resettable class instancetype NS_DESIGNATED_INITIALIZER NS_UNAVAILABLE NS_REQUIRES_SUPER NS_RETURNS_INNER_POINTER NS_INLINE NS_AVAILABLE NS_DEPRECATED NS_ENUM NS_OPTIONS NS_SWIFT_UNAVAILABLE NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_REFINED_FOR_SWIFT NS_SWIFT_NAME NS_SWIFT_NOTHROW NS_DURING NS_HANDLER NS_ENDHANDLER NS_VALUERETURN NS_VOIDRETURN\",literal:\"false true FALSE TRUE nil YES NO NULL\",built_in:\"BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once\"},l:t,i:\"</\",c:[{cN:\"built_in\",b:\"\\\\b(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)\\\\w+\"},e.CLCM,e.CBCM,e.CNM,e.QSM,e.ASM,{cN:\"string\",v:[{b:'@\"',e:'\"',i:\"\\\\n\",c:[e.BE]}]},{cN:\"meta\",b:/#\\s*[a-z]+\\b/,e:/$/,k:{\"meta-keyword\":\"if else elif endif define undef warning error line pragma ifdef ifndef include\"},c:[{b:/\\\\\\n/,relevance:0},e.inherit(e.QSM,{cN:\"meta-string\"}),{cN:\"meta-string\",b:/<.*?>/,e:/$/,i:\"\\\\n\"},e.CLCM,e.CBCM]},{cN:\"class\",b:\"(\"+i.split(\" \").join(\"|\")+\")\\\\b\",e:\"({|$)\",eE:!0,k:i,l:t,c:[e.UTM]},{b:\"\\\\.\"+e.UIR,relevance:0}]}});hljs.registerLanguage(\"shell\",function(s){return{aliases:[\"console\"],c:[{cN:\"meta\",b:\"^\\\\s{0,3}[/\\\\w\\\\d\\\\[\\\\]()@-]*[>%$#]\",starts:{e:\"$\",sL:\"bash\"}}]}});hljs.registerLanguage(\"erlang\",function(e){var r=\"[a-z'][a-zA-Z0-9_']*\",c=\"(\"+r+\":\"+r+\"|\"+r+\")\",n={keyword:\"after and andalso|10 band begin bnot bor bsl bzr bxor case catch cond div end fun if let not of orelse|10 query receive rem try when xor\",literal:\"false true\"},a=e.C(\"%\",\"$\"),b={cN:\"number\",b:\"\\\\b(\\\\d+#[a-fA-F0-9]+|\\\\d+(\\\\.\\\\d+)?([eE][-+]?\\\\d+)?)\",relevance:0},i={b:\"fun\\\\s+\"+r+\"/\\\\d+\"},l={b:c+\"\\\\(\",e:\"\\\\)\",rB:!0,relevance:0,c:[{b:c,relevance:0},{b:\"\\\\(\",e:\"\\\\)\",eW:!0,rE:!0,relevance:0}]},d={b:\"{\",e:\"}\",relevance:0},o={b:\"\\\\b_([A-Z][A-Za-z0-9_]*)?\",relevance:0},t={b:\"[A-Z][a-zA-Z0-9_]*\",relevance:0},v={b:\"#\"+e.UIR,relevance:0,rB:!0,c:[{b:\"#\"+e.UIR,relevance:0},{b:\"{\",e:\"}\",relevance:0}]},f={bK:\"fun receive if try case\",e:\"end\",k:n};f.c=[a,i,e.inherit(e.ASM,{cN:\"\"}),f,l,e.QSM,b,d,o,t,v];var s=[a,i,f,l,e.QSM,b,d,o,t,v];l.c[1].c=s,d.c=s;var u={cN:\"params\",b:\"\\\\(\",e:\"\\\\)\",c:v.c[1].c=s};return{aliases:[\"erl\"],k:n,i:\"(</|\\\\*=|\\\\+=|-=|/\\\\*|\\\\*/|\\\\(\\\\*|\\\\*\\\\))\",c:[{cN:\"function\",b:\"^\"+r+\"\\\\s*\\\\(\",e:\"->\",rB:!0,i:\"\\\\(|#|//|/\\\\*|\\\\\\\\|:|;\",c:[u,e.inherit(e.TM,{b:r})],starts:{e:\";|\\\\.\",k:n,c:s}},a,{b:\"^-\",e:\"\\\\.\",relevance:0,eE:!0,rB:!0,l:\"-\"+e.IR,k:\"-module -record -undef -export -ifdef -ifndef -author -copyright -doc -vsn -import -include -include_lib -compile -define -else -endif -file -behaviour -behavior -spec\",c:[u]},b,e.QSM,v,o,t,d,{b:/\\.$/}]}});hljs.registerLanguage(\"powershell\",function(e){var t={keyword:\"if else foreach return do while until elseif begin for trap data dynamicparam end break throw param continue finally in switch exit filter try process catch hidden static parameter\"},n={b:\"`[\\\\s\\\\S]\",relevance:0},c={cN:\"variable\",v:[{b:/\\$\\B/},{cN:\"keyword\",b:/\\$this/},{b:/\\$[\\w\\d][\\w\\d_:]*/}]},i={cN:\"string\",v:[{b:/\"/,e:/\"/},{b:/@\"/,e:/^\"@/}],c:[n,c,{cN:\"variable\",b:/\\$[A-z]/,e:/[^A-z]/}]},a={cN:\"string\",v:[{b:/'/,e:/'/},{b:/@'/,e:/^'@/}]},r=e.inherit(e.C(null,null),{v:[{b:/#/,e:/$/},{b:/<#/,e:/#>/}],c:[{cN:\"doctag\",v:[{b:/\\.(synopsis|description|example|inputs|outputs|notes|link|component|role|functionality)/},{b:/\\.(parameter|forwardhelptargetname|forwardhelpcategory|remotehelprunspace|externalhelp)\\s+\\S+/}]}]}),o={cN:\"built_in\",v:[{b:\"(\".concat(\"Add|Clear|Close|Copy|Enter|Exit|Find|Format|Get|Hide|Join|Lock|Move|New|Open|Optimize|Pop|Push|Redo|Remove|Rename|Reset|Resize|Search|Select|Set|Show|Skip|Split|Step|Switch|Undo|Unlock|Watch|Backup|Checkpoint|Compare|Compress|Convert|ConvertFrom|ConvertTo|Dismount|Edit|Expand|Export|Group|Import|Initialize|Limit|Merge|New|Out|Publish|Restore|Save|Sync|Unpublish|Update|Approve|Assert|Complete|Confirm|Deny|Disable|Enable|Install|Invoke|Register|Request|Restart|Resume|Start|Stop|Submit|Suspend|Uninstall|Unregister|Wait|Debug|Measure|Ping|Repair|Resolve|Test|Trace|Connect|Disconnect|Read|Receive|Send|Write|Block|Grant|Protect|Revoke|Unblock|Unprotect|Use|ForEach|Sort|Tee|Where\",\")+(-)[\\\\w\\\\d]+\")}]},l={cN:\"class\",bK:\"class enum\",e:/\\s*[{]/,eE:!0,relevance:0,c:[e.TM]},s={cN:\"function\",b:/function\\s+/,e:/\\s*\\{|$/,eE:!0,rB:!0,relevance:0,c:[{b:\"function\",relevance:0,cN:\"keyword\"},{cN:\"title\",b:/\\w[\\w\\d]*((-)[\\w\\d]+)*/,relevance:0},{b:/\\(/,e:/\\)/,cN:\"params\",relevance:0,c:[c]}]},p={b:/using\\s/,e:/$/,rB:!0,c:[i,a,{cN:\"keyword\",b:/(using|assembly|command|module|namespace|type)/}]},b={v:[{cN:\"operator\",b:\"(\".concat(\"-and|-as|-band|-bnot|-bor|-bxor|-casesensitive|-ccontains|-ceq|-cge|-cgt|-cle|-clike|-clt|-cmatch|-cne|-cnotcontains|-cnotlike|-cnotmatch|-contains|-creplace|-csplit|-eq|-exact|-f|-file|-ge|-gt|-icontains|-ieq|-ige|-igt|-ile|-ilike|-ilt|-imatch|-in|-ine|-inotcontains|-inotlike|-inotmatch|-ireplace|-is|-isnot|-isplit|-join|-le|-like|-lt|-match|-ne|-not|-notcontains|-notin|-notlike|-notmatch|-or|-regex|-replace|-shl|-shr|-split|-wildcard|-xor\",\")\\\\b\")},{cN:\"literal\",b:/(-)[\\w\\d]+/,relevance:0}]},d={cN:\"function\",b:/\\[.*\\]\\s*[\\w]+[ ]??\\(/,e:/$/,rB:!0,relevance:0,c:[{cN:\"keyword\",b:\"(\".concat(t.keyword.toString().replace(/\\s/g,\"|\"),\")\\\\b\"),endsParent:!0,relevance:0},e.inherit(e.TM,{endsParent:!0})]},u=[d,r,n,e.NM,i,a,o,c,{cN:\"literal\",b:/\\$(null|true|false)\\b/},{cN:\"selector-tag\",b:/\\@\\B/,relevance:0}],m={b:/\\[/,e:/\\]/,eB:!0,eE:!0,relevance:0,c:[].concat(\"self\",u,{b:\"(\"+[\"string\",\"char\",\"byte\",\"int\",\"long\",\"bool\",\"decimal\",\"single\",\"double\",\"DateTime\",\"xml\",\"array\",\"hashtable\",\"void\"].join(\"|\")+\")\",cN:\"built_in\",relevance:0},{cN:\"type\",b:/[\\.\\w\\d]+/,relevance:0})};return d.c.unshift(m),{aliases:[\"ps\",\"ps1\"],l:/-?[A-z\\.\\-]+/,cI:!0,k:t,c:u.concat(l,s,p,b,m)}});hljs.registerLanguage(\"typescript\",function(e){var r=\"[A-Za-z$_][0-9A-Za-z$_]*\",t={keyword:\"in if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const class public private protected get set super static implements enum export import declare type namespace abstract as from extends async await\",literal:\"true false null undefined NaN Infinity\",built_in:\"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document any number boolean string void Promise\"},n={cN:\"meta\",b:\"@\"+r},a={b:\"\\\\(\",e:/\\)/,k:t,c:[\"self\",e.QSM,e.ASM,e.NM]},c={cN:\"params\",b:/\\(/,e:/\\)/,eB:!0,eE:!0,k:t,c:[e.CLCM,e.CBCM,n,a]},s={cN:\"number\",v:[{b:\"\\\\b(0[bB][01]+)n?\"},{b:\"\\\\b(0[oO][0-7]+)n?\"},{b:e.CNR+\"n?\"}],relevance:0},o={cN:\"subst\",b:\"\\\\$\\\\{\",e:\"\\\\}\",k:t,c:[]},i={b:\"html`\",e:\"\",starts:{e:\"`\",rE:!1,c:[e.BE,o],sL:\"xml\"}},l={b:\"css`\",e:\"\",starts:{e:\"`\",rE:!1,c:[e.BE,o],sL:\"css\"}},b={cN:\"string\",b:\"`\",e:\"`\",c:[e.BE,o]};return o.c=[e.ASM,e.QSM,i,l,b,s,e.RM],{aliases:[\"ts\"],k:t,c:[{cN:\"meta\",b:/^\\s*['\"]use strict['\"]/},e.ASM,e.QSM,i,l,b,e.CLCM,e.CBCM,s,{b:\"(\"+e.RSR+\"|\\\\b(case|return|throw)\\\\b)\\\\s*\",k:\"return throw case\",c:[e.CLCM,e.CBCM,e.RM,{cN:\"function\",b:\"(\\\\(.*?\\\\)|\"+e.IR+\")\\\\s*=>\",rB:!0,e:\"\\\\s*=>\",c:[{cN:\"params\",v:[{b:e.IR},{b:/\\(\\s*\\)/},{b:/\\(/,e:/\\)/,eB:!0,eE:!0,k:t,c:[\"self\",e.CLCM,e.CBCM]}]}]}],relevance:0},{cN:\"function\",bK:\"function\",e:/[\\{;]/,eE:!0,k:t,c:[\"self\",e.inherit(e.TM,{b:r}),c],i:/%/,relevance:0},{bK:\"constructor\",e:/[\\{;]/,eE:!0,c:[\"self\",c]},{b:/module\\./,k:{built_in:\"module\"},relevance:0},{bK:\"module\",e:/\\{/,eE:!0},{bK:\"interface\",e:/\\{/,eE:!0,k:\"interface extends\"},{b:/\\$[(.]/},{b:\"\\\\.\"+e.IR,relevance:0},n,a]}});hljs.registerLanguage(\"fortran\",function(e){return{cI:!0,aliases:[\"f90\",\"f95\"],k:{literal:\".False. .True.\",keyword:\"kind do while private call intrinsic where elsewhere type endtype endmodule endselect endinterface end enddo endif if forall endforall only contains default return stop then block endblock public subroutine|10 function program .and. .or. .not. .le. .eq. .ge. .gt. .lt. goto save else use module select case access blank direct exist file fmt form formatted iostat name named nextrec number opened rec recl sequential status unformatted unit continue format pause cycle exit c_null_char c_alert c_backspace c_form_feed flush wait decimal round iomsg synchronous nopass non_overridable pass protected volatile abstract extends import non_intrinsic value deferred generic final enumerator class associate bind enum c_int c_short c_long c_long_long c_signed_char c_size_t c_int8_t c_int16_t c_int32_t c_int64_t c_int_least8_t c_int_least16_t c_int_least32_t c_int_least64_t c_int_fast8_t c_int_fast16_t c_int_fast32_t c_int_fast64_t c_intmax_t C_intptr_t c_float c_double c_long_double c_float_complex c_double_complex c_long_double_complex c_bool c_char c_null_ptr c_null_funptr c_new_line c_carriage_return c_horizontal_tab c_vertical_tab iso_c_binding c_loc c_funloc c_associated c_f_pointer c_ptr c_funptr iso_fortran_env character_storage_size error_unit file_storage_size input_unit iostat_end iostat_eor numeric_storage_size output_unit c_f_procpointer ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode newunit contiguous recursive pad position action delim readwrite eor advance nml interface procedure namelist include sequence elemental pure integer real character complex logical dimension allocatable|10 parameter external implicit|10 none double precision assign intent optional pointer target in out common equivalence data\",built_in:\"alog alog10 amax0 amax1 amin0 amin1 amod cabs ccos cexp clog csin csqrt dabs dacos dasin datan datan2 dcos dcosh ddim dexp dint dlog dlog10 dmax1 dmin1 dmod dnint dsign dsin dsinh dsqrt dtan dtanh float iabs idim idint idnint ifix isign max0 max1 min0 min1 sngl algama cdabs cdcos cdexp cdlog cdsin cdsqrt cqabs cqcos cqexp cqlog cqsin cqsqrt dcmplx dconjg derf derfc dfloat dgamma dimag dlgama iqint qabs qacos qasin qatan qatan2 qcmplx qconjg qcos qcosh qdim qerf qerfc qexp qgamma qimag qlgama qlog qlog10 qmax1 qmin1 qmod qnint qsign qsin qsinh qsqrt qtan qtanh abs acos aimag aint anint asin atan atan2 char cmplx conjg cos cosh exp ichar index int log log10 max min nint sign sin sinh sqrt tan tanh print write dim lge lgt lle llt mod nullify allocate deallocate adjustl adjustr all allocated any associated bit_size btest ceiling count cshift date_and_time digits dot_product eoshift epsilon exponent floor fraction huge iand ibclr ibits ibset ieor ior ishft ishftc lbound len_trim matmul maxexponent maxloc maxval merge minexponent minloc minval modulo mvbits nearest pack present product radix random_number random_seed range repeat reshape rrspacing scale scan selected_int_kind selected_real_kind set_exponent shape size spacing spread sum system_clock tiny transpose trim ubound unpack verify achar iachar transfer dble entry dprod cpu_time command_argument_count get_command get_command_argument get_environment_variable is_iostat_end ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode is_iostat_eor move_alloc new_line selected_char_kind same_type_as extends_type_ofacosh asinh atanh bessel_j0 bessel_j1 bessel_jn bessel_y0 bessel_y1 bessel_yn erf erfc erfc_scaled gamma log_gamma hypot norm2 atomic_define atomic_ref execute_command_line leadz trailz storage_size merge_bits bge bgt ble blt dshiftl dshiftr findloc iall iany iparity image_index lcobound ucobound maskl maskr num_images parity popcnt poppar shifta shiftl shiftr this_image\"},i:/\\/\\*/,c:[e.inherit(e.ASM,{cN:\"string\",relevance:0}),e.inherit(e.QSM,{cN:\"string\",relevance:0}),{cN:\"function\",bK:\"subroutine function program\",i:\"[${=\\\\n]\",c:[e.UTM,{cN:\"params\",b:\"\\\\(\",e:\"\\\\)\"}]},e.C(\"!\",\"$\",{relevance:0}),{cN:\"number\",b:\"(?=\\\\b|\\\\+|\\\\-|\\\\.)(?=\\\\.\\\\d|\\\\d)(?:\\\\d+)?(?:\\\\.?\\\\d*)(?:[de][+-]?\\\\d+)?\\\\b\\\\.?\",relevance:0}]}});hljs.registerLanguage(\"php\",function(e){var c={b:\"\\\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*\"},i={cN:\"meta\",b:/<\\?(php)?|\\?>/},t={cN:\"string\",c:[e.BE,i],v:[{b:'b\"',e:'\"'},{b:\"b'\",e:\"'\"},e.inherit(e.ASM,{i:null}),e.inherit(e.QSM,{i:null})]},a={v:[e.BNM,e.CNM]};return{aliases:[\"php\",\"php3\",\"php4\",\"php5\",\"php6\",\"php7\"],cI:!0,k:\"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally\",c:[e.HCM,e.C(\"//\",\"$\",{c:[i]}),e.C(\"/\\\\*\",\"\\\\*/\",{c:[{cN:\"doctag\",b:\"@[A-Za-z]+\"}]}),e.C(\"__halt_compiler.+?;\",!1,{eW:!0,k:\"__halt_compiler\",l:e.UIR}),{cN:\"string\",b:/<<<['\"]?\\w+['\"]?$/,e:/^\\w+;?$/,c:[e.BE,{cN:\"subst\",v:[{b:/\\$\\w+/},{b:/\\{\\$/,e:/\\}/}]}]},i,{cN:\"keyword\",b:/\\$this\\b/},c,{b:/(::|->)+[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*/},{cN:\"function\",bK:\"function\",e:/[;{]/,eE:!0,i:\"\\\\$|\\\\[|%\",c:[e.UTM,{cN:\"params\",b:\"\\\\(\",e:\"\\\\)\",c:[\"self\",c,e.CBCM,t,a]}]},{cN:\"class\",bK:\"class interface\",e:\"{\",eE:!0,i:/[:\\(\\$\"]/,c:[{bK:\"extends implements\"},e.UTM]},{bK:\"namespace\",e:\";\",i:/[\\.']/,c:[e.UTM]},{bK:\"use\",e:\";\",c:[e.UTM]},{b:\"=>\"},t,a]}});hljs.registerLanguage(\"haskell\",function(e){var i={v:[e.C(\"--\",\"$\"),e.C(\"{-\",\"-}\",{c:[\"self\"]})]},a={cN:\"meta\",b:\"{-#\",e:\"#-}\"},l={cN:\"meta\",b:\"^#\",e:\"$\"},c={cN:\"type\",b:\"\\\\b[A-Z][\\\\w']*\",relevance:0},n={b:\"\\\\(\",e:\"\\\\)\",i:'\"',c:[a,l,{cN:\"type\",b:\"\\\\b[A-Z][\\\\w]*(\\\\((\\\\.\\\\.|,|\\\\w+)\\\\))?\"},e.inherit(e.TM,{b:\"[_a-z][\\\\w']*\"}),i]};return{aliases:[\"hs\"],k:\"let in if then else case of where do module import hiding qualified type data newtype deriving class instance as default infix infixl infixr foreign export ccall stdcall cplusplus jvm dotnet safe unsafe family forall mdo proc rec\",c:[{bK:\"module\",e:\"where\",k:\"module where\",c:[n,i],i:\"\\\\W\\\\.|;\"},{b:\"\\\\bimport\\\\b\",e:\"$\",k:\"import qualified as hiding\",c:[n,i],i:\"\\\\W\\\\.|;\"},{cN:\"class\",b:\"^(\\\\s*)?(class|instance)\\\\b\",e:\"where\",k:\"class family instance where\",c:[c,n,i]},{cN:\"class\",b:\"\\\\b(data|(new)?type)\\\\b\",e:\"$\",k:\"data family type newtype deriving\",c:[a,c,n,{b:\"{\",e:\"}\",c:n.c},i]},{bK:\"default\",e:\"$\",c:[c,n,i]},{bK:\"infix infixl infixr\",e:\"$\",c:[e.CNM,i]},{b:\"\\\\bforeign\\\\b\",e:\"$\",k:\"foreign import export ccall stdcall cplusplus jvm dotnet safe unsafe\",c:[c,e.QSM,i]},{cN:\"meta\",b:\"#!\\\\/usr\\\\/bin\\\\/env runhaskell\",e:\"$\"},a,l,e.QSM,e.CNM,c,e.inherit(e.TM,{b:\"^[_a-z][\\\\w']*\"}),i,{b:\"->|<-\"}]}});hljs.registerLanguage(\"coffeescript\",function(e){var c={keyword:\"in if for while finally new do return else break catch instanceof throw try this switch continue typeof delete debugger super yield import export from as default await then unless until loop of by when and or is isnt not\",literal:\"true false null undefined yes no on off\",built_in:\"npm require console print module global window document\"},n=\"[A-Za-z$_][0-9A-Za-z$_]*\",r={cN:\"subst\",b:/#\\{/,e:/}/,k:c},i=[e.BNM,e.inherit(e.CNM,{starts:{e:\"(\\\\s*/)?\",relevance:0}}),{cN:\"string\",v:[{b:/'''/,e:/'''/,c:[e.BE]},{b:/'/,e:/'/,c:[e.BE]},{b:/\"\"\"/,e:/\"\"\"/,c:[e.BE,r]},{b:/\"/,e:/\"/,c:[e.BE,r]}]},{cN:\"regexp\",v:[{b:\"///\",e:\"///\",c:[r,e.HCM]},{b:\"//[gim]{0,3}(?=\\\\W)\",relevance:0},{b:/\\/(?![ *]).*?(?![\\\\]).\\/[gim]{0,3}(?=\\W)/}]},{b:\"@\"+n},{sL:\"javascript\",eB:!0,eE:!0,v:[{b:\"```\",e:\"```\"},{b:\"`\",e:\"`\"}]}];r.c=i;var s=e.inherit(e.TM,{b:n}),t=\"(\\\\(.*\\\\))?\\\\s*\\\\B[-=]>\",a={cN:\"params\",b:\"\\\\([^\\\\(]\",rB:!0,c:[{b:/\\(/,e:/\\)/,k:c,c:[\"self\"].concat(i)}]};return{aliases:[\"coffee\",\"cson\",\"iced\"],k:c,i:/\\/\\*/,c:i.concat([e.C(\"###\",\"###\"),e.HCM,{cN:\"function\",b:\"^\\\\s*\"+n+\"\\\\s*=\\\\s*\"+t,e:\"[-=]>\",rB:!0,c:[s,a]},{b:/[:\\(,=]\\s*/,relevance:0,c:[{cN:\"function\",b:t,e:\"[-=]>\",rB:!0,c:[a]}]},{cN:\"class\",bK:\"class\",e:\"$\",i:/[:=\"\\[\\]]/,c:[{bK:\"extends\",eW:!0,i:/[:=\"\\[\\]]/,c:[s]},s]},{b:n+\":\",e:\":\",rB:!0,rE:!0,relevance:0}])}});hljs.registerLanguage(\"r\",function(e){var r=\"([a-zA-Z]|\\\\.[a-zA-Z.])[a-zA-Z0-9._]*\";return{c:[e.HCM,{b:r,l:r,k:{keyword:\"function if in break next repeat else for return switch while try tryCatch stop warning require library attach detach source setMethod setGeneric setGroupGeneric setClass ...\",literal:\"NULL NA TRUE FALSE T F Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10\"},relevance:0},{cN:\"number\",b:\"0[xX][0-9a-fA-F]+[Li]?\\\\b\",relevance:0},{cN:\"number\",b:\"\\\\d+(?:[eE][+\\\\-]?\\\\d*)?L\\\\b\",relevance:0},{cN:\"number\",b:\"\\\\d+\\\\.(?!\\\\d)(?:i\\\\b)?\",relevance:0},{cN:\"number\",b:\"\\\\d+(?:\\\\.\\\\d*)?(?:[eE][+\\\\-]?\\\\d*)?i?\\\\b\",relevance:0},{cN:\"number\",b:\"\\\\.\\\\d+(?:[eE][+\\\\-]?\\\\d*)?i?\\\\b\",relevance:0},{b:\"`\",e:\"`\",relevance:0},{cN:\"string\",c:[e.BE],v:[{b:'\"',e:'\"'},{b:\"'\",e:\"'\"}]}]}});hljs.registerLanguage(\"autohotkey\",function(e){var a={b:\"`[\\\\s\\\\S]\"};return{cI:!0,aliases:[\"ahk\"],k:{keyword:\"Break Continue Critical Exit ExitApp Gosub Goto New OnExit Pause return SetBatchLines SetTimer Suspend Thread Throw Until ahk_id ahk_class ahk_pid ahk_exe ahk_group\",literal:\"true false NOT AND OR\",built_in:\"ComSpec Clipboard ClipboardAll ErrorLevel\"},c:[a,e.inherit(e.QSM,{c:[a]}),e.C(\";\",\"$\",{relevance:0}),e.CBCM,{cN:\"number\",b:e.NR,relevance:0},{cN:\"variable\",b:\"%[a-zA-Z0-9#_$@]+%\"},{cN:\"built_in\",b:\"^\\\\s*\\\\w+\\\\s*(,|%)\"},{cN:\"title\",v:[{b:'^[^\\\\n\";]+::(?!=)'},{b:'^[^\\\\n\";]+:(?!=)',relevance:0}]},{cN:\"meta\",b:\"^\\\\s*#\\\\w+\",e:\"$\",relevance:0},{cN:\"built_in\",b:\"A_[a-zA-Z0-9]+\"},{b:\",\\\\s*,\"}]}});hljs.registerLanguage(\"elixir\",function(e){var b=\"[a-zA-Z_][a-zA-Z0-9_.]*(\\\\!|\\\\?)?\",c=\"and false then defined module in return redo retry end for true self when next until do begin unless nil break not case cond alias while ensure or include use alias fn quote require import with|0\",n={cN:\"subst\",b:\"#\\\\{\",e:\"}\",l:b,k:c},r=\"[/|([{<\\\"']\",a={cN:\"string\",b:\"~[a-z](?=\"+r+\")\",c:[{endsParent:!0,c:[{c:[e.BE,n],v:[{b:/\"/,e:/\"/},{b:/'/,e:/'/},{b:/\\//,e:/\\//},{b:/\\|/,e:/\\|/},{b:/\\(/,e:/\\)/},{b:/\\[/,e:/\\]/},{b:/\\{/,e:/\\}/},{b:/</,e:/>/}]}]}]},i={cN:\"string\",b:\"~[A-Z](?=\"+r+\")\",c:[{b:/\"/,e:/\"/},{b:/'/,e:/'/},{b:/\\//,e:/\\//},{b:/\\|/,e:/\\|/},{b:/\\(/,e:/\\)/},{b:/\\[/,e:/\\]/},{b:/\\{/,e:/\\}/},{b:/\\</,e:/\\>/}]},l={cN:\"string\",c:[e.BE,n],v:[{b:/\"\"\"/,e:/\"\"\"/},{b:/'''/,e:/'''/},{b:/~S\"\"\"/,e:/\"\"\"/,c:[]},{b:/~S\"/,e:/\"/,c:[]},{b:/~S'''/,e:/'''/,c:[]},{b:/~S'/,e:/'/,c:[]},{b:/'/,e:/'/},{b:/\"/,e:/\"/}]},s={cN:\"function\",bK:\"def defp defmacro\",e:/\\B\\b/,c:[e.inherit(e.TM,{b:b,endsParent:!0})]},t=e.inherit(s,{cN:\"class\",bK:\"defimpl defmodule defprotocol defrecord\",e:/\\bdo\\b|$|;/}),d=[l,i,a,e.HCM,t,s,{b:\"::\"},{cN:\"symbol\",b:\":(?![\\\\s:])\",c:[l,{b:\"[a-zA-Z_]\\\\w*[!?=]?|[-+~]\\\\@|<<|>>|=~|===?|<=>|[<>]=?|\\\\*\\\\*|[-/+%^&*~`|]|\\\\[\\\\]=?\"}],relevance:0},{cN:\"symbol\",b:b+\":(?!:)\",relevance:0},{cN:\"number\",b:\"(\\\\b0o[0-7_]+)|(\\\\b0b[01_]+)|(\\\\b0x[0-9a-fA-F_]+)|(-?\\\\b[1-9][0-9_]*(.[0-9_]+([eE][-+]?[0-9]+)?)?)\",relevance:0},{cN:\"variable\",b:\"(\\\\$\\\\W)|((\\\\$|\\\\@\\\\@?)(\\\\w+))\"},{b:\"->\"},{b:\"(\"+e.RSR+\")\\\\s*\",c:[e.HCM,{cN:\"regexp\",i:\"\\\\n\",c:[e.BE,n],v:[{b:\"/\",e:\"/[a-z]*\"},{b:\"%r\\\\[\",e:\"\\\\][a-z]*\"}]}],relevance:0}];return{l:b,k:c,c:n.c=d}});hljs.registerLanguage(\"gradle\",function(e){return{cI:!0,k:{keyword:\"task project allprojects subprojects artifacts buildscript configurations dependencies repositories sourceSets description delete from into include exclude source classpath destinationDir includes options sourceCompatibility targetCompatibility group flatDir doLast doFirst flatten todir fromdir ant def abstract break case catch continue default do else extends final finally for if implements instanceof native new private protected public return static switch synchronized throw throws transient try volatile while strictfp package import false null super this true antlrtask checkstyle codenarc copy boolean byte char class double float int interface long short void compile runTime file fileTree abs any append asList asWritable call collect compareTo count div dump each eachByte eachFile eachLine every find findAll flatten getAt getErr getIn getOut getText grep immutable inject inspect intersect invokeMethods isCase join leftShift minus multiply newInputStream newOutputStream newPrintWriter newReader newWriter next plus pop power previous print println push putAt read readBytes readLines reverse reverseEach round size sort splitEachLine step subMap times toInteger toList tokenize upto waitForOrKill withPrintWriter withReader withStream withWriter withWriterAppend write writeLine\"},c:[e.CLCM,e.CBCM,e.ASM,e.QSM,e.NM,e.RM]}});hljs.registerLanguage(\"css\",function(e){var c={b:/(?:[A-Z\\_\\.\\-]+|--[a-zA-Z0-9_-]+)\\s*:/,rB:!0,e:\";\",eW:!0,c:[{cN:\"attribute\",b:/\\S/,e:\":\",eE:!0,starts:{eW:!0,eE:!0,c:[{b:/[\\w-]+\\(/,rB:!0,c:[{cN:\"built_in\",b:/[\\w-]+/},{b:/\\(/,e:/\\)/,c:[e.ASM,e.QSM,e.CSSNM]}]},e.CSSNM,e.QSM,e.ASM,e.CBCM,{cN:\"number\",b:\"#[0-9A-Fa-f]+\"},{cN:\"meta\",b:\"!important\"}]}}]};return{cI:!0,i:/[=\\/|'\\$]/,c:[e.CBCM,{cN:\"selector-id\",b:/#[A-Za-z0-9_-]+/},{cN:\"selector-class\",b:/\\.[A-Za-z0-9_-]+/},{cN:\"selector-attr\",b:/\\[/,e:/\\]/,i:\"$\",c:[e.ASM,e.QSM]},{cN:\"selector-pseudo\",b:/:(:)?[a-zA-Z0-9\\_\\-\\+\\(\\)\"'.]+/},{b:\"@(page|font-face)\",l:\"@[a-z-]+\",k:\"@page @font-face\"},{b:\"@\",e:\"[{;]\",i:/:/,rB:!0,c:[{cN:\"keyword\",b:/@\\-?\\w[\\w]*(\\-\\w+)*/},{b:/\\s/,eW:!0,eE:!0,relevance:0,k:\"and or not only\",c:[{b:/[a-z-]+:/,cN:\"attribute\"},e.ASM,e.QSM,e.CSSNM]}]},{cN:\"selector-tag\",b:\"[a-zA-Z-][a-zA-Z0-9_-]*\",relevance:0},{b:\"{\",e:\"}\",i:/\\S/,c:[e.CBCM,c]}]}});\n\nexports.hljs = hljs;\n",
"type": "application/javascript",
"title": "$:/plugins/tiddlywiki/highlight/highlight.js",
"module-type": "library"
},
"$:/plugins/tiddlywiki/highlight/highlight.css": {
"text": "/*\n\nOriginal highlight.js style (c) Ivan Sagalaev <maniac@softwaremaniacs.org>\n\n*/\n\n.hljs {\n display: block;\n overflow-x: auto;\n padding: 0.5em;\n background: #F0F0F0;\n}\n\n\n/* Base color: saturation 0; */\n\n.hljs,\n.hljs-subst {\n color: #444;\n}\n\n.hljs-comment {\n color: #888888;\n}\n\n.hljs-keyword,\n.hljs-attribute,\n.hljs-selector-tag,\n.hljs-meta-keyword,\n.hljs-doctag,\n.hljs-name {\n font-weight: bold;\n}\n\n\n/* User color: hue: 0 */\n\n.hljs-type,\n.hljs-string,\n.hljs-number,\n.hljs-selector-id,\n.hljs-selector-class,\n.hljs-quote,\n.hljs-template-tag,\n.hljs-deletion {\n color: #880000;\n}\n\n.hljs-title,\n.hljs-section {\n color: #880000;\n font-weight: bold;\n}\n\n.hljs-regexp,\n.hljs-symbol,\n.hljs-variable,\n.hljs-template-variable,\n.hljs-link,\n.hljs-selector-attr,\n.hljs-selector-pseudo {\n color: #BC6060;\n}\n\n\n/* Language color: hue: 90; */\n\n.hljs-literal {\n color: #78A960;\n}\n\n.hljs-built_in,\n.hljs-bullet,\n.hljs-code,\n.hljs-addition {\n color: #397300;\n}\n\n\n/* Meta color: hue: 200 */\n\n.hljs-meta {\n color: #1f7199;\n}\n\n.hljs-meta-string {\n color: #4d99bf;\n}\n\n\n/* Misc effects */\n\n.hljs-emphasis {\n font-style: italic;\n}\n\n.hljs-strong {\n font-weight: bold;\n}\n",
"type": "text/css",
"title": "$:/plugins/tiddlywiki/highlight/highlight.css",
"tags": "[[$:/tags/Stylesheet]]"
},
"$:/plugins/tiddlywiki/highlight/highlightblock.js": {
"title": "$:/plugins/tiddlywiki/highlight/highlightblock.js",
"text": "/*\\\ntitle: $:/plugins/tiddlywiki/highlight/highlightblock.js\ntype: application/javascript\nmodule-type: widget\n\nWraps up the fenced code blocks parser for highlight and use in TiddlyWiki5\n\n\\*/\n(function() {\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar TYPE_MAPPINGS_BASE = \"$:/config/HighlightPlugin/TypeMappings/\";\n\nvar CodeBlockWidget = require(\"$:/core/modules/widgets/codeblock.js\").codeblock;\n\nvar hljs = require(\"$:/plugins/tiddlywiki/highlight/highlight.js\");\n\nhljs.configure({tabReplace: \" \"});\t\n\nCodeBlockWidget.prototype.postRender = function() {\n\tvar domNode = this.domNodes[0],\n\t\tlanguage = this.language,\n\t\ttiddler = this.wiki.getTiddler(TYPE_MAPPINGS_BASE + language);\n\tif(tiddler) {\n\t\tlanguage = tiddler.fields.text || \"\";\n\t}\n\tif(language && hljs.getLanguage(language)) {\n\t\tdomNode.className = language.toLowerCase() + \" hljs\";\n\t\tif($tw.browser && !domNode.isTiddlyWikiFakeDom) {\n\t\t\thljs.highlightBlock(domNode);\t\t\t\n\t\t} else {\n\t\t\tvar text = domNode.textContent;\n\t\t\tdomNode.children[0].innerHTML = hljs.fixMarkup(hljs.highlight(language,text).value);\n\t\t\t// If we're using the fakedom then specially save the original raw text\n\t\t\tif(domNode.isTiddlyWikiFakeDom) {\n\t\t\t\tdomNode.children[0].textInnerHTML = text;\n\t\t\t}\n\t\t}\n\t}\t\n};\n\n})();\n",
"type": "application/javascript",
"module-type": "widget"
},
"$:/plugins/tiddlywiki/highlight/howto": {
"title": "$:/plugins/tiddlywiki/highlight/howto",
"text": "! Supporting Additional Languages\n \nThe [[highlight.js|https://github.com/highlightjs/highlight.js]] project supports many languages. Only a subset of these languages are supported by the plugin. It is possible for users to change the set of languages supported by the plugin by following these steps:\n \n# Go to the highlight.js project [[download page|https://highlightjs.org/download/]], select the language definitions to include, and press the Download button to download a zip archive containing customised support files for a highlight.js syntax highlighting server.\n# Locate the `highlight.pack.js` file in the highlight plugin -- on a stock Debian 8 system running Tiddlywiki5 under node-js it is located at `/usr/local/lib/node_modules/tiddlywiki/plugins/tiddlywiki/highlight/files/highlight.pack.js`.\n# Replace the plugin `highlight.pack.js` file located in step 2 with the one from the downloaded archive obtained in step 1.\n# Restart the Tiddlywiki server.\n"
},
"$:/plugins/tiddlywiki/highlight/license": {
"title": "$:/plugins/tiddlywiki/highlight/license",
"type": "text/plain",
"text": "Copyright (c) 2006, Ivan Sagalaev\nAll rights reserved.\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n * Neither the name of highlight.js nor the names of its contributors\n may be used to endorse or promote products derived from this software\n without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY\nEXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY\nDIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\nON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
},
"$:/plugins/tiddlywiki/highlight/readme": {
"title": "$:/plugins/tiddlywiki/highlight/readme",
"text": "This plugin provides syntax highlighting of code blocks using v9.18.1 of [[highlight.js|https://github.com/isagalaev/highlight.js]] from Ivan Sagalaev.\n\n! Usage\n\nWhen the plugin is installed it automatically applies highlighting to all codeblocks defined with triple backticks or with the CodeBlockWidget.\n\nThe language can optionally be specified after the opening triple braces:\n\n<$codeblock code=\"\"\"```css\n * { margin: 0; padding: 0; } /* micro reset */\n\nhtml { font-size: 62.5%; }\nbody { font-size: 14px; font-size: 1.4rem; } /* =14px */\nh1 { font-size: 24px; font-size: 2.4rem; } /* =24px */\n```\"\"\"/>\n\nIf no language is specified highlight.js will attempt to automatically detect the language.\n\n! Built-in Language Brushes\n\nThe plugin includes support for the following languages (referred to as \"brushes\" by highlight.js):\n\n* apache\n* arduino\n* arm assembly\n* asciidoc\n* autohotkey\n* awk\n* bash\n* cmake\n* coffeescript\n* cpp\n* cs\n* css\n* diff\n* dockerfile\n* erlang\n* elixir\n* fortran\n* go\n* gradle\n* haskell\n* html\n* http\n* ini\n* intel x86 assembly\n* java\n* javascript\n* json\n* kotlin\n* less\n* lua\n* makefile\n* markdown\n* mathematica\n* matlab\n* nginx\n* objectivec\n* perl\n* php\n* plaintext\n* powershell\n* properties\n* python\n* R\n* ruby\n* rust\n* scss\n* shell session\n* sql\n* swift\n* toml\n* typescript\n* vala\n* vim script\n* xml\n* yaml\n\nYou can also specify the language as a MIME content type (eg `text/html` or `text/css`). The mapping is accomplished via mapping tiddlers whose titles start with `$:/config/HighlightPlugin/TypeMappings/`.\n"
},
"$:/plugins/tiddlywiki/highlight/styles": {
"title": "$:/plugins/tiddlywiki/highlight/styles",
"tags": "[[$:/tags/Stylesheet]]",
"text": ".hljs{display:block;overflow-x:auto;padding:.5em;color:#333;background:#f8f8f8;-webkit-text-size-adjust:none}.hljs-comment,.diff .hljs-header,.hljs-javadoc{color:#998;font-style:italic}.hljs-keyword,.css .rule .hljs-keyword,.hljs-winutils,.nginx .hljs-title,.hljs-subst,.hljs-request,.hljs-status{color:#333;font-weight:bold}.hljs-number,.hljs-hexcolor,.ruby .hljs-constant{color:teal}.hljs-string,.hljs-tag .hljs-value,.hljs-phpdoc,.hljs-dartdoc,.tex .hljs-formula{color:#d14}.hljs-title,.hljs-id,.scss .hljs-preprocessor{color:#900;font-weight:bold}.hljs-list .hljs-keyword,.hljs-subst{font-weight:normal}.hljs-class .hljs-title,.hljs-type,.vhdl .hljs-literal,.tex .hljs-command{color:#458;font-weight:bold}.hljs-tag,.hljs-tag .hljs-title,.hljs-rule .hljs-property,.django .hljs-tag .hljs-keyword{color:navy;font-weight:normal}.hljs-attribute,.hljs-variable,.lisp .hljs-body,.hljs-name{color:teal}.hljs-regexp{color:#009926}.hljs-symbol,.ruby .hljs-symbol .hljs-string,.lisp .hljs-keyword,.clojure .hljs-keyword,.scheme .hljs-keyword,.tex .hljs-special,.hljs-prompt{color:#990073}.hljs-built_in{color:#0086b3}.hljs-preprocessor,.hljs-pragma,.hljs-pi,.hljs-doctype,.hljs-shebang,.hljs-cdata{color:#999;font-weight:bold}.hljs-deletion{background:#fdd}.hljs-addition{background:#dfd}.diff .hljs-change{background:#0086b3}.hljs-chunk{color:#aaa}"
},
"$:/plugins/tiddlywiki/highlight/usage": {
"title": "$:/plugins/tiddlywiki/highlight/usage",
"text": "! Usage\n\nFenced code blocks can have a language specifier added to trigger highlighting in a specific language. Otherwise heuristics are used to detect the language.\n\n```\n ```js\n var a = b + c; // Highlighted as JavaScript\n ```\n```\n! Adding Themes\n\nYou can add themes from highlight.js by copying the CSS to a new tiddler and tagging it with [[$:/tags/Stylesheet]]. The available themes can be found on GitHub:\n\nhttps://github.com/isagalaev/highlight.js/tree/master/src/styles\n"
}
}
}
{
"tiddlers": {
"$:/plugins/tiddlywiki/markdown/EditorToolbar/bold": {
"title": "$:/plugins/tiddlywiki/markdown/EditorToolbar/bold",
"list-after": "$:/core/ui/EditorToolbar/bold",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/bold",
"caption": "{{$:/language/Buttons/Bold/Caption}} (Markdown)",
"description": "{{$:/language/Buttons/Bold/Hint}}",
"condition": "[<targetTiddler>type[text/x-markdown]]",
"shortcuts": "((bold))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"**\"\n\tsuffix=\"**\"\n/>\n"
},
"$:/plugins/tiddlywiki/markdown/EditorToolbar/heading-1": {
"title": "$:/plugins/tiddlywiki/markdown/EditorToolbar/heading-1",
"list-after": "$:/core/ui/EditorToolbar/heading-1",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-1",
"caption": "{{$:/language/Buttons/Heading1/Caption}} (Markdown)",
"description": "{{$:/language/Buttons/Heading1/Hint}}",
"condition": "[<targetTiddler>type[text/x-markdown]]",
"shortcuts": "((heading-1))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"#\"\n\tcount=\"1\"\n/>\n"
},
"$:/plugins/tiddlywiki/markdown/EditorToolbar/heading-2": {
"title": "$:/plugins/tiddlywiki/markdown/EditorToolbar/heading-2",
"list-after": "$:/core/ui/EditorToolbar/heading-2",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-2",
"caption": "{{$:/language/Buttons/Heading2/Caption}} (Markdown)",
"description": "{{$:/language/Buttons/Heading2/Hint}}",
"condition": "[<targetTiddler>type[text/x-markdown]]",
"shortcuts": "((heading-2))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"#\"\n\tcount=\"2\"\n/>\n"
},
"$:/plugins/tiddlywiki/markdown/EditorToolbar/heading-3": {
"title": "$:/plugins/tiddlywiki/markdown/EditorToolbar/heading-3",
"list-after": "$:/core/ui/EditorToolbar/heading-3",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-3",
"caption": "{{$:/language/Buttons/Heading3/Caption}} (Markdown)",
"description": "{{$:/language/Buttons/Heading3/Hint}}",
"condition": "[<targetTiddler>type[text/x-markdown]]",
"shortcuts": "((heading-3))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"#\"\n\tcount=\"3\"\n/>\n"
},
"$:/plugins/tiddlywiki/markdown/EditorToolbar/heading-4": {
"title": "$:/plugins/tiddlywiki/markdown/EditorToolbar/heading-4",
"list-after": "$:/core/ui/EditorToolbar/heading-4",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-4",
"caption": "{{$:/language/Buttons/Heading4/Caption}} (Markdown)",
"description": "{{$:/language/Buttons/Heading4/Hint}}",
"condition": "[<targetTiddler>type[text/x-markdown]]",
"shortcuts": "((heading-4))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"#\"\n\tcount=\"4\"\n/>\n"
},
"$:/plugins/tiddlywiki/markdown/EditorToolbar/heading-5": {
"title": "$:/plugins/tiddlywiki/markdown/EditorToolbar/heading-5",
"list-after": "$:/core/ui/EditorToolbar/heading-5",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-5",
"caption": "{{$:/language/Buttons/Heading5/Caption}} (Markdown)",
"description": "{{$:/language/Buttons/Heading5/Hint}}",
"condition": "[<targetTiddler>type[text/x-markdown]]",
"shortcuts": "((heading-5))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"#\"\n\tcount=\"5\"\n/>\n"
},
"$:/plugins/tiddlywiki/markdown/EditorToolbar/heading-6": {
"title": "$:/plugins/tiddlywiki/markdown/EditorToolbar/heading-6",
"list-after": "$:/core/ui/EditorToolbar/heading-6",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/heading-6",
"caption": "{{$:/language/Buttons/Heading6/Caption}} (Markdown)",
"description": "{{$:/language/Buttons/Heading6/Hint}}",
"condition": "[<targetTiddler>type[text/x-markdown]]",
"shortcuts": "((heading-6))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"#\"\n\tcount=\"6\"\n/>\n"
},
"$:/plugins/tiddlywiki/markdown/EditorToolbar/italic": {
"title": "$:/plugins/tiddlywiki/markdown/EditorToolbar/italic",
"list-after": "$:/core/ui/EditorToolbar/italic",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/italic",
"caption": "{{$:/language/Buttons/Italic/Caption}} (Markdown)",
"description": "{{$:/language/Buttons/Italic/Hint}}",
"condition": "[<targetTiddler>type[text/x-markdown]]",
"shortcuts": "((italic))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"*\"\n\tsuffix=\"*\"\n/>\n"
},
"$:/plugins/tiddlywiki/markdown/EditorToolbar/list-bullet": {
"title": "$:/plugins/tiddlywiki/markdown/EditorToolbar/list-bullet",
"list-after": "$:/core/ui/EditorToolbar/list-bullet",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/list-bullet",
"caption": "{{$:/language/Buttons/ListBullet/Caption}} (Markdown)",
"description": "{{$:/language/Buttons/ListBullet/Hint}}",
"condition": "[<targetTiddler>type[text/x-markdown]]",
"shortcuts": "((list-bullet))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"*\"\n\tcount=\"1\"\n/>\n"
},
"$:/plugins/tiddlywiki/markdown/EditorToolbar/list-number": {
"title": "$:/plugins/tiddlywiki/markdown/EditorToolbar/list-number",
"list-after": "$:/core/ui/EditorToolbar/list-number",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/list-number",
"caption": "{{$:/language/Buttons/ListNumber/Caption}} (Markdown)",
"description": "{{$:/language/Buttons/ListNumber/Hint}}",
"condition": "[<targetTiddler>type[text/x-markdown]]",
"shortcuts": "((list-number))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\"1.\"\n\tcount=\"1\"\n/>\n"
},
"$:/plugins/tiddlywiki/markdown/EditorToolbar/mono-line": {
"title": "$:/plugins/tiddlywiki/markdown/EditorToolbar/mono-line",
"list-after": "$:/core/ui/EditorToolbar/mono-line",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/mono-line",
"caption": "{{$:/language/Buttons/MonoLine/Caption}} (Markdown)",
"description": "{{$:/language/Buttons/MonoLine/Hint}}",
"condition": "[<targetTiddler>type[text/x-markdown]]",
"shortcuts": "((mono-line))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"wrap-selection\"\n\tprefix=\"`\"\n\tsuffix=\"`\"\n/>\n"
},
"$:/plugins/tiddlywiki/markdown/EditorToolbar/quote": {
"title": "$:/plugins/tiddlywiki/markdown/EditorToolbar/quote",
"list-after": "$:/core/ui/EditorToolbar/quote",
"tags": "$:/tags/EditorToolbar",
"icon": "$:/core/images/quote",
"caption": "{{$:/language/Buttons/Quote/Caption}} (Markdown)",
"description": "{{$:/language/Buttons/Quote/Hint}}",
"condition": "[<targetTiddler>type[text/x-markdown]]",
"shortcuts": "((quote))",
"text": "<$action-sendmessage\n\t$message=\"tm-edit-text-operation\"\n\t$param=\"prefix-lines\"\n\tcharacter=\">\"\n\tcount=\"1\"\n/>\n"
},
"$:/config/markdown/breaks": {
"title": "$:/config/markdown/breaks",
"text": "false"
},
"$:/config/markdown/linkNewWindow": {
"title": "$:/config/markdown/linkNewWindow",
"text": "true"
},
"$:/config/markdown/linkify": {
"title": "$:/config/markdown/linkify",
"text": "false"
},
"$:/config/markdown/quotes": {
"title": "$:/config/markdown/quotes",
"text": "“”‘’"
},
"$:/config/markdown/renderWikiText": {
"title": "$:/config/markdown/renderWikiText",
"text": "true"
},
"$:/config/markdown/renderWikiTextPragma": {
"title": "$:/config/markdown/renderWikiTextPragma",
"text": "\\rules only html image macrocallinline syslink transcludeinline wikilink filteredtranscludeblock macrocallblock transcludeblock"
},
"$:/config/markdown/typographer": {
"title": "$:/config/markdown/typographer",
"text": "false"
},
"$:/language/Docs/Types/text/x-markdown": {
"title": "$:/language/Docs/Types/text/x-markdown",
"description": "Markdown",
"name": "text/x-markdown",
"group": "Text"
},
"$:/plugins/tiddlywiki/markdown/remarkable.js": {
"text": "!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?t(exports):\"function\"==typeof define&&define.amd?define([\"exports\"],t):t((e=e||self).remarkable={})}(this,function(e){\"use strict\";var t={Aacute:\"Á\",aacute:\"á\",Abreve:\"Ă\",abreve:\"ă\",ac:\"∾\",acd:\"∿\",acE:\"∾̳\",Acirc:\"Â\",acirc:\"â\",acute:\"´\",Acy:\"А\",acy:\"а\",AElig:\"Æ\",aelig:\"æ\",af:\"\",Afr:\"𝔄\",afr:\"𝔞\",Agrave:\"À\",agrave:\"à\",alefsym:\"ℵ\",aleph:\"ℵ\",Alpha:\"Α\",alpha:\"α\",Amacr:\"Ā\",amacr:\"ā\",amalg:\"⨿\",AMP:\"&\",amp:\"&\",And:\"⩓\",and:\"∧\",andand:\"⩕\",andd:\"⩜\",andslope:\"⩘\",andv:\"⩚\",ang:\"∠\",ange:\"⦤\",angle:\"∠\",angmsd:\"∡\",angmsdaa:\"⦨\",angmsdab:\"⦩\",angmsdac:\"⦪\",angmsdad:\"⦫\",angmsdae:\"⦬\",angmsdaf:\"⦭\",angmsdag:\"⦮\",angmsdah:\"⦯\",angrt:\"∟\",angrtvb:\"⊾\",angrtvbd:\"⦝\",angsph:\"∢\",angst:\"Å\",angzarr:\"⍼\",Aogon:\"Ą\",aogon:\"ą\",Aopf:\"𝔸\",aopf:\"𝕒\",ap:\"≈\",apacir:\"⩯\",apE:\"⩰\",ape:\"≊\",apid:\"≋\",apos:\"'\",ApplyFunction:\"\",approx:\"≈\",approxeq:\"≊\",Aring:\"Å\",aring:\"å\",Ascr:\"𝒜\",ascr:\"𝒶\",Assign:\"≔\",ast:\"*\",asymp:\"≈\",asympeq:\"≍\",Atilde:\"Ã\",atilde:\"ã\",Auml:\"Ä\",auml:\"ä\",awconint:\"∳\",awint:\"⨑\",backcong:\"≌\",backepsilon:\"϶\",backprime:\"‵\",backsim:\"∽\",backsimeq:\"⋍\",Backslash:\"∖\",Barv:\"⫧\",barvee:\"⊽\",Barwed:\"⌆\",barwed:\"⌅\",barwedge:\"⌅\",bbrk:\"⎵\",bbrktbrk:\"⎶\",bcong:\"≌\",Bcy:\"Б\",bcy:\"б\",bdquo:\"„\",becaus:\"∵\",Because:\"∵\",because:\"∵\",bemptyv:\"⦰\",bepsi:\"϶\",bernou:\"ℬ\",Bernoullis:\"ℬ\",Beta:\"Β\",beta:\"β\",beth:\"ℶ\",between:\"≬\",Bfr:\"𝔅\",bfr:\"𝔟\",bigcap:\"⋂\",bigcirc:\"◯\",bigcup:\"⋃\",bigodot:\"⨀\",bigoplus:\"⨁\",bigotimes:\"⨂\",bigsqcup:\"⨆\",bigstar:\"★\",bigtriangledown:\"▽\",bigtriangleup:\"△\",biguplus:\"⨄\",bigvee:\"⋁\",bigwedge:\"⋀\",bkarow:\"⤍\",blacklozenge:\"⧫\",blacksquare:\"▪\",blacktriangle:\"▴\",blacktriangledown:\"▾\",blacktriangleleft:\"◂\",blacktriangleright:\"▸\",blank:\"␣\",blk12:\"▒\",blk14:\"░\",blk34:\"▓\",block:\"█\",bne:\"=⃥\",bnequiv:\"≡⃥\",bNot:\"⫭\",bnot:\"⌐\",Bopf:\"𝔹\",bopf:\"𝕓\",bot:\"⊥\",bottom:\"⊥\",bowtie:\"⋈\",boxbox:\"⧉\",boxDL:\"╗\",boxDl:\"╖\",boxdL:\"╕\",boxdl:\"┐\",boxDR:\"╔\",boxDr:\"╓\",boxdR:\"╒\",boxdr:\"┌\",boxH:\"═\",boxh:\"─\",boxHD:\"╦\",boxHd:\"╤\",boxhD:\"╥\",boxhd:\"┬\",boxHU:\"╩\",boxHu:\"╧\",boxhU:\"╨\",boxhu:\"┴\",boxminus:\"⊟\",boxplus:\"⊞\",boxtimes:\"⊠\",boxUL:\"╝\",boxUl:\"╜\",boxuL:\"╛\",boxul:\"┘\",boxUR:\"╚\",boxUr:\"╙\",boxuR:\"╘\",boxur:\"└\",boxV:\"║\",boxv:\"│\",boxVH:\"╬\",boxVh:\"╫\",boxvH:\"╪\",boxvh:\"┼\",boxVL:\"╣\",boxVl:\"╢\",boxvL:\"╡\",boxvl:\"┤\",boxVR:\"╠\",boxVr:\"╟\",boxvR:\"╞\",boxvr:\"├\",bprime:\"‵\",Breve:\"˘\",breve:\"˘\",brvbar:\"¦\",Bscr:\"ℬ\",bscr:\"𝒷\",bsemi:\"⁏\",bsim:\"∽\",bsime:\"⋍\",bsol:\"\\\\\",bsolb:\"⧅\",bsolhsub:\"⟈\",bull:\"•\",bullet:\"•\",bump:\"≎\",bumpE:\"⪮\",bumpe:\"≏\",Bumpeq:\"≎\",bumpeq:\"≏\",Cacute:\"Ć\",cacute:\"ć\",Cap:\"⋒\",cap:\"∩\",capand:\"⩄\",capbrcup:\"⩉\",capcap:\"⩋\",capcup:\"⩇\",capdot:\"⩀\",CapitalDifferentialD:\"ⅅ\",caps:\"∩︀\",caret:\"⁁\",caron:\"ˇ\",Cayleys:\"ℭ\",ccaps:\"⩍\",Ccaron:\"Č\",ccaron:\"č\",Ccedil:\"Ç\",ccedil:\"ç\",Ccirc:\"Ĉ\",ccirc:\"ĉ\",Cconint:\"∰\",ccups:\"⩌\",ccupssm:\"⩐\",Cdot:\"Ċ\",cdot:\"ċ\",cedil:\"¸\",Cedilla:\"¸\",cemptyv:\"⦲\",cent:\"¢\",CenterDot:\"·\",centerdot:\"·\",Cfr:\"ℭ\",cfr:\"𝔠\",CHcy:\"Ч\",chcy:\"ч\",check:\"✓\",checkmark:\"✓\",Chi:\"Χ\",chi:\"χ\",cir:\"○\",circ:\"ˆ\",circeq:\"≗\",circlearrowleft:\"↺\",circlearrowright:\"↻\",circledast:\"⊛\",circledcirc:\"⊚\",circleddash:\"⊝\",CircleDot:\"⊙\",circledR:\"®\",circledS:\"Ⓢ\",CircleMinus:\"⊖\",CirclePlus:\"⊕\",CircleTimes:\"⊗\",cirE:\"⧃\",cire:\"≗\",cirfnint:\"⨐\",cirmid:\"⫯\",cirscir:\"⧂\",ClockwiseContourIntegral:\"∲\",CloseCurlyDoubleQuote:\"”\",CloseCurlyQuote:\"’\",clubs:\"♣\",clubsuit:\"♣\",Colon:\"∷\",colon:\":\",Colone:\"⩴\",colone:\"≔\",coloneq:\"≔\",comma:\",\",commat:\"@\",comp:\"∁\",compfn:\"∘\",complement:\"∁\",complexes:\"ℂ\",cong:\"≅\",congdot:\"⩭\",Congruent:\"≡\",Conint:\"∯\",conint:\"∮\",ContourIntegral:\"∮\",Copf:\"ℂ\",copf:\"𝕔\",coprod:\"∐\",Coproduct:\"∐\",COPY:\"©\",copy:\"©\",copysr:\"℗\",CounterClockwiseContourIntegral:\"∳\",crarr:\"↵\",Cross:\"⨯\",cross:\"✗\",Cscr:\"𝒞\",cscr:\"𝒸\",csub:\"⫏\",csube:\"⫑\",csup:\"⫐\",csupe:\"⫒\",ctdot:\"⋯\",cudarrl:\"⤸\",cudarrr:\"⤵\",cuepr:\"⋞\",cuesc:\"⋟\",cularr:\"↶\",cularrp:\"⤽\",Cup:\"⋓\",cup:\"∪\",cupbrcap:\"⩈\",CupCap:\"≍\",cupcap:\"⩆\",cupcup:\"⩊\",cupdot:\"⊍\",cupor:\"⩅\",cups:\"∪︀\",curarr:\"↷\",curarrm:\"⤼\",curlyeqprec:\"⋞\",curlyeqsucc:\"⋟\",curlyvee:\"⋎\",curlywedge:\"⋏\",curren:\"¤\",curvearrowleft:\"↶\",curvearrowright:\"↷\",cuvee:\"⋎\",cuwed:\"⋏\",cwconint:\"∲\",cwint:\"∱\",cylcty:\"⌭\",Dagger:\"‡\",dagger:\"†\",daleth:\"ℸ\",Darr:\"↡\",dArr:\"⇓\",darr:\"↓\",dash:\"‐\",Dashv:\"⫤\",dashv:\"⊣\",dbkarow:\"⤏\",dblac:\"˝\",Dcaron:\"Ď\",dcaron:\"ď\",Dcy:\"Д\",dcy:\"д\",DD:\"ⅅ\",dd:\"ⅆ\",ddagger:\"‡\",ddarr:\"⇊\",DDotrahd:\"⤑\",ddotseq:\"⩷\",deg:\"°\",Del:\"∇\",Delta:\"Δ\",delta:\"δ\",demptyv:\"⦱\",dfisht:\"⥿\",Dfr:\"𝔇\",dfr:\"𝔡\",dHar:\"⥥\",dharl:\"⇃\",dharr:\"⇂\",DiacriticalAcute:\"´\",DiacriticalDot:\"˙\",DiacriticalDoubleAcute:\"˝\",DiacriticalGrave:\"`\",DiacriticalTilde:\"˜\",diam:\"⋄\",Diamond:\"⋄\",diamond:\"⋄\",diamondsuit:\"♦\",diams:\"♦\",die:\"¨\",DifferentialD:\"ⅆ\",digamma:\"ϝ\",disin:\"⋲\",div:\"÷\",divide:\"÷\",divideontimes:\"⋇\",divonx:\"⋇\",DJcy:\"Ђ\",djcy:\"ђ\",dlcorn:\"⌞\",dlcrop:\"⌍\",dollar:\"$\",Dopf:\"𝔻\",dopf:\"𝕕\",Dot:\"¨\",dot:\"˙\",DotDot:\"⃜\",doteq:\"≐\",doteqdot:\"≑\",DotEqual:\"≐\",dotminus:\"∸\",dotplus:\"∔\",dotsquare:\"⊡\",doublebarwedge:\"⌆\",DoubleContourIntegral:\"∯\",DoubleDot:\"¨\",DoubleDownArrow:\"⇓\",DoubleLeftArrow:\"⇐\",DoubleLeftRightArrow:\"⇔\",DoubleLeftTee:\"⫤\",DoubleLongLeftArrow:\"⟸\",DoubleLongLeftRightArrow:\"⟺\",DoubleLongRightArrow:\"⟹\",DoubleRightArrow:\"⇒\",DoubleRightTee:\"⊨\",DoubleUpArrow:\"⇑\",DoubleUpDownArrow:\"⇕\",DoubleVerticalBar:\"∥\",DownArrow:\"↓\",Downarrow:\"⇓\",downarrow:\"↓\",DownArrowBar:\"⤓\",DownArrowUpArrow:\"⇵\",DownBreve:\"̑\",downdownarrows:\"⇊\",downharpoonleft:\"⇃\",downharpoonright:\"⇂\",DownLeftRightVector:\"⥐\",DownLeftTeeVector:\"⥞\",DownLeftVector:\"↽\",DownLeftVectorBar:\"⥖\",DownRightTeeVector:\"⥟\",DownRightVector:\"⇁\",DownRightVectorBar:\"⥗\",DownTee:\"⊤\",DownTeeArrow:\"↧\",drbkarow:\"⤐\",drcorn:\"⌟\",drcrop:\"⌌\",Dscr:\"𝒟\",dscr:\"𝒹\",DScy:\"Ѕ\",dscy:\"ѕ\",dsol:\"⧶\",Dstrok:\"Đ\",dstrok:\"đ\",dtdot:\"⋱\",dtri:\"▿\",dtrif:\"▾\",duarr:\"⇵\",duhar:\"⥯\",dwangle:\"⦦\",DZcy:\"Џ\",dzcy:\"џ\",dzigrarr:\"⟿\",Eacute:\"É\",eacute:\"é\",easter:\"⩮\",Ecaron:\"Ě\",ecaron:\"ě\",ecir:\"≖\",Ecirc:\"Ê\",ecirc:\"ê\",ecolon:\"≕\",Ecy:\"Э\",ecy:\"э\",eDDot:\"⩷\",Edot:\"Ė\",eDot:\"≑\",edot:\"ė\",ee:\"ⅇ\",efDot:\"≒\",Efr:\"𝔈\",efr:\"𝔢\",eg:\"⪚\",Egrave:\"È\",egrave:\"è\",egs:\"⪖\",egsdot:\"⪘\",el:\"⪙\",Element:\"∈\",elinters:\"⏧\",ell:\"ℓ\",els:\"⪕\",elsdot:\"⪗\",Emacr:\"Ē\",emacr:\"ē\",empty:\"∅\",emptyset:\"∅\",EmptySmallSquare:\"◻\",emptyv:\"∅\",EmptyVerySmallSquare:\"▫\",emsp:\" \",emsp13:\" \",emsp14:\" \",ENG:\"Ŋ\",eng:\"ŋ\",ensp:\" \",Eogon:\"Ę\",eogon:\"ę\",Eopf:\"𝔼\",eopf:\"𝕖\",epar:\"⋕\",eparsl:\"⧣\",eplus:\"⩱\",epsi:\"ε\",Epsilon:\"Ε\",epsilon:\"ε\",epsiv:\"ϵ\",eqcirc:\"≖\",eqcolon:\"≕\",eqsim:\"≂\",eqslantgtr:\"⪖\",eqslantless:\"⪕\",Equal:\"⩵\",equals:\"=\",EqualTilde:\"≂\",equest:\"≟\",Equilibrium:\"⇌\",equiv:\"≡\",equivDD:\"⩸\",eqvparsl:\"⧥\",erarr:\"⥱\",erDot:\"≓\",Escr:\"ℰ\",escr:\"ℯ\",esdot:\"≐\",Esim:\"⩳\",esim:\"≂\",Eta:\"Η\",eta:\"η\",ETH:\"Ð\",eth:\"ð\",Euml:\"Ë\",euml:\"ë\",euro:\"€\",excl:\"!\",exist:\"∃\",Exists:\"∃\",expectation:\"ℰ\",ExponentialE:\"ⅇ\",exponentiale:\"ⅇ\",fallingdotseq:\"≒\",Fcy:\"Ф\",fcy:\"ф\",female:\"♀\",ffilig:\"ffi\",fflig:\"ff\",ffllig:\"ffl\",Ffr:\"𝔉\",ffr:\"𝔣\",filig:\"fi\",FilledSmallSquare:\"◼\",FilledVerySmallSquare:\"▪\",fjlig:\"fj\",flat:\"♭\",fllig:\"fl\",fltns:\"▱\",fnof:\"ƒ\",Fopf:\"𝔽\",fopf:\"𝕗\",ForAll:\"∀\",forall:\"∀\",fork:\"⋔\",forkv:\"⫙\",Fouriertrf:\"ℱ\",fpartint:\"⨍\",frac12:\"½\",frac13:\"⅓\",frac14:\"¼\",frac15:\"⅕\",frac16:\"⅙\",frac18:\"⅛\",frac23:\"⅔\",frac25:\"⅖\",frac34:\"¾\",frac35:\"⅗\",frac38:\"⅜\",frac45:\"⅘\",frac56:\"⅚\",frac58:\"⅝\",frac78:\"⅞\",frasl:\"⁄\",frown:\"⌢\",Fscr:\"ℱ\",fscr:\"𝒻\",gacute:\"ǵ\",Gamma:\"Γ\",gamma:\"γ\",Gammad:\"Ϝ\",gammad:\"ϝ\",gap:\"⪆\",Gbreve:\"Ğ\",gbreve:\"ğ\",Gcedil:\"Ģ\",Gcirc:\"Ĝ\",gcirc:\"ĝ\",Gcy:\"Г\",gcy:\"г\",Gdot:\"Ġ\",gdot:\"ġ\",gE:\"≧\",ge:\"≥\",gEl:\"⪌\",gel:\"⋛\",geq:\"≥\",geqq:\"≧\",geqslant:\"⩾\",ges:\"⩾\",gescc:\"⪩\",gesdot:\"⪀\",gesdoto:\"⪂\",gesdotol:\"⪄\",gesl:\"⋛︀\",gesles:\"⪔\",Gfr:\"𝔊\",gfr:\"𝔤\",Gg:\"⋙\",gg:\"≫\",ggg:\"⋙\",gimel:\"ℷ\",GJcy:\"Ѓ\",gjcy:\"ѓ\",gl:\"≷\",gla:\"⪥\",glE:\"⪒\",glj:\"⪤\",gnap:\"⪊\",gnapprox:\"⪊\",gnE:\"≩\",gne:\"⪈\",gneq:\"⪈\",gneqq:\"≩\",gnsim:\"⋧\",Gopf:\"𝔾\",gopf:\"𝕘\",grave:\"`\",GreaterEqual:\"≥\",GreaterEqualLess:\"⋛\",GreaterFullEqual:\"≧\",GreaterGreater:\"⪢\",GreaterLess:\"≷\",GreaterSlantEqual:\"⩾\",GreaterTilde:\"≳\",Gscr:\"𝒢\",gscr:\"ℊ\",gsim:\"≳\",gsime:\"⪎\",gsiml:\"⪐\",GT:\">\",Gt:\"≫\",gt:\">\",gtcc:\"⪧\",gtcir:\"⩺\",gtdot:\"⋗\",gtlPar:\"⦕\",gtquest:\"⩼\",gtrapprox:\"⪆\",gtrarr:\"⥸\",gtrdot:\"⋗\",gtreqless:\"⋛\",gtreqqless:\"⪌\",gtrless:\"≷\",gtrsim:\"≳\",gvertneqq:\"≩︀\",gvnE:\"≩︀\",Hacek:\"ˇ\",hairsp:\" \",half:\"½\",hamilt:\"ℋ\",HARDcy:\"Ъ\",hardcy:\"ъ\",hArr:\"⇔\",harr:\"↔\",harrcir:\"⥈\",harrw:\"↭\",Hat:\"^\",hbar:\"ℏ\",Hcirc:\"Ĥ\",hcirc:\"ĥ\",hearts:\"♥\",heartsuit:\"♥\",hellip:\"…\",hercon:\"⊹\",Hfr:\"ℌ\",hfr:\"𝔥\",HilbertSpace:\"ℋ\",hksearow:\"⤥\",hkswarow:\"⤦\",hoarr:\"⇿\",homtht:\"∻\",hookleftarrow:\"↩\",hookrightarrow:\"↪\",Hopf:\"ℍ\",hopf:\"𝕙\",horbar:\"―\",HorizontalLine:\"─\",Hscr:\"ℋ\",hscr:\"𝒽\",hslash:\"ℏ\",Hstrok:\"Ħ\",hstrok:\"ħ\",HumpDownHump:\"≎\",HumpEqual:\"≏\",hybull:\"⁃\",hyphen:\"‐\",Iacute:\"Í\",iacute:\"í\",ic:\"\",Icirc:\"Î\",icirc:\"î\",Icy:\"И\",icy:\"и\",Idot:\"İ\",IEcy:\"Е\",iecy:\"е\",iexcl:\"¡\",iff:\"⇔\",Ifr:\"ℑ\",ifr:\"𝔦\",Igrave:\"Ì\",igrave:\"ì\",ii:\"ⅈ\",iiiint:\"⨌\",iiint:\"∭\",iinfin:\"⧜\",iiota:\"℩\",IJlig:\"IJ\",ijlig:\"ij\",Im:\"ℑ\",Imacr:\"Ī\",imacr:\"ī\",image:\"ℑ\",ImaginaryI:\"ⅈ\",imagline:\"ℐ\",imagpart:\"ℑ\",imath:\"ı\",imof:\"⊷\",imped:\"Ƶ\",Implies:\"⇒\",in:\"∈\",incare:\"℅\",infin:\"∞\",infintie:\"⧝\",inodot:\"ı\",Int:\"∬\",int:\"∫\",intcal:\"⊺\",integers:\"ℤ\",Integral:\"∫\",intercal:\"⊺\",Intersection:\"⋂\",intlarhk:\"⨗\",intprod:\"⨼\",InvisibleComma:\"\",InvisibleTimes:\"\",IOcy:\"Ё\",iocy:\"ё\",Iogon:\"Į\",iogon:\"į\",Iopf:\"𝕀\",iopf:\"𝕚\",Iota:\"Ι\",iota:\"ι\",iprod:\"⨼\",iquest:\"¿\",Iscr:\"ℐ\",iscr:\"𝒾\",isin:\"∈\",isindot:\"⋵\",isinE:\"⋹\",isins:\"⋴\",isinsv:\"⋳\",isinv:\"∈\",it:\"\",Itilde:\"Ĩ\",itilde:\"ĩ\",Iukcy:\"І\",iukcy:\"і\",Iuml:\"Ï\",iuml:\"ï\",Jcirc:\"Ĵ\",jcirc:\"ĵ\",Jcy:\"Й\",jcy:\"й\",Jfr:\"𝔍\",jfr:\"𝔧\",jmath:\"ȷ\",Jopf:\"𝕁\",jopf:\"𝕛\",Jscr:\"𝒥\",jscr:\"𝒿\",Jsercy:\"Ј\",jsercy:\"ј\",Jukcy:\"Є\",jukcy:\"є\",Kappa:\"Κ\",kappa:\"κ\",kappav:\"ϰ\",Kcedil:\"Ķ\",kcedil:\"ķ\",Kcy:\"К\",kcy:\"к\",Kfr:\"𝔎\",kfr:\"𝔨\",kgreen:\"ĸ\",KHcy:\"Х\",khcy:\"х\",KJcy:\"Ќ\",kjcy:\"ќ\",Kopf:\"𝕂\",kopf:\"𝕜\",Kscr:\"𝒦\",kscr:\"𝓀\",lAarr:\"⇚\",Lacute:\"Ĺ\",lacute:\"ĺ\",laemptyv:\"⦴\",lagran:\"ℒ\",Lambda:\"Λ\",lambda:\"λ\",Lang:\"⟪\",lang:\"⟨\",langd:\"⦑\",langle:\"⟨\",lap:\"⪅\",Laplacetrf:\"ℒ\",laquo:\"«\",Larr:\"↞\",lArr:\"⇐\",larr:\"←\",larrb:\"⇤\",larrbfs:\"⤟\",larrfs:\"⤝\",larrhk:\"↩\",larrlp:\"↫\",larrpl:\"⤹\",larrsim:\"⥳\",larrtl:\"↢\",lat:\"⪫\",lAtail:\"⤛\",latail:\"⤙\",late:\"⪭\",lates:\"⪭︀\",lBarr:\"⤎\",lbarr:\"⤌\",lbbrk:\"❲\",lbrace:\"{\",lbrack:\"[\",lbrke:\"⦋\",lbrksld:\"⦏\",lbrkslu:\"⦍\",Lcaron:\"Ľ\",lcaron:\"ľ\",Lcedil:\"Ļ\",lcedil:\"ļ\",lceil:\"⌈\",lcub:\"{\",Lcy:\"Л\",lcy:\"л\",ldca:\"⤶\",ldquo:\"“\",ldquor:\"„\",ldrdhar:\"⥧\",ldrushar:\"⥋\",ldsh:\"↲\",lE:\"≦\",le:\"≤\",LeftAngleBracket:\"⟨\",LeftArrow:\"←\",Leftarrow:\"⇐\",leftarrow:\"←\",LeftArrowBar:\"⇤\",LeftArrowRightArrow:\"⇆\",leftarrowtail:\"↢\",LeftCeiling:\"⌈\",LeftDoubleBracket:\"⟦\",LeftDownTeeVector:\"⥡\",LeftDownVector:\"⇃\",LeftDownVectorBar:\"⥙\",LeftFloor:\"⌊\",leftharpoondown:\"↽\",leftharpoonup:\"↼\",leftleftarrows:\"⇇\",LeftRightArrow:\"↔\",Leftrightarrow:\"⇔\",leftrightarrow:\"↔\",leftrightarrows:\"⇆\",leftrightharpoons:\"⇋\",leftrightsquigarrow:\"↭\",LeftRightVector:\"⥎\",LeftTee:\"⊣\",LeftTeeArrow:\"↤\",LeftTeeVector:\"⥚\",leftthreetimes:\"⋋\",LeftTriangle:\"⊲\",LeftTriangleBar:\"⧏\",LeftTriangleEqual:\"⊴\",LeftUpDownVector:\"⥑\",LeftUpTeeVector:\"⥠\",LeftUpVector:\"↿\",LeftUpVectorBar:\"⥘\",LeftVector:\"↼\",LeftVectorBar:\"⥒\",lEg:\"⪋\",leg:\"⋚\",leq:\"≤\",leqq:\"≦\",leqslant:\"⩽\",les:\"⩽\",lescc:\"⪨\",lesdot:\"⩿\",lesdoto:\"⪁\",lesdotor:\"⪃\",lesg:\"⋚︀\",lesges:\"⪓\",lessapprox:\"⪅\",lessdot:\"⋖\",lesseqgtr:\"⋚\",lesseqqgtr:\"⪋\",LessEqualGreater:\"⋚\",LessFullEqual:\"≦\",LessGreater:\"≶\",lessgtr:\"≶\",LessLess:\"⪡\",lesssim:\"≲\",LessSlantEqual:\"⩽\",LessTilde:\"≲\",lfisht:\"⥼\",lfloor:\"⌊\",Lfr:\"𝔏\",lfr:\"𝔩\",lg:\"≶\",lgE:\"⪑\",lHar:\"⥢\",lhard:\"↽\",lharu:\"↼\",lharul:\"⥪\",lhblk:\"▄\",LJcy:\"Љ\",ljcy:\"љ\",Ll:\"⋘\",ll:\"≪\",llarr:\"⇇\",llcorner:\"⌞\",Lleftarrow:\"⇚\",llhard:\"⥫\",lltri:\"◺\",Lmidot:\"Ŀ\",lmidot:\"ŀ\",lmoust:\"⎰\",lmoustache:\"⎰\",lnap:\"⪉\",lnapprox:\"⪉\",lnE:\"≨\",lne:\"⪇\",lneq:\"⪇\",lneqq:\"≨\",lnsim:\"⋦\",loang:\"⟬\",loarr:\"⇽\",lobrk:\"⟦\",LongLeftArrow:\"⟵\",Longleftarrow:\"⟸\",longleftarrow:\"⟵\",LongLeftRightArrow:\"⟷\",Longleftrightarrow:\"⟺\",longleftrightarrow:\"⟷\",longmapsto:\"⟼\",LongRightArrow:\"⟶\",Longrightarrow:\"⟹\",longrightarrow:\"⟶\",looparrowleft:\"↫\",looparrowright:\"↬\",lopar:\"⦅\",Lopf:\"𝕃\",lopf:\"𝕝\",loplus:\"⨭\",lotimes:\"⨴\",lowast:\"∗\",lowbar:\"_\",LowerLeftArrow:\"↙\",LowerRightArrow:\"↘\",loz:\"◊\",lozenge:\"◊\",lozf:\"⧫\",lpar:\"(\",lparlt:\"⦓\",lrarr:\"⇆\",lrcorner:\"⌟\",lrhar:\"⇋\",lrhard:\"⥭\",lrm:\"\",lrtri:\"⊿\",lsaquo:\"‹\",Lscr:\"ℒ\",lscr:\"𝓁\",Lsh:\"↰\",lsh:\"↰\",lsim:\"≲\",lsime:\"⪍\",lsimg:\"⪏\",lsqb:\"[\",lsquo:\"‘\",lsquor:\"‚\",Lstrok:\"Ł\",lstrok:\"ł\",LT:\"<\",Lt:\"≪\",lt:\"<\",ltcc:\"⪦\",ltcir:\"⩹\",ltdot:\"⋖\",lthree:\"⋋\",ltimes:\"⋉\",ltlarr:\"⥶\",ltquest:\"⩻\",ltri:\"◃\",ltrie:\"⊴\",ltrif:\"◂\",ltrPar:\"⦖\",lurdshar:\"⥊\",luruhar:\"⥦\",lvertneqq:\"≨︀\",lvnE:\"≨︀\",macr:\"¯\",male:\"♂\",malt:\"✠\",maltese:\"✠\",Map:\"⤅\",map:\"↦\",mapsto:\"↦\",mapstodown:\"↧\",mapstoleft:\"↤\",mapstoup:\"↥\",marker:\"▮\",mcomma:\"⨩\",Mcy:\"М\",mcy:\"м\",mdash:\"—\",mDDot:\"∺\",measuredangle:\"∡\",MediumSpace:\" \",Mellintrf:\"ℳ\",Mfr:\"𝔐\",mfr:\"𝔪\",mho:\"℧\",micro:\"µ\",mid:\"∣\",midast:\"*\",midcir:\"⫰\",middot:\"·\",minus:\"−\",minusb:\"⊟\",minusd:\"∸\",minusdu:\"⨪\",MinusPlus:\"∓\",mlcp:\"⫛\",mldr:\"…\",mnplus:\"∓\",models:\"⊧\",Mopf:\"𝕄\",mopf:\"𝕞\",mp:\"∓\",Mscr:\"ℳ\",mscr:\"𝓂\",mstpos:\"∾\",Mu:\"Μ\",mu:\"μ\",multimap:\"⊸\",mumap:\"⊸\",nabla:\"∇\",Nacute:\"Ń\",nacute:\"ń\",nang:\"∠⃒\",nap:\"≉\",napE:\"⩰̸\",napid:\"≋̸\",napos:\"ʼn\",napprox:\"≉\",natur:\"♮\",natural:\"♮\",naturals:\"ℕ\",nbsp:\" \",nbump:\"≎̸\",nbumpe:\"≏̸\",ncap:\"⩃\",Ncaron:\"Ň\",ncaron:\"ň\",Ncedil:\"Ņ\",ncedil:\"ņ\",ncong:\"≇\",ncongdot:\"⩭̸\",ncup:\"⩂\",Ncy:\"Н\",ncy:\"н\",ndash:\"–\",ne:\"≠\",nearhk:\"⤤\",neArr:\"⇗\",nearr:\"↗\",nearrow:\"↗\",nedot:\"≐̸\",NegativeMediumSpace:\"\",NegativeThickSpace:\"\",NegativeThinSpace:\"\",NegativeVeryThinSpace:\"\",nequiv:\"≢\",nesear:\"⤨\",nesim:\"≂̸\",NestedGreaterGreater:\"≫\",NestedLessLess:\"≪\",NewLine:\"\\n\",nexist:\"∄\",nexists:\"∄\",Nfr:\"𝔑\",nfr:\"𝔫\",ngE:\"≧̸\",nge:\"≱\",ngeq:\"≱\",ngeqq:\"≧̸\",ngeqslant:\"⩾̸\",nges:\"⩾̸\",nGg:\"⋙̸\",ngsim:\"≵\",nGt:\"≫⃒\",ngt:\"≯\",ngtr:\"≯\",nGtv:\"≫̸\",nhArr:\"⇎\",nharr:\"↮\",nhpar:\"⫲\",ni:\"∋\",nis:\"⋼\",nisd:\"⋺\",niv:\"∋\",NJcy:\"Њ\",njcy:\"њ\",nlArr:\"⇍\",nlarr:\"↚\",nldr:\"‥\",nlE:\"≦̸\",nle:\"≰\",nLeftarrow:\"⇍\",nleftarrow:\"↚\",nLeftrightarrow:\"⇎\",nleftrightarrow:\"↮\",nleq:\"≰\",nleqq:\"≦̸\",nleqslant:\"⩽̸\",nles:\"⩽̸\",nless:\"≮\",nLl:\"⋘̸\",nlsim:\"≴\",nLt:\"≪⃒\",nlt:\"≮\",nltri:\"⋪\",nltrie:\"⋬\",nLtv:\"≪̸\",nmid:\"∤\",NoBreak:\"\",NonBreakingSpace:\" \",Nopf:\"ℕ\",nopf:\"𝕟\",Not:\"⫬\",not:\"¬\",NotCongruent:\"≢\",NotCupCap:\"≭\",NotDoubleVerticalBar:\"∦\",NotElement:\"∉\",NotEqual:\"≠\",NotEqualTilde:\"≂̸\",NotExists:\"∄\",NotGreater:\"≯\",NotGreaterEqual:\"≱\",NotGreaterFullEqual:\"≧̸\",NotGreaterGreater:\"≫̸\",NotGreaterLess:\"≹\",NotGreaterSlantEqual:\"⩾̸\",NotGreaterTilde:\"≵\",NotHumpDownHump:\"≎̸\",NotHumpEqual:\"≏̸\",notin:\"∉\",notindot:\"⋵̸\",notinE:\"⋹̸\",notinva:\"∉\",notinvb:\"⋷\",notinvc:\"⋶\",NotLeftTriangle:\"⋪\",NotLeftTriangleBar:\"⧏̸\",NotLeftTriangleEqual:\"⋬\",NotLess:\"≮\",NotLessEqual:\"≰\",NotLessGreater:\"≸\",NotLessLess:\"≪̸\",NotLessSlantEqual:\"⩽̸\",NotLessTilde:\"≴\",NotNestedGreaterGreater:\"⪢̸\",NotNestedLessLess:\"⪡̸\",notni:\"∌\",notniva:\"∌\",notnivb:\"⋾\",notnivc:\"⋽\",NotPrecedes:\"⊀\",NotPrecedesEqual:\"⪯̸\",NotPrecedesSlantEqual:\"⋠\",NotReverseElement:\"∌\",NotRightTriangle:\"⋫\",NotRightTriangleBar:\"⧐̸\",NotRightTriangleEqual:\"⋭\",NotSquareSubset:\"⊏̸\",NotSquareSubsetEqual:\"⋢\",NotSquareSuperset:\"⊐̸\",NotSquareSupersetEqual:\"⋣\",NotSubset:\"⊂⃒\",NotSubsetEqual:\"⊈\",NotSucceeds:\"⊁\",NotSucceedsEqual:\"⪰̸\",NotSucceedsSlantEqual:\"⋡\",NotSucceedsTilde:\"≿̸\",NotSuperset:\"⊃⃒\",NotSupersetEqual:\"⊉\",NotTilde:\"≁\",NotTildeEqual:\"≄\",NotTildeFullEqual:\"≇\",NotTildeTilde:\"≉\",NotVerticalBar:\"∤\",npar:\"∦\",nparallel:\"∦\",nparsl:\"⫽⃥\",npart:\"∂̸\",npolint:\"⨔\",npr:\"⊀\",nprcue:\"⋠\",npre:\"⪯̸\",nprec:\"⊀\",npreceq:\"⪯̸\",nrArr:\"⇏\",nrarr:\"↛\",nrarrc:\"⤳̸\",nrarrw:\"↝̸\",nRightarrow:\"⇏\",nrightarrow:\"↛\",nrtri:\"⋫\",nrtrie:\"⋭\",nsc:\"⊁\",nsccue:\"⋡\",nsce:\"⪰̸\",Nscr:\"𝒩\",nscr:\"𝓃\",nshortmid:\"∤\",nshortparallel:\"∦\",nsim:\"≁\",nsime:\"≄\",nsimeq:\"≄\",nsmid:\"∤\",nspar:\"∦\",nsqsube:\"⋢\",nsqsupe:\"⋣\",nsub:\"⊄\",nsubE:\"⫅̸\",nsube:\"⊈\",nsubset:\"⊂⃒\",nsubseteq:\"⊈\",nsubseteqq:\"⫅̸\",nsucc:\"⊁\",nsucceq:\"⪰̸\",nsup:\"⊅\",nsupE:\"⫆̸\",nsupe:\"⊉\",nsupset:\"⊃⃒\",nsupseteq:\"⊉\",nsupseteqq:\"⫆̸\",ntgl:\"≹\",Ntilde:\"Ñ\",ntilde:\"ñ\",ntlg:\"≸\",ntriangleleft:\"⋪\",ntrianglelefteq:\"⋬\",ntriangleright:\"⋫\",ntrianglerighteq:\"⋭\",Nu:\"Ν\",nu:\"ν\",num:\"#\",numero:\"№\",numsp:\" \",nvap:\"≍⃒\",nVDash:\"⊯\",nVdash:\"⊮\",nvDash:\"⊭\",nvdash:\"⊬\",nvge:\"≥⃒\",nvgt:\">⃒\",nvHarr:\"⤄\",nvinfin:\"⧞\",nvlArr:\"⤂\",nvle:\"≤⃒\",nvlt:\"<⃒\",nvltrie:\"⊴⃒\",nvrArr:\"⤃\",nvrtrie:\"⊵⃒\",nvsim:\"∼⃒\",nwarhk:\"⤣\",nwArr:\"⇖\",nwarr:\"↖\",nwarrow:\"↖\",nwnear:\"⤧\",Oacute:\"Ó\",oacute:\"ó\",oast:\"⊛\",ocir:\"⊚\",Ocirc:\"Ô\",ocirc:\"ô\",Ocy:\"О\",ocy:\"о\",odash:\"⊝\",Odblac:\"Ő\",odblac:\"ő\",odiv:\"⨸\",odot:\"⊙\",odsold:\"⦼\",OElig:\"Œ\",oelig:\"œ\",ofcir:\"⦿\",Ofr:\"𝔒\",ofr:\"𝔬\",ogon:\"˛\",Ograve:\"Ò\",ograve:\"ò\",ogt:\"⧁\",ohbar:\"⦵\",ohm:\"Ω\",oint:\"∮\",olarr:\"↺\",olcir:\"⦾\",olcross:\"⦻\",oline:\"‾\",olt:\"⧀\",Omacr:\"Ō\",omacr:\"ō\",Omega:\"Ω\",omega:\"ω\",Omicron:\"Ο\",omicron:\"ο\",omid:\"⦶\",ominus:\"⊖\",Oopf:\"𝕆\",oopf:\"𝕠\",opar:\"⦷\",OpenCurlyDoubleQuote:\"“\",OpenCurlyQuote:\"‘\",operp:\"⦹\",oplus:\"⊕\",Or:\"⩔\",or:\"∨\",orarr:\"↻\",ord:\"⩝\",order:\"ℴ\",orderof:\"ℴ\",ordf:\"ª\",ordm:\"º\",origof:\"⊶\",oror:\"⩖\",orslope:\"⩗\",orv:\"⩛\",oS:\"Ⓢ\",Oscr:\"𝒪\",oscr:\"ℴ\",Oslash:\"Ø\",oslash:\"ø\",osol:\"⊘\",Otilde:\"Õ\",otilde:\"õ\",Otimes:\"⨷\",otimes:\"⊗\",otimesas:\"⨶\",Ouml:\"Ö\",ouml:\"ö\",ovbar:\"⌽\",OverBar:\"‾\",OverBrace:\"⏞\",OverBracket:\"⎴\",OverParenthesis:\"⏜\",par:\"∥\",para:\"¶\",parallel:\"∥\",parsim:\"⫳\",parsl:\"⫽\",part:\"∂\",PartialD:\"∂\",Pcy:\"П\",pcy:\"п\",percnt:\"%\",period:\".\",permil:\"‰\",perp:\"⊥\",pertenk:\"‱\",Pfr:\"𝔓\",pfr:\"𝔭\",Phi:\"Φ\",phi:\"φ\",phiv:\"ϕ\",phmmat:\"ℳ\",phone:\"☎\",Pi:\"Π\",pi:\"π\",pitchfork:\"⋔\",piv:\"ϖ\",planck:\"ℏ\",planckh:\"ℎ\",plankv:\"ℏ\",plus:\"+\",plusacir:\"⨣\",plusb:\"⊞\",pluscir:\"⨢\",plusdo:\"∔\",plusdu:\"⨥\",pluse:\"⩲\",PlusMinus:\"±\",plusmn:\"±\",plussim:\"⨦\",plustwo:\"⨧\",pm:\"±\",Poincareplane:\"ℌ\",pointint:\"⨕\",Popf:\"ℙ\",popf:\"𝕡\",pound:\"£\",Pr:\"⪻\",pr:\"≺\",prap:\"⪷\",prcue:\"≼\",prE:\"⪳\",pre:\"⪯\",prec:\"≺\",precapprox:\"⪷\",preccurlyeq:\"≼\",Precedes:\"≺\",PrecedesEqual:\"⪯\",PrecedesSlantEqual:\"≼\",PrecedesTilde:\"≾\",preceq:\"⪯\",precnapprox:\"⪹\",precneqq:\"⪵\",precnsim:\"⋨\",precsim:\"≾\",Prime:\"″\",prime:\"′\",primes:\"ℙ\",prnap:\"⪹\",prnE:\"⪵\",prnsim:\"⋨\",prod:\"∏\",Product:\"∏\",profalar:\"⌮\",profline:\"⌒\",profsurf:\"⌓\",prop:\"∝\",Proportion:\"∷\",Proportional:\"∝\",propto:\"∝\",prsim:\"≾\",prurel:\"⊰\",Pscr:\"𝒫\",pscr:\"𝓅\",Psi:\"Ψ\",psi:\"ψ\",puncsp:\" \",Qfr:\"𝔔\",qfr:\"𝔮\",qint:\"⨌\",Qopf:\"ℚ\",qopf:\"𝕢\",qprime:\"⁗\",Qscr:\"𝒬\",qscr:\"𝓆\",quaternions:\"ℍ\",quatint:\"⨖\",quest:\"?\",questeq:\"≟\",QUOT:'\"',quot:'\"',rAarr:\"⇛\",race:\"∽̱\",Racute:\"Ŕ\",racute:\"ŕ\",radic:\"√\",raemptyv:\"⦳\",Rang:\"⟫\",rang:\"⟩\",rangd:\"⦒\",range:\"⦥\",rangle:\"⟩\",raquo:\"»\",Rarr:\"↠\",rArr:\"⇒\",rarr:\"→\",rarrap:\"⥵\",rarrb:\"⇥\",rarrbfs:\"⤠\",rarrc:\"⤳\",rarrfs:\"⤞\",rarrhk:\"↪\",rarrlp:\"↬\",rarrpl:\"⥅\",rarrsim:\"⥴\",Rarrtl:\"⤖\",rarrtl:\"↣\",rarrw:\"↝\",rAtail:\"⤜\",ratail:\"⤚\",ratio:\"∶\",rationals:\"ℚ\",RBarr:\"⤐\",rBarr:\"⤏\",rbarr:\"⤍\",rbbrk:\"❳\",rbrace:\"}\",rbrack:\"]\",rbrke:\"⦌\",rbrksld:\"⦎\",rbrkslu:\"⦐\",Rcaron:\"Ř\",rcaron:\"ř\",Rcedil:\"Ŗ\",rcedil:\"ŗ\",rceil:\"⌉\",rcub:\"}\",Rcy:\"Р\",rcy:\"р\",rdca:\"⤷\",rdldhar:\"⥩\",rdquo:\"”\",rdquor:\"”\",rdsh:\"↳\",Re:\"ℜ\",real:\"ℜ\",realine:\"ℛ\",realpart:\"ℜ\",reals:\"ℝ\",rect:\"▭\",REG:\"®\",reg:\"®\",ReverseElement:\"∋\",ReverseEquilibrium:\"⇋\",ReverseUpEquilibrium:\"⥯\",rfisht:\"⥽\",rfloor:\"⌋\",Rfr:\"ℜ\",rfr:\"𝔯\",rHar:\"⥤\",rhard:\"⇁\",rharu:\"⇀\",rharul:\"⥬\",Rho:\"Ρ\",rho:\"ρ\",rhov:\"ϱ\",RightAngleBracket:\"⟩\",RightArrow:\"→\",Rightarrow:\"⇒\",rightarrow:\"→\",RightArrowBar:\"⇥\",RightArrowLeftArrow:\"⇄\",rightarrowtail:\"↣\",RightCeiling:\"⌉\",RightDoubleBracket:\"⟧\",RightDownTeeVector:\"⥝\",RightDownVector:\"⇂\",RightDownVectorBar:\"⥕\",RightFloor:\"⌋\",rightharpoondown:\"⇁\",rightharpoonup:\"⇀\",rightleftarrows:\"⇄\",rightleftharpoons:\"⇌\",rightrightarrows:\"⇉\",rightsquigarrow:\"↝\",RightTee:\"⊢\",RightTeeArrow:\"↦\",RightTeeVector:\"⥛\",rightthreetimes:\"⋌\",RightTriangle:\"⊳\",RightTriangleBar:\"⧐\",RightTriangleEqual:\"⊵\",RightUpDownVector:\"⥏\",RightUpTeeVector:\"⥜\",RightUpVector:\"↾\",RightUpVectorBar:\"⥔\",RightVector:\"⇀\",RightVectorBar:\"⥓\",ring:\"˚\",risingdotseq:\"≓\",rlarr:\"⇄\",rlhar:\"⇌\",rlm:\"\",rmoust:\"⎱\",rmoustache:\"⎱\",rnmid:\"⫮\",roang:\"⟭\",roarr:\"⇾\",robrk:\"⟧\",ropar:\"⦆\",Ropf:\"ℝ\",ropf:\"𝕣\",roplus:\"⨮\",rotimes:\"⨵\",RoundImplies:\"⥰\",rpar:\")\",rpargt:\"⦔\",rppolint:\"⨒\",rrarr:\"⇉\",Rrightarrow:\"⇛\",rsaquo:\"›\",Rscr:\"ℛ\",rscr:\"𝓇\",Rsh:\"↱\",rsh:\"↱\",rsqb:\"]\",rsquo:\"’\",rsquor:\"’\",rthree:\"⋌\",rtimes:\"⋊\",rtri:\"▹\",rtrie:\"⊵\",rtrif:\"▸\",rtriltri:\"⧎\",RuleDelayed:\"⧴\",ruluhar:\"⥨\",rx:\"℞\",Sacute:\"Ś\",sacute:\"ś\",sbquo:\"‚\",Sc:\"⪼\",sc:\"≻\",scap:\"⪸\",Scaron:\"Š\",scaron:\"š\",sccue:\"≽\",scE:\"⪴\",sce:\"⪰\",Scedil:\"Ş\",scedil:\"ş\",Scirc:\"Ŝ\",scirc:\"ŝ\",scnap:\"⪺\",scnE:\"⪶\",scnsim:\"⋩\",scpolint:\"⨓\",scsim:\"≿\",Scy:\"С\",scy:\"с\",sdot:\"⋅\",sdotb:\"⊡\",sdote:\"⩦\",searhk:\"⤥\",seArr:\"⇘\",searr:\"↘\",searrow:\"↘\",sect:\"§\",semi:\";\",seswar:\"⤩\",setminus:\"∖\",setmn:\"∖\",sext:\"✶\",Sfr:\"𝔖\",sfr:\"𝔰\",sfrown:\"⌢\",sharp:\"♯\",SHCHcy:\"Щ\",shchcy:\"щ\",SHcy:\"Ш\",shcy:\"ш\",ShortDownArrow:\"↓\",ShortLeftArrow:\"←\",shortmid:\"∣\",shortparallel:\"∥\",ShortRightArrow:\"→\",ShortUpArrow:\"↑\",shy:\"\",Sigma:\"Σ\",sigma:\"σ\",sigmaf:\"ς\",sigmav:\"ς\",sim:\"∼\",simdot:\"⩪\",sime:\"≃\",simeq:\"≃\",simg:\"⪞\",simgE:\"⪠\",siml:\"⪝\",simlE:\"⪟\",simne:\"≆\",simplus:\"⨤\",simrarr:\"⥲\",slarr:\"←\",SmallCircle:\"∘\",smallsetminus:\"∖\",smashp:\"⨳\",smeparsl:\"⧤\",smid:\"∣\",smile:\"⌣\",smt:\"⪪\",smte:\"⪬\",smtes:\"⪬︀\",SOFTcy:\"Ь\",softcy:\"ь\",sol:\"/\",solb:\"⧄\",solbar:\"⌿\",Sopf:\"𝕊\",sopf:\"𝕤\",spades:\"♠\",spadesuit:\"♠\",spar:\"∥\",sqcap:\"⊓\",sqcaps:\"⊓︀\",sqcup:\"⊔\",sqcups:\"⊔︀\",Sqrt:\"√\",sqsub:\"⊏\",sqsube:\"⊑\",sqsubset:\"⊏\",sqsubseteq:\"⊑\",sqsup:\"⊐\",sqsupe:\"⊒\",sqsupset:\"⊐\",sqsupseteq:\"⊒\",squ:\"□\",Square:\"□\",square:\"□\",SquareIntersection:\"⊓\",SquareSubset:\"⊏\",SquareSubsetEqual:\"⊑\",SquareSuperset:\"⊐\",SquareSupersetEqual:\"⊒\",SquareUnion:\"⊔\",squarf:\"▪\",squf:\"▪\",srarr:\"→\",Sscr:\"𝒮\",sscr:\"𝓈\",ssetmn:\"∖\",ssmile:\"⌣\",sstarf:\"⋆\",Star:\"⋆\",star:\"☆\",starf:\"★\",straightepsilon:\"ϵ\",straightphi:\"ϕ\",strns:\"¯\",Sub:\"⋐\",sub:\"⊂\",subdot:\"⪽\",subE:\"⫅\",sube:\"⊆\",subedot:\"⫃\",submult:\"⫁\",subnE:\"⫋\",subne:\"⊊\",subplus:\"⪿\",subrarr:\"⥹\",Subset:\"⋐\",subset:\"⊂\",subseteq:\"⊆\",subseteqq:\"⫅\",SubsetEqual:\"⊆\",subsetneq:\"⊊\",subsetneqq:\"⫋\",subsim:\"⫇\",subsub:\"⫕\",subsup:\"⫓\",succ:\"≻\",succapprox:\"⪸\",succcurlyeq:\"≽\",Succeeds:\"≻\",SucceedsEqual:\"⪰\",SucceedsSlantEqual:\"≽\",SucceedsTilde:\"≿\",succeq:\"⪰\",succnapprox:\"⪺\",succneqq:\"⪶\",succnsim:\"⋩\",succsim:\"≿\",SuchThat:\"∋\",Sum:\"∑\",sum:\"∑\",sung:\"♪\",Sup:\"⋑\",sup:\"⊃\",sup1:\"¹\",sup2:\"²\",sup3:\"³\",supdot:\"⪾\",supdsub:\"⫘\",supE:\"⫆\",supe:\"⊇\",supedot:\"⫄\",Superset:\"⊃\",SupersetEqual:\"⊇\",suphsol:\"⟉\",suphsub:\"⫗\",suplarr:\"⥻\",supmult:\"⫂\",supnE:\"⫌\",supne:\"⊋\",supplus:\"⫀\",Supset:\"⋑\",supset:\"⊃\",supseteq:\"⊇\",supseteqq:\"⫆\",supsetneq:\"⊋\",supsetneqq:\"⫌\",supsim:\"⫈\",supsub:\"⫔\",supsup:\"⫖\",swarhk:\"⤦\",swArr:\"⇙\",swarr:\"↙\",swarrow:\"↙\",swnwar:\"⤪\",szlig:\"ß\",Tab:\"\\t\",target:\"⌖\",Tau:\"Τ\",tau:\"τ\",tbrk:\"⎴\",Tcaron:\"Ť\",tcaron:\"ť\",Tcedil:\"Ţ\",tcedil:\"ţ\",Tcy:\"Т\",tcy:\"т\",tdot:\"⃛\",telrec:\"⌕\",Tfr:\"𝔗\",tfr:\"𝔱\",there4:\"∴\",Therefore:\"∴\",therefore:\"∴\",Theta:\"Θ\",theta:\"θ\",thetasym:\"ϑ\",thetav:\"ϑ\",thickapprox:\"≈\",thicksim:\"∼\",ThickSpace:\" \",thinsp:\" \",ThinSpace:\" \",thkap:\"≈\",thksim:\"∼\",THORN:\"Þ\",thorn:\"þ\",Tilde:\"∼\",tilde:\"˜\",TildeEqual:\"≃\",TildeFullEqual:\"≅\",TildeTilde:\"≈\",times:\"×\",timesb:\"⊠\",timesbar:\"⨱\",timesd:\"⨰\",tint:\"∭\",toea:\"⤨\",top:\"⊤\",topbot:\"⌶\",topcir:\"⫱\",Topf:\"𝕋\",topf:\"𝕥\",topfork:\"⫚\",tosa:\"⤩\",tprime:\"‴\",TRADE:\"™\",trade:\"™\",triangle:\"▵\",triangledown:\"▿\",triangleleft:\"◃\",trianglelefteq:\"⊴\",triangleq:\"≜\",triangleright:\"▹\",trianglerighteq:\"⊵\",tridot:\"◬\",trie:\"≜\",triminus:\"⨺\",TripleDot:\"⃛\",triplus:\"⨹\",trisb:\"⧍\",tritime:\"⨻\",trpezium:\"⏢\",Tscr:\"𝒯\",tscr:\"𝓉\",TScy:\"Ц\",tscy:\"ц\",TSHcy:\"Ћ\",tshcy:\"ћ\",Tstrok:\"Ŧ\",tstrok:\"ŧ\",twixt:\"≬\",twoheadleftarrow:\"↞\",twoheadrightarrow:\"↠\",Uacute:\"Ú\",uacute:\"ú\",Uarr:\"↟\",uArr:\"⇑\",uarr:\"↑\",Uarrocir:\"⥉\",Ubrcy:\"Ў\",ubrcy:\"ў\",Ubreve:\"Ŭ\",ubreve:\"ŭ\",Ucirc:\"Û\",ucirc:\"û\",Ucy:\"У\",ucy:\"у\",udarr:\"⇅\",Udblac:\"Ű\",udblac:\"ű\",udhar:\"⥮\",ufisht:\"⥾\",Ufr:\"𝔘\",ufr:\"𝔲\",Ugrave:\"Ù\",ugrave:\"ù\",uHar:\"⥣\",uharl:\"↿\",uharr:\"↾\",uhblk:\"▀\",ulcorn:\"⌜\",ulcorner:\"⌜\",ulcrop:\"⌏\",ultri:\"◸\",Umacr:\"Ū\",umacr:\"ū\",uml:\"¨\",UnderBar:\"_\",UnderBrace:\"⏟\",UnderBracket:\"⎵\",UnderParenthesis:\"⏝\",Union:\"⋃\",UnionPlus:\"⊎\",Uogon:\"Ų\",uogon:\"ų\",Uopf:\"𝕌\",uopf:\"𝕦\",UpArrow:\"↑\",Uparrow:\"⇑\",uparrow:\"↑\",UpArrowBar:\"⤒\",UpArrowDownArrow:\"⇅\",UpDownArrow:\"↕\",Updownarrow:\"⇕\",updownarrow:\"↕\",UpEquilibrium:\"⥮\",upharpoonleft:\"↿\",upharpoonright:\"↾\",uplus:\"⊎\",UpperLeftArrow:\"↖\",UpperRightArrow:\"↗\",Upsi:\"ϒ\",upsi:\"υ\",upsih:\"ϒ\",Upsilon:\"Υ\",upsilon:\"υ\",UpTee:\"⊥\",UpTeeArrow:\"↥\",upuparrows:\"⇈\",urcorn:\"⌝\",urcorner:\"⌝\",urcrop:\"⌎\",Uring:\"Ů\",uring:\"ů\",urtri:\"◹\",Uscr:\"𝒰\",uscr:\"𝓊\",utdot:\"⋰\",Utilde:\"Ũ\",utilde:\"ũ\",utri:\"▵\",utrif:\"▴\",uuarr:\"⇈\",Uuml:\"Ü\",uuml:\"ü\",uwangle:\"⦧\",vangrt:\"⦜\",varepsilon:\"ϵ\",varkappa:\"ϰ\",varnothing:\"∅\",varphi:\"ϕ\",varpi:\"ϖ\",varpropto:\"∝\",vArr:\"⇕\",varr:\"↕\",varrho:\"ϱ\",varsigma:\"ς\",varsubsetneq:\"⊊︀\",varsubsetneqq:\"⫋︀\",varsupsetneq:\"⊋︀\",varsupsetneqq:\"⫌︀\",vartheta:\"ϑ\",vartriangleleft:\"⊲\",vartriangleright:\"⊳\",Vbar:\"⫫\",vBar:\"⫨\",vBarv:\"⫩\",Vcy:\"В\",vcy:\"в\",VDash:\"⊫\",Vdash:\"⊩\",vDash:\"⊨\",vdash:\"⊢\",Vdashl:\"⫦\",Vee:\"⋁\",vee:\"∨\",veebar:\"⊻\",veeeq:\"≚\",vellip:\"⋮\",Verbar:\"‖\",verbar:\"|\",Vert:\"‖\",vert:\"|\",VerticalBar:\"∣\",VerticalLine:\"|\",VerticalSeparator:\"❘\",VerticalTilde:\"≀\",VeryThinSpace:\" \",Vfr:\"𝔙\",vfr:\"𝔳\",vltri:\"⊲\",vnsub:\"⊂⃒\",vnsup:\"⊃⃒\",Vopf:\"𝕍\",vopf:\"𝕧\",vprop:\"∝\",vrtri:\"⊳\",Vscr:\"𝒱\",vscr:\"𝓋\",vsubnE:\"⫋︀\",vsubne:\"⊊︀\",vsupnE:\"⫌︀\",vsupne:\"⊋︀\",Vvdash:\"⊪\",vzigzag:\"⦚\",Wcirc:\"Ŵ\",wcirc:\"ŵ\",wedbar:\"⩟\",Wedge:\"⋀\",wedge:\"∧\",wedgeq:\"≙\",weierp:\"℘\",Wfr:\"𝔚\",wfr:\"𝔴\",Wopf:\"𝕎\",wopf:\"𝕨\",wp:\"℘\",wr:\"≀\",wreath:\"≀\",Wscr:\"𝒲\",wscr:\"𝓌\",xcap:\"⋂\",xcirc:\"◯\",xcup:\"⋃\",xdtri:\"▽\",Xfr:\"𝔛\",xfr:\"𝔵\",xhArr:\"⟺\",xharr:\"⟷\",Xi:\"Ξ\",xi:\"ξ\",xlArr:\"⟸\",xlarr:\"⟵\",xmap:\"⟼\",xnis:\"⋻\",xodot:\"⨀\",Xopf:\"𝕏\",xopf:\"𝕩\",xoplus:\"⨁\",xotime:\"⨂\",xrArr:\"⟹\",xrarr:\"⟶\",Xscr:\"𝒳\",xscr:\"𝓍\",xsqcup:\"⨆\",xuplus:\"⨄\",xutri:\"△\",xvee:\"⋁\",xwedge:\"⋀\",Yacute:\"Ý\",yacute:\"ý\",YAcy:\"Я\",yacy:\"я\",Ycirc:\"Ŷ\",ycirc:\"ŷ\",Ycy:\"Ы\",ycy:\"ы\",yen:\"¥\",Yfr:\"𝔜\",yfr:\"𝔶\",YIcy:\"Ї\",yicy:\"ї\",Yopf:\"𝕐\",yopf:\"𝕪\",Yscr:\"𝒴\",yscr:\"𝓎\",YUcy:\"Ю\",yucy:\"ю\",Yuml:\"Ÿ\",yuml:\"ÿ\",Zacute:\"Ź\",zacute:\"ź\",Zcaron:\"Ž\",zcaron:\"ž\",Zcy:\"З\",zcy:\"з\",Zdot:\"Ż\",zdot:\"ż\",zeetrf:\"ℨ\",ZeroWidthSpace:\"\",Zeta:\"Ζ\",zeta:\"ζ\",Zfr:\"ℨ\",zfr:\"𝔷\",ZHcy:\"Ж\",zhcy:\"ж\",zigrarr:\"⇝\",Zopf:\"ℤ\",zopf:\"𝕫\",Zscr:\"𝒵\",zscr:\"𝓏\",zwj:\"\",zwnj:\"\"},r=Object.prototype.hasOwnProperty;function n(e){return o=e,(n=t)&&r.call(n,o)?t[e]:e;var n,o}var o=Object.prototype.hasOwnProperty;function s(e,t){return!!e&&o.call(e,t)}function i(e){return[].slice.call(arguments,1).forEach(function(t){if(t){if(\"object\"!=typeof t)throw new TypeError(t+\"must be object\");Object.keys(t).forEach(function(r){e[r]=t[r]})}}),e}var a=/\\\\([\\\\!\"#$%&'()*+,.\\/:;<=>?@[\\]^_`{|}~-])/g;function u(e){return e.indexOf(\"\\\\\")<0?e:e.replace(a,\"$1\")}function l(e){return!(e>=55296&&e<=57343)&&(!(e>=64976&&e<=65007)&&(65535!=(65535&e)&&65534!=(65535&e)&&(!(e>=0&&e<=8)&&(11!==e&&(!(e>=14&&e<=31)&&(!(e>=127&&e<=159)&&!(e>1114111)))))))}function c(e){if(e>65535){var t=55296+((e-=65536)>>10),r=56320+(1023&e);return String.fromCharCode(t,r)}return String.fromCharCode(e)}var p=/&([a-z#][a-z0-9]{1,31});/gi,h=/^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))/i;function f(e,t){var r=0,o=n(t);return t!==o?o:35===t.charCodeAt(0)&&h.test(t)&&l(r=\"x\"===t[1].toLowerCase()?parseInt(t.slice(2),16):parseInt(t.slice(1),10))?c(r):e}function g(e){return e.indexOf(\"&\")<0?e:e.replace(p,f)}var d=/[&<>\"]/,m=/[&<>\"]/g,b={\"&\":\"&\",\"<\":\"<\",\">\":\">\",'\"':\""\"};function v(e){return b[e]}function k(e){return d.test(e)?e.replace(m,v):e}var A=Object.freeze({isString:function(e){return\"[object String]\"===function(e){return Object.prototype.toString.call(e)}(e)},has:s,assign:i,unescapeMd:u,isValidEntityCode:l,fromCodePoint:c,replaceEntities:g,escapeHtml:k}),y={};y.blockquote_open=function(){return\"<blockquote>\\n\"},y.blockquote_close=function(e,t){return\"</blockquote>\"+x(e,t)},y.code=function(e,t){return e[t].block?\"<pre><code>\"+k(e[t].content)+\"</code></pre>\"+x(e,t):\"<code>\"+k(e[t].content)+\"</code>\"},y.fence=function(e,t,r,n,o){var i,a,l=e[t],c=\"\",p=r.langPrefix;if(l.params){if(a=(i=l.params.split(/\\s+/g)).join(\" \"),s(o.rules.fence_custom,i[0]))return o.rules.fence_custom[i[0]](e,t,r,n,o);c=' class=\"'+p+k(g(u(a)))+'\"'}return\"<pre><code\"+c+\">\"+(r.highlight&&r.highlight.apply(r.highlight,[l.content].concat(i))||k(l.content))+\"</code></pre>\"+x(e,t)},y.fence_custom={},y.heading_open=function(e,t){return\"<h\"+e[t].hLevel+\">\"},y.heading_close=function(e,t){return\"</h\"+e[t].hLevel+\">\\n\"},y.hr=function(e,t,r){return(r.xhtmlOut?\"<hr />\":\"<hr>\")+x(e,t)},y.bullet_list_open=function(){return\"<ul>\\n\"},y.bullet_list_close=function(e,t){return\"</ul>\"+x(e,t)},y.list_item_open=function(){return\"<li>\"},y.list_item_close=function(){return\"</li>\\n\"},y.ordered_list_open=function(e,t){var r=e[t];return\"<ol\"+(r.order>1?' start=\"'+r.order+'\"':\"\")+\">\\n\"},y.ordered_list_close=function(e,t){return\"</ol>\"+x(e,t)},y.paragraph_open=function(e,t){return e[t].tight?\"\":\"<p>\"},y.paragraph_close=function(e,t){var r=!(e[t].tight&&t&&\"inline\"===e[t-1].type&&!e[t-1].content);return(e[t].tight?\"\":\"</p>\")+(r?x(e,t):\"\")},y.link_open=function(e,t,r){var n=e[t].title?' title=\"'+k(g(e[t].title))+'\"':\"\",o=r.linkTarget?' target=\"'+r.linkTarget+'\"':\"\";return'<a href=\"'+k(e[t].href)+'\"'+n+o+\">\"},y.link_close=function(){return\"</a>\"},y.image=function(e,t,r){var n=' src=\"'+k(e[t].src)+'\"',o=e[t].title?' title=\"'+k(g(e[t].title))+'\"':\"\";return\"<img\"+n+(' alt=\"'+(e[t].alt?k(g(u(e[t].alt))):\"\")+'\"')+o+(r.xhtmlOut?\" /\":\"\")+\">\"},y.table_open=function(){return\"<table>\\n\"},y.table_close=function(){return\"</table>\\n\"},y.thead_open=function(){return\"<thead>\\n\"},y.thead_close=function(){return\"</thead>\\n\"},y.tbody_open=function(){return\"<tbody>\\n\"},y.tbody_close=function(){return\"</tbody>\\n\"},y.tr_open=function(){return\"<tr>\"},y.tr_close=function(){return\"</tr>\\n\"},y.th_open=function(e,t){var r=e[t];return\"<th\"+(r.align?' style=\"text-align:'+r.align+'\"':\"\")+\">\"},y.th_close=function(){return\"</th>\"},y.td_open=function(e,t){var r=e[t];return\"<td\"+(r.align?' style=\"text-align:'+r.align+'\"':\"\")+\">\"},y.td_close=function(){return\"</td>\"},y.strong_open=function(){return\"<strong>\"},y.strong_close=function(){return\"</strong>\"},y.em_open=function(){return\"<em>\"},y.em_close=function(){return\"</em>\"},y.del_open=function(){return\"<del>\"},y.del_close=function(){return\"</del>\"},y.ins_open=function(){return\"<ins>\"},y.ins_close=function(){return\"</ins>\"},y.mark_open=function(){return\"<mark>\"},y.mark_close=function(){return\"</mark>\"},y.sub=function(e,t){return\"<sub>\"+k(e[t].content)+\"</sub>\"},y.sup=function(e,t){return\"<sup>\"+k(e[t].content)+\"</sup>\"},y.hardbreak=function(e,t,r){return r.xhtmlOut?\"<br />\\n\":\"<br>\\n\"},y.softbreak=function(e,t,r){return r.breaks?r.xhtmlOut?\"<br />\\n\":\"<br>\\n\":\"\\n\"},y.text=function(e,t){return k(e[t].content)},y.htmlblock=function(e,t){return e[t].content},y.htmltag=function(e,t){return e[t].content},y.abbr_open=function(e,t){return'<abbr title=\"'+k(g(e[t].title))+'\">'},y.abbr_close=function(){return\"</abbr>\"},y.footnote_ref=function(e,t){var r=Number(e[t].id+1).toString(),n=\"fnref\"+r;return e[t].subId>0&&(n+=\":\"+e[t].subId),'<sup class=\"footnote-ref\"><a href=\"#fn'+r+'\" id=\"'+n+'\">['+r+\"]</a></sup>\"},y.footnote_block_open=function(e,t,r){return(r.xhtmlOut?'<hr class=\"footnotes-sep\" />\\n':'<hr class=\"footnotes-sep\">\\n')+'<section class=\"footnotes\">\\n<ol class=\"footnotes-list\">\\n'},y.footnote_block_close=function(){return\"</ol>\\n</section>\\n\"},y.footnote_open=function(e,t){return'<li id=\"fn'+Number(e[t].id+1).toString()+'\" class=\"footnote-item\">'},y.footnote_close=function(){return\"</li>\\n\"},y.footnote_anchor=function(e,t){var r=\"fnref\"+Number(e[t].id+1).toString();return e[t].subId>0&&(r+=\":\"+e[t].subId),' <a href=\"#'+r+'\" class=\"footnote-backref\">↩</a>'},y.dl_open=function(){return\"<dl>\\n\"},y.dt_open=function(){return\"<dt>\"},y.dd_open=function(){return\"<dd>\"},y.dl_close=function(){return\"</dl>\\n\"},y.dt_close=function(){return\"</dt>\\n\"},y.dd_close=function(){return\"</dd>\\n\"};var x=y.getBreak=function(e,t){return(t=function e(t,r){return++r>=t.length-2?r:\"paragraph_open\"===t[r].type&&t[r].tight&&\"inline\"===t[r+1].type&&0===t[r+1].content.length&&\"paragraph_close\"===t[r+2].type&&t[r+2].tight?e(t,r+2):r}(e,t))<e.length&&\"list_item_close\"===e[t].type?\"\":\"\\n\"};function w(){this.rules=i({},y),this.getBreak=y.getBreak}function C(){this.__rules__=[],this.__cache__=null}function E(e,t,r,n,o){this.src=e,this.env=n,this.options=r,this.parser=t,this.tokens=o,this.pos=0,this.posMax=this.src.length,this.level=0,this.pending=\"\",this.pendingLevel=0,this.cache=[],this.isInLabel=!1,this.linkLevel=0,this.linkContent=\"\",this.labelUnmatchedScopes=0}function D(e,t){var r,n,o,s=-1,i=e.posMax,a=e.pos,u=e.isInLabel;if(e.isInLabel)return-1;if(e.labelUnmatchedScopes)return e.labelUnmatchedScopes--,-1;for(e.pos=t+1,e.isInLabel=!0,r=1;e.pos<i;){if(91===(o=e.src.charCodeAt(e.pos)))r++;else if(93===o&&0===--r){n=!0;break}e.parser.skipToken(e)}return n?(s=e.pos,e.labelUnmatchedScopes=0):e.labelUnmatchedScopes=r-1,e.pos=a,e.isInLabel=u,s}function _(e,t,r,n){var o,s,i,a,u,l;if(42!==e.charCodeAt(0))return-1;if(91!==e.charCodeAt(1))return-1;if(-1===e.indexOf(\"]:\"))return-1;if((s=D(o=new E(e,t,r,n,[]),1))<0||58!==e.charCodeAt(s+1))return-1;for(a=o.posMax,i=s+2;i<a&&10!==o.src.charCodeAt(i);i++);return u=e.slice(2,s),0===(l=e.slice(s+2,i).trim()).length?-1:(n.abbreviations||(n.abbreviations={}),void 0===n.abbreviations[\":\"+u]&&(n.abbreviations[\":\"+u]=l),i)}function B(e){var t=g(e);try{t=decodeURI(t)}catch(e){}return encodeURI(t)}function q(e,t){var r,n,o,s=t,i=e.posMax;if(60===e.src.charCodeAt(t)){for(t++;t<i;){if(10===(r=e.src.charCodeAt(t)))return!1;if(62===r)return o=B(u(e.src.slice(s+1,t))),!!e.parser.validateLink(o)&&(e.pos=t+1,e.linkContent=o,!0);92===r&&t+1<i?t+=2:t++}return!1}for(n=0;t<i&&32!==(r=e.src.charCodeAt(t))&&!(r<32||127===r);)if(92===r&&t+1<i)t+=2;else{if(40===r&&++n>1)break;if(41===r&&--n<0)break;t++}return s!==t&&(o=u(e.src.slice(s,t)),!!e.parser.validateLink(o)&&(e.linkContent=o,e.pos=t,!0))}function F(e,t){var r,n=t,o=e.posMax,s=e.src.charCodeAt(t);if(34!==s&&39!==s&&40!==s)return!1;for(t++,40===s&&(s=41);t<o;){if((r=e.src.charCodeAt(t))===s)return e.pos=t+1,e.linkContent=u(e.src.slice(n+1,t)),!0;92===r&&t+1<o?t+=2:t++}return!1}function M(e){return e.trim().replace(/\\s+/g,\" \").toUpperCase()}function S(e,t,r,n){var o,s,i,a,u,l,c,p,h;if(91!==e.charCodeAt(0))return-1;if(-1===e.indexOf(\"]:\"))return-1;if((s=D(o=new E(e,t,r,n,[]),0))<0||58!==e.charCodeAt(s+1))return-1;for(a=o.posMax,i=s+2;i<a&&(32===(u=o.src.charCodeAt(i))||10===u);i++);if(!q(o,i))return-1;for(c=o.linkContent,l=i=o.pos,i+=1;i<a&&(32===(u=o.src.charCodeAt(i))||10===u);i++);for(i<a&&l!==i&&F(o,i)?(p=o.linkContent,i=o.pos):(p=\"\",i=l);i<a&&32===o.src.charCodeAt(i);)i++;return i<a&&10!==o.src.charCodeAt(i)?-1:(h=M(e.slice(1,s)),void 0===n.references[h]&&(n.references[h]={title:p,href:c}),i)}w.prototype.renderInline=function(e,t,r){for(var n=this.rules,o=e.length,s=0,i=\"\";o--;)i+=n[e[s].type](e,s++,t,r,this);return i},w.prototype.render=function(e,t,r){for(var n=this.rules,o=e.length,s=-1,i=\"\";++s<o;)\"inline\"===e[s].type?i+=this.renderInline(e[s].children,t,r):i+=n[e[s].type](e,s,t,r,this);return i},C.prototype.__find__=function(e){for(var t=this.__rules__.length,r=-1;t--;)if(this.__rules__[++r].name===e)return r;return-1},C.prototype.__compile__=function(){var e=this,t=[\"\"];e.__rules__.forEach(function(e){e.enabled&&e.alt.forEach(function(e){t.indexOf(e)<0&&t.push(e)})}),e.__cache__={},t.forEach(function(t){e.__cache__[t]=[],e.__rules__.forEach(function(r){r.enabled&&(t&&r.alt.indexOf(t)<0||e.__cache__[t].push(r.fn))})})},C.prototype.at=function(e,t,r){var n=this.__find__(e),o=r||{};if(-1===n)throw new Error(\"Parser rule not found: \"+e);this.__rules__[n].fn=t,this.__rules__[n].alt=o.alt||[],this.__cache__=null},C.prototype.before=function(e,t,r,n){var o=this.__find__(e),s=n||{};if(-1===o)throw new Error(\"Parser rule not found: \"+e);this.__rules__.splice(o,0,{name:t,enabled:!0,fn:r,alt:s.alt||[]}),this.__cache__=null},C.prototype.after=function(e,t,r,n){var o=this.__find__(e),s=n||{};if(-1===o)throw new Error(\"Parser rule not found: \"+e);this.__rules__.splice(o+1,0,{name:t,enabled:!0,fn:r,alt:s.alt||[]}),this.__cache__=null},C.prototype.push=function(e,t,r){var n=r||{};this.__rules__.push({name:e,enabled:!0,fn:t,alt:n.alt||[]}),this.__cache__=null},C.prototype.enable=function(e,t){e=Array.isArray(e)?e:[e],t&&this.__rules__.forEach(function(e){e.enabled=!1}),e.forEach(function(e){var t=this.__find__(e);if(t<0)throw new Error(\"Rules manager: invalid rule name \"+e);this.__rules__[t].enabled=!0},this),this.__cache__=null},C.prototype.disable=function(e){(e=Array.isArray(e)?e:[e]).forEach(function(e){var t=this.__find__(e);if(t<0)throw new Error(\"Rules manager: invalid rule name \"+e);this.__rules__[t].enabled=!1},this),this.__cache__=null},C.prototype.getRules=function(e){return null===this.__cache__&&this.__compile__(),this.__cache__[e]||[]},E.prototype.pushPending=function(){this.tokens.push({type:\"text\",content:this.pending,level:this.pendingLevel}),this.pending=\"\"},E.prototype.push=function(e){this.pending&&this.pushPending(),this.tokens.push(e),this.pendingLevel=this.level},E.prototype.cacheSet=function(e,t){for(var r=this.cache.length;r<=e;r++)this.cache.push(0);this.cache[e]=t},E.prototype.cacheGet=function(e){return e<this.cache.length?this.cache[e]:0};var T=\" \\n()[]'\\\".,!?-\";function L(e){return e.replace(/([-()\\[\\]{}+?*.$\\^|,:#<!\\\\])/g,\"\\\\$1\")}var R=/\\+-|\\.\\.|\\?\\?\\?\\?|!!!!|,,|--/,N=/\\((c|tm|r|p)\\)/gi,z={c:\"©\",r:\"®\",p:\"§\",tm:\"™\"};var P=/['\"]/,j=/['\"]/g,I=/[-\\s()\\[\\]]/,O=\"’\";function U(e,t){return!(t<0||t>=e.length)&&!I.test(e[t])}function H(e,t,r){return e.substr(0,t)+r+e.substr(t+1)}var V=[[\"block\",function(e){e.inlineMode?e.tokens.push({type:\"inline\",content:e.src.replace(/\\n/g,\" \").trim(),level:0,lines:[0,1],children:[]}):e.block.parse(e.src,e.options,e.env,e.tokens)}],[\"abbr\",function(e){var t,r,n,o,s=e.tokens;if(!e.inlineMode)for(t=1,r=s.length-1;t<r;t++)if(\"paragraph_open\"===s[t-1].type&&\"inline\"===s[t].type&&\"paragraph_close\"===s[t+1].type){for(n=s[t].content;n.length&&!((o=_(n,e.inline,e.options,e.env))<0);)n=n.slice(o).trim();s[t].content=n,n.length||(s[t-1].tight=!0,s[t+1].tight=!0)}}],[\"references\",function(e){var t,r,n,o,s=e.tokens;if(e.env.references=e.env.references||{},!e.inlineMode)for(t=1,r=s.length-1;t<r;t++)if(\"inline\"===s[t].type&&\"paragraph_open\"===s[t-1].type&&\"paragraph_close\"===s[t+1].type){for(n=s[t].content;n.length&&!((o=S(n,e.inline,e.options,e.env))<0);)n=n.slice(o).trim();s[t].content=n,n.length||(s[t-1].tight=!0,s[t+1].tight=!0)}}],[\"inline\",function(e){var t,r,n,o=e.tokens;for(r=0,n=o.length;r<n;r++)\"inline\"===(t=o[r]).type&&e.inline.parse(t.content,e.options,e.env,t.children)}],[\"footnote_tail\",function(e){var t,r,n,o,s,i,a,u,l,c=0,p=!1,h={};if(e.env.footnotes&&(e.tokens=e.tokens.filter(function(e){return\"footnote_reference_open\"===e.type?(p=!0,u=[],l=e.label,!1):\"footnote_reference_close\"===e.type?(p=!1,h[\":\"+l]=u,!1):(p&&u.push(e),!p)}),e.env.footnotes.list)){for(i=e.env.footnotes.list,e.tokens.push({type:\"footnote_block_open\",level:c++}),t=0,r=i.length;t<r;t++){for(e.tokens.push({type:\"footnote_open\",id:t,level:c++}),i[t].tokens?((a=[]).push({type:\"paragraph_open\",tight:!1,level:c++}),a.push({type:\"inline\",content:\"\",level:c,children:i[t].tokens}),a.push({type:\"paragraph_close\",tight:!1,level:--c})):i[t].label&&(a=h[\":\"+i[t].label]),e.tokens=e.tokens.concat(a),s=\"paragraph_close\"===e.tokens[e.tokens.length-1].type?e.tokens.pop():null,o=i[t].count>0?i[t].count:1,n=0;n<o;n++)e.tokens.push({type:\"footnote_anchor\",id:t,subId:n,level:c});s&&e.tokens.push(s),e.tokens.push({type:\"footnote_close\",level:--c})}e.tokens.push({type:\"footnote_block_close\",level:--c})}}],[\"abbr2\",function(e){var t,r,n,o,s,i,a,u,l,c,p,h,f=e.tokens;if(e.env.abbreviations)for(e.env.abbrRegExp||(h=\"(^|[\"+T.split(\"\").map(L).join(\"\")+\"])(\"+Object.keys(e.env.abbreviations).map(function(e){return e.substr(1)}).sort(function(e,t){return t.length-e.length}).map(L).join(\"|\")+\")($|[\"+T.split(\"\").map(L).join(\"\")+\"])\",e.env.abbrRegExp=new RegExp(h,\"g\")),c=e.env.abbrRegExp,r=0,n=f.length;r<n;r++)if(\"inline\"===f[r].type)for(t=(o=f[r].children).length-1;t>=0;t--)if(\"text\"===(s=o[t]).type){for(u=0,i=s.content,c.lastIndex=0,l=s.level,a=[];p=c.exec(i);)c.lastIndex>u&&a.push({type:\"text\",content:i.slice(u,p.index+p[1].length),level:l}),a.push({type:\"abbr_open\",title:e.env.abbreviations[\":\"+p[2]],level:l++}),a.push({type:\"text\",content:p[2],level:l}),a.push({type:\"abbr_close\",level:--l}),u=c.lastIndex-p[3].length;a.length&&(u<i.length&&a.push({type:\"text\",content:i.slice(u),level:l}),f[r].children=o=[].concat(o.slice(0,t),a,o.slice(t+1)))}}],[\"replacements\",function(e){var t,r,n,o,s,i;if(e.options.typographer)for(s=e.tokens.length-1;s>=0;s--)if(\"inline\"===e.tokens[s].type)for(t=(o=e.tokens[s].children).length-1;t>=0;t--)\"text\"===(r=o[t]).type&&(n=r.content,n=(i=n).indexOf(\"(\")<0?i:i.replace(N,function(e,t){return z[t.toLowerCase()]}),R.test(n)&&(n=n.replace(/\\+-/g,\"±\").replace(/\\.{2,}/g,\"…\").replace(/([?!])…/g,\"$1..\").replace(/([?!]){4,}/g,\"$1$1$1\").replace(/,{2,}/g,\",\").replace(/(^|[^-])---([^-]|$)/gm,\"$1—$2\").replace(/(^|\\s)--(\\s|$)/gm,\"$1–$2\").replace(/(^|[^-\\s])--([^-\\s]|$)/gm,\"$1–$2\")),r.content=n)}],[\"smartquotes\",function(e){var t,r,n,o,s,i,a,u,l,c,p,h,f,g,d,m,b;if(e.options.typographer)for(b=[],d=e.tokens.length-1;d>=0;d--)if(\"inline\"===e.tokens[d].type)for(m=e.tokens[d].children,b.length=0,t=0;t<m.length;t++)if(\"text\"===(r=m[t]).type&&!P.test(r.text)){for(a=m[t].level,f=b.length-1;f>=0&&!(b[f].level<=a);f--);b.length=f+1,s=0,i=(n=r.content).length;e:for(;s<i&&(j.lastIndex=s,o=j.exec(n));)if(u=!U(n,o.index-1),s=o.index+1,g=\"'\"===o[0],(l=!U(n,s))||u){if(p=!l,h=!u)for(f=b.length-1;f>=0&&(c=b[f],!(b[f].level<a));f--)if(c.single===g&&b[f].level===a){c=b[f],g?(m[c.token].content=H(m[c.token].content,c.pos,e.options.quotes[2]),r.content=H(r.content,o.index,e.options.quotes[3])):(m[c.token].content=H(m[c.token].content,c.pos,e.options.quotes[0]),r.content=H(r.content,o.index,e.options.quotes[1])),b.length=f;continue e}p?b.push({token:t,pos:o.index,single:g,level:a}):h&&g&&(r.content=H(r.content,o.index,O))}else g&&(r.content=H(r.content,o.index,O))}}]];function G(){this.options={},this.ruler=new C;for(var e=0;e<V.length;e++)this.ruler.push(V[e][0],V[e][1])}function $(e,t,r,n,o){var s,i,a,u,l,c,p;for(this.src=e,this.parser=t,this.options=r,this.env=n,this.tokens=o,this.bMarks=[],this.eMarks=[],this.tShift=[],this.blkIndent=0,this.line=0,this.lineMax=0,this.tight=!1,this.parentType=\"root\",this.ddIndent=-1,this.level=0,this.result=\"\",c=0,p=!1,a=u=c=0,l=(i=this.src).length;u<l;u++){if(s=i.charCodeAt(u),!p){if(32===s){c++;continue}p=!0}10!==s&&u!==l-1||(10!==s&&u++,this.bMarks.push(a),this.eMarks.push(u),this.tShift.push(c),p=!1,c=0,a=u+1)}this.bMarks.push(i.length),this.eMarks.push(i.length),this.tShift.push(0),this.lineMax=this.bMarks.length-1}function Z(e,t){var r,n,o;return(n=e.bMarks[t]+e.tShift[t])>=(o=e.eMarks[t])?-1:42!==(r=e.src.charCodeAt(n++))&&45!==r&&43!==r?-1:n<o&&32!==e.src.charCodeAt(n)?-1:n}function W(e,t){var r,n=e.bMarks[t]+e.tShift[t],o=e.eMarks[t];if(n+1>=o)return-1;if((r=e.src.charCodeAt(n++))<48||r>57)return-1;for(;;){if(n>=o)return-1;if(!((r=e.src.charCodeAt(n++))>=48&&r<=57)){if(41===r||46===r)break;return-1}}return n<o&&32!==e.src.charCodeAt(n)?-1:n}G.prototype.process=function(e){var t,r,n;for(t=0,r=(n=this.ruler.getRules(\"\")).length;t<r;t++)n[t](e)},$.prototype.isEmpty=function(e){return this.bMarks[e]+this.tShift[e]>=this.eMarks[e]},$.prototype.skipEmptyLines=function(e){for(var t=this.lineMax;e<t&&!(this.bMarks[e]+this.tShift[e]<this.eMarks[e]);e++);return e},$.prototype.skipSpaces=function(e){for(var t=this.src.length;e<t&&32===this.src.charCodeAt(e);e++);return e},$.prototype.skipChars=function(e,t){for(var r=this.src.length;e<r&&this.src.charCodeAt(e)===t;e++);return e},$.prototype.skipCharsBack=function(e,t,r){if(e<=r)return e;for(;e>r;)if(t!==this.src.charCodeAt(--e))return e+1;return e},$.prototype.getLines=function(e,t,r,n){var o,s,i,a,u,l=e;if(e>=t)return\"\";if(l+1===t)return s=this.bMarks[l]+Math.min(this.tShift[l],r),i=n?this.eMarks[l]+1:this.eMarks[l],this.src.slice(s,i);for(a=new Array(t-e),o=0;l<t;l++,o++)(u=this.tShift[l])>r&&(u=r),u<0&&(u=0),s=this.bMarks[l]+u,i=l+1<t||n?this.eMarks[l]+1:this.eMarks[l],a[o]=this.src.slice(s,i);return a.join(\"\")};var J={};[\"article\",\"aside\",\"button\",\"blockquote\",\"body\",\"canvas\",\"caption\",\"col\",\"colgroup\",\"dd\",\"div\",\"dl\",\"dt\",\"embed\",\"fieldset\",\"figcaption\",\"figure\",\"footer\",\"form\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"header\",\"hgroup\",\"hr\",\"iframe\",\"li\",\"map\",\"object\",\"ol\",\"output\",\"p\",\"pre\",\"progress\",\"script\",\"section\",\"style\",\"table\",\"tbody\",\"td\",\"textarea\",\"tfoot\",\"th\",\"tr\",\"thead\",\"ul\",\"video\"].forEach(function(e){J[e]=!0});var Y=/^<([a-zA-Z]{1,15})[\\s\\/>]/,K=/^<\\/([a-zA-Z]{1,15})[\\s>]/;function Q(e,t){var r=e.bMarks[t]+e.blkIndent,n=e.eMarks[t];return e.src.substr(r,n-r)}function X(e,t){var r,n,o=e.bMarks[t]+e.tShift[t],s=e.eMarks[t];return o>=s?-1:126!==(n=e.src.charCodeAt(o++))&&58!==n?-1:o===(r=e.skipSpaces(o))?-1:r>=s?-1:r}var ee=[[\"code\",function(e,t,r){var n,o;if(e.tShift[t]-e.blkIndent<4)return!1;for(o=n=t+1;n<r;)if(e.isEmpty(n))n++;else{if(!(e.tShift[n]-e.blkIndent>=4))break;o=++n}return e.line=n,e.tokens.push({type:\"code\",content:e.getLines(t,o,4+e.blkIndent,!0),block:!0,lines:[t,e.line],level:e.level}),!0}],[\"fences\",function(e,t,r,n){var o,s,i,a,u,l=!1,c=e.bMarks[t]+e.tShift[t],p=e.eMarks[t];if(c+3>p)return!1;if(126!==(o=e.src.charCodeAt(c))&&96!==o)return!1;if(u=c,(s=(c=e.skipChars(c,o))-u)<3)return!1;if((i=e.src.slice(c,p).trim()).indexOf(\"`\")>=0)return!1;if(n)return!0;for(a=t;!(++a>=r||(c=u=e.bMarks[a]+e.tShift[a])<(p=e.eMarks[a])&&e.tShift[a]<e.blkIndent);)if(e.src.charCodeAt(c)===o&&!(e.tShift[a]-e.blkIndent>=4||(c=e.skipChars(c,o))-u<s||(c=e.skipSpaces(c))<p)){l=!0;break}return s=e.tShift[t],e.line=a+(l?1:0),e.tokens.push({type:\"fence\",params:i,content:e.getLines(t+1,a,s,!0),lines:[t,e.line],level:e.level}),!0},[\"paragraph\",\"blockquote\",\"list\"]],[\"blockquote\",function(e,t,r,n){var o,s,i,a,u,l,c,p,h,f,g,d=e.bMarks[t]+e.tShift[t],m=e.eMarks[t];if(d>m)return!1;if(62!==e.src.charCodeAt(d++))return!1;if(e.level>=e.options.maxNesting)return!1;if(n)return!0;for(32===e.src.charCodeAt(d)&&d++,u=e.blkIndent,e.blkIndent=0,a=[e.bMarks[t]],e.bMarks[t]=d,s=(d=d<m?e.skipSpaces(d):d)>=m,i=[e.tShift[t]],e.tShift[t]=d-e.bMarks[t],p=e.parser.ruler.getRules(\"blockquote\"),o=t+1;o<r&&!((d=e.bMarks[o]+e.tShift[o])>=(m=e.eMarks[o]));o++)if(62!==e.src.charCodeAt(d++)){if(s)break;for(g=!1,h=0,f=p.length;h<f;h++)if(p[h](e,o,r,!0)){g=!0;break}if(g)break;a.push(e.bMarks[o]),i.push(e.tShift[o]),e.tShift[o]=-1337}else 32===e.src.charCodeAt(d)&&d++,a.push(e.bMarks[o]),e.bMarks[o]=d,s=(d=d<m?e.skipSpaces(d):d)>=m,i.push(e.tShift[o]),e.tShift[o]=d-e.bMarks[o];for(l=e.parentType,e.parentType=\"blockquote\",e.tokens.push({type:\"blockquote_open\",lines:c=[t,0],level:e.level++}),e.parser.tokenize(e,t,o),e.tokens.push({type:\"blockquote_close\",level:--e.level}),e.parentType=l,c[1]=e.line,h=0;h<i.length;h++)e.bMarks[h+t]=a[h],e.tShift[h+t]=i[h];return e.blkIndent=u,!0},[\"paragraph\",\"blockquote\",\"list\"]],[\"hr\",function(e,t,r,n){var o,s,i,a=e.bMarks[t],u=e.eMarks[t];if((a+=e.tShift[t])>u)return!1;if(42!==(o=e.src.charCodeAt(a++))&&45!==o&&95!==o)return!1;for(s=1;a<u;){if((i=e.src.charCodeAt(a++))!==o&&32!==i)return!1;i===o&&s++}return!(s<3||!n&&(e.line=t+1,e.tokens.push({type:\"hr\",lines:[t,e.line],level:e.level}),0))},[\"paragraph\",\"blockquote\",\"list\"]],[\"list\",function(e,t,r,n){var o,s,i,a,u,l,c,p,h,f,g,d,m,b,v,k,A,y,x,w,C,E=!0;if((p=W(e,t))>=0)d=!0;else{if(!((p=Z(e,t))>=0))return!1;d=!1}if(e.level>=e.options.maxNesting)return!1;if(g=e.src.charCodeAt(p-1),n)return!0;for(b=e.tokens.length,d?(c=e.bMarks[t]+e.tShift[t],f=Number(e.src.substr(c,p-c-1)),e.tokens.push({type:\"ordered_list_open\",order:f,lines:k=[t,0],level:e.level++})):e.tokens.push({type:\"bullet_list_open\",lines:k=[t,0],level:e.level++}),o=t,v=!1,y=e.parser.ruler.getRules(\"list\");!(!(o<r)||((h=(m=e.skipSpaces(p))>=e.eMarks[o]?1:m-p)>4&&(h=1),h<1&&(h=1),s=p-e.bMarks[o]+h,e.tokens.push({type:\"list_item_open\",lines:A=[t,0],level:e.level++}),a=e.blkIndent,u=e.tight,i=e.tShift[t],l=e.parentType,e.tShift[t]=m-e.bMarks[t],e.blkIndent=s,e.tight=!0,e.parentType=\"list\",e.parser.tokenize(e,t,r,!0),e.tight&&!v||(E=!1),v=e.line-t>1&&e.isEmpty(e.line-1),e.blkIndent=a,e.tShift[t]=i,e.tight=u,e.parentType=l,e.tokens.push({type:\"list_item_close\",level:--e.level}),o=t=e.line,A[1]=o,m=e.bMarks[t],o>=r)||e.isEmpty(o)||e.tShift[o]<e.blkIndent);){for(C=!1,x=0,w=y.length;x<w;x++)if(y[x](e,o,r,!0)){C=!0;break}if(C)break;if(d){if((p=W(e,o))<0)break}else if((p=Z(e,o))<0)break;if(g!==e.src.charCodeAt(p-1))break}return e.tokens.push({type:d?\"ordered_list_close\":\"bullet_list_close\",level:--e.level}),k[1]=o,e.line=o,E&&function(e,t){var r,n,o=e.level+2;for(r=t+2,n=e.tokens.length-2;r<n;r++)e.tokens[r].level===o&&\"paragraph_open\"===e.tokens[r].type&&(e.tokens[r+2].tight=!0,e.tokens[r].tight=!0,r+=2)}(e,b),!0},[\"paragraph\",\"blockquote\"]],[\"footnote\",function(e,t,r,n){var o,s,i,a,u,l=e.bMarks[t]+e.tShift[t],c=e.eMarks[t];if(l+4>c)return!1;if(91!==e.src.charCodeAt(l))return!1;if(94!==e.src.charCodeAt(l+1))return!1;if(e.level>=e.options.maxNesting)return!1;for(a=l+2;a<c;a++){if(32===e.src.charCodeAt(a))return!1;if(93===e.src.charCodeAt(a))break}return!(a===l+2||a+1>=c||58!==e.src.charCodeAt(++a)||!n&&(a++,e.env.footnotes||(e.env.footnotes={}),e.env.footnotes.refs||(e.env.footnotes.refs={}),u=e.src.slice(l+2,a-2),e.env.footnotes.refs[\":\"+u]=-1,e.tokens.push({type:\"footnote_reference_open\",label:u,level:e.level++}),o=e.bMarks[t],s=e.tShift[t],i=e.parentType,e.tShift[t]=e.skipSpaces(a)-a,e.bMarks[t]=a,e.blkIndent+=4,e.parentType=\"footnote\",e.tShift[t]<e.blkIndent&&(e.tShift[t]+=e.blkIndent,e.bMarks[t]-=e.blkIndent),e.parser.tokenize(e,t,r,!0),e.parentType=i,e.blkIndent-=4,e.tShift[t]=s,e.bMarks[t]=o,e.tokens.push({type:\"footnote_reference_close\",level:--e.level}),0))},[\"paragraph\"]],[\"heading\",function(e,t,r,n){var o,s,i,a=e.bMarks[t]+e.tShift[t],u=e.eMarks[t];if(a>=u)return!1;if(35!==(o=e.src.charCodeAt(a))||a>=u)return!1;for(s=1,o=e.src.charCodeAt(++a);35===o&&a<u&&s<=6;)s++,o=e.src.charCodeAt(++a);return!(s>6||a<u&&32!==o||!n&&(u=e.skipCharsBack(u,32,a),(i=e.skipCharsBack(u,35,a))>a&&32===e.src.charCodeAt(i-1)&&(u=i),e.line=t+1,e.tokens.push({type:\"heading_open\",hLevel:s,lines:[t,e.line],level:e.level}),a<u&&e.tokens.push({type:\"inline\",content:e.src.slice(a,u).trim(),level:e.level+1,lines:[t,e.line],children:[]}),e.tokens.push({type:\"heading_close\",hLevel:s,level:e.level}),0))},[\"paragraph\",\"blockquote\"]],[\"lheading\",function(e,t,r){var n,o,s,i=t+1;return!(i>=r||e.tShift[i]<e.blkIndent||e.tShift[i]-e.blkIndent>3||(o=e.bMarks[i]+e.tShift[i])>=(s=e.eMarks[i])||45!==(n=e.src.charCodeAt(o))&&61!==n||(o=e.skipChars(o,n),(o=e.skipSpaces(o))<s||(o=e.bMarks[t]+e.tShift[t],e.line=i+1,e.tokens.push({type:\"heading_open\",hLevel:61===n?1:2,lines:[t,e.line],level:e.level}),e.tokens.push({type:\"inline\",content:e.src.slice(o,e.eMarks[t]).trim(),level:e.level+1,lines:[t,e.line-1],children:[]}),e.tokens.push({type:\"heading_close\",hLevel:61===n?1:2,level:e.level}),0)))}],[\"htmlblock\",function(e,t,r,n){var o,s,i,a=e.bMarks[t],u=e.eMarks[t],l=e.tShift[t];if(a+=l,!e.options.html)return!1;if(l>3||a+2>=u)return!1;if(60!==e.src.charCodeAt(a))return!1;if(33===(o=e.src.charCodeAt(a+1))||63===o){if(n)return!0}else{if(47!==o&&!function(e){var t=32|e;return t>=97&&t<=122}(o))return!1;if(47===o){if(!(s=e.src.slice(a,u).match(K)))return!1}else if(!(s=e.src.slice(a,u).match(Y)))return!1;if(!0!==J[s[1].toLowerCase()])return!1;if(n)return!0}for(i=t+1;i<e.lineMax&&!e.isEmpty(i);)i++;return e.line=i,e.tokens.push({type:\"htmlblock\",level:e.level,lines:[t,e.line],content:e.getLines(t,i,0,!0)}),!0},[\"paragraph\",\"blockquote\"]],[\"table\",function(e,t,r,n){var o,s,i,a,u,l,c,p,h,f,g;if(t+2>r)return!1;if(u=t+1,e.tShift[u]<e.blkIndent)return!1;if((i=e.bMarks[u]+e.tShift[u])>=e.eMarks[u])return!1;if(124!==(o=e.src.charCodeAt(i))&&45!==o&&58!==o)return!1;if(s=Q(e,t+1),!/^[-:| ]+$/.test(s))return!1;if((l=s.split(\"|\"))<=2)return!1;for(p=[],a=0;a<l.length;a++){if(!(h=l[a].trim())){if(0===a||a===l.length-1)continue;return!1}if(!/^:?-+:?$/.test(h))return!1;58===h.charCodeAt(h.length-1)?p.push(58===h.charCodeAt(0)?\"center\":\"right\"):58===h.charCodeAt(0)?p.push(\"left\"):p.push(\"\")}if(-1===(s=Q(e,t).trim()).indexOf(\"|\"))return!1;if(l=s.replace(/^\\||\\|$/g,\"\").split(\"|\"),p.length!==l.length)return!1;if(n)return!0;for(e.tokens.push({type:\"table_open\",lines:f=[t,0],level:e.level++}),e.tokens.push({type:\"thead_open\",lines:[t,t+1],level:e.level++}),e.tokens.push({type:\"tr_open\",lines:[t,t+1],level:e.level++}),a=0;a<l.length;a++)e.tokens.push({type:\"th_open\",align:p[a],lines:[t,t+1],level:e.level++}),e.tokens.push({type:\"inline\",content:l[a].trim(),lines:[t,t+1],level:e.level,children:[]}),e.tokens.push({type:\"th_close\",level:--e.level});for(e.tokens.push({type:\"tr_close\",level:--e.level}),e.tokens.push({type:\"thead_close\",level:--e.level}),e.tokens.push({type:\"tbody_open\",lines:g=[t+2,0],level:e.level++}),u=t+2;u<r&&!(e.tShift[u]<e.blkIndent)&&-1!==(s=Q(e,u).trim()).indexOf(\"|\");u++){for(l=s.replace(/^\\||\\|$/g,\"\").split(\"|\"),e.tokens.push({type:\"tr_open\",level:e.level++}),a=0;a<l.length;a++)e.tokens.push({type:\"td_open\",align:p[a],level:e.level++}),c=l[a].substring(124===l[a].charCodeAt(0)?1:0,124===l[a].charCodeAt(l[a].length-1)?l[a].length-1:l[a].length).trim(),e.tokens.push({type:\"inline\",content:c,level:e.level,children:[]}),e.tokens.push({type:\"td_close\",level:--e.level});e.tokens.push({type:\"tr_close\",level:--e.level})}return e.tokens.push({type:\"tbody_close\",level:--e.level}),e.tokens.push({type:\"table_close\",level:--e.level}),f[1]=g[1]=u,e.line=u,!0},[\"paragraph\"]],[\"deflist\",function(e,t,r,n){var o,s,i,a,u,l,c,p,h,f,g,d,m,b;if(n)return!(e.ddIndent<0)&&X(e,t)>=0;if(c=t+1,e.isEmpty(c)&&++c>r)return!1;if(e.tShift[c]<e.blkIndent)return!1;if((o=X(e,c))<0)return!1;if(e.level>=e.options.maxNesting)return!1;l=e.tokens.length,e.tokens.push({type:\"dl_open\",lines:u=[t,0],level:e.level++}),i=t,s=c;e:for(;;){for(b=!0,m=!1,e.tokens.push({type:\"dt_open\",lines:[i,i],level:e.level++}),e.tokens.push({type:\"inline\",content:e.getLines(i,i+1,e.blkIndent,!1).trim(),level:e.level+1,lines:[i,i],children:[]}),e.tokens.push({type:\"dt_close\",level:--e.level});;){if(e.tokens.push({type:\"dd_open\",lines:a=[c,0],level:e.level++}),d=e.tight,h=e.ddIndent,p=e.blkIndent,g=e.tShift[s],f=e.parentType,e.blkIndent=e.ddIndent=e.tShift[s]+2,e.tShift[s]=o-e.bMarks[s],e.tight=!0,e.parentType=\"deflist\",e.parser.tokenize(e,s,r,!0),e.tight&&!m||(b=!1),m=e.line-s>1&&e.isEmpty(e.line-1),e.tShift[s]=g,e.tight=d,e.parentType=f,e.blkIndent=p,e.ddIndent=h,e.tokens.push({type:\"dd_close\",level:--e.level}),a[1]=c=e.line,c>=r)break e;if(e.tShift[c]<e.blkIndent)break e;if((o=X(e,c))<0)break;s=c}if(c>=r)break;if(i=c,e.isEmpty(i))break;if(e.tShift[i]<e.blkIndent)break;if((s=i+1)>=r)break;if(e.isEmpty(s)&&s++,s>=r)break;if(e.tShift[s]<e.blkIndent)break;if((o=X(e,s))<0)break}return e.tokens.push({type:\"dl_close\",level:--e.level}),u[1]=c,e.line=c,b&&function(e,t){var r,n,o=e.level+2;for(r=t+2,n=e.tokens.length-2;r<n;r++)e.tokens[r].level===o&&\"paragraph_open\"===e.tokens[r].type&&(e.tokens[r+2].tight=!0,e.tokens[r].tight=!0,r+=2)}(e,l),!0},[\"paragraph\"]],[\"paragraph\",function(e,t){var r,n,o,s,i,a,u=t+1;if(u<(r=e.lineMax)&&!e.isEmpty(u))for(a=e.parser.ruler.getRules(\"paragraph\");u<r&&!e.isEmpty(u);u++)if(!(e.tShift[u]-e.blkIndent>3)){for(o=!1,s=0,i=a.length;s<i;s++)if(a[s](e,u,r,!0)){o=!0;break}if(o)break}return n=e.getLines(t,u,e.blkIndent,!1).trim(),e.line=u,n.length&&(e.tokens.push({type:\"paragraph_open\",tight:!1,lines:[t,e.line],level:e.level}),e.tokens.push({type:\"inline\",content:n,level:e.level+1,lines:[t,e.line],children:[]}),e.tokens.push({type:\"paragraph_close\",tight:!1,level:e.level})),!0}]];function te(){this.ruler=new C;for(var e=0;e<ee.length;e++)this.ruler.push(ee[e][0],ee[e][1],{alt:(ee[e][2]||[]).slice()})}te.prototype.tokenize=function(e,t,r){for(var n,o=this.ruler.getRules(\"\"),s=o.length,i=t,a=!1;i<r&&(e.line=i=e.skipEmptyLines(i),!(i>=r))&&!(e.tShift[i]<e.blkIndent);){for(n=0;n<s&&!o[n](e,i,r,!1);n++);if(e.tight=!a,e.isEmpty(e.line-1)&&(a=!0),(i=e.line)<r&&e.isEmpty(i)){if(a=!0,++i<r&&\"list\"===e.parentType&&e.isEmpty(i))break;e.line=i}}};var re=/[\\n\\t]/g,ne=/\\r[\\n\\u0085]|[\\u2424\\u2028\\u0085]/g,oe=/\\u00a0/g;function se(e){switch(e){case 10:case 92:case 96:case 42:case 95:case 94:case 91:case 93:case 33:case 38:case 60:case 62:case 123:case 125:case 36:case 37:case 64:case 126:case 43:case 61:case 58:return!0;default:return!1}}te.prototype.parse=function(e,t,r,n){var o,s=0,i=0;if(!e)return[];(e=(e=e.replace(oe,\" \")).replace(ne,\"\\n\")).indexOf(\"\\t\")>=0&&(e=e.replace(re,function(t,r){var n;return 10===e.charCodeAt(r)?(s=r+1,i=0,t):(n=\" \".slice((r-s-i)%4),i=r-s+1,n)})),o=new $(e,this,t,r,n),this.tokenize(o,o.line,o.lineMax)};for(var ie=[],ae=0;ae<256;ae++)ie.push(0);function ue(e){return e>=48&&e<=57||e>=65&&e<=90||e>=97&&e<=122}function le(e,t){var r,n,o,s=t,i=!0,a=!0,u=e.posMax,l=e.src.charCodeAt(t);for(r=t>0?e.src.charCodeAt(t-1):-1;s<u&&e.src.charCodeAt(s)===l;)s++;return s>=u&&(i=!1),(o=s-t)>=4?i=a=!1:(32!==(n=s<u?e.src.charCodeAt(s):-1)&&10!==n||(i=!1),32!==r&&10!==r||(a=!1),95===l&&(ue(r)&&(i=!1),ue(n)&&(a=!1))),{can_open:i,can_close:a,delims:o}}\"\\\\!\\\"#$%&'()*+,./:;<=>?@[]^_`{|}~-\".split(\"\").forEach(function(e){ie[e.charCodeAt(0)]=1});var ce=/\\\\([ \\\\!\"#$%&'()*+,.\\/:;<=>?@[\\]^_`{|}~-])/g;var pe=/\\\\([ \\\\!\"#$%&'()*+,.\\/:;<=>?@[\\]^_`{|}~-])/g;var he=[\"coap\",\"doi\",\"javascript\",\"aaa\",\"aaas\",\"about\",\"acap\",\"cap\",\"cid\",\"crid\",\"data\",\"dav\",\"dict\",\"dns\",\"file\",\"ftp\",\"geo\",\"go\",\"gopher\",\"h323\",\"http\",\"https\",\"iax\",\"icap\",\"im\",\"imap\",\"info\",\"ipp\",\"iris\",\"iris.beep\",\"iris.xpc\",\"iris.xpcs\",\"iris.lwz\",\"ldap\",\"mailto\",\"mid\",\"msrp\",\"msrps\",\"mtqp\",\"mupdate\",\"news\",\"nfs\",\"ni\",\"nih\",\"nntp\",\"opaquelocktoken\",\"pop\",\"pres\",\"rtsp\",\"service\",\"session\",\"shttp\",\"sieve\",\"sip\",\"sips\",\"sms\",\"snmp\",\"soap.beep\",\"soap.beeps\",\"tag\",\"tel\",\"telnet\",\"tftp\",\"thismessage\",\"tn3270\",\"tip\",\"tv\",\"urn\",\"vemmi\",\"ws\",\"wss\",\"xcon\",\"xcon-userid\",\"xmlrpc.beep\",\"xmlrpc.beeps\",\"xmpp\",\"z39.50r\",\"z39.50s\",\"adiumxtra\",\"afp\",\"afs\",\"aim\",\"apt\",\"attachment\",\"aw\",\"beshare\",\"bitcoin\",\"bolo\",\"callto\",\"chrome\",\"chrome-extension\",\"com-eventbrite-attendee\",\"content\",\"cvs\",\"dlna-playsingle\",\"dlna-playcontainer\",\"dtn\",\"dvb\",\"ed2k\",\"facetime\",\"feed\",\"finger\",\"fish\",\"gg\",\"git\",\"gizmoproject\",\"gtalk\",\"hcp\",\"icon\",\"ipn\",\"irc\",\"irc6\",\"ircs\",\"itms\",\"jar\",\"jms\",\"keyparc\",\"lastfm\",\"ldaps\",\"magnet\",\"maps\",\"market\",\"message\",\"mms\",\"ms-help\",\"msnim\",\"mumble\",\"mvn\",\"notes\",\"oid\",\"palm\",\"paparazzi\",\"platform\",\"proxy\",\"psyc\",\"query\",\"res\",\"resource\",\"rmi\",\"rsync\",\"rtmp\",\"secondlife\",\"sftp\",\"sgn\",\"skype\",\"smb\",\"soldat\",\"spotify\",\"ssh\",\"steam\",\"svn\",\"teamspeak\",\"things\",\"udp\",\"unreal\",\"ut2004\",\"ventrilo\",\"view-source\",\"webcal\",\"wtai\",\"wyciwyg\",\"xfire\",\"xri\",\"ymsgr\"],fe=/^<([a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)>/,ge=/^<([a-zA-Z.\\-]{1,25}):([^<>\\x00-\\x20]*)>/;function de(e,t){return e=e.source,t=t||\"\",function r(n,o){return n?(o=o.source||o,e=e.replace(n,o),r):new RegExp(e,t)}}var me=de(/(?:unquoted|single_quoted|double_quoted)/)(\"unquoted\",/[^\"'=<>`\\x00-\\x20]+/)(\"single_quoted\",/'[^']*'/)(\"double_quoted\",/\"[^\"]*\"/)(),be=de(/(?:\\s+attr_name(?:\\s*=\\s*attr_value)?)/)(\"attr_name\",/[a-zA-Z_:][a-zA-Z0-9:._-]*/)(\"attr_value\",me)(),ve=de(/<[A-Za-z][A-Za-z0-9]*attribute*\\s*\\/?>/)(\"attribute\",be)(),ke=de(/^(?:open_tag|close_tag|comment|processing|declaration|cdata)/)(\"open_tag\",ve)(\"close_tag\",/<\\/[A-Za-z][A-Za-z0-9]*\\s*>/)(\"comment\",/<!---->|<!--(?:-?[^>-])(?:-?[^-])*-->/)(\"processing\",/<[?].*?[?]>/)(\"declaration\",/<![A-Z]+\\s+[^>]*>/)(\"cdata\",/<!\\[CDATA\\[[\\s\\S]*?\\]\\]>/)();var Ae=/^&#((?:x[a-f0-9]{1,8}|[0-9]{1,8}));/i,ye=/^&([a-z][a-z0-9]{1,31});/i;var xe=[[\"text\",function(e,t){for(var r=e.pos;r<e.posMax&&!se(e.src.charCodeAt(r));)r++;return r!==e.pos&&(t||(e.pending+=e.src.slice(e.pos,r)),e.pos=r,!0)}],[\"newline\",function(e,t){var r,n,o=e.pos;if(10!==e.src.charCodeAt(o))return!1;if(r=e.pending.length-1,n=e.posMax,!t)if(r>=0&&32===e.pending.charCodeAt(r))if(r>=1&&32===e.pending.charCodeAt(r-1)){for(var s=r-2;s>=0;s--)if(32!==e.pending.charCodeAt(s)){e.pending=e.pending.substring(0,s+1);break}e.push({type:\"hardbreak\",level:e.level})}else e.pending=e.pending.slice(0,-1),e.push({type:\"softbreak\",level:e.level});else e.push({type:\"softbreak\",level:e.level});for(o++;o<n&&32===e.src.charCodeAt(o);)o++;return e.pos=o,!0}],[\"escape\",function(e,t){var r,n=e.pos,o=e.posMax;if(92!==e.src.charCodeAt(n))return!1;if(++n<o){if((r=e.src.charCodeAt(n))<256&&0!==ie[r])return t||(e.pending+=e.src[n]),e.pos+=2,!0;if(10===r){for(t||e.push({type:\"hardbreak\",level:e.level}),n++;n<o&&32===e.src.charCodeAt(n);)n++;return e.pos=n,!0}}return t||(e.pending+=\"\\\\\"),e.pos++,!0}],[\"backticks\",function(e,t){var r,n,o,s,i,a=e.pos;if(96!==e.src.charCodeAt(a))return!1;for(r=a,a++,n=e.posMax;a<n&&96===e.src.charCodeAt(a);)a++;for(o=e.src.slice(r,a),s=i=a;-1!==(s=e.src.indexOf(\"`\",i));){for(i=s+1;i<n&&96===e.src.charCodeAt(i);)i++;if(i-s===o.length)return t||e.push({type:\"code\",content:e.src.slice(a,s).replace(/[ \\n]+/g,\" \").trim(),block:!1,level:e.level}),e.pos=i,!0}return t||(e.pending+=o),e.pos+=o.length,!0}],[\"del\",function(e,t){var r,n,o,s,i,a=e.posMax,u=e.pos;if(126!==e.src.charCodeAt(u))return!1;if(t)return!1;if(u+4>=a)return!1;if(126!==e.src.charCodeAt(u+1))return!1;if(e.level>=e.options.maxNesting)return!1;if(s=u>0?e.src.charCodeAt(u-1):-1,i=e.src.charCodeAt(u+2),126===s)return!1;if(126===i)return!1;if(32===i||10===i)return!1;for(n=u+2;n<a&&126===e.src.charCodeAt(n);)n++;if(n>u+3)return e.pos+=n-u,t||(e.pending+=e.src.slice(u,n)),!0;for(e.pos=u+2,o=1;e.pos+1<a;){if(126===e.src.charCodeAt(e.pos)&&126===e.src.charCodeAt(e.pos+1)&&(s=e.src.charCodeAt(e.pos-1),126!==(i=e.pos+2<a?e.src.charCodeAt(e.pos+2):-1)&&126!==s&&(32!==s&&10!==s?o--:32!==i&&10!==i&&o++,o<=0))){r=!0;break}e.parser.skipToken(e)}return r?(e.posMax=e.pos,e.pos=u+2,t||(e.push({type:\"del_open\",level:e.level++}),e.parser.tokenize(e),e.push({type:\"del_close\",level:--e.level})),e.pos=e.posMax+2,e.posMax=a,!0):(e.pos=u,!1)}],[\"ins\",function(e,t){var r,n,o,s,i,a=e.posMax,u=e.pos;if(43!==e.src.charCodeAt(u))return!1;if(t)return!1;if(u+4>=a)return!1;if(43!==e.src.charCodeAt(u+1))return!1;if(e.level>=e.options.maxNesting)return!1;if(s=u>0?e.src.charCodeAt(u-1):-1,i=e.src.charCodeAt(u+2),43===s)return!1;if(43===i)return!1;if(32===i||10===i)return!1;for(n=u+2;n<a&&43===e.src.charCodeAt(n);)n++;if(n!==u+2)return e.pos+=n-u,t||(e.pending+=e.src.slice(u,n)),!0;for(e.pos=u+2,o=1;e.pos+1<a;){if(43===e.src.charCodeAt(e.pos)&&43===e.src.charCodeAt(e.pos+1)&&(s=e.src.charCodeAt(e.pos-1),43!==(i=e.pos+2<a?e.src.charCodeAt(e.pos+2):-1)&&43!==s&&(32!==s&&10!==s?o--:32!==i&&10!==i&&o++,o<=0))){r=!0;break}e.parser.skipToken(e)}return r?(e.posMax=e.pos,e.pos=u+2,t||(e.push({type:\"ins_open\",level:e.level++}),e.parser.tokenize(e),e.push({type:\"ins_close\",level:--e.level})),e.pos=e.posMax+2,e.posMax=a,!0):(e.pos=u,!1)}],[\"mark\",function(e,t){var r,n,o,s,i,a=e.posMax,u=e.pos;if(61!==e.src.charCodeAt(u))return!1;if(t)return!1;if(u+4>=a)return!1;if(61!==e.src.charCodeAt(u+1))return!1;if(e.level>=e.options.maxNesting)return!1;if(s=u>0?e.src.charCodeAt(u-1):-1,i=e.src.charCodeAt(u+2),61===s)return!1;if(61===i)return!1;if(32===i||10===i)return!1;for(n=u+2;n<a&&61===e.src.charCodeAt(n);)n++;if(n!==u+2)return e.pos+=n-u,t||(e.pending+=e.src.slice(u,n)),!0;for(e.pos=u+2,o=1;e.pos+1<a;){if(61===e.src.charCodeAt(e.pos)&&61===e.src.charCodeAt(e.pos+1)&&(s=e.src.charCodeAt(e.pos-1),61!==(i=e.pos+2<a?e.src.charCodeAt(e.pos+2):-1)&&61!==s&&(32!==s&&10!==s?o--:32!==i&&10!==i&&o++,o<=0))){r=!0;break}e.parser.skipToken(e)}return r?(e.posMax=e.pos,e.pos=u+2,t||(e.push({type:\"mark_open\",level:e.level++}),e.parser.tokenize(e),e.push({type:\"mark_close\",level:--e.level})),e.pos=e.posMax+2,e.posMax=a,!0):(e.pos=u,!1)}],[\"emphasis\",function(e,t){var r,n,o,s,i,a,u,l=e.posMax,c=e.pos,p=e.src.charCodeAt(c);if(95!==p&&42!==p)return!1;if(t)return!1;if(r=(u=le(e,c)).delims,!u.can_open)return e.pos+=r,t||(e.pending+=e.src.slice(c,e.pos)),!0;if(e.level>=e.options.maxNesting)return!1;for(e.pos=c+r,a=[r];e.pos<l;)if(e.src.charCodeAt(e.pos)!==p)e.parser.skipToken(e);else{if(n=(u=le(e,e.pos)).delims,u.can_close){for(s=a.pop(),i=n;s!==i;){if(i<s){a.push(s-i);break}if(i-=s,0===a.length)break;e.pos+=s,s=a.pop()}if(0===a.length){r=s,o=!0;break}e.pos+=n;continue}u.can_open&&a.push(n),e.pos+=n}return o?(e.posMax=e.pos,e.pos=c+r,t||(2!==r&&3!==r||e.push({type:\"strong_open\",level:e.level++}),1!==r&&3!==r||e.push({type:\"em_open\",level:e.level++}),e.parser.tokenize(e),1!==r&&3!==r||e.push({type:\"em_close\",level:--e.level}),2!==r&&3!==r||e.push({type:\"strong_close\",level:--e.level})),e.pos=e.posMax+r,e.posMax=l,!0):(e.pos=c,!1)}],[\"sub\",function(e,t){var r,n,o=e.posMax,s=e.pos;if(126!==e.src.charCodeAt(s))return!1;if(t)return!1;if(s+2>=o)return!1;if(e.level>=e.options.maxNesting)return!1;for(e.pos=s+1;e.pos<o;){if(126===e.src.charCodeAt(e.pos)){r=!0;break}e.parser.skipToken(e)}return r&&s+1!==e.pos?(n=e.src.slice(s+1,e.pos)).match(/(^|[^\\\\])(\\\\\\\\)*\\s/)?(e.pos=s,!1):(e.posMax=e.pos,e.pos=s+1,t||e.push({type:\"sub\",level:e.level,content:n.replace(ce,\"$1\")}),e.pos=e.posMax+1,e.posMax=o,!0):(e.pos=s,!1)}],[\"sup\",function(e,t){var r,n,o=e.posMax,s=e.pos;if(94!==e.src.charCodeAt(s))return!1;if(t)return!1;if(s+2>=o)return!1;if(e.level>=e.options.maxNesting)return!1;for(e.pos=s+1;e.pos<o;){if(94===e.src.charCodeAt(e.pos)){r=!0;break}e.parser.skipToken(e)}return r&&s+1!==e.pos?(n=e.src.slice(s+1,e.pos)).match(/(^|[^\\\\])(\\\\\\\\)*\\s/)?(e.pos=s,!1):(e.posMax=e.pos,e.pos=s+1,t||e.push({type:\"sup\",level:e.level,content:n.replace(pe,\"$1\")}),e.pos=e.posMax+1,e.posMax=o,!0):(e.pos=s,!1)}],[\"links\",function(e,t){var r,n,o,s,i,a,u,l,c=!1,p=e.pos,h=e.posMax,f=e.pos,g=e.src.charCodeAt(f);if(33===g&&(c=!0,g=e.src.charCodeAt(++f)),91!==g)return!1;if(e.level>=e.options.maxNesting)return!1;if(r=f+1,(n=D(e,f))<0)return!1;if((a=n+1)<h&&40===e.src.charCodeAt(a)){for(a++;a<h&&(32===(l=e.src.charCodeAt(a))||10===l);a++);if(a>=h)return!1;for(f=a,q(e,a)?(s=e.linkContent,a=e.pos):s=\"\",f=a;a<h&&(32===(l=e.src.charCodeAt(a))||10===l);a++);if(a<h&&f!==a&&F(e,a))for(i=e.linkContent,a=e.pos;a<h&&(32===(l=e.src.charCodeAt(a))||10===l);a++);else i=\"\";if(a>=h||41!==e.src.charCodeAt(a))return e.pos=p,!1;a++}else{if(e.linkLevel>0)return!1;for(;a<h&&(32===(l=e.src.charCodeAt(a))||10===l);a++);if(a<h&&91===e.src.charCodeAt(a)&&(f=a+1,(a=D(e,a))>=0?o=e.src.slice(f,a++):a=f-1),o||(void 0===o&&(a=n+1),o=e.src.slice(r,n)),!(u=e.env.references[M(o)]))return e.pos=p,!1;s=u.href,i=u.title}return t||(e.pos=r,e.posMax=n,c?e.push({type:\"image\",src:s,title:i,alt:e.src.substr(r,n-r),level:e.level}):(e.push({type:\"link_open\",href:s,title:i,level:e.level++}),e.linkLevel++,e.parser.tokenize(e),e.linkLevel--,e.push({type:\"link_close\",level:--e.level}))),e.pos=a,e.posMax=h,!0}],[\"footnote_inline\",function(e,t){var r,n,o,s,i=e.posMax,a=e.pos;return!(a+2>=i||94!==e.src.charCodeAt(a)||91!==e.src.charCodeAt(a+1)||e.level>=e.options.maxNesting||(r=a+2,(n=D(e,a+1))<0||(t||(e.env.footnotes||(e.env.footnotes={}),e.env.footnotes.list||(e.env.footnotes.list=[]),o=e.env.footnotes.list.length,e.pos=r,e.posMax=n,e.push({type:\"footnote_ref\",id:o,level:e.level}),e.linkLevel++,s=e.tokens.length,e.parser.tokenize(e),e.env.footnotes.list[o]={tokens:e.tokens.splice(s)},e.linkLevel--),e.pos=n+1,e.posMax=i,0)))}],[\"footnote_ref\",function(e,t){var r,n,o,s,i=e.posMax,a=e.pos;if(a+3>i)return!1;if(!e.env.footnotes||!e.env.footnotes.refs)return!1;if(91!==e.src.charCodeAt(a))return!1;if(94!==e.src.charCodeAt(a+1))return!1;if(e.level>=e.options.maxNesting)return!1;for(n=a+2;n<i;n++){if(32===e.src.charCodeAt(n))return!1;if(10===e.src.charCodeAt(n))return!1;if(93===e.src.charCodeAt(n))break}return!(n===a+2||n>=i||(n++,r=e.src.slice(a+2,n-1),void 0===e.env.footnotes.refs[\":\"+r]||(t||(e.env.footnotes.list||(e.env.footnotes.list=[]),e.env.footnotes.refs[\":\"+r]<0?(o=e.env.footnotes.list.length,e.env.footnotes.list[o]={label:r,count:0},e.env.footnotes.refs[\":\"+r]=o):o=e.env.footnotes.refs[\":\"+r],s=e.env.footnotes.list[o].count,e.env.footnotes.list[o].count++,e.push({type:\"footnote_ref\",id:o,subId:s,level:e.level})),e.pos=n,e.posMax=i,0)))}],[\"autolink\",function(e,t){var r,n,o,s,i,a=e.pos;return!(60!==e.src.charCodeAt(a)||(r=e.src.slice(a)).indexOf(\">\")<0||((n=r.match(ge))?he.indexOf(n[1].toLowerCase())<0||(i=B(s=n[0].slice(1,-1)),!e.parser.validateLink(s)||(t||(e.push({type:\"link_open\",href:i,level:e.level}),e.push({type:\"text\",content:s,level:e.level+1}),e.push({type:\"link_close\",level:e.level})),e.pos+=n[0].length,0)):!(o=r.match(fe))||(i=B(\"mailto:\"+(s=o[0].slice(1,-1))),!e.parser.validateLink(i)||(t||(e.push({type:\"link_open\",href:i,level:e.level}),e.push({type:\"text\",content:s,level:e.level+1}),e.push({type:\"link_close\",level:e.level})),e.pos+=o[0].length,0))))}],[\"htmltag\",function(e,t){var r,n,o,s=e.pos;return!(!e.options.html||(o=e.posMax,60!==e.src.charCodeAt(s)||s+2>=o||33!==(r=e.src.charCodeAt(s+1))&&63!==r&&47!==r&&!function(e){var t=32|e;return t>=97&&t<=122}(r)||!(n=e.src.slice(s).match(ke))||(t||e.push({type:\"htmltag\",content:e.src.slice(s,s+n[0].length),level:e.level}),e.pos+=n[0].length,0)))}],[\"entity\",function(e,t){var r,o,s=e.pos,i=e.posMax;if(38!==e.src.charCodeAt(s))return!1;if(s+1<i)if(35===e.src.charCodeAt(s+1)){if(o=e.src.slice(s).match(Ae))return t||(r=\"x\"===o[1][0].toLowerCase()?parseInt(o[1].slice(1),16):parseInt(o[1],10),e.pending+=l(r)?c(r):c(65533)),e.pos+=o[0].length,!0}else if(o=e.src.slice(s).match(ye)){var a=n(o[1]);if(o[1]!==a)return t||(e.pending+=a),e.pos+=o[0].length,!0}return t||(e.pending+=\"&\"),e.pos++,!0}]];function we(){this.ruler=new C;for(var e=0;e<xe.length;e++)this.ruler.push(xe[e][0],xe[e][1]);this.validateLink=Ce}function Ce(e){var t=e.trim().toLowerCase();return-1===(t=g(t)).indexOf(\":\")||-1===[\"vbscript\",\"javascript\",\"file\",\"data\"].indexOf(t.split(\":\")[0])}we.prototype.skipToken=function(e){var t,r,n=this.ruler.getRules(\"\"),o=n.length,s=e.pos;if((r=e.cacheGet(s))>0)e.pos=r;else{for(t=0;t<o;t++)if(n[t](e,!0))return void e.cacheSet(s,e.pos);e.pos++,e.cacheSet(s,e.pos)}},we.prototype.tokenize=function(e){for(var t,r,n=this.ruler.getRules(\"\"),o=n.length,s=e.posMax;e.pos<s;){for(r=0;r<o&&!(t=n[r](e,!1));r++);if(t){if(e.pos>=s)break}else e.pending+=e.src[e.pos++]}e.pending&&e.pushPending()},we.prototype.parse=function(e,t,r,n){var o=new E(e,this,t,r,n);this.tokenize(o)};var Ee={default:{options:{html:!1,xhtmlOut:!1,breaks:!1,langPrefix:\"language-\",linkTarget:\"\",typographer:!1,quotes:\"“”‘’\",highlight:null,maxNesting:20},components:{core:{rules:[\"block\",\"inline\",\"references\",\"replacements\",\"smartquotes\",\"references\",\"abbr2\",\"footnote_tail\"]},block:{rules:[\"blockquote\",\"code\",\"fences\",\"footnote\",\"heading\",\"hr\",\"htmlblock\",\"lheading\",\"list\",\"paragraph\",\"table\"]},inline:{rules:[\"autolink\",\"backticks\",\"del\",\"emphasis\",\"entity\",\"escape\",\"footnote_ref\",\"htmltag\",\"links\",\"newline\",\"text\"]}}},full:{options:{html:!1,xhtmlOut:!1,breaks:!1,langPrefix:\"language-\",linkTarget:\"\",typographer:!1,quotes:\"“”‘’\",highlight:null,maxNesting:20},components:{core:{},block:{},inline:{}}},commonmark:{options:{html:!0,xhtmlOut:!0,breaks:!1,langPrefix:\"language-\",linkTarget:\"\",typographer:!1,quotes:\"“”‘’\",highlight:null,maxNesting:20},components:{core:{rules:[\"block\",\"inline\",\"references\",\"abbr2\"]},block:{rules:[\"blockquote\",\"code\",\"fences\",\"heading\",\"hr\",\"htmlblock\",\"lheading\",\"list\",\"paragraph\"]},inline:{rules:[\"autolink\",\"backticks\",\"emphasis\",\"entity\",\"escape\",\"htmltag\",\"links\",\"newline\",\"text\"]}}}};function De(e,t,r){this.src=t,this.env=r,this.options=e.options,this.tokens=[],this.inlineMode=!1,this.inline=e.inline,this.block=e.block,this.renderer=e.renderer,this.typographer=e.typographer}function _e(e,t){\"string\"!=typeof e&&(t=e,e=\"default\"),t&&null!=t.linkify&&console.warn(\"linkify option is removed. Use linkify plugin instead:\\n\\nimport Remarkable from 'remarkable';\\nimport linkify from 'remarkable/linkify';\\nnew Remarkable().use(linkify)\\n\"),this.inline=new we,this.block=new te,this.core=new G,this.renderer=new w,this.ruler=new C,this.options={},this.configure(Ee[e]),this.set(t||{})}function Be(e,t){if(Array.prototype.indexOf)return e.indexOf(t);for(var r=0,n=e.length;r<n;r++)if(e[r]===t)return r;return-1}function qe(e,t){for(var r=e.length-1;r>=0;r--)!0===t(e[r])&&e.splice(r,1)}function Fe(e){throw new Error(\"Unhandled case for value: '\"+e+\"'\")}_e.prototype.set=function(e){i(this.options,e)},_e.prototype.configure=function(e){var t=this;if(!e)throw new Error(\"Wrong `remarkable` preset, check name/content\");e.options&&t.set(e.options),e.components&&Object.keys(e.components).forEach(function(r){e.components[r].rules&&t[r].ruler.enable(e.components[r].rules,!0)})},_e.prototype.use=function(e,t){return e(this,t),this},_e.prototype.parse=function(e,t){var r=new De(this,e,t);return this.core.process(r),r.tokens},_e.prototype.render=function(e,t){return t=t||{},this.renderer.render(this.parse(e,t),this.options,t)},_e.prototype.parseInline=function(e,t){var r=new De(this,e,t);return r.inlineMode=!0,this.core.process(r),r.tokens},_e.prototype.renderInline=function(e,t){return t=t||{},this.renderer.render(this.parseInline(e,t),this.options,t)};var Me=function(){function e(e){void 0===e&&(e={}),this.tagName=\"\",this.attrs={},this.innerHTML=\"\",this.whitespaceRegex=/\\s+/,this.tagName=e.tagName||\"\",this.attrs=e.attrs||{},this.innerHTML=e.innerHtml||e.innerHTML||\"\"}return e.prototype.setTagName=function(e){return this.tagName=e,this},e.prototype.getTagName=function(){return this.tagName||\"\"},e.prototype.setAttr=function(e,t){return this.getAttrs()[e]=t,this},e.prototype.getAttr=function(e){return this.getAttrs()[e]},e.prototype.setAttrs=function(e){return Object.assign(this.getAttrs(),e),this},e.prototype.getAttrs=function(){return this.attrs||(this.attrs={})},e.prototype.setClass=function(e){return this.setAttr(\"class\",e)},e.prototype.addClass=function(e){for(var t,r=this.getClass(),n=this.whitespaceRegex,o=r?r.split(n):[],s=e.split(n);t=s.shift();)-1===Be(o,t)&&o.push(t);return this.getAttrs().class=o.join(\" \"),this},e.prototype.removeClass=function(e){for(var t,r=this.getClass(),n=this.whitespaceRegex,o=r?r.split(n):[],s=e.split(n);o.length&&(t=s.shift());){var i=Be(o,t);-1!==i&&o.splice(i,1)}return this.getAttrs().class=o.join(\" \"),this},e.prototype.getClass=function(){return this.getAttrs().class||\"\"},e.prototype.hasClass=function(e){return-1!==(\" \"+this.getClass()+\" \").indexOf(\" \"+e+\" \")},e.prototype.setInnerHTML=function(e){return this.innerHTML=e,this},e.prototype.setInnerHtml=function(e){return this.setInnerHTML(e)},e.prototype.getInnerHTML=function(){return this.innerHTML||\"\"},e.prototype.getInnerHtml=function(){return this.getInnerHTML()},e.prototype.toAnchorString=function(){var e=this.getTagName(),t=this.buildAttrsStr();return[\"<\",e,t=t?\" \"+t:\"\",\">\",this.getInnerHtml(),\"</\",e,\">\"].join(\"\")},e.prototype.buildAttrsStr=function(){if(!this.attrs)return\"\";var e=this.getAttrs(),t=[];for(var r in e)e.hasOwnProperty(r)&&t.push(r+'=\"'+e[r]+'\"');return t.join(\" \")},e}();var Se=function(){function e(e){void 0===e&&(e={}),this.newWindow=!1,this.truncate={},this.className=\"\",this.newWindow=e.newWindow||!1,this.truncate=e.truncate||{},this.className=e.className||\"\"}return e.prototype.build=function(e){return new Me({tagName:\"a\",attrs:this.createAttrs(e),innerHtml:this.processAnchorText(e.getAnchorText())})},e.prototype.createAttrs=function(e){var t={href:e.getAnchorHref()},r=this.createCssClass(e);return r&&(t.class=r),this.newWindow&&(t.target=\"_blank\",t.rel=\"noopener noreferrer\"),this.truncate&&this.truncate.length&&this.truncate.length<e.getAnchorText().length&&(t.title=e.getAnchorHref()),t},e.prototype.createCssClass=function(e){var t=this.className;if(t){for(var r=[t],n=e.getCssClassSuffixes(),o=0,s=n.length;o<s;o++)r.push(t+\"-\"+n[o]);return r.join(\" \")}return\"\"},e.prototype.processAnchorText=function(e){return e=this.doTruncate(e)},e.prototype.doTruncate=function(e){var t=this.truncate;if(!t||!t.length)return e;var r=t.length,n=t.location;return\"smart\"===n?function(e,t,r){var n,o;null==r?(r=\"…\",o=3,n=8):(o=r.length,n=r.length);var s=function(e){var t=\"\";return e.scheme&&e.host&&(t+=e.scheme+\"://\"),e.host&&(t+=e.host),e.path&&(t+=\"/\"+e.path),e.query&&(t+=\"?\"+e.query),e.fragment&&(t+=\"#\"+e.fragment),t},i=function(e,t){var n=t/2,o=Math.ceil(n),s=-1*Math.floor(n),i=\"\";return s<0&&(i=e.substr(s)),e.substr(0,o)+r+i};if(e.length<=t)return e;var a=t-o,u=function(e){var t={},r=e,n=r.match(/^([a-z]+):\\/\\//i);return n&&(t.scheme=n[1],r=r.substr(n[0].length)),(n=r.match(/^(.*?)(?=(\\?|#|\\/|$))/i))&&(t.host=n[1],r=r.substr(n[0].length)),(n=r.match(/^\\/(.*?)(?=(\\?|#|$))/i))&&(t.path=n[1],r=r.substr(n[0].length)),(n=r.match(/^\\?(.*?)(?=(#|$))/i))&&(t.query=n[1],r=r.substr(n[0].length)),(n=r.match(/^#(.*?)$/i))&&(t.fragment=n[1]),t}(e);if(u.query){var l=u.query.match(/^(.*?)(?=(\\?|\\#))(.*?)$/i);l&&(u.query=u.query.substr(0,l[1].length),e=s(u))}if(e.length<=t)return e;if(u.host&&(u.host=u.host.replace(/^www\\./,\"\"),e=s(u)),e.length<=t)return e;var c=\"\";if(u.host&&(c+=u.host),c.length>=a)return u.host.length==t?(u.host.substr(0,t-o)+r).substr(0,a+n):i(c,a).substr(0,a+n);var p=\"\";if(u.path&&(p+=\"/\"+u.path),u.query&&(p+=\"?\"+u.query),p){if((c+p).length>=a)return(c+p).length==t?(c+p).substr(0,t):(c+i(p,a-c.length)).substr(0,a+n);c+=p}if(u.fragment){var h=\"#\"+u.fragment;if((c+h).length>=a)return(c+h).length==t?(c+h).substr(0,t):(c+i(h,a-c.length)).substr(0,a+n);c+=h}if(u.scheme&&u.host){var f=u.scheme+\"://\";if((c+f).length<a)return(f+c).substr(0,t)}if(c.length<=t)return c;var g=\"\";return a>0&&(g=c.substr(-1*Math.floor(a/2))),(c.substr(0,Math.ceil(a/2))+r+g).substr(0,a+n)}(e,r):\"middle\"===n?function(e,t,r){if(e.length<=t)return e;var n,o;null==r?(r=\"…\",n=8,o=3):(n=r.length,o=r.length);var s=t-o,i=\"\";return s>0&&(i=e.substr(-1*Math.floor(s/2))),(e.substr(0,Math.ceil(s/2))+r+i).substr(0,s+n)}(e,r):function(e,t,r){return function(e,t,r){var n;return e.length>t&&(null==r?(r=\"…\",n=3):n=r.length,e=e.substring(0,t-n)+r),e}(e,t,r)}(e,r)},e}(),Te=function(){function e(e){this.__jsduckDummyDocProp=null,this.matchedText=\"\",this.offset=0,this.tagBuilder=e.tagBuilder,this.matchedText=e.matchedText,this.offset=e.offset}return e.prototype.getMatchedText=function(){return this.matchedText},e.prototype.setOffset=function(e){this.offset=e},e.prototype.getOffset=function(){return this.offset},e.prototype.getCssClassSuffixes=function(){return[this.getType()]},e.prototype.buildTag=function(){return this.tagBuilder.build(this)},e}(),Le=function(e,t){return(Le=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])})(e,t)};function Re(e,t){function r(){this.constructor=e}Le(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}var Ne=function(){return(Ne=Object.assign||function(e){for(var t,r=1,n=arguments.length;r<n;r++)for(var o in t=arguments[r])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)},ze=function(e){function t(t){var r=e.call(this,t)||this;return r.email=\"\",r.email=t.email,r}return Re(t,e),t.prototype.getType=function(){return\"email\"},t.prototype.getEmail=function(){return this.email},t.prototype.getAnchorHref=function(){return\"mailto:\"+this.email},t.prototype.getAnchorText=function(){return this.email},t}(Te),Pe=function(e){function t(t){var r=e.call(this,t)||this;return r.serviceName=\"\",r.hashtag=\"\",r.serviceName=t.serviceName,r.hashtag=t.hashtag,r}return Re(t,e),t.prototype.getType=function(){return\"hashtag\"},t.prototype.getServiceName=function(){return this.serviceName},t.prototype.getHashtag=function(){return this.hashtag},t.prototype.getAnchorHref=function(){var e=this.serviceName,t=this.hashtag;switch(e){case\"twitter\":return\"https://twitter.com/hashtag/\"+t;case\"facebook\":return\"https://www.facebook.com/hashtag/\"+t;case\"instagram\":return\"https://instagram.com/explore/tags/\"+t;default:throw new Error(\"Unknown service name to point hashtag to: \"+e)}},t.prototype.getAnchorText=function(){return\"#\"+this.hashtag},t}(Te),je=function(e){function t(t){var r=e.call(this,t)||this;return r.serviceName=\"twitter\",r.mention=\"\",r.mention=t.mention,r.serviceName=t.serviceName,r}return Re(t,e),t.prototype.getType=function(){return\"mention\"},t.prototype.getMention=function(){return this.mention},t.prototype.getServiceName=function(){return this.serviceName},t.prototype.getAnchorHref=function(){switch(this.serviceName){case\"twitter\":return\"https://twitter.com/\"+this.mention;case\"instagram\":return\"https://instagram.com/\"+this.mention;case\"soundcloud\":return\"https://soundcloud.com/\"+this.mention;default:throw new Error(\"Unknown service name to point mention to: \"+this.serviceName)}},t.prototype.getAnchorText=function(){return\"@\"+this.mention},t.prototype.getCssClassSuffixes=function(){var t=e.prototype.getCssClassSuffixes.call(this),r=this.getServiceName();return r&&t.push(r),t},t}(Te),Ie=function(e){function t(t){var r=e.call(this,t)||this;return r.number=\"\",r.plusSign=!1,r.number=t.number,r.plusSign=t.plusSign,r}return Re(t,e),t.prototype.getType=function(){return\"phone\"},t.prototype.getPhoneNumber=function(){return this.number},t.prototype.getNumber=function(){return this.getPhoneNumber()},t.prototype.getAnchorHref=function(){return\"tel:\"+(this.plusSign?\"+\":\"\")+this.number},t.prototype.getAnchorText=function(){return this.matchedText},t}(Te),Oe=function(e){function t(t){var r=e.call(this,t)||this;return r.url=\"\",r.urlMatchType=\"scheme\",r.protocolUrlMatch=!1,r.protocolRelativeMatch=!1,r.stripPrefix={scheme:!0,www:!0},r.stripTrailingSlash=!0,r.decodePercentEncoding=!0,r.schemePrefixRegex=/^(https?:\\/\\/)?/i,r.wwwPrefixRegex=/^(https?:\\/\\/)?(www\\.)?/i,r.protocolRelativeRegex=/^\\/\\//,r.protocolPrepended=!1,r.urlMatchType=t.urlMatchType,r.url=t.url,r.protocolUrlMatch=t.protocolUrlMatch,r.protocolRelativeMatch=t.protocolRelativeMatch,r.stripPrefix=t.stripPrefix,r.stripTrailingSlash=t.stripTrailingSlash,r.decodePercentEncoding=t.decodePercentEncoding,r}return Re(t,e),t.prototype.getType=function(){return\"url\"},t.prototype.getUrlMatchType=function(){return this.urlMatchType},t.prototype.getUrl=function(){var e=this.url;return this.protocolRelativeMatch||this.protocolUrlMatch||this.protocolPrepended||(e=this.url=\"http://\"+e,this.protocolPrepended=!0),e},t.prototype.getAnchorHref=function(){return this.getUrl().replace(/&/g,\"&\")},t.prototype.getAnchorText=function(){var e=this.getMatchedText();return this.protocolRelativeMatch&&(e=this.stripProtocolRelativePrefix(e)),this.stripPrefix.scheme&&(e=this.stripSchemePrefix(e)),this.stripPrefix.www&&(e=this.stripWwwPrefix(e)),this.stripTrailingSlash&&(e=this.removeTrailingSlash(e)),this.decodePercentEncoding&&(e=this.removePercentEncoding(e)),e},t.prototype.stripSchemePrefix=function(e){return e.replace(this.schemePrefixRegex,\"\")},t.prototype.stripWwwPrefix=function(e){return e.replace(this.wwwPrefixRegex,\"$1\")},t.prototype.stripProtocolRelativePrefix=function(e){return e.replace(this.protocolRelativeRegex,\"\")},t.prototype.removeTrailingSlash=function(e){return\"/\"===e.charAt(e.length-1)&&(e=e.slice(0,-1)),e},t.prototype.removePercentEncoding=function(e){var t=e.replace(/%22/gi,\""\").replace(/%26/gi,\"&\").replace(/%27/gi,\"'\").replace(/%3C/gi,\"<\").replace(/%3E/gi,\">\");try{return decodeURIComponent(t)}catch(e){return t}},t}(Te),Ue=function(e){this.__jsduckDummyDocProp=null,this.tagBuilder=e.tagBuilder},He=/[A-Za-z]/,Ve=/[0-9]/,Ge=/\\s/,$e=/['\"]/,Ze=/[\\x00-\\x1F\\x7F]/,We=/A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B4\\u08B6-\\u08BD\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FD5\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7AE\\uA7B0-\\uA7B7\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB65\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC/.source,Je=We+/\\u00a9\\u00ae\\u2000-\\u3300\\ud83c\\ud000-\\udfff\\ud83d\\ud000-\\udfff\\ud83e\\ud000-\\udfff/.source+/\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065F\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u08D4-\\u08E1\\u08E3-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C03\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0D01-\\u0D03\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D82\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EB9\\u0EBB\\u0EBC\\u0EC8-\\u0ECD\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F3E\\u0F3F\\u0F71-\\u0F84\\u0F86\\u0F87\\u0F8D-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102B-\\u103E\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F\\u109A-\\u109D\\u135D-\\u135F\\u1712-\\u1714\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180D\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ABE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF2-\\u1CF4\\u1CF8\\u1CF9\\u1DC0-\\u1DF5\\u1DFB-\\u1DFF\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA926-\\uA92D\\uA947-\\uA953\\uA980-\\uA983\\uA9B3-\\uA9C0\\uA9E5\\uAA29-\\uAA36\\uAA43\\uAA4C\\uAA4D\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAEB-\\uAAEF\\uAAF5\\uAAF6\\uABE3-\\uABEA\\uABEC\\uABED\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE2F/.source,Ye=/0-9\\u0660-\\u0669\\u06F0-\\u06F9\\u07C0-\\u07C9\\u0966-\\u096F\\u09E6-\\u09EF\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0BE6-\\u0BEF\\u0C66-\\u0C6F\\u0CE6-\\u0CEF\\u0D66-\\u0D6F\\u0DE6-\\u0DEF\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F29\\u1040-\\u1049\\u1090-\\u1099\\u17E0-\\u17E9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19D9\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1B50-\\u1B59\\u1BB0-\\u1BB9\\u1C40-\\u1C49\\u1C50-\\u1C59\\uA620-\\uA629\\uA8D0-\\uA8D9\\uA900-\\uA909\\uA9D0-\\uA9D9\\uA9F0-\\uA9F9\\uAA50-\\uAA59\\uABF0-\\uABF9\\uFF10-\\uFF19/.source,Ke=Je+Ye,Qe=Je+Ye,Xe=\"(?:[\"+Ye+\"]{1,3}\\\\.){3}[\"+Ye+\"]{1,3}\",et=\"[\"+Qe+\"](?:[\"+Qe+\"\\\\-]{0,61}[\"+Qe+\"])?\",tt=function(e){return\"(?=(\"+et+\"))\\\\\"+e},rt=function(e){return\"(?:\"+tt(e)+\"(?:\\\\.\"+tt(e+1)+\"){0,126}|\"+Xe+\")\"},nt=new RegExp(\"[\"+Qe+\"]\"),ot=/(?:xn--vermgensberatung-pwb|xn--vermgensberater-ctb|xn--clchc0ea0b2g2a9gcd|xn--w4r85el8fhu5dnra|northwesternmutual|travelersinsurance|vermögensberatung|xn--3oq18vl8pn36a|xn--5su34j936bgsg|xn--bck1b9a5dre4c|xn--mgbai9azgqp6j|xn--mgberp4a5d4ar|xn--xkc2dl3a5ee0h|vermögensberater|xn--fzys8d69uvgm|xn--mgba7c0bbn0a|xn--xkc2al3hye2a|americanexpress|kerryproperties|sandvikcoromant|xn--i1b6b1a6a2e|xn--kcrx77d1x4a|xn--lgbbat1ad8j|xn--mgba3a4f16a|xn--mgbaakc7dvf|xn--mgbc0a9azcg|xn--nqv7fs00ema|afamilycompany|americanfamily|bananarepublic|cancerresearch|cookingchannel|kerrylogistics|weatherchannel|xn--54b7fta0cc|xn--6qq986b3xl|xn--80aqecdr1a|xn--b4w605ferd|xn--fiq228c5hs|xn--h2breg3eve|xn--jlq61u9w7b|xn--mgba3a3ejt|xn--mgbaam7a8h|xn--mgbayh7gpa|xn--mgbb9fbpob|xn--mgbbh1a71e|xn--mgbca7dzdo|xn--mgbi4ecexp|xn--mgbx4cd0ab|xn--rvc1e0am3e|international|lifeinsurance|spreadbetting|travelchannel|wolterskluwer|xn--eckvdtc9d|xn--fpcrj9c3d|xn--fzc2c9e2c|xn--h2brj9c8c|xn--tiq49xqyj|xn--yfro4i67o|xn--ygbi2ammx|construction|lplfinancial|scholarships|versicherung|xn--3e0b707e|xn--45br5cyl|xn--80adxhks|xn--80asehdb|xn--8y0a063a|xn--gckr3f0f|xn--mgb9awbf|xn--mgbab2bd|xn--mgbgu82a|xn--mgbpl2fh|xn--mgbt3dhd|xn--mk1bu44c|xn--ngbc5azd|xn--ngbe9e0a|xn--ogbpf8fl|xn--qcka1pmc|accountants|barclaycard|blackfriday|blockbuster|bridgestone|calvinklein|contractors|creditunion|engineering|enterprises|foodnetwork|investments|kerryhotels|lamborghini|motorcycles|olayangroup|photography|playstation|productions|progressive|redumbrella|rightathome|williamhill|xn--11b4c3d|xn--1ck2e1b|xn--1qqw23a|xn--2scrj9c|xn--3bst00m|xn--3ds443g|xn--3hcrj9c|xn--42c2d9a|xn--45brj9c|xn--55qw42g|xn--6frz82g|xn--80ao21a|xn--9krt00a|xn--cck2b3b|xn--czr694b|xn--d1acj3b|xn--efvy88h|xn--estv75g|xn--fct429k|xn--fjq720a|xn--flw351e|xn--g2xx48c|xn--gecrj9c|xn--gk3at1e|xn--h2brj9c|xn--hxt814e|xn--imr513n|xn--j6w193g|xn--jvr189m|xn--kprw13d|xn--kpry57d|xn--kpu716f|xn--mgbbh1a|xn--mgbtx2b|xn--mix891f|xn--nyqy26a|xn--otu796d|xn--pbt977c|xn--pgbs0dh|xn--q9jyb4c|xn--rhqv96g|xn--rovu88b|xn--s9brj9c|xn--ses554g|xn--t60b56a|xn--vuq861b|xn--w4rs40l|xn--xhq521b|xn--zfr164b|சிங்கப்பூர்|accountant|apartments|associates|basketball|bnpparibas|boehringer|capitalone|consulting|creditcard|cuisinella|eurovision|extraspace|foundation|healthcare|immobilien|industries|management|mitsubishi|nationwide|newholland|nextdirect|onyourside|properties|protection|prudential|realestate|republican|restaurant|schaeffler|swiftcover|tatamotors|technology|telefonica|university|vistaprint|vlaanderen|volkswagen|xn--30rr7y|xn--3pxu8k|xn--45q11c|xn--4gbrim|xn--55qx5d|xn--5tzm5g|xn--80aswg|xn--90a3ac|xn--9dbq2a|xn--9et52u|xn--c2br7g|xn--cg4bki|xn--czrs0t|xn--czru2d|xn--fiq64b|xn--fiqs8s|xn--fiqz9s|xn--io0a7i|xn--kput3i|xn--mxtq1m|xn--o3cw4h|xn--pssy2u|xn--unup4y|xn--wgbh1c|xn--wgbl6a|xn--y9a3aq|accenture|alfaromeo|allfinanz|amsterdam|analytics|aquarelle|barcelona|bloomberg|christmas|community|directory|education|equipment|fairwinds|financial|firestone|fresenius|frontdoor|fujixerox|furniture|goldpoint|hisamitsu|homedepot|homegoods|homesense|honeywell|institute|insurance|kuokgroup|ladbrokes|lancaster|landrover|lifestyle|marketing|marshalls|melbourne|microsoft|panasonic|passagens|pramerica|richardli|scjohnson|shangrila|solutions|statebank|statefarm|stockholm|travelers|vacations|xn--90ais|xn--c1avg|xn--d1alf|xn--e1a4c|xn--fhbei|xn--j1aef|xn--j1amh|xn--l1acc|xn--ngbrx|xn--nqv7f|xn--p1acf|xn--tckwe|xn--vhquv|yodobashi|abudhabi|airforce|allstate|attorney|barclays|barefoot|bargains|baseball|boutique|bradesco|broadway|brussels|budapest|builders|business|capetown|catering|catholic|chrysler|cipriani|cityeats|cleaning|clinique|clothing|commbank|computer|delivery|deloitte|democrat|diamonds|discount|discover|download|engineer|ericsson|esurance|etisalat|everbank|exchange|feedback|fidelity|firmdale|football|frontier|goodyear|grainger|graphics|guardian|hdfcbank|helsinki|holdings|hospital|infiniti|ipiranga|istanbul|jpmorgan|lighting|lundbeck|marriott|maserati|mckinsey|memorial|merckmsd|mortgage|movistar|observer|partners|pharmacy|pictures|plumbing|property|redstone|reliance|saarland|samsclub|security|services|shopping|showtime|softbank|software|stcgroup|supplies|symantec|training|uconnect|vanguard|ventures|verisign|woodside|xn--90ae|xn--node|xn--p1ai|xn--qxam|yokohama|السعودية|abogado|academy|agakhan|alibaba|android|athleta|auction|audible|auspost|avianca|banamex|bauhaus|bentley|bestbuy|booking|brother|bugatti|capital|caravan|careers|cartier|channel|charity|chintai|citadel|clubmed|college|cologne|comcast|company|compare|contact|cooking|corsica|country|coupons|courses|cricket|cruises|dentist|digital|domains|exposed|express|farmers|fashion|ferrari|ferrero|finance|fishing|fitness|flights|florist|flowers|forsale|frogans|fujitsu|gallery|genting|godaddy|grocery|guitars|hamburg|hangout|hitachi|holiday|hosting|hoteles|hotmail|hyundai|iselect|ismaili|jewelry|juniper|kitchen|komatsu|lacaixa|lancome|lanxess|lasalle|latrobe|leclerc|liaison|limited|lincoln|markets|metlife|monster|netbank|netflix|network|neustar|okinawa|oldnavy|organic|origins|philips|pioneer|politie|realtor|recipes|rentals|reviews|rexroth|samsung|sandvik|schmidt|schwarz|science|shiksha|shriram|singles|staples|starhub|storage|support|surgery|systems|temasek|theater|theatre|tickets|tiffany|toshiba|trading|walmart|wanggou|watches|weather|website|wedding|whoswho|windows|winners|xfinity|yamaxun|youtube|zuerich|католик|اتصالات|الجزائر|العليان|پاکستان|كاثوليك|موبايلي|இந்தியா|abarth|abbott|abbvie|active|africa|agency|airbus|airtel|alipay|alsace|alstom|anquan|aramco|author|bayern|beauty|berlin|bharti|blanco|bostik|boston|broker|camera|career|caseih|casino|center|chanel|chrome|church|circle|claims|clinic|coffee|comsec|condos|coupon|credit|cruise|dating|datsun|dealer|degree|dental|design|direct|doctor|dunlop|dupont|durban|emerck|energy|estate|events|expert|family|flickr|futbol|gallup|garden|george|giving|global|google|gratis|health|hermes|hiphop|hockey|hotels|hughes|imamat|insure|intuit|jaguar|joburg|juegos|kaufen|kinder|kindle|kosher|lancia|latino|lawyer|lefrak|living|locker|london|luxury|madrid|maison|makeup|market|mattel|mobile|mobily|monash|mormon|moscow|museum|mutual|nagoya|natura|nissan|nissay|norton|nowruz|office|olayan|online|oracle|orange|otsuka|pfizer|photos|physio|piaget|pictet|quebec|racing|realty|reisen|repair|report|review|rocher|rogers|ryukyu|safety|sakura|sanofi|school|schule|search|secure|select|shouji|soccer|social|stream|studio|supply|suzuki|swatch|sydney|taipei|taobao|target|tattoo|tennis|tienda|tjmaxx|tkmaxx|toyota|travel|unicom|viajes|viking|villas|virgin|vision|voting|voyage|vuelos|walter|warman|webcam|xihuan|yachts|yandex|zappos|москва|онлайн|ابوظبي|ارامكو|الاردن|المغرب|امارات|فلسطين|مليسيا|भारतम्|இலங்கை|ファッション|actor|adult|aetna|amfam|amica|apple|archi|audio|autos|azure|baidu|beats|bible|bingo|black|boats|bosch|build|canon|cards|chase|cheap|cisco|citic|click|cloud|coach|codes|crown|cymru|dabur|dance|deals|delta|dodge|drive|dubai|earth|edeka|email|epost|epson|faith|fedex|final|forex|forum|gallo|games|gifts|gives|glade|glass|globo|gmail|green|gripe|group|gucci|guide|homes|honda|horse|house|hyatt|ikano|intel|irish|iveco|jetzt|koeln|kyoto|lamer|lease|legal|lexus|lilly|linde|lipsy|lixil|loans|locus|lotte|lotto|lupin|macys|mango|media|miami|money|mopar|movie|nadex|nexus|nikon|ninja|nokia|nowtv|omega|osaka|paris|parts|party|phone|photo|pizza|place|poker|praxi|press|prime|promo|quest|radio|rehab|reise|ricoh|rocks|rodeo|rugby|salon|sener|seven|sharp|shell|shoes|skype|sling|smart|smile|solar|space|sport|stada|store|study|style|sucks|swiss|tatar|tires|tirol|tmall|today|tokyo|tools|toray|total|tours|trade|trust|tunes|tushu|ubank|vegas|video|vodka|volvo|wales|watch|weber|weibo|works|world|xerox|yahoo|zippo|ایران|بازار|بھارت|سودان|سورية|همراه|भारोत|संगठन|বাংলা|భారత్|ഭാരതം|嘉里大酒店|aarp|able|adac|aero|aigo|akdn|ally|amex|arab|army|arpa|arte|asda|asia|audi|auto|baby|band|bank|bbva|beer|best|bike|bing|blog|blue|bofa|bond|book|buzz|cafe|call|camp|care|cars|casa|case|cash|cbre|cern|chat|citi|city|club|cool|coop|cyou|data|date|dclk|deal|dell|desi|diet|dish|docs|doha|duck|duns|dvag|erni|fage|fail|fans|farm|fast|fiat|fido|film|fire|fish|flir|food|ford|free|fund|game|gbiz|gent|ggee|gift|gmbh|gold|golf|goog|guge|guru|hair|haus|hdfc|help|here|hgtv|host|hsbc|icbc|ieee|imdb|immo|info|itau|java|jeep|jobs|jprs|kddi|kiwi|kpmg|kred|land|lego|lgbt|lidl|life|like|limo|link|live|loan|loft|love|ltda|luxe|maif|meet|meme|menu|mini|mint|mobi|moda|moto|name|navy|news|next|nico|nike|ollo|open|page|pars|pccw|pics|ping|pink|play|plus|pohl|porn|post|prod|prof|qpon|raid|read|reit|rent|rest|rich|rmit|room|rsvp|ruhr|safe|sale|sarl|save|saxo|scor|scot|seat|seek|sexy|shaw|shia|shop|show|silk|sina|site|skin|sncf|sohu|song|sony|spot|star|surf|talk|taxi|team|tech|teva|tiaa|tips|town|toys|tube|vana|visa|viva|vivo|vote|voto|wang|weir|wien|wiki|wine|work|xbox|yoga|zara|zero|zone|дети|сайт|بارت|بيتك|ڀارت|تونس|شبكة|عراق|عمان|موقع|भारत|ভারত|ভাৰত|ਭਾਰਤ|ભારત|ଭାରତ|ಭಾರತ|ලංකා|グーグル|クラウド|ポイント|大众汽车|组织机构|電訊盈科|香格里拉|aaa|abb|abc|aco|ads|aeg|afl|aig|anz|aol|app|art|aws|axa|bar|bbc|bbt|bcg|bcn|bet|bid|bio|biz|bms|bmw|bnl|bom|boo|bot|box|buy|bzh|cab|cal|cam|car|cat|cba|cbn|cbs|ceb|ceo|cfa|cfd|com|crs|csc|dad|day|dds|dev|dhl|diy|dnp|dog|dot|dtv|dvr|eat|eco|edu|esq|eus|fan|fit|fly|foo|fox|frl|ftr|fun|fyi|gal|gap|gdn|gea|gle|gmo|gmx|goo|gop|got|gov|hbo|hiv|hkt|hot|how|ibm|ice|icu|ifm|inc|ing|ink|int|ist|itv|jcb|jcp|jio|jll|jmp|jnj|jot|joy|kfh|kia|kim|kpn|krd|lat|law|lds|llc|lol|lpl|ltd|man|map|mba|med|men|mil|mit|mlb|mls|mma|moe|moi|mom|mov|msd|mtn|mtr|nab|nba|nec|net|new|nfl|ngo|nhk|now|nra|nrw|ntt|nyc|obi|off|one|ong|onl|ooo|org|ott|ovh|pay|pet|phd|pid|pin|pnc|pro|pru|pub|pwc|qvc|red|ren|ril|rio|rip|run|rwe|sap|sas|sbi|sbs|sca|scb|ses|sew|sex|sfr|ski|sky|soy|srl|srt|stc|tab|tax|tci|tdk|tel|thd|tjx|top|trv|tui|tvs|ubs|uno|uol|ups|vet|vig|vin|vip|wed|win|wme|wow|wtc|wtf|xin|xxx|xyz|you|yun|zip|бел|ком|қаз|мкд|мон|орг|рус|срб|укр|հայ|קום|عرب|قطر|كوم|مصر|कॉम|नेट|คอม|ไทย|ストア|セール|みんな|中文网|天主教|我爱你|新加坡|淡马锡|诺基亚|飞利浦|ac|ad|ae|af|ag|ai|al|am|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cw|cx|cy|cz|de|dj|dk|dm|do|dz|ec|ee|eg|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|za|zm|zw|ελ|бг|ею|рф|გე|닷넷|닷컴|삼성|한국|コム|世界|中信|中国|中國|企业|佛山|信息|健康|八卦|公司|公益|台湾|台灣|商城|商店|商标|嘉里|在线|大拿|娱乐|家電|工行|广东|微博|慈善|手机|手表|招聘|政务|政府|新闻|时尚|書籍|机构|游戏|澳門|点看|珠宝|移动|网址|网店|网站|网络|联通|谷歌|购物|通販|集团|食品|餐厅|香港)/,st=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.localPartCharRegex=new RegExp(\"[\"+Qe+\"!#$%&'*+/=?^_`{|}~-]\"),t.strictTldRegex=new RegExp(\"^\"+ot.source+\"$\"),t}return Re(t,e),t.prototype.parseMatches=function(e){for(var t=this.tagBuilder,r=this.localPartCharRegex,n=this.strictTldRegex,o=[],s=e.length,i=new it,a={m:\"a\",a:\"i\",i:\"l\",l:\"t\",t:\"o\",o:\":\"},u=0,l=0,c=i;u<s;){var p=e.charAt(u);switch(l){case 0:h(p);break;case 1:f(e.charAt(u-1),p);break;case 2:g(p);break;case 3:d(p);break;case 4:m(p);break;case 5:b(p);break;case 6:v(p);break;case 7:k(p);break;default:Fe(l)}u++}return x(),o;function h(e){\"m\"===e?A(1):r.test(e)&&A()}function f(e,t){\":\"===e?r.test(t)?(l=2,c=new it(Ne({},c,{hasMailtoPrefix:!0}))):y():a[e]===t||(r.test(t)?l=2:\".\"===t?l=3:\"@\"===t?l=4:y())}function g(e){\".\"===e?l=3:\"@\"===e?l=4:r.test(e)||y()}function d(e){\".\"===e?y():\"@\"===e?y():r.test(e)?l=2:y()}function m(e){nt.test(e)?l=5:y()}function b(e){\".\"===e?l=7:\"-\"===e?l=6:nt.test(e)||x()}function v(e){\"-\"===e||\".\"===e?x():nt.test(e)?l=5:x()}function k(e){\".\"===e||\"-\"===e?x():nt.test(e)?(l=5,c=new it(Ne({},c,{hasDomainDot:!0}))):x()}function A(e){void 0===e&&(e=2),l=e,c=new it({idx:u})}function y(){l=0,c=i}function x(){if(c.hasDomainDot){var r=e.slice(c.idx,u);/[-.]$/.test(r)&&(r=r.slice(0,-1));var s=c.hasMailtoPrefix?r.slice(\"mailto:\".length):r;(function(e){var t=(e.split(\".\").pop()||\"\").toLowerCase();return n.test(t)})(s)&&o.push(new ze({tagBuilder:t,matchedText:r,offset:c.idx,email:s}))}y()}},t}(Ue),it=function(e){void 0===e&&(e={}),this.idx=void 0!==e.idx?e.idx:-1,this.hasMailtoPrefix=!!e.hasMailtoPrefix,this.hasDomainDot=!!e.hasDomainDot},at=function(){function e(){}return e.isValid=function(e,t){return!(t&&!this.isValidUriScheme(t)||this.urlMatchDoesNotHaveProtocolOrDot(e,t)||this.urlMatchDoesNotHaveAtLeastOneWordChar(e,t)&&!this.isValidIpAddress(e)||this.containsMultipleDots(e))},e.isValidIpAddress=function(e){var t=new RegExp(this.hasFullProtocolRegex.source+this.ipRegex.source);return null!==e.match(t)},e.containsMultipleDots=function(e){var t=e;return this.hasFullProtocolRegex.test(e)&&(t=e.split(\"://\")[1]),t.split(\"/\")[0].indexOf(\"..\")>-1},e.isValidUriScheme=function(e){var t=e.match(this.uriSchemeRegex),r=t&&t[0].toLowerCase();return\"javascript:\"!==r&&\"vbscript:\"!==r},e.urlMatchDoesNotHaveProtocolOrDot=function(e,t){return!(!e||t&&this.hasFullProtocolRegex.test(t)||-1!==e.indexOf(\".\"))},e.urlMatchDoesNotHaveAtLeastOneWordChar=function(e,t){return!(!e||!t)&&!this.hasWordCharAfterProtocolRegex.test(e)},e.hasFullProtocolRegex=/^[A-Za-z][-.+A-Za-z0-9]*:\\/\\//,e.uriSchemeRegex=/^[A-Za-z][-.+A-Za-z0-9]*:/,e.hasWordCharAfterProtocolRegex=new RegExp(\":[^\\\\s]*?[\"+We+\"]\"),e.ipRegex=/[0-9][0-9]?[0-9]?\\.[0-9][0-9]?[0-9]?\\.[0-9][0-9]?[0-9]?\\.[0-9][0-9]?[0-9]?(:[0-9]*)?\\/?$/,e}(),ut=function(e){function t(t){var r,n=e.call(this,t)||this;return n.stripPrefix={scheme:!0,www:!0},n.stripTrailingSlash=!0,n.decodePercentEncoding=!0,n.matcherRegex=(r=new RegExp(\"[/?#](?:[\"+Qe+\"\\\\-+&@#/%=~_()|'$*\\\\[\\\\]?!:,.;✓]*[\"+Qe+\"\\\\-+&@#/%=~_()|'$*\\\\[\\\\]✓])?\"),new RegExp([\"(?:\",\"(\",/(?:[A-Za-z][-.+A-Za-z0-9]{0,63}:(?![A-Za-z][-.+A-Za-z0-9]{0,63}:\\/\\/)(?!\\d+\\/?)(?:\\/\\/)?)/.source,rt(2),\")\",\"|\",\"(\",\"(//)?\",/(?:www\\.)/.source,rt(6),\")\",\"|\",\"(\",\"(//)?\",rt(10)+\"\\\\.\",ot.source,\"(?![-\"+Ke+\"])\",\")\",\")\",\"(?::[0-9]+)?\",\"(?:\"+r.source+\")?\"].join(\"\"),\"gi\")),n.wordCharRegExp=new RegExp(\"[\"+Qe+\"]\"),n.stripPrefix=t.stripPrefix,n.stripTrailingSlash=t.stripTrailingSlash,n.decodePercentEncoding=t.decodePercentEncoding,n}return Re(t,e),t.prototype.parseMatches=function(e){for(var t,r=this.matcherRegex,n=this.stripPrefix,o=this.stripTrailingSlash,s=this.decodePercentEncoding,i=this.tagBuilder,a=[],u=function(){var r=t[0],u=t[1],c=t[4],p=t[5],h=t[9],f=t.index,g=p||h,d=e.charAt(f-1);if(!at.isValid(r,u))return\"continue\";if(f>0&&\"@\"===d)return\"continue\";if(f>0&&g&&l.wordCharRegExp.test(d))return\"continue\";if(/\\?$/.test(r)&&(r=r.substr(0,r.length-1)),l.matchHasUnbalancedClosingParen(r))r=r.substr(0,r.length-1);else{var m=l.matchHasInvalidCharAfterTld(r,u);m>-1&&(r=r.substr(0,m))}var b=[\"http://\",\"https://\"].find(function(e){return!!u&&-1!==u.indexOf(e)});if(b){var v=r.indexOf(b);r=r.substr(v),u=u.substr(v),f+=v}var k=u?\"scheme\":c?\"www\":\"tld\",A=!!u;a.push(new Oe({tagBuilder:i,matchedText:r,offset:f,urlMatchType:k,url:r,protocolUrlMatch:A,protocolRelativeMatch:!!g,stripPrefix:n,stripTrailingSlash:o,decodePercentEncoding:s}))},l=this;null!==(t=r.exec(e));)u();return a},t.prototype.matchHasUnbalancedClosingParen=function(e){var t,r=e.charAt(e.length-1);if(\")\"===r)t=\"(\";else{if(\"]\"!==r)return!1;t=\"[\"}for(var n=0,o=0,s=e.length-1;o<s;o++){var i=e.charAt(o);i===t?n++:i===r&&(n=Math.max(n-1,0))}return 0===n},t.prototype.matchHasInvalidCharAfterTld=function(e,t){if(!e)return-1;var r=0;t&&(r=e.indexOf(\":\"),e=e.slice(r));var n=new RegExp(\"^((.?//)?[-.\"+Qe+\"]*[-\"+Qe+\"]\\\\.[-\"+Qe+\"]+)\").exec(e);return null===n?-1:(r+=n[1].length,e=e.slice(n[1].length),/^[^-.A-Za-z0-9:\\/?#]/.test(e)?r:-1)},t}(Ue),lt=function(e){function t(t){var r=e.call(this,t)||this;return r.serviceName=\"twitter\",r.matcherRegex=new RegExp(\"#[_\"+Qe+\"]{1,139}(?![_\"+Qe+\"])\",\"g\"),r.nonWordCharRegex=new RegExp(\"[^\"+Qe+\"]\"),r.serviceName=t.serviceName,r}return Re(t,e),t.prototype.parseMatches=function(e){for(var t,r=this.matcherRegex,n=this.nonWordCharRegex,o=this.serviceName,s=this.tagBuilder,i=[];null!==(t=r.exec(e));){var a=t.index,u=e.charAt(a-1);if(0===a||n.test(u)){var l=t[0],c=t[0].slice(1);i.push(new Pe({tagBuilder:s,matchedText:l,offset:a,serviceName:o,hashtag:c}))}}return i},t}(Ue),ct=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.matcherRegex=/(?:(?:(?:(\\+)?\\d{1,3}[-\\040.]?)?\\(?\\d{3}\\)?[-\\040.]?\\d{3}[-\\040.]?\\d{4})|(?:(\\+)(?:9[976]\\d|8[987530]\\d|6[987]\\d|5[90]\\d|42\\d|3[875]\\d|2[98654321]\\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|4[987654310]|3[9643210]|2[70]|7|1)[-\\040.]?(?:\\d[-\\040.]?){6,12}\\d+))([,;]+[0-9]+#?)*/g,t}return Re(t,e),t.prototype.parseMatches=function(e){for(var t,r=this.matcherRegex,n=this.tagBuilder,o=[];null!==(t=r.exec(e));){var s=t[0],i=s.replace(/[^0-9,;#]/g,\"\"),a=!(!t[1]&&!t[2]),u=0==t.index?\"\":e.substr(t.index-1,1),l=e.substr(t.index+s.length,1),c=!u.match(/\\d/)&&!l.match(/\\d/);this.testMatch(t[3])&&this.testMatch(s)&&c&&o.push(new Ie({tagBuilder:n,matchedText:s,offset:t.index,number:i,plusSign:a}))}return o},t.prototype.testMatch=function(e){return/\\D/.test(e)},t}(Ue),pt=function(e){function t(t){var r=e.call(this,t)||this;return r.serviceName=\"twitter\",r.matcherRegexes={twitter:new RegExp(\"@[_\"+Qe+\"]{1,50}(?![_\"+Qe+\"])\",\"g\"),instagram:new RegExp(\"@[_.\"+Qe+\"]{1,30}(?![_\"+Qe+\"])\",\"g\"),soundcloud:new RegExp(\"@[-_.\"+Qe+\"]{1,50}(?![-_\"+Qe+\"])\",\"g\")},r.nonWordCharRegex=new RegExp(\"[^\"+Qe+\"]\"),r.serviceName=t.serviceName,r}return Re(t,e),t.prototype.parseMatches=function(e){var t,r=this.serviceName,n=this.matcherRegexes[this.serviceName],o=this.nonWordCharRegex,s=this.tagBuilder,i=[];if(!n)return i;for(;null!==(t=n.exec(e));){var a=t.index,u=e.charAt(a-1);if(0===a||o.test(u)){var l=t[0].replace(/\\.+$/g,\"\"),c=l.slice(1);i.push(new je({tagBuilder:s,matchedText:l,offset:a,serviceName:r,mention:c}))}}return i},t}(Ue);function ht(e,t){for(var r=t.onOpenTag,n=t.onCloseTag,o=t.onText,s=t.onComment,i=t.onDoctype,a=new ft,u=0,l=e.length,c=0,p=0,h=a;u<l;){var f=e.charAt(u);switch(c){case 0:g(f);break;case 1:d(f);break;case 2:b(f);break;case 3:m(f);break;case 4:v(f);break;case 5:k(f);break;case 6:A(f);break;case 7:y(f);break;case 8:x(f);break;case 9:w(f);break;case 10:C(f);break;case 11:E(f);break;case 12:D(f);break;case 13:_();break;case 14:B(f);break;case 15:q(f);break;case 16:F(f);break;case 17:M(f);break;case 18:S(f);break;case 19:T(f);break;case 20:L(f);break;default:Fe(c)}u++}function g(e){\"<\"===e&&N()}function d(e){\"!\"===e?c=13:\"/\"===e?(c=2,h=new ft(Ne({},h,{isClosing:!0}))):\"<\"===e?N():He.test(e)?(c=3,h=new ft(Ne({},h,{isOpening:!0}))):(c=0,h=a)}function m(e){Ge.test(e)?(h=new ft(Ne({},h,{name:P()})),c=4):\"<\"===e?N():\"/\"===e?(h=new ft(Ne({},h,{name:P()})),c=12):\">\"===e?(h=new ft(Ne({},h,{name:P()})),z()):He.test(e)||Ve.test(e)||\":\"===e||R()}function b(e){\">\"===e?R():He.test(e)?c=3:R()}function v(e){Ge.test(e)||(\"/\"===e?c=12:\">\"===e?z():\"<\"===e?N():\"=\"===e||$e.test(e)||Ze.test(e)?R():c=5)}function k(e){Ge.test(e)?c=6:\"/\"===e?c=12:\"=\"===e?c=7:\">\"===e?z():\"<\"===e?N():$e.test(e)&&R()}function A(e){Ge.test(e)||(\"/\"===e?c=12:\"=\"===e?c=7:\">\"===e?z():\"<\"===e?N():$e.test(e)?R():c=5)}function y(e){Ge.test(e)||('\"'===e?c=8:\"'\"===e?c=9:/[>=`]/.test(e)?R():\"<\"===e?N():c=10)}function x(e){'\"'===e&&(c=11)}function w(e){\"'\"===e&&(c=11)}function C(e){Ge.test(e)?c=4:\">\"===e?z():\"<\"===e&&N()}function E(e){Ge.test(e)?c=4:\"/\"===e?c=12:\">\"===e?z():\"<\"===e?N():(c=4,u--)}function D(e){\">\"===e?(h=new ft(Ne({},h,{isClosing:!0})),z()):c=4}function _(t){\"--\"===e.substr(u,2)?(u+=2,h=new ft(Ne({},h,{type:\"comment\"})),c=14):\"DOCTYPE\"===e.substr(u,7).toUpperCase()?(u+=7,h=new ft(Ne({},h,{type:\"doctype\"})),c=20):R()}function B(e){\"-\"===e?c=15:\">\"===e?R():c=16}function q(e){\"-\"===e?c=18:\">\"===e?R():c=16}function F(e){\"-\"===e&&(c=17)}function M(e){c=\"-\"===e?18:16}function S(e){\">\"===e?z():\"!\"===e?c=19:\"-\"===e||(c=16)}function T(e){\"-\"===e?c=17:\">\"===e?z():c=16}function L(e){\">\"===e?z():\"<\"===e&&N()}function R(){c=0,h=a}function N(){c=1,h=new ft({idx:u})}function z(){var t=e.slice(p,h.idx);t&&o(t,p),\"comment\"===h.type?s(h.idx):\"doctype\"===h.type?i(h.idx):(h.isOpening&&r(h.name,h.idx),h.isClosing&&n(h.name,h.idx)),R(),p=u+1}function P(){var t=h.idx+(h.isClosing?2:1);return e.slice(t,u).toLowerCase()}p<u&&function(){var t=e.slice(p,u);o(t,p),p=u+1}()}var ft=function(e){void 0===e&&(e={}),this.idx=void 0!==e.idx?e.idx:-1,this.type=e.type||\"tag\",this.name=e.name||\"\",this.isOpening=!!e.isOpening,this.isClosing=!!e.isClosing},gt=function(){function e(t){void 0===t&&(t={}),this.version=e.version,this.urls={},this.email=!0,this.phone=!0,this.hashtag=!1,this.mention=!1,this.newWindow=!0,this.stripPrefix={scheme:!0,www:!0},this.stripTrailingSlash=!0,this.decodePercentEncoding=!0,this.truncate={length:0,location:\"end\"},this.className=\"\",this.replaceFn=null,this.context=void 0,this.matchers=null,this.tagBuilder=null,this.urls=this.normalizeUrlsCfg(t.urls),this.email=\"boolean\"==typeof t.email?t.email:this.email,this.phone=\"boolean\"==typeof t.phone?t.phone:this.phone,this.hashtag=t.hashtag||this.hashtag,this.mention=t.mention||this.mention,this.newWindow=\"boolean\"==typeof t.newWindow?t.newWindow:this.newWindow,this.stripPrefix=this.normalizeStripPrefixCfg(t.stripPrefix),this.stripTrailingSlash=\"boolean\"==typeof t.stripTrailingSlash?t.stripTrailingSlash:this.stripTrailingSlash,this.decodePercentEncoding=\"boolean\"==typeof t.decodePercentEncoding?t.decodePercentEncoding:this.decodePercentEncoding;var r=this.mention;if(!1!==r&&\"twitter\"!==r&&\"instagram\"!==r&&\"soundcloud\"!==r)throw new Error(\"invalid `mention` cfg - see docs\");var n=this.hashtag;if(!1!==n&&\"twitter\"!==n&&\"facebook\"!==n&&\"instagram\"!==n)throw new Error(\"invalid `hashtag` cfg - see docs\");this.truncate=this.normalizeTruncateCfg(t.truncate),this.className=t.className||this.className,this.replaceFn=t.replaceFn||this.replaceFn,this.context=t.context||this}return e.link=function(t,r){return new e(r).link(t)},e.parse=function(t,r){return new e(r).parse(t)},e.prototype.normalizeUrlsCfg=function(e){return null==e&&(e=!0),\"boolean\"==typeof e?{schemeMatches:e,wwwMatches:e,tldMatches:e}:{schemeMatches:\"boolean\"!=typeof e.schemeMatches||e.schemeMatches,wwwMatches:\"boolean\"!=typeof e.wwwMatches||e.wwwMatches,tldMatches:\"boolean\"!=typeof e.tldMatches||e.tldMatches}},e.prototype.normalizeStripPrefixCfg=function(e){return null==e&&(e=!0),\"boolean\"==typeof e?{scheme:e,www:e}:{scheme:\"boolean\"!=typeof e.scheme||e.scheme,www:\"boolean\"!=typeof e.www||e.www}},e.prototype.normalizeTruncateCfg=function(e){return\"number\"==typeof e?{length:e,location:\"end\"}:function(e,t){for(var r in t)t.hasOwnProperty(r)&&void 0===e[r]&&(e[r]=t[r]);return e}(e||{},{length:Number.POSITIVE_INFINITY,location:\"end\"})},e.prototype.parse=function(e){var t=this,r=[\"a\",\"style\",\"script\"],n=0,o=[];return ht(e,{onOpenTag:function(e){r.indexOf(e)>=0&&n++},onText:function(e,r){if(0===n){var s=function(e,t){if(!t.global)throw new Error(\"`splitRegex` must have the 'g' flag set\");for(var r,n=[],o=0;r=t.exec(e);)n.push(e.substring(o,r.index)),n.push(r[0]),o=r.index+r[0].length;return n.push(e.substring(o)),n}(e,/( | |<|<|>|>|"|"|')/gi),i=r;s.forEach(function(e,r){if(r%2==0){var n=t.parseText(e,i);o.push.apply(o,n)}i+=e.length})}},onCloseTag:function(e){r.indexOf(e)>=0&&(n=Math.max(n-1,0))},onComment:function(e){},onDoctype:function(e){}}),o=this.compactMatches(o),o=this.removeUnwantedMatches(o)},e.prototype.compactMatches=function(e){e.sort(function(e,t){return e.getOffset()-t.getOffset()});for(var t=0;t<e.length-1;t++){var r=e[t],n=r.getOffset(),o=r.getMatchedText().length,s=n+o;if(t+1<e.length){if(e[t+1].getOffset()===n){var i=e[t+1].getMatchedText().length>o?t:t+1;e.splice(i,1);continue}e[t+1].getOffset()<s&&e.splice(t+1,1)}}return e},e.prototype.removeUnwantedMatches=function(e){return this.hashtag||qe(e,function(e){return\"hashtag\"===e.getType()}),this.email||qe(e,function(e){return\"email\"===e.getType()}),this.phone||qe(e,function(e){return\"phone\"===e.getType()}),this.mention||qe(e,function(e){return\"mention\"===e.getType()}),this.urls.schemeMatches||qe(e,function(e){return\"url\"===e.getType()&&\"scheme\"===e.getUrlMatchType()}),this.urls.wwwMatches||qe(e,function(e){return\"url\"===e.getType()&&\"www\"===e.getUrlMatchType()}),this.urls.tldMatches||qe(e,function(e){return\"url\"===e.getType()&&\"tld\"===e.getUrlMatchType()}),e},e.prototype.parseText=function(e,t){void 0===t&&(t=0),t=t||0;for(var r=this.getMatchers(),n=[],o=0,s=r.length;o<s;o++){for(var i=r[o].parseMatches(e),a=0,u=i.length;a<u;a++)i[a].setOffset(t+i[a].getOffset());n.push.apply(n,i)}return n},e.prototype.link=function(e){if(!e)return\"\";for(var t=this.parse(e),r=[],n=0,o=0,s=t.length;o<s;o++){var i=t[o];r.push(e.substring(n,i.getOffset())),r.push(this.createMatchReturnVal(i)),n=i.getOffset()+i.getMatchedText().length}return r.push(e.substring(n)),r.join(\"\")},e.prototype.createMatchReturnVal=function(e){var t;return this.replaceFn&&(t=this.replaceFn.call(this.context,e)),\"string\"==typeof t?t:!1===t?e.getMatchedText():t instanceof Me?t.toAnchorString():e.buildTag().toAnchorString()},e.prototype.getMatchers=function(){if(this.matchers)return this.matchers;var e=this.getTagBuilder(),t=[new lt({tagBuilder:e,serviceName:this.hashtag}),new st({tagBuilder:e}),new ct({tagBuilder:e}),new pt({tagBuilder:e,serviceName:this.mention}),new ut({tagBuilder:e,stripPrefix:this.stripPrefix,stripTrailingSlash:this.stripTrailingSlash,decodePercentEncoding:this.decodePercentEncoding})];return this.matchers=t},e.prototype.getTagBuilder=function(){var e=this.tagBuilder;return e||(e=this.tagBuilder=new Se({newWindow:this.newWindow,truncate:this.truncate,className:this.className})),e},e.version=\"3.11.0\",e.AnchorTagBuilder=Se,e.HtmlTag=Me,e.matcher={Email:st,Hashtag:lt,Matcher:Ue,Mention:pt,Phone:ct,Url:ut},e.match={Email:ze,Hashtag:Pe,Match:Te,Mention:je,Phone:Ie,Url:Oe},e}(),dt=/www|@|\\:\\/\\//;function mt(e){return/^<\\/a\\s*>/i.test(e)}function bt(){var e=[],t=new gt({stripPrefix:!1,url:!0,email:!0,replaceFn:function(t){switch(t.getType()){case\"url\":e.push({text:t.matchedText,url:t.getUrl()});break;case\"email\":e.push({text:t.matchedText,url:\"mailto:\"+t.getEmail().replace(/^mailto:/i,\"\")})}return!1}});return{links:e,autolinker:t}}function vt(e){var t,r,n,o,s,i,a,u,l,c,p,h,f,g,d=e.tokens,m=null;for(r=0,n=d.length;r<n;r++)if(\"inline\"===d[r].type)for(p=0,t=(o=d[r].children).length-1;t>=0;t--)if(\"link_close\"!==(s=o[t]).type){if(\"htmltag\"===s.type&&(g=s.content,/^<a[>\\s]/i.test(g)&&p>0&&p--,mt(s.content)&&p++),!(p>0)&&\"text\"===s.type&&dt.test(s.content)){if(m||(h=(m=bt()).links,f=m.autolinker),i=s.content,h.length=0,f.link(i),!h.length)continue;for(a=[],c=s.level,u=0;u<h.length;u++)e.inline.validateLink(h[u].url)&&((l=i.indexOf(h[u].text))&&a.push({type:\"text\",content:i.slice(0,l),level:c}),a.push({type:\"link_open\",href:h[u].url,title:\"\",level:c++}),a.push({type:\"text\",content:h[u].text,level:c}),a.push({type:\"link_close\",level:--c}),i=i.slice(l+h[u].text.length));i.length&&a.push({type:\"text\",content:i,level:c}),d[r].children=o=[].concat(o.slice(0,t),a,o.slice(t+1))}}else for(t--;o[t].level!==s.level&&\"link_open\"!==o[t].type;)t--}e.Remarkable=_e,e.linkify=function(e){e.core.ruler.push(\"linkify\",vt)},e.utils=A,Object.defineProperty(e,\"__esModule\",{value:!0})});\n",
"type": "application/javascript",
"title": "$:/plugins/tiddlywiki/markdown/remarkable.js",
"module-type": "library"
},
"$:/plugins/tiddlywiki/markdown/images/new-markdown-button": {
"title": "$:/plugins/tiddlywiki/markdown/images/new-markdown-button",
"tags": "$:/tags/Image",
"text": "<svg class=\"tc-image-new-markdown-button tc-image-button\" viewBox=\"0 0 128 128\" width=\"22pt\" height=\"22pt\">\n <g fill-rule=\"evenodd\">\n <rect x=\"80\" y=\"96\" width=\"48\" height=\"16\" rx=\"8\"></rect>\n <rect x=\"96\" y=\"80\" width=\"16\" height=\"48\" rx=\"8\"></rect>\n <path d=\"M3.23876972,39.5396716 C3.23876972,35.9653274 6.13586353,33.0691646 9.7141757,33.0691646 L98.1283744,33.0691646 C101.706101,33.0691646 104.60378,35.9646626 104.60378,39.5396716 L104.60378,84.8296213 C104.60378,88.4039654 101.706687,91.3001282 98.1283744,91.3001282 L9.7141757,91.3001282 C6.13644944,91.3001282 3.23876972,88.4046302 3.23876972,84.8296213 L3.23876972,39.5396716 L3.23876972,39.5396716 Z M-2.15298617,39.5396716 L-2.15298617,84.8296213 C-2.15298617,91.3833243 3.15957363,96.6918841 9.7141757,96.6918841 L98.1283744,96.6918841 C104.684083,96.6918841 109.995536,91.382138 109.995536,84.8296213 L109.995536,39.5396716 C109.995536,32.9859686 104.682977,27.6774087 98.1283744,27.6774087 L9.7141757,27.6774087 C3.15846686,27.6774087 -2.15298617,32.9871549 -2.15298617,39.5396716 Z M14.0222815,80.5166164 L14.0222815,43.8526764 L24.8057933,43.8526764 L35.589305,57.3320661 L46.3728168,43.8526764 L57.1563286,43.8526764 L57.1563286,80.5166164 L46.3728168,80.5166164 L46.3728168,59.4887685 L35.589305,72.9681582 L24.8057933,59.4887685 L24.8057933,80.5166164 L14.0222815,80.5166164 Z M81.4192301,80.5166164 L65.2439624,62.723822 L76.0274742,62.723822 L76.0274742,43.8526764 L86.810986,43.8526764 L86.810986,62.723822 L97.5944978,62.723822 L81.4192301,80.5166164 Z\"transform=\"translate(53.921275, 62.184646) rotate(-60.000000) translate(-53.921275, -62.184646) \"></path>\n </g>\n</svg>"
},
"$:/plugins/tiddlywiki/markdown/new-markdown-button": {
"title": "$:/plugins/tiddlywiki/markdown/new-markdown-button",
"tags": "$:/tags/PageControls",
"caption": "{{$:/plugins/tiddlywiki/markdown/images/new-markdown-button}} {{$:/language/Buttons/NewMarkdown/Caption}}",
"description": "{{$:/language/Buttons/NewMarkdown/Hint}}",
"list-after": "$:/core/ui/Buttons/new-tiddler",
"text": "\\whitespace trim\n<$button tooltip={{$:/language/Buttons/NewMarkdown/Hint}} aria-label={{$:/language/Buttons/NewMarkdown/Caption}} class=<<tv-config-toolbar-class>>>\n<$action-sendmessage $message=\"tm-new-tiddler\" type=\"text/x-markdown\"/>\n<$list filter=\"[<tv-config-toolbar-icons>match[yes]]\">\n{{$:/plugins/tiddlywiki/markdown/images/new-markdown-button}}\n</$list>\n<$list filter=\"[<tv-config-toolbar-text>match[yes]]\">\n<span class=\"tc-btn-text\"><$text text={{$:/language/Buttons/NewMarkdown/Caption}}/></span>\n</$list>\n</$button>\n"
},
"$:/plugins/tiddlywiki/markdown/readme": {
"title": "$:/plugins/tiddlywiki/markdown/readme",
"text": "This is a TiddlyWiki plugin for parsing Markdown text, using the [[Remarkable|https://github.com/jonschlinkert/remarkable]] library.\n\nIt is completely self-contained, and doesn't need an Internet connection in order to work. It works both in the browser and under Node.js.\n\n[[Source code|https://github.com/Jermolene/TiddlyWiki5/blob/master/plugins/tiddlywiki/markdown]]\n"
},
"$:/plugins/tiddlywiki/markdown/usage": {
"title": "$:/plugins/tiddlywiki/markdown/usage",
"text": "! Plugin Configuration\n\n|!Config |!Default |!Description |\n| <code>[[breaks|$:/config/markdown/breaks]]</code>| ``false``|Remarkable library config: Convert '\\n' in paragraphs into ``<br>`` |\n| <code>[[linkify|$:/config/markdown/linkify]]</code>| ``false``|Remarkable library config: Autoconvert URL-like text to links |\n| <code>[[linkNewWindow|$:/config/markdown/linkNewWindow]]</code>| ``true``|For external links, should clicking on them open a new window/tab automatically? |\n| <code>[[quotes|$:/config/markdown/quotes]]</code>| ``“”‘’``|Remarkable library config: Double + single quotes replacement pairs, when ``typographer`` enabled |\n| <code>[[renderWikiText|$:/config/markdown/renderWikiText]]</code>| ``true``|After Markdown is parsed, should any text elements be handed off to the ~WikiText parser for further processing? |\n| <code>[[renderWikiTextPragma|$:/config/markdown/renderWikiTextPragma]]</code>| ``\\rules only html image macrocallinline syslink transcludeinline wikilink filteredtranscludeblock macrocallblock transcludeblock``|When handing off to the ~WikiText parser, what pragma rules should it follow? |\n| <code>[[typographer|$:/config/markdown/typographer]]</code>| ``false``|Remarkable library config: Enable some language-neutral replacement + quotes beautification |\n\n! Creating ~WikiLinks\n\nCreate wiki links with the usual Markdown link syntax targeting `#` and the target tiddler title:\n\n```\n[link text](#TiddlerTitle)\n```\n\nIf the target tiddler has a space in its name, that name must be URL-escaped to be detected as a URL:\n\n```\n[link text](#Test%20Tiddler)\n```\n\n! Images\n\nMarkdown image syntax can be used to reference images by tiddler title or an external URI. For example:\n\n```\n\n\n\n```\n"
},
"$:/plugins/tiddlywiki/markdown/wrapper.js": {
"title": "$:/plugins/tiddlywiki/markdown/wrapper.js",
"text": "/*\\\ntitle: $:/plugins/tiddlywiki/markdown/wrapper.js\ntype: application/javascript\nmodule-type: parser\n\nWraps up the remarkable parser for use as a Parser in TiddlyWiki\n\n\\*/\n(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\nvar r = require(\"$:/plugins/tiddlywiki/markdown/remarkable.js\");\n\nvar Remarkable = r.Remarkable,\n\tlinkify = r.linkify,\n\tutils = r.utils;\n\n///// Set up configuration options /////\nfunction parseAsBoolean(tiddlerName) {\n\treturn $tw.wiki.getTiddlerText(tiddlerName).toLowerCase() === \"true\";\n}\nvar pluginOpts = {\n\tlinkNewWindow: parseAsBoolean(\"$:/config/markdown/linkNewWindow\"),\n\trenderWikiText: parseAsBoolean(\"$:/config/markdown/renderWikiText\"),\n\trenderWikiTextPragma: $tw.wiki.getTiddlerText(\"$:/config/markdown/renderWikiTextPragma\").trim()\n};\nvar remarkableOpts = {\n\tbreaks: parseAsBoolean(\"$:/config/markdown/breaks\"),\n\tquotes: $tw.wiki.getTiddlerText(\"$:/config/markdown/quotes\"),\n\ttypographer: parseAsBoolean(\"$:/config/markdown/typographer\")\n};\n\nvar md = new Remarkable(remarkableOpts);\n\nif (parseAsBoolean(\"$:/config/markdown/linkify\")) {\n\tmd = md.use(linkify);\n}\n\nfunction findTagWithType(nodes, startPoint, type, level) {\n\tfor (var i = startPoint; i < nodes.length; i++) {\n\t\tif (nodes[i].type === type && nodes[i].level === level) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn false;\n}\n\n/**\n * Remarkable creates nodes that look like:\n * [\n * { type: 'paragraph_open'},\n * { type: 'inline', content: 'Hello World', children:[{type: 'text', content: 'Hello World'}]},\n * { type: 'paragraph_close'}\n * ]\n *\n * But TiddlyWiki wants the Parser (https://tiddlywiki.com/dev/static/Parser.html) to emit nodes like:\n *\n * [\n * { type: 'element', tag: 'p', children: [{type: 'text', text: 'Hello World'}]}\n * ]\n */\nfunction convertNodes(remarkableTree, isStartOfInline) {\n\tlet out = [];\n\n\tfunction wrappedElement(elementTag, currentIndex, currentLevel, closingType, nodes) {\n\t\tvar j = findTagWithType(nodes, currentIndex + 1, closingType, currentLevel);\n\t\tif (j === false) {\n\t\t\tconsole.error(\"Failed to find a \" + closingType + \" node after position \" + currentIndex);\n\t\t\tconsole.log(nodes);\n\t\t\treturn currentIndex + 1;\n\t\t}\n\t\tlet children = convertNodes(nodes.slice(currentIndex + 1, j));\n\n\t\tout.push({\n\t\t\ttype: \"element\",\n\t\t\ttag: elementTag,\n\t\t\tchildren: children\n\t\t});\n\t\treturn j;\n\t}\n\n\tfor (var i = 0; i < remarkableTree.length; i++) {\n\t\tvar currentNode = remarkableTree[i];\n\t\tif (currentNode.type === \"paragraph_open\") {\n\t\t\ti = wrappedElement(\"p\", i, currentNode.level, \"paragraph_close\", remarkableTree);\n\t\t} else if (currentNode.type === \"heading_open\") {\n\t\t\ti = wrappedElement(\"h\" + currentNode.hLevel, i, currentNode.level, \"heading_close\", remarkableTree);\n\t\t} else if (currentNode.type === \"bullet_list_open\") {\n\t\t\ti = wrappedElement(\"ul\", i, currentNode.level, \"bullet_list_close\", remarkableTree);\n\t\t} else if (currentNode.type == 'ordered_list_open') {\n\t\t\ti = wrappedElement('ol', i, currentNode.level,'ordered_list_close', remarkableTree);\n\t\t} else if (currentNode.type === \"list_item_open\") {\n\t\t\ti = wrappedElement(\"li\", i, currentNode.level, \"list_item_close\", remarkableTree);\n\t\t} else if (currentNode.type === \"link_open\") {\n\t\t\tvar j = findTagWithType(remarkableTree, i + 1, \"link_close\", currentNode.level);\n\n\t\t\tif (currentNode.href[0] !== \"#\") {\n\t\t\t\t// External link\n\t\t\t\tvar attributes = {\n\t\t\t\t\thref: { type: \"string\", value: currentNode.href }\n\t\t\t\t};\n\t\t\t\tif (pluginOpts.linkNewWindow) {\n\t\t\t\t\tattributes.target = { type: \"string\", value: \"_blank\" };\n\t\t\t\t}\n\t\t\t\tout.push({\n\t\t\t\t\ttype: \"element\",\n\t\t\t\t\ttag: \"a\",\n\t\t\t\t\tattributes: attributes,\n\t\t\t\t\tchildren: convertNodes(remarkableTree.slice(i + 1, j))\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// Internal link\n\t\t\t\tout.push({\n\t\t\t\t\ttype: \"link\",\n\t\t\t\t\tattributes: {\n\t\t\t\t\t\tto: { type: \"string\", value: decodeURI(currentNode.href.substr(1)) }\n\t\t\t\t\t},\n\t\t\t\t\tchildren: convertNodes(remarkableTree.slice(i + 1, j))\n\t\t\t\t});\n\t\t\t}\n\t\t\ti = j;\n\t\t} else if (currentNode.type.substr(currentNode.type.length - 5) === \"_open\") {\n\t\t\tvar tagName = currentNode.type.substr(0, currentNode.type.length - 5);\n\t\t\ti = wrappedElement(tagName, i, currentNode.level, tagName + \"_close\", remarkableTree);\n\t\t} else if (currentNode.type === \"code\") {\n\t\t\tout.push({\n\t\t\t\ttype: \"element\",\n\t\t\t\ttag: currentNode.block ? \"pre\" : \"code\",\n\t\t\t\tchildren: [{ type: \"text\", text: currentNode.content }]\n\t\t\t});\n\t\t} else if (currentNode.type === \"fence\") {\n\t\t\tout.push({\n\t\t\t\ttype: \"codeblock\",\n\t\t\t\tattributes: {\n\t\t\t\t\tlanguage: { type: \"string\", value: currentNode.params },\n\t\t\t\t\tcode: { type: \"string\", value: currentNode.content }\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (currentNode.type === \"image\") {\n\t\t\tout.push({\n\t\t\t\ttype: \"image\",\n\t\t\t\tattributes: {\n\t\t\t\t\ttooltip: { type: \"string\", value: currentNode.alt },\n\t\t\t\t\tsource: { type: \"string\", value: currentNode.src }\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (currentNode.type === \"softbreak\") {\n\t\t\tout.push({\n\t\t\t\ttype: \"element\",\n\t\t\t\ttag: \"br\",\n\t\t\t});\n\t\t} else if (currentNode.type == 'hr') {\n\t\t\tout.push({\n\t\t\t\ttype: 'element',\n\t\t\t\ttag: 'hr',\n\t\t\t});\n\t\t} else if (currentNode.type === \"inline\") {\n\t\t\tout = out.concat(convertNodes(currentNode.children, true));\n\t\t} else if (currentNode.type === \"text\") {\n\t\t\tif (!pluginOpts.renderWikiText) {\n\t\t\t\tout.push({\n\t\t\t\t\ttype: \"text\",\n\t\t\t\t\ttext: currentNode.content\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// The Markdown compiler thinks this is just text.\n\t\t\t\t// Hand off to the WikiText parser to see if there's more to render\n\n\t\t\t\t// If we're inside a block element (div, p, td, h1), and this is the first child in the tree,\n\t\t\t\t// handle as a block-level parse. Otherwise not.\n\t\t\t\tvar parseAsInline = !(isStartOfInline && i === 0);\n\t\t\t\tvar textToParse = currentNode.content;\n\t\t\t\tif (pluginOpts.renderWikiTextPragma !== \"\") {\n\t\t\t\t\ttextToParse = pluginOpts.renderWikiTextPragma + \"\\n\" + textToParse;\n\t\t\t\t}\n\t\t\t\tvar wikiParser = $tw.wiki.parseText(\"text/vnd.tiddlywiki\", textToParse, {\n\t\t\t\t\tparseAsInline: parseAsInline\n\t\t\t\t});\n\t\t\t\tvar rs = wikiParser.tree;\n\n\t\t\t\t// If we parsed as a block, but the root element the WikiText parser gave is a paragraph,\n\t\t\t\t// we should discard the paragraph, since the way Remarkable nests its nodes, this \"inline\"\n\t\t\t\t// node is always inside something else that's a block-level element\n\t\t\t\tif (!parseAsInline\n\t\t\t\t\t&& rs.length === 1\n\t\t\t\t\t&& rs[0].type === \"element\"\n\t\t\t\t\t&& rs[0].tag === \"p\"\n\t\t\t\t) {\n\t\t\t\t\trs = rs[0].children;\n\t\t\t\t}\n\n\t\t\t\t// If the original text element started with a space, add it back in\n\t\t\t\tif (rs.length > 0\n\t\t\t\t\t&& rs[0].type === \"text\"\n\t\t\t\t\t&& currentNode.content[0] === \" \"\n\t\t\t\t) {\n\t\t\t\t\trs[0].text = \" \" + rs[0].text;\n\t\t\t\t}\n\t\t\t\tout = out.concat(rs);\n\t\t\t}\n\t\t} else {\n\t\t\tconsole.error(\"Unknown node type: \" + currentNode.type, currentNode);\n\t\t\tout.push({\n\t\t\t\ttype: \"text\",\n\t\t\t\ttext: currentNode.content\n\t\t\t});\n\t\t}\n\t}\n\treturn out;\n}\n\nvar MarkdownParser = function(type, text, options) {\n\tvar tree = md.parse(text, {});\n\t//console.debug(tree);\n\ttree = convertNodes(tree);\n\t//console.debug(tree);\n\n\tthis.tree = tree;\n};\n\nexports[\"text/x-markdown\"] = MarkdownParser;\n\n})();\n",
"type": "application/javascript",
"module-type": "parser"
}
}
}
{
"tiddlers": {
"$:/config/DefaultColourMappings/menubar-foreground": {
"title": "$:/config/DefaultColourMappings/menubar-foreground",
"text": "#fff"
},
"$:/config/DefaultColourMappings/menubar-background": {
"title": "$:/config/DefaultColourMappings/menubar-background",
"text": "#5778d8"
},
"$:/config/plugins/menubar/MenuItems/Visibility/$:/plugins/tiddlywiki/menubar/items/pagecontrols": {
"title": "$:/config/plugins/menubar/MenuItems/Visibility/$:/plugins/tiddlywiki/menubar/items/pagecontrols",
"text": "hide"
},
"$:/config/plugins/menubar/MenuItems/Visibility/$:/plugins/tiddlywiki/menubar/items/server": {
"title": "$:/config/plugins/menubar/MenuItems/Visibility/$:/plugins/tiddlywiki/menubar/items/server",
"text": "hide"
},
"$:/config/plugins/menubar/MenuItems/Visibility/$:/plugins/tiddlywiki/menubar/items/sidebar": {
"title": "$:/config/plugins/menubar/MenuItems/Visibility/$:/plugins/tiddlywiki/menubar/items/sidebar",
"text": "hide"
},
"$:/config/plugins/menubar/breakpoint": {
"title": "$:/config/plugins/menubar/breakpoint",
"text": "620px"
},
"$:/plugins/tiddlywiki/menubar/config": {
"title": "$:/plugins/tiddlywiki/menubar/config",
"tags": "$:/tags/ControlPanel/Toolbars",
"caption": "Menu Bar",
"text": "\\define config-base() $:/config/plugins/menubar/MenuItems/Visibility/\n\n! Menu Bar Configuration\n\n!! Menu Items\n\nSelect which menu items will be shown. You can also drag items to reorder them.\n\n<$set name=\"tv-config-toolbar-icons\" value=\"yes\">\n\n<$set name=\"tv-config-toolbar-text\" value=\"yes\">\n\n<$macrocall $name=\"list-tagged-draggable\" tag=\"$:/tags/MenuBar\" itemTemplate=\"$:/core/ui/ControlPanel/Toolbars/ItemTemplate\"/>\n\n</$set>\n\n</$set>\n\n!! Breakpoint Position\n\nThe breakpoint position between narrow and wide screens. Should include CSS units (eg. `400px`).\n\n<$edit-text tiddler=\"$:/config/plugins/menubar/breakpoint\" default=\"\" tag=\"input\"/>\n\n!! Menu Bar Colours\n\nTo change the colour of the menu bar, define the colours `menubar-foreground` and `menubar-background` in the currently selected palette\n"
},
"$:/plugins/tiddlywiki/menubar/items/contents": {
"title": "$:/plugins/tiddlywiki/menubar/items/contents",
"caption": "Contents",
"description": "Table of Contents",
"is-dropdown": "yes",
"tags": "$:/tags/MenuBar",
"text": "<div class=\"tc-table-of-contents\">\n\n<<toc-selective-expandable 'TableOfContents'>>\n\n</div>\n"
},
"$:/plugins/tiddlywiki/menubar/items/hamburger": {
"title": "$:/plugins/tiddlywiki/menubar/items/hamburger",
"tags": "$:/tags/MenuBar",
"caption": "Hamburger",
"description": "Show the full menu bar on a narrow screen",
"custom-menu-content": "{{$:/plugins/tiddlywiki/menubar/items/hamburger}}",
"show-when": "narrow",
"text": "<$list filter=\"[[$:/state/popup/menubar/hamburger]get[text]else[no]match[no]]\">\n<$button set=\"$:/state/popup/menubar/hamburger\" setTo=\"yes\">\n{{$:/core/images/menu-button}}\n</$button>\n</$list>\n<$list filter=\"[[$:/state/popup/menubar/hamburger]get[text]else[no]match[yes]]\">\n<$button set=\"$:/state/popup/menubar/hamburger\" setTo=\"no\">\n{{$:/core/images/close-button}}\n</$button>\n</$list>\n"
},
"$:/plugins/tiddlywiki/menubar/items/pagecontrols": {
"title": "$:/plugins/tiddlywiki/menubar/items/pagecontrols",
"tags": "$:/tags/MenuBar",
"description": "Page controls from the sidebar",
"caption": "Page controls",
"custom-menu-content": "<$transclude tiddler=\"$:/plugins/tiddlywiki/menubar/items/pagecontrols\" mode=\"inline\"/>",
"text": "\\whitespace trim\n\\define config-title()\n$:/config/PageControlButtons/Visibility/$(listItem)$\n\\end\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/PageControls]!has[draft.of]]\" variable=\"listItem\">\n<$set name=\"hidden\" value=<<config-title>>>\n<$list filter=\"[<hidden>!text[hide]]\" storyview=\"pop\" variable=\"ignore\">\n<$set name=\"tv-config-toolbar-class\" filter=\"[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]\">\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n</$set>\n</$list>\n</$set>\n</$list>\n"
},
"$:/plugins/tiddlywiki/menubar/items/search": {
"title": "$:/plugins/tiddlywiki/menubar/items/search",
"custom-menu-content": "{{$:/plugins/tiddlywiki/menubar/items/search}}",
"description": "Search",
"caption": "Search",
"tags": "$:/tags/MenuBar",
"text": "<$set name=\"searchTiddler\" value=\"$:/temp/menubarsearch\">\n\n<span style=\"margin: 0 0.5em;\">\n\n<$edit-text tiddler=<<searchTiddler>> tag=\"input\" type=\"search\" focusPopup=\"$:/state/popup/menubar-search-dropdown\" class=\"tc-popup-handle tc-menu-show-when-wide\" placeholder=\"Search...\" default=\"\"/>\n\n</span>\n\n<$reveal tag=\"div\" class=\"tc-block-dropdown-wrapper\" state=\"$:/state/popup/menubar-search-dropdown\" type=\"nomatch\" text=\"\" default=\"\">\n\n<div class=\"tc-block-dropdown tc-search-drop-down\">\n\n<$list filter=\"[<searchTiddler>get[text]minlength[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">Type your search terms</div>\"\"\" variable=\"ignore\">\n\n<$list filter=\"[<searchTiddler>get[text]minlength{$:/config/Search/MinLength}limit[1]]\" emptyMessage=\"\"\"<div class=\"tc-search-results\">{{$:/language/Search/Search/TooShort}}</div>\"\"\" variable=\"listItem\">\n\n{{$:/core/ui/SearchResults}}\n\n</$list>\n\n</$list>\n\n</div>\n\n</$reveal>\n\n</$set>\n"
},
"$:/plugins/tiddlywiki/menubar/items/server": {
"title": "$:/plugins/tiddlywiki/menubar/items/server",
"tags": "$:/tags/MenuBar",
"description": "Server options",
"caption": "Server",
"custom-menu-content": "<$transclude tiddler=\"$:/plugins/tiddlywiki/menubar/items/server\" mode=\"inline\"/>",
"text": "<$list filter=\"[[$:/status/IsLoggedIn]get[text]else[no]match[yes]]\" variable=\"ignore\">\n<$transclude tiddler=\"$:/core/ui/Buttons/save-wiki\" mode=\"inline\"/>\n</$list>\n<$list filter=\"[[$:/status/IsLoggedIn]get[text]else[no]match[no]]\" variable=\"ignore\">\n<$button message=\"tm-login\">\nLogin\n</$button>\n</$list>\n"
},
"$:/plugins/tiddlywiki/menubar/items/sidebar": {
"title": "$:/plugins/tiddlywiki/menubar/items/sidebar",
"caption": "Sidebar",
"description": "Sidebar",
"is-dropdown": "yes",
"tags": "$:/tags/MenuBar",
"text": "<$scrollable fallthrough=\"none\" class=\"tc-popup-keep tc-menubar-dropdown-sidebar\">\n\n<$transclude tiddler=\"$:/core/ui/SideBarSegments/tabs\" mode=\"inline\"/>\n\n</$scrollable>\n"
},
"$:/plugins/tiddlywiki/menubar/items/topleftbar": {
"title": "$:/plugins/tiddlywiki/menubar/items/topleftbar",
"tags": "$:/tags/MenuBar",
"description": "Items from $:/tags/TopLeftBar",
"caption": "Legacy Top Left Bar",
"custom-menu-content": "<$transclude tiddler=\"$:/plugins/tiddlywiki/menubar/items/topleftbar\" mode=\"inline\"/>",
"text": "<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TopLeftBar]!has[draft.of]]\" variable=\"listItem\" storyview=\"pop\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$list>"
},
"$:/plugins/tiddlywiki/menubar/items/toprightbar": {
"title": "$:/plugins/tiddlywiki/menubar/items/toprightbar",
"tags": "$:/tags/MenuBar",
"description": "Items from $:/tags/TopRightBar",
"caption": "Legacy Top Right Bar",
"custom-menu-content": "<$transclude tiddler=\"$:/plugins/tiddlywiki/menubar/items/toprightbar\" mode=\"inline\"/>",
"custom-menu-styles-wide": "float: right;",
"text": "<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/TopRightBar]!has[draft.of]reverse[]]\" variable=\"listItem\" storyview=\"pop\">\n\n<$transclude tiddler=<<listItem>> mode=\"inline\"/>\n\n</$list>"
},
"$:/plugins/tiddlywiki/menubar/menu": {
"title": "$:/plugins/tiddlywiki/menubar/menu",
"tags": "$:/tags/PageTemplate",
"text": "\\define menubar-inner(size)\n<ul class=\"tc-menubar-list\">\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/MenuBar]!has[draft.of]]\">\n<$list filter=\"[<currentTiddler>addprefix[$:/config/plugins/menubar/MenuItems/Visibility/]get[text]] ~show +[match[show]]\" variable=\"ignore\">\n<$list filter=\"[[$size$]match[wide]] ~[<currentTiddler>get[show-when]match[$size$]] ~[{$:/state/popup/menubar/hamburger}match[yes]]\" variable=\"ignore\">\n<li style={{!!custom-menu-styles-$size$}} class={{{ [<currentTiddler>get[show-when]addprefix[tc-menubar-]] tc-menubar-item +[join[ ]] }}}>\n<$list filter=\"[<currentTiddler>!is-dropdown[yes]]\" variable=\"listItem\" emptyMessage=\"\"\"\n\t<!-- Dropdown -->\n\t<$set name=\"dropdown-state\" value=<<qualify \"$:/state/popup/topmenu/dropdown/\">>>\n\t<$set name=\"dropdown-state\" value={{{ [<dropdown-state>addsuffix<currentTiddler>] }}}>\n\t<$button popup=<<dropdown-state>> selectedClass=\"tc-selected\">\n\t<$set name=\"tv-wikilinks\" value=\"no\">\n\t<$transclude field=\"caption\" mode=\"inline\"/>\n\t<$text text=\" \"/>\n\t<span class=\"tc-menubar-dropdown-arrow\">\n\t<$transclude tiddler=\"$:/core/images/down-arrow\" mode=\"inline\"/>\n\t</span>\n\t</$set>\n\t</$button>\n\t</$set>\n\t</$set>\n\"\"\">\n<$list filter=\"[<currentTiddler>has[custom-menu-content]]\" variable=\"listItem\" emptyMessage=\"\"\"\n\t<!-- Link -->\n\t<$link to={{!!target}}>\n\t<$set name=\"tv-wikilinks\" value=\"no\">\n\t<$transclude field=\"caption\" mode=\"inline\"/>\n\t</$set>\n\t</$link>\n\"\"\">\n<!-- Custom content -->\n<$transclude field=\"custom-menu-content\" mode=\"inline\"/>\n</$list>\n</$list>\n</li>\n</$list>\n</$list>\n</$list>\n</ul>\n\\end\n\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/MenuBar]!has[draft.of]limit[1]]\" variable=\"listItem\">\n<nav class=\"tc-menubar tc-adjust-top-of-scroll\">\n<div class=\"tc-menubar-narrow\">\n<<menubar-inner narrow>>\n</div>\n<div class=\"tc-menubar-wide\">\n<<menubar-inner wide>>\n</div>\n<div style=\"clear:both;\"/>\n<$list filter=\"[all[shadows+tiddlers]tag[$:/tags/MenuBar]!has[draft.of]is-dropdown[yes]]\">\n<$list filter=\"[<currentTiddler>addprefix[$:/config/plugins/menubar/MenuItems/Visibility/]get[text]] ~show +[match[show]]\" variable=\"ignore\">\n<$set name=\"dropdown-state\" value=<<qualify \"$:/state/popup/topmenu/dropdown/\">>>\n<$set name=\"dropdown-state\" value={{{ [<dropdown-state>addsuffix<currentTiddler>] }}}>\n<$reveal type=\"popup\" state=<<dropdown-state>> class={{{ [<currentTiddler>get[dropdown]get[class]] }}} tag=\"div\">\n<div class=\"tc-drop-down\">\n<$transclude/>\n</div>\n</$reveal>\n</$set>\n</$set>\n</$list>\n</$list>\n</nav>\n</$list>\n"
},
"$:/core/ui/PageTemplate/topleftbar": {
"title": "$:/core/ui/PageTemplate/topleftbar",
"text": "<!-- The menubar plugin overrides this tiddler to remove the core top left menu. The menu items that it would include are instead included in the menubar -->"
},
"$:/core/ui/PageTemplate/toprightbar": {
"title": "$:/core/ui/PageTemplate/toprightbar",
"text": "<!-- The menubar plugin overrides this tiddler to remove the core top right menu. The menu items that it would include are instead included in the menubar -->"
},
"$:/plugins/tiddlywiki/menubar/readme": {
"title": "$:/plugins/tiddlywiki/menubar/readme",
"text": "!! Introduction\n\nThis plugin provides a menu bar with the following features:\n\n* Menu items take the form of simple text links, dropdowns, or entirely custom content\n* Menu items can be individually enabled via the control panel\n* Responds to reduced screen width by abbreviating the menu items to a \"hamburger\" dropdown\n\n!! Menu Item Tiddlers\n\nMenu items are tagged <<tag $:/tags/MenuBar>>. The following fields are used by this plugin:\n\n|!Field Name |!Purpose |\n|title |Each menu item must have a unique title (not shown to the user) |\n|description |Description for use in listings |\n|tags |Must contain `$:/tags/MenuBar` |\n|caption |The text that is displayed for the menu item. Avoid links, using `~` to suppress CamelCase links if required |\n|target |For simple link menu items specifies a tiddler title as the target of the link |\n|is-dropdown |Set to `yes` to indicate a dropdown menu item |\n|text |For dropdown menu items, specifies the body of the dropdown |\n|custom-menu-content |Optional wikitext to be displayed in place of the caption |\n|custom-menu-styles-wide |Optional string of styles to be applied to menu item when the menubar is wide |\n|custom-menu-styles-narrow |Optional string of styles to be applied to menu item when the menubar is narrow |\n\nCustom menu items should make sure that the clickable link or button is an immediate child, and not wrapped in another element.\n\nNote that menu items can be pushed to the right of the menu bar setting the ''custom-menu-styles'' field to `float: right;`.\n"
},
"$:/plugins/tiddlywiki/menubar/styles": {
"title": "$:/plugins/tiddlywiki/menubar/styles",
"tags": "[[$:/tags/Stylesheet]]",
"text": "\\define breakpoint-plus-one()\n<$text text={{{ [{$:/config/plugins/menubar/breakpoint}removesuffix[px]add[1]addsuffix[px]] }}} />\n\\end\n\n\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\n\nnav.tc-menubar {\n\tposition: fixed;\n\tz-index: 850;\n\tdisplay: inline-block;\n\ttop: 0;\n\tright: 0;\n\tleft: 0;\n}\n\nnav.tc-menubar ul.tc-menubar-list {\n\tposition: relative;\n\tlist-style-type: none;\n\tmargin: 0;\n\tpadding: 0 0 0 42px;\n\tbackground: <<colour background>>;\n\tbackground: <<colour menubar-background>>;\n\t<<box-shadow \"1px 1px 5px rgba(0, 0, 0, 0.3)\">>\n}\n\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\n\thtml nav.tc-menubar ul.tc-menubar-list {\n\t\tpadding: 0 0 0 8px;\n\t}\n\n}\n\nnav.tc-menubar li.tc-menubar-item {\n\tdisplay: inline-block;\n\tmargin: 0;\n\tpadding: 0;\n}\n\nnav.tc-menubar .tc-menubar-narrow li.tc-menubar-item {\n\tdisplay: block;\n}\n\nnav.tc-menubar li.tc-menubar-item > a,\nnav.tc-menubar li.tc-menubar-item > button {\n\tdisplay: inline-block;\n/*\ttext-transform: uppercase; */\n\tline-height: 1;\n\tfont-weight: 700;\n\tcolor: <<colour foreground>>;\n\tcolor: <<colour menubar-foreground>>;\n\tfill: <<colour foreground>>;\n\tfill: <<colour menubar-foreground>>;\n\ttext-decoration: none;\n\tpadding: 0.5em;\n\tmargin: 0;\n\tbackground: none;\n\tborder: none;\n\tcursor: pointer;\n\tborder-radius: 0;\n\ttext-decoration: none;\n}\n\nnav.tc-menubar li.tc-menubar-item > a.tc-selected,\nnav.tc-menubar li.tc-menubar-item > button.tc-selected {\n\tbackground: <<colour foreground>>;\n\tbackground: <<colour menubar-foreground>>;\n\tcolor: <<colour background>>;\n\tcolor: <<colour menubar-background>>;\n\tfill: <<colour background>>;\n\tfill: <<colour menubar-background>>;\n}\n\nnav.tc-menubar li.tc-menubar-item svg {\n\ttransition: none;\n\twidth: 1em;\n\theight: 1em;\n\tfill: <<colour foreground>>;\n\tfill: <<colour menubar-foreground>>;\n}\n\nnav.tc-menubar li.tc-menubar-item .tc-menubar-dropdown-arrow svg {\n\twidth: 0.5em;\n\theight: 0.5em;\n}\n\nnav.tc-menubar li.tc-menubar-item > a.tc-selected svg,\nnav.tc-menubar li.tc-menubar-item > button.tc-selected svg {\n\tfill: <<colour background>>;\n\tfill: <<colour menubar-background>>;\n}\n\nnav.tc-menubar li.tc-menubar-item > a:hover,\nnav.tc-menubar li.tc-menubar-item > button:hover svg,\nnav.tc-menubar li.tc-menubar-item > button:hover {\n\tbackground: <<colour foreground>>;\n\tbackground: <<colour menubar-foreground>>;\n\tcolor: <<colour background>>;\n\tcolor: <<colour menubar-background>>;\n\tfill: <<colour background>>;\n\tfill: <<colour menubar-background>>;\n\tborder-radius: 0;\n\ttext-decoration: none;\n}\n\nnav.tc-menubar li.tc-menubar-item > a:active,\nnav.tc-menubar li.tc-menubar-item > button:active svg,\nnav.tc-menubar li.tc-menubar-item > button:active {\n\tbackground: <<colour foreground>>;\n\tbackground: <<colour menubar-foreground>>;\n\tcolor: <<colour background>>;\n\tcolor: <<colour menubar-background>>;\n\tfill: <<colour background>>;\n\tfill: <<colour menubar-background>>;\n\tborder-radius: 0;\n\ttext-decoration: none;\n}\n\nnav.tc-menubar .tc-drop-down,\nnav.tc-menubar .tc-block-dropdown {\n\tmax-width: 70vw;\n\tmax-height: 70vh;\n\toverflow: auto;\n}\n\nnav.tc-menubar .tc-drop-down a {\n\ttext-decoration: none;\n}\n\nnav.tc-menubar .tc-drop-down .tc-table-of-contents button {\n\tdisplay: inline-block;\n\twidth: auto;\n}\n\nnav.tc-menubar .tc-drop-down ol {\n\tmargin: 0;\n}\n\nnav.tc-menubar .tc-drop-down .tc-menubar-dropdown-sidebar a,\nnav.tc-menubar .tc-drop-down .tc-menubar-dropdown-sidebar button {\n\tdisplay: inline;\n\twidth: auto;\n}\n\nnav.tc-menubar .tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button {\n\tdisplay: block;\n\twidth: 100%;\n}\n\n@media (max-width: {{$:/config/plugins/menubar/breakpoint}}) {\n\n\t.tc-menubar-wide {\n\t\tdisplay: none;\n\t}\n\n}\n\n@media (min-width: <<breakpoint-plus-one>>) {\n\n\tnav.tc-menubar li.tc-menubar-item.tc-menubar-narrow,\n\t.tc-menubar-narrow {\n\t\tdisplay: none;\n\t}\n\n}\n\n\n"
},
"$:/tags/MenuBar": {
"title": "$:/tags/MenuBar",
"list": "$:/plugins/tiddlywiki/menubar/items/hamburger $:/plugins/tiddlywiki/menubar/items/topleftbar $:/plugins/tiddlywiki/menubar/items/contents $:/plugins/tiddlywiki/menubar/items/search $:/plugins/tiddlywiki/menubar/items/pagecontrols $:/plugins/tiddlywiki/menubar/items/server $:/plugins/tiddlywiki/menubar/items/toprightbar"
}
}
}
The Unstoppable Wiki
IPFS with ~TiddlyWiki
\import [[$:/core/ui/PageMacros]] [all[shadows+tiddlers]tag[$:/tags/Macro]!has[draft.of]]
\rules only filteredtranscludeinline transcludeinline macrocallinline
<div class="tc-remove-when-wiki-loaded">
<style scoped>
.tc-splash-text {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
font-size: 16px;
text-rendering: optimizeLegibility;
-webkit-font-smoothing: antialiased;
margin: 20px auto 0;
width: 400px;
text-align: center;
color: <<colour foreground>>;
fill: <<colour foreground>>;
}
.tc-splash-text img {
width: 150px;
<<box-shadow "2px 2px 10px rgba(0, 0, 0, 0.5)">>
}
html body.tc-body {
background: <<colour page-background>>;
}
/*
Spinner from https://github.com/tobiasahlin/SpinKit/ by Tobias Ahlin
The MIT License (MIT)
Copyright (c) 2015 Tobias Ahlin
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
.tc-splash-spinner {
margin: 20px auto 0;
width: 70px;
text-align: center;
}
.tc-splash-spinner > div {
width: 18px;
height: 18px;
border-radius: 100%;
display: inline-block;
-webkit-animation: sk-bouncedelay 1.4s infinite ease-in-out both;
animation: sk-bouncedelay 1.4s infinite ease-in-out both;
background-color: #f88;
}
.tc-splash-spinner .tc-splash-bounce-1 {
-webkit-animation-delay: -0.32s;
animation-delay: -0.32s;
background-color: #8f8;
}
.tc-splash-spinner .tc-splash-bounce-2 {
-webkit-animation-delay: -0.16s;
animation-delay: -0.16s;
background-color: #88f;
}
@-webkit-keyframes sk-bouncedelay {
0%, 80%, 100% { -webkit-transform: scale(0) }
40% { -webkit-transform: scale(1.0) }
}
@keyframes sk-bouncedelay {
0%, 80%, 100% {
-webkit-transform: scale(0);
transform: scale(0);
} 40% {
-webkit-transform: scale(1.0);
transform: scale(1.0);
}
}
</style>
<div class="tc-splash-spinner">
<div class="tc-splash-bounce-1"></div>
<div class="tc-splash-bounce-2"></div>
<div class="tc-splash-bounce-3"></div>
</div>
<div class="tc-splash-text">
<img src="data:image/jpeg;base64,{{$:/core/images/bluelight||$:/core/templates/plain-text-tiddler}}" width="100"/>
</div>
<div class="tc-splash-text">
<p>
Please wait while <b>{{$:/SiteTitle}}</b> is loading...
</p>
<p>
<b><<ipfs-plugin-version>></b>
</p>
</div>
<div class="tc-splash-text">
<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" style="enable-background:new" xmlns="http://www.w3.org/2000/svg" height="96" width="96" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" viewBox="0 0 512 512">
<defs>
<linearGradient id="c" y2="771.51" gradientUnits="userSpaceOnUse" y1="771.51" x2="527.72" x1="84.315">
<stop stop-color="#4a9ea1" offset="0"/>
</linearGradient>
<linearGradient id="d" y2="771.48" gradientUnits="userSpaceOnUse" y1="771.48" x2="512.36" x1="99.675">
<stop stop-color="#63d3d7" offset="0"/>
</linearGradient>
</defs>
<g>
<g style="enable-background:new" transform="translate(-50.017,-515.51)">
<path fill="url(#c)" d="m84.315 899.51 221.7 128 221.7-128v-256l-221.7-127.99-221.7 128z"/>
<path fill="url(#d)" d="m283.13 546.35-160.74 92.806c0.32126 2.8543 0.32125 5.7352 0 8.5894l160.75 92.806c13.554-10.001 32.043-10.001 45.597 0l160.75-92.807c-0.32126-2.8543-0.32293-5.7338-0.001-8.588l-160.74-92.806c-13.554 10.001-32.044 10.001-45.599 0zm221.79 127.03-160.92 93.84c1.884 16.739-7.3611 32.751-22.799 39.489l0.18062 184.58c2.6325 1.1489 5.1267 2.5886 7.438 4.294l160.75-92.805c-1.884-16.739 7.3611-32.752 22.799-39.49v-185.61c-2.6325-1.1489-5.1281-2.5886-7.4394-4.294zm-397.81 1.0315c-2.3112 1.7054-4.8054 3.1465-7.438 4.2954v185.61c15.438 6.7378 24.683 22.75 22.799 39.489l160.74 92.806c2.3112-1.7054 4.8069-3.1465 7.4394-4.2954v-185.61c-15.438-6.7378-24.683-22.75-22.799-39.489l-160.74-92.81z"/>
</g>
<g style="enable-background:new" transform="translate(0,-196.66)">
<path fill-opacity=".25098" d="m256 708.66 221.7-128v-256l-221.7 128v256z"/>
<path fill-opacity=".039216" d="m256 708.66v-256l-221.7-128v256l221.7 128z"/>
<path fill-opacity=".13018" d="m34.298 324.66 221.7 128 221.7-128-221.7-128-221.7 128z"/>
</g>
</g>
<g style="enable-background:new" fill="#fff">
<path d="m103.09 186h-29.2v141.2h29.2v-141.2z"/>
<path d="m153.97 327.2v-51.8c7.2 0.6 14.4 0.6 20.4 0.6 41.6 0 53.6-20.6 53.6-46 0-30.8-22-44-56-44h-47.2v141.2h29.2zm15.8-71.8c-5.4 0-13.4 0-15.8-0.2v-48h18.2c17.6 0 27.6 8.4 27.6 23.8v0.4c0 12-4.4 24-30 24z"/>
<path d="m327.95 186h-88.6v141.2h29.2v-62.2h55.4v-21.2h-55.6v-36.4h57.6l2-21.4z"/>
<path d="m423.51 213.6 7.6-19.6c-11.4-8.2-26.8-11.2-46.2-11.2-28.2 0-51.4 13.2-51.4 40.2 0 24.2 17.8 33.8 35.6 39.6l17.8 6c12.2 4.2 22.2 8.2 22.2 21.4 0 12-10.4 16.8-26.2 16.8-16 0-33.2-4.8-43-11l-7.6 21.2c12.8 8.2 29 12.2 50.8 12.2 31 0 55-13.6 55-42.6 0-27-20.6-35.6-41.4-42.6l-19.4-6.4c-8.4-2.8-14.8-6.6-14.8-17.4 0-11 9-15.4 22.4-15.4 16.4 0 29.2 3 38.6 8.8z"/>
</g>
</svg>
</div>
<div class="tc-splash-text">
{{$:/core/icon||$:/core/templates/plain-text-tiddler}}
</div>
</div>
no
{
"tiddlers": {
"$:/info/browser": {
"title": "$:/info/browser",
"text": "no"
},
"$:/info/node": {
"title": "$:/info/node",
"text": "yes"
}
}
}
$:/themes/tiddlywiki/snowwhite
{
"tiddlers": {
"$:/themes/tiddlywiki/snowwhite/base": {
"title": "$:/themes/tiddlywiki/snowwhite/base",
"tags": "[[$:/tags/Stylesheet]]",
"text": "\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\n\n.tc-sidebar-header {\n\ttext-shadow: 0 1px 0 <<colour sidebar-foreground-shadow>>;\n}\n\n.tc-tiddler-info {\n\t<<box-shadow \"inset 1px 2px 3px rgba(0,0,0,0.1)\">>\n}\n\n@media screen {\n\t.tc-tiddler-frame {\n\t\t<<box-shadow \"1px 1px 5px rgba(0, 0, 0, 0.3)\">>\n\t}\n}\n\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\t.tc-tiddler-frame {\n\t\t<<box-shadow none>>\n\t}\n}\n\n.tc-page-controls button svg, .tc-tiddler-controls button svg, .tc-topbar button svg {\n\t<<transition \"fill 150ms ease-in-out\">>\n}\n\n.tc-tiddler-controls button.tc-selected,\n.tc-page-controls button.tc-selected {\n\t<<filter \"drop-shadow(0px -1px 2px rgba(0,0,0,0.25))\">>\n}\n\n.tc-tiddler-frame input.tc-edit-texteditor {\n\t<<box-shadow \"inset 0 1px 8px rgba(0, 0, 0, 0.15)\">>\n}\n\n.tc-edit-tags {\n\t<<box-shadow \"inset 0 1px 8px rgba(0, 0, 0, 0.15)\">>\n}\n\n.tc-tiddler-frame .tc-edit-tags input.tc-edit-texteditor {\n\t<<box-shadow \"none\">>\n\tborder: none;\n\toutline: none;\n}\n\ntextarea.tc-edit-texteditor {\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/editorfontfamily}};\n}\n\ncanvas.tc-edit-bitmapeditor {\n\t<<box-shadow \"2px 2px 5px rgba(0, 0, 0, 0.5)\">>\n}\n\n.tc-drop-down {\n\tborder-radius: 4px;\n\t<<box-shadow \"2px 2px 10px rgba(0, 0, 0, 0.5)\">>\n}\n\n.tc-block-dropdown {\n\tborder-radius: 4px;\n\t<<box-shadow \"2px 2px 10px rgba(0, 0, 0, 0.5)\">>\n}\n\n.tc-modal {\n\tborder-radius: 6px;\n\t<<box-shadow \"0 3px 7px rgba(0,0,0,0.3)\">>\n}\n\n.tc-modal-footer {\n\tborder-radius: 0 0 6px 6px;\n\t<<box-shadow \"inset 0 1px 0 #fff\">>;\n}\n\n\n.tc-alert {\n\tborder-radius: 6px;\n\t<<box-shadow \"0 3px 7px rgba(0,0,0,0.6)\">>\n}\n\n.tc-notification {\n\tborder-radius: 6px;\n\t<<box-shadow \"0 3px 7px rgba(0,0,0,0.3)\">>\n\ttext-shadow: 0 1px 0 rgba(255,255,255, 0.8);\n}\n\n.tc-sidebar-lists .tc-tab-set .tc-tab-divider {\n\tborder-top: none;\n\theight: 1px;\n\t<<background-linear-gradient \"left, rgba(0,0,0,0.15) 0%, rgba(0,0,0,0.0) 100%\">>\n}\n\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button {\n\t<<background-linear-gradient \"left, rgba(0,0,0,0.01) 0%, rgba(0,0,0,0.1) 100%\">>\n}\n\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button.tc-tab-selected {\n\t<<background-linear-gradient \"left, rgba(0,0,0,0.05) 0%, rgba(255,255,255,0.05) 100%\">>\n}\n\n.tc-message-box img {\n\t<<box-shadow \"1px 1px 3px rgba(0,0,0,0.5)\">>\n}\n\n.tc-plugin-info {\n\t<<box-shadow \"1px 1px 3px rgba(0,0,0,0.5)\">>\n}\n"
}
}
}
{
"tiddlers": {
"$:/themes/tiddlywiki/vanilla/themetweaks": {
"title": "$:/themes/tiddlywiki/vanilla/themetweaks",
"tags": "$:/tags/ControlPanel/Appearance",
"caption": "{{$:/language/ThemeTweaks/ThemeTweaks}}",
"text": "\\define lingo-base() $:/language/ThemeTweaks/\n\n\\define replacement-text()\n[img[$(imageTitle)$]]\n\\end\n\n\\define backgroundimage-dropdown()\n<div class=\"tc-drop-down-wrapper\">\n<$button popup=<<qualify \"$:/state/popup/themetweaks/backgroundimage\">> class=\"tc-btn-invisible tc-btn-dropdown\">{{$:/core/images/down-arrow}}</$button>\n<$reveal state=<<qualify \"$:/state/popup/themetweaks/backgroundimage\">> type=\"popup\" position=\"belowleft\" text=\"\" default=\"\">\n<div class=\"tc-drop-down\">\n<$macrocall $name=\"image-picker\" actions=\"\"\"\n\n<$action-setfield\n\t$tiddler=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\"\n\t$value=<<imageTitle>>\n/>\n\n\"\"\"/>\n</div>\n</$reveal>\n</div>\n\\end\n\n\\define backgroundimageattachment-dropdown()\n<$select tiddler=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment\" default=\"scroll\">\n<option value=\"scroll\"><<lingo Settings/BackgroundImageAttachment/Scroll>></option>\n<option value=\"fixed\"><<lingo Settings/BackgroundImageAttachment/Fixed>></option>\n</$select>\n\\end\n\n\\define backgroundimagesize-dropdown()\n<$select tiddler=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize\" default=\"scroll\">\n<option value=\"auto\"><<lingo Settings/BackgroundImageSize/Auto>></option>\n<option value=\"cover\"><<lingo Settings/BackgroundImageSize/Cover>></option>\n<option value=\"contain\"><<lingo Settings/BackgroundImageSize/Contain>></option>\n</$select>\n\\end\n\n<<lingo ThemeTweaks/Hint>>\n\n! <<lingo Options>>\n\n|<$link to=\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\"><<lingo Options/SidebarLayout>></$link> |<$select tiddler=\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\"><option value=\"fixed-fluid\"><<lingo Options/SidebarLayout/Fixed-Fluid>></option><option value=\"fluid-fixed\"><<lingo Options/SidebarLayout/Fluid-Fixed>></option></$select> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/options/stickytitles\"><<lingo Options/StickyTitles>></$link><br>//<<lingo Options/StickyTitles/Hint>>// |<$select tiddler=\"$:/themes/tiddlywiki/vanilla/options/stickytitles\"><option value=\"no\">{{$:/language/No}}</option><option value=\"yes\">{{$:/language/Yes}}</option></$select> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/options/codewrapping\"><<lingo Options/CodeWrapping>></$link> |<$select tiddler=\"$:/themes/tiddlywiki/vanilla/options/codewrapping\"><option value=\"pre\">{{$:/language/No}}</option><option value=\"pre-wrap\">{{$:/language/Yes}}</option></$select> |\n\n! <<lingo Settings>>\n\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/fontfamily\"><<lingo Settings/FontFamily>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/fontfamily\" default=\"\" tag=\"input\"/> | |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/codefontfamily\"><<lingo Settings/CodeFontFamily>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/codefontfamily\" default=\"\" tag=\"input\"/> | |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/editorfontfamily\"><<lingo Settings/EditorFontFamily>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/editorfontfamily\" default=\"\" tag=\"input\"/> | |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\"><<lingo Settings/BackgroundImage>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimage\" default=\"\" tag=\"input\"/> |<<backgroundimage-dropdown>> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment\"><<lingo Settings/BackgroundImageAttachment>></$link> |<<backgroundimageattachment-dropdown>> | |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize\"><<lingo Settings/BackgroundImageSize>></$link> |<<backgroundimagesize-dropdown>> | |\n\n! <<lingo Metrics>>\n\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/fontsize\"><<lingo Metrics/FontSize>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/fontsize\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/lineheight\"><<lingo Metrics/LineHeight>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/lineheight\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize\"><<lingo Metrics/BodyFontSize>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/bodylineheight\"><<lingo Metrics/BodyLineHeight>></$link> |<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/bodylineheight\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/storyleft\"><<lingo Metrics/StoryLeft>></$link><br>//<<lingo Metrics/StoryLeft/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storyleft\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/storytop\"><<lingo Metrics/StoryTop>></$link><br>//<<lingo Metrics/StoryTop/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storytop\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/storyright\"><<lingo Metrics/StoryRight>></$link><br>//<<lingo Metrics/StoryRight/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storyright\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/storywidth\"><<lingo Metrics/StoryWidth>></$link><br>//<<lingo Metrics/StoryWidth/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/storywidth\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\"><<lingo Metrics/TiddlerWidth>></$link><br>//<<lingo Metrics/TiddlerWidth/Hint>>//<br> |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint\"><<lingo Metrics/SidebarBreakpoint>></$link><br>//<<lingo Metrics/SidebarBreakpoint/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint\" default=\"\" tag=\"input\"/> |\n|<$link to=\"$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth\"><<lingo Metrics/SidebarWidth>></$link><br>//<<lingo Metrics/SidebarWidth/Hint>>// |^<$edit-text tiddler=\"$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth\" default=\"\" tag=\"input\"/> |\n"
},
"$:/themes/tiddlywiki/vanilla/base": {
"title": "$:/themes/tiddlywiki/vanilla/base",
"tags": "[[$:/tags/Stylesheet]]",
"text": "\\define custom-background-datauri()\n<$set name=\"background\" value={{$:/themes/tiddlywiki/vanilla/settings/backgroundimage}}>\n<$list filter=\"[<background>is[image]]\">\n`background: url(`\n<$list filter=\"[<background>!has[_canonical_uri]]\">\n`\"`<$macrocall $name=\"datauri\" title={{$:/themes/tiddlywiki/vanilla/settings/backgroundimage}}/>`\"`\n</$list>\n<$list filter=\"[<background>has[_canonical_uri]]\">\n`\"`<$view tiddler={{$:/themes/tiddlywiki/vanilla/settings/backgroundimage}} field=\"_canonical_uri\"/>`\"`\n</$list>\n`) center center;`\n`background-attachment: `{{$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment}}`;\n-webkit-background-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;\n-moz-background-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;\n-o-background-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;\nbackground-size:` {{$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize}}`;`\n</$list>\n</$set>\n\\end\n\n\\define if-fluid-fixed(text,hiddenSidebarText)\n<$reveal state=\"$:/themes/tiddlywiki/vanilla/options/sidebarlayout\" type=\"match\" text=\"fluid-fixed\">\n$text$\n<$reveal state=\"$:/state/sidebar\" type=\"nomatch\" text=\"yes\" default=\"yes\">\n$hiddenSidebarText$\n</$reveal>\n</$reveal>\n\\end\n\n\\define if-editor-height-fixed(then,else)\n<$reveal state=\"$:/config/TextEditor/EditorHeight/Mode\" type=\"match\" text=\"fixed\">\n$then$\n</$reveal>\n<$reveal state=\"$:/config/TextEditor/EditorHeight/Mode\" type=\"match\" text=\"auto\">\n$else$\n</$reveal>\n\\end\n\n\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline macrocallblock\n\n/*\n** Start with the normalize CSS reset, and then belay some of its effects\n*/\n\n{{$:/themes/tiddlywiki/vanilla/reset}}\n\n*, input[type=\"search\"] {\n\tbox-sizing: border-box;\n\t-moz-box-sizing: border-box;\n\t-webkit-box-sizing: border-box;\n}\n\nhtml button {\n\tline-height: 1.2;\n\tcolor: <<colour button-foreground>>;\n\tbackground: <<colour button-background>>;\n\tborder-color: <<colour button-border>>;\n}\n\n/*\n** Basic element styles\n*/\n\nhtml {\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/fontfamily}};\n\ttext-rendering: optimizeLegibility; /* Enables kerning and ligatures etc. */\n\t-webkit-font-smoothing: antialiased;\n\t-moz-osx-font-smoothing: grayscale;\n}\n\nhtml:-webkit-full-screen {\n\tbackground-color: <<colour page-background>>;\n}\n\nbody.tc-body {\n\tfont-size: {{$:/themes/tiddlywiki/vanilla/metrics/fontsize}};\n\tline-height: {{$:/themes/tiddlywiki/vanilla/metrics/lineheight}};\n\tword-wrap: break-word;\n\t<<custom-background-datauri>>\n\tcolor: <<colour foreground>>;\n\tbackground-color: <<colour page-background>>;\n\tfill: <<colour foreground>>;\n}\n\n<<if-background-attachment \"\"\"\n\nbody.tc-body {\n background-color: transparent;\n}\n\n\"\"\">>\n\nh1, h2, h3, h4, h5, h6 {\n\tline-height: 1.2;\n\tfont-weight: 300;\n}\n\npre {\n\tdisplay: block;\n\tpadding: 14px;\n\tmargin-top: 1em;\n\tmargin-bottom: 1em;\n\tword-break: normal;\n\tword-wrap: break-word;\n\twhite-space: {{$:/themes/tiddlywiki/vanilla/options/codewrapping}};\n\tbackground-color: <<colour pre-background>>;\n\tborder: 1px solid <<colour pre-border>>;\n\tpadding: 0 3px 2px;\n\tborder-radius: 3px;\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\n}\n\ncode {\n\tcolor: <<colour code-foreground>>;\n\tbackground-color: <<colour code-background>>;\n\tborder: 1px solid <<colour code-border>>;\n\twhite-space: {{$:/themes/tiddlywiki/vanilla/options/codewrapping}};\n\tpadding: 0 3px 2px;\n\tborder-radius: 3px;\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/codefontfamily}};\n}\n\nblockquote {\n\tborder-left: 5px solid <<colour blockquote-bar>>;\n\tmargin-left: 25px;\n\tpadding-left: 10px;\n\tquotes: \"\\201C\"\"\\201D\"\"\\2018\"\"\\2019\";\n}\n\nblockquote > div {\n\tmargin-top: 1em;\n\tmargin-bottom: 1em;\n}\n\nblockquote.tc-big-quote {\n\tfont-family: Georgia, serif;\n\tposition: relative;\n\tbackground: <<colour pre-background>>;\n\tborder-left: none;\n\tmargin-left: 50px;\n\tmargin-right: 50px;\n\tpadding: 10px;\n border-radius: 8px;\n}\n\nblockquote.tc-big-quote cite:before {\n\tcontent: \"\\2014 \\2009\";\n}\n\nblockquote.tc-big-quote:before {\n\tfont-family: Georgia, serif;\n\tcolor: <<colour blockquote-bar>>;\n\tcontent: open-quote;\n\tfont-size: 8em;\n\tline-height: 0.1em;\n\tmargin-right: 0.25em;\n\tvertical-align: -0.4em;\n\tposition: absolute;\n left: -50px;\n top: 42px;\n}\n\nblockquote.tc-big-quote:after {\n\tfont-family: Georgia, serif;\n\tcolor: <<colour blockquote-bar>>;\n\tcontent: close-quote;\n\tfont-size: 8em;\n\tline-height: 0.1em;\n\tmargin-right: 0.25em;\n\tvertical-align: -0.4em;\n\tposition: absolute;\n right: -80px;\n bottom: -20px;\n}\n\ndl dt {\n\tfont-weight: bold;\n\tmargin-top: 6px;\n}\n\nbutton, textarea, input, select {\n\toutline-color: <<colour primary>>;\n}\n\ntextarea,\ninput[type=text],\ninput[type=search],\ninput[type=\"\"],\ninput:not([type]) {\n\tcolor: <<colour foreground>>;\n\tbackground: <<colour background>>;\n}\n\ninput[type=\"checkbox\"] {\n vertical-align: middle;\n}\n\n.tc-muted {\n\tcolor: <<colour muted-foreground>>;\n}\n\nsvg.tc-image-button {\n\tpadding: 0px 1px 1px 0px;\n}\n\n.tc-icon-wrapper > svg {\n\twidth: 1em;\n\theight: 1em;\n}\n\nkbd {\n\tdisplay: inline-block;\n\tpadding: 3px 5px;\n\tfont-size: 0.8em;\n\tline-height: 1.2;\n\tcolor: <<colour foreground>>;\n\tvertical-align: middle;\n\tbackground-color: <<colour background>>;\n\tborder: solid 1px <<colour muted-foreground>>;\n\tborder-bottom-color: <<colour muted-foreground>>;\n\tborder-radius: 3px;\n\tbox-shadow: inset 0 -1px 0 <<colour muted-foreground>>;\n}\n\n/*\nMarkdown likes putting code elements inside pre elements\n*/\npre > code {\n\tpadding: 0;\n\tborder: none;\n\tbackground-color: inherit;\n\tcolor: inherit;\n}\n\ntable {\n\tborder: 1px solid <<colour table-border>>;\n\twidth: auto;\n\tmax-width: 100%;\n\tcaption-side: bottom;\n\tmargin-top: 1em;\n\tmargin-bottom: 1em;\n\t/* next 2 elements needed, since normalize 8.0.1 */\n\tborder-collapse: collapse;\n\tborder-spacing: 0;\n}\n\ntable th, table td {\n\tpadding: 0 7px 0 7px;\n\tborder-top: 1px solid <<colour table-border>>;\n\tborder-left: 1px solid <<colour table-border>>;\n}\n\ntable thead tr td, table th {\n\tbackground-color: <<colour table-header-background>>;\n\tfont-weight: bold;\n}\n\ntable tfoot tr td {\n\tbackground-color: <<colour table-footer-background>>;\n}\n\n.tc-csv-table {\n\twhite-space: nowrap;\n}\n\n.tc-tiddler-frame img,\n.tc-tiddler-frame svg,\n.tc-tiddler-frame canvas,\n.tc-tiddler-frame embed,\n.tc-tiddler-frame iframe {\n\tmax-width: 100%;\n}\n\n.tc-tiddler-body > embed,\n.tc-tiddler-body > iframe {\n\twidth: 100%;\n\theight: 600px;\n}\n\n/*\n** Links\n*/\n\nbutton.tc-tiddlylink,\na.tc-tiddlylink {\n\ttext-decoration: none;\n\tfont-weight: 500;\n\tcolor: <<colour tiddler-link-foreground>>;\n\t-webkit-user-select: inherit; /* Otherwise the draggable attribute makes links impossible to select */\n}\n\n.tc-sidebar-lists a.tc-tiddlylink {\n\tcolor: <<colour sidebar-tiddler-link-foreground>>;\n}\n\n.tc-sidebar-lists a.tc-tiddlylink:hover {\n\tcolor: <<colour sidebar-tiddler-link-foreground-hover>>;\n}\n\nbutton.tc-tiddlylink:hover,\na.tc-tiddlylink:hover {\n\ttext-decoration: underline;\n}\n\na.tc-tiddlylink-resolves {\n}\n\na.tc-tiddlylink-shadow {\n\tfont-weight: bold;\n}\n\na.tc-tiddlylink-shadow.tc-tiddlylink-resolves {\n\tfont-weight: normal;\n}\n\na.tc-tiddlylink-missing {\n\tfont-style: italic;\n}\n\na.tc-tiddlylink-external {\n\ttext-decoration: underline;\n\tcolor: <<colour external-link-foreground>>;\n\tbackground-color: <<colour external-link-background>>;\n}\n\na.tc-tiddlylink-external:visited {\n\tcolor: <<colour external-link-foreground-visited>>;\n\tbackground-color: <<colour external-link-background-visited>>;\n}\n\na.tc-tiddlylink-external:hover {\n\tcolor: <<colour external-link-foreground-hover>>;\n\tbackground-color: <<colour external-link-background-hover>>;\n}\n\n/*\n** Drag and drop styles\n*/\n\n.tc-tiddler-dragger {\n\tposition: relative;\n\tz-index: -10000;\n}\n\n.tc-tiddler-dragger-inner {\n\tposition: absolute;\n\ttop: -1000px;\n\tleft: -1000px;\n\tdisplay: inline-block;\n\tpadding: 8px 20px;\n\tfont-size: 16.9px;\n\tfont-weight: bold;\n\tline-height: 20px;\n\tcolor: <<colour dragger-foreground>>;\n\ttext-shadow: 0 1px 0 rgba(0, 0, 0, 1);\n\twhite-space: nowrap;\n\tvertical-align: baseline;\n\tbackground-color: <<colour dragger-background>>;\n\tborder-radius: 20px;\n}\n\n.tc-tiddler-dragger-cover {\n\tposition: absolute;\n\tbackground-color: <<colour page-background>>;\n}\n\n.tc-dropzone {\n\tposition: relative;\n}\n\n.tc-dropzone.tc-dragover:before {\n\tz-index: 10000;\n\tdisplay: block;\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbackground: <<colour dropzone-background>>;\n\ttext-align: center;\n\tcontent: \"<<lingo DropMessage>>\";\n}\n\n.tc-droppable > .tc-droppable-placeholder {\n\tdisplay: none;\n}\n\n.tc-droppable.tc-dragover > .tc-droppable-placeholder {\n\tdisplay: block;\n\tborder: 2px dashed <<colour dropzone-background>>;\n}\n\n.tc-draggable {\n\tcursor: move;\n}\n\n.tc-sidebar-tab-open .tc-droppable-placeholder, .tc-tagged-draggable-list .tc-droppable-placeholder,\n.tc-links-draggable-list .tc-droppable-placeholder {\n\tline-height: 2em;\n\theight: 2em;\n}\n\n.tc-sidebar-tab-open-item {\n\tposition: relative;\n}\n\n.tc-sidebar-tab-open .tc-btn-invisible.tc-btn-mini svg {\n\tfont-size: 0.7em;\n\tfill: <<colour muted-foreground>>;\n}\n\n/*\n** Plugin reload warning\n*/\n\n.tc-plugin-reload-warning {\n\tz-index: 1000;\n\tdisplay: block;\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbackground: <<colour alert-background>>;\n\ttext-align: center;\n}\n\n/*\n** Buttons\n*/\n\nbutton svg, button img, label svg, label img {\n\tvertical-align: middle;\n}\n\n.tc-btn-invisible {\n\tpadding: 0;\n\tmargin: 0;\n\tbackground: none;\n\tborder: none;\n \tcursor: pointer;\n\tcolor: <<colour foreground>>;\n}\n\n.tc-btn-boxed {\n\tfont-size: 0.6em;\n\tpadding: 0.2em;\n\tmargin: 1px;\n\tbackground: none;\n\tborder: 1px solid <<colour tiddler-controls-foreground>>;\n\tborder-radius: 0.25em;\n}\n\nhtml body.tc-body .tc-btn-boxed svg {\n\tfont-size: 1.6666em;\n}\n\n.tc-btn-boxed:hover {\n\tbackground: <<colour muted-foreground>>;\n\tcolor: <<colour background>>;\n}\n\nhtml body.tc-body .tc-btn-boxed:hover svg {\n\tfill: <<colour background>>;\n}\n\n.tc-btn-rounded {\n\tfont-size: 0.5em;\n\tline-height: 2;\n\tpadding: 0em 0.3em 0.2em 0.4em;\n\tmargin: 1px;\n\tborder: 1px solid <<colour muted-foreground>>;\n\tbackground: <<colour muted-foreground>>;\n\tcolor: <<colour background>>;\n\tborder-radius: 2em;\n}\n\nhtml body.tc-body .tc-btn-rounded svg {\n\tfont-size: 1.6666em;\n\tfill: <<colour background>>;\n}\n\n.tc-btn-rounded:hover {\n\tborder: 1px solid <<colour muted-foreground>>;\n\tbackground: <<colour background>>;\n\tcolor: <<colour muted-foreground>>;\n}\n\nhtml body.tc-body .tc-btn-rounded:hover svg {\n\tfill: <<colour muted-foreground>>;\n}\n\n.tc-btn-icon svg {\n\theight: 1em;\n\twidth: 1em;\n\tfill: <<colour muted-foreground>>;\n}\n\n.tc-btn-text {\n\tpadding: 0;\n\tmargin: 0;\n}\n\n/* used for documentation \"fake\" buttons */\n.tc-btn-standard {\n\tline-height: 1.8;\n\tcolor: #667;\n\tbackground-color: #e0e0e0;\n\tborder: 1px solid #888;\n\tpadding: 2px 1px 2px 1px;\n\tmargin: 1px 4px 1px 4px;\n}\n\n.tc-btn-big-green {\n\tdisplay: inline-block;\n\tpadding: 8px;\n\tmargin: 4px 8px 4px 8px;\n\tbackground: <<colour download-background>>;\n\tcolor: <<colour download-foreground>>;\n\tfill: <<colour download-foreground>>;\n\tborder: none;\n\tborder-radius: 2px;\n\tfont-size: 1.2em;\n\tline-height: 1.4em;\n\ttext-decoration: none;\n}\n\n.tc-btn-big-green svg,\n.tc-btn-big-green img {\n\theight: 2em;\n\twidth: 2em;\n\tvertical-align: middle;\n\tfill: <<colour download-foreground>>;\n}\n\n.tc-primary-btn {\n \tbackground: <<colour primary>>;\n}\n\n.tc-sidebar-lists input {\n\tcolor: <<colour foreground>>;\n}\n\n.tc-sidebar-lists button {\n\tcolor: <<colour sidebar-button-foreground>>;\n\tfill: <<colour sidebar-button-foreground>>;\n}\n\n.tc-sidebar-lists button.tc-btn-mini {\n\tcolor: <<colour sidebar-muted-foreground>>;\n}\n\n.tc-sidebar-lists button.tc-btn-mini:hover {\n\tcolor: <<colour sidebar-muted-foreground-hover>>;\n}\n\nbutton svg.tc-image-button, button .tc-image-button img {\n\theight: 1em;\n\twidth: 1em;\n}\n\n.tc-unfold-banner {\n\tposition: absolute;\n\tpadding: 0;\n\tmargin: 0;\n\tbackground: none;\n\tborder: none;\n\twidth: 100%;\n\twidth: calc(100% + 2px);\n\tmargin-left: -43px;\n\ttext-align: center;\n\tborder-top: 2px solid <<colour tiddler-info-background>>;\n\tmargin-top: 4px;\n}\n\n.tc-unfold-banner:hover {\n\tbackground: <<colour tiddler-info-background>>;\n\tborder-top: 2px solid <<colour tiddler-info-border>>;\n}\n\n.tc-unfold-banner svg, .tc-fold-banner svg {\n\theight: 0.75em;\n\tfill: <<colour tiddler-controls-foreground>>;\n}\n\n.tc-unfold-banner:hover svg, .tc-fold-banner:hover svg {\n\tfill: <<colour tiddler-controls-foreground-hover>>;\n}\n\n.tc-fold-banner {\n\tposition: absolute;\n\tpadding: 0;\n\tmargin: 0;\n\tbackground: none;\n\tborder: none;\n\twidth: 23px;\n\ttext-align: center;\n\tmargin-left: -35px;\n\ttop: 6px;\n\tbottom: 6px;\n}\n\n.tc-fold-banner:hover {\n\tbackground: <<colour tiddler-info-background>>;\n}\n\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\n\t.tc-unfold-banner {\n\t\tposition: static;\n\t\twidth: calc(100% + 59px);\n\t}\n\n\t.tc-fold-banner {\n\t\twidth: 16px;\n\t\tmargin-left: -16px;\n\t\tfont-size: 0.75em;\n\t}\n\n}\n\n/*\n** Tags and missing tiddlers\n*/\n\n.tc-tag-list-item {\n\tposition: relative;\n\tdisplay: inline-block;\n\tmargin-right: 7px;\n}\n\n.tc-tags-wrapper {\n\tmargin: 4px 0 14px 0;\n}\n\n.tc-missing-tiddler-label {\n\tfont-style: italic;\n\tfont-weight: normal;\n\tdisplay: inline-block;\n\tfont-size: 11.844px;\n\tline-height: 14px;\n\twhite-space: nowrap;\n\tvertical-align: baseline;\n}\n\nbutton.tc-tag-label, span.tc-tag-label {\n\tdisplay: inline-block;\n\tpadding: 0.16em 0.7em;\n\tfont-size: 0.9em;\n\tfont-weight: 400;\n\tline-height: 1.2em;\n\tcolor: <<colour tag-foreground>>;\n\twhite-space: nowrap;\n\tvertical-align: baseline;\n\tbackground-color: <<colour tag-background>>;\n\tborder-radius: 1em;\n}\n\n.tc-sidebar-scrollable .tc-tag-label {\n\ttext-shadow: none;\n}\n\n.tc-untagged-separator {\n\twidth: 10em;\n\tleft: 0;\n\tmargin-left: 0;\n\tborder: 0;\n\theight: 1px;\n\tbackground: <<colour tab-divider>>;\n}\n\nbutton.tc-untagged-label {\n\tbackground-color: <<colour untagged-background>>;\n}\n\n.tc-tag-label svg, .tc-tag-label img {\n\theight: 1em;\n\twidth: 1em;\n\tmargin-right: 3px; \n\tmargin-bottom: 1px;\n\tvertical-align: text-bottom;\n}\n\n.tc-edit-tags button.tc-remove-tag-button svg {\n\tfont-size: 0.7em;\n\tvertical-align: middle;\n}\n\n.tc-tag-manager-table .tc-tag-label {\n\twhite-space: normal;\n}\n\n.tc-tag-manager-tag {\n\twidth: 100%;\n}\n\nbutton.tc-btn-invisible.tc-remove-tag-button {\n\toutline: none;\n}\n\n/*\n** Page layout\n*/\n\n.tc-topbar {\n\tposition: fixed;\n\tz-index: 1200;\n}\n\n.tc-topbar-left {\n\tleft: 29px;\n\ttop: 5px;\n}\n\n.tc-topbar-right {\n\ttop: 5px;\n\tright: 29px;\n}\n\n.tc-topbar button {\n\tpadding: 8px;\n}\n\n.tc-topbar svg {\n\tfill: <<colour muted-foreground>>;\n}\n\n.tc-topbar button:hover svg {\n\tfill: <<colour foreground>>;\n}\n\n.tc-sidebar-header {\n\tcolor: <<colour sidebar-foreground>>;\n\tfill: <<colour sidebar-foreground>>;\n}\n\n.tc-sidebar-header .tc-title a.tc-tiddlylink-resolves {\n\tfont-weight: 300;\n}\n\n.tc-sidebar-header .tc-sidebar-lists p {\n\tmargin-top: 3px;\n\tmargin-bottom: 3px;\n}\n\n.tc-sidebar-header .tc-missing-tiddler-label {\n\tcolor: <<colour sidebar-foreground>>;\n}\n\n.tc-advanced-search input {\n\twidth: 60%;\n}\n\n.tc-search a svg {\n\twidth: 1.2em;\n\theight: 1.2em;\n\tvertical-align: middle;\n}\n\n.tc-page-controls {\n\tmargin-top: 14px;\n\tfont-size: 1.5em;\n}\n\n.tc-page-controls .tc-drop-down {\n font-size: 1rem;\n}\n\n.tc-page-controls button {\n\tmargin-right: 0.5em;\n}\n\n.tc-page-controls a.tc-tiddlylink:hover {\n\ttext-decoration: none;\n}\n\n.tc-page-controls img {\n\twidth: 1em;\n}\n\n.tc-page-controls svg {\n\tfill: <<colour sidebar-controls-foreground>>;\n}\n\n.tc-page-controls button:hover svg, .tc-page-controls a:hover svg {\n\tfill: <<colour sidebar-controls-foreground-hover>>;\n}\n\n.tc-menu-list-item {\n\twhite-space: nowrap;\n}\n\n.tc-menu-list-count {\n\tfont-weight: bold;\n}\n\n.tc-menu-list-subitem {\n\tpadding-left: 7px;\n}\n\n.tc-story-river {\n\tposition: relative;\n}\n\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\n\t.tc-sidebar-header {\n\t\tpadding: 14px;\n\t\tmin-height: 32px;\n\t\tmargin-top: {{$:/themes/tiddlywiki/vanilla/metrics/storytop}};\n\t}\n\n\t.tc-story-river {\n\t\tposition: relative;\n\t\tpadding: 0;\n\t}\n}\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\n\t.tc-message-box {\n\t\tmargin: 21px -21px 21px -21px;\n\t}\n\n\t.tc-sidebar-scrollable {\n\t\tposition: fixed;\n\t\ttop: {{$:/themes/tiddlywiki/vanilla/metrics/storytop}};\n\t\tleft: {{$:/themes/tiddlywiki/vanilla/metrics/storyright}};\n\t\tbottom: 0;\n\t\tright: 0;\n\t\toverflow-y: auto;\n\t\toverflow-x: auto;\n\t\t-webkit-overflow-scrolling: touch;\n\t\tmargin: 0 0 0 -42px;\n\t\tpadding: 71px 0 28px 42px;\n\t}\n\n\thtml[dir=\"rtl\"] .tc-sidebar-scrollable {\n\t\tleft: auto;\n\t\tright: {{$:/themes/tiddlywiki/vanilla/metrics/storyright}};\n\t}\n\n\t.tc-story-river {\n\t\tposition: relative;\n\t\tleft: {{$:/themes/tiddlywiki/vanilla/metrics/storyleft}};\n\t\ttop: {{$:/themes/tiddlywiki/vanilla/metrics/storytop}};\n\t\twidth: {{$:/themes/tiddlywiki/vanilla/metrics/storywidth}};\n\t\tpadding: 42px 42px 42px 42px;\n\t}\n\n<<if-no-sidebar \"\n\n\t.tc-story-river {\n\t\twidth: calc(100% - {{$:/themes/tiddlywiki/vanilla/metrics/storyleft}});\n\t}\n\n\">>\n\n}\n\n@media print {\n\n\tbody.tc-body {\n\t\tbackground-color: transparent;\n\t}\n\n\t.tc-sidebar-header, .tc-topbar {\n\t\tdisplay: none;\n\t}\n\n\t.tc-story-river {\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t}\n\n\t.tc-story-river .tc-tiddler-frame {\n\t\tmargin: 0;\n\t\tborder: none;\n\t\tpadding: 0;\n\t}\n}\n\n/*\n** Tiddler styles\n*/\n\n.tc-tiddler-frame {\n\tposition: relative;\n\tmargin-bottom: 28px;\n\tbackground-color: <<colour tiddler-background>>;\n\tborder: 1px solid <<colour tiddler-border>>;\n}\n\n{{$:/themes/tiddlywiki/vanilla/sticky}}\n\n.tc-tiddler-info {\n\tpadding: 14px 42px 14px 42px;\n\tbackground-color: <<colour tiddler-info-background>>;\n\tborder-top: 1px solid <<colour tiddler-info-border>>;\n\tborder-bottom: 1px solid <<colour tiddler-info-border>>;\n}\n\n.tc-tiddler-info p {\n\tmargin-top: 3px;\n\tmargin-bottom: 3px;\n}\n\n.tc-tiddler-info .tc-tab-buttons button.tc-tab-selected {\n\tbackground-color: <<colour tiddler-info-tab-background>>;\n\tborder-bottom: 1px solid <<colour tiddler-info-tab-background>>;\n}\n\n.tc-view-field-table {\n\twidth: 100%;\n}\n\n.tc-view-field-name {\n\twidth: 1%; /* Makes this column be as narrow as possible */\n\ttext-align: right;\n\tfont-style: italic;\n\tfont-weight: 200;\n}\n\n.tc-view-field-value {\n}\n\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\t.tc-tiddler-frame {\n\t\tpadding: 14px 14px 14px 14px;\n\t}\n\n\t.tc-tiddler-info {\n\t\tmargin: 0 -14px 0 -14px;\n\t}\n}\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\t.tc-tiddler-frame {\n\t\tpadding: 28px 42px 42px 42px;\n\t\twidth: {{$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth}};\n\t\tborder-radius: 2px;\n\t}\n\n<<if-no-sidebar \"\n\n\t.tc-tiddler-frame {\n\t\twidth: 100%;\n\t}\n\n\">>\n\n\t.tc-tiddler-info {\n\t\tmargin: 0 -42px 0 -42px;\n\t}\n}\n\n.tc-site-title,\n.tc-titlebar {\n\tfont-weight: 300;\n\tfont-size: 2.35em;\n\tline-height: 1.2em;\n\tcolor: <<colour tiddler-title-foreground>>;\n\tmargin: 0;\n}\n\n.tc-site-title {\n\tcolor: <<colour site-title-foreground>>;\n}\n\n.tc-tiddler-title-icon {\n\tvertical-align: middle;\n\tmargin-right: .1em;\n}\n\n.tc-system-title-prefix {\n\tcolor: <<colour muted-foreground>>;\n}\n\n.tc-titlebar h2 {\n\tfont-size: 1em;\n\tdisplay: inline;\n}\n\n.tc-titlebar img {\n\theight: 1em;\n}\n\n.tc-subtitle {\n\tfont-size: 0.9em;\n\tcolor: <<colour tiddler-subtitle-foreground>>;\n\tfont-weight: 300;\n}\n\n.tc-subtitle .tc-tiddlylink {\n\tmargin-right: .3em;\n}\n\n.tc-tiddler-missing .tc-title {\n font-style: italic;\n font-weight: normal;\n}\n\n.tc-tiddler-frame .tc-tiddler-controls {\n\tfloat: right;\n}\n\n.tc-tiddler-controls .tc-drop-down {\n\tfont-size: 0.6em;\n}\n\n.tc-tiddler-controls .tc-drop-down .tc-drop-down {\n\tfont-size: 1em;\n}\n\n.tc-tiddler-controls > span > button,\n.tc-tiddler-controls > span > span > button,\n.tc-tiddler-controls > span > span > span > button {\n\tvertical-align: baseline;\n\tmargin-left:5px;\n}\n\n.tc-tiddler-controls button svg, .tc-tiddler-controls button img,\n.tc-search button svg, .tc-search a svg {\n\tfill: <<colour tiddler-controls-foreground>>;\n}\n\n.tc-tiddler-controls button svg, .tc-tiddler-controls button img {\n\theight: 0.75em;\n}\n\n.tc-search button svg, .tc-search a svg {\n height: 1.2em;\n width: 1.2em;\n margin: 0 0.25em;\n}\n\n.tc-tiddler-controls button.tc-selected svg,\n.tc-page-controls button.tc-selected svg {\n\tfill: <<colour tiddler-controls-foreground-selected>>;\n}\n\n.tc-tiddler-controls button.tc-btn-invisible:hover svg,\n.tc-search button:hover svg, .tc-search a:hover svg {\n\tfill: <<colour tiddler-controls-foreground-hover>>;\n}\n\n@media print {\n\t.tc-tiddler-controls {\n\t\tdisplay: none;\n\t}\n}\n\n.tc-tiddler-help { /* Help prompts within tiddler template */\n\tcolor: <<colour muted-foreground>>;\n\tmargin-top: 14px;\n}\n\n.tc-tiddler-help a.tc-tiddlylink {\n\tcolor: <<colour very-muted-foreground>>;\n}\n\n.tc-tiddler-frame .tc-edit-texteditor {\n\twidth: 100%;\n\tmargin: 4px 0 4px 0;\n}\n\n.tc-tiddler-frame input.tc-edit-texteditor,\n.tc-tiddler-frame textarea.tc-edit-texteditor,\n.tc-tiddler-frame iframe.tc-edit-texteditor {\n\tpadding: 3px 3px 3px 3px;\n\tborder: 1px solid <<colour tiddler-editor-border>>;\n\tbackground-color: <<colour tiddler-editor-background>>;\n\tline-height: 1.3em;\n\t-webkit-appearance: none;\n\tfont-family: {{$:/themes/tiddlywiki/vanilla/settings/editorfontfamily}};\n}\n\n.tc-tiddler-frame .tc-binary-warning {\n\twidth: 100%;\n\theight: 5em;\n\ttext-align: center;\n\tpadding: 3em 3em 6em 3em;\n\tbackground: <<colour alert-background>>;\n\tborder: 1px solid <<colour alert-border>>;\n}\n\ncanvas.tc-edit-bitmapeditor {\n\tborder: 6px solid <<colour tiddler-editor-border-image>>;\n\tcursor: crosshair;\n\t-moz-user-select: none;\n\t-webkit-user-select: none;\n\t-ms-user-select: none;\n\tmargin-top: 6px;\n\tmargin-bottom: 6px;\n}\n\n.tc-edit-bitmapeditor-width {\n\tdisplay: block;\n}\n\n.tc-edit-bitmapeditor-height {\n\tdisplay: block;\n}\n\n.tc-tiddler-body {\n\tclear: both;\n}\n\n.tc-tiddler-frame .tc-tiddler-body {\n\tfont-size: {{$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize}};\n\tline-height: {{$:/themes/tiddlywiki/vanilla/metrics/bodylineheight}};\n}\n\n.tc-titlebar, .tc-tiddler-edit-title {\n\toverflow: hidden; /* https://github.com/Jermolene/TiddlyWiki5/issues/282 */\n}\n\nhtml body.tc-body.tc-single-tiddler-window {\n\tmargin: 1em;\n\tbackground: <<colour tiddler-background>>;\n}\n\n.tc-single-tiddler-window img,\n.tc-single-tiddler-window svg,\n.tc-single-tiddler-window canvas,\n.tc-single-tiddler-window embed,\n.tc-single-tiddler-window iframe {\n\tmax-width: 100%;\n}\n\n/*\n** Editor\n*/\n\n.tc-editor-toolbar {\n\tmargin-top: 8px;\n}\n\n.tc-editor-toolbar button {\n\tvertical-align: middle;\n\tbackground-color: <<colour tiddler-controls-foreground>>;\n\tcolor: <<colour tiddler-controls-foreground-selected>>;\n\tfill: <<colour tiddler-controls-foreground-selected>>;\n\tborder-radius: 4px;\n\tpadding: 3px;\n\tmargin: 2px 0 2px 4px;\n}\n\n.tc-editor-toolbar button.tc-text-editor-toolbar-item-adjunct {\n\tmargin-left: 1px;\n\twidth: 1em;\n\tborder-radius: 8px;\n}\n\n.tc-editor-toolbar button.tc-text-editor-toolbar-item-start-group {\n\tmargin-left: 11px;\n}\n\n.tc-editor-toolbar button.tc-selected {\n\tbackground-color: <<colour primary>>;\n}\n\n.tc-editor-toolbar button svg {\n\twidth: 1.6em;\n\theight: 1.2em;\n}\n\n.tc-editor-toolbar button:hover {\n\tbackground-color: <<colour tiddler-controls-foreground-selected>>;\n\tfill: <<colour background>>;\n\tcolor: <<colour background>>;\n}\n\n.tc-editor-toolbar .tc-text-editor-toolbar-more {\n\twhite-space: normal;\n}\n\n.tc-editor-toolbar .tc-text-editor-toolbar-more button {\n\tdisplay: inline-block;\n\tpadding: 3px;\n\twidth: auto;\n}\n\n.tc-editor-toolbar .tc-search-results {\n\tpadding: 0;\n}\n\n/*\n** Adjustments for fluid-fixed mode\n*/\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\n<<if-fluid-fixed text:\"\"\"\n\n\t.tc-story-river {\n\t\tpadding-right: 0;\n\t\tposition: relative;\n\t\twidth: auto;\n\t\tleft: 0;\n\t\tmargin-left: {{$:/themes/tiddlywiki/vanilla/metrics/storyleft}};\n\t\tmargin-right: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth}};\n\t}\n\n\t.tc-tiddler-frame {\n\t\twidth: 100%;\n\t}\n\n\t.tc-sidebar-scrollable {\n\t\tleft: auto;\n\t\tbottom: 0;\n\t\tright: 0;\n\t\twidth: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth}};\n\t}\n\n\tbody.tc-body .tc-storyview-zoomin-tiddler {\n\t\twidth: 100%;\n\t\twidth: calc(100% - 42px);\n\t}\n\n\"\"\" hiddenSidebarText:\"\"\"\n\n\t.tc-story-river {\n\t\tpadding-right: 3em;\n\t\tmargin-right: 0;\n\t}\n\n\tbody.tc-body .tc-storyview-zoomin-tiddler {\n\t\twidth: 100%;\n\t\twidth: calc(100% - 84px);\n\t}\n\n\"\"\">>\n\n}\n\n/*\n** Toolbar buttons\n*/\n\n.tc-page-controls svg.tc-image-new-button {\n fill: <<colour toolbar-new-button>>;\n}\n\n.tc-page-controls svg.tc-image-options-button {\n fill: <<colour toolbar-options-button>>;\n}\n\n.tc-page-controls svg.tc-image-save-button {\n fill: <<colour toolbar-save-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-info-button {\n fill: <<colour toolbar-info-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-edit-button {\n fill: <<colour toolbar-edit-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-close-button {\n fill: <<colour toolbar-close-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-delete-button {\n fill: <<colour toolbar-delete-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-cancel-button {\n fill: <<colour toolbar-cancel-button>>;\n}\n\n.tc-tiddler-controls button svg.tc-image-done-button {\n fill: <<colour toolbar-done-button>>;\n}\n\n/*\n** Tiddler edit mode\n*/\n\n.tc-tiddler-edit-frame em.tc-edit {\n\tcolor: <<colour muted-foreground>>;\n\tfont-style: normal;\n}\n\n.tc-edit-type-dropdown a.tc-tiddlylink-missing {\n\tfont-style: normal;\n}\n\n.tc-type-selector .tc-edit-typeeditor {\n\twidth: 20%;\n}\n\n.tc-edit-tags {\n\tborder: 1px solid <<colour tiddler-editor-border>>;\n\tpadding: 4px 8px 4px 8px;\n}\n\n.tc-edit-add-tag {\n\tdisplay: inline-block;\n}\n\n.tc-edit-add-tag .tc-add-tag-name input {\n\twidth: 50%;\n}\n\n.tc-edit-add-tag .tc-keyboard {\n\tdisplay:inline;\n}\n\n.tc-edit-tags .tc-tag-label {\n\tdisplay: inline-block;\n}\n\n.tc-edit-tags-list {\n\tmargin: 14px 0 14px 0;\n}\n\n.tc-remove-tag-button {\n\tpadding-left: 4px;\n}\n\n.tc-tiddler-preview {\n\toverflow: auto;\n}\n\n.tc-tiddler-preview-preview {\n\tfloat: right;\n\twidth: 49%;\n\tborder: 1px solid <<colour tiddler-editor-border>>;\n\tmargin: 4px 0 3px 3px;\n\tpadding: 3px 3px 3px 3px;\n}\n\n<<if-editor-height-fixed then:\"\"\"\n\n.tc-tiddler-preview-preview {\n\toverflow-y: scroll;\n\theight: {{$:/config/TextEditor/EditorHeight/Height}};\n}\n\n\"\"\">>\n\n.tc-tiddler-frame .tc-tiddler-preview .tc-edit-texteditor {\n\twidth: 49%;\n}\n\n.tc-tiddler-frame .tc-tiddler-preview canvas.tc-edit-bitmapeditor {\n\tmax-width: 49%;\n}\n\n.tc-edit-fields {\n\twidth: 100%;\n}\n\n\n.tc-edit-fields table, .tc-edit-fields tr, .tc-edit-fields td {\n\tborder: none;\n\tpadding: 4px;\n}\n\n.tc-edit-fields > tbody > .tc-edit-field:nth-child(odd) {\n\tbackground-color: <<colour tiddler-editor-fields-odd>>;\n}\n\n.tc-edit-fields > tbody > .tc-edit-field:nth-child(even) {\n\tbackground-color: <<colour tiddler-editor-fields-even>>;\n}\n\n.tc-edit-field-name {\n\ttext-align: right;\n}\n\n.tc-edit-field-value input {\n\twidth: 100%;\n}\n\n.tc-edit-field-remove {\n}\n\n.tc-edit-field-remove svg {\n\theight: 1em;\n\twidth: 1em;\n\tfill: <<colour muted-foreground>>;\n\tvertical-align: middle;\n}\n\n.tc-edit-field-add-name {\n\tdisplay: inline-block;\n\twidth: 15%;\n}\n\n.tc-edit-field-add-value {\n\tdisplay: inline-block;\n\twidth: 40%;\n}\n\n.tc-edit-field-add-button {\n\tdisplay: inline-block;\n\twidth: 10%;\n}\n\n/*\n** Storyview Classes\n*/\n\n.tc-viewswitcher .tc-image-button {\n\tmargin-right: .3em;\n}\n\n.tc-storyview-zoomin-tiddler {\n\tposition: absolute;\n\tdisplay: block;\n\twidth: 100%;\n}\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\n\t.tc-storyview-zoomin-tiddler {\n\t\twidth: calc(100% - 84px);\n\t}\n\n}\n\n/*\n** Dropdowns\n*/\n\n.tc-btn-dropdown {\n\ttext-align: left;\n}\n\n.tc-btn-dropdown svg, .tc-btn-dropdown img {\n\theight: 1em;\n\twidth: 1em;\n\tfill: <<colour muted-foreground>>;\n}\n\n.tc-drop-down-wrapper {\n\tposition: relative;\n}\n\n.tc-drop-down {\n\tmin-width: 380px;\n\tborder: 1px solid <<colour dropdown-border>>;\n\tbackground-color: <<colour dropdown-background>>;\n\tpadding: 7px 0 7px 0;\n\tmargin: 4px 0 0 0;\n\twhite-space: nowrap;\n\ttext-shadow: none;\n\tline-height: 1.4;\n}\n\n.tc-drop-down .tc-drop-down {\n\tmargin-left: 14px;\n}\n\n.tc-drop-down button svg, .tc-drop-down a svg {\n\tfill: <<colour foreground>>;\n}\n\n.tc-drop-down button.tc-btn-invisible:hover svg {\n\tfill: <<colour foreground>>;\n}\n\n.tc-drop-down .tc-drop-down-info {\n\tpadding-left: 14px;\n}\n\n.tc-drop-down p {\n\tpadding: 0 14px 0 14px;\n}\n\n.tc-drop-down svg {\n\twidth: 1em;\n\theight: 1em;\n}\n\n.tc-drop-down img {\n\twidth: 1em;\n}\n\n.tc-drop-down a, .tc-drop-down button {\n\tdisplay: block;\n\tpadding: 0 14px 0 14px;\n\twidth: 100%;\n\ttext-align: left;\n\tcolor: <<colour foreground>>;\n\tline-height: 1.4;\n}\n\n.tc-drop-down .tc-tab-set .tc-tab-buttons button {\n\tdisplay: inline-block;\n width: auto;\n margin-bottom: 0px;\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n}\n\n.tc-drop-down .tc-prompt {\n\tpadding: 0 14px;\n}\n\n.tc-drop-down .tc-chooser {\n\tborder: none;\n}\n\n.tc-drop-down .tc-chooser .tc-swatches-horiz {\n\tfont-size: 0.4em;\n\tpadding-left: 1.2em;\n}\n\n.tc-drop-down .tc-file-input-wrapper {\n\twidth: 100%;\n}\n\n.tc-drop-down .tc-file-input-wrapper button {\n\tcolor: <<colour foreground>>;\n}\n\n.tc-drop-down a:hover, .tc-drop-down button:hover, .tc-drop-down .tc-file-input-wrapper:hover button {\n\tcolor: <<colour tiddler-link-background>>;\n\tbackground-color: <<colour tiddler-link-foreground>>;\n\ttext-decoration: none;\n}\n\n.tc-drop-down .tc-tab-buttons button {\n\tbackground-color: <<colour dropdown-tab-background>>;\n}\n\n.tc-drop-down .tc-tab-buttons button.tc-tab-selected {\n\tbackground-color: <<colour dropdown-tab-background-selected>>;\n\tborder-bottom: 1px solid <<colour dropdown-tab-background-selected>>;\n}\n\n.tc-drop-down-bullet {\n\tdisplay: inline-block;\n\twidth: 0.5em;\n}\n\n.tc-drop-down .tc-tab-contents a {\n\tpadding: 0 0.5em 0 0.5em;\n}\n\n.tc-block-dropdown-wrapper {\n\tposition: relative;\n}\n\n.tc-block-dropdown {\n\tposition: absolute;\n\tmin-width: 220px;\n\tborder: 1px solid <<colour dropdown-border>>;\n\tbackground-color: <<colour dropdown-background>>;\n\tpadding: 7px 0;\n\tmargin: 4px 0 0 0;\n\twhite-space: nowrap;\n\tz-index: 1000;\n\ttext-shadow: none;\n}\n\n.tc-block-dropdown.tc-search-drop-down {\n\tmargin-left: -12px;\n}\n\n.tc-block-dropdown a {\n\tdisplay: block;\n\tpadding: 4px 14px 4px 14px;\n}\n\n.tc-block-dropdown.tc-search-drop-down a {\n\tdisplay: block;\n\tpadding: 0px 10px 0px 10px;\n}\n\n.tc-drop-down .tc-dropdown-item-plain,\n.tc-block-dropdown .tc-dropdown-item-plain {\n\tpadding: 4px 14px 4px 7px;\n}\n\n.tc-drop-down .tc-dropdown-item,\n.tc-block-dropdown .tc-dropdown-item {\n\tpadding: 4px 14px 4px 7px;\n\tcolor: <<colour muted-foreground>>;\n}\n\n.tc-block-dropdown a:hover {\n\tcolor: <<colour tiddler-link-background>>;\n\tbackground-color: <<colour tiddler-link-foreground>>;\n\ttext-decoration: none;\n}\n\n.tc-search-results {\n\tpadding: 0 7px 0 7px;\n}\n\n.tc-image-chooser, .tc-colour-chooser {\n\twhite-space: normal;\n}\n\n.tc-image-chooser a,\n.tc-colour-chooser a {\n\tdisplay: inline-block;\n\tvertical-align: top;\n\ttext-align: center;\n\tposition: relative;\n}\n\n.tc-image-chooser a {\n\tborder: 1px solid <<colour muted-foreground>>;\n\tpadding: 2px;\n\tmargin: 2px;\n\twidth: 4em;\n\theight: 4em;\n}\n\n.tc-colour-chooser a {\n\tpadding: 3px;\n\twidth: 2em;\n\theight: 2em;\n\tvertical-align: middle;\n}\n\n.tc-image-chooser a:hover,\n.tc-colour-chooser a:hover {\n\tbackground: <<colour primary>>;\n\tpadding: 0px;\n\tborder: 3px solid <<colour primary>>;\n}\n\n.tc-image-chooser a svg,\n.tc-image-chooser a img {\n\tdisplay: inline-block;\n\twidth: auto;\n\theight: auto;\n\tmax-width: 3.5em;\n\tmax-height: 3.5em;\n\tposition: absolute;\n\ttop: 0;\n\tbottom: 0;\n\tleft: 0;\n\tright: 0;\n\tmargin: auto;\n}\n\n/*\n** Modals\n*/\n\n.tc-modal-wrapper {\n\tposition: fixed;\n\toverflow: auto;\n\toverflow-y: scroll;\n\ttop: 0;\n\tright: 0;\n\tbottom: 0;\n\tleft: 0;\n\tz-index: 900;\n}\n\n.tc-modal-backdrop {\n\tposition: fixed;\n\ttop: 0;\n\tright: 0;\n\tbottom: 0;\n\tleft: 0;\n\tz-index: 1000;\n\tbackground-color: <<colour modal-backdrop>>;\n}\n\n.tc-modal {\n\tz-index: 1100;\n\tbackground-color: <<colour modal-background>>;\n\tborder: 1px solid <<colour modal-border>>;\n}\n\n@media (max-width: 55em) {\n\t.tc-modal {\n\t\tposition: fixed;\n\t\ttop: 1em;\n\t\tleft: 1em;\n\t\tright: 1em;\n\t}\n\n\t.tc-modal-body {\n\t\toverflow-y: auto;\n\t\tmax-height: 400px;\n\t\tmax-height: 60vh;\n\t}\n}\n\n@media (min-width: 55em) {\n\t.tc-modal {\n\t\tposition: fixed;\n\t\ttop: 2em;\n\t\tleft: 25%;\n\t\twidth: 50%;\n\t}\n\n\t.tc-modal-body {\n\t\toverflow-y: auto;\n\t\tmax-height: 400px;\n\t\tmax-height: 60vh;\n\t}\n}\n\n.tc-modal-header {\n\tpadding: 9px 15px;\n\tborder-bottom: 1px solid <<colour modal-header-border>>;\n}\n\n.tc-modal-header h3 {\n\tmargin: 0;\n\tline-height: 30px;\n}\n\n.tc-modal-header img, .tc-modal-header svg {\n\twidth: 1em;\n\theight: 1em;\n}\n\n.tc-modal-body {\n\tpadding: 15px;\n}\n\n.tc-modal-footer {\n\tpadding: 14px 15px 15px;\n\tmargin-bottom: 0;\n\ttext-align: right;\n\tbackground-color: <<colour modal-footer-background>>;\n\tborder-top: 1px solid <<colour modal-footer-border>>;\n}\n\n/*\n** Notifications\n*/\n\n.tc-notification {\n\tposition: fixed;\n\ttop: 14px;\n\tright: 42px;\n\tz-index: 1300;\n\tmax-width: 280px;\n\tpadding: 0 14px 0 14px;\n\tbackground-color: <<colour notification-background>>;\n\tborder: 1px solid <<colour notification-border>>;\n}\n\n/*\n** Tabs\n*/\n\n.tc-tab-set.tc-vertical {\n\tdisplay: -webkit-flex;\n\tdisplay: flex;\n}\n\n.tc-tab-buttons {\n\tfont-size: 0.85em;\n\tpadding-top: 1em;\n\tmargin-bottom: -2px;\n}\n\n.tc-tab-buttons.tc-vertical {\n\tz-index: 100;\n\tdisplay: block;\n\tpadding-top: 14px;\n\tvertical-align: top;\n\ttext-align: right;\n\tmargin-bottom: inherit;\n\tmargin-right: -1px;\n\tmax-width: 33%;\n\t-webkit-flex: 0 0 auto;\n\tflex: 0 0 auto;\n}\n\n.tc-tab-buttons button.tc-tab-selected {\n\tcolor: <<colour tab-foreground-selected>>;\n\tbackground-color: <<colour tab-background-selected>>;\n\tborder-left: 1px solid <<colour tab-border-selected>>;\n\tborder-top: 1px solid <<colour tab-border-selected>>;\n\tborder-right: 1px solid <<colour tab-border-selected>>;\n}\n\n.tc-tab-buttons button {\n\tcolor: <<colour tab-foreground>>;\n\tpadding: 3px 5px 3px 5px;\n\tmargin-right: 0.3em;\n\tfont-weight: 300;\n\tborder: none;\n\tbackground: inherit;\n\tbackground-color: <<colour tab-background>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-top: 1px solid <<colour tab-border>>;\n\tborder-right: 1px solid <<colour tab-border>>;\n\tborder-top-left-radius: 2px;\n\tborder-top-right-radius: 2px;\n\tborder-bottom-left-radius: 0;\n\tborder-bottom-right-radius: 0;\n}\n\n.tc-tab-buttons.tc-vertical button {\n\tdisplay: block;\n\twidth: 100%;\n\tmargin-top: 3px;\n\tmargin-right: 0;\n\ttext-align: right;\n\tbackground-color: <<colour tab-background>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-bottom: 1px solid <<colour tab-border>>;\n\tborder-right: none;\n\tborder-top-left-radius: 2px;\n\tborder-bottom-left-radius: 2px;\n\tborder-top-right-radius: 0;\n\tborder-bottom-right-radius: 0;\n}\n\n.tc-tab-buttons.tc-vertical button.tc-tab-selected {\n\tbackground-color: <<colour tab-background-selected>>;\n\tborder-right: 1px solid <<colour tab-background-selected>>;\n}\n\n.tc-tab-divider {\n\tborder-top: 1px solid <<colour tab-divider>>;\n}\n\n.tc-tab-divider.tc-vertical {\n\tdisplay: none;\n}\n\n.tc-tab-content {\n\tmargin-top: 14px;\n}\n\n.tc-tab-content.tc-vertical {\n\tdisplay: inline-block;\n\tvertical-align: top;\n\tpadding-top: 0;\n\tpadding-left: 14px;\n\tborder-left: 1px solid <<colour tab-border>>;\n\t-webkit-flex: 1 0 70%;\n\tflex: 1 0 70%;\n\toverflow: auto;\n}\n\n.tc-sidebar-lists .tc-tab-buttons {\n\tmargin-bottom: -1px;\n}\n\n.tc-sidebar-lists .tc-tab-buttons button.tc-tab-selected {\n\tbackground-color: <<colour sidebar-tab-background-selected>>;\n\tcolor: <<colour sidebar-tab-foreground-selected>>;\n\tborder-left: 1px solid <<colour sidebar-tab-border-selected>>;\n\tborder-top: 1px solid <<colour sidebar-tab-border-selected>>;\n\tborder-right: 1px solid <<colour sidebar-tab-border-selected>>;\n}\n\n.tc-sidebar-lists .tc-tab-buttons button {\n\tbackground-color: <<colour sidebar-tab-background>>;\n\tcolor: <<colour sidebar-tab-foreground>>;\n\tborder-left: 1px solid <<colour sidebar-tab-border>>;\n\tborder-top: 1px solid <<colour sidebar-tab-border>>;\n\tborder-right: 1px solid <<colour sidebar-tab-border>>;\n}\n\n.tc-sidebar-lists .tc-tab-divider {\n\tborder-top: 1px solid <<colour sidebar-tab-divider>>;\n}\n\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button {\n\tdisplay: block;\n\twidth: 100%;\n\tbackground-color: <<colour sidebar-tab-background>>;\n\tborder-top: none;\n\tborder-left: none;\n\tborder-bottom: none;\n\tborder-right: 1px solid #ccc;\n\tmargin-bottom: inherit;\n}\n\n.tc-more-sidebar > .tc-tab-set > .tc-tab-buttons > button.tc-tab-selected {\n\tbackground-color: <<colour sidebar-tab-background-selected>>;\n\tborder: none;\n}\n\n/*\n** Manager\n*/\n\n.tc-manager-wrapper {\n\t\n}\n\n.tc-manager-controls {\n\t\n}\n\n.tc-manager-control {\n\tmargin: 0.5em 0;\n}\n\n.tc-manager-list {\n\twidth: 100%;\n\tborder-top: 1px solid <<colour muted-foreground>>;\n\tborder-left: 1px solid <<colour muted-foreground>>;\n\tborder-right: 1px solid <<colour muted-foreground>>;\n}\n\n.tc-manager-list-item {\n\n}\n\n.tc-manager-list-item-heading {\n display: block;\n width: 100%;\n text-align: left;\t\n\tborder-bottom: 1px solid <<colour muted-foreground>>;\n\tpadding: 3px;\n}\n\n.tc-manager-list-item-heading-selected {\n\tfont-weight: bold;\n\tcolor: <<colour background>>;\n\tfill: <<colour background>>;\n\tbackground-color: <<colour foreground>>;\n}\n\n.tc-manager-list-item-heading:hover {\n\tbackground: <<colour primary>>;\n\tcolor: <<colour background>>;\n}\n\n.tc-manager-list-item-content {\n\tdisplay: flex;\n}\n\n.tc-manager-list-item-content-sidebar {\n flex: 1 0;\n background: <<colour tiddler-editor-background>>;\n border-right: 0.5em solid <<colour muted-foreground>>;\n border-bottom: 0.5em solid <<colour muted-foreground>>;\n white-space: nowrap;\n}\n\n.tc-manager-list-item-content-item-heading {\n\tdisplay: block;\n\twidth: 100%;\n\ttext-align: left;\n background: <<colour muted-foreground>>;\n\ttext-transform: uppercase;\n\tfont-size: 0.6em;\n\tfont-weight: bold;\n padding: 0.5em 0 0.5em 0;\n}\n\n.tc-manager-list-item-content-item-body {\n\tpadding: 0 0.5em 0 0.5em;\n}\n\n.tc-manager-list-item-content-item-body > pre {\n\tmargin: 0.5em 0 0.5em 0;\n\tborder: none;\n\tbackground: inherit;\n}\n\n.tc-manager-list-item-content-tiddler {\n flex: 3 1;\n border-left: 0.5em solid <<colour muted-foreground>>;\n border-right: 0.5em solid <<colour muted-foreground>>;\n border-bottom: 0.5em solid <<colour muted-foreground>>;\n}\n\n.tc-manager-list-item-content-item-body > table {\n\tborder: none;\n\tpadding: 0;\n\tmargin: 0;\n}\n\n.tc-manager-list-item-content-item-body > table td {\n\tborder: none;\n}\n\n.tc-manager-icon-editor > button {\n\twidth: 100%;\n}\n\n.tc-manager-icon-editor > button > svg,\n.tc-manager-icon-editor > button > button {\n\twidth: 100%;\n\theight: auto;\n}\n\n/*\n** Alerts\n*/\n\n.tc-alerts {\n\tposition: fixed;\n\ttop: 28px;\n\tleft: 0;\n\tright: 0;\n\tmax-width: 50%;\n\tz-index: 20000;\n}\n\n.tc-alert {\n\tposition: relative;\n\tmargin: 14px;\n\tpadding: 7px;\n\tborder: 1px solid <<colour alert-border>>;\n\tbackground-color: <<colour alert-background>>;\n}\n\n.tc-alert-toolbar {\n\tposition: absolute;\n\ttop: 7px;\n\tright: 7px;\n line-height: 0;\n}\n\n.tc-alert-toolbar svg {\n\tfill: <<colour alert-muted-foreground>>;\n}\n\n.tc-alert-subtitle {\n\tcolor: <<colour alert-muted-foreground>>;\n\tfont-weight: bold;\n font-size: 0.8em;\n margin-bottom: 0.5em;\n}\n\n.tc-alert-body > p {\n\tmargin: 0;\n}\n\n.tc-alert-highlight {\n\tcolor: <<colour alert-highlight>>;\n}\n\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\n\n\t.tc-static-alert {\n\t\tposition: relative;\n\t}\n\n\t.tc-static-alert-inner {\n\t\tposition: absolute;\n\t\tz-index: 100;\n\t}\n\n}\n\n.tc-static-alert-inner {\n\tpadding: 0 2px 2px 42px;\n\tcolor: <<colour static-alert-foreground>>;\n}\n\n/*\n** Floating drafts list\n*/\n\n.tc-drafts-list {\n\tz-index: 2000;\n\tposition: fixed;\n\tfont-size: 0.8em;\n\tleft: 0;\n\tbottom: 0;\n}\n\n.tc-drafts-list a {\n\tmargin: 0 0.5em;\n\tpadding: 4px 4px;\n\tborder-top-left-radius: 4px;\n\tborder-top-right-radius: 4px;\n\tborder: 1px solid <<colour background>>;\n\tborder-bottom-none;\n\tbackground: <<colour dirty-indicator>>;\n\tcolor: <<colour background>>;\n\tfill: <<colour background>>;\n}\n\n.tc-drafts-list a:hover {\n\ttext-decoration: none;\n\tbackground: <<colour foreground>>;\n\tcolor: <<colour background>>;\n\tfill: <<colour background>>;\n}\n\n.tc-drafts-list a svg {\n\twidth: 1em;\n\theight: 1em;\n\tvertical-align: text-bottom;\n}\n\n/*\n** Control panel\n*/\n\n.tc-control-panel td {\n\tpadding: 4px;\n}\n\n.tc-control-panel table, .tc-control-panel table input, .tc-control-panel table textarea {\n\twidth: 100%;\n}\n\n.tc-plugin-info {\n\tdisplay: flex;\n\tborder: 1px solid <<colour muted-foreground>>;\n\tfill: <<colour muted-foreground>>;\n\tbackground-color: <<colour background>>;\n\tmargin: 0.5em 0 0.5em 0;\n\tpadding: 4px;\n align-items: center;\n}\n\n.tc-plugin-info-sub-plugins .tc-plugin-info {\n margin: 0.5em;\n\tbackground: <<colour background>>;\n}\n\n.tc-plugin-info-sub-plugin-indicator {\n\tmargin: -16px 1em 0 2em;\n}\n\n.tc-plugin-info-sub-plugin-indicator button {\n\tcolor: <<colour background>>;\n\tbackground: <<colour foreground>>;\n\tborder-radius: 8px;\n padding: 2px 7px;\n font-size: 0.75em;\n}\n\n.tc-plugin-info-sub-plugins .tc-plugin-info-dropdown {\n\tmargin-left: 1em;\n\tmargin-right: 1em;\n}\n\n.tc-plugin-info-disabled {\n\tbackground: -webkit-repeating-linear-gradient(45deg, #ff0, #ff0 10px, #eee 10px, #eee 20px);\n\tbackground: repeating-linear-gradient(45deg, #ff0, #ff0 10px, #eee 10px, #eee 20px);\n}\n\n.tc-plugin-info-disabled:hover {\n\tbackground: -webkit-repeating-linear-gradient(45deg, #aa0, #aa0 10px, #888 10px, #888 20px);\n\tbackground: repeating-linear-gradient(45deg, #aa0, #aa0 10px, #888 10px, #888 20px);\n}\n\na.tc-tiddlylink.tc-plugin-info:hover {\n\ttext-decoration: none;\n\tbackground-color: <<colour primary>>;\n\tcolor: <<colour background>>;\n\tfill: <<colour foreground>>;\n}\n\na.tc-tiddlylink.tc-plugin-info:hover .tc-plugin-info > .tc-plugin-info-chunk > svg {\n\tfill: <<colour foreground>>;\n}\n\n.tc-plugin-info-chunk {\n margin: 2px;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-toggle {\n\tflex-grow: 0;\n\tflex-shrink: 0;\n\tline-height: 1;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-icon {\n\tflex-grow: 0;\n\tflex-shrink: 0;\n\tline-height: 1;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-description {\n\tflex-grow: 1;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-buttons {\n\tfont-size: 0.8em;\n\tline-height: 1.2;\n\tflex-grow: 0;\n\tflex-shrink: 0;\n text-align: right;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-description h1 {\n\tfont-size: 1em;\n\tline-height: 1.2;\n\tmargin: 2px 0 2px 0;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-description h2 {\n\tfont-size: 0.8em;\n\tline-height: 1.2;\n\tmargin: 2px 0 2px 0;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-description div {\n\tfont-size: 0.7em;\n\tline-height: 1.2;\n\tmargin: 2px 0 2px 0;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-toggle img, .tc-plugin-info-chunk.tc-plugin-info-toggle svg {\n\twidth: 1em;\n\theight: 1em;\n}\n\n.tc-plugin-info-chunk.tc-plugin-info-icon img, .tc-plugin-info-chunk.tc-plugin-info-icon svg {\n\twidth: 2em;\n\theight: 2em;\n}\n\n.tc-plugin-info-dropdown {\n\tborder: 1px solid <<colour muted-foreground>>;\n\tbackground: <<colour background>>;\n\tmargin-top: -8px;\n}\n\n.tc-plugin-info-dropdown-message {\n\tbackground: <<colour message-background>>;\n\tpadding: 0.5em 1em 0.5em 1em;\n\tfont-weight: bold;\n\tfont-size: 0.8em;\n}\n\n.tc-plugin-info-dropdown-body {\n\tpadding: 1em 1em 0 1em;\n\tbackground: <<colour background>>;\n}\n\n.tc-plugin-info-sub-plugins {\n\tpadding: 0.5em;\n margin: 0 1em 1em 1em;\n\tbackground: <<colour notification-background>>;\n}\n\n.tc-install-plugin {\n\tfont-weight: bold;\n\tbackground: green;\n\tcolor: white;\n\tfill: white;\n\tborder-radius: 4px;\n\tpadding: 3px;\n}\n\n.tc-install-plugin.tc-reinstall-downgrade {\n\tbackground: red;\n}\n\n.tc-install-plugin.tc-reinstall {\n\tbackground: blue;\n}\n\n.tc-install-plugin.tc-reinstall-upgrade {\n\tbackground: orange;\n}\n\n.tc-check-list {\n\tline-height: 2em;\n}\n\n.tc-check-list .tc-image-button {\n\theight: 1.5em;\n}\n\n/*\n** Message boxes\n*/\n\n.tc-message-box {\n\tborder: 1px solid <<colour message-border>>;\n\tbackground: <<colour message-background>>;\n\tpadding: 0px 21px 0px 21px;\n\tfont-size: 12px;\n\tline-height: 18px;\n\tcolor: <<colour message-foreground>>;\n}\n\n.tc-message-box svg {\n\twidth: 1em;\n\theight: 1em;\n vertical-align: text-bottom;\n}\n\n/*\n** Pictures\n*/\n\n.tc-bordered-image {\n\tborder: 1px solid <<colour muted-foreground>>;\n\tpadding: 5px;\n\tmargin: 5px;\n}\n\n/*\n** Floats\n*/\n\n.tc-float-right {\n\tfloat: right;\n}\n\n/*\n** Chooser\n*/\n\n.tc-chooser {\n\tborder-right: 1px solid <<colour table-header-background>>;\n\tborder-left: 1px solid <<colour table-header-background>>;\n}\n\n\n.tc-chooser-item {\n\tborder-bottom: 1px solid <<colour table-header-background>>;\n\tborder-top: 1px solid <<colour table-header-background>>;\n\tpadding: 2px 4px 2px 14px;\n}\n\n.tc-drop-down .tc-chooser-item {\n\tpadding: 2px;\n}\n\n.tc-chosen,\n.tc-chooser-item:hover {\n\tbackground-color: <<colour table-header-background>>;\n\tborder-color: <<colour table-footer-background>>;\n}\n\n.tc-chosen .tc-tiddlylink {\n\tcursor:default;\n}\n\n.tc-chooser-item .tc-tiddlylink {\n\tdisplay: block;\n\ttext-decoration: none;\n\tbackground-color: transparent;\n}\n\n.tc-chooser-item:hover .tc-tiddlylink:hover {\n\ttext-decoration: none;\n}\n\n.tc-drop-down .tc-chosen .tc-tiddlylink,\n.tc-drop-down .tc-chooser-item .tc-tiddlylink:hover {\n\tcolor: <<colour foreground>>;\n}\n\n.tc-chosen > .tc-tiddlylink:before {\n\tmargin-left: -10px;\n\tposition: relative;\n\tcontent: \"» \";\n}\n\n.tc-chooser-item svg,\n.tc-chooser-item img{\n\twidth: 1em;\n\theight: 1em;\n\tvertical-align: middle;\n}\n\n.tc-language-chooser .tc-image-button img {\n\twidth: 2em;\n\tvertical-align: -0.15em;\n}\n\n/*\n** Palette swatches\n*/\n\n.tc-swatches-horiz {\n}\n\n.tc-swatches-horiz .tc-swatch {\n\tdisplay: inline-block;\n}\n\n.tc-swatch {\n\twidth: 2em;\n\theight: 2em;\n\tmargin: 0.4em;\n\tborder: 1px solid #888;\n}\n\ninput.tc-palette-manager-colour-input {\n\twidth: 100%;\n\tpadding: 0;\n}\n\n/*\n** Table of contents\n*/\n\n.tc-sidebar-lists .tc-table-of-contents {\n\twhite-space: nowrap;\n}\n\n.tc-table-of-contents button {\n\tcolor: <<colour sidebar-foreground>>;\n}\n\n.tc-table-of-contents svg {\n\twidth: 0.7em;\n\theight: 0.7em;\n\tvertical-align: middle;\n\tfill: <<colour sidebar-foreground>>;\n}\n\n.tc-table-of-contents ol {\n\tlist-style-type: none;\n\tpadding-left: 0;\n}\n\n.tc-table-of-contents ol ol {\n\tpadding-left: 1em;\n}\n\n.tc-table-of-contents li {\n\tfont-size: 1.0em;\n\tfont-weight: bold;\n}\n\n.tc-table-of-contents li a {\n\tfont-weight: bold;\n}\n\n.tc-table-of-contents li li {\n\tfont-size: 0.95em;\n\tfont-weight: normal;\n\tline-height: 1.4;\n}\n\n.tc-table-of-contents li li a {\n\tfont-weight: normal;\n}\n\n.tc-table-of-contents li li li {\n\tfont-size: 0.95em;\n\tfont-weight: 200;\n\tline-height: 1.5;\n}\n\n.tc-table-of-contents li li li li {\n\tfont-size: 0.95em;\n\tfont-weight: 200;\n}\n\n.tc-tabbed-table-of-contents {\n\tdisplay: -webkit-flex;\n\tdisplay: flex;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents {\n\tz-index: 100;\n\tdisplay: inline-block;\n\tpadding-left: 1em;\n\tmax-width: 50%;\n\t-webkit-flex: 0 0 auto;\n\tflex: 0 0 auto;\n\tbackground: <<colour tab-background>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-top: 1px solid <<colour tab-border>>;\n\tborder-bottom: 1px solid <<colour tab-border>>;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a,\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a {\n\tdisplay: block;\n\tpadding: 0.12em 1em 0.12em 0.25em;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a {\n\tborder-top: 1px solid <<colour tab-background>>;\n\tborder-left: 1px solid <<colour tab-background>>;\n\tborder-bottom: 1px solid <<colour tab-background>>;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item > a:hover {\n\ttext-decoration: none;\n\tborder-top: 1px solid <<colour tab-border>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-bottom: 1px solid <<colour tab-border>>;\n\tbackground: <<colour tab-border>>;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a {\n\tborder-top: 1px solid <<colour tab-border>>;\n\tborder-left: 1px solid <<colour tab-border>>;\n\tborder-bottom: 1px solid <<colour tab-border>>;\n\tbackground: <<colour background>>;\n\tmargin-right: -1px;\n}\n\n.tc-tabbed-table-of-contents .tc-table-of-contents .toc-item-selected > a:hover {\n\ttext-decoration: none;\n}\n\n.tc-tabbed-table-of-contents .tc-tabbed-table-of-contents-content {\n\tdisplay: inline-block;\n\tvertical-align: top;\n\tpadding-left: 1.5em;\n\tpadding-right: 1.5em;\n\tborder: 1px solid <<colour tab-border>>;\n\t-webkit-flex: 1 0 50%;\n\tflex: 1 0 50%;\n}\n\n/*\n** Dirty indicator\n*/\n\nbody.tc-dirty span.tc-dirty-indicator, body.tc-dirty span.tc-dirty-indicator svg {\n\tfill: <<colour dirty-indicator>>;\n\tcolor: <<colour dirty-indicator>>;\n}\n\n/*\n** File inputs\n*/\n\n.tc-file-input-wrapper {\n\tposition: relative;\n\toverflow: hidden;\n\tdisplay: inline-block;\n\tvertical-align: middle;\n}\n\n.tc-file-input-wrapper input[type=file] {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbottom: 0;\n\tfont-size: 999px;\n\tmax-width: 100%;\n\tmax-height: 100%;\n\tfilter: alpha(opacity=0);\n\topacity: 0;\n\toutline: none;\n\tbackground: white;\n\tcursor: pointer;\n\tdisplay: inline-block;\n}\n\n/*\n** Thumbnail macros\n*/\n\n.tc-thumbnail-wrapper {\n\tposition: relative;\n\tdisplay: inline-block;\n\tmargin: 6px;\n\tvertical-align: top;\n}\n\n.tc-thumbnail-right-wrapper {\n\tfloat:right;\n\tmargin: 0.5em 0 0.5em 0.5em;\n}\n\n.tc-thumbnail-image {\n\ttext-align: center;\n\toverflow: hidden;\n\tborder-radius: 3px;\n}\n\n.tc-thumbnail-image svg,\n.tc-thumbnail-image img {\n\tfilter: alpha(opacity=1);\n\topacity: 1;\n\tmin-width: 100%;\n\tmin-height: 100%;\n\tmax-width: 100%;\n}\n\n.tc-thumbnail-wrapper:hover .tc-thumbnail-image svg,\n.tc-thumbnail-wrapper:hover .tc-thumbnail-image img {\n\tfilter: alpha(opacity=0.8);\n\topacity: 0.8;\n}\n\n.tc-thumbnail-background {\n\tposition: absolute;\n\tborder-radius: 3px;\n}\n\n.tc-thumbnail-icon svg,\n.tc-thumbnail-icon img {\n\twidth: 3em;\n\theight: 3em;\n\t<<filter \"drop-shadow(2px 2px 4px rgba(0,0,0,0.3))\">>\n}\n\n.tc-thumbnail-wrapper:hover .tc-thumbnail-icon svg,\n.tc-thumbnail-wrapper:hover .tc-thumbnail-icon img {\n\tfill: #fff;\n\t<<filter \"drop-shadow(3px 3px 4px rgba(0,0,0,0.6))\">>\n}\n\n.tc-thumbnail-icon {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tright: 0;\n\tbottom: 0;\n\tdisplay: -webkit-flex;\n\t-webkit-align-items: center;\n\t-webkit-justify-content: center;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n}\n\n.tc-thumbnail-caption {\n\tposition: absolute;\n\tbackground-color: #777;\n\tcolor: #fff;\n\ttext-align: center;\n\tbottom: 0;\n\twidth: 100%;\n\tfilter: alpha(opacity=0.9);\n\topacity: 0.9;\n\tline-height: 1.4;\n\tborder-bottom-left-radius: 3px;\n\tborder-bottom-right-radius: 3px;\n}\n\n.tc-thumbnail-wrapper:hover .tc-thumbnail-caption {\n\tfilter: alpha(opacity=1);\n\topacity: 1;\n}\n\n/*\n** Diffs\n*/\n\n.tc-diff-equal {\n\tbackground-color: <<colour diff-equal-background>>;\n\tcolor: <<colour diff-equal-foreground>>;\n}\n\n.tc-diff-insert {\n\tbackground-color: <<colour diff-insert-background>>;\n\tcolor: <<colour diff-insert-foreground>>;\n}\n\n.tc-diff-delete {\n\tbackground-color: <<colour diff-delete-background>>;\n\tcolor: <<colour diff-delete-foreground>>;\n}\n\n.tc-diff-invisible {\n\tbackground-color: <<colour diff-invisible-background>>;\n\tcolor: <<colour diff-invisible-foreground>>;\n}\n\n.tc-diff-tiddlers th {\n\ttext-align: right;\n\tbackground: <<colour background>>;\n\tfont-weight: normal;\n\tfont-style: italic;\n}\n\n.tc-diff-tiddlers pre {\n margin: 0;\n padding: 0;\n border: none;\n background: none;\n}\n\n/*\n** Errors\n*/\n\n.tc-error {\n\tbackground: #f00;\n\tcolor: #fff;\n}\n\n/*\n** Tree macro\n*/\n\n.tc-tree div {\n \tpadding-left: 14px;\n}\n\n.tc-tree ol {\n \tlist-style-type: none;\n \tpadding-left: 0;\n \tmargin-top: 0;\n}\n\n.tc-tree ol ol {\n \tpadding-left: 1em; \n}\n\n.tc-tree button { \n \tcolor: #acacac;\n}\n\n.tc-tree svg {\n \tfill: #acacac;\n}\n\n.tc-tree span svg {\n \twidth: 1em;\n \theight: 1em;\n \tvertical-align: baseline;\n}\n\n.tc-tree li span {\n \tcolor: lightgray;\n}\n\nselect {\n color: <<colour select-tag-foreground>>;\n background: <<colour select-tag-background>>;\n}\n\n/*\n** Utility classes for SVG icons\n*/\n\n.tc-fill-background {\n\tfill: <<colour background>>;\n}"
},
"$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize",
"text": "15px"
},
"$:/themes/tiddlywiki/vanilla/metrics/bodylineheight": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/bodylineheight",
"text": "22px"
},
"$:/themes/tiddlywiki/vanilla/metrics/fontsize": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/fontsize",
"text": "14px"
},
"$:/themes/tiddlywiki/vanilla/metrics/lineheight": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/lineheight",
"text": "20px"
},
"$:/themes/tiddlywiki/vanilla/metrics/storyleft": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/storyleft",
"text": "0px"
},
"$:/themes/tiddlywiki/vanilla/metrics/storytop": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/storytop",
"text": "0px"
},
"$:/themes/tiddlywiki/vanilla/metrics/storyright": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/storyright",
"text": "770px"
},
"$:/themes/tiddlywiki/vanilla/metrics/storywidth": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/storywidth",
"text": "770px"
},
"$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/tiddlerwidth",
"text": "686px"
},
"$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint",
"text": "960px"
},
"$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth": {
"title": "$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth",
"text": "350px"
},
"$:/themes/tiddlywiki/vanilla/options/stickytitles": {
"title": "$:/themes/tiddlywiki/vanilla/options/stickytitles",
"text": "no"
},
"$:/themes/tiddlywiki/vanilla/options/sidebarlayout": {
"title": "$:/themes/tiddlywiki/vanilla/options/sidebarlayout",
"text": "fixed-fluid"
},
"$:/themes/tiddlywiki/vanilla/options/codewrapping": {
"title": "$:/themes/tiddlywiki/vanilla/options/codewrapping",
"text": "pre-wrap"
},
"$:/themes/tiddlywiki/vanilla/reset": {
"title": "$:/themes/tiddlywiki/vanilla/reset",
"type": "text/plain",
"text": "/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */\n\n/* Document\n ========================================================================== */\n\n/**\n * 1. Correct the line height in all browsers.\n * 2. Prevent adjustments of font size after orientation changes in iOS.\n */\n\nhtml {\n line-height: 1.15; /* 1 */\n -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/* Sections\n ========================================================================== */\n\n/**\n * Remove the margin in all browsers.\n */\n\nbody {\n margin: 0;\n}\n\n/**\n * Render the `main` element consistently in IE.\n */\n\nmain {\n display: block;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n box-sizing: content-box; /* 1 */\n height: 0; /* 1 */\n overflow: visible; /* 2 */\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\npre {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * Remove the gray background on active links in IE 10.\n */\n\na {\n background-color: transparent;\n}\n\n/**\n * 1. Remove the bottom border in Chrome 57-\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n border-bottom: none; /* 1 */\n text-decoration: underline; /* 2 */\n text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\nsamp {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Remove the border on images inside links in IE 10.\n */\n\nimg {\n border-style: none;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * 1. Change the font styles in all browsers.\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit; /* 1 */\n font-size: 100%; /* 1 */\n line-height: 1.15; /* 1 */\n margin: 0; /* 2 */\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput { /* 1 */\n overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect { /* 1 */\n text-transform: none;\n}\n\n/**\n * Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button;\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n border-style: none;\n padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n outline: 1px dotted ButtonText;\n}\n\n/**\n * Correct the padding in Firefox.\n */\n\nfieldset {\n padding: 0.35em 0.75em 0.625em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n * `fieldset` elements in all browsers.\n */\n\nlegend {\n box-sizing: border-box; /* 1 */\n color: inherit; /* 2 */\n display: table; /* 1 */\n max-width: 100%; /* 1 */\n padding: 0; /* 3 */\n white-space: normal; /* 1 */\n}\n\n/**\n * Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n vertical-align: baseline;\n}\n\n/**\n * Remove the default vertical scrollbar in IE 10+.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10.\n * 2. Remove the padding in IE 10.\n */\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\"search\"] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding in Chrome and Safari on macOS.\n */\n\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n\n/* Interactive\n ========================================================================== */\n\n/*\n * Add the correct display in Edge, IE 10+, and Firefox.\n */\n\ndetails {\n display: block;\n}\n\n/*\n * Add the correct display in all browsers.\n */\n\nsummary {\n display: list-item;\n}\n\n/* Misc\n ========================================================================== */\n\n/**\n * Add the correct display in IE 10+.\n */\n\ntemplate {\n display: none;\n}\n\n/**\n * Add the correct display in IE 10.\n */\n\n[hidden] {\n display: none;\n}\n"
},
"$:/themes/tiddlywiki/vanilla/settings/fontfamily": {
"title": "$:/themes/tiddlywiki/vanilla/settings/fontfamily",
"text": "-apple-system, BlinkMacSystemFont, \"Segoe UI\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\""
},
"$:/themes/tiddlywiki/vanilla/settings/codefontfamily": {
"title": "$:/themes/tiddlywiki/vanilla/settings/codefontfamily",
"text": "\"SFMono-Regular\",Consolas,\"Liberation Mono\",Menlo,Courier,monospace"
},
"$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment": {
"title": "$:/themes/tiddlywiki/vanilla/settings/backgroundimageattachment",
"text": "fixed"
},
"$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize": {
"title": "$:/themes/tiddlywiki/vanilla/settings/backgroundimagesize",
"text": "auto"
},
"$:/themes/tiddlywiki/vanilla/sticky": {
"title": "$:/themes/tiddlywiki/vanilla/sticky",
"text": "<$reveal state=\"$:/themes/tiddlywiki/vanilla/options/stickytitles\" type=\"match\" text=\"yes\">\n``\n.tc-tiddler-title {\n\tposition: -webkit-sticky;\n\tposition: -moz-sticky;\n\tposition: -o-sticky;\n\tposition: -ms-sticky;\n\tposition: sticky;\n\ttop: 0px;\n\tbackground: ``<<colour tiddler-background>>``;\n\tz-index: 500;\n}\n\n``\n<$list filter=\"[range[100]]\">\n`.tc-story-river .tc-tiddler-frame:nth-child(100n+`<$text text=<<currentTiddler>>/>`) {\nz-index: `<$text text={{{ [[200]subtract<currentTiddler>] }}}/>`;\n}\n`\n</$list>\n</$reveal>\n"
}
}
}
<h3>Requirement</h3> <ul> <li>[ext[Locator plugin for TiddlyWiki|https://bimlas.gitlab.io/tw5-locator/#%24%3A%2Fplugins%2Fbimlas%2Flocator]]</li> </ul> <h3>IPFS Attachments</h3> [img class="tc-image-documentation" [$:/ipfs/image/attachment]] <p> The specialized [[IPFS Attachments]] Tiddler displays the <<tag-pill "$:/isAttachment">> tag. </p> <p> The [[IPFS Attachments]] Tiddler is available in the [[TableOfContents]]. </p>
<h2>Requirement</h2> <ul> <li>[ext[Locator plugin for TiddlyWiki|https://bimlas.gitlab.io/tw5-locator/#%24%3A%2Fplugins%2Fbimlas%2Flocator]]</li> </ul> <h2>Commands</h2> <<locator-view baseTitle:"Commands">>
<h2>Desktop Console</h2> <p> On desktop the [[Verbose]] mode output feedbacks to the browser console and the Mobile console. </p> <ul> <li>[[Chrome or Chromium Console|https://developers.google.com/web/tools/chrome-devtools/open]]</li> <li>[[Firefox Console|https://developer.mozilla.org/en-US/docs/Tools/Web_Console/Opening_the_Web_Console]]</li> </ul> [img class="tc-image-documentation" [$:/ipfs/image/console]] <h2>Mobile Console</h2> <p> <b>IPFS with ~TiddlyWiki</b> embeds a light console who provides feedback on mobile and desktop. </p> [img class="tc-image-documentation" [$:/ipfs/image/mobile/console]]
<h2>Embed Attachment</h2> [img class="tc-image-documentation" [$:/ipfs/image/ipfs]] <p> Embedding an attachment means retrieving from IPFS a content back to your wiki. </p> <p> <b>IPFS with ~TiddlyWiki</b> lets you embed from IPFS the following supported [[Media Types]]. </p> <p> Edit your Tiddler and remove the field <b>_canonical_uri</b>. </p> [img class="tc-image-documentation" [$:/ipfs/image/remove/canonical]] <p> Save your Tiddler. The attachment is automatically embedded in your wiki. A password could be requested if you embed an encrypted attachment. </p> <h3>Experiment</h3> <p> Edit [[IPFS - The Little Prince]] and remove the <b>_canonical_uri</b> field, save your Tiddler. The external resource will be embedded in your wiki. </p> [img class="tc-image-documentation" [$:/ipfs/image/embedded]] <p> When you'll save your document <b>IPFS with ~TiddlyWiki</b> will unpin the previous IPFS external resources if the [[Unpin]] has been selected. </p> <p> While embedding an attachment from IPFS the plugin will: </p> <ul> <li>Download the attachment from IPFS</li> <li>Unencrypt the attachment if applicable</li> <li>Embed the attachment in your wiki</li> <li>Request to Unpin the previous IPFS identifier</li> <li>Update the Tiddler tags</li> </ul> <h3>tags</h3> <p> The export command manages some tags to highlight the Tiddler semantic: </p> <ul> <li><<tag-pill "$:/isAttachment">></li> <li><<tag-pill "$:/isEmbedded">></li> <li><<tag-pill "$:/isIpfs">></li> </ul>
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Qml0c1BlckNvbXBvbmVudCA4ID4+CnN0cmVhbQr/2P/gABBKRklGAAEBAQBkAGQAAP/bAEMAAgEBAgEBAgICAgICAgIDBQMDAwMDBgQEAwUHBgcHBwYHBwgJCwkICAoIBwcKDQoKCwwMDAwHCQ4PDQwOCwwMDP/bAEMBAgICAwMDBgMDBgwIBwgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDP/AABEIAQwBfAMBIgACEQEDEQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1EQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/AP30ooorMzCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKO9fO//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AhEDEQA/AP30ooorMzCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigApOc1xnxk+NmjfA/wmdU1hpZPOkS3gtYB5lzdSOcCOOOvlLxr+2T8TfjLr2oaBo+j3PgDR7WT7NJdzyR3Opap+7/5Z3FvJ5dv/wCjP+udeZmObYTCfx5nThsDUr/wz6K+IX7Zfw3+GPiO60fVPGOiR6xp5/0vTYLn7Te2wxnMkcefL/d/P+8pfGH7avws+H2jWGpa78QfCem6fqv/AB5yT6hH/pXT/wCOR18q+G/gDaaD4cvND02C203T7qSS9uIPM8v7VcSf6yST/np5kn/LST/npWp4J+D8Gm/bPPgsvtF1H9muJPL/AHvl/wDPOT/pnXydXjGf/LuB76yGH859p+EfFum+PPDVpqul39nqenX0aPb3drcJLDKD/ckTrWwDmvz+tvijrn7EmuyX2jwWVz4PkuPtOsaT+7sobW38r/j5gk8v5JP9X+7/AOWlfd3hTxHH4m0a3vbZ4ZYLlPMhZJQ4lTs+a+jynO6eLWp4eNwVShM8v1j46aj4T+OcWl3kEVx4bv7iPTkkgf8AfaZeSSGOPzP+ekch/wC/f7uvYyMj618p/HXTn1nxB4jgfzYo5Z7iPzE/66V7N+zl8Wx8Vvh+kt2Il13R3+w6vGi+X/pEfHmon/PKXiSP2cV7hricNyU4VD0eiiig84KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoqlpuuWOrvcRWlzb3Mlo/lTpG4k8p/R6u0AFFFFABRRRQB8R/8ABSjUr/Qfjd4D1bWrmWw8M6Xp9xbaY6J5sV/rF5+78uT92f8AVxxx+X/q/wDWySf8s65/R9NvtNsI4LHy4reKPzJJPM/e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G0jWG1soUghjXoiKoVQPoAKsV0CCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/9kKZW5kc3RyZWFtCmVuZG9iagoKMTM5IDAgb2JqCjw8IC9MZW5ndGggMjA2MCAvRmlsdGVyIFsvRmxhdGVEZWNvZGVdIC9ETCAzMTk1MSA+PgpzdHJlYW0KeJztXUtv3DYQvvtX8FzACkm9gaJAbK+L9lKkMJBzkKYGgrpt0kP/fnel3Xi9w5G+4ZBabWEYRryMViKH8/jmRdmidX3bVsZuf65t0Xrr2t6UjekqV3Rd35mPT1fO7H6+Pl59uXq3/XXD1c5c+66sy+2fwyX/Gm9+3v5+Nm9++fuDNY//DJdZ8+uPV4cLn8yV7223G/3j8KdzTT98Gq55+Wl32fvvzJ/bhx4GWt+OF339tB1/x07ITk5oN+KeR7ZLG79a9c9zrPrjSXp7PMnjT8N1wyxvHsybe2u2//nwuxkndT3+8/Bkxouvm9Y8/Ga+t9bXP5iHz8aVRek753cXDeN1N47b55F2GKmLumq6tv42bstxfPbC6ub0ltX4kK6YvF/VDwNN0dSNP3qMJzMkD6Bzq4P3Ck6EW0eANOG71g5acNXOT5ubCqEBpR6l+i1zs2YYb4t2ywhT+8F8n64jvNwqMOjuhkGzeYDY19n9F9uNC9yttONMTpdS386T655ZHLfoMHOCnK3ciXq/zvEG3ZRoEFYMXAMzGXQ3KiXhVTl3siqyTH8bpDElZxNiN8r/IQZkJgfuI/hgjoeCX99A0hTYCoZ57ufIzHET+Nz1bIdoIQD7jRN0VVGVxyvhNAUznt9OXgIXqgyygClYHqjJgrh9xIgOm7ip7YHtni/F6htkp/1G1EVX98dsPq83wgJMsc88zAnTTS1nqfVacL0CPlaum5Nf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AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD99KKKKzMwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKx/Huj32veGLy0066+xXkv+rkryW88X/FbwsYlj0o6tgf8tEjk83/gcdZ1KnswPcqK8Z/Z8+KXjTx74z8T23ibR7LTdP0a4+xxyR/8trj93Xs1KnU9oAUUUVqAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFYXxB8a2nw88L3GqXUFzcxQ/8s7ePzJJaAN2ivj79qn9qL4tfBr4S6x8RdA0D+0tIlk8u3sJ7f/jwt/8An5krwTxH/wAFZ/FWmfstaX4n1GxvYvEniOSSyjtP9VF+7/5aR1l7UD9PK8a8K/tu/Dnxr8T5/CVjrkR1WK4ktt78RSyR/wDLPzK+WPhL4qu/j98FtD8TWOs6lbf8JHZyfbI47iSPypI5fLrD0H9lePwTc6xrOh2n/HrH9pkTy/8AnnWX1k09kfpRRXwd+z3+1Z8dvj7HL4a0bw5/Zl74XuI47nUp/L8rULf/AK6Sf+06958UzeI/CsO/VJxbapLH5kk9p/y1p1MRcDX1L4s2nwm8Y63ZNayXr3Wp/aJBHJ+8i8yO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ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK4j4v/GLS/gv4HuPEHiS9i0fT7O58pVZleXUGIPlxQBsZkf0OPutzt/eUAfMN5+378Q/2f/iDrmj+LvCt1458PaPq9zavqOlwRWmvWFolx+6mls5XiivEe3eN/Nt3if8A55Ws9W/iZ/wUw1PxjYpbfDfw1daSs0HnPrfiq32eSrbPK8qwjl+0bm3Nu+1fZ9mz7kv3K8P8f/FiD4geONb8V3qpax3flXssttHLd21hHFFFF/r/ACv3knlRfvZP/RVUz4mt9O1mzsNt7eahciV7Ow06wur26uBF/rfKgtopZZfK/wDjVY87Ksfbv7CWveJPGXwBi8QeKNZ1DWtS13Vb64WW6WJDFBFO9vEqLF+7VWSBZPk+XMrV7TXy1/wT5+IvizRdCsPh1qfgPxfY+F/Ddgseja/e6U2mRWsEW2JbG5S68qeWXO7y54omEqJmXY4Dz/UtaQ2JCiiiqAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCK8tIr22kimjjlilXa6Ou4OvoRXzn+zD+wbcfs7ftJeI/FkniSPWfDa6OukeEdPa0aK80GCe6ae8gnmLN9pX9xp6RSfK+y3Il81/3rfSNFFgCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKqa1rFp4fsJLy+u7extIRukmnlWKJB/tM3Arw7xp/wAFH/hj4c1VtL0bUNX8fa5532ddN8J6dJqc0j+iug8r/wAiVMpJbge+UV85Wnxc+Onxv0Af8Iv4AtPhrHOzlL7xVcedP5fb9wnzRS/7ySpUrfsR638QlYfEX4meJvFEMoV2sbaKO1st4/vQtvif+Lnyl61CqN7Idj0Pxj+1L4D8GyTRS+IbfULq1LCa20pX1CaBlH/LVYFfyvrLtX3rzuw/bn1X4lagLbwF8OfEOuIylftd1NFDArn7uHi82Ln/AKayxV6R4M/Zd8DeCba3S30C2vGttpik1J3v3gK5x5ZnL+X/AMA216Dinab3YaHglna/tEeNI/Pub34f+C4usdqlrNqF1/20ff5f/fFFe90UnSfcVwooorUAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAorF8YfEPQ/h1p7XniHW9I0OzHSfULyK1i/76dgK8bk/bhg+JU8lj8LPCPiD4hXWcLqMSfYdHiOzd891J36fLt+btUuSQWPfs81z3jz4neHPhlpq3niPXtJ0O1bO2W+u0t9+0chdxG7/gNeS2fwk+MnxSuDN4z8fWXg/THeNzpPhKArMV/jVryX51b3Tiui8B/sTfDbwHexXkfh2HVtVQ731HVna+uZm/vsZMru+iii8ugznn/bp07xZNLb+APB/jLx/LFtzc2mnvaWA9vPlVf/QTUUlp+0J8U/PjkfwR8MtNllaJDAz6vqUUR/iz8sO6vf6Knll1YXPnfTv+CdXh7xPqltqPxH8R+Kfibf2ybRHq92VsiPT7Ovy/+PGvbfCHw70L4eWRtfD+iaNoVsxy0WnWcVqjH/dRQK26KqMVHYLhRRRVCCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiuB+Jf7TPgr4TarFpera5C2uXAHkaRZRSX2pXDEZVVtoEeU7u3yUA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IFIgMTY2IDAgUiAxNjggMCBSIDE3MiAwIFJdCi9NZWRpYUJveCBbMCAwIDU5NS4yNzU2IDg0MS44ODk4XQo+PgplbmRvYmoKCjIgMCBvYmoKPDwKL1R5cGUgL0NhdGFsb2cKL01ldGFkYXRhIDMgMCBSCi9PdXRsaW5lcyAxNzMgMCBSCi9QYWdlcyAxIDAgUgo+PgplbmRvYmoKCjMgMCBvYmoKPDwgL1N1YnR5cGUgL1hNTCAvTGVuZ3RoIDQ3NzQgL1R5cGUgL01ldGFkYXRhIC9ETCA0Nzc0ID4+CnN0cmVhbQo8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIj4KICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgPHJkZjpEZXNjcmlwdGlvbiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHJkZjphYm91dD0iIj4KICAgICAgPGRjOmRlc2NyaXB0aW9uPgogICAgICAgIDxyZGY6QWx0PgogICAgICAgICAgPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij48L3JkZjpsaT4KICAgICAgICA8L3JkZjpBbHQ+CiAgICAgIDwvZGM6ZGVzY3JpcHRpb24+CiAgICAgIDxkYzp0aXRsZT4KICAgICAgICA8cmRmOkFsdD4KICAgICAgICAgIDxyZGY6bGkgeG1sOmxhbmc9IngtZGVmYXVsdCI+VGhlIExpdHRsZSBQcmluY2U8L3JkZjpsaT4KICAgICAgICA8L3JkZjpBbHQ+CiAgICAgIDwvZGM6dGl0bGU+CiAgICAgIDxkYzpwdWJsaXNoZXI+CiAgICAgICAgPHJkZjpCYWc+CiAgICAgICAgICA8cmRmOmxpPlRoZSBWaXJ0dWFsIExpYnJhcnk8L3JkZjpsaT4KICAgICAgICA8L3JkZjpCYWc+CiAgICAgIDwvZGM6cHVibGlzaGVyPgogICAgICA8ZGM6c3ViamVjdD4KICAgICAgICA8cmRmOkJhZy8+CiAgICAgIDwvZGM6c3ViamVjdD4KICAgICAgPGRjOmNyZWF0b3I+CiAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICA8cmRmOmxpPkFudG9pbmUgZGUgU2FpbnQtRXh1cMOpcnk8L3JkZjpsaT4KICAgICAgICA8L3JkZjpTZXE+CiAgICAgIDwvZGM6Y3JlYXRvcj4KICAgICAgPGRjOmxhbmd1YWdlPgogICAgICAgIDxyZGY6QmFnPgogICAgICAgICAgPHJkZjpsaT5lbjwvcmRmOmxpPgogICAgICAgIDwvcmRmOkJhZz4KICAgICAgPC9kYzpsYW5ndWFnZT4KICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICAgPHJkZjpEZXNjcmlwdGlvbiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcGlkcT0iaHR0cDovL25zLmFkb2JlLmNvbS94bXAvSWRlbnRpZmllci9xdWFsLzEuMC8iIHJkZjphYm91dD0iIj4KICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxNy0xMi0wNlQyMzo0OToyMS44ODIwMjYrMDE6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgIDxyZGY6RGVzY3JpcHRpb24geG1sbnM6cHJpc209Imh0dHA6Ly9wcmlzbXN0YW5kYXJkLm9yZy9uYW1lc3BhY2VzL2Jhc2ljLzIuMC8iIHJkZjphYm91dD0iIi8+CiAgICA8cmRmOkRlc2NyaXB0aW9uIHhtbG5zOnBkZng9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGRmeC8xLjMvIiByZGY6YWJvdXQ9IiIvPgogICAgPHJkZjpEZXNjcmlwdGlvbiB4bWxuczpjYWxpYnJlPSJodHRwOi8vY2FsaWJyZS1lYm9vay5jb20veG1wLW5hbWVzcGFjZSIgeG1sbnM6Y2FsaWJyZUNDPSJodHRwOi8vY2FsaWJyZS1lYm9vay5jb20veG1wLW5hbWVzcGFjZS1jdXN0b20tY29sdW1ucyIgeG1sbnM6Y2FsaWJyZVNJPSJodHRwOi8vY2FsaWJyZS1lYm9vay5jb20veG1wLW5hbWVzcGFjZS1zZXJpZXMtaW5kZXgiIHJkZjphYm91dD0iIj4KICAgICAgPGNhbGlicmU6dGltZXN0YW1wPjIwMTctMTItMDZUMjM6NDk6MjEuMjc5NDI3KzAxOjAwPC9jYWxpYnJlOnRpbWVzdGFtcD4KICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCgo8P3hwYWNrZXQgZW5kPSJ3Ij8+CmVuZHN0cmVhbQplbmRvYmoKCjQgMCBvYmoKPDwKL1R5cGUgL0V4dEdTdGF0ZQovQ0EgMQo+PgplbmRvYmoKCjUgMCBvYmoKPDwKL1R5cGUgL0V4dEdTdGF0ZQovY2EgMQo+PgplbmRvYmoKCjYgMCBvYmoKPDwKL1R5cGUgL0ZvbnREZXNjcmlwdG9yCi9Bc2NlbnQgNjkzCi9BdmdXaWR0aCA1NDkKL0NhcEhlaWdodCA2NTUKL0Rlc2NlbnQgLTIxNgovRmxhZ3MgNAovRm9udEJCb3ggWy01NDQgLTMwMyAxMjc4IDk4MV0KL0ZvbnRGaWxlMiAyMDEgMCBSCi9Gb250TmFtZSAvQUFBQUFBK0xpYmVyYXRpb25TZXJpZgovSXRhbGljQW5nbGUgMAovU3RlbVYgODcKPj4KZW5kb2JqCgo3IDAgb2JqCjw8Ci9UeXBlIC9Gb250Ci9TdWJ0eXBlIC9DSURGb250VHlwZTIKL0Jhc2VGb250IC9BQUFBQUErTGliZXJhdGlvblNlcmlmCi9DSURTeXN0ZW1JbmZvIDw8Ci9PcmRlcmluZyAoSWRlbnRpdHkpCi9SZWdpc3RyeSAoQWRvYmUpCi9TdXBwbGVtZW50IDAKPj4KCi9DSURUb0dJRE1hcCAvSWRlbnRpdHkKL0RXIDUwMAovRm9udERlc2NyaXB0b3IgNiAwIFIKL1cgMjAyIDAgUgo+PgplbmRvYmoKCjggMCBvYmoKPDwKL1R5cGUgL0ZvbnQKL1N1YnR5cGUgL1R5cGUwCi9CYXNlRm9udCAvQUFBQUFBK0xpYmVyYXRpb25TZXJpZgovRGVzY2VuZGFudEZvbnRzIFs3IDAgUl0KL0VuY29kaW5nIC9JZGVudGl0eS1ICi9Ub1VuaWNvZGUgMjAzIDAgUgo+PgplbmRvYmoKCjkgMCBvYmoKPDwKL1R5cGUgL0ZvbnREZXNjcmlwdG9yCi9Bc2NlbnQgNjc3Ci9BdmdXaWR0aCA1NzgKL0NhcEhlaWdodCA2NTUKL0Rlc2NlbnQgLTIxNgovRmxhZ3MgNAovRm9udEJCb3ggWy01NDQgLTMwMyAxMzQ0IDEwMDhdCi9Gb250RmlsZTIgMjA0IDAgUgovRm9udE5hbWUgL0FBQUFBQitMaWJlcmF0aW9uU2VyaWYtQm9sZAovSXRhbGljQW5nbGUgMAovU3RlbVYgMTY1Cj4+CmVuZG9iagoKMTAgMCBvYmoKPDwKL1R5cGUgL0ZvbnQKL1N1YnR5cGUgL0NJREZvbnRUeXBlMgovQmFzZUZvbnQgL0FBQUFBQitMaWJlcmF0aW9uU2VyaWYtQm9sZAovQ0lEU3lzdGVtSW5mbyA8PAovT3JkZXJpbmcgKElkZW50aXR5KQovUmVnaXN0cnkgKEFkb2JlKQovU3VwcGxlbWVudCAwCj4+CgovQ0lEVG9HSURNYXAgL0lkZW50aXR5Ci9EVyA1NTYKL0ZvbnREZXNjcmlwdG9yIDkgMCBSCi9XIDIwNSAwIFIKPj4KZW5kb2JqCgoxMSAwIG9iago8PAovVHlwZSAvRm9udAovU3VidHlwZSAvVHlwZTAKL0Jhc2VGb250IC9BQUFBQUIrTGliZXJhdGlvblNlcmlmLUJvbGQKL0Rlc2NlbmRhbnRGb250cyBbMTAgMCBSXQovRW5jb2RpbmcgL0lkZW50aXR5LUgKL1RvVW5pY29kZSAyMDYgMCBSCj4+CmVuZG9iagoKMTMgMCBvYmoKPDwKL1R5cGUgL1BhZ2UKL0NvbnRlbnRzIDEyIDAgUgovUGFyZW50IDEgMCBSCi9SZXNvdXJjZXMgPDwKL0V4dEdTdGF0ZSA8PAovT3BhMCA0IDAgUgovT3BhMSA1IDAgUgo+PgoKL0ZvbnQgPDwKL0YwIDggMCBSCi9GMSAxMSAwIFIKPj4KCj4+Cgo+PgplbmRvYmoKCjE1IDAgb2JqCjw8Ci9UeXBlIC9Gb250RGVzY3JpcHRvcgovQXNjZW50IDY5NAovQXZnV2lkdGggNTM3Ci9DYXBIZWlnaHQgNjU1Ci9EZXNjZW50IC0yMTYKL0ZsYWdzIDQKL0ZvbnRCQm94IFstNTQ0IC0zMDMgMTI4NyA5ODFdCi9Gb250RmlsZTIgMjA3IDAgUgovRm9udE5hbWUgL0FBQUFBQytMaWJlcmF0aW9uU2VyaWYtSXRhbGljCi9JdGFsaWNBbmdsZSAtMTYuMzMzMDEKL1N0ZW1WIDg3Cj4+CmVuZG9iagoKMTYgMCBvYmoKPDwKL1R5cGUgL0ZvbnQKL1N1YnR5cGUgL0NJREZvbnRUeXBlMgovQmFzZUZvbnQgL0FBQUFBQytMaWJlcmF0aW9uU2VyaWYtSXRhbGljCi9DSURTeXN0ZW1JbmZvIDw8Ci9PcmRlcmluZyAoSWRlbnRpdHkpCi9SZWdpc3RyeSAoQWRvYmUpCi9TdXBwbGVtZW50IDAKPj4KCi9DSURUb0dJRE1hcCAvSWRlbnRpdHkKL0RXIDUwMAovRm9udERlc2NyaXB0b3IgMTUgMCBSCi9XIDIwOCAwIFIKPj4KZW5kb2JqCgoxNyAwIG9iago8PAovVHlwZSAvRm9udAovU3VidHlwZSAvVHlwZTAKL0Jhc2VGb250IC9BQUFBQUMrTGliZXJhdGlvblNlcmlmLUl0YWxpYwovRGVzY2VuZGFudEZvbnRzIFsxNiAwIFJdCi9FbmNvZGluZyAvSWRlbnRpdHktSAovVG9Vbmljb2RlIDIwOSAwIFIKPj4KZW5kb2JqCgoxOSAwIG9iago8PAovVHlwZSAvUGFnZQovQ29udGVudHMgMTggMCBSCi9QYXJlbnQgMSAwIFIKL1Jlc291cmNlcyA8PAovRXh0R1N0YXRlIDw8Ci9PcGEwIDQgMCBSCi9PcGExIDUgMCBSCj4+CgovRm9udCA8PAovRjAgMTcgMCBSCi9GMSAxMSAwIFIKL0YyIDggMCBSCj4+CgovWE9iamVjdCA8PAovSW1hZ2UwIDE0IDAgUgo+PgoKPj4KCj4+CmVuZG9iagoKMjcgMCBvYmoKPDwKL1R5cGUgL1BhZ2UKL0NvbnRlbnRzIDI2IDAgUgovUGFyZW50IDEgMCBSCi9SZXNvdXJjZXMgPDwKL0V4dEdTdGF0ZSA8PAovT3BhMCA0IDAgUgovT3BhMSA1IDAgUgo+PgoKL0ZvbnQgPDwKL0YwIDggMCBSCj4+CgovWE9iamVjdCA8PAovSW1hZ2UwIDIxIDAgUgovSW1hZ2UxIDIzIDAgUgovSW1hZ2UyIDI1IDAgUgo+PgoKPj4KCj4+CmVuZG9iagoKMjkgMCBvYmoKPDwKL1R5cGUgL1BhZ2UKL0NvbnRlbnRzIDI4IDAgUgovUGFyZW50IDEgMCBSCi9SZXNvdXJjZXMgPDwKL0V4dEdTdGF0ZSA8PAovT3BhMCA0IDAgUgovT3BhMSA1IDAgUgo+PgoKL0ZvbnQgPDwKL0YwIDggMCBSCi9GMSAxMSAwIFIKPj4KCj4+Cgo+PgplbmRvYmoKCjMyIDAgb2JqCjw8Ci9UeXBlIC9QYWdlCi9Db250ZW50cyAzMSAwIFIKL1BhcmVudCAxIDAgUgovUmVzb3VyY2VzIDw8Ci9FeHRHU3RhdGUgPDwKL09wYTAgNCAwIFIKL09wYTEgNSAwIFIKPj4KCi9Gb250IDw8Ci9GMCA4IDAgUgo+PgoKL1hPYmplY3QgPDwKL0ltYWdlMCAzMCAwIFIKPj4KCj4+Cgo+PgplbmRvYmoKCjM3IDAgb2JqCjw8Ci9UeXBlIC9QYWdlCi9Db250ZW50cyAzNiAwIFIKL1BhcmVudCAxIDAgUgovUmVzb3VyY2VzIDw8Ci9FeHRHU3RhdGUgPDwKL09wYTAgNCAwIFIKL09wYTEgNSAwIFIKPj4KCi9Gb250IDw8Ci9GMCA4IDAgUgo+PgoKL1hPYmplY3QgPDwKL0ltYWdlMCAzMyAwIFIKL0ltYWdlMSAzNCAwIFIKL0ltYWdlMiAzNSAwIFIKPj4KCj4+Cgo+PgplbmRvYmoKCjQxIDAgb2JqCjw8Ci9UeXBlIC9QYWdlCi9Db250ZW50cyA0MCAwIFIKL1BhcmVudCAxIDAgUgovUmVzb3VyY2VzIDw8Ci9FeHRHU3RhdGUgPDwKL09wYTAgNCAwIFIKL09wYTEgNSAwIFIKPj4KCi9Gb250IDw8Ci9GMCA4IDAgUgovRjEgMTEgMCBSCj4+CgovWE9iamVjdCA8PAovSW1hZ2UwIDM4IDAgUgovSW1hZ2UxIDM5IDAgUgo+PgoKPj4KCj4+CmVuZG9iagoKNDMgMCBvYmoKPDwKL1R5cGUgL1BhZ2UKL0NvbnRlbnRzIDQyIDAgUgovUGFyZW50IDEgMCBSCi9SZXNvdXJjZXMgPDwKL0V4dEdTdGF0ZSA8PAovT3BhMCA0IDAgUgovT3BhMSA1IDAgUgo+PgoKL0ZvbnQgPDwKL0YwIDggMCBSCj4+Cgo+PgoKPj4KZW5kb2JqCgo0NyAwIG9iago8PAovVHlwZSAvUGFnZQovQ29udGVudHMgNDYgMCBSCi9QYXJlbnQgMSAwIFIKL1Jlc291cmNlcyA8PAovRXh0R1N0YXRlIDw8Ci9PcGEwIDQgMCBSCi9PcGExIDUgMCBSCj4+CgovRm9udCA8PAovRjAgOCAwIFIKL0YxIDExIDAgUgo+PgoKL1hPYmplY3QgPDwKL0ltYWdlMCA0NCAwIFIKL0ltYWdlMSA0NSAwIFIKPj4KCj4+Cgo+PgplbmRvYmoKCjUwIDAgb2JqCjw8Ci9UeXBlIC9QYWdlCi9Db250ZW50cyA0OSAwIFIKL1BhcmVudCAxIDAgUgovUmVzb3VyY2VzIDw8Ci9FeHRHU3RhdGUgPDwKL09wYTAgNCAwIFIKL09wYTEgNSAwIFIKPj4KCi9Gb250IDw8Ci9GMCA4IDAgUgo+PgoKL1hPYmplY3QgPDwKL0ltYWdlMCA0OCAwIFIKPj4KCj4+Cgo+PgplbmRvYmoKCjUzIDAgb2JqCjw8Ci9UeXBlIC9QYWdlCi9Db250ZW50cyA1MiAwIFIKL1BhcmVudCAxIDAgUgovUmVzb3VyY2VzIDw8Ci9FeHRHU3RhdGUgPDwKL09wYTAgNCAwIFIKL09wYTEgNSAwIFIKPj4KCi9Gb250IDw8Ci9GMCA4IDAgUgovRjEgMTEgMCBSCj4+CgovWE9iamVjdCA8PAovSW1hZ2UwIDUxIDAgUgo+PgoKPj4KCj4+CmVuZG9iagoKNTYgMCBvYmoKPDwKL1R5cGUgL1BhZ2UKL0NvbnRlbnRzIDU1IDAgUgovUGFyZW50IDEgMCBSCi9SZXNvdXJjZXMgPDwKL0V4dEdTdGF0ZSA8PAovT3BhMCA0IDAgUgovT3BhMSA1IDAgUgo+PgoKL0ZvbnQgPDwKL0YwIDggMCBSCj4+CgovWE9iamVjdCA8PAovSW1hZ2UwIDU0IDAgUgo+PgoKPj4KCj4+CmVuZG9iagoKNTkgMCBvYmoKPDwKL1R5cGUgL1BhZ2UKL0NvbnRlbnRzIDU4IDAgUgovUGFyZW50IDEgMCBSCi9SZXNvdXJjZXMgPDwKL0V4dEdTdGF0ZSA8PAovT3BhMCA0IDAgUgovT3BhMSA1IDAgUgo+PgoKL0ZvbnQgPDwKL0YwIDggMCBSCi9GMSAxMSAwIFIKPj4KCi9YT2JqZWN0IDw8Ci9JbWFnZTAgNTcgMCBSCj4+Cgo+PgoKPj4KZW5kb2JqCgo2MiAwIG9iago8PAovVHlwZSAvUGFnZQovQ29udGVudHMgNjEgMCBSCi9QYXJlbnQgMSAwIFIKL1Jlc291cmNlcyA8PAovRXh0R1N0YXRlIDw8Ci9PcGEwIDQgMCBSCi9PcGExIDUgMCBSCj4+CgovRm9udCA8PAovRjAgOCAwIFIKL0YxIDExIDAgUgo+PgoKL1hPYmplY3QgPDwKL0ltYWdlMCA2MCAwIFIKPj4KCj4+Cgo+PgplbmRvYmoKCjY0IDAgb2JqCjw8Ci9UeXBlIC9QYWdlCi9Db250ZW50cyA2MyAwIFIKL1BhcmVudCAxIDAgUgovUmVzb3VyY2VzIDw8Ci9FeHRHU3RhdGUgPDwKL09wYTAgNCAwIFIKL09wYTEgNSAwIFIKPj4KCi9Gb250IDw8Ci9GMCA4IDAgUgo+PgoKPj4KCj4+CmVuZG9iagoKNjggMCBvYmoKPDwKL1R5cGUgL1BhZ2UKL0NvbnRlbnRzIDY3IDAgUgovUGFyZW50IDEgMCBSCi9SZXNvdXJjZXMgPDwKL0V4dEdTdGF0ZSA8PAovT3BhMCA0IDAgUgovT3BhMSA1IDAgUgo+PgoKL0ZvbnQgPDwKL0YwIDggMCBSCi9GMSAxMSAwIFIKPj4KCi9YT2JqZWN0IDw8Ci9JbWFnZTAgNjYgMCBSCj4+Cgo+PgoKPj4KZW5kb2JqCgo3MiAwIG9iago8PAovVHlwZSAvUGFnZQovQ29udGVudHMgNzEgMCBSCi9QYXJlbnQgMSAwIFIKL1Jlc291cmNlcyA8PAovRXh0R1N0YXRlIDw8Ci9PcGEwIDQgMCBSCi9PcGExIDUgMCBSCj4+CgovRm9udCA8PAovRjAgOCAwIFIKPj4KCi9YT2JqZWN0IDw8Ci9JbWFnZTAgNjkgMCBSCi9JbWFnZTEgNzAgMCBSCj4+Cgo+PgoKPj4KZW5kb2JqCgo3NiAwIG9iago8PAovVHlwZSAvUGFnZQovQ29udGVudHMgNzUgMCBSCi9QYXJlbnQgMSAwIFIKL1Jlc291cmNlcyA8PAovRXh0R1N0YXRlIDw8Ci9PcGEwIDQgMCBSCi9PcGExIDUgMCBSCj4+CgovRm9udCA8PAovRjAgOCAwIFIKPj4KCi9YT2JqZWN0IDw8Ci9JbWFnZTAgNzMgMCBSCi9JbWFnZTEgNzQgMCBSCj4+Cgo+PgoKPj4KZW5kb2JqCgo3OSAwIG9iago8PAovVHlwZSAvUGFnZQovQ29udGVudHMgNzggMCBSCi9QYXJlbnQgMSAwIFIKL1Jlc291cmNlcyA8PAovRXh0R1N0YXRlIDw8Ci9PcGEwIDQgMCBSCi9PcGExIDUgMCBSCj4+CgovRm9udCA8PAovRjAgOCAwIFIKL0YxIDExIDAgUgo+PgoKL1hPYmplY3QgPDwKL0ltYWdlMCA3NyAwIFIKPj4KCj4+Cgo+PgplbmRvYmoKCjgyIDAgb2JqCjw8Ci9UeXBlIC9QYWdlCi9Db250ZW50cyA4MSAwIFIKL1BhcmVudCAxIDAgUgovUmVzb3VyY2VzIDw8Ci9FeHRHU3RhdGUgPDwKL09wYTAgNCAwIFIKL09wYTEgNSAwIFIKPj4KCi9Gb250IDw8Ci9GMCA4IDAgUgo+PgoKL1hPYmplY3QgPDwKL0ltYWdlMCA4MCAwIFIKPj4KCj4+Cgo+PgplbmRvYmoKCjg1IDAgb2JqCjw8Ci9UeXBlIC9QYWdlCi9Db250ZW50cyA4NCAwIFIKL1BhcmVudCAxIDAgUgovUmVzb3VyY2VzIDw8Ci9FeHRHU3RhdGUgPDwKL09wYTAgNCAwIFIKL09wYTEgNSAwIFIKPj4KCi9Gb250IDw8Ci9GMCAxMSAwIFIKL0YxIDggMCBSCj4+CgovWE9iamVjdCA8PAovSW1hZ2UwIDgzIDAgUgo+PgoKPj4KCj4+CmVuZG9iagoKODcgMCBvYmoKPDwKL1R5cGUgL1BhZ2UKL0NvbnRlbnRzIDg2IDAgUgovUGFyZW50IDEgMCBSCi9SZXNvdXJjZXMgPDwKL0V4dEdTdGF0ZSA8PAovT3BhMCA0IDAgUgovT3BhMSA1IDAgUgo+PgoKL0ZvbnQgPDwKL0YwIDggMCBSCj4+Cgo+PgoKPj4KZW5kb2JqCgo4OSAwIG9iago8PAovVHlwZSAvUGFnZQovQ29udGVudHMgODggMCBSCi9QYXJlbnQgMSAwIFIKL1Jlc291cmNlcyA8PAovRXh0R1N0YXRlIDw8Ci9PcGEwIDQgMCBSCi9PcGExIDUgMCBSCj4+CgovRm9udCA8PAovRjAgOCAwIFIKPj4KCj4+Cgo+PgplbmRvYmoKCjkyIDAgb2JqCjw8Ci9UeXBlIC9QYWdlCi9Db250ZW50cyA5MSAwIFIKL1BhcmVudCAxIDAgUgovUmVzb3VyY2VzIDw8Ci9FeHRHU3RhdGUgPDwKL09wYTAgNCAwIFIKL09wYTEgNSAwIFIKPj4KCi9Gb250IDw8Ci9GMCA4IDAgUgovRjEgMTEgMCBSCj4+CgovWE9iamVjdCA8PAovSW1hZ2UwIDkwIDAgUgo+PgoKPj4KCj4+CmVuZG9iagoKOTUgMCBvYmoKPDwKL1R5cGUgL1BhZ2UKL0NvbnRlbnRzIDk0IDAgUgovUGFyZW50IDEgMCBSCi9SZXNvdXJjZXMgPDwKL0V4dEdTdGF0ZSA8PAovT3BhMCA0IDAgUgovT3BhMSA1IDAgUgo+PgoKL0ZvbnQgPDwKL0YwIDggMCBSCi9GMSAxMSAwIFIKPj4KCi9YT2JqZWN0IDw8Ci9JbWFnZTAgOTMgMCBSCj4+Cgo+PgoKPj4KZW5kb2JqCgo5OCAwIG9iago8PAovVHlwZSAvUGFnZQovQ29udGVudHMgOTcgMCBSCi9QYXJlbnQgMSAwIFIKL1Jlc291cmNlcyA8PAovRXh0R1N0YXRlIDw8Ci9PcGEwIDQgMCBSCi9PcGExIDUgMCBSCj4+CgovRm9udCA8PAovRjAgOCAwIFIKL0YxIDExIDAgUgo+PgoKL1hPYmplY3QgPDwKL0ltYWdlMCA5NiAwIFIKPj4KCj4+Cgo+PgplbmRvYmoKCjEwMCAwIG9iago8PAovVHlwZSAvUGFnZQovQ29udGVudHMgOTkgMCBSCi9QYXJlbnQgMSAwIFIKL1Jlc291cmNlcyA8PAovRXh0R1N0YXRlIDw8Ci9PcGEwIDQgMCBSCi9PcGExIDUgMCBSCj4+CgovRm9udCA8PAovRjAgOCAwIFIKPj4KCj4+Cgo+PgplbmRvYmoKCjEwMiAwIG9iago8PAovVHlwZSAvUGFnZQovQ29udGVudHMgMTAxIDAgUgovUGFyZW50IDEgMCBSCi9SZXNvdXJjZXMgPDwKL0V4dEdTdGF0ZSA8PAovT3BhMCA0IDAgUgovT3BhMSA1IDAgUgo+PgoKL0ZvbnQgPDwKL0YwIDggMCBSCj4+Cgo+PgoKPj4KZW5kb2JqCgoxMDUgMCBvYmoKPDwKL1R5cGUgL1BhZ2UKL0NvbnRlbnRzIDEwNCAwIFIKL1BhcmVudCAxIDAgUgovUmVzb3VyY2VzIDw8Ci9FeHRHU3RhdGUgPDwKL09wYTAgNCAwIFIKL09wYTEgNSAwIFIKPj4KCi9Gb250IDw8Ci9GMCAxMSAwIFIKL0YxIDggMCBSCj4+CgovWE9iamVjdCA8PAovSW1hZ2UwIDEwMyAwIFIKPj4KCj4+Cgo+PgplbmRvYmoKCjEwNyAwIG9iago8PAovVHlwZSAvUGFnZQovQ29udGVudHMgMTA2IDAgUgovUGFyZW50IDEgMCBSCi9SZXNvdXJjZXMgPDwKL0V4dEdTdGF0ZSA8PAovT3BhMCA0IDAgUgovT3BhMSA1IDAgUgo+PgoKL0ZvbnQgPDwKL0YwIDggMCBSCj4+Cgo+PgoKPj4KZW5kb2JqCgoxMTAgMCBvYmoKPDwKL1R5cGUgL1BhZ2UKL0NvbnRlbnRzIDEwOSAwIFIKL1BhcmVudCAxIDAgUgovUmVzb3VyY2VzIDw8Ci9FeHRHU3RhdGUgPDwKL09wYTAgNCAwIFIKL09wYTEgNSAwIFIKPj4KCi9Gb250IDw8Ci9GMCA4IDAgUgovRjEgMTEgMCBSCj4+CgovWE9iamVjdCA8PAovSW1hZ2UwIDEwOCAwIFIKPj4KCj4+Cgo+PgplbmRvYmoKCjExMiAwIG9iago8PAovVHlwZSAvUGFnZQovQ29udGVudHMgMTExIDAgUgovUGFyZW50IDEgMCBSCi9SZXNvdXJjZXMgPDwKL0V4dEdTdGF0ZSA8PAovT3BhMCA0IDAgUgovT3BhMSA1IDAgUgo+PgoKL0ZvbnQgPDwKL0YwIDggMCBSCj4+Cgo+PgoKPj4KZW5kb2JqCgoxMTQgMCBvYmoKPDwKL1R5cGUgL1BhZ2UKL0NvbnRlbnRzIDExMyAwIFIKL1BhcmVudCAxIDAgUgovUmVzb3VyY2VzIDw8Ci9FeHRHU3RhdGUgPDwKL09wYTAgNCAwIFIKL09wYTEgNSAwIFIKPj4KCi9Gb250IDw8Ci9GMCA4IDAgUgovRjEgMTEgMCBSCj4+Cgo+PgoKPj4KZW5kb2JqCgoxMTcgMCBvYmoKPDwKL1R5cGUgL1BhZ2UKL0NvbnRlbnRzIDExNiAwIFIKL1BhcmVudCAxIDAgUgovUmVzb3VyY2VzIDw8Ci9FeHRHU3RhdGUgPDwKL09wYTAgNCAwIFIKL09wYTEgNSAwIFIKPj4KCi9Gb250IDw8Ci9GMCA4IDAgUgovRjEgMTEgMCBSCj4+CgovWE9iamVjdCA8PAovSW1hZ2UwIDExNSAwIFIKPj4KCj4+Cgo+PgplbmRvYmoKCjEyMCAwIG9iago8PAovVHlwZSAvUGFnZQovQ29udGVudHMgMTE5IDAgUgovUGFyZW50IDEgMCBSCi9SZXNvdXJjZXMgPDwKL0V4dEdTdGF0ZSA8PAovT3BhMCA0IDAgUgovT3BhMSA1IDAgUgo+PgoKL0ZvbnQgPDwKL0YwIDggMCBSCj4+CgovWE9iamVjdCA8PAovSW1hZ2UwIDExOCAwIFIKPj4KCj4+Cgo+PgplbmRvYmoKCjEyMyAwIG9iago8PAovVHlwZSAvUGFnZQovQ29udGVudHMgMTIyIDAgUgovUGFyZW50IDEgMCBSCi9SZXNvdXJjZXMgPDwKL0V4dEdTdGF0ZSA8PAovT3BhMCA0IDAgUgovT3BhMSA1IDAgUgo+PgoKL0ZvbnQgPDwKL0YwIDggMCBSCi9GMSAxMSAwIFIKPj4KCi9YT2JqZWN0IDw8Ci9JbWFnZTAgMTIxIDAgUgo+PgoKPj4KCj4+CmVuZG9iagoKMTI2IDAgb2JqCjw8Ci9UeXBlIC9QYWdlCi9Db250ZW50cyAxMjUgMCBSCi9QYXJlbnQgMSAwIFIKL1Jlc291cmNlcyA8PAovRXh0R1N0YXRlIDw8Ci9PcGEwIDQgMCBSCi9PcGExIDUgMCBSCj4+CgovRm9udCA8PAovRjAgOCAwIFIKL0YxIDExIDAgUgo+PgoKL1hPYmplY3QgPDwKL0ltYWdlMCAxMjQgMCBSCj4+Cgo+PgoKPj4KZW5kb2JqCgoxMjkgMCBvYmoKPDwKL1R5cGUgL1BhZ2UKL0NvbnRlbnRzIDEyOCAwIFIKL1BhcmVudCAxIDAgUgovUmVzb3VyY2VzIDw8Ci9FeHRHU3RhdGUgPDwKL09wYTAgNCAwIFIKL09wYTEgNSAwIFIKPj4KCi9Gb250IDw8Ci9GMCAxMSAwIFIKL0YxIDggMCBSCj4+CgovWE9iamVjdCA8PAovSW1hZ2UwIDEyNyAwIFIKPj4KCj4+Cgo+PgplbmRvYmoKCjEzMyAwIG9iago8PAovVHlwZSAvUGFnZQovQ29udGVudHMgMTMyIDAgUgovUGFyZW50IDEgMCBSCi9SZXNvdXJjZXMgPDwKL0V4dEdTdGF0ZSA8PAovT3BhMCA0IDAgUgovT3BhMSA1IDAgUgo+PgoKL0ZvbnQgPDwKL0YwIDExIDAgUgovRjEgOCAwIFIKPj4KCi9YT2JqZWN0IDw8Ci9JbWFnZTAgMTMwIDAgUgovSW1hZ2UxIDEzMSAwIFIKPj4KCj4+Cgo+PgplbmRvYmoKCjEzNiAwIG9iago8PAovVHlwZSAvUGFnZQovQ29udGVudHMgMTM1IDAgUgovUGFyZW50IDEgMCBSCi9SZXNvdXJjZXMgPDwKL0V4dEdTdGF0ZSA8PAovT3BhMCA0IDAgUgovT3BhMSA1IDAgUgo+PgoKL0ZvbnQgPDwKL0YwIDggMCBSCj4+CgovWE9iamVjdCA8PAovSW1hZ2UwIDEzNCAwIFIKPj4KCj4+Cgo+PgplbmRvYmoKCjE0MCAwIG9iago8PAovVHlwZSAvUGFnZQovQ29udGVudHMgMTM5IDAgUgovUGFyZW50IDEgMCBSCi9SZXNvdXJjZXMgPDwKL0V4dEdTdGF0ZSA8PAovT3BhMCA0IDAgUgovT3BhMSA1IDAgUgo+PgoKL0ZvbnQgPDwKL0YwIDggMCBSCj4+CgovWE9iamVjdCA8PAovSW1hZ2UwIDEzOCAwIFIKPj4KCj4+Cgo+PgplbmRvYmoKCjE0MiAwIG9iago8PAovVHlwZSAvUGFnZQovQ29udGVudHMgMTQxIDAgUgovUGFyZW50IDEgMCBSCi9SZXNvdXJjZXMgPDwKL0V4dEdTdGF0ZSA8PAovT3BhMCA0IDAgUgovT3BhMSA1IDAgUgo+PgoKL0ZvbnQgPDwKL0YwIDggMCBSCj4+Cgo+PgoKPj4KZW5kb2JqCgoxNDQgMCBvYmoKPDwKL1R5cGUgL1BhZ2UKL0NvbnRlbnRzIDE0MyAwIFIKL1BhcmVudCAxIDAgUgovUmVzb3VyY2VzIDw8Ci9FeHRHU3RhdGUgPDwKL09wYTAgNCAwIFIKL09wYTEgNSAwIFIKPj4KCi9Gb250IDw8Ci9GMCA4IDAgUgovRjEgMTEgMCBSCj4+Cgo+PgoKPj4KZW5kb2JqCgoxNDcgMCBvYmoKPDwKL1R5cGUgL1BhZ2UKL0NvbnRlbnRzIDE0NiAwIFIKL1BhcmVudCAxIDAgUgovUmVzb3VyY2VzIDw8Ci9FeHRHU3RhdGUgPDwKL09wYTAgNCAwIFIKL09wYTEgNSAwIFIKPj4KCi9Gb250IDw8Ci9GMCAxMSAwIFIKL0YxIDggMCBSCj4+CgovWE9iamVjdCA8PAovSW1hZ2UwIDE0NSAwIFIKPj4KCj4+Cgo+PgplbmRvYmoKCjE0OSAwIG9iago8PAovVHlwZSAvUGFnZQovQ29udGVudHMgMTQ4IDAgUgovUGFyZW50IDEgMCBSCi9SZXNvdXJjZXMgPDwKL0V4dEdTdGF0ZSA8PAovT3BhMCA0IDAgUgovT3BhMSA1IDAgUgo+PgoKL0ZvbnQgPDwKL0YwIDggMCBSCj4+Cgo+PgoKPj4KZW5kb2JqCgoxNTIgMCBvYmoKPDwKL1R5cGUgL1BhZ2UKL0NvbnRlbnRzIDE1MSAwIFIKL1BhcmVudCAxIDAgUgovUmVzb3VyY2VzIDw8Ci9FeHRHU3RhdGUgPDwKL09wYTAgNCAwIFIKL09wYTEgNSAwIFIKPj4KCi9Gb250IDw8Ci9GMCA4IDAgUgovRjEgMTEgMCBSCj4+CgovWE9iamVjdCA8PAovSW1hZ2UwIDE1MCAwIFIKPj4KCj4+Cgo+PgplbmRvYmoKCjE1NCAwIG9iago8PAovVHlwZSAvUGFnZQovQ29udGVudHMgMTUzIDAgUgovUGFyZW50IDEgMCBSCi9SZXNvdXJjZXMgPDwKL0V4dEdTdGF0ZSA8PAovT3BhMCA0IDAgUgovT3BhMSA1IDAgUgo+PgoKL0ZvbnQgPDwKL0YwIDggMCBSCj4+Cgo+PgoKPj4KZW5kb2JqCgoxNTYgMCBvYmoKPDwKL1R5cGUgL1BhZ2UKL0NvbnRlbnRzIDE1NSAwIFIKL1BhcmVudCAxIDAgUgovUmVzb3VyY2VzIDw8Ci9FeHRHU3RhdGUgPDwKL09wYTAgNCAwIFIKL09wYTEgNSAwIFIKPj4KCi9Gb250IDw8Ci9GMCA4IDAgUgovRjEgMTEgMCBSCj4+Cgo+PgoKPj4KZW5kb2JqCgoxNTkgMCBvYmoKPDwKL1R5cGUgL1BhZ2UKL0NvbnRlbnRzIDE1OCAwIFIKL1BhcmVudCAxIDAgUgovUmVzb3VyY2VzIDw8Ci9FeHRHU3RhdGUgPDwKL09wYTAgNCAwIFIKL09wYTEgNSAwIFIKPj4KCi9Gb250IDw8Ci9GMCA4IDAgUgo+PgoKL1hPYmplY3QgPDwKL0ltYWdlMCAxNTcgMCBSCj4+Cgo+PgoKPj4KZW5kb2JqCgoxNjEgMCBvYmoKPDwKL1R5cGUgL1BhZ2UKL0NvbnRlbnRzIDE2MCAwIFIKL1BhcmVudCAxIDAgUgovUmVzb3VyY2VzIDw8Ci9FeHRHU3RhdGUgPDwKL09wYTAgNCAwIFIKL09wYTEgNSAwIFIKPj4KCi9Gb250IDw8Ci9GMCA4IDAgUgo+PgoKPj4KCj4+CmVuZG9iagoKMTYzIDAgb2JqCjw8Ci9UeXBlIC9QYWdlCi9Db250ZW50cyAxNjIgMCBSCi9QYXJlbnQgMSAwIFIKL1Jlc291cmNlcyA8PAovRXh0R1N0YXRlIDw8Ci9PcGEwIDQgMCBSCi9PcGExIDUgMCBSCj4+CgovRm9udCA8PAovRjAgOCAwIFIKPj4KCj4+Cgo+PgplbmRvYmoKCjE2NiAwIG9iago8PAovVHlwZSAvUGFnZQovQ29udGVudHMgMTY1IDAgUgovUGFyZW50IDEgMCBSCi9SZXNvdXJjZXMgPDwKL0V4dEdTdGF0ZSA8PAovT3BhMCA0IDAgUgovT3BhMSA1IDAgUgo+PgoKL0ZvbnQgPDwKL0YwIDggMCBSCj4+CgovWE9iamVjdCA8PAovSW1hZ2UwIDE2NCAwIFIKPj4KCj4+Cgo+PgplbmRvYmoKCjE2OCAwIG9iago8PAovVHlwZSAvUGFnZQovQ29udGVudHMgMTY3IDAgUgovUGFyZW50IDEgMCBSCi9SZXNvdXJjZXMgPDwKL0V4dEdTdGF0ZSA8PAovT3BhMCA0IDAgUgovT3BhMSA1IDAgUgo+PgoKL0ZvbnQgPDwKL0YwIDExIDAgUgovRjEgOCAwIFIKPj4KCj4+Cgo+PgplbmRvYmoKCjE3MiAwIG9iago8PAovVHlwZSAvUGFnZQovQ29udGVudHMgMTcxIDAgUgovUGFyZW50IDEgMCBSCi9SZXNvdXJjZXMgPDwKL0V4dEdTdGF0ZSA8PAovT3BhMCA0IDAgUgovT3BhMSA1IDAgUgo+PgoKL0ZvbnQgPDwKL0YwIDggMCBSCj4+CgovWE9iamVjdCA8PAovSW1hZ2UwIDE3MCAwIFIKPj4KCj4+Cgo+PgplbmRvYmoKCjE3MyAwIG9iago8PAovVHlwZSAvT3V0bGluZXMKL0ZpcnN0IDE3NCAwIFIKL0xhc3QgMjAwIDAgUgo+PgplbmRvYmoKCjE3NCAwIG9iago8PAovRGVzdCBbMTkgMCBSIC9YWVogMzYgODguMjIxOTggbnVsbF0KL05leHQgMTc1IDAgUgovUGFyZW50IDE3MyAwIFIKL1RpdGxlICj+/wBJKQo+PgplbmRvYmoKCjE3NSAwIG9iago8PAovRGVzdCBbMjkgMCBSIC9YWVogMzYgNTQ2LjI1NjEgbnVsbF0KL05leHQgMTc2IDAgUgovUGFyZW50IDE3MyAwIFIKL1ByZXYgMTc0IDAgUgovVGl0bGUgKP7/AEkASSkKPj4KZW5kb2JqCgoxNzYgMCBvYmoKPDwKL0Rlc3QgWzQxIDAgUiAvWFlaIDM2IDM0My4xNjU1IG51bGxdCi9OZXh0IDE3NyAwIFIKL1BhcmVudCAxNzMgMCBSCi9QcmV2IDE3NSAwIFIKL1RpdGxlICj+/wBJAEkASSkKPj4KZW5kb2JqCgoxNzcgMCBvYmoKPDwKL0Rlc3QgWzQ3IDAgUiAvWFlaIDM2IDcwMi41MzUgbnVsbF0KL05leHQgMTc4IDAgUgovUGFyZW50IDE3MyAwIFIKL1ByZXYgMTc2IDAgUgovVGl0bGUgKP7/AEkAVikKPj4KZW5kb2JqCgoxNzggMCBvYmoKPDwKL0Rlc3QgWzUzIDAgUiAvWFlaIDM2IDYyNi45MTYyIG51bGxdCi9OZXh0IDE3OSAwIFIKL1BhcmVudCAxNzMgMCBSCi9QcmV2IDE3NyAwIFIKL1RpdGxlICj+/wBWKQo+PgplbmRvYmoKCjE3OSAwIG9iago8PAovRGVzdCBbNTkgMCBSIC9YWVogMzYgMzQ2Ljc2NjQgbnVsbF0KL05leHQgMTgwIDAgUgovUGFyZW50IDE3MyAwIFIKL1ByZXYgMTc4IDAgUgovVGl0bGUgKP7/AFYASSkKPj4KZW5kb2JqCgoxODAgMCBvYmoKPDwKL0Rlc3QgWzYyIDAgUiAvWFlaIDM2IDQzOS42Njk1IG51bGxdCi9OZXh0IDE4MSAwIFIKL1BhcmVudCAxNzMgMCBSCi9QcmV2IDE3OSAwIFIKL1RpdGxlICj+/wBWAEkASSkKPj4KZW5kb2JqCgoxODEgMCBvYmoKPDwKL0Rlc3QgWzY4IDAgUiAvWFlaIDM2IDI3My4zMDgxIG51bGxdCi9OZXh0IDE4MiAwIFIKL1BhcmVudCAxNzMgMCBSCi9QcmV2IDE4MCAwIFIKL1RpdGxlICj+/wBWAEkASQBJKQo+PgplbmRvYmoKCjE4MiAwIG9iago8PAovRGVzdCBbNzkgMCBSIC9YWVogMzYgMzUyLjUyNzggbnVsbF0KL05leHQgMTgzIDAgUgovUGFyZW50IDE3MyAwIFIKL1ByZXYgMTgxIDAgUgovVGl0bGUgKP7/AEkAWCkKPj4KZW5kb2JqCgoxODMgMCBvYmoKPDwKL0Rlc3QgWzg1IDAgUiAvWFlaIDM2IDc3My44MzI4IG51bGxdCi9OZXh0IDE4NCAwIFIKL1BhcmVudCAxNzMgMCBSCi9QcmV2IDE4MiAwIFIKL1RpdGxlICj+/wBYKQo+PgplbmRvYmoKCjE4NCAwIG9iago8PAovRGVzdCBbOTIgMCBSIC9YWVogMzYgNzI2LjMwMSBudWxsXQovTmV4dCAxODUgMCBSCi9QYXJlbnQgMTczIDAgUgovUHJldiAxODMgMCBSCi9UaXRsZSAo/v8AWABJKQo+PgplbmRvYmoKCjE4NSAwIG9iago8PAovRGVzdCBbOTUgMCBSIC9YWVogMzYgNDE1LjE4MzQgbnVsbF0KL05leHQgMTg2IDAgUgovUGFyZW50IDE3MyAwIFIKL1ByZXYgMTg0IDAgUgovVGl0bGUgKP7/AFgASQBJKQo+PgplbmRvYmoKCjE4NiAwIG9iago8PAovRGVzdCBbOTggMCBSIC9YWVogMzYgNDk1Ljg0MzUgbnVsbF0KL05leHQgMTg3IDAgUgovUGFyZW50IDE3MyAwIFIKL1ByZXYgMTg1IDAgUgovVGl0bGUgKP7/AFgASQBJAEkpCj4+CmVuZG9iagoKMTg3IDAgb2JqCjw8Ci9EZXN0IFsxMDUgMCBSIC9YWVogMzYgODA3IG51bGxdCi9OZXh0IDE4OCAwIFIKL1BhcmVudCAxNzMgMCBSCi9QcmV2IDE4NiAwIFIKL1RpdGxlICj+/wBYAEkAVikKPj4KZW5kb2JqCgoxODggMCBvYmoKPDwKL0Rlc3QgWzExMCAwIFIgL1hZWiAzNiA2MDUuMzEwOCBudWxsXQovTmV4dCAxODkgMCBSCi9QYXJlbnQgMTczIDAgUgovUHJldiAxODcgMCBSCi9UaXRsZSAo/v8AWABWKQo+PgplbmRvYmoKCjE4OSAwIG9iago8PAovRGVzdCBbMTE0IDAgUiAvWFlaIDM2IDI4Ni45OTE1IG51bGxdCi9OZXh0IDE5MCAwIFIKL1BhcmVudCAxNzMgMCBSCi9QcmV2IDE4OCAwIFIKL1RpdGxlICj+/wBYAFYASSkKPj4KZW5kb2JqCgoxOTAgMCBvYmoKPDwKL0Rlc3QgWzExNyAwIFIgL1hZWiAzNiA2MTkuNzE0NCBudWxsXQovTmV4dCAxOTEgMCBSCi9QYXJlbnQgMTczIDAgUgovUHJldiAxODkgMCBSCi9UaXRsZSAo/v8AWABWAEkASSkKPj4KZW5kb2JqCgoxOTEgMCBvYmoKPDwKL0Rlc3QgWzEyMyAwIFIgL1hZWiAzNiA0MTUuMTgzNCBudWxsXQovTmV4dCAxOTIgMCBSCi9QYXJlbnQgMTczIDAgUgovUHJldiAxOTAgMCBSCi9UaXRsZSAo/v8AWABWAEkASQBJKQo+PgplbmRvYmoKCjE5MiAwIG9iago8PAovRGVzdCBbMTI2IDAgUiAvWFlaIDM2IDY0NS42NDA5IG51bGxdCi9OZXh0IDE5MyAwIFIKL1BhcmVudCAxNzMgMCBSCi9QcmV2IDE5MSAwIFIKL1RpdGxlICj+/wBYAEkAWCkKPj4KZW5kb2JqCgoxOTMgMCBvYmoKPDwKL0Rlc3QgWzEyOSAwIFIgL1hZWiAzNiA3NTAuMDY2OSBudWxsXQovTmV4dCAxOTQgMCBSCi9QYXJlbnQgMTczIDAgUgovUHJldiAxOTIgMCBSCi9UaXRsZSAo/v8AWABYKQo+PgplbmRvYmoKCjE5NCAwIG9iago8PAovRGVzdCBbMTMzIDAgUiAvWFlaIDM2IDU3Mi4xODI2IG51bGxdCi9OZXh0IDE5NSAwIFIKL1BhcmVudCAxNzMgMCBSCi9QcmV2IDE5MyAwIFIKL1RpdGxlICj+/wBYAFgASSkKPj4KZW5kb2JqCgoxOTUgMCBvYmoKPDwKL0Rlc3QgWzE0NCAwIFIgL1hZWiAzNiA1OTguMTA5IG51bGxdCi9OZXh0IDE5NiAwIFIKL1BhcmVudCAxNzMgMCBSCi9QcmV2IDE5NCAwIFIKL1RpdGxlICj+/wBYAFgASQBJKQo+PgplbmRvYmoKCjE5NiAwIG9iago8PAovRGVzdCBbMTQ3IDAgUiAvWFlaIDM2IDgwNyBudWxsXQovTmV4dCAxOTcgMCBSCi9QYXJlbnQgMTczIDAgUgovUHJldiAxOTUgMCBSCi9UaXRsZSAo/v8AWABYAEkASQBJKQo+PgplbmRvYmoKCjE5NyAwIG9iago8PAovRGVzdCBbMTQ3IDAgUiAvWFlaIDM2IDI2NCBudWxsXQovTmV4dCAxOTggMCBSCi9QYXJlbnQgMTczIDAgUgovUHJldiAxOTYgMCBSCi9UaXRsZSAo/v8AWABYAEkAVikKPj4KZW5kb2JqCgoxOTggMCBvYmoKPDwKL0Rlc3QgWzE1MiAwIFIgL1hZWiAzNiA2NjkuNDA2OCBudWxsXQovTmV4dCAxOTkgMCBSCi9QYXJlbnQgMTczIDAgUgovUHJldiAxOTcgMCBSCi9UaXRsZSAo/v8AWABYAFYpCj4+CmVuZG9iagoKMTk5IDAgb2JqCjw8Ci9EZXN0IFsxNTYgMCBSIC9YWVogMzYgMzE3Ljk1OTIgbnVsbF0KL05leHQgMjAwIDAgUgovUGFyZW50IDE3MyAwIFIKL1ByZXYgMTk4IDAgUgovVGl0bGUgKP7/AFgAWABWAEkpCj4+CmVuZG9iagoKMjAwIDAgb2JqCjw8Ci9EZXN0IFsxNjggMCBSIC9YWVogMzYgNzUwLjA2NjkgbnVsbF0KL1BhcmVudCAxNzMgMCBSCi9QcmV2IDE5OSAwIFIKL1RpdGxlICj+/wBYAFgAVgBJAEkpCj4+CmVuZG9iagoKMjAxIDAgb2JqCjw8IC9MZW5ndGggMzA5MzkgL0ZpbHRlciBbL0ZsYXRlRGVjb2RlXSAvREwgNzA4OTYgL0xlbmd0aDEgNzA4OTYgPj4Kc3RyZWFtCnic7L0LeFTVtTi+1jlnXpmZzCPzyGSYySSTBxBCApMA4ZUhJDHyHCBgBoQEjIgiEl4+q0QFEZCCgu9Xaim1SOug0VLbaqyo11oqXsEWsTVWrPWnVWopWiBnfmvvc85kEsD23vv7f9/9fx/zsbLP3nvt19rrufeZARAAzNAOIpRPn1U2XLzzte9RyS8IWi67dnVogX/mMAAcACD85+K2K5bdsvB5B4B4HMDQecXVNyzWvzXgDepgJ8D095dcvrA1uaT9OYB57dR+xBIqsM6zHqX8PsoXLFm2+vpXLvmqjvLvAwysuHr5ZQuFvzyaAFhnp/zYZQuvb7M+rDsMsGcK4Yfalq9aXbRLepvyVwO0/r1t5eVteMW9ekBHC81hG4jS5bgNdAC6h3QRmmWhkood0Io7UScIelEn6QRR6oaMZAyuT1KveQQwbMKsiRCFUPKM7i65HiOGPPx5C+BLH3xNrffoxrHRIVO3BdzQQDkbtPG/fT7iHvDBgwDJz1mu9688JXkK/h9+jEryAOyCTtgCR2C+WlEPMbgS1lBJ+udleJtK2ScGc2E3bDpPt3tgH9UreC2wla3knJ8Y3A/Pwut9RonBMriJ5vIcHMFhQPuPy+ErNMKt8Cr1+hWVTT1XV0Im/VnMHxenlR6Fh4XNMEk4RpkHWY1QJthhPzyCC6jn1bTOLakVjz2r0w1wM/2dBUvgWnrmH924M++BKfl3WtXNMAlugwlwdVqLX+DjYgbtXyM8TjR9mZeVaZWGBvEq4XlB6NlOmbvhCoKFSGsXtogTzkOh//JHnA1WHCQWgulctUIF2ORTwvDkCbEAMmB28rhWlpyc/Lu4UL5GapYG6MZJb37bGPq7pWXUGpIfyzfJrbppul20W08CRC+aNzfeNLtx1swZsenTpk6ZPOnihovq62on1kyIVo8fN3bM6KpRI0dUDisvG1o6ZGBxUWFBOD8vN9vlsNsyreYMk9Gg10migDAklMCWuoRYGHLULwzXhRc2lA4J1WUvqS0dUheub0mEFoYSlEhF4YYGXhRemAi1hBJFlCxMK25JRAlzcT/MqIIZTWGiPTQWxrIhwqHEgdpwaB/OndFEz1tqw/FQ4q/8eSp/lop4xkqZvDxqwWfFZhuqS9Rfu2RTXQvNEfeaMyaGJ16eUToE9maY6dFMT4mB4ba9OHA88gdhYN3ovQIYrWxYWmndwtZEbEZTXa0/Ly9eOuTiRGa4llfBRN5lQj8xYeBdhq5kU4fNob1Dujbdtc8Oi1pKLK3h1oWXNiXEhdR2k1i3adOGhKMkMShcmxh047FsWvnliSHh2rpECet18szUOJN7h8SErtAeDm36B9Bywn/9vG/JQrVEX2j/B7DHhDAxgTOb8tjHX0+03rSpPhyq39SyaeG+ZPuicMge3rTXYtnUVkfkhlgTdbEv+cJmf6L+rnjC3rIER8fVpdfPnJzImjGvKSEU1oeWLKQS+lcdzhvlz3OkcGLnqwYiCxGHKJyXx8iweV8UFlEm0T6jScmHYJH/GYiWlcQTQgur6dJq3LNZTbtWk2reEqa9nTyraVNCKry4NVxHFN+8MNG+iLjrKrYxYXsi86Q/L7zJ6QhVlcU5bohmdXHrlaGEroiIRK3SGxDfsCab7DyTeVJJ/uqnAYoczlBVmLph/dSF61rUf9cuyaYOQkTohhKFERqbEtFaeoguVHesbm95GbVY2EIbdmUt38xEWbgt4QrXpHaXTavuyllNvInaLOGamCALrLZKlNVxuQrVbWqpVabA+grPaPoZRJLdeytC/mcjUAHxWobsmUhcVlS3qal1cSK3xd9Kcrc41OTPS0TjtMPxcNPlccZ2RKFB3X7OHHHOK41Nk2eFJ8+Y2zRKnYhSwbqTCuv6dRNu8ivdEAMmjIXGUJPgF+OEaKeCUD09hGvG0t+EodBIYCeC81LGuDVjQ03oBw2bppEYFKq7vFbFY/k+neoYO01s0HrTsyz1M7HBnxfPUz6lQwSqDqkDUwsjI2qDVkVqiiqMxJ8TG3gRo2U2Y/pQU/jycDy8JJSIxprY2hh5OJVVYnCaq3vV2CeXRiwiE+RRtZZhxEzUl/jTiZu4iOdT2YZ+1Rdr1aFNxvDkWZtY52G1Q6CZX5wAxsLRUQ4/1wVMoMOke0N2Emku0Jv2RqNMmJeMZp2EL27dFJ7VNJZjkz652X8jG8sJk3FyY03pEFJtNXvDeOeMvVG8c9bcpp+RExa6s7HpGQGFiS018b0FVNf0sxAZDV4qsFJWyDIhlmE9zaSMkeP7fxYFaOe1Ei/g+cv2IfAyo1aGcNk+QSmzKwMV8YGiIFCNpNRENWyJyoxKWTsv45+9wEgWzdBFjVFT1CJYBf9eZEXPUMkL5NOaEJ61oBX9e6nVTF68D9v3mqJ+BaOdMKLKDO+c3Tv07LlNz1rIOvv5Xxqohn2IXbKX0GaTWakLtTJG+U58yaaWOBM28NDW0D9MYHg8bVN4PE1Eb0lkhC+vSZjDNay8mpVXK+V6Vm4gFkUPUvN22vtYAhkHzGvKI5EM5bzh32T/K9upOCmVTfaPS2lyR5Mf4QHyQc1gQ0P0p2C16i0Wu8Mq2jLRImaKUdH08Dwx610HvubAegeOcODzDtzlwCIHehyolFPJTgfucOBtDsQ2B7Y4MObAWgdWOLDAgXYHggOrjjvwmAMPObDLgZ1ai3aH2qBRayA5kDC7HXjQgfs1zFaOEHWgUO7AEO/yIO8owbuYT58VK1Y0r9A+K/t8FsxXP81KomFAdQnkZNt/07xgfrXDiVWOSMQRGVZe6NKH84sqK0ZEhnvEiBjGA3UVFXX1kUj9n98bv+DSYQ0NwyL19dJPzjQwhwhhrjxFWEI+vQMGRC1gypRMkjPLCjo/VPNuqV/WLdqdHq97KAqVFc4RI92ZKKC//r4Vr31w5ZI//seN2ybiF/IZ+c1DExqv/CfO+PILnP7NVY31R+X3+Rg1NEZMG8MEukzIdGaRG9ZvjKzK8eh02IWi4sogOt0uQV+z4r76idtu/I8/LlnyR3lK44TDWIki6rHgaH3j0q/lvV98IT/9jbKOafKruBbeATsMiWbrASSz2eEUpUfjmeKT8/SZB53Y4iRSQ1mkpKQvuQyVIyoriopVmuHax+9JBAtrayuj04dt/NngqaPaXKGscHRE1aV8nCl4n9AilFFk+FD0ahF0EsLP4viLch0W6NClQ0mHJ3R4TIeHdNipw506XKfD1Tqs1eEOHbbrUGjTYYsOYzqM6pCahXQIOmIwHXbpsFuHB/lDQocdHL2N463V4fxe9ljQyxHpPEMcwanJKJnnniK48L4HH2Rz3kBycgMcJjnJjppBr7dYFcFQG/RnG7xBYxmNXagPiuKEKl09rTs/6hRRJwkSZNHEx3bw5axYsWC+tpvDyr1hjLS24u8WuXRzSU6nJT8Xn9HNJM/bA9FokUNnpvDUm23MXBU3GgTXqrjgi2YjZGN3NnZkY0s2Ulbhdcbl2eq6NE7MyxccdmdkuFO0C+HU8zNyw6Hf//79Q+/vu/GO21aubl/3HWFnTwO2YiNOxYXy9+WnsQYHyCfkn8h75M8wTGvqpKhjva6B5jU5WmoAnc5sAYPdEDKIJtEQzdCDTtStiovZUQuCBbst2GHBFgtSNjU5B0Syq3MOkBCqTEWk1LnzKgsdusrCiLAKnT1lmCX/DTdUxPyVlX6pfmHlH7nc0dhbdVNgALRER/rtwgCDW3AHgganHzLtmYJJzMx0OjNWxZ16wY/+a+OYHQ0iBLE7iB1BbAkiZfvOgv8t4zOpUukV4RMahJUjx5PgFoXz9TYMO9geu12ZaNAb8sStZ9584dknL772jsq2knDN82vf/8MlnQfjrcIz23/06K9+u/62OwPZO1Eo+ekP215/de+UeVwGFtF+Jmjug+HO6IyBzsJCr9eZK+ozM0EPJUMGZjmznKviZVmYlRUWIWgP0mqCwXA4Z1U8bBDNq+JthnaDYDOgwSD6okMoasLuIdgxBFuGIGW1VUXK5s9XNr93XWXziRVAW57D6eV/ieOQ8W+xGPEGMTKcyXMZWzT2Lno8RkIOEvYgiolvPnpxt7mmtHjr+Efv23T31q0rrl7TXrl6SLjmsm0X4U8evOv5Pbjsud+UYM4vPKFtT67baDDONOnbb9twE6dFjkN+fvMPXO4fsrAUBtI+dutqiYcyYWa0zCoZUZ+JIhl7m92oyxQz18RBFNFs0NMO2hHs2G3HDju22JGy2lqrI7S2CFtpRFmbN6JyuyPsyKtEenZjGPPEwXt6dgtbVz0vP6aTQ/gxFstHsHi9+MCZlVvF4T3zFV14Hd+fcRCEldG6QHa2ySGKfpOYG/K6wb0qboNcECwihcM+34Br4z69ngSxLaM9Q7BlYEaG3hcNIYSwO4QdIYoPkbJn7wntAt8UNmeaMt8IZcaMufpuxlAM5xtoHe48xwj8+C8fnfz4xXuJ/kNuGvXYvdG7rp13SYvwZM8zV4v2F1/59RFG9uzgvXu/s3ZstvDgg3JjNqdzE63pFeI5HxTA9dGL3Pn5+oCV+K2wiB5D3tDquM2b66Vleb1iRgbxHxOjUKbIBCnDIBLvEa8VIRRhdxF2FGFLEVI2XclElOX0WVikV5D42tjCBAeZwMhwrztczBYmiFxncqajZdqd4ivvvP6nL2/56N577q4J57WV3vN94/d37n1BXnTD1Ve0bXxoE3a8/RG24KTf4+id4U82Ov3yx/LxOa/3fPDoczvvGS6/JR/lOpv46lXaQyPMiJbp9Ho0iCiaMnTZEvmMxmvjW5lOpn+CPpqBkIHdGdiRgS0ZSNk+u8UXpJlZJ1f2WWwvGDu9USOO79l9qzC551kJcNzU03ZpJ2l4TV97IB+GwhXRMYFBjjDNJ9Mhmb16s76sXMwckjOEaDpkSMjlKloVdxlMoVVxky9ajlCO3eXYUY4t5UjZfmqcEZcnmgwrIhwZzolL0sl4J+SoGDFyKKpODBdht8tDrNTneePSeStvfvdPcmP7skuWvdn1woHNN29Yt/ra29avHXT1squuaF3WdqV48poHBw5+tv3FLrxl/dODBj6wfNfzz5050LFt4w9/dMdmsXzTbbd8d/MNNzH+qqE17yH+yqY1E3/5zUAr04M+XOAKhYKe4Oo4eOwe4i+PRzSZHCRF1lxrGRlS0Wo1+UQf8ZchWoBQgN0F2FGALQVI2X+XvxyKps5iKyYXCEh8KhXxcWYxw4z5DrbokXah5k+//fiw/MU3379zQjh09ciOPaYHHt37Jj5z6vpbbr39BnHnr/8oPy93yE/LD+f/ZZstG33omP2O4JZ3PngPqRHMZWt9gvyB7eLL5A94IRG9wQLg1OuzfW7bw/PcdsU1OOTD/T7s9OFOH67z4Woftvow6sNyHxb40OVDyYdVJzhSu1bd6MNaHx5MaxnyoWD3IfjwuA87fLjNh20+bPFhjHc2X/Nom9P93pTDyz5p9v8cDq4j3WvZXhdhXsvw+vrhkfq6ikid6r3UCfvIhYlQhq39KvITH+FrHwBLohOcFouXPCKb1xsI2uyPxnNsT85z5pjEh+eZ7O3c4FZvCyI9HQxigpvebv7cxbPtig2er3pl3CfP7uNhpukNdZ5ZZ3mc27UJmx7fvjdUUFtXEY2JDeqcz+xTnFB3yJk/YUTVPL6G5EdiFfEqySc+HU16BRQDeqfVGRALwoLn0bgg2DUdnxPNCT08LyeL4iK76dG4XbqpAJcWYHMBTi/AMQVYVoD+AjQX4OkC/LIAjxbgWwX48wJ8qgAfL8CtBUj48wpwcgFWpyEvIezP0rAfLsDNBbi2AJfzTks4nk3DeZPjPM37UsaenDbqsQI8WID7C7CzALcV4LoCbOPS01iAtQVYUYAFBegqQKkARyl4iQIUOjhuO8eNDiNBCxWgXZO+Lo5DNTFeToUfcHSafi7PGhekIqm0cKu5P+/1opwVlZ0PT/XFynpjM0cV03eKffQyVgiLml9CbknlCO6V2DArnZP3xXK2zpl21R1tM8M1j23EJ7/3UNVUjblxAU4LOO66Y/sNw3bKJfKe778WsvacUjmdeMMFoNtHPq0NnNgc/cqRabNJTqvdYjEY7JKY5bJmOjJb4k4HhaF6nWQxSDa0Nccz0HnChcdceMiF+13Y6cKdLtzhwnUuXO3CVhc2urDWhRUuLHChy4WSC/+r+FXf0iAdW+I4XS4UEi7scOE2F7a7sM2FMRdGXVjuwpAL7S7s5kj9EKa78Oytaz5vSH2ObVa3UfHFyKuOKJ4ZDE15OU6usFmYU0iO/khSql6WinlkoPPwgHzRA/jGi3h0d88bnet7jm/AzX/GdyqZ6//NaSMLAfB2+WZpSc8afukBY5KnpK+4nXdCEfwhut2UDwN0mZlud+6AfGlgcaG9JV7ozNVZdJaWuE2HZlGny87K9jTHs6WWeLaY5W6OZzk7BuK2gdg+ENsGYstAjA7E7oH4OC+hbIyXhAbiBwOxi5eU8ywMxNFv8Wr7QDzOuwDe8uBA7OB9KS1TROqlXR+hUJV0um3jTkdJmmPI1WBFUQmSrR+RxR+YFddVjnQUV+aFmM/Irb+UVyi++NCP3zr6xIOX/+Kt45seeWr3mew9e4TLKQC9+/bnXpP/kQS5UfzmpjZZ1y57ttze8xv93R8TdR/Lqbx/57W7BmT9+M6XX9dzP7gx+bn0MelJP4yP5jlEZqYHBPSZzXHyl0zkJeolnw/ARfmsaADnp4RXs9SpmFMXAjLKecO9WdznCykx54hqjIh6US+/IO8gsWx6+7i+Jlj/sxY5+fnXn6/89ZjCCfr3XXgZRnEuXhaRj/6kpEz+T/kV+X35NyOH/of8ajXT5WOSZ3RraP9NZIunkKfnAqvLmu3z0rZ6aYO9op3mZze0xO1OMqPVUW5Uu7k1beMWdMVKFnmXaDuQFidDXpjR2InK7AvDnNbSTvlt+ZPO639w8tOeb3AVLpZ/KP9Izt9DNH6SvIX80zcZMV98VX5O7pQT8i5JIS2n5xgA6Waaqx+uidZbSKx9pLmkAQFLVku82bLcIpRaUASL3SKYdBaL5Pe7WuJ+bI77nZK5JS4JzXFJ7A5gRwDbAhgLICO6auT7MVAzd1xV5hlWXo2MSRzhYsY2eSMj9JTnyAsx+ueN2bNH/KIm1HboKF6VG43myvehEYVYVU3W6beVucsvHcnsOdEhtz7R8wf7N/JjqbUMorV44UR0l8fpdDkQ9XqXWfRlO4CW41juEEodtByH3UHLcTj0JhOJosnQHDeJqJf0tBin4uXsSPOBJO7qHPPhIV6+mns7ZztGO9K8qkbNsQqlO1bHNDzKd5EblfAhKbJzqa9+Bip1HHAeampxJVdaZ5EVn/yg5+XHUxTdnDtuXK4wt+ckP7vQaPk2o6UiX7oNJF8h6IqudelzLBSP5eWH/AF/czwQYG4yEUsSvc1xMevafFycj/X5WJSPJ/PxP/MRu/KxMx935uOOfFyXj7F8rM3HinwsyEcpH6sITuTjsXzcz/F2pFXb81Hozse2fGzJx2g+hvIVRko7Q00jknpM1i8GgbTYjlR5Jom1KuSOPkLOaeQ26KTVp7ZxSV+Is098NNFf9/LSJPz1xJeN+8r34Je31xdVUFA3kWD+WLl717BKCuRek4/Ibw0cgDfnjBiRo/CcbjOXn6ej12R4PA6Tzyc4hMAAUzbpdlO1abpJNBPZQGc3G0Wd2By36kSfxyEAiY4LnBUBLAigK4BSAEfvD2BrAGu1/IkAHuNZBYnETDiYJmoKHXr5ZIEid8NTZk55IOOW3Vf5KewSqVTJ4MhTU4V98iglARR8e4Tr9gikp3v+sqdn4x6FVypzev4m2Fh6ehHjH6Gy501/JdFhEim+RezcHs3RX+qsFrPeSOJkFNl5G/GKc5sV263YZsVWKzZasdaKISvarShZ8bgVu614yIr7rdip1VZYscCKx9LKd1pxh9ZJi4ZWztFcvJ8xKex1VlzNR1I6kvgAB60odFkxYcUO3kGMt1ZmQXVKFXWfLn/pbsZ5/cgURvqpHSM2sWBKIt0GfJ5RklE0pkleZQ7XWyXJzwXmL7gocrveZdHrPe4MJ3FPZm6mkMHOOrJ0ZFWa44K41YNrPTjdg7ketHkw6cG3PPi0Bx/3oFJVxqs+SCss45hjv/TgSx5c7sFq3oaeO3iDkAebPQgenN/LSX39gRV91tZrR51VLMBXOMdFopYKbyvxoT2C9MDMH17RPr0mmFU/+C7pC7bWM7+64401wRObvTkvgqavdc/Qun3wTfRHnowMm1fQCaLRpsvxe92C3WknVeMxipLV5xQzJJuVnFqD1bnTj9v8uM6PrX5s9OMYP0p+PO7HY37s9OPDflzNq2r9WOHHg37c70dqskPDV8pDfnTxhlVUEfUj+FGgPrr92OXHhB/b/djGK8o5bjfvqcOPMX8f/ljRP8A4S3ErQkh0c3qrNHlMP1lzG0zM10SDI41VHERW3cUPyyOEcXfL+3r+/lxXzzuKRN62XjeuMkeO9uT7K4Vdd8tjelmp507hembUFTu4hL3HhaOi7wkGs9lhR0umpTmeKZrM5BkZMFM0GEwmkWyfM3Xztc6Bqx242IFz+MWacp+md+AJB/6ZX5O9pl21XcvRGjW0d9PuxZR+Ugi1DhxORjjkQJdy53ZCu3Pbwe/QKrQKIXXF1sUv4KIOTF2sdafdrXXw2hhHOEsQm9NFtflfhnzQewytnUnzGL+K7QtpxeEjs8gXUfZEuO4tNB5uHT/Befpj2omxOmPO6SUu9Mpr+/pS+g+J7tlwa9SZ6fU6EawWUTQarU4xx2fdl/wmOsJkbbCa9dkOk9lE+yEYKS+YRa9TNOqNtDWIbr2zOwcP5mBXDiZysCMHq3PUpRI3EdP0qnftcLkq3RNQGSsvnOYOmLBXvYsLwrK7Ux65Zw/eh534PraThu/ulG49/ZbGS2ck8Yym4KVhvbL6AK0tCy6JlmcZ9E6TKVOf6XbpwOYguTQK5ItnWsgPzzJYnOAmr9aNITd2u7HDjZpHG4moSiT9WFw7KFNVSfq8Ubq9E9/Ys/DMq+qEhWcUVXLaKT1/+qHUfHP562Tcd1lFvosZPDAiGgSL3mFxeLNdZHRdWZmM3hJk08yyMZSt3m6dfRPl5Kd17BJKtOcp7kMIsPD3f/74vSN//uR3bwtbsRankBvdJb8sJ4QO+ZfyHzGfvIQJyE59XxL2yD+Qn5Z3y09Q9CFwWczjsWA2eVTt4NaRnnPbcnwmPUmfyep0khQyTUcqjms4q3NrDq7NweU5WJaDthz8IAdfysHHecl0zg1UnuTlb/HCZo42SsF7iTdWWj7Nm63lbXJ5iTFNtZ8z7uvvaaY7DWnBnq53j9hZR1ic+9Dzi5b86HvytMM9bz6+B0/h5//8VEz84Ls96x86IdekPM01v31XoYluFtHEDUGKOsa77Xa/1U+uusfqcjgdVr2UG7KTQ0WBht8kmXyah+5QXHSX5LSH8GAI27RrjDQ1W9LXF+x1jx3KMXkac/E7DQNTvqbUuvDJN3sOP75HmHjm+D234tK75ZfkDZhx78+f2vvs/cIUWdIWsvsXd7xS1PMX0sFT8OYHb+15ZT2TkY3Jz8UTxH+lEI9WeI3FQXAUO8qGBo2uwYPJCcLBWS7yorNd0vEy7C7Dg2XYVYbH+d/yMgyVKaZFNRvAHbi0U3X1OLn3BkbPj5aYa6ucoAf1/JKmqHjzhHDhc013PTruslvW33LZuOOHn3hxQnjxfXfcP+6ytevXXjbui+6r35uNVz5X1rD1loYFE0qHjpqzdn7H8yXypzsnLWuZMGfckLIx825v+dXhojwu+4XEwy8z/wTHRv/gFMyCUXR7LGCkgNtoNJHgM0MiOrlLC85q7nB0cx9DcUqaudcR4uVLj3P/o4PXtaX5Mkp5QnNblvNmUQ+WcwTgTg3VtvPycl4yJsnHUZpt5RXTed1xXp7QxlAahHib47yjLj5MO6+t1rwm7gSd17tbcF5TsqC3TR8PUDEtGhuSSia+4yeEjjwejpQwZsQxhyM98/0TpUdq/cFfXz/sMDHY/a63cYz86tsG8+ml/krQfETdI9y2bI+2ZFmy9Ra9L8epA6vNSo6hTTS5aQ+yJJL11hxszMHaHKzIwYIcdOVgZw7uzMEdObguB1dr5fYcJOwTOUjWRjio2Zq2HIyp5qb5LCJoCjMVWPSqTdUNlMKhgkrVh7HnEZdKG5gCl78+I/9D/pr5vnhZ1wHVHfzgb8f/9gexgj8flbc//yxbpzf5oY7dc2bCb6KbLYIkmjN0OjPpYpslQ9AZSIwyDRRQZTXbMdeOX9rxaTuuteN0O1bb0WbHpB0/sGPCjm38MhbsOKaL55X72RgvLbfjNju22zFkx+P89vaghqOUt6Vhhngv/V3/c3EFF9w06ijaR/PzMKxQycScu8T2no8jPR/cLwQ7yQzfm2Be3am/66ycGIXi0RwWUwnJDw0budxNj4ZsrgydS+dxC8YMchksFqvVZcvgBHEYxEyzmXkX+6nKLCJIWa0enONBj4eUKn7qwaMefM2Duzx4nwcX86p6D47wYBFHuPKkB//swXc9+DMP3uZBJhXUwTEPHvLgUx582IObPWphIxfKCg8WeNDFEfZ7sNODOzlOjNcKinhWHddCjW0etPOig1z0ErwzOxfSVMl0TQzTBTBF5Ob00hRTNp8VmKknvRHmYaS2ggQxwm7i0w7/wqbe7YiYlCfdgkp5p/xwpVy7RoBXsRqvLMVLsfxt/MWaXPGRM63q7kwXnzizQNzLozfiV7Jl23nstjxaBwYDGRWb1ZhBvpwBMkXJkZE6WKLlVyv0iWnKqJsrQkUNxTRtl85jC+an4q70+KGPKevlKkrE+sM99x6WB90vjOzEW/Ga3di5XbDLUX5I/YJwjAcK9wpLU7HnItLtq2j+TgxFf42mDHJhTXbJlQUZzozmuM3pNKERW+I6o5h+vt92rguB9MuAndodADGvcJyf7B/kh/tnXwAop/+EV9XNK1K3AaBdCCR4eRu/K0hVnd2p0l01rz2vIu8bxTf3rUyP2VQ1l3ZiORJV7e1GUm08OFgkHD/19fzcOvHuHjPmr/5y2Jh6/5mMBdJG1zs4bs7pZR4zgryZ+aYN5BusEF8mt6YQlkWrHcbCQilksfgksbioMD8jf0Y82+1wDIjFbY5ch2ARHQ4wZngMUixucIM7Fgd7ezE2F2O0GOlh/orUCT3Tx86q1Al9P8dHfXmDsUox+QaOivHE1703VWjIRLeLnYjh2w/dvUaWs1bu/dvFHQ9suWhS66z8UU8g3H5H89bay4aLL99yW896X+mClZi94KYJorR94aVlaw6E5aCkW3BNIjebrRH4OwZbyP8OQHt0htNgCIA34A3m5phi8RyP3ul0ucQZcRfpclonRHOxPRchF6u25aI9F7tzsSsXE7m4jVe05GKUlyjPodz0yJtvpEYCxdhWn+Wrkldk4DcSTDYcLoPykpTAXCRBbr9jzOqcxjWbvtOzeSOW6Vsf6Drw4eE5b03D4/s63ZYer/330tDsUjkxYtu0Tz/vkf9ZlKu8k0hrnCa+ShFGS3SsQ2f26DzebKMtFrcY7R6X6JoRFz0UZIynIKOcxxn2bDyejQf5W3Dt/C24p7OxObvveUtKytOVFD+/dPT6eCHlfQFx2rA9c+WRnx7Z0DGyZNZq+cT3n7rn6qqCQfi3z3py5VO7yuQlh57LY/sxieb6Ce1HFt+P6S7JDD6fXbIHc7PssXiWW9kGAzGdwe6jBoJ3Rlzw0IZcFOO0L+dUB20Tzr0bK9NXwLdB5crepSir4e+AUHTlLRrH94OdevAFOWhpwjsr7pfXvnfo6uX6x7B2tfyNnNu+bsXc+Er5TP1c/PBrRG/e+hPZpad+5ivFAy/+vFj4xMFjvhitsZ72ww0DYEt0rg8pzDG6be5A0Ae0Ol+uj4TJ57M4nZ4YxVkW3Yy4xdOlXfwr7wG08ZfvYvzVgPEx/hpeeRBDQbQH8TjHI6QVK/qf1Pc5fE47YE0d7bi4p87erCWWYxsZcriRPPW8iiKUxq29YsSO8vIfzDn65m9fwivl+5csx3suxSPOTQ/GnOZRuUM/R93Jr+TFM/GRJ3c+y9/5ZJdLu3VPgB9HRH/v9HhEv9+blSEFBnj8Pn8s7nODK8sVi4tZNkNmLG42oF87Rv55ANcFcDU/Xi4JqOVLjwXwUAD3B7AzgDs4BlVPTmvzFC+fx9soR9JvauXUV2PaUfXoz3hHOwO4LW2o1OE2BMgK8BNs5QC7nZ9hRwMYCqA9gAmetXO8c5/o9HWz++nsPg54JOWhpo50vNqNQFa4cqQSNLmVoCmAEXdYsaMfPvHED+6dWjOsNL+8uuLUqTdlabPYNKy45mB31oGb3G0PPdJ45mReaWkeiNAk14tHJD8UQwVE8bFockhZmdelzxkfGAUDrVYoCuv8gRyXaUKNWBmLe0tKMnT+orAkZogZIUdoTCwesjuGx+KOAZ012FGDO2qwvQZX12BrDTbWYG0NVtRgQQ26alCqwe4aPFSDXTVIyDs58rq+yAom1OCJGjzGkff3RW49q8+qdNSdGlL62NJZCKkhoxwnVIOCnQ97vCaaz2Z5kM8ywZe0jS+prQZbarCcI/d1n3svdfre45/nGuxsxDTZI+ErU8xd3wsxzfPmLy4aSBTzlFdklXcy2LtoI9WXM7wjvQb+Tloes4bcYKiv/rH30sTFv3p+Zn212DACPQ9sX/On73W90dBSNe2xx155oXB17h/CmycOqr9I3jG48jvtP3xOfnbZvAVLrlzUItz+xC7b7Y7gutVXPjL72mWVV9RlXVr5zKQjDz1py1hesm3ymaurogXLy+dM/o6w5ua161esXLfueibjLgDxY9LZAXghegO4XD5rZqbJZwrmBnJi8QC4KOP1kbXxurMEQadzzIzr7B2a7bQr5rSbm9A2rqjTNXkur1asa5tmYA9qVrcjrfxsHzy1Oyt6NX3qKLL/1RK6DOMxovod5KJWhPPTzrex3tDw0+obv7NSXnrzrgW3r5Vbr7sLh4snlwwdNPa7G3ru85WW+oQFewI9WexJJ2Sz74WUkO5z8rM9NzwaXQwWi97h8HpE06w4iGgXRXfU7YzFyaY5bA5S/G6XFyUvcboXt3lRaPNiixdjXox6scuLCS928GzIi3YvefF4nJcQajpmXzZkJGjmVEiF+eyNoN9qqj+d4bRva/Qu+qZo6ZBodEhpNON7sq9jPZZIHyj56OnRbJ1iyEfrTL4qT8GNfJ0B+DT6GK3Toff5grm9Cw1EOSvYbMyg2fync/HnubguF825uIwyn+Xi5Fwck4sluejnpQ/n4uZcvCkX5/GqCo5zlDd7ipcTzhjafaE9jWlCaZyR8gMSaQi23L7vXK1UyNMvIO7lG1Uzn0Wys2nGBbYy4mWCyA8TcCOnE9Ev4/57xs8q8+cNHzN2C0ZSFDx14JVfO19fNuCWu8QuoiKTo2KKa4DkyAf7o1MzDQa9Dex2N+qtRqPeLeb4o/4Wv9DBLn5C9Bzzd/m7/fpxdn/CL9j95VTQ4j/oP+7XAz22+bdReRcVGIyif1+y69n4/AaeTp2tpJVVPI3mlwxr8NG++MBuNbqz3My/yjRIojnLrUcRyTbbzg7oiChYQh8iCjsmX7FSfQde0WHKuaVJi/I4Q6XfFmET3roIp6yRT2DTYnntHFm+qVVee91mHIav4uP+0lKv/EXPF17iMLx3g/xVSqSIRoNIpuxEIxM8EW3TmTNM+ljcBOzGlibqPmTG/WbsNONOM+4w4zozrjZjqxkLzOgyo2Qm2eIY28wkXmZsMWPMjFEzdpkxYcYOnrVT/GPG4zxLeOlo8/szSv+rtN6ztH5XqbicSVAH1tenFoNMP+h95AcOw2eiSYdFP2BAHgwcSPbaIkaGDxsaiw+zDcwb4LCUlpTG4rm2ErdPrzeZXDPjJjuxiigWzoyL9msjOCeCIyJYEEFPBPURPBnBYxE8FMHXIrgzgvdFcFEEMRbB2giWczxXBKUILjmuIXZGcHUEoxGs4NVUdyKCRyPYFcEE72NdBFsjahcKjl1DOxjB/RF8KoLbONrSCI6JYEgbY5QyQEcEWyLYqI3h4i2P8ZY7IthOw0dL0ur9vO0xPgEhwRHa+PA0qi2SuhFo/vajzf7GuL/F7ns+kxYMaKZCO4qJ9H+FjIs/txZe9teHKZORKRh6LUhRPxMy+clo3ZrA1Ldqj98gz76rI6eurtrt2CLXbJ49u+n2LfKc667DLLGlZHRFVUmN/JlqVJr2GDOs0ogJWnZWPNDjSylfrjfKiBk+JD4aAF3RmyErK9tssRiyDYHgALK6A2xZlPFkx+IZHreTsY2dsc3OIB4L4v4gksMvBbGKMjuCuDqIrUFsDGJtECuCWBBEP6+myENIjzuiaS8fd6SVp1O0+b9lhfva4H4UrJ36k9GKDZ4xey4Z4atWrECL2DKkKmWCm2Y1qzZYsU3KdwiINuw7Xy9Eb+39zlcsbrQLFHkInpD2na8Yj3+V4Lebx79d2ZjgUfA2Hgi3aV8KU5qMeZwXxXhRKnKGvu2VEFppRn/PigT6uo9Kzbm/babaGkP6lw/Ub5u9+17nLXfcvua6W9e141HZIf/tizNf//33v3qh+6Nf7lfuGfPkKWKC6OCFPFgfnRG0SU6nNzvDm5Ef9jpd5IW4/NZQLG71BPwG/4y4ZLCLwFR/NIztYYQwVpWHsTuMXTzfEsZo2nN1uDcESjvk0CKatItq7YiHBTa0o15lu9n5RrEnoBoKZddpeQ8sRaMweMvFna/+7s0Vi/U75eh1QuvNa9dMi191RlzsKx1ZMOTU//lSPuVpGCSTQ50tTuv6eV6Pw8HPEWi9R8UjkAVBuD56sSszJ8tgEDKF3JAjEIujw56TkWGxeFlkLRh0hlhc54+GsJ1/46gqxr9y1K5966hLew6FUuvUlpl+dZJ+FKLsWkRj5JGpkwR+fjCCHyCIpfVL5BW3Ziz9nrz2yNtty+WStevHrAqwAwTxyKkX2JJQt7B+Fn7yN0SvXPhSl8sq/NUBmh18gPbTBTOipQ6DAS0Wt0fv4K8JZuocouCy262xuN1msGRYSPbdzfygOurBFWk3pmyTIhH2enhEfT1GOQUIF7NjqJTgsW0SHigZPXzj8O/JNaSmnKaxB8aKr8rX+D09NZq0rRl+KWjvuwrv0NwGsjvFPIMrx0rTHDTYmid6vcFY3O+1i+ZY3CB62gdj22BsGYyxwRgajE8PxubBOH0warz0LXeKivelulyVFWU4VOgTJZN8eIOi8M7eH9f/qLx02OTrf/Vg/PJLh/9o2xUPlw2uXDlj9tRp2+cS3xrv2hZwfnJ77a4bKwJ5tZfVf2dr7oFlZbHaqmk5w4dOnMPX46L1lEq3kga5KFqckZlpyBJFb7ZkMRNhTQazjeIfx4w4eB7n2qI6G8uy1Sve9FcHVAJzCutImB3hymoK5Vkwz4+U3JmI01qab7r58urf/W5M+ehZ4XWulVcI20uLDx9u7Fk7ocY+IVs5z/OTTvuDuIfmc2+0GZxWSTI5Td5sXZYni8jqsUmCXZgZt9o9FhNFXe4Oro26NOVU1Z2mr4BPOaXXEpq+UkpC2ZiultIVea94R/rJNtsbdkKmnpcVs+jVx1xBrOr4ztXfxch18hfGi16oPn49BtGyJ1f4xFd65iFf6ZTiKnQJi1VfGJKfS+xXnDJxeTRpEEyZQqbNnmkyCJIQi5slm8GIViOgZ7UdW+3YaMdaO1bYscCOLjtKdjxhx2N2PGTH/XbstONOO+6w4zo7fgt+938Fv+p/OEDHufCVmzs7x9/P+2y3k6Paya8BFYdlRb/Pyn6ff/mdgrQrg8iC+ee4F9WF+9zOCKWT5Jtb8Pl70Yn6e/HSuS7xRpJ4f891wmZK3fzO73Pdi7RXLvh7NJihs7l0LrdHufPTbvxicYfBpt743a7d+HkaPVjLb+XsHpQ8eILfynV4cIcH13lwNa8t5wg7eaFyl8eu6U7wq77G1NVdSLuta/dgS9rFVIjf1r2UdmfVzAvP6cmvXNCXYik6nXUz1/dezqzdy/kx4leeJP+0v3w8Sf75cnzpkQ8+avzT4Ydw8RKXcHXPDpV664XLe+4XbuUUZPzOPLNPiIZ+OBS9XG92Wi26nCyXT/L7fW4xS+cwWM0ZAwKB6MLWBingCggFgYpAbaA1sC6wM7A/cChwLGBi5QVUyIo6qfBY4EQgo0qiMoa2g0r1BRybVegCLAYM5DWwNDrY5m2IBlCAQHlAMIk+l9NqI+uhs+RkSSaPzebXS2YT6WzB5E7/TkoqHET+dndJiRILlqQHg+q9ADMlZsXAmzRiqWwmfiLPufmIfKv8k2VYKR9fjrtvfu7grTjzavkbrCylYBCnynvdpaV2fADvZsSTv0I7I5y8Wx7KaOeT68VviHYD8CMWR2VlW7KDPsGJVslpDmRnOSyZpKjdmTYwzIiLMICc3MVBnEMubRC/4m7woSC+FsTng7iRu8DKwXpNEIdzF5g8ZH0Ql5wM4rtB/FUQnwkiec/3BHEdx17MHeZ6jp0fRCd3mE8E8c8cnzzsziDu0vBXBnFREGdqDnZRED0afmoenX3774evzGbUSY6dms0OrffoJenzKeDzYXcEx7VvDCoT2qH13srXqvR+giMIilufcvenB9EWTMVc/YKuFSub/5v65/ynp+x18LQ3Nrh/Ekn7eQ7toGU8juzDSZgpvD5tSlle7siKpotHyg+1YOcO+eR2XLBIvntCy2q53vlmi3fstQ+IbVwClwvbGROdmfeDbZMUv2Uk+9054qMseDLaJpgtiEazU3K7zEIGGR1Dhg0tQJzkBPdWNyrvCoIbD7ox4cYP3LjNjW1ujGnlY7fypJtXb+PPx3m2i2fbNezpvMq4oA8N0t7SUJTQ8HPf70YqUflhgUrlhpd9FWWkIP1h1BJXbpnwfM8ZzKq6JSdS5isVy7LsG04NO3PY73pV/gVf7yNSs1Cp2wY63B5NCqJOBDDoQbhnngl85GCKRlhswDkGHGHAIgNKBjxhwD8b8F0DvmbAXQa8z4DXGpBw6jmO3oBLjhnwEK9+nmNcy9tTtYcXdmrN7kjr96QBlVb7eaudBrzHgLcZcKUBFxkQYwaMGrDcgCED2g0IBhx1grc4aMAuAyYM2GHAHQZcZ8A2A7YY1AYVBizQGhw3YLc2QicfQcFvNGCt1nU0LKSQlZ63aR2Waf302aPmb2Hq/icM87/tAijl7Jb1PZPNqsyKuPGR/Yflx6TmPLQXyicorpkJk8TNYiPowYrvkGdkMosZIEiiKGbYMgWjxfjXeZLly8U2nG3DOhuOsGGRDb02NNjwExu+bsOf2vAHNrzPhnfY8DobEuYcG9bbcKQNiznalSdt+LEND9nwFRtCwoYdNrzHhrfZcLUNW20404Y1NqywYYENnTYUbHjChsd4g1/ZsNOGT9hwhw3X2fBa3n3MhlEbDrdhvg1dNpQ0/P/U8Hfy6aT6n5PWv8eGxNxVhLqfo+7iXd/BUanrxmiMz30E75kwT2o9Y5cNE7xrwl9KmDastWE579TFZ/CUNkvqqsSGfhvabBRuNp91Zads9X9fyTWf3ULFgnTf2at8L9eE4SwxgjolETfLz8z46KMZOE2+Qt4749ixGTgdfyI/gutxvfxIjfaQTCp3yrptziJooGjEAKvhTyTj5ueFtYGQzVWIJco7ecmvcLcxU7CDCJ5oBuqIc4QX4uIvWaiC6hVwXqUx8+tjgn3xYtIRr4r1eFLXCHZIRG+U9GbSEU6HPlPMfHIe+1UjUQo58UsnHnRilxO38l83AicuaXNitRPtTvzAiQknrnViLA2jjFcR3qi3nNjRFynXiced+JITt3G8XI6X/g5w35eAe2nLopLU+/Be5VcMRrp5IKj8EkjRq4/cmwgWTaytHDdT/GTDz0qnjWpzB1zhCSNGXcL1YadYix/rZtJan47eoCcSmc1OR+9vN/2vWmrfn4/Cs77M/7H281HjZkqJPr8fdQk/D1ok1osj+b7mYUv0n3xn3d4BogMc+WGX+9G4yyV6c3PTd3pMGAvC6ArjZ2E8Gsa3wpgI484w7gjjujDOC2NtGP1hNIfxqtNhPBbGQ2HsDOPqMLaGcQyvk8J4IoxvhvEp3ozKK3inp7VO9/MmVLU0jI1pPY4+xOtSQ03mPaam8yZvRnO5Ka2lmferzOMpflSVmkpJGHPDaAujcM6vXJxfSZ+/TuU+Fh04Ito76KpQY39OLOxfIOhV3qyIxuRLe5/78em8+r5Z5WxvjlgrlnC+zYPp0cF6cmPMXofDNcA8ID9Mm5ip7mcaKxMx2tihncJI7BslZ//OzLk5S3cWq23oZTXc2furZf3ZbnK/XzET4UjyI0Mx/z0wL4RhZDQAeoszOxh06sWCwjy3if0EiN8mZkULMVSoTDb1JYzeryOl/xCH7jzP+Kb2U2LCT85+0n5eLNIv5ecQ7B2xBVLXombb2H8IucrvPf+mxF+opad39WzPGG14D5Qfg0ZQfEkw5Ml1cEnG7tO7Tn2QMVotT30yLPoq9ReFNdgNR8VaWCsBFBI06XdDPeFMwxUwh+rmEtRQeat0Oywm/GmUn0LpBqGK3RrCNIJOgrkEiwgGElzH+iHYoNbXEO4TBFexPlRYIm6BqwwLYJnudXDp5sAYgkZ6HiN9RLCK8q8reRpvkhiAEq3OEOB1vD6FN4e32Uj1hZRnuF7DFhAoLWXPVL6I+nmAzZn39zIEJEgep+fraB4NEvspgi18rpMojVF5tboGF7UpEaqSr9JzMT0PItqU0HOZurY81obwB9EcG6neRXk/64/GFSh1Evioz5Hi7+AFfAgeYqnUCFWM7lTH6H4DQQuBwOopfYKNr3dBk1AJYcqvYTRjeZrzl2KE6NwKs4XFUEtQQriPSI9AjdgBRnp+n2ArldcIN/H9nElSWaMCW1sjp/c5gOjK9qGR0z8NqL8RjGYETjYvwq3U6N8faJ5PqM8l/cBL+8Po7GL0PhfQ2CydxuifDkRTj7oHvyc4pdJdo39fILpQWq/uQTr4CDJZytbKx+uf0trZ+OdN2ZqHwCS2frbnjDZsfv8q5XQhXvqWdAyji5ZyOlcl36PUT+kxTv+qZJLvQRXfb57qnqI5LIUSJhuMP9X2xRzYvhGvpqdiFC7i+S6eL2G8qrYp659Kh0l2HqU2/+BlbJ7T+qfEL2yfGX0YjwzqlzqZPDKZUNNJ/fKMzwq5vFAqLlVSdU5Mvvz/bqrKucB5TNlfLu9M5vqn1P8wkqHTJEuF0gN8rRspLeDyOgdWpO11pX497fMDMJHqasVXSR98BIv52gWYL61KMh33isrrXv0g2jdDUqZ1h1UaMrrniR/CCP2dbE7JJSp9FTkZQ/RbTLx0J40VgXFcj6ziOuw7RJsJ0pPE910gqfQxanTSV9Ka59Dav4Kr2Pr11cqaU+uMUX0Mqum5nvOgopcHi3dBhdgCQ2nt/yQd84hQDXeiDFamgzJ2wxhTI+nVLTCJDMkYwwCax0oYZDwGY1ie9F2ZJiMqb/4hjRf+rT2ithf1lzdV3zSofUE/eSjuz29sbdQuj/F6+py1doYHqd1NkJ/Gy+cap14tL9bq+8ursDt5gMZoV+Xu+Fn8z/k7uSPF7/3WehZ/3wqTxUEwNSXnEZ5Okg5xfThN27v+8zmf3KWlfO+5fNN6hY2QxWijHwaT9EM5XRR9zmzMR1zmC9m8OJ/UwWPiUC6rI7h+PsD5i4+b0ieP8baT0tbpVW3ZAKmM5l/G57+R8tWqDZ2k2s+L+H5L1NelMJ1gjNRJfW8me7U7uSGF18HpwOwuqDqarWMQrccrFEMppXMI+Pr4Gh/ntjekAtE6eRdbt3gKsjg9MqBOVwuTpWXcR3GmwSAV/ASjxU+IDp8otKD5dDMQb+bpW2y/Uja8FZrEX6VsOS0H7OLfQM9t+dcExIsEToJWglo15fsjvk7903r5GhsYHyR3UnuT2MZt8iStjX4p7dWvCN4hmqyn/f8J7dkwcOmnkr7ZQGu+kSBA4xyBsVISFkp/hYXCPVBEEMHxya/xl5T+ElwMhDjhLSMd1AJ67ILLhc9hOa33VYJONf0bAzwDIYIg2erLmB9GMItBL70wqNLqEeYfpeWv41AFP+ag9qf2rwHDqyT4jGAjwc1Kn8lvCL4QM4lPm0CHjZCDz0KOECOfh+Yi2uG+/kDtFqngYP0SvZg/ercKR1XYpMwr2aWMwfRTn/lwIF4vYkDPLoCevwLIDQTsNNJJ6WtUJlP6IUByB6X/h8BLz5WUfl/BS75BMIeen1fwOO62XmCfZIUKMxWQt1J6nOBhguZeYOPJn6ttttPzZ8pYyTsIogRVynisvXyPMj4HdVz+rM6ZzzstL4cI3lLGlO+idDal91MaJrhXxblCGZuvi+Yuf0Dpbcp4rJ6tk8/zF72QFAlmUH0upevV/j9U+12vgPxjpRyS9K9cmXtyPMGb/eCnajqLwEoQILiG8M8QdNNzjkIT9kOgMqNFnTqfAwTML/odwTsEB1TdE2Vyp5ZHmN4jHtig25Lcp78uuU+clNxH9ne/fkPyl7qvkvuF4uTXWswhkXzqCrkOZr7uIs2vZT4Wfz7A/WIl3iiEa7SYhNvqJ7nNYPGGV3cExvNY4xPQM9us+sleaRj5s6QDSVeGmE4TTwL7kYBpkhPWiRuTPeRXTOU6MgZxhiMehhaGJxmhmPkO0iTYJT4GOvFubsenSRkwQJSpbQnpuRj1PVLt8zHqY0tS1glkh2rJhhUn/8bLqQ1LWRkf86Ripwy5gNxejeA6E8huBtLsWyPNaTJbo7gdcqWHqd0j5G+8BxkS7ZK+A3xMB5MuqpdKqP0kmEL015FfcgnBfl2UfKZdMEH3ANU7afwDJN8eyGFjUL6F75XirzaK46h+HM1DiQ0y2dic3nbS6zJkaD4ZS7V4RC+RDmX71qD4kmpsUs3slp5sAcEY3Re0L3PUfdtNc1H21cV8vtS+r6F4gMWTJbR+ARaqOLxetwyy0uNMbc/V+KiQ9amfCbPU+HIM2XS30Un+EoFuF4xjc+BjNcAKYxVvZ+Q2kq2f2QayCZKT276YbkPyG/IPRjM7wUBkdlom/iQa8DK270qax+OjtaS7mZ9bRnvE4ktWp4dc8kHDDKQwFOhaqI9dBMtpf05BAdkVfSqm+gPZmQZeN02NWVksYOJ78jaN+wYfy8XmoY7ro7TAtBBadA6qXwDZUhPkGF4kGVkKozld94HDOJHs2B4YTfQcptsAw00UnxhuonUJgLQ+0H2S/AvxZ6bGZ/rbSD5Im2qp8RXa+wwqzyE6bYB6UyfcqZ8DdalxFd+8XtgDpC/kBMFDvfq3ZyfAGdrJM+V8rxoU/158hWRpFfcz8sSHyI95i3iN9p6tX2el8lwoZPvP9oDxANsHtv9s7f1T/cXU530Q1PrX/5bSM1BorCGejMFYwptJ84toMQT3t9ZyfK/qQ2hpKds3fQsMlt4h/iHeYfuXlnI/0WAAu9QMRi1lfK7NlfMwzZ3xKecVdU6pVO1LkyXmP53P/073N5nf1p8elLLyvLPGOJ9fSjzP+Y5khPNp/1Sdm7YPXF5bFJkWlX45fbSU9rGW+Uz6a8hfGkzpUlim+wEslu6Ha8THYbFhAsm8RPQi/5/8pny+jg6ax93U50GSFYrXaB11abTifq0WNxL/kAZk70Qnl1G6gKCFnqcRLCEeO0ywT7XVg3rP0ViZXEwPzHZdqvSRJJ8iSe2TVyn1yUVKHcPj9QsUHPbp2U3P4wgYH79D8JUCLM/Lx6n9XqqWMXCq6RvkHzGbe6l0K57Q6tkZW+r5IbidBqmUDpC+OUo+2U7yXY+QHD8EiwUL+dRj4DrpF7CZ4vw5gg8i4hfk138KAfHF5AlJhg7pRagSMmAc9WOXtsAikseIVAhzyHaNI52/nNJhxAPXsXa0r9OkDyk2Y318Q319Sj7pEdItJMuSjmg8CER+trOP5OEdikGH074QiN8lIP7i+qeZxplB+a0wIF3vEf5YaTaMl6YSH87mNmuaeAvFL+p5D9dxTLcxYHpxClSRjSzUjaO1m3gf/ByO++w0FvmA46TpFJ8o/QPXt9SHNJraE2+ILcmkNI3scjYMIQiSvz5YOEnzOwnjxGvJ1t4Bg/FBKMF/kj+6m8q/oXFmwiDxWZggbqA4uwnyhQTYhR/S80XU9s9E9w5a8zXJfwjl5H8yuJ1sey4EhRshV7gZigUrFDDAL2EAQZ6wBIpxOhiEO2hun8IwYQJEhGkUQ1jIh5gGYQ43QyneSenj1H4l37shwtzkKWELpTWEnwtmoYT6/THh1ICT+svBd6n8cRhKeKeprJJwrMICms+PCa+GZMjD/IXkUxI/z0weJxvP4ioHlT1JefL3yZcK0Lyrkj/gMSTAFOE+2u9Xyd7lkY/O9rGYx8B5fB9awcNprJyPVkuv8fPU/meoedrZqXh5slvFd/L9YvayLBVTpmJJpqPYWNwWriOfRDlfGE10rSIa5RL4hamQS7TMxadgID6VPCLkwQCKmfKJDlZcQ3s4A0YQBHEzeKjMx+gjDIaweC8MI1oOFh5P/pFoNUrYTvvJ6H037c+z4MefJXuI7kGqK6V4ewjJR6Ewi/AZ7YdROozaXEMQohh2IPstGPmnCiT3KvaK+/7nAO73cx867TxyjHou1T9NnUfy+PxfpP/uOSWzk6rfes5zyfOl1MZDPHFEOZdMJtPOb/qkfc8kkwfV9Jia/p7ZKsYX/dPznVGmpd96TqLZfy09z3llgZqGzzqnPF+adn7ZmybPqHn9v3s21t8/0OzSv0r720ntfOZ8Z5+ScpfB5iWo5zgN7DxU9xzB+c7EeZr88tvr/3X67/Egp9056886+/72Pc//1vox/1baZ4+0c9d/lerSz6DPkfLY71tAp97F6BsBzwWqDjwLdGfINhIYxvYFFlN+G+i7qV8CY+jcwM/hOCR/rQAvI0i+xYD8a2SgE88Nmp3uD9p6DN+oUK4Ai0+/DfhcB/cCi2u/DfRraRwCw2kVlvcFje4aHTW6aOtO+Rnq+Fq//9N9/J/uy/+rdX/b3NOB5O5jdt6ipuw8znGueTMe1GcRfEjwNffXmE6doIKDeOY4wbsEp1Q4wEE5M/SL+4kH3iP+SmtzFh+w8w9ZOctQzzO8DAwmWluExryLt4+o8M456XOA5ldGcIxgOLVRzmzY+dHHknqhrqXCU8o9Oc5WyvgzWXJ4SosFku8ShAh+x/6fZ/KXvmJgVEG9Z9bOYZ9hz6TTmE6eowK7N2f3zdXCAVhFYx5R+5qq+vwcqLyUneuKs2E5QS71s56BdC87B03uxznyfaQbv5/Wxq6Cg+WFxSARlBEUEeQL68mvYf4o8z+ZfzmT6q1QJH0JQ9UzF6YzBxDcoNrhckMXDDEe5PcugvQHuF3KIZ0NFLO+DvnM7hmVM/x8spH56rmJi56HsL5oPYv1T8Ey8TDcYHiCbLsLmgy/gxZ9IfVzgJ4zk0la1+XqXXWtms4muISA3dNXGwGfkADt/VMG4gmKEz+GUv19sFLXCZeq7ytsID80QvmphsP4gO51zBGGJe+lsip+V8zeRWBpK631ADzE84eFfOkw6nRPJU/qnhK2KKA9p6f9AY8odSxlkF73Xy3/d4B8hj4gHKb0Cv5MUSvFdjcR6IV3YRkDxsuGz/Axgru1lGhmJJwfSi8TDx6GZwgGMSD8VcYS3Gtcim8bZmO9HvA9ghlSlGL1KMVkXUQnN38vZL+e0x+G0/6Xq/6dk+//HG67ycdIvt/PZyxO3Xm9QXQn79dwBgT9/WARXyP/sZ5wWOz2GEwn/mZnxKPVc2zmK39B7R9kkHYHwM6JOxio5/9PCH+neGcFzGFAc6lmQHXD2bsRqrw61DSHpSwGZmf7EqU81mVxsxovp8fFLMZlsa60FuayuDcdWBsNzo65kx8KY5IfKvF28sM+8TaLtbU4W4uxzxFfs7id9cvacZwDSYr9z3xK8++h9AxA6n+FB+LnAaQTPsZaGM6Aiq5Lg0d6gd1z9BAtzjQpdyEcKpU0aUvDVdsyfAYp3H5wJkmwGeD0Z5S+RekupbxnGbVbR/BrKv8n5W8kWEzPj1EapnR0/76Yn6fGRiZKj6kp44GXpUugox9MJZippgzqRTvUU1qpwnSCUoIGKmdpAUGhCsUEZVTOngMEXoIRKpRT+SC1/ZQ0WEDlU84xj5haX6/hqnhlBFUE1RpQebU6RmXaeCOovLLfWFo/S/r3ndZ//3nMIbiEIK6mcwjvUkpHEYxUgT2PonKWXkRQlw5UztJbVahSYTSVs/Tu/nCeefRfx3TCY7QsT1szo3dApXOZuh/a3hSo+9Kg7t90bU/VfaxP23O+/+q+95kH8cx4Jg9pMbd2rzVd4S35NXbv/K/8OtV3SYfjKvyRpf/KfyWcQyr8k8FZ9czOPqreOzzKfvuX3RMyXSWze7u/K3d7MsmP/AnBN+pd5SfM/pNum8LOBJk9ZXdaVH6QIE9N/5h2f8jgj6R7lnJguojpNdInGnC9dICdg8oNcrPcDOf8kGY5PzxJnpIlDVYDiOz/iryagOrIkoBE9NddD6AnvWDIJqC1Gt8HMJEuyqC1mEcBWCoIvukL7HuvDOz7SU2Q3+WkNKuNzMtYAHc7gCcB4N0HkE360Ud9+mk+A2iswAMAQcIJEj1yjykQovK8HQBhGr+A1lRIcy1KKFBMfQ78/flhELUdTLxVQnMdUk7u2QCAoTsB2K+AD6f+yKRARQOpU1rzCFrLKJpbFenS0YQzhsYcSzQZR/7ZuG6A8TRWNflIE6hNDc13IuHW/QdA/b7/76Dh6vPDpHX/P4U9F+ACXIALcAEuwAW4ABfgAlyAC3ABLsAFuAAX4AJcgAtwAS7ABbgAF+ACXIAL8L8I3u+Fyf8BMKWzF6a1A0wfdR54/wJcgAtwAS7ABbgAF+B/BSBARibOhEbYDHoQwA5lcCmA8Ir4GojsV/zVb1HkQeu53jLMyGSvGhKWyP6TMurBAEYwQQaYwQJWyAQb9egAJ2SBC9zgAS9kgw9ywA8DIABByIUQ5EE+hKEACqEIimEgDILBUAJDoBSG0mzKYRgMhwhUQCWMgJEwCqpgNIyBsTAOxkM1RGEC1MBEqIU6qIeLoAEuhkkwGabAVJgG0yEGM2AmzKIVzoY5cAk0QRzmwjxa5XxYAM3QAgvh+7AO1sMv4T74C9wB3yVaPAo/gp2wCQW4HbajiBJsQR3ciXr4IxrgMdgN/4ATcBKegB/DG/A6/AQWwWWwjaj0JlwO/wG/hrfgN3AAfgufwmJ4Bw7C2/A0XAHH4W54Fw7BYVgCn8FfYSNcBVfCUlgGV8M10AHLYQW0wUpYBWtgNVwL18H/gevhRrgBboKb4TuwD74Ha+EWaIdb4XP4Al5AI5owA81oQSv0gIyZaEM7OiCJgE7MQhe60YNezEYf5qAfB2AAg5iLIcyDb+CfmI9hLMBCLMJiHIiDcDCW4BAsxaFYhuU4DE7B73A4RrACK3EEjsRRWIWjcQyOxXHI/g/mKPwJPsIJWIMTsRbrsB4vwga8GCfhZJyCU3EaTocE7MUYzsCZOAsbcTbOwUuwCeNwGs7AMfgY5+I8vBTn4wJsxhZciIvwMmzFy3ExXoFL8Eq8Cpfi1bgMr8Hl8HNs+79tnAecE0X7x7PT5zg4sPezN1TI7qS9NpLcDKIoKGJXCEfgIneX43IHdrF3Rey994Zib2DvvRcUe0Xsvfw3ye8g5H/v502eebbMd3Y3t995skRvutftlSKfR77werxeb4Y30zvIO9g7xDvUO8w73DvCO9Kb5R3lHe0d4x3rHecdH7nWO8E70TvJO9k7xTvVO8073TvDm+2d6c3xzvLO9s7xzvXO8873LvAu9C7yLvYu8S71LvMu967wrvSu8q72rvGu9a7zrvdu8G70bvJu9m7xbvVu8+Z6t3t3ePO8O727vLu9e7x7vfu8+70HvAe9h7yHvfneAu8R71HvMe9x7wnvSe8p72nvGe9Z7znvee8F70XvJe9l7xXvVe8173XvDe9N7y3vbe8d713vPe99b6H3gfeht8j7yPvY+8T71PvM+9z7wvvS+8r72vvG+9Zb7H3nLfG+937wfvR+8n72fvF+9X7zfvf+8P70/vL+9v7x/vX+IxHiEUIoYYQTQSRRRJMGMoA0koFkEGkig8kQsgJZkaxEViarkFXJamR1sgZZk6xF1ibrkGayLlmPrE82IBuSjcjGZBOyKdmMbE6Gki3IlmQrMowMJ1Hik4AYEiNxkiBJkiL/I1uTbci2ZDuyPRlB0iRDsqSFWOLISLIDGUV2JDuR0WRnsgsZQ8aSXcluZBzZnYwne5A9yV5kb7IP2ZfsR/YnB5AJZCLJkUmklUwmeTKFTCVtpEAOJNNIO+kgnaRIush00k1KpIf0khlkJjmIHEwOIYeSw8jh5AhyJJlFjiJHk2PIseQ4cjw5gZxITiInk1PIqeQ0cjo5g8wmZ5I55CxyNjmHnEvOI+eTC8iF5CJyMbmEXEouI5eTK8iV5CpyNbmGXEuuI9eTG8iN5CZyM7mF3EpuI3PJ7eQOMo/cSe4id5N7yL3kvsjbkY/I/eQB8iB5iDxM5pMF5BHyKHmMPE6eIE+Sp8jT5JnIe5H3IwsjiyLvRD4kz5LnyPPkBfIieYm8TF4hr5LXyOvkDfImeYu8Td4h75L3yPtkIfmAfEgWkY/Ix+QT8in5jHxOviBfkq/I1+Qb8i1ZTL4jS8j35AfyI/mJ/Ex+Ib+S38jv5A/yJ/mL/E3+If+S/2iEepRQShnlVFBJFdW0gQ6gjXQgHUSb6GA6hK5AV6Qr0ZXpKnRVuhpdna5B16Rr0bXpOrSZrkvXo+vTDeiGdCO6Md2Ebko3o5vToXQLuiXdig6jw2mU+jSghsZonCZokqbo/+jWdBu6Ld2Obk9H0DTN0CxtoZY6OpLuQEfRHelOdDTdme5Cx9CxdFe6Gx1Hd6fj6R50T7oX3ZvuQ/el+9H96QF0Ap1Ic3QSbaWTaZ5OoVNpGy3QA+k02k47aCctRq6nXXQ67aYl2kN76Qw6kx5ED6aH0EPpYfRwegQ9ks6iR9GjI5fRY+ix9Dh6PD2BnkhPoifTU+ip9DR6Oj2DzqZn0jn0LHp25Dx6Dj2Xnhe5iJ5PL6AX0ovoxfQSeim9jF5Or6BX0qvo1fQaei29jl5Pb6A30pvozfQWeiu9jc6lt9M76Dx6J72L3k3voffS++j99AH6IH2IPkzn0wX0EfoofYw+Tp+gT9Kn6NP0GfosfY4+T1+gL9KX6Mv0FfoqfY2+Tt+gb9K36Nv0HfoufY++TxfSD+iHdBH9iH5MP6Gf0s/o5/QL+iX9in5Nv6Hf0sX0O7qEfk9/oD/Sn+jP9Bf6K/2N/k7/oH/Sv+jf9B/6L/2PRZjHCKOMMc4Ek0wxzRrYANbIBrJBrIkNZkPYCmxFthJbma3CVmWrsdXZGmxNthZbm63Dmtm6bD22PtuAbcg2YhuzTdimbDO2ORvKtmBbsq3YMDacRZnPAmZYjMVZgiVZiv2Pbc22Yduy7dj2bARLswzLshZmmWMj2Q5sFNuR7cRGs53ZLmwMG8t2ZbuxcWx3Np7twfZke7G92T5sX7Yf258dwCawiSzHJrFWNpnl2RQ2lbWxAjuQTWPtrIN1siLrYtNZNyuxHtbLZrCZ7CB2MDuEHcoOY4ezI9iRbBY7ih3NjmHHsuPY8ewEdiI7iZ3MTmGnstPY6ewMNpudyeaws9jZ7Bx2LjuPnc8uYBeyi9jF7BJ2KbuMXc6uYFeyq9jV7Bp2LbuOXc9uYDeym9jN7BZ2K7uNzWW3szvYPHYnu4vdze5h97L72P3sAfYge4g9zOazBewR9ih7jD3OnmBPsqfY0+wZ9ix7jj3PXmAvspfYy+wV9ip7jb3O3mBvsrfY2+wd9i57j73PFrIP2IdsEfuIfcw+YZ+yz9jn7Av2JfuKfc2+Yd+yxew7toR9z35gP7Kf2M/sF/Yr+439zv5gf7K/2N/sH/Yv+49HuMcJp5xxzgWXXHHNG/gA3sgH8kG8iQ/mQ/gKfEW+El+Zr8JX5avx1fkafE2+Fl+br8Ob+bp8Pb4+34BvyDfiG/NN+KZ8M745H8q34FvyrfgwPpxHuc8DbniMx3mCJ3mK/49vzbfh2/Lt+PZ8BE/zDM/yFm654yP5DnwU35HvxEfznfkufAwfy3flu/FxfHc+nu/B9+R78b35Pnxfvh/fnx/AJ/CJPMcn8VY+mef5FD6Vt/ECP5BP4+28g3fyIu/i03k3L/Ee3stn8Jn8IH4wP4Qfyg/jh/Mj+JF8Fj+KH82P4cfy4/jx/AR+Ij+Jn8xP4afy0/jp/Aw+m5/J5/Cz+Nn8HH4uP4+fzy/gF/KL+MX8En4pv4xfzq/gV/Kr+NX8Gn4tv45fz2/gN/Kb+M38Fn4rv43P5bfzO/g8fie/i9/N7+H38vv4/fwB/iB/iD/M5/MF/BH+KH+MP86f4E/yp/jT/Bn+LH+OP89f4C/yl/jL/BX+Kn+Nv87f4G/yt/jb/B3+Ln+Pv88X8g/4h3wR/4h/zD/hn/LP+Of8C/4l/4p/zb/h3/LF/Du+hH/Pf+A/8p/4z/wX/iv/jf/O/+B/8r/43/wf/i//T0SEJ4igggkuhJBCCS0axADRKAaKQaJJDBZDxApiRbGSWFmsIlYVq4nVxRpiTbGWWFusI5rFumI9sb7YQGwoNhIbi03EpmIzsbkYKrYQW4qtxDAxXESFLwJhREzERUIkRUr8T2wtthHbiu3E9mKESIuMyIoWYYUTI8UOYpTYUewkRoudxS5ijBgrdhW7iXFidzFe7CH2FHuJvcU+Yl+xn9hfHCAmiIkiJyaJVjFZ5MUUMVW0iYI4UEwT7aJDdIqi6BLTRbcoiR7RK2aImeIgcbA4RBwqDhOHiyPEkWKWOEocLY4Rx4rjxPHiBHGiOEmcLE4Rp4rTxOniDDFbnCnmiLPE2eIcca44T5wvLhAXiovExeIScam4TFwurhBXiqvE1eIaca24TlwvbhA3ipvEzeIWcau4TcwVt4s7xDxxp7hL3C3uEfeK+8T94gHxoHhIPCzmiwXiEfGoeEw8Lp4QT4qnxNPiGfGseE48L14QL4qXxMviFfGqeE28Lt4Qb4q3xNviHfGueE+8LxaKD8SHYpH4SHwsPhGfis/E5+IL8aX4SnwtvhHfisXiO7FEfC9+ED+Kn8TP4hfxq/hN/C7+EH+Kv8Tf4h/xr/hPRqQniaSSSS6FlFJJLRvkANkoB8pBskkOlkPkCnJFuZJcWa4iV5WrydXlGnJNuZZcW64jm+W6cj25vtxAbig3khvLTeSmcjO5uRwqt5Bbyq3kMDlcRqUvA2lkTMZlQiZlSv5Pbi23kdvK7eT2coRMy4zMyhZppZMj5Q5ylNxR7iRHy53lLnKMHCt3lbvJcXJ3OV7uIfeUe8m95T5yX7mf3F8eICfIiTInJ8lWOVnm5RQ5VbbJgjxQTpPtskN2yqLsktNltyzJHtkrZ8iZ8iB5sDxEHioPk4fLI+SRcpY8Sh4tj5HHyuPk8fIEeaI8SZ4sT5GnytPk6fIMOVueKefIs+TZ8hx5rjxPni8vkBfKi+TF8hJ5qbxMXi6vkFfKq+TV8hp5rbxOXi9vkDfKm+TN8hZ5q7xNzpW3yzvkPHmnvEveLe+R98r75P3yAfmgfEg+LOfLBfIR+ah8TD4un5BPyqfk0/IZ+ax8Tj4vX5Avypfky/IV+ap8Tb4u35Bvyrfk2/Id+a58T74vF8oP5IdykfxIfiw/kZ/Kz+Tn8gv5pfxKfi2/kd/KxfI7uUR+L3+QP8qf5M/yF/mr/E3+Lv+Qf8q/5N/yH/mv/E9FIndE5ilPkcjdkXsijysauTNyV+QJxSJHRx6NnBC5SXEllFRK6ciTqkENUI2RhyPz1UA1KPKgalKD1RC1glpRraRWVquoVdVqanW1hlpTraXWVuuoZrWuWk+tH/lNbaA2VBupjdUmalO1mdpcDVVbqC3VVmqYGq6iyleBMiqm4iqhkioVOVX9T22ttlHbqu3U9mqESquMyqoWZZVTI9UOapTaUe0UOV+NjlwYuSCyJPJY5JrIHLWz2iVyceS6yBlqTOTsyDlqrNpV7abGqd3VeLWH2lPtpfZW+6h91X5qf3WAmqAmqpyapFrVZJVXU9RU1aYK6kA1TbWrDtWpiqpLTVfdqqR6VK+aoWaqg9TB6hB1qDpMHa6OUEeqWeoodbQ6Rh2rjlPHqxPUieokdbI6RZ0auU+dpk5XZ6jZ6kw1R52lzlbnqHPVeep8dYG6UF2kLlaXqEvVZepydYW6Ul2lrlbXqGvVdep6dYO6Ud2kbla3qFvVbWquul3doeapO9Vd6m51j7pX3afuVw+oB9VD6mE1Xy1Qj6hH1WPqcfWEelI9pZ5Wz6hn1XPqefWCelG9pF5Wr6hX1WvqdfWGelO9pd5W76h31XvqfbVQfaA+VIvUR+pj9Yn6VH2mPldfqC/VV+pr9Y36Vi1W36kl6nv1g/pR/aR+Vr+oX9Vv6nf1h/pT/aX+Vv+of9V/OqI9TTTVTHMttNRKa92gB+hGPVAP0k16sB6iV9Ar6pX0ynoVvapeTa+u19Br6rX02nod3azX1evp9fUGekO9kd5Yb6I31ZvpzfVQvYXeUm+lh+nhOqp9HWijYzquEzqpU/p/emu9jd5Wb6e31yN0Wmd0Vrdoq50eqXfQo/SOeic9Wu+sd9Fj9Fi9q95Nj9O76/F6D72n3kvvrffR++r99P76AD1BT9Q5PUm36sk6r6foqbpNF/SBeppu1x26Uxd1l56uu3VJ9+hePUPP1Afpg/Uh+lB9mD5cH6GP1LP0UfpofYw+Vh+nj9cn6BP1SfpkfYo+VZ+mT9dn6Nn6TD1Hn6XP1ufoc/V5+nx9gb5QX6Qv1pfoS/Vl+nJ9hb5SX6Wv1tfoa/V1+np9g75R36Rv1rfoW/Vteq6+Xd+h5+k79V36bn2Pvlffp+/XD+gH9UP6YT1fL9CP6Ef1Y/px/YR+Uj+ln9bP6Gf1c/p5/YJ+Ub+kX9av6Ff1a/p1/YZ+U7+l39bv6Hf1e/p9vVB/oD/Ui/RH+mP9if5Uf6Y/11/oL/VX+mv9jf5WL9bf6SX6e/2D/lH/pH/Wv+hf9W/6d/2H/lP/pf/W/+h/9X8NkQavgTTQBtbAG0SDbFANuqGhYUBDY8PAhkENTQ2DG4Y0rNCwYsNKDSs3rCJ7OwvDh6ddNWZ8xAAxhphATMl0R661u9gpc9Uo0pO68zPyIlcJMl2cWuzMT5O5ahyQbS10t/Z2TGnPHzSgdVm70lt0eBoxI1pac+XOJldCdWl0OGJUWjDzYNoqM19lVreKIyakxRjy1Shste98JQwYWTOiqfUj8sH0o4g+YjBgh5r92pa12Q6Tct2sLXwTo3oK7ZPzolAJchTGXMCYR1XHXKiOeRTGWKhGMmpHUjhwwI41jAPrxxbgCINE47Sp3fl8Z3uuc3KhVYzOtfb25EV7JWCTDGJWjK4efHslsNGTiz2sPXwTu1T36qzZy8QQ42KX6l6d1VPWmesqlnq6i11teWo7p9J851Q5BodXxOGNqR5eseaSxHAyY1GxW5XWXUOL4XBiCbFbldZdDeOq25YqYcC4mlNSqj8lcVyeeCB2r+7cUz3O3csXpad8UcZXL0pv9aKMx6h7Merx1VH3VgIf313onMp7y+/VfhM4gkRUjscF68UHe8+acc2sae9d0z54WVvsUz2qQ2rOQAJXKZHl7cXOqaVqlgQziY9gEseYDBANIq5WEucxmUBMIqYQ8UeWBC2ZRWxBtIjVW0A0BX4K/BS4KXBT4KbATYGbAjcFbgrcFLgpcFPgpsBNOT6mrdgdloXl9+qyNI45DXYa7DTYabDTYKfBToOdBjsNdhrsNNhpy8dXmL3LmBkcL26BUdwCoxmwcSuMZsDGLTGaATsDdgbsDNgZsDNgZ3DcGZzvLM53Fvws+Fnws+Bnwc+CnwU/C34W/Cz4WfCz4GfBz4KfBb8F/BbwW8BvAb8F/BbwW8BvAb8F/BbwW8BvAb8F/BbwW8BvAd+Cb8G34FvwLfgWfAu+Bd+Cb8G34FvwLfgWfAu+Bd+B78B34DvwHfgOfAe+A9+B71IN6fKdo/IH3pBb2pRpW425fPWONqbUniu1VdvFZe1KL/7w4YhRRB8xQDSIMcQ4YgIxiZhCTCNmELOILYgWsXo2fEjXj4IfBT8KfhT8KPjQrh9NNI5rLXZ05HKtrfnOnsZSTYItMJIoRhLFSKIYSRQjiWIkULEPFftQse9jJD5G4mMkPkbi40z4OBM+zoQPvg++D74Pvg++D34AfgB+AH4AfgB+AD707AfgB+AH4Afgw81+AH4AfgB+AL4B34BvwDfgG/Bhbd+Ab8A34BvwDfgGfAO+Ad+Ab8CHvf0Y+DHwY+DHwI+BD5/7MfBj4MfAj4EfAz8Gfgz8GPgx8OPgx8GH6/04+HHw4+DHwY+DHwc/Dn4c/Dj4cfDj4MfBj4MP9/sJ8BPgJ8BPgJ8APwF+AvwE+AnwE+DD+n4C/AT4CfAT4GMe4GMe4GMe4GMe4GMe4GMe4GMe4GMe4GMe4GMe4GMe4GMe4GMe4GMe4GMe4GMe4GMe4GMe4KfAx3zAx3zAx3zAx3zAx3zAx3zAx3zAx3zAx3zAx3zAx3zAx3zAT4GfBj8NPuYEPuYEPuYEPuYEPuYEPuYEPuYEPuYEPuYEPuYEPuYEPuYEfhp8lEJ+BnzMC3zMC3zMC3zMC3zMC3zMC3zMC3zMC3zMC3zMC3zMC3zMC3zMC3zMC3zMC3zMC3zMC3zMC3zMC3zMC3zMC3zMA3zMA3zMA3zMA3zMA3zMA3zMA3zMA3zMA3zMA3zMA3zMA3zMA3zMA3zMA3zMA3x43YfXfXjdh9d9eN2H13143YfXfXjdh9d9eN2H13143YfXfXjdh9d9eN2H13143YfXfXjdh9d9eN2H13143YfXfXjdd+A78B34DnwHvgPfOT21OzcjHwpwkq6YvdyqrAuG+7pSh9QsMYgxxDhiAjE5sK1YnJabVJxRu1caMYOYRWxBtIjVcxHA6gGsHsDqAawewOoBrB7A6kEUo4gmEVOI4MPlAVwewOUBXB7A5QFcHsDlge83hjXopHx7ceayg4LQAwg9gNADCD2A0AMIPYDQAwg9gNADCD2A0AMIPYDQAwg9gNADCD2A0AMIPYDQAwg9gNADCD2A0AMIPYDQAwg9gNADCD2A0AMIPYDQAwg9gNADCD2A0AMIPYDQAwg9gNADCD2A0AMIPYDQAwg9gNADCD2A0AMIPYDQAwg9gNADCD2A0AMIPYDQAwg9gNADCD2A0AMIPYDQAwg9gNADCD2A0AMIPYDQAwg9gNADCD2A0AMIPYDQAwg9gNADCD2AsAMIO4CQAwg5gJCDRAvvKXYWSwMnF/Ld+VKhVMka0u1dbblKU+c6iz359nwh12i7SoWwdq8sVrYH60cV0Woc01Eof89QTcbXbNwwpiM/tbrRkEK4+XIsXmGxTL4nx0fmwnm0BIftEy6iIYfv3ha2WBnEd8p1deXE6FzHpMk5snMv2aWX7FWQIJOxBbpbW5GPK0ztyNHdc70So6Bj2wo0G77GlgqNo2pG0IQN+vKG3NIDb8zXHm6+73ALfYe7Uu/yu1YPprI/m1Q+mKnlg+GT8+09OYm+2CHlQyqv7KkcUrkzPq1ySO3VQ+rsJQcVZLF6PLS7rShK5YOJ8kqgPeExgUu7wuNpDV9hyovlE9xYe26b6obXWKy9Or21V6e49OpUPxOQYwA5BpBjADkGkGMAOQaQYwA5BiiSAxTJAYrkAEVygCI5QJEcQKYBZBpApgFkGkCmAWQaQKYBZBpApgFkGkCmAWQaQKYBZBpApgFkGkCmAWQaQKYBZBpApgFkGkCmAWQaQKYBZBpApgFkGkCmAWQaQKYBZBpApoGr8g3KYoOy2KAsNiiLDTRqoFEDjRpo1KAsNiiLDQRqIFADgRoI1ECgBgI1EKiBQA0EaiBQA4EaCNRAoAYCNRCogUANBGogUAOBGgjUQKAGAjUQqIFADYphg2LYwJ0G7jRwp4E7Ddxp4E4Ddxq408CdBu40cKeBOw3caeBOA3cauNPAnQbuNHCngTsN3GngTgN3GrjTwJ0G7jRwp4E7Ddxp4E4Ddxq408CdBu40cKeBOw3caeBOA3cauNPAnQbuNHCngTsN3GngTgN3GrjTwJ0G7jRwp4E7Ddxp4E4Ddxq408CdBu40cKeBOw3caeBOA3cauNPAnQbuNHCngTsN3GngTgN3GrjTwJ0G7jRwp4E7DYphg2LYoBg2KIYN3GrgVoNi2KAYNiiGDYphA/cauNfAvQbFsEExbFAMGxTDBsWwQTFsUAwbFMMGxbBBMWxQDBsUwwbFsEExbFAMGxTDBsWwQTFsUAwbFMMGxbBBMWxQDBsUwwbFsEExbFAMGxTDBsWwQTFsUAwbFMMGxbBBMWxQDBsUwwbFsEExbFAMGxTDBsWwQTFsUAwbFMMGxbBBMWxQDBsUwwbFsEExbFAMGxTDBsWwQTFsUAwbFMMGxbBBMWxQDBsUwwbFsEExbFAMGxTDBsWwQTFsUAwbFMMGxbBBMWxQDBsUwwbFsMGX5AZfkhsUxwbFsUFxbFAcGxTHBsWxQXFsUBwb+N/A/wb+N/C/gf8N/G/gfwP/G/jewPcGvjfwvYHvDXxv4HsD3xv43sD3Br438L2B7w18b+B7A98b+N7A9wa+N/C9ge8NfG/gewPfG/jewPcGvjfwvYHvDXxv4HsD3xv43sD3Br438L2B7w18H4PvY/B9DL6Pwfcx+D4G38fg+xh8H4PvY/B9DL6Pwfcx+D4G38fg+xh8H4PvY/B9DL6Pwfcx+DsGf8fg7xj8HcN9Iob7RAz3iRjuEzHcJ2K4T8Rwn4jhPhHDfSKG+0QM94kY7hOxVB8H48Z9Iob7RAz3iRjuEzHcJ2K4T8Rwn4jhPhHDfSKG+0QM94kY7hMx3CdiuE/EcJ+I4T4RSzteasvPyDWElUJuSik/tdhebXaFb20DKs3puY5cT4m3FboL03lPKZyD88qGvLKN6FtdDKf91U4zaTG9d1JvT0lMzk3Nl9p4R74nP5V35KbnprDu3JR8uGcpP12W2gqd5UfapUpQpWJILfVO171dXfnuCeVF7cWZ+e6wUe03Gx9QhU0PwZ0s156fQsPyhE8tdOTb+eQw7yFteTojN4Mfkju40EnDwoT2hK+Di5PVlEJnrn1abgoNXzwcah6LOvIdNHxVk87eThq+RClcP62NlTuRlRVdedKVb6g0e0phYcIr73R6MTyg8AhZ+VDCimaGCOEzqiGEivBVDlPLdUubDkOpLeyzcpqiLdW/lTBGEX3EANEgxhDjiAnEJGIKMY2YQcwitiBaRFeNUfCj4EfBj4IfBT8KfhT8KPhR8KPgR8GPgh8FPwp+FPwo+D74Pvg++D74Pvg++D74Pvg++D74Pvg++D74Pvg++D74AfgB+AH4AfgB+AH4AfgB+AH4AfgB+AH4AfgB+AH4AfgGfAO+Ad+Ab8A34BvwDfgGfAO+Ad+Ab8A34BvwDfgx8GPgx8CPgR8DPwZ+DPwY+DHwY+DHwI+BHwM/Bn4M/Bj4cfDj4MfBj4MfBz8Ofhz8OPhx8OPgx8GPgx8HPw5+HPw4+AnwE+AnwE+AnwA/AX4C/AT4CfAT4CfAT4CfAD8BfgL8BPhJ8JPgJ8FPgp8EPwl+Evwk+Enwk+AnwU+CnwQ/CX4S/CT4KfBT4KfAT4GfAj8Ffgr8FPgp8FPgp8BPgZ8CPwV+CvwU+Gnw0+CnwU+DnwY/DX4a/DT4afDT4KfBT4OfBj8Nfhr8NPgZ8DPgZ8DPgJ8BPwN+BvwM+BnwM+BnwM+AnwE/A34G/Az4WfCz4GfBz4KfBT8Lfhb8LPhZ8LPgZ8F34FTnZFELz1h4xsIzFp6x8IyFZyw8Y+EZC89YeMbCMxaesfCMhWcsPGPhGQvPWHjGwjMWnrHwjIVnLDxj4RkLz1h4xsIzFp6x8IyFZyw8Y+EZC89YeMbCMxaesfCMhWcsPGPhGQvPWHjGwjMWnrHwjIVnLDxj4RkLz1h4xsIzFp6x8IyFZyw8Y+EZC89YeMbCMxaesfCMhWcsPGPhGQvPWHjGwjMWnrHwjIVnLDxj4RkLz1h4xsIzFp6x8IyFZyw8Y+EZC89YeMbCMxaesfCMhWcsPGPhGQvPWHjGwjMWnrHwjIVnLDxj4RkLz1h4xsIzFp6x8IyFZyw8Y+EZC89YeMbCMxaesfCMhWcsPGPhGQvPWHjGwjMWnrHwjIVnLDxj4RkLz1h4xsIzFp6x8IyFZyw8YxNO7Fl5oilmVsOe1X/KOLMS9J59X6frmX2t6n7wjIVnLDxj4RkLz1h4xsIzFp6x8IyFZyw8Y+EZC89YeMbCMxaesfCMhWcsPGPhGQvPWHjGwisWPrHwiYVPLHxi4RMLn1j4xMInFj6x8ImFTyx8YuETC5/YdB8XxwmfWPjEwicWPrHwiYVPLHxi4RMLn1j4xMInFj6x8ImFTyx8YuETC59Y+MTCJxY+sfCJhU8sfGLhEwufWPjEwic2C34W/Cz4WfCz4LeA3wJ+C/gt4LeA3wJ+C/gt4LeA3wJ+C/gt4LeA3wJ+C/gt4FvwLfgWfAu+Bd+Cb8G34FvwLfgWfAu+Bd+Cb8G34DvwXVTsXf2DO7gSsBR0B7oD3YHuQK9+8xJ1sLaDtR2s7WBtB2s7WNvB2g7WdrC2G97XXxoxg5hFbEG0iNWjcbC2g7UdrO1gbQdrO1jbwdIOlnawtIOlHSztYGkHKztY2cHKDlZ2sLKDlR2s7GBlBys7WNnByg5WdrCy8/t4OD5Y2cHKDlZ2sLKDlR2s7GBlBys7WNnByg5WdrCyg5UdrOxgZQcrO1jZwcoOVnawsoOVHazsYGUHCztY2MHCDhZ2sLCDhR2s62BdB+s6WNfBug7WdbCug3UdbOtgWRfr6xfjh1UdrOpgVQerOljVwaoOVnWwqoNVHazqYFUHqzpY1cGqDlZ1sKqDVR2s6mBVB6s6WNXBqg5WdbCqg1UdrOpgVQerOljVwaoO1ZpDteZQrTlUaw7VmkO15mBRB4s6WNTBog4WdbCog0Vdso+H44VFHSzqYFEHizpY1MGiDhZ1sKiDRR0s6mBRB4s6WNShWnOo1hys6lCtOdjVwa4OdnWwq4NdHezqYFcHuzrY1cGuDnZ1sKuDXR3s6mBXB7s62NXBrg52dbCrg10drOpgVQerOljVwaoOVnWwqoNVHazqYFUHqzpY1cGqDlZ1sKqDTR1s6mBTB5s62NTBpg42dbCpg00dbOpgUwebOtjUwaYO9nSwp4M9HezpYE8HezpY08GaDtZ0sKaDNR2s6WBNB2s6WNPBmg7WdLCmgzUdrOlgTQdrOljTwZoO1nQOPAcePOngRwc/OvjR9fnRgePAceA4cKpVsD+86tEwRhF9xADRIMYQ44gJxCRiCjGNmEHMIrYg9nFdNUbBi8YG9nZOzneXWovd+cmT2gdO7y325Ms/X+ou5SdjG+zjg+GD4YPhg+Fb0VHorPzYKt9a7MTegdH5g1rbcx1h71iCscQQ4+g3jn7j6DeOfuN927nGKcXe7lJvV767UOxunFKYke9LBpbCIXcuzfKFqW09fVl17wSOIoUzn8KZT+FMpHDmUzjzaWyXxnZpn7UXunNIcFnScdGVL+V7+hbjqqRTotSWn57HAaczzPZ2F5HgqNI4qjTGlQEvA14G48pgXBmMKwN0dV7nR/EJiVZnQD5+uehHq99T+FE/rvOlnkJHrgfXM1p1cRitKnbme9oK3ZN1z8xipVHS4aLK2Wtr7GnrzqNdGlA+2Wg3Vs41kmpXSaNz3d3Fme35KT2y0urtaqjE7vJm1ZWTizM7q61JIUxjs8mdjUtbk0qVaakfXuuGYndPW/nHcbn2xkJnT/nj2NpTKHYOyE/vLczItec7W/O8rdhbyg8MP63txamF1lx7Z7GnobxxOMFt7+la2pxUeVLj4zGgj8d/Ph7b+Xg8F0aDmETEeh/L8YGPBcgD5DHsX53UhBH9Vyc1YcT21UlNGOOICUTwqpObMKYRM4h9nBZEi1j96MTi4MfBj4MfBz8Ofhz8OPhx8OPgx8HHH2QMf5Cx8h9k16T2Yus0GV6jcuTVrH1KNXb3IO8pteUm53nlXU6eVol6SqG9Pby3FA+q9oY/KDwMDGOmobpFd3iFZU93ITe1t6sau5FP7qzG9imi/BvI9uqnJJbFeck6XeicMak37KSn3Kpu01DsyndiYamjEH40c6358LM0Y2lCS72dYkq+I/w0sfIbL3WF42Wt7b2TeFs+F9InF3Id4Z1sQEdvCZ+v/KCadt8tLV6d/vlZXIksrkQWVyKLK5HFlcjiSmRxJbK4EllciSyuRBZXIosrkcWtMYtbYzYBTgKcBDgJcBLgJMCpTjN9fImZTiyNScQUYhoxg5hFbEG0iK4aq2VTGKPVmER/SfSXRH9J9FedVoazpyhiZfwO2nPQnoPWHLTmoDUHrTloLZx9tSDaxurDzQmVp8BN4W0g392Z6wlvXuWnpqr8cHZmIfxMVh7LlluiLV8OclquuqLyDLbcaux7DltOVPlJaWW7ntyMytqw5wld7b2lUmFq54Dyc1Y8Nm6otCvNIZVFlWfNWDm4ZkllgS4PqDLUhnKr+hy5srAj11WYrifle6qbD6g8TUa7MvhqW7Xlqw09IzcDqytPmbG0p29DHZ6UamtQ3zNnrFjaGlA5diwNDxytzl501lh9/lxNBuIBNIbR1xhQeQKNPacX0XND+fShuewU6J6+Iatw8NUn9eEBlx/Fly9HOYZ2LYfKGamMrnKZ8d25w3fnDt+dO3x37sJZF+sM//BpVyE6sPXg7vDuUmit/CZ7cOX33DU/JhxS0+4u/8PjfEPl25GtwusbXdb0lzWDhsoXldUNljb9Zc1g0NKfWFQ2Wj71l0+DhsovOKq9LW36DZXRVpY2LfvVdyUf2PdTh7oRmGXN2LLRmmXN2PJks3waW0avGZNZ1qzZIL6smVjWTC43Mn+5LFguM8tlseWymr5Ty61ILJctD0sNWu6kDF8+jS6f+sunwfKpWT6NDVh2fYbXtKM1bb+mXTnQ9nx4W6hevPDjWP7VTfmXOVu15rpq8mhdnq3Lh9fkibr9g+Vy38bwitflibo8WZenavJ4Odbl8bo8UZcn6/LUgJq8Zl2iru9EP+sTdXmyLq/tu3bbZF3fybq+k/1sn6zLa/uuXZeq6ztV13eqru9UP/vX9t13vuN916Auj9flibo8WZf39R2v66u/PFGXJ+vy2rEl6vZP1I0tUddfoq6/RN3YardN1vWdrOs72c/2ybq8tu/adam6vlN1fafq+k71s39t333nJFF3vfryeF2eqMuTdXlf34m6vuL95PG6PFGXJ+vy2r5r961n9bc+WZfXHneybv9k3f7JurEl6/pL1o2tdl2qru9UXd+pur5T/exf23ffuJN116svj9flibo8WZf39Z2s6yveTx6vyxN1ebIur+27dt9EXd+JftYn6vJkXV7bd+229cdRz+5v+9pzmqrbP1W3f6pu/1Td2FJ1Y+vrO1V3vfryeF2eqMuTdXlf36m6vuL95PG6PFGXJ+vy2r5r903U9Z3oZ32iLk/W5bV9126brOs7Wdd3sp/tk3V5bd+16+rPUf1x1Y+lun/fbHpCsacj1z1NV+ep4VLMTEzdzMXUzXSCfvJkTR4tz3Zq8mxdbvq2b5yU6y5shcnWipWVmWh1g2i50+H9LIvWLTP9bGfqtov301+8n/7i/fQXr+sv1c/4Uv2ML9XP+FL9jC/Vz/hS/Ywv1c/4Uv9/fNnY/x/fcsvqtzP9bFffX7yf/uL99Bfvp7/+zl+y70PWz7L67eL9bBev49b1t9yy+u3i/WxX6a/88/Oe/ORCpQJTtnNqZfLf1/D7GoE6JN9dLLdksbNSL8iemZVcV75rLbdU+SvuaqNQrcxkqVCp/HTla9dKq/Lda2WjzkK1owHdYdndmisXidX/mBm+Zw5Hl6Jj2jrk+F1Glb9WrakmK4OtySuF4qBlebk8rFldqXGqdWn1v0lUaVZ2qt4FyttXF1Y2HVyp1ytVPSr/ZQuWfgVR/cJjYF9a+Uf/Ky4t9pf96/9BS5fVpZV/+D+45mueytLKlyn4QqJ8EmLhn2Ms04K2X9MOyu3I7XpsepKXj3hemzc1smKk2ZsY2cWbEBnvpSPbeiPCOCJclwljNszLcStv28iscLttw+Xbhfk24fKtI+PDJVtHtg9fY8LXGeGLha/qFsPDLYaFcRjyLcN8i3CPl8J3r/IqL90+XFqOO4b5DmEciejC5TaMFvmoMA9jZKInI15ILL/P99iIed6if7yX/vHW/cc78i9v7F/erB9n/0h++H6z5tu+n/89GbNkwpLbltDhS7ymJZ6KLB68eOziiYu7Fl++WDQ0fes1Rr7xhnyyKNn84bYLx3+w7fvjIwvDI1s4fOHYhbMWzl3IF3p0/Pt0lebBC9ZdMHxB14JZC15esGjB9wvUrIdnP0weenBYc9ODzQ+S5nlj5h05j0683mu6vvl6MvaiiReR2Rd7TRc3XzzsYnrhBVs1XzBynebzzt2kedG5359L7v1vwbxzBw5xD3pjvNGRbcNzuMs8+l/zbemVvZ3Dw2oK35vD17DwNSZ8FcPXGeFLhGtGh2tGh2tGj0jSCed4A+asOWfonEPnnDKHdx0/6/jZx9NZx80+jtw2Y/4MUhq7WXOxc2hz58jNm1cPVhsvAzpehJiQPmLUpI02dRMnjGieEG607z7Dm/cZuVnzisEK43l4wCzcsIk20+3pGFqkZ9D5VKrdxq7TvGv4WjT2+7FkxFjd6JrGNI8ZNobe+9+iEfmd1gt727Frx1k70lFus+YdRiabm0Y2jxw28qWRH45cMlJMGOldFv7f3ebmOzrCbTbMjXDrrOfW2mHN8asEK48f4jWNHxw0jSdeeKGDyPhhTf81kaamCU1HNtGmyPYRMmsVj3v3erNv333c0KE73Sv/222nuWrsvnO9E+duNK78PmLXfeaKE+dGxu+z7163e97pex932mmRzNo7zfXH7TV34tp77zR3ctgYUW7MChuD1759lUhm71KpZ2jlf97QoWG7N3yPDO0dGi48oFRdGlm6PjK05JVKkVKpspM3tLxBNffC96HldeGC8n5euPcBpUj5rbxyaHWn8t4ldFfZufpWaax2wP8BHbhKEwplbmRzdHJlYW0KZW5kb2JqCgoyMDIgMCBvYmoKWzAgWzc3OF0gMyBbMjUwIDMzM10gMTEgMTIgMzMzIDE1IFsyNTAgMzMzIDI1MCAyNzhdIDI5IDMwIDI3OCAzNCBbNDQ0XSAzNiBbNzIyIDY2NyA2NjcgNzIyIDYxMSA1NTYgNzIyIDcyMiAzMzMgMzg5IDcyMiA2MTEgODg5IDcyMiA3MjIgNTU2XSA1MyBbNjY3IDU1NiA2MTEgNzIyIDcyMiA5NDRdIDYwIFs3MjIgNjExXSA2OCBbNDQ0XSA3MCBbNDQ0XSA3MiBbNDQ0IDMzM10gNzYgNzcgMjc4IDc5IFsyNzggNzc4XSA4NSBbMzMzIDM4OSAyNzhdIDkwIFs3MjJdIDIwMTAgWzEwMDBdIDIwMTMgMjAxNCAzMzMgMjAxNyAyMDE4IDQ0NCAyMDI0IFsxMDAwXSA5MyBbNDQ0XSAxNjkgWzQ0NF1dCmVuZG9iagoKMjAzIDAgb2JqCjw8IC9MZW5ndGggNTYyIC9GaWx0ZXIgWy9GbGF0ZURlY29kZV0gL0RMIDE0MzIgPj4Kc3RyZWFtCnicXZTNqtswEEb3fgotbxclsTQjJRACJZdCoH807QPYlpwaGts4vou8fW2dcBcNJOEQWfOdGTKb0/n13Hez2fyYhuaSZtN2fZzSfXibmmTqdO36orQmds38pPzZ3Kqx2Jy+VuO36pbMl65OUzV3Q39JU9d+XH82MbUc+fUYk7FPPr9eHvc53c59O5jDodj8XO67z9PDvHyKQ50+FJvvU1xu6a/m5ffpsvDlbRz/plvqZ7Mtjsd8UUmaZojpPlbNUr2/puKwXV5Hc/i8vI5F6uN/v4c9j9Vt86ea8nG3HF++9sdMksmWUA3toAZ6nmyhJlO5hSJUQgmyUAtRz20h6jnqlQpZyEMOCpBAO0ihPeShCgoQDg6HEgeHQxmhCkpQncmS2pHaklPIackp5LTkFHJacgo5LTmFnJacQk5LTiGnJaeQ05JTyGnJKeS05JRnTuYgzMExB2EOjjkIc3AYCUaOOShzcBgpRg4jxchhpBg5jBQjh5Fi5DBSjBwOioPDQXEQ+unpp1DdU12o7qkuVPdUF6p7qgvVPdWF6p7qQj89/RSyeLIIWfwzC/309FPop6efSj89/VT66emn0k9PP5V+Bvqp+AX8FL+An+IX8FP8An6KX8BP8Qv4KX4BP8Uv4Kf4BfwUv4Bf4GSNX8WdKZ8Mcb3Trn/DTBHaQQniZCqhBrJQhHaZlj/CunKeu2VdPuuSfN+Rzds0LSssb9K8Ftc91vXpfdmOw7g+ld//AFRATe0KZW5kc3RyZWFtCmVuZG9iagoKMjA0IDAgb2JqCjw8IC9MZW5ndGggMjI5NTQgL0ZpbHRlciBbL0ZsYXRlRGVjb2RlXSAvREwgNTYxODggL0xlbmd0aDEgNTYxODggPj4Kc3RyZWFtCnic7P13fFRFFz+OT7/3btqmk4QlCUuTUJK9dxMiIJtKFUI1oSaQQCIlQAAVG3YFG/Yu9gJKsGLHXrE8il3B3gV7QXa/Z+6eDQHR5/n9Pp/vP98Xkfeee+fOzJk5M3Pe59wNQighJI6sIpwUjps4MGCw5x6BkocB9XNWLMurP37c0YTQroSwt+cunrfwhIb7kgnhPxNi3DNvwTFzf2rfHIAObiUk49bmpobGyK5V3xDSvQbaFzdDQcLHiWPh/ky479G8cNnRH528rRjuNxDSx1nQOqeBfHDpt4SM2gH3QxY2HL04oVz0J6QN9JG8xa1ty3rdLAvhfgghjT8tXtq0OPPWALR/G8r4SMLFtexhIgmRV0gbRtkzKvk6MpelUMmYyQ0pGRc7iCdSQ46OQK/5AFJUNrGC5JG8yF9yfria2kY+faie0Me2/watN8ihWjtJlOeQdNIKd0n4uc8P30CyyF2ERL7Vd3s/w2Mif5L/iz+m+0lTaD55mvxBbcrIcTSVTCWNpJUcR1ZTu3NtOpiOgWfHk/fh+SJyDjXINQfqlebTXjQBepjq1juebCUfH1D9EvIo2bWvDii7hNxINuhyWg19XUSfpGNoI/Shex4DH9MP1BU7Ej7OAxwNnwsZxdKd5CXyNpnOHmWfkvPJnTi+RPItrQQ5GkZ4P3Ywmkz8W6ebYRQeMo8cQ06H1u6PHPrXu8SK/AR9jSKPQ8FIciw5p6PF79TVwT0k0lF2ROzCGMGPZPcxtudCuFkL/a4lDfQdGOU5vOyA9vn/44dPJgn0EN6TWAd6yhySFP6TBSI7eQ/iIZMju2JlkdGRn3jD/6ZDrRULoTWJfBY+NtwoB8p4mkN7w4p/Td4LDZ82ta528qSJE8bXjBt7+JjRo0aOGF5dVVlRXhYadtjQIYMPLR1UUhwsKhw4oH+/Pr179ezh756f2yUt2ZuUmBDnsUxDScFh/frltdP6qnbeMy+5usFf5W8Y0b9fXlWX5sr+/ar81fXteQ157SBEL/+IEW6Rv6E9rz6vvReIhk7F9e0hqDl3v5qhaM1QR03qzRtChmgV/rz2rZX+vM106vhauD6n0l+X1/6de324ey16uTcJcJOfDy3cUenR5lW1V69oXl1VD2Okm+I8Ff6KJk//fmSTJw4u4+CqvY9/8Sba5zDqXrA+VYduYsRM0GphplUNje0142urKnPy8+v69xvZnuivdB+RCrfLdlXRbrhd5rXooZM1eZv6bVl99mYvmV1fEN/ob2yYXtvOG6Dtal61evUZ7ckF7Yf4K9sPWflpF5h5U3s/f2VVe4HudfSEDj2j96qk7bKn15+3+hcC0/F/9+2+JQ1Yonp6fyH6sp1VtNMJtfn6J6cabL16dbU/r3p1/eqGzZFVs/15Xv/qTfHxqxdXgblJTS10sTny4Jqc9uqz69q99c300DqcevWE0e2p46fVtrOe1XnNDVACf4b58wfl5Cd31Kn5p8cEzALGAQvn52szrNkcIrPhpn3V+NrofR6ZnXMXCQ0sqGtn9frJltiT9Mn6yarYk47m9X5Y29ETa1e3i54jG/1VYPE1De2rZsPuOlIvjN/bnvhrTr5/dUpyXunAOrduHoxqZGNLXrvsBUaCVp0bwL7RTVZ73ZvEX6PiuxxQ0Cs5Ja/UD93ofqr8VfX4Z0VzF+ggDww9oiC6ESbVtocq4SLUgCtWtalwILRoqIcFa6l0F7N9oH9xe5q/vGN19bCqWibWuk2wWXtaRTuwMLZqH1jlnqu8qtX1ldEh6L7842sfIHZkxyYnL+dumzikrlJXzqiAXdaranVt49z23PqcRjh3c/Nqc/LbQ3WwwnX+2qY6ve3AQofsyHE3R527VybVjp7oHz1+au0gHEj0ge5O9Kzarxt/bU60G9iA7WZPM6+W5fA6qOiFgrxquPCXD4HPdqOnCfCCwd1SvXHLh+TV0hwSqw3DaD8kr6qpEuvp+306lXo7VYyI9ab0LfRTMSInvy4/+tO/H4PHeagYWpjaqCNij8BNwQMT9mfFCLdI27KL3vR5tf4mf52/Oa89VFOr56bN41oZjeHaHNdq0j53nYwFZiL58Dh2o43ZXl2Q09m47cPd+47bEfs9Hhl7nLfa9I+euFp37scOCYx8ZDvRWzg0KDnH9QX6QPvB9+Z54Ui7B3r1plBIH+bmQ3Un/pGNq/0Ta4e4tcGfHJ+zUutKIaPp6Enl/fuBayvf5Kdnjt8UomdOnFr7gBcinzMn1d7FKKuoL6/b1AOe1T6QR0jILWW6VBfqmzx9o3uaADemWz/ngRAhq9ynwi1w7+dspsQtM2NllMzZzKJl3qiiXq6iEGHwRESfhGK1BZSZ0bJVbpn7s4lok4U8MmSGrFA8S2A5m6guugtKHoTowqLk7niaQHM2QasJbvFmumqTFcqJ1lgFNULREZ45ea/qyVNr744Hhs5xP0FRuf6B7dKlGRYbaKUqr1FvlOPqmlfX1+nDRjJgaeAPbaf+w2CZ/IfBQFR8u8ffVN4e5y/X5cN0+bBoudLlBmxRmkGh+SpY+5p2qnfAtNp8OJJ52c/nrPZ+p1eqDpzKau9n/cFio+kaNouVQqSeHrIg9pWUPFhHycCC5BRaWlpUmBrMTx/N0uiaO3V8w0gaREKb5QiIW1PIWaGJCSnx8UDcyYnepCQhvAZPS01ITE6sr0tJTqZeKYz4JC6omFXnoSntafT8NLoqjdak0VAazUuj3jS6I42+mkbXueWL02hhGp3h/iyJ/pBhdkEyybS7DLNTSgfqaxsGllmaDKK0NBAAqUfZMz0/WALRZ6aWPJ9Tnk83hJsb6Qe0O31v7p71V67as+dYetIH9J6RI0fmiE93d80BSaeFbxLZezaCHfyEiO8gHs8hZ4cmdskyVGJysjc+LY1Sr8oSvq6JqfGp9XXJ/eMpJ/HeeGap+HiRlZOTVl+XQ2fV5aSIuPo6Qwg2q07wi3x0mY9O8tGQj7JCH83zwaxm6WmRYXoKBaTLsAJ9kVLaZeCsmfBon5l1/FdUOIwm9w7mJ/t79yqgyfklNlzlJ9t5w6jN8/0bNogV0/IWv/EqnZVbV5cbvm4PZTWl01J36ymuyB4ZXv9OYjjtonDjZXt2e38Pr4bAl1TpnAvmGUemhUqJlPEJccpUs+pMTiSXs+p4yo4EuiWBLk6goQRamEDz3Nv2BLoqgc6KFXZao6XRKXUZhjMo1cPu6S6EHnq6wfpt2LNwwwZ24YbG7FGjssVybXlCojaXxM2Bhof6sDhlxBneZBqfGD+rLpFbcbPqlGWx+jorZV0yXZxMQ8m0MJnuZ0VUWho1FzWS8wMlqWCcqHb2zis0eVvjhKm9do/csJ7dK37O3g17MDM8P2ohNzR21/42GIdJupBfQ7dJjyeJZCRlZGVbCrRbKQkpAja0d1ZdCvckJSTNqktIWZdNV2XTcdl0YDZNyqaRbLozm27Mpidm0/psGsqmJJvuyqY7sumWbHpeNm3NprPc+sPc+odGG7zitjnfbVOTTQuzqdfta3s2fcx9NCvWYKdb+Irb12K3MiiYsc9RWRr7mTljxgGedCwTnGwC266gw2yu4Ry9wexAsUzuWLo8ke7N5/OOumTcxDUnhG/cvqf62g1sHPXR7HAGb1934p47zv4zPCUHN9tjL4Wnw5oujHwrusoxpA85NjQa3GXXpIz0dMOf5D+kb45RYDDStbBrqGt7V5EgjK49U3rClptAaSWl6RROFqXxivZMTcmaVXdEBs1IEeP60mF96cC+1F11e4Zec9s9MTNmuBMphZsZOBV3Lu50Uu3MbtTOCzq9eg/gQafYDmTqM+TvrtLTMjK7MZhY9169F9b273v7NJq7cPmGS5sP++HLW1+q6z/3zGNPXbT8s/VTw1bbzin0yreKyr8dNbdP6fD6sxo3PVAQfnzzqGkzK2b1HN16Y2t4cu88vY/hQ5bA/kklC0Pl8XFxyYZpJjOWlu7lFq+vizctnswIeAaSEkqnhenUm05JOt2VTrek0/PT6ap0ujid1qRTeJqXTjuvXmzVbHvv8epwDnqd/N2TqD855iEy02nxNvuzGTnTZOb0nIm/FG2DxWlN+4MeFT7rj5TdF+aM1OPNjHwk22G8ibRr6Cku4uJkPPNIJr1JzBPPpQFrkmjwwjiaH0fT4iiPo4k8jovUHl6a5qU/e+kbXtrupTd66aleusxLG7200ksdLxVeuhCePeWlF3npYC+FBi966T1eeqWXTvPSArc9VPrUrXOjWw3aT3JrQvlQKFrj9gRtzvdStspLa7w05KV5Xur10h1e+qqXrvNSKF/spfVeWuilxLuPxZbMcjf8zAOdgb0nY4ZLLXonwQ9yTMeBSNFGhjORblA/dX2YBUK2n7jnz9P2bF/Ehq+hx9D6M+TQkTm7TfG7PgF/reWtYFxKesFe2Kh5hKaEqrPTE1PTElROvAGe1qA5cQlZSanpHl9Xx+UE4UvzsV1aOr5K3ySfWHCj7w3fzz6ubxt9y3wX+e7xKd/myJa721aOcOWMOa4MZddOG5G3t+Uy36k+NfgpaMvcx5OrxoyY7zLQYB99yPei7xvfbp/Q+hzoWIBORnxeX6Ev5FvsW+Vb52v3bfHt8HlMnpBj8fjEVG5Yxqw6rwVhQTZ3iaELT+lExmiw0lLqHkbXvgVg3yUFBQVLtJ3B5Mkp+7NZlBasqE1TY6Z1CykddXO4+CK6MbzqUnbO7V9T3830xYvCF9L7L9vTdnv4w0ZtZdaDTcgeOTI7fAk90pVFe+pcHn/M9ePlkW/5R/xx4PCeEJvUZHbpEp9s9OzJ8+J5fO9emZkkObnr2LrkZOLx+MfXGZ4MxcfWqXSSNraOeElvOrqmN93Rm67qTet7U7gO9aYkdgvXHZsJ5gfnUrMPcU0R86dadPKq7j6CbZSXpafYO5H685Kdw+gwGnTcUxs8jKYaiRQ8kh0oYd1pw8zwzRljTwiFP5hy/Z0r10xq7lV+6bmrJzWMHlJYWcMfD/+15+ou5SOCvWmXI08cKvhZtzvLP8mMD2dyMbNlco2fuJxaHfmOT+VPgw0OC3XPUIkJCTkqp6vPkzKuLsHjzeE8a3wdz9jpo6/46EYf7SDT6EQ6MUJPGG/3XkEYcNR5DoDb2GD51P7XTtr9x5L/rDn7phF9u5cXD64PHn/m6tmlPfr8+MeVHyz3h7++KStt5vqjnt/gg3WZCJwwXZ5DMkg+OS50eKaRSLp2TTVSu/szUsfWZaQnJ8GqEE/uuLp4j1dk19QRkUH8NM9PvX6IEujgV/20xk+3+Gm7n67z08XubchPC/2xox8922646K4JLs7eKeGcmDsnzQe9hur9p9mOunNK1uzAPhg0ZMyAV19679WFraqenjQvfEn49Jm1NVPG1kxtDPbITNz5+8/hnPyV33cp/3Nrl3L63kNPF7Cn0p+OxhHa9rX8SZJOfKQhdGiWlKnZ8SJVdMvNFuPqsrOJ1+sZX+fNIBnjYMPtzKWv5NLHcunGXHpiLm3NhSiODsulA3M7/Flsm+3L2DHKDmT4aH56GhBdoCQdV6s4EyjOdgZQ+v1j68OphQtm1p5esnHiFx+8/sKQwe+mFPAnX3prgvfiE8p9h+cX/LDn1x+bTr7p9IVOdO/YEAdNgnXykWtDzSQtLSvBNLO65fqyx9b5iJmQxrMys8bWZabHpcvkCXXAFz1y6bRcmpZLRS4tfSOXPpVLT82ly3JpTS5loVxamEt35dIdubQ9l9a7pbm5dIt7uy6XLt4715iPntXhpmNLOQw9zn7hSppRUmxHDxaQoANrZ+wNXOg9qurcJVTMDPefNLx8zJgp4f7TYTH5r+VT/SPC3+y5vUt5eRc2cNLM7nvK9KV4p0u5Xr/+8JED87dgBWeFhng9HnDbGZl5mYWZLJS5KvP8TB7JpOdnrsvcksmTMnMzWzOBF1MTJtalWiFLja2zknQQPbaOp3dEWyS7i/flAuoSzZKlySmlsa24d7R6O2akpylYQHrPvHDKXBhreNu0YaG62rLQ1KnuYH+HzTairLYuNGxanbtWfWCsGe5Y54YqYJieOBMGYJLYANrj6Lo4en4cXRVHa+JoKI5GS+rjaG4c3RFHt7gl58XRYXF0YFyniH7pvuHi30N6uhEHObXDeJSU6L3j+p1rQ/PiFElJyVSZvq7ZXcbWZSelxKnM9MyxdenpVjpPmlBHuLeHj07z0TRNYbB1fPQpHz3VzZpqgJsgbYKsCVhqh4+2+2i9W5rro1vc23U+uthHB/r+l61j23/fO/+2c+6qPHvxvhtnOl3ID7xt9KK4534s8M5dMPc4kklODdXGkxRFVFYXK2lcneXl6ePA4fbIop9m0cYsWplFnSwKt2lZVGTB1LPoU53uf86iO7IoezWLbsmi9Vk0lEVJFr3WvdgnvtkbzCwh+7k6fTxUzM9lSAfDXgju+V3vbH/7jbc+2P5a+L2ymsOHDB0zDnzYnh9/+fOPH/744f3brv/kixvviPqy7PAYkQdzyiC5ZFVoXFeSkJCSKVNkXn46+Oz0pJSEpISxdUk5ZreaOo+ZwbLAazMvyad5+dSbT+Fi8Kv5tCafbsmn7fl0XT5d7N6G8mlh/r957b27LkajMJ/oCQHn3Rt83t7V8urFg4nRy+df/tRjH7565AK1es/OufPo8bTxzhljx9e28+NGfv77r+HdOeUTtrq7dUOX8rBDV/TaMzjdPUewb3kDf4GkkdaQl8TFeZWUkiZwr0zPyNChlF3kjCAZEC9leDMKM2oy6jMWZ7Rn7MjYlWEl8bTksXVpSXHeRO/YusR0DzEiBjWEV2cqMPDYZNwYaUmBDpfgqmMfHkYHUyDW7qrzBty6YP3w4kGDh60beumel1eupGvYV0e3hG87oaTnnqf3bjqwb+Rbdp04CdanNNTVkwjxOk/N7CISPAmw6UKGJymNkOTxdfA8Ru/ZWzsly+4IJOyRZH9wGLXT7XR/skuDQCT0vjMuPHbt8kueeaa4X/DwbmvTVrax+WW9t21r3nNLWbl3cnp30J8b+UIM4Rtgx18TmueRJCkpTaZ1ycpM0wThVdobpoCBEvRh17t/2n47/tQsuiyL1sBeh51dmEW9WXSXu/fb3X0PD3LdMwC367Lo4iw6MGvf836AA2//ffOA3zKUH4675voozyPrs8fhqIf/mklPdE86PWp6+MIJ/hE0nU3pUr7nKDjl7LEu5X/d6Z5xqr8w5b/AfHNIJFSdkqDi4mV2qshJyzJTqSGpJysnPTUZcqe4BAjv83w1PpbkoyvAhZ3nu9a30cdDumi7b6fPDbx11O8G6ql100e0Rmvo8jwfL4fyVaGuQ8sgvteNVvnOh9hchdwwXQfp0k0ESodEE4Ki4mhCcMghA0aAhyQ+avGElCyelgErAeGHFNSbkS5UHM+hOUAQNKnzK7XMUvfSpSeI3CF81xczYhmUjuC12CeI128EjcySzsF7bwMD+1z6a8tZ986koYnh32nfqWFPy43vzgxvmUT7hX/k88vKcl7fllVWlh5+IVycXlaWuScCn5DH0etcG6eFq/m3YGMfHRZ63zATDSg0EzLS0xVNoLnESOTdUsDPZKR0VWYCp5yOrROeOM6ThrmBRSSXbncDqmvdgAqiqXGxgAqeJuXS+VBjp1upI/DqqPpPXUTLSS4dHI1k6mMhzaudIpnzc+kqN56JBjkQ+eS5bTqqrXMr1LuPSO6++WrHz99f3ez/Pieatmbum4V1Cgrd6CKlFE52NLfKiQqqw97eQTsT9v9hjL4cPrOcfrT4g6cXUbsyfE6ofvno8ZOGFPj69zrUHuDjreBmsvf8zjwg0/5qveHCkak/npDZo3KOu0ZrxUw2SZ5HJPGHUhjnkhBlELZ2WhIQBSNk4IyCjrcUeq+k5qfTtTdTX/hCMRMcds/wz9BNJBKNleV5Kb3ICHBUBllGtsGD1FAc65bcix3dLT+V96QFQQJ/XL2ak0jKzIaEWUlDfmG50d9feKkgp2dM7r55z4Wex01v9KyS6O8BwKeRH64iR8T5dt/853bP41je8eOJV6X4DXkMt5M7xRLyiSAkBzASOvuPup2sYKXkKng2FVAO5ZPFeWQB1M+B+9Egp7JSyHIIGQu4ETAFcDigK2ACoBqwHFAJGARtbgUcCX3MRTRD+XHGEjJfPkvS5BTSHWQjoAdc+8UnxA/jbAT4uY9UQd1p+lo/M84B+SzprZ/H6sG9X7SRhfA8D65tQCbMwweyF/Y5G/RfpscMcpS4mawUJLILrmuh73Jom83PgTG3kYlaQnkSlBfDvQ126M9uj+zE6z5gmxK4LnHnDu0Ak6BNCYzzMGiXD/e58IyAXgXSBKTB8z68NymnT5IrQNaIQ4jXtTshdWivSQCmn4M8GZ4F5Z+kls117enaTd/DmHdym8wWjWQKPBsEgLHBHr0K5j+BNLD1ZCPcHwvlY9iNpFSPUcHaAMYB6rXNXXsfAGCvRHcNpkTtHIO2f2egfXvj+uwDGOdluB72fugBa1UAtilw7X0AQJ1ybfv9AWv2s7sGpZH39fc2aPcS3Hv7otHdh9XuGnQGrAHIRC31XFHf/rJR6/sX2UN+SCbq+eh94tpGl/8X6doF9tK/SL13bZQMbDwE5rpV2xrkpyh/jkrSPybVxXAu5pP++mzo/RnrR0Pr1nu1s+RbUPYlBViubdFb2/JvchtJUL1JH32N4xy7v4T9sgTqF+qzp/f//lKfR30m/knqs6rPi5aiICrd+6h9c/9XiedcuXssur7ueddnbn8JczagTYLywPkc5dprJUp9Xq/qtNa2OtOtM1mvtehNhkAfLfIrMkSUgv/4JKL9xkW41zNVGfiGZWSAXhtch0NBVyb/nqQYp5Ms+WxkTsyWrv0Wgf3ayCjVl4yV50Im2Qa+9xO33RHQR0AOJhUimwxA+5CYndRMmPNWkquayQxZAmOciHPG+YlbSD/ASL6eVPJ1ru+dIixyCE8jDPqIE0+T4eBj1rLLyEI2hCRoHxTnIz2sSaQH2HGiBfsCpPa/fSzYC+YS0tvwuWvqnhHci5/E9sD/ukZo033OG/qbcuyLHOA87LPf9NxgXvl6r3cec6yd8ST4q75RbsC9fCA9sXF07RhP9JyK2HnlvshGmGMRzvUbbGd1mjPUi7zVab/vM9f99zesdRkLk9LYvOR2V06ULXB+OfQX26P7jqf6n85dp3G4aw/7zNTzZZ+QDNcPXAz77GIyCP26rluHvjxPj8vdJ+Xkcv4gGQpl7rjlwyQ+prfDn1xORkK/AzvN09UHyBWXw5m4nAzQ5wee2YAy95xE+TOoIQUZzueDvvmku3iUdOe3kkroN1e0QD2Nh8gSve6iB+zZqN1cXoX5EHYs+PvD9XVkq3tfCrrei3JvDKItcrLbphBsrO2SCjZ5x/XPo0F//04ocREkhYATYNylGi5fz49cAGO6h70S+ZWdG35Ur1cHh+8Cvi10ucNELk8XlVEuFznA57AXAdqeIzuwG9dtAtgA5uvO8SpSDDrmwXj/FIngO6LxQg8N9Qns3z/JRIiDJsqBoHc0nPPbSL56EeKPP0DPU4AssN074H8mE0eDXQGxwxUkhS6NfMEskgKIZ/mA50kqX04EayRxLETO4L+Tl2Au1wFOBFwI+MEFJF4aHXHYeeCTz3Njl5QoaDeQOs5bq+OjTvezXZSSO1zE+rudrEZcivV6Ax4BnAJoBQiY/yd6T/FEMpA1QZg6n+TTR2C/jgK7w1i4l1yyPzr0RcelY9PDQZ6AeAWxKlonsh7wVFSXGwPd1Bl8AOmqAddphOx5h5CwDdC/nw3dhp+BsjDI1yFSnwtyByATrvuDPDdaL/I8ADxxuClaz607ay/0TyQXUR5F+FiQOwFXAoKI8qi+8E5sg/q0LrevAYBeUX26ffiCqH4XqDd8594xu+PudB/OAzwU1enqLwF5KUg/YBXWOSyqW7fTOsM3gJwXra+f63m67e7shO+hrAie6/kdg/2/jv2ujELbSpeTr0D2hXvQF+kBeHE/bEY5kU0hWSyF5Oj9wGDvw75OZqmwh66CctjnfKe7v1PoXVAGlof98hus4ae4tx5CX6PjxCDc/w574Hft9/QeUI2RO4zqyB2if+R+VRo5Vn0TeVI1R6azYyNvd+QcmaQn+Kmu6B9nax+tz2+Mx7VfjOUbcj5pQP7uo7laczTmGz3U9WSczjXUUGJobsY4uYc4CnzRfDJIrCG54NNyIY7opstECVnGH438Avfucz4W+A3qiP5ksvZ9kI/1hNihizgL8pILI3v4WmijOXA25BsjwOfWkzFiKhnL22Esus8w+J67In/Ik0g37QNhjn+55bpN72iZ1ileJDk6XjHmEKoltKuBZ0TcQLp24pVG6H+0G4/Mgtj8SbII9IxVnHhEK/D0rxD7g/+VW8kKAfrlN2Qw2F//BYK1YhO5VS6DPPBtMku+BFySRwrBF5bzK8gIrQP6r4nmV2682shnkoGAHMwNNE8vc+3dBrnXCDcnXKfLXIn5iJoLNtfrthDGG+XaqliOaCoiIeGCOpHPYXx+dw23k0NBdnfXfJTbR3TdT4pynvEVERDTzcS19+t28lci9Thi+6FjzaP5UZ7b53Zccx1fbydZ5vMQOwFULsRM70FdrWshOddibjuOeU6Nyw3Xw/ziSZYbF20lgpeQLM0TiH7ieIgZ2/Ber+FVbi7q5qiwL7LcmO8sMtzNL/WzU0g39TjETgABuasaBnIwKQY+sJUPrieR9Fg+JcZAjnG9+6za5UA3tyLcXZOhJEvVu7qYO46o/jQtPRTs/RORqivpCzFolpkEe3ycGxfE63HA3KtUISkBew6AOSV6PiJVxh7gZ8i5eUnkY+ibgM1JRxxzOuy/t+AepdWNTDWmk0p1KekpNpJ861NynFpBJsT0xmJzdg9JBd9yDeCKvf53D1z/VQAodOMsGC/YvwfYwI9xdTbk3D1hvv302uv5y2dAz9UQN8L66zXQe0Cvg15/Pff9pboO1j0O7IP9G7PcvVRsfgNxyRbo700yVFS5+VAj5n95eq0wbiKdZC9tL7WLHCG2u/szS69fJ9lfx4lGHMQDp5D8mNR7PDZW+TmM4THQCftU75XYmDrmjn3FzpKbA/5D/N2Rr0Juo/3o/vYAOUHHOvvr+Me4FPa83nf6jLj79O8yOk9cB31W9H7tWBe0T4ccRSbouFK9BjF8iBTA/qwEHYXiCfCzG8lg4zjYk0NIlo7/VR1Jh3HMgbhrhXwQ8sof3PGPgnkEOtlK+41Jsbwxymv6HVpkEsixgGFwDbs1Mgr22NOAW6N/Jyni3fseTZeFoa2OJyKV0T4iIwBjALOxzaQowqjDfTYi2n7PWcj51+Be/hEAnjiyDuBDTMc+1kXh8q2+3gzx0Wn6uTiJfhJ7Dmt8TMf1FfoaYnA/rOF7wJ03Ape+A7a4gsxl4HfYYHKkeJisEdvIFJYF8TvsU/4VxGGPRr4FTlgH8fpA5gFOhThTnENmizMgt+kJPnwq7PECaFtEisA/L3H39+3gnz6CPaT7+B3qQX/0HTKUe6BuL+KV69w9X679HsTTNeIakAC+DQD7C8bdjQ8EjvwS7rfDmDv7vUIyC9bqcIRXv2+AnKmy433PYOAN8G2uf9N+cRac6XFktLwXuG+cm8u47+Hc928zIBe4lyyGOYxx/d9nwJFXuX6yAHiR6L3Bj4SyZyK/8gKS4WIxIBfxAOwj4Ez6GenJzoW6r0FZf5IhLoa5nw55wRswj6vIVN6DpLMvSCI/F5BOCD8Z+n4i8r0b62jcDWOZSrpDDu5x4xyIfwC5TEJ8KqHtTJIM8VBXtgn8h45/lkFdHRvpuGgUOcTFlRgT6XjpeFi3nSTVjY8uIn1BRx8WivzEpkEf70H/1dF4280VdH1dL1ZnNNTHOorpHCyyWZ814IJdwPEpcA2IPKbzY8idBPggE5595uZAxI2zukJ8MVY9SQzI17Lc2EX7WvCNkD/58P3oRPd96vaO96l736FGOc19d8pvi1wgogG5if2Xu3kmvpON5ZJurFfq5nU2+xza6PcL64HD7ibdXBulki4wr+7alvT8yG4NVk4sHU+CHTz0SpILshcghb4Z2Qmyp2ufZth/O0lf15ZXRB6F+n3ZJZArge35NJIH+QqsS+RZsHuqa8d3yQCQaewYsHMTkWwo5D0aZwMOI342Vf+eZPiSKCI3gjy/Uyy/HyIDo3F1+NxO7wG6a/v8TXZ6H+m+R/hv8n98T6l5Uq/TP7yX/EcJa3co5Omv43tJ/k/19n0nGXkN5dcov3HjLdgX+8t/fEeJ8r+9J+ngf5T/9L7yf31veaD3lweU//t7zEz0U66M8dJ/k3/jyWf3fRe4v3TPXnRcCt/jlOv3ocrrxqf/9E4cZOSHf3/+P8j/aQ9G3vin53979/2vax75+V+fL/rvcv816njv+l9k53fQB5Ju7vcvwHd2aWpe5DsN+QfkaX+AfFbna5EP3FzxAFAthGoYX+8LN6f8FxhjIl8bYwg1tx4Y7ns4F5HXowB/5yLyg4YojHwNHE3lpgPjgN/RAAwa2WlQ2MvHgx6A8UUUbs76L1DfQ/1pe+G+7/sXGJnQL8C8DJGxL2J2j9kxZpfYvDvGjPpj/f6fruP/6br8j/Mm/23e/zb2zgC/8YJ+34JSv2MTBxo35EFUvQG6bwA8DtelLqekIQTYVO8pLVOjiHyj0ZHDnwFjuwnqdGrzt30wgqx0EVsT/X0PwFgIOo8C2/yq20d+j4Lcd0D7zIOxnRT5zrgE5FWAZjJd1wW8hj6YxCRbH/2enE6OlrnXkG2S9bFcIPImALg+8pb+/xaA//lRw0Tg98yx97DL9btY6GeOiH5fPhhlUINtJeNB5+3Y1+EgU2KA8r76va6YT14CzIm9C4UY/k797pNOCa/R3+d0auNFJOt7NpdkAAKAICCXPUcyY+/f3PhSv4tNIV1lFzdnbcTvDvyACcjDXY0tJM261/2OyCc+IKeIbPf77WxYZ4/mPXOX+05CAdd68Lsx/b1rP90XzOcI6GcQJyTO9JDe+vts9/ubnmCDraTWqIVYYhs5Cb+vHopyBKAacKqO+0xCrxeEeveXGvxnyAs+I151CamV95Dp+PsKU0UjxB73kFJjG71MbqEZrChyMZT1c78r1u/AtdTYSi5377ex7mIblXJ95Fe5np0TRey6s9wf9J3oMy01Oj/7/7X8fwHEDPuAbQM5z73eBnt1GzkWoNibZKGG3svGN/QawNqYBJuZUOcW8TjkeNvIXYBDNKB+m1lAN5nz6WvGZAr2p+8CxosQGSxDZIjYAnZKd99nPaVc+8M5nOLmcn3w9zcSdDzlxhi3k7wDxIJuTAJrNRLWjJibiU9tgjxtJ+y//sD5H0KuECYjoW0A9m4hYDTGyp9Cn8dqwLOzY4jF2fhdwUYWIdkwlikaoC9JA8pv078bgec1GWW2ljoH1u+5de6qc103b8Z8uXNe7OaYkOuKE8lUnffuA2gTw99z7sjHbHDkxWi+HXlnn3xb59qxPDuWYx8gv9Z5u+5Xt9N1pF+/k/hLv2vfA/IvQmL/lxNY+9kw/9sjr8F8rwa0Q1FtJ6zdC/09xx6wxV+16PI0egO0/0jqVBfb6voaHXX3w18RwBpCdn8D8hWQN0fL9yyEdqcCXoDyP+B+JWAuXF8D0g/y0P370nFe9HuNCLiM8KsgJX538rA4gqzbD4cDJqDUqOZeyGmOAL8axThAf8AIKNeyB6AnojdgIJTrax8gE1CMKITyQ7D9mE6YCeVjDjCOGnxeHauL9QYCSgHDYoDyYagj2ElfMZQH99MV66d5/7479b//OKYAjgDUoZwC9aaDHAQoQejrQVCu5XBAVWdAuZYnIUoRh0K5lmv3xz+MY/95jIN62paFneas7e1DOw/E9YitTQ9clxG4fuNia4rrWN1pzd31x3XfZxywZwbq8wDyWUQs9348urfCz+rvmf9bXAcxi/5umu2Vkd0gE0F+CTLuv8Wv2E4jU+Nvz3Vu09uNZ3qD1N/BfQr7visAjnYYznkYvGWEohTR7+XCb+N3n+AjIzUunwIPRue356dOc/2wEx4G31PhQvsi7WfAn8Sg/ZL2Y1AvOzwr3PH/9fk//Cn8vwtq7odd+4Idtxf665fOEDV7ISsBP0dh1ERhvvTfYb0ahQdim7gxhMTH70WCxua9SBwRRRLo8nYhBFxuFJujSBlESGqfvUgDTsso/H8ZR/9/ELcexEEcxEEcxEEcxEEcxEEcxEEcxEEcxEEcxEEcxEEcxEEcxEEcxEEcxEEcxEEcxEEcxEEcxEEcxP8lUEI8iXQCmUTOJ4ow4iUD9b9syI5kWYTDUxb95cBIPnnyQL806EkkxK3FiSASejCISSziIXEkniSQRJIEPSaTFJJK0kg6ySCZpAvJItkkh3QlPtKN5JI8kk+6Ez/pQXqSXqQ36UMOIX1JAelH+pMBMJpCUkQCRP+zX0FSTErIIFJKDiWDyRAylBxGhpEQKSPlpIJUkipSTYaTEWQkGUVGkzHkcDKWjCM1ZDyZQCbCDCeTKeQIUkvqyFQyDWY5g8wks0g9aSA3kFPJaeQRcgn5kpxOziVryNXkNnIjWU0ZOYVcSDkV5BwqyZlUkQ/df2/ydvIL+Zn8Sq4nd5DnybPkTjKbzAEbNpIXSRN5jrxAXiEvka3kZfIVmUteJ6+S18hGMo/sImvJm+QNso00k2/Id+QsciRpIfPJQrKALCLrSCtZQhaTpaSNLCfLyApyFPmaHE1WkmPIseR4chzZTK4jJ5ITyCpyEvmWfE8epCa1qIfG0XiaQPaQME2kSdRLk/UvotIUmkrTaDrNoJm0C82i2TSHdqU+2o3m0jyaT34nf9Du1E970J60F+1N+9BDaF9aQPvR/nQAHUgLaRH5k7xFA9SmDg3SYlpCB9FSeigdTIfQoVT/+wEh8jH5hJbRclpBK2kVrabD6Qg6ko6io+kYejgdS8eRdrKJ1tDxdAKdSCfRyXQKPYLW0jqym/xFPiWf0al0Gp1OZ9CZdBatpw10Np1DG2kTnUvn0WbaQo+k8+kCupAuoq3kIbqYLqFLaRv5nHxBl9HldAU9ih5Nj6Er6bH0OHo8PYGeSFfRk+jJ9BR6Kj2Nnk5upmfQM+lZdDVdQ8+m59Bz6Xn0fLqWXkAvpBfRi+kl9FJ6Gb2cXkGvpFfRq+k19Fq6jl5Hr6c30BvpTfRmegu9ld5Gb6fr6QZ6B72TbqTtdBO9i95N76H30vvo/XQzfYA+SB+iD9NH6KP0MbqFPk6foE/Sp+jT9Bn6LH2OPk9foC/Sl+hW+jJ9hb5KX6P/oa/TN+g2+iZ9i75N36Hv0vfo+/QD+iHdTnfQj+jH9BP6Kf2Mfk6/oF/Sr+jX9Bv6Lf2Ofk930l30B/oj/Yn+TH+hv9Lf6O/0D/on3U3/ontomEYYYZQxxplgkilmMJNZzMPimP5XxBJZEvOyZJbCUlkaS2cZLJN1YVksm+WwrszHurFclsfyWXfmZz1YT9aL9WZ92CGsLytg/Vh/NoANZIWsiAWYzRwWZMWshA1ipexQNpgNYUPZYWwYC7EyVs4qWCWrYtVsOBvBRrJRbDQbww5nY9k4VsPGswlsIpvEJrMp7AhWy+rYVDaNTWcz2Ew2i9WzBjabzWGNrInNZfNYM2sBrzSfLWAL2SLWyhazJWwpa2PL2HK2gh3FjmbHsJXsWHYcO56dwE5kq9hJ7GR2CjuVncZOZ2ewM9lZbDVbw85m57Bz2XnsfLaWXcAuZBexi9kl7FJ2GbucXcGuZFexq9k17Fq2jl3Hrmc3sBvZTexmdgu7ld3Gbmfr2QZ2B7uTbWTtbBO7i93N7mH3svvY/Wwze4C8TT5iD7KH2MPsEfYoe4xtYY+zJ9iT7Cn2NHuGPcueY8+T98j75AOyg7xDtrMX2IvsJbaVvcxeYa+y19h/2OvsDbaNvcneYm+zd9i77D32PvuAfci2sx3sI/Yx+4R9yj5jn7Mv2JfsK/Y1+4Z9y75j37OdbBf7gf3IfmI/s1/Yr+w39jv7g/3JdrO/2B4WZhFOOOWMcy645Iob3OQW9/A4Hs8TeCJP4l6ezFN4Kk/j6TyDZ/IuPItn8xzelft4N57L83g+7879vAfvyXvx3rwPP4T35QW8H+/PB/CBvJAX8QC3ucODvJiX8EG8lB/KB/MhfCg/jA/jIV7Gy3kFr+RVvJoP5yP4SD6Kj+Zj+OF8LB/Ha/h4PoFP5JP4ZD6FH8FreR2fyqfx6XwGn8ln8XrewGfzObyRN/G5fB5v5i38SD6fL+AL+SLeSm7li/kSvpS38WV8OV/Bj+JH82P4Sn4sP44fz0/gJ/JV/CR+MrmWn8JP5afx0/kZ/Ex+Fl/N1/Cz+Tn8XH4eP5+v5RfwC/lF5FJ+Mb+EX0qu5Jfxy/kV/Ep+Fb+aX8Ov5ev4dfx6fgO/kd/Eb+a38Fv5bfx2vp5v4HfwO/lG3s438bv43fwefi+/j9/PN/MH+IP8If4wf4Q/yh/jW/jj/An+JH+KP82f4c/y5/jz/AX+In+Jb+Uv81f4q/w1/h/+On+Db+Nv8rf42/wd/i5/j7/PP+Af8u18B/+If8w/4Z/yz/jn/Av+Jf+Kf82/4d/y7/j3fCffxX/gP/Kf+M/8F/4r/43/zv/gf/Ld/C++h4d5RBBBBRNcCCGFEoYwhSU8Ik7EiwSRKJKEVySLFJEq0kS6yBCZoovIEtkiR3QVPtFN5Io8kS+6C7/oIXqKXqK36CMOEX1Fgegn+osBYqAoFEUiIGzhiKAoFiVikCgVh4rBYogYKg4Tw0RIlIlyUSEqRZWoFsPFCDFSjBKjxRhxuBgrxokaMV5MEBPFJDFZTBFHiFpRJ6aKaWK6mCFmilmiXjSI2WKOaBRNYq6YJ5pFizhSzBcLxEKxSLSKxWKJWCraxDKxXKwQR4mjxTFipThWHCeOFyeIE8UqcZI4WZwiThWnidPFGeJMcZZYLdaIs8U54lxxnjhfrBUXiAvFReJicYm4VFwmLhdXiCvFVeJqcY24VqwT14nrxQ3iRnGTuFncIm4Vt4nbxXqxQdwh7hQbRbvYJO4Sd4t7xL3iPnG/2CweEA+Kh8TD4hHxqHhMbBGPiyfEk+Ip8bR4RjwrnhPPixfEi+IlsVW8LF4Rr4rXxH/E6+INsU28Kd4Sb4t3xLviPfG++EB8KLaLHeIj8bH4RHwqPhOfiy/El+Ir8bX4RnwrvhPfi51il/hB/Ch+Ej+LX8Sv4jfxu/hD/Cl2i7/EHhEWEUkklUxyKaSUShrSlJb0yDgZLxNkokySXpksU2SqTJPpMkNmyi4yS2bLHNlV+mQ3mSvzZL7sLv2yh+wpe8neso88RPaVBbKf7C8HyIGyUBbJgLSlI4OyWJbIQbJUHioHyyFyqDxMDpMhWSbLZYWslFWyWg6XI+RIOUqOlmPk4XKsHCdr5Hg5QU6Uk+RkOUUeIWtlnZwqp8npcoacKWfJetkgZ8s5slE2yblynmyWLfJIOV8ukAvlItkqF8slcqlsk8vkcrlCHiWPlsfIlfJYeZw8Xp4gT5Sr5EnyZHmKPFWeJk+XZ8gz5VlytVwjz5bnyHPlefJ8uVZeIC+UF8mL5SXyUnmZvFxeIa+UV8mr5TXyWrlOXievlzfIG+VN8mZ5i7xV3iZvl+vlBnmHvFNulO1yk7xL3i3vkffK++T9crN8QD4oH5IPy0fko/IxuUU+Lp+QT8qn5NPyGfmsfE4+L1+QL8qX5Fb5snxFvipfk/+Rr8s35Db5pnxLvi3fke/K9+T78gP5odwud8iP5MfyE/mp/Ex+Lr+QX8qv5NfyG/mt/E5+L3fKXfIH+aP8Sf4sf5G/yt/k7/IP+afcLf+Se2RYRhRRVDHFlVBSKWUoU1nKo+JUvEpQiSpJeVWySlGpKk2lqwyVqbqoLJWtclRX5VPdVK7KU/mqu/KrHqqn6qV6qz7qENVXFah+qr8aoAaqQlWkAspWjgqqYlWiBqlSdagarIaooeowNUyFVJkqVxWqUlWpajVcjVAj1Sg1Wo1Rh6uxapyqUePVBDVRTVKT1RR1hKpVdWqqmqamqxlqppql6lWDmq3mqEbVpOaqeapZtagj1Xy1QC1Ui1SrWqyWqKWqTS1Ty9UKdZQ6Wh2jVqpj1XHqeHWCOlGtUiepk9Up6lR1mjpdnaHOVGep1WqNOludo85V56nz1Vp1gbpQXaQuVpeoS9Vl6nJ1hbpSXaWuVteoa9U6dZ26Xt2gblQ3qZvVLepWdZu6Xa1XG9Qd6k61UbWrTeoudbe6R92r7lP3q83qAfWgekg9rB5Rj6rH1Bb1uHpCPameUk+rZ9Sz6jn1vHpBvaheUlvVy+oV9ap6Tf1Hva7eUNvUm+ot9bZ6R72r3lPvqw/Uh2q72qE+Uh+rT9Sn6jP1ufpCfam+Ul+rb9S36jv1vdqpdqkf1I/qJ/Wz+kX9qn5Tv6s/1J9qt/pL7VFhFTGIQQ1mcEMY0lCGYZiGZXiMOCPeSDASjSTDayQbKUaqkWakGxlGptHFyDKyjRyjq+Ezuhm5Rp6Rb3Q3/EYPo6fRy+ht9DEOMfoaBUY/o78xwBhoFBpFRsCwDccIGsVGiTHIKDUONQYbQ4yhxmHGMCNklBnlRoVRaVQZ1cZwY4Qx0hhljDbGGIcbY41xRo0x3phgTDQmGZONKcYRRq1RZ0w1phnTjRnGTGOWUW80GLONOUaj0WTMNeYZzUaLcaQx31hgLDQWGa3GYmOJsdRoM5YZy40VxlHG0cYxxkrjWOM443jjBONEY5VxknGycYpxqnGacbpxhnGmcZax2lhjnG2cY5xrnGecb6w1LjAuNC4yLjYuMS41LjMuN64wrjSuMq42rjGuNdYZ1xnXGzcYNxo3GTcbtxi3GrcZtxvrjQ3GHcadxkaj3dhk3GXcbdxj3GvcZ9xvbDYeMB40HjIeNh4xHjUeM7YYjxtPGE8aTxlPG88YzxrPGc8bLxgvGi8ZW42XjVeMV43XjP8YrxtvGNuMN423jLeNd4x3jfeM940PjA+N7cYO4yPjY+MT41PjM+Nz4wvjS+Mr42vjG+Nb4zvje2Onscv4wfjR+Mn42fjF+NX4zfjd+MP409ht/GXsMcKG/quKd5G7TWoych+5nzxlcnIPuZc8bQpyMnmCnEHWm9JUpmGapkWeMT1mnBlPHiWPmQlmInnYTDK9ZrKZYqaaaWa6mWFmml3MLDPbzDG7mj6zm5lr5pn5Znfym+k3e5g9zV5mb7OPeYjZ1yww+5n9zQHmQLPQLDIDpm06ZtAsNkvMQWYpOds81BxsDjGHmoeZw8yQWWaWmxVmpVllVpvDzRHmSHOUOZpcZo4hV5DLyU7yJLmJXGAebo4lV5FbyHnmOHIRudisMcebE8yJ5iRzsjnFPMKsNevMqeY0c7o5w5xpzjLrzQZztjnHbDSbzLnmPLPZbDGPNOebC8yF5iKz1VxsLjGXmm3mMnO5ucI8yjzaPMZcaR5rHmceb55gnmiuMk8yTzZPMU81TzNPN88wzzTPMleba8yzyQPmOea55nnm+eZa8wLzQvMi82LzEvNS8zLzcvMK80rzKvNq8xrzWnOdeZ15vXmDeaN5k3mzeYt5q3mbebu53txg3mHeaW40281N5l3m3eY95r3mfeb95mbzAfNB8yHzYfMR81HzMXOL+bj5hPmk+ZT5tPmM+az5nPm8+YL5ovmSudV82XzFfNV8zfyP+br5hrnNfNN8y3zbfMd813zPfN/8wPzQ3G7uMD8yPzY/MT81PzM/N78wvzS/Mr82vzG/Nb8zvzd3mrvMH8wfzZ/Mn81fzF/N38zfzT/MP83d5l/mHjNsRixiUYtZ3BKWtJRlWKZlWR4rzoq3EqxEK8nyWslWipVqpVnpVoaVaXWxsqxsK8fqavmsblaulWflW90tv9XD6mn1snpbfaxDrL5WgdXP6m8NsAZahVaRFbBsy7GCVrFVYg2ySq1DrcHWEGuodZg1zApZZVa5VWFVWlVWtTXcGmGNtEZZo60x1uHWWGucVWONtyZYE61J1mRrinWEVWvVWVOtadZ0a4Y105pl1VsN1mxrjtVoNVlzrXlWs9ViHWnNtxZYC61FVqu12FpiLbXarGXWcmuFdZR1tHWMtdI61jrOOt46wTrRWmWdZJ1snWKdap1mnW6dYZ1pnWWtttZYZ1vnWOda51nnW2utC6wLrYusi61LrEuty6zLrSusK62rrKuta6xrrXXWddb11g3WjdZN1s3WLdat1m3W7dZ6a4N1h3WntdFqtzZZd1l3W/dY91r3Wfdbm60HrAeth6yHrUesR63HrC3W49YT1pPWU9bT1jPWs9Zz1vPWC9aL1kvWVutl6xXrVes16z/W69Yb1jbrTest623rHetd6z3rfesD60Nru7XD+sj62PrE+tT6zPrc+sL60vrK+tr6xvrW+s763tpp7bJ+sH60frJ+tn6xfrV+s363/rD+tHZbf1l7rLAV8RAP9TAP9wiP9CiP4TE9lsfjifPEexI8iZ4kj9eT7EnxpHrSPOmeDGP5opbCwrLqqCwPoLRRBlGWoCw1yhY2zFnaushoiEpVNntp04om1eAKo6x1XuuipvlGQ1TGVcxpWTpn+cK5C5qOjpuz99rtraiwDGW5qpzToDtrdEW0tKgQZZFRhTqbUGdVVGdTVGe0VjHKEqMKx9AUlaoq2neTK+KGdxrRvP1HFECdgSKUAZR23IhO7Zr3XosRsxuWimb4UCOXtSxobFItrjBG4phbcMwjo2NuiY55JI6xJSrZyFGs5ci4UZ10HLn/2GycoV0SP3/e0qamRQsaFjW2zFFjGuYsX9akFrgCq5SjrFBjopNf4AoxprF1mVgAH2pstNWiTq2cIMpiNTbaalHUZIsaFre2LVvauri5iVctmsebFs0zxuH0WnF646LTa+20JEE0ZrBITYhqW9pJWxCnEyxRE6LalkbFxGjdNlfETexkkrb9TVKMy1Nsq0nRxsui85ykF2WZXpTJ0UVZHl2UyTjq5TjqydFRL3eFnLy0ZdE8uVx/RvstwRmUFBmTccGW48Y+otO4jup0Xdfp+pi912pqdFYrO1mgBFeppEIuaF00ry16Nwh1DsItOAjnOMhG6aDE1RqEdhxUgnIQylKUeMgGobZBFSgrUVahjLqAolLUX4r6S1FvKeotRb2lqLcU9Zai3lLUW4p6S1FvKeotRb2lqLe0Wo5rbl0KaaH+jJaV4ZzLUHcZ6i5D3WWouwx1l6HuMtRdhrrLUHcZ6i5D3WVVcrKrc/leneU4X3SBRegCi8pRN7rConLUjS6xqBx1l6PuctRdjrrLUXc56i7HeZejvSvQ3hWovwL1V6D+CtRfgforUH8F6q9A/RWovwL1V6D+CtRfgforUH8F6q9E/ZWovxL1V6L+StRfiforUX8l6q9E/ZWovxL1V6L+StRfiforUX8l6q9C/VWovwr1V6H+KtRfhfqrUH8V6q9C/VWovwr1V6H+KtRfhfqrUH8V6q9G/dWovxr1V6P+atRfjfqrUX816q9G/dWlnjLtOdwD7mnouDTKqqKyoSnq0ca1LWhoa45et+69dnsJFBaiLEIZQGmjdFAGURajLEE5CGUpyjKU5SgrUFairEIZtUYASTdQhPqLUH8R6i9C/UWoH2k3UFQSP3FO68KFDQ1z5jQtWhbf1ukGa+BIinAkRTiSIhxJEY6kCEeCVBxAKg4gFQcCOJIAjiSAIwngSAJoiQBaIoCWCKD+AOoPoP4A6g+g/gDqt1G/jfpt1G+jfhv126gf6Tlgo34b9duo30b9yM0BG/XbqN9G/Tbqd1C/g/od1O+gfgf1I2sHHNTvoH4H9Tuo30H9Dup3UL+D+h3U76B+ZO9AEPUHUX8Q9QdRfxD1I58Hgqg/iPqDqD+I+oOoP4j6g6g/iPqDqL8Y9RejfuT6QDHqL0b9xai/GPUXo/5i1F+M+otRfzHqL0b9xai/GPUXo37k/kAJ6i9B/SWovwT1l6D+EtRfgvpLUH8J6i9B/cj6gRLUX4L6S1B/CerHOCCAcUAA44AAxgEBjAMCGAcEMA4IYBwQwDgggHFAAOOAAMYBAYwDAhgHBDAOCGAcEMA4IIBxQKAU9WM8EMB4IIDxQADjgQDGAwGMBwIYDwQwHghgPBDAeCCA8UAA44FAKeovQ/1lqB9jggDGBAGMCQIYEwQwJghgTBDAmCCAMUEAY4IAxgQBjAkCGBMEylA/pkKBctSPcUEA44IAxgUBjAsCGBcEMC4IYFwQwLgggHFBAOOCAMYFAYwLAhgXBDAuCGBcEMC4IIBxQQDjggDGBQGMCwIYFwQwDghgHBDAOCCAcUAA44AAxgEBjAMCGAcEMA4IYBwQwDgggHFAAOOAAMYBAYwDAhgHBJDXA8jrAeT1APJ6AHk9gLweQF4PIK8HkNcDyOsB5PUA8noAeT2AvB5AXg8grweQ1wPI6wHk9QDyegB5PYC8HkBeDyCvB5DXA8jrAeT1QDXqr0b91ai/GvVXo/5q1F9dbc1b2rCiCQhwtuUyu75yn9mFAcvNQzqVOCiDKItRlqAclNDc2jq/YXbris6tylCWo6xAWYmyCmXUFjayuo2sbiOr28jqNrK6jaxuI6vbRTiKokEoS1GifuRyG7ncRi63kctt5HIbudxGLrcDgXjIQWc3LWg9au+kkNBtJHQbCd1GQreR0G0kdBsJ3UZCt5HQbSR0GwndRkK3kdBtJHQbCd1GQreR0G0kdBsJ3UZCt5HQbSR0GwndRkK3kdBtJHQbCd1GQreR0G0kdBsJ3UZCt5HQbSR0GwndRkK3kdBtJHQbCd1GQreR0G0kdBsJ3UZCt5HQbSR0GwndRkK3kdBtJHQbCd1GQreR0G0kdBsJ3UZCt5HQbSR0GwndRkK3kdBtJHQbCd1GQreR0G0kdBsJ3UZCt5HQbSR0GwndRkK3kdBtJHQbCd1GQreRsG0kbBsJ2UZCtpGQ7ZJKuax1UWtbQmNL09KmtpY2985TtmBxc4N7aTUsal3WtKCppSG+anFbC+TubrFZtQyfj2zFq/hxC1v0e4bozeROlT3jFjbNi1ZKboHq++iSri5R3rSsQQ5vgDjaQD1iKhRx0CMnNcOV0Irk6IbFixvUmIaFsxsb2OHL2djlrLbFQM2spoVPaG6VE1vmLWzgkxqWGzgKXtPcwisANW0t8SM7jSAJK8TuPQ0dE49v6jzdpth0W2LTTVu+b9PoZNz2YraezDw9GdnYtGBZg4F9iZV6SvrhMndKujM5353SguiUFi1nR7cYrdH58KXNrapNT6ZIuoIvgzmhXr4Y5jMHALeyVRs4vrNtk/YbXnxr59VZ3nl1WjtWJ7onkBxtJEcbydFGcrSRHG0kRxvJ0UZytDFJtjFJtjFJtjFJtjFJtjFJtpFMbSRTG8nURjK1kUxtJFMbydRGMrWRTG0kUxvJ1EYytZFMbSRTG8nURjK1kUxtJFMbydRGMrWRTG0kUxvJ1EYytZFMbSRTG8nURjK1kUxtJFMbydRGMrWRTO3qqH4H02IH02IH02IH02IHadRBGnWQRh2kUQfTYgfTYgcJ1EECdZBAHSRQBwnUQQJ1kEAdJFAHCdRBAnWQQB0kUAcJ1EECdZBAHSRQBwnUQQJ1kEAdJFAHCdRBAnWQQB0kUAeTYQeTYQe500HudJA7HeROB7nTQe50kDsd5E4HudNB7nSQOx3kTge500HudJA7HeROB7nTQe50kDsd5E4HudNB7nSQOx3kTge500HudJA7HeROB7nTQe50kDsd5E4HudNB7nSQOx3kTge500HudJA7HeROB7nTQe50kDsd5E4HudNB7nSQOx3kTge500HudJA7HeROB7nTQe50kDsd5E4HudNB7nSQOx3kTge500HudJA7HeROB7nTQe50kDsd5E4HudNB7nSQOx3kTge500HudJA7HeROB5NhB5NhB5NhB5NhB7nVQW51MBl2MBl2MBl2MBl2kHsd5F4HudfBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBZNjBl+QOviR3MDl2MDl2MDl2MDl2MDl2MDl2MDl2MDl2kP8d5H8H+d9B/neQ/x3kfwf530H+d5DvHeR7B/neQb53kO8d5HsH+d5BvneQ7x3kewf53kG+d5DvHeR7B/neQb53kO8d5HsH+d5BvneQ7x3kewf53kG+d5DvHeR7B/neQb53kO8d5HsH+d5BvneQ7x3kewf53kG+d5DvHeT7IPJ9EPk+iHwfRL4PIt8Hke+DyPdB5Psg8n0Q+T6IfB9Evg8i3weR74PI90Hk+yDyfRD5Poh8H0S+DyJ/B5G/g8jfQeTvIPqJIPqJIPqJIPqJIPqJIPqJIPqJIPqJIPqJIPqJIPqJIPqJYGlMD44b/UQQ/UQQ/UQQ/UQQ/UQQ/UQQ/UQQ/UQQ/UQQ/UQQ/UQQ/UQQ/UQQ/UQQ/UQQ/USwrFq2NTetaPBAptAwt61pXuuC6OVi+GiOcy+XNCxsWNYmm1uWtiyRy9ogBpduRenWUbHHrRD2RzstL1NLls9evqxNNTbMa2prlgubljXNkwsbljTMFUsb5jZBy7amJUZbc8si/ZV2myvMtlbQ2rZ8ibV88eKmpbN00YLWo5qWwkW034riuKiyJaB4kWhY0DSXQ3oi57UsbPp/2jiXHjeu7ACzmv1iP9RyjBiTzBh0EGSTTiRVkawHEkcii+dIYyOSE6fhsWy4xe4uqQmxyRYfrfFsZCQQMIvMWAkwiRcBZjlaBJEMO5BXseG/4O0oHuQPJPuBodyq+thdvEMB7HPPrVvnu1XF5lePpnpLByYfLxwm5ZPOydJPOh92+2VzYVIem9eHg4PV291+p3e3c7tsXktmqgldR8lR2bzypD/pl81reWSW3z1cTIusZAuOk4XjZC1rjkfmwmQp+1m+NzAbZLZwMd0Uc0VzsmzgJ3kw0GXzSsOd9LrlsGLC6NDUzHaT285/V0x0iR6xRqwTG0SfGBBDYkRsElvEmNgmClHz6MJ34bvwXfgufBe+C9+F78J34bvwXfgufBe+C9+F78H34HvwPfgefA++B9+D78H34HvwPfgefA++B9+DX4Nfg1+DX4Nfg1+DX4Nfg1+DX4Nfg1+DX4Nfg1+DX4Nfh1+HX4dfh1+HX4dfh1+HX4dfh1+HX4dfh1+HX4dfh9+A34DfgN+A34DfgN+A34DfgN+A34DfgN+A34DfgN+A78P34fvwffg+fB++D9+H78P34fvwffg+fB++D9+HH8AP4AfwA/gB/AB+AD+AH8AP4AfwA/gB/AB+AD+AH8IP4YfwQ/gh/BB+CD+EH8IP4YfwQ/gh/BB+CD+EH8GP4EfwI/gR/Ah+BD+CH8GP4EfwI/gR/Ah+BD+C34TfhN+E34TfhN+E34TfhN+E34TfhN+E34TfhN+E34Tfgt+C34Lfgt+C34Lfgt+C34Lfgt+C34Lfgt+C34Lfgh/Dj+HH8GP4MfwYfgw/hh/Dj+HH8BVOfk7mCp4RPCN4RvCM4BnBM4JnBM8InhE8I3hG8IzgGcEzgmcEzwieETwjeEbwjOAZwTOCZwTPCJ4RPCN4RvCM4BnBM4JnBM8InhE8I3hG8IzgGcEzgmcEzwieETwjeEbwjOAZwTOCZwTPCJ4RPCN4RvCM4BnBM4JnBM8InhE8I3hG8IzgGcEzgmcEzwieETwjeEbwjOAZwTOCZwTPCJ4RPCN4RvCM4BnBM4JnBM8InhE8I3hG8IzgGcEzgmcEzwieETwjeEbwjOAZwTOCZwTPCJ4RPCN4RvCM4BnBM4JnBM8InhE8I3hG8IzgGcEzgmcEzwieETwjeEbwjOAZwTOCZwTPCJ4RPCN4RvCM4BnBM4JnJNDld7Inmsv38/BO/qeM97NQeWd6O71yf9rK18MzgmcEzwieETwjeEbwjOAZwTOCZwTPCJ4RPCN4RvCM4BnBM4JnBM8InhE8I3hG8IrgE8Engk8Enwg+EXwi+ETwieATwSeCTwSfCD4RfCLNKZftxCeCTwSfCD4RfCL4RPCJ4BPBJ4JPBJ8IPhF8IvhE8IngE8Engk8Enwg+EXwi+ETwieATwSeCTwSfSAw/hh/Dj+HH8Nvw2/Db8Nvw2/Db8Nvw2/Db8Nvw2/Db8Nvw2/Db8NvwBb7AF/gCX+ALfIEv8AW+wBf4Al/gC3yBL/AVvrrL7+a/cB9mgV7oCl2hK3SFnt95cRVrK9ZWrK1YW7G2Ym3F2oq1FWvrpWm9JrFFjIltohDzrVGsrVhbsbZibcXairUVSyuWViytWFqxtGJpxcqKlRUrK1ZWrKxYWbGyYmXFyoqVFSsrVlasrN6Ux/ZhZcXKipUVKytWVqysWFmxsmJlxcqKlRUrK1ZWrKxYWbGyYmXFyoqVFSsrVlasrFhZsbBiYcXCioUVCysWVqyrWFexrmJdxbqKdRXrKtZVbKtYVhvTuswfqypWVayqWFWxqmJVxaqKVRWrKlZVrKpYVbGqYlXFqopVFasqVlWsqlhVsapiVcWqilUVqypWVayqWFWxqmJV5WpNuVpTrtaUqzXlak25WlMsqlhUsahiUcWiikUVi2o45bG9WFSxqGJRxaKKRRWLKhZVLKpYVLGoYlHFoopFlas15WpNsapytabYVbGrYlfFropdFbsqdlXsqthVsatiV8Wuil0Vuyp2Veyq2FWxq2JXxa6KXRWrKlZVrKpYVbGqYlXFqopVFasqVlWsqlhVsapiVcWqik0Vmyo2VWyq2FSxqWJTxaaKTRWbKjZVbKrYVLGpYk/Fnoo9FXsq9lTsqVhTsaZiTcWaijUVayrWVKypWFOxpmJNxZqKNRVrKtZUrKlYU7GmYk1VeAoPTyp+VPyo+FGnflQ4CkfhKJz8Kti7lHvURJfoEWvEOrFB9IkBMSRGxCaxRYyJbeKUq3l04bmNzUn/IBmO9gfD5GCvt3lvMhgn6deXhqPkgDGs48HwYHgwPBieLB91+9mXrZL9QZ+1a/VK8uP9XufIVKeHuTSIPnV96vrU9anrT8fpxu3BZDiaHCfD7mC4cbt7kkyTzZGZcv80S7p3DsfTLF87YCsi9nzEno/YExF7PmLPNxnXZFzTW+x1hx0SDkvTXz5ORsl42s1RaUbLo8PkXsIGN1uLMhkOSNiqJlvVZF4teC14LebVYl4t5tUCnZ/XeS7vEDc/A/L45qLn5vcpPNfzK8lo3D3qjDmebu5iE2V10E/Gh93hQWV8f5A1RhXTle29w43x4TChPVpPdzbtjWxfk+SlwnqlMxwO7veS2+OVrDU5XsviMB2WLzwY3O/nrT0DqzDsoL9x2tobZaelnjnWa4Ph+DD9clynt9Htj9O34/64O+ivJ/cm3ZNOL+nvJ0uHg8ko2TTv1t7gTne/0+sPxmvpYHOC2xsfnzb3sic1Ho8BPR7/eTy283g8Z2KdGBJZ7tHPG75RI6+RN1g/P6kxkfr5SY2JjM9Pakz0iQERXn5yY2KT2CJOOW2iEPO3TsOH78P34fvwffg+fB++D9+H78PnF7LBL2Qj/YU83usN9u+umGOUxqU8693O43BMPh4ddg6SpeznysHdLFZud3s989ky+HFejV8oHgaa2FrLRwzNEV4ZD7udO5PjPA7JD/p57N1eTr8D2cvfJY2Y/RJrpds/2ZuYIuO0lY9ZGxwnfTpHR13z1uzsJ+a9dHKalEeT/vLt5Mi8mxbTH0ujYzPfxf3eZG/pMOkY+kG3c2Q+ydaPJiPeX8m5Qnv6kebnp39ezJGIORIxRyLmSMQciZgjEXMkYo5EzJGIORIxRyLmSMR8NMZ8NMYBnABOACeAE8AJ4OSnmR43MZvBaQyJEbFJbBFjYpsoRM1jftlkopvHkHoh9ULqhdTLTyvN2ZNLzOavaE/RnqI1RWuK1hStKVozZ19tomzkDzd3s6fAW+ZjIBn2O2Pz4ZU+NV1NH87e75r3ZPZYNm0tHyZpWLnbyRdkz2DT1sb0OWyarKZPSrNx485JttRU3j3uTUaj7p3+evqclcfGa1k7a76UdWXPmll4vtCTdVTSCWVTXUtb+XPkrPOoc9y9V9lLxvnw9expMu1s8nl79TDJG5WTzgmLs6fM9I6nAytmp+Stc9Nnziw4ba1n206v2XBa/QnFNvLnz3myyQNopjFtrGdPoFnz3oDKa+nuo3m2Cyrj6ZRXzeTzJ/Vmg9NH8enhSKOxaxqyPZLNLjvM3DtX7p0r986Ve+dqzroW++YXv3zcdTf3PxyaT5fufvad7PPZ97kLXyZ8qdAepn94nKxld0cumOPrnjW9s2ZtLbtRmQ84bXpnzdq5069YZINmU282ra1l3+DIq502vbVstlnv1tm3vrN8c/pVB2sG9bNm42y29bNmY5Zcn00bZ/TCnOpnzcIA/6wZnDXDmZl5M1ltJqvPZI2ZrFA7mlkQzGSzsOjczE65NJu6s6k3m9Zm0/ps2lg/Oz6XCm230PYK7WxDe4n5WMgPnnk7pt+6Sb+Zc2G/c1zIXSuPrfxSIQ+s9WszuScNXr6VB1YeWnlUyP00Wrlv5YGVh1YerRfywrLAqh3MWR5YeWjlxdrFsaFVO7Rqh3PGh1ZerF1cFlm1I6t2ZNWO5qxfrD3d3/70GFi5b+WBlYdWPq3tW7Xm5YGVh1ZenFtgrR9YcwuseoFVL7DmVhwbWrVDq3Y4Z3xo5cXaxWWRVTuyakdW7WjO+sXa030SWMdrmvtWHlh5aOXT2oFVy5+T+1YeWHlo5cXaxXVt1rzloZUXtzu01g+t9UNrbqFVL7TmVlwWWbUjq3Zk1Y7mrF+sPZ13aB2vae5beWDloZVPa4dWLX9O7lt5YOWhlRdrF9cNrNrBnOWBlYdWXqxdHGtvh82eN764TyNr/chaP7LWj6y5RdbcprUj63hNc9/KAysPrXxaO7Jq+XNy38oDKw+tvFi7uG5g1Q7mLA+sPLTyYu3i2NCqHVq1wznjQysv1i4us/eRvV32XPL1p2fTu4PxUWd4t5Kfp5pezkzq1plL3TrTqc3Jw0Lupmc7hTy28vp0/MZeZ9i9wMnWy9nClpsPcNOil+b0uVZffc64ujXOn1PPn1PPn1PPt+pFc+YXzZlfNGd+0Zz5RXPmF82ZXzRnftHvzi9u/O78ZvrscfU54+x6/px6/px6/px68/ZfOH2Tzemzx/lzxvkW16o302eP8+eMy+qlXz8fJwfd7ApsVfp3spP/acObNmqrP0mGg7S1Muhn1wsr4/tZXsnutaat1fQWd97o5ldmK6NuduVXyW67Zq3s3ms2qN/NC60PzWX3fie9SMz/MzPuM5vZReUbh0crO9d/mN5WLVxNZpMt5NmF4rmzPL08LCzOrnHy69L8/yTKmtlK+adAOj7vzIaez67Xs6t6rvzPOk5vQeQ3PDanafZH/y+fXuyf/fX/udM+K83+8P984TZP1pvdTOGGRLoTGubXsdFq0/YK7VraLjUPS1UnKT0wryfmVXYOnTulPzR9t0rXnd3SjtMsve5cMfFKyXFaJsYmT+MF5/XSR2bc66b/r0z+l6b/L0o7pS3z86J5XTavB+a1WKqYn/mYS2bMRRMvkv+5yf/MrPPE/HSyV9p72fSm8Q2TXzPxKlFNv5go5D80uYmlK85KyTEzSX/+0lm8cs356jvnyXdO6Ttn7eJvndJvnc3/+U2j+m3t+c5/1369U3pu5vr80vO3nn/0/OnzpedOeefX5Veqg2+c3W/+95uFG984l792ql9/+/XCFy++uvJvX61t6ltf3vry+Mvyf13902rpC+fis91nHz978uzbZ0uD/3S2Pq9+vjD43Kl+duOzF5+V/+PfW9Wtxw8eLzx57Bw/di4/ds5/8tonlz4pH3/i/Ou//KB68ReXf7Hw/X92/unhQfXJz51/vFGtlh7eerjw6KFTfeg8+gfn703P4YlzfvLaZGF860V1tPuiemzAA/PqX31R/YPa93ZWauWd5fKLajrBX+1fqOlXe85vOs6t3Xp1Ny34gXPlg8qmPnj/4/d/+X75vZvb1Ys3ndLNWzcXHt38v5sL1ZvOy7Xf21kyW75oKm2Vq+XL5RvlQfnj8pflldW33/ij6lumzOD6g+sfXy//9dU/rr5x9bXq1jXnyrX1LVUzka2r1asLP7j2/Z1Xar+/85KztXO+trWz4JiDUivtXNx6sbWwtbW79WCrvFW6XFp49Iqz5HzhPPr0797e3n7zi5UXf/vm05W33nvq/PTpn7yd/rzyNzefLv/0aWnn5ns/+tRxfv7uw5/9rNR69c2n3ts/enrr1XfffHpgGlfSxkemcf7VT18ptd4djcbb2T9ntL093i6Z1/YHoywfjScmG5e2t0ejbIR5mWQ8ckzHyPSPTDTtcSlNt0fOaDwqjcbOdmmUvsYmn6Qrp+VMxwcj0zIrmFcpR25nZTNann6vVCr9P01h3DYKZW5kc3RyZWFtCmVuZG9iagoKMjA1IDAgb2JqClswIFs3NzhdIDMgWzI1MF0gMTYgWzMzM10gMzYgWzcyMl0gNDAgWzY2N10gMTY5IFs0NDRdIDQ0IFszODldIDQ3IFs2NjddIDUxIFs2MTFdIDU1IFs2NjddIDU3IFs3MjJdIDU5IFs3MjJdIDY4IFs1MDBdIDcwIFs0NDRdIDcyIFs0NDRdIDc2IFsyNzhdIDc5IFsyNzhdIDgyIFs1MDBdIDg1IFs0NDRdIDg3IFszMzNdIDkxIDkyIDUwMF0KZW5kb2JqCgoyMDYgMCBvYmoKPDwgL0xlbmd0aCAzNTEgL0ZpbHRlciBbL0ZsYXRlRGVjb2RlXSAvREwgNzA5ID4+CnN0cmVhbQp4nF2SX2uDMBTF3/0UedweitUmsQURtpaBsH/M7QNocu0CNZFoH/rtF3OkDwuo/PDec064Nz3Wp9qamaWf3qmGZtYbqz1N7uoVsY7OxiZZzrRR80rxrYZ2TNLjWzu+twOxV9ORb2fjbEPe9Jtnd9GbpYZp6lH3fRuJ5SvXp+Y2zTTUtnesLJP0K4hOs7+xhyftOnpM0g+vg5Q9s4efYxO4uY7jhQayM9smVRWFMkRSTtM0tipEsGdKym04FStfwqkSsvrf/7xAW9er39bH8l0oD59DtVC2jZTrSDmPxDPQHiRACoS+vAepSDtoii1IgnagAsRBB5AEdaB9JA53CXcOFQkVDhUJFY5kEsk4VOSqgpwSOTlySuQUGYhAOagH4Q4F7iAEKAfBvYC7gHsBdwH3Au4C7gXcW9yWDnE06wyWIS0bdV8odfU+jDquXVyfZd7G0n0zRzcuXfH5A224uwgKZW5kc3RyZWFtCmVuZG9iagoKMjA3IDAgb2JqCjw8IC9MZW5ndGggMjQ3MzUgL0ZpbHRlciBbL0ZsYXRlRGVjb2RlXSAvREwgNTg1NDggL0xlbmd0aDEgNTg1NDggPj4Kc3RyZWFtCnic7L13fFXF1j+8pu1yUs5JTnoIJCQhtJCeEOohjVCUUM2hJhB6D0WKAgoKgiiooAgqIqICYkBU7FiwK6Iilqug2FBULCAiOfu3Zp85IcTrvc/zvr9/3vdDLt+svWfPnrVmzZpVZsMVCAAEwRJgkNlvYEY2O3vgdWx5BlE1Zu7sxJqk3gsBSDMA+t64GeOnLqp+PAyAnQLQ946fMn8cXN9xJg6wFaD5HRPGVtdYC5fsBWjbBd/Pn4ANITcEf4/3s/E+ZcLU2fN+6tpO3t8B0Dp3yvQx1aRN/wcBBryF912mVs+bERrNywAWGtg/ccb0WbNbrXtkLd63Bqj5bUbt2BluscwJcAzl4euB8T5kDQgAcafIgfYk1aZ92WYYR8OJoFQwwYXJ+DFwWBUwz8JRkxCQ1WNgMRBItM6Lm3xlJEdPIk9XAXn+6B84t52iq+QOoWI1REI53jlhuugq+sJFP2wnxMIGAOukvAv89h339bXOwf/FHyNwsQ0egVvhY3hF3ZdBBUyEq7Gl8c8L8Br2uxKfVcBQ2P6Pw+6Effhc/lRAFVwrZ/Jvf96EAjiCfTbC3oa212EhTIXVyLkCpagk2aQMfoU9MAk+gQN4dZm/m3UcNsEHNBR8/ntbr+Psy3Gwn37aMN4ddDP0pl/h1QZ8UmG3FUERmQ2byD3I4aaGGXf5m3xXww34ewBMgLmwXPEpOv+JGEAdsAjfnIINnWAIlMB4mFF/iEl7f4gsJquQ1sH9apQh0MHX1/cTWnU5m0Qfp7T+Vmxdi++shWqCGqarWQ/ZkWZYLpzVy5BpgW+8r5K8Tj5E7ZXBd6QWNTQNVvs2wSTyz3rHHzYYQkgblgrmv3tKc8HpO0ezrd9ZCjhgsHUq0Gb1sX5j1f9p5As/2lo+Fd8G62vfQl+NuFy0g8cAd5qn57Ch3srBgwYO6F/R7/LL+vbp3au8Z1lpSXFRD0/3bl27dO5U2LEgPy8rM6NDevvWaa1SU5JbJrWIiQhzOUNDghymoWuCM0qgfWIdqSqtY6mJYWXVyaXJ1eXp7RNLYyaUpLcvTS6rqkusTqxDwlsll5fbTcnVdYlViXWtkFQ3aq6q82DPcU16evw9PQ09iSuxC3SRLJIT694uSU7cR4b2r8Tr1SXJ3sS6H+3ry+xr3sq+CcGbpCR8w5ZKSptYWlc2d8LK0iqUkewOchQnF491pLeH3Y4gvAzCq7rWyTN2k9bdiH1BW5d22k3BCJFscaal1TV1Ff0rS0vik5K86e171YUml9iPoNgesk4rrtPtIRMnStFhVeLu9vtX3rjPBaOr2gXXJNdUD6+sY9X47kpWunLl8rqwdnVtkkvq2iz4KgZnPraufXJJaV07OWqfAQ18+lxgSepEqis5ceVpwOkk/3jy4pZq1aKluk6DvKyjxXVkQGWS/IkvQ12vXFmWnFi2smpl9T5ryejkRFfyyt3BwStnlKK6oaISh9hnPbUqvq7sRm+dq2oC6eRVUy8b0KfO3X9YZR1NLUucUI0t+Kd7clLH+KSwhj4V//QYUC2oHNRwUpJUw6p9HhiNN3VL+lf67xNhdPwe8GS089bRKvlkf+BJ5GD5ZEngScPrVcm4tn0GVq6s46m9apJLUeOrquuWjEbrmiQXJtlVF3omPil5ZXhYYmGG1+6biFL1qpmYWCdaoZLwrcYvoN3IV1a67JvQM37yYzwyaBUWnliYjMPIcUqTS6vUn7kTYnCARFR0eTu/IQyqrPOU4IWnWq1Y6e7MDHyjugoXbGKJvZh1Gckz6iKSixpWV4pVOnFgpf2Keq0uorgOI7B6qy6j1N5XiaUrq0r8IsixkvtXPgk51rHduYnxj+ZALnhLZOeoYrSyVqUrK2vG1bWoiq/BfTcusTI+qc7jxRX2JleO9UqzQw21ORZvG4fXtpVBlX0GJvfpP7SyoxLE/0AOx1NLmwyTXBnvHwYNsM5INRIraTzzYkcXNiSW4UVyURf8XaenGggXKtxulYZb1CWxksRDoDeKUdcmsXRsieon7y8aVEhzKi4PjKbJWxynuDw+yZvk/0lvT/FxomKMbxhSqeWBR+im8IGB9llcbjdJXcZIo0+sTB6b7E2ekFjnqaiUc5PqsbWslGHrXK3VoIvuGikL1QRJ+DhwI5VZV9YuvrFy63ra9w235U0e9wo8TlxpJPcZuFIOnqwGBJS8Vx1IE/Z0DIu3fYHc0MnoexNduKXtDb1yt8cjN/OETnKQ5F41K5MHVnaxe6M/uTp+geQVDn1In0FF6e3RtRXtTiYr+u/2kBUDh1Y+6cKsZ8Wgyj2U0OKqIu/uFHxW+WQiBg27lcpW2ShvEuWNHGkA3hh2//gnPQBL7KfcbrDvx+wjYLcZgTYCY/ZRf5vLz6iVzcgDFJ9w/xNPoDfHNsPftsRus392g1SZxyE8hsf0BNMQGr+byKY92PIUxniTwKPBJITE78a3BtjN+8iS3aYn3t9jCfbw+CVcMfgC68FDKx8Nxugcb/9GRkXyB80lZgIuNoaV0sQaaShXeSesrPLKzQZRuDT4h9SR5G64TMndUBAtuM6RPLaoLii5SLZ3l+3d/e2abNfRREkUwdeX4NpX1BFpAcMqk3BLJsa9Hr/S9aNcKS86lZWur9NRY+W+vsyN+aiLtPa8H0RB08LCg4JPe4OA0dNe9sfscFITTgaFE084yQ0nKeEkIpz8Hk6+Cie3hZNl9tOKcFISeArhZOIp+/HecLLV7jQo8Jjb7R8EHjWM6AonFN/D146Fk/3hpC6c9AsnmeEk0X6GjwpP2Q/WhJMZ4aQq0PpuOLknnCyxG4/Zt/6Xl9jvtwgnznAyQv3MxJ9a/8/IEQ2No2aqn9ravz0coR5B93YQ071dGEoRlpOTk5VZ4IrWW9G83DiSX6CHEgf565jz4GPD7ve97bxu79yhS30Prxk0n+T+q47cTtp/UTOo7LDvS18EEOseX186GXUdBuc8dSaqOiQk3O0wT3sxnSKnvfBHrpukuEmEm4Cb/O4mX7nJB26y1022ukmJ/cjlRk25ydRTbnLMTfa7SZ2bzHCTKjepsB/is1N2+5pAO7a8G+i52U2W2O1ON+n6s916s5uMcpN+btLdTTICQ+AL97jJdJvHI/Y72EFp5G+K+pv+RjXW30XKC5PaYwXdSBzJy22VVhAVHhnhILzauXT37KrpM50f7Bm2DZPfvoNK3yPh5Pv7dv1YPmiR791PH/CN8x08LpNPAiW+A2QxvA8uSPaEa5jyBgWFhzG+yRvK7hsWugX5BVYqvDArMzVC0/Py83I74HLl52RHkcXb1j2VlpFWkte1vO3SJ9pd1nlqs2YJ7drmFw7FsfuS9bSKZmDFGuMxKRGcwJNeso84wD8DHNCdlxTZl0aQ9Rs2+OUZbB0nPeEwVroxniC5pMHM3DgMC8XApG0hklu2UgL0LM3NLS3LySkbnlVenpVTVoYO4gbrODXYfhwjGlp7IoLDw3Gg2JhI58Zhka6G4RoZYdNR3Y05LAxwWN2UFd3XwNNag3Xu96IcK9BwmO7pFhbqdHJNhIe4goN13cWZOyIkNCy0yhseFkZdmJk7g3VO+Sivg4afiiDHIsi7EWR/BKmLIJsj1CaD7jntwgC3SEx3qf0M+w4ljpZLH15YmJ2NVCoxVU/qTkiOO1pSlsRMkkQMh+8Wxwy6/flzVwf5UoNu9tSfepsO8D1I3s/Ly4vnZ/8y4pGSpb6r+YT6OXaxA27rHH8caz8D55AKizw9WXRUVGRwUlLzeMOl62FhkZHueHdaq+Yuw3BVecHINKqMNQaPY4YRkxITNcobo1d5Y1hYmOk2q7zuyFFed/iMNDLCtiLIiclACjEZOJdRI0eg8qHQNgNpyWE4w8LwwHV2VibJRjtr1Y4wd+AiSnQn7rSCpMQwtMLmJDKCJ6XSxS/ef+26uytv2r939wNP1WzwRTquO/Sgg6aRp3bfvXG77zPf575r6K/X3jehxuesH73u4RUL6l/UBqEG7o7L832zel9kyD1Lj7yuSduzTuMa/o7zjyZBnl2RERGawxEbBi4XIbqmxcRGoaPBWY0Kmx5G08MIgzBXGDUFzpabUh3BxGTBwaapj/KajGhcG+Xl4a5YArHob2PJsVjybizZH0vqYsnmWLImliyJJTNiSVUsqYglnliSGUsSY4n/hf9t/5lNfmqb/IyU5mSvgf93wwLYV+hiAsbl3w7+hQi3txthtl1JzbPkglbJSSypIIclp5Hnhn/qqH/RsQX1zRMLi7Qph32/jSHPdu5a3pXRofVnpIHZan7+49D6Q5t9NVtQx99jxZuMOo6HJZ6SaEdUUFRYWJArxow1YnHPMkw0EppFx5gxVV6H0+xu9jNZEDNNEK4ggwk2yhsiWGxUGAU6yhsB4TMSpHFlN2wT/wUKbk+rYU7KqsLsaamLrMxk/6ScuGUU9U80CWmUUXdwm0FjjUeH0yuH21d7Dm4z678z9oypv2HMNsM/tby4+l+oU9K/Rsvp0rz6N+PzpC2dBaDncJ5BUOpJQfMRZlAQgBDBIUGagZZhMBBMjPKycGcIoUtCyIhRMxuvUMDD+/+He7xhEZyEzNxm1J8ISLinIqDovDjbh1rfoR2H26dhoz1pXAQ5HGaI04mpljDDXE5HsGOUN5jp5ijvZvTI3MVpKOP7rP2eYHdUOee6jlauhythMtqhImf6neXFygwIlpNd4M5hF4Qb8+Fzk6f3GHK+veMRuRO7ON4fEkGifYsvkhFirJPsqOgL6TDQ054YaS3C0sLSY6LSozpktDAi2rZF1QAGJRQNoK07ohneRpPo6AiOXjFjhJQnp8GGA15EuQ90Hu6c6OYkRzqODprtxqPRYDuQ5JZaZERUdHOGvgMdfFrfHiTpHu/W3ZkVYyeNrcj89Yudd2T1EIm1va9bM9S7Yl7/LN9vvkWvF5FZz2eXblyVX+HJL+g+cEqvPc+28p3YEZdy7ZzuE9J79h40peydf+W09c/retT9SdS9GwZ42gY7HC7097phMEojIoPBmGFQE72liWGIVaGb8FsyhF+09P7teWE32pFe6joHlZzc0kmS3fZWbCctts7x8cGcV0d5ijvyDh1LHEPfyjp4yIG6vj3iEOnsO3Ao/K/J0iKlbMutL/RSlC2CHPRYjPOg4JAQCoSEhtIgJpzo8ISIioxwOoSO6g8JDg2iwZyH6YyhmbhrokhFFCmJIrlRJCKKQBT5PYociyIfRJGXo8jeKLI1itwWRZZFkRlRBDt77J4pUYRHkUnY9aso8m6g62a765IoMtvuOsjummiPy+1xvwr09I/o71PS6OlWu312Izb+dzv9/WXsNKxRD38HT3ETYfxyVwWEwe4ue5J0fxSpiyJr7GcVNj8UtEUUcUY1JMMjRv2z+/17Avx399yoz4V+aOg5Od1zwmW4D/g1aRAY9e22xptQJDOSzOz958ZEgNhXfHr3W3wje7w00yTvm/feSLZ3uJ3cd79JVprzW7Brzy8SIXI7nq9kG86PZdvtrUmhq/UDe5S9jKGuOfT0pMSazTnDLRgeZoa1SHS5QiIrvCEu3kxrNsCrRTHo52WRgVzKtl+8UrvxgtlK31Xgz6jCU3AvFuTo9l6kuBnRe7DImYbveMJDN86/dQOB9fMnp+c/nVaSXfNAVWXfmdeXxaZv2r1n0yMka0fbllfGR95uwarJS1ahe4W+6ENexPzfDYkw1JOTqLEImeuDOy7YHZzU0hVV4XVFaQlmwgAvbjgpK1S0JJ6WJLMlcbUk0JJcVJD499/FHk5m2FKbTNO7oUPB3UFtz1GAgueHY16C09BJ1nUGad87LKrioZ5Xr1/nO7ex8qHuOzuNH/fwmBGXd76hmyiPSff1rO03oOrRjTt9B3elp7XLvB2sG2csvLyr3JfdcR5XsgMQh7PoGKVBiBYS38wRXuFd5dzo/MH5l5ODk5hOp8PljGsRlxHHQlhcHGMx/b0sanMz8m4zsqQZ2mIgfkjngd4RjerCbHARQknDCkRJd4iih5JIl1wArf8bw+6tu5Gwm3puzk0vcHWfWPVAzTs3b7ypzxVPbd1FWuxqHuU7t6v7Tb47LKixj76hm/UDF6j7CGgJEzydmjmdKcktIx1gmhjr0NsJkeKOqfC6XY4WwS0GeIOjTK2f14zktJ+Xw8EU8nwKeSSFdE8hjVag0SqQnMZr0JCK5NtZSBNzamRL+QXMyT13GqTklLKphWtuJbBhZGZy77yRW2sq+3Rc2pU9nEkmx6Sfe1Ja1pMbdpD0RxZHx93mO4921asI5ybXYxSuRzQkyegdgz4wPgh3RMtkFoNGxEIjI5tXeCNdjtBQvb83NOrdZNIodttJVbvGmwAFj+BC9wsYHVgHu7joRmwbCiVslK/O9zWfPHHoHUUJw98evuWR1eduWLiu/q5XfuraqWxZFT27Yr+71+Jruqa1vXzQYw89QJIenelb4dw0s2N57X60oWhfX5YqtqDMCzytIoOCoiMw26CExMbQ6IjoCq+IcJquCm9miCekIuTdkGMhIkSG/JTmSeUhISaB+HtiiTOWWPafo7FkcSyZHktG2Ymm8kq1tdAd7aqdP/o2yhflGmXLabqT3cndqdwo0bptYJqT5OjJz277YouxPbj1s/de1i05y51Q0LWsecKh0EO+viI4K63o6CH3y7WRE+/dNAh1T3AeL6P/cUJ7uNzTJiUkqr0LQ1XzhKiE9A5Jbfp7SSoJYqmpSfFxZoU3zuWSkdbrjoJGDiiQGQRWIMdfKaei9t0dmG32EVFN9oN9l1aQE20vEtnS8YYe02JapbaNr9k52ktKy3f3XHzLBiI2dHmhz4OpR96rfKYwPD2l/x0L1sRM6N2DTtIcGlvvu3nK4o79xj268RE0qejw80XvP9em+VeL+i2+0R9/e2ORtQP3TDPo72kTJ1h8fDP0Vs3CIiJCg4KaN0toFhkW2s8bFimijegBXkO5rL+5V5ITfiEvuMhJBXyUJreIO1+5J5ZMCuYaJHGSq+KJyrHjjIlLDd/746Izc/vs6jj9fumc6nf2nTh96rjQTvUbY9Jp2eK09I5XD6tfLvd5LQr+F+ZpOuq5t6etERrKdExxGIuIDAsa6A3jGu/n1Zz+SJARSVpEEmckuSeSjGiyrxsnM/6QIPfyRZV2yl2G78kN1xikXTdPenuPp326B70/GxebTnL8tx5bj52VHt2w0FPGwxjDAt/tCnIHRUQKh8MZHBzpDO7ndTrDuCuI6+7IcJnQ9PPqTvRLKCeFg5FkcSSZHklGRZJ+kaR7ZEPF3bhE6o5hFs3d9kUN1UOgPFIa90dagqV3MpOKbrfcIFk7yc6RBkkx+vs++W20cfKT27ptk1o+35HcE5+eHu37tv50dDo5usq3028XU1HRwTgfHTp5EgXnUsOMGaatWrBFjmyBe9QkP5tSr00OgS7WKGkhtfij1CIqT/IN2J6YiT6tA8z39IiC6Oj4mJjglGCn09TatG6ZnJyaoqVkZngyiTMT91eb5u2bD/C2d6Wl9vOmOVMiYyKDzX7e4EgIZ+EDvMzVeLd1b7BPgttuREORldOgtjC1Acm/Mc9Qgmq76Brn4LdjNrFkZ79B1ea4pabv/fHRbdPbLxjjGLNtXGz7jPZLRptjtm1Aq45qVrbrsspq+n31gsljo3rW74pFA56fnl4waGlh/X5atjQ5vcC7uGP9fmlGL46ZNx110UvaD+oiHvp40mIBotwhwZqum4bbSGgWG9XPGxsZojEXG+B1uex5O3VMchqm2ShNuDBNnF1gt12YQcNU6W+Zub0fKZzmFzl+0N4rLuxDejK946IR9SvZ+Nj0/VOmNNqGYOdjJ9lLKGsIStveEw1hekxYTLOESIcMQKGsAsPPZrsIbjAJFe/dMtw0hBd3Q8jBDEb7ceLIYfdXTRw97L6Rz217beXpDfIXGbT85lvq167EXz5++LF7Sfgm/O37aZOM99YK9Msv2jExBSo8bVNigoFSQ28epoeltoqMQ2migpNCkwZ4Q7FS7+cNclJd6P28Ir6xqTTNsfzBPSuzQL9wxqDnN0qzGmdZJ4IyNxu+ImP+p+MNYrofwXRxvc93e4cxpNukMfeO9vbJW9ORDvX9EJOREcPfj02/A7PGOt+hnSG1mbcQ/YbpV2GyRWAgrn0yziMMs9s4Z6hhmlgeh1N3SFA/b4jTEekUIAZ47XLYYQZjOQwuy20fMmT4z7C629lJwKjlutvBrvHK0w+yE9q3a1Wxo+dke8EjW/R5kh0wzixeUFN/h7TDD2ZeJfdkrHWSHkVZUjEetA+BRDe4Y4SIaZUWksiiohIqvBBLgnlsbJSLBVV4k7S12r0a0zQW9c81cHhg+Yl0rDKeyTpYng53IP5CWAVmuw4mdO/+l1be1CY9LG5Ul09HTBw7es/dMzemZoR2Hz9g9KA5E6pIxO1ru315Q7P2j3YenpN1ZcWytcmHpnTs0y9/QJf8q2y/MhTnMJpfA7Ew2NNBi4yUeUeYE+NZfFyonXi43WERTiGwBO7vNaJaxBNnPPk5niyOlxlrQ8qKtU5G44yiIaVItUuEaBUlZHqRo2NKwTRipCf36he5cFG/YUETFhrX3eBJPeI6Uh2+Kz29ecYVVUMS+tHe6WmHDw+q/3Q4yjnO+o49znbiLurlaaW2u731DXdCsxjc8zHOEP+Wj/K7Ot3ZaMtftOMbVj7Vn9G5c+yMVOUT/hRVI8H++CoNwPd9/MC9GHmDxk03SOy46BdkeKXzzt8Zm/7C5GlTxzkvoxUYhJ9ehHI2w/2+GuUMhyGeXHAEBblcujNYD45wO0NDMarxUKfHVeGiEa4UV66LLXGR2S7iCopaHEFGRZDu9tkxmofUbffG51/hgaMRIr8U5OAO0/0VYzzJpz+3jTGeixvo8/Z6FotFWPunh6WlttfTo1tXLqsfxhbEptenkPUT5HpnWSdFT5QvBpZ7orAEhuAgB+XMNIQwaXCUiIuN22ct8URkdiqPiCMQRz6I+yru9zi2P47EyU0Vktim3BVHKD5pzuyWiOhm5cEmdXBwGwaGaQOTCbTwbFvxGIJJO/uEsp2cEq5CdIPnUH43UPti2ZuDk8lrmB9bVnSV78WyHeOM00tJXp8FBwr904ygk+vX2ZPqSr3195Hravv4J1tyh//87Fv0EYtwjqkw3JPpTAhtHtrSkRSU1DyoueaOi2uVBprWqqUjwclDkpKaY96TFBkd4vcfi/2H3bbF5Mh9idKSQBAMHKoWqvPHggjcjNJiClJt8Qu6kQbhnTKlwIQulNzU1njS1b03Cds52Ti79ipPbngbY3fkyg/3zzYseGBHQc6gZkHpIc2bDSjxkVWx6b4753Yti3U4Q9Nd8Z2Xvu4rj0wna7bmlcp5DfaVsZtwXi2wRiiLxiLGmZBAaTBp3jwxSQQHJznfpcco3Ur30pcpc1HCgBIXpwkJie44Wec0j+oQxYLRNbmbAc4bLQX3SHZ2I0ckt3KO/0B5RE7jmV/IU9xJFy0SCaV+P4VbyV3A0nLR/H7wKHucXXvdtX37l6Smu2ILl69Pf2IG2ykNcUZ//3r1W10/9sUtfcPfrIomoQPY0Fic4wlcO4pzdMM0T4ERDkHU4YiIDMY8OyLIpCZFp2pUGTOMJQY/ZZB7jEcMCgYJlmdyTjRmCK7whqFVPu6OKg8Lg0jl92VN558jWqH/w4U/Kwz3fxmTp8kFxK53kjEEyKPH7gTdgklz13WcFFOQkU5rjPp3DnSclNw3ozydZbhdy89lnT8cG3Wr/LtsQEgWK6FTxAD7O5xbCwIIYiwsvOFDHFcf4qKli7e9+0Xf4eiUC9/h+ENNPsTZflrmEvDNm7GLRjm7nKYt/H9X8a128akB+te2+lsdffSPsZ+h3rB/60m+UrjC0emvbX/+5eiD5X9C47+95gjWCtXfhgtgO9zNhhPBMQ4gYrTtMAf7XEEeh9P4rJxut+7B9gNiHJzA/iXY1hfpYFpobcH2foheCMLBqkcqx0lEDETMQ7RDdMF3bkCMwjG+k+NIyoEk68Oxz3FrDT8ObjEEasWr1gm8/w5xWrwKM/H+e+R/lq2GFmIIts+yvtO2W9/h9S/4fHygn6RSdj4Lrsf7Z3C8yTiP5dj+DLbNQcSyBJhLC3GuCdZBVgXlKO8pup1k4HtdEX2RR3ek3STFftH+OUFvvK7FuaZie2e8norj91ZzxvesFUhLcOyBiFh8PhTvx2HfZjifLLba+hYxGHmeYDmQSnMwV8+BFD4IBmF/+e4GRBxiImKUfI60CHX1thaB8ubBcLyfjvr6Qt7j9S34/lZeg33HQRaiDfY9yzdBPM+A+bgu9+N9LbaX0oVQi/1DNIByhSvxvtKv779DT7CmyTVQ+m+A1H9jyDUK6P9vGEdS5JrJNWgMew3sNbJeVfr+G5B3d6n7ppA6VyhGjMa+hRf03wQ1MBt5fC3XoDHkGmD7DJvK+cq+Taicu+T3j1Ta5ufQzaZoJ1I3ts38F2rbJ9rSP1Pre7lXFO1t61nO1U8rFJ2qKAvca2Cd5cSWrYW0T7k/pI1KyH0i+yjqsekJdb8O+qh2JtdR6rIp5XeDIW5Bm/0U2+Q+k/ppQvXVuN5DbP2dlvavaGLDPe5HuSf+keJeRRnApifQj0jaCZrb9oJr9j+lcp/LvSZtzF7fhv2O69SEqn3dV/TB9duH9o3XSH+w24ZARuO11rrKPqg76RP2QQ76lBRxM0xiZyCfH/cdxPbDto+6D31NqO0n7DUKrAPed2FXWu9opVAphvjeY2f9urT1V4r6G4fXE1CflyEf6UeOW7/jmC1RNyn8Bes8bQk6rus5lD3b9iuoH83AOY/Aub8Ot4npeH0XzjXKnrN/ngPRVw8EB/JPQV18Ke2L7YEWLMx6g65HH9HBWkzuhE20O6wgPgiRvt/RyTphfGWd0BOgmwHoX3eiXmphqvGN9Yt+s/ULxoJegT0SsL1GtvA/WiOUp0PT/ab8zd/3h9JfU3vDue3GOS2Ttt5Y5sB7+m24f161NjXY8N/4yP2FvuHv+/+i/eqfozVfzXXw3+Tw23dGwM6bzrWJfQ/lv1pfsSRre2B/izKbduNfQxrvD2Mb1q6JPP+07xrk8Nu7F2W9X84X6XNSN5qADLSTdnI825/LGDPLjp0HpFx2LPoahrOrMebIuPsq7r3DVrWfr/V7gz/Zbr8bmG8a8mtnx7IbYLDyt5epuBmD7V/bc/LHTxORwZ+FDJYGbVgLfDbe+po9Dz1poW879omQYKehKzsIzdgDtk+Xeuut4q2BmE9bWeeQtkEUIbx8sm134xSwr++Uvc5Oa7KtlzGIbTiXIZCP8rJGEIiu9Cg8iFjDboJy9iFMRD3U0z6WYYNbnyKV8z6DvFrjeMm8DXRgP8AEnEsQ6jFaUiZwb0n9SaAtItaz3tZnrDdUIH0HdRMk14fNgFKcbzc5Rx6DsbjQisK+J1lzKLHzBfWOFgzdtOEIB+puIQxl62CoSEAcRD81HP11HCIBc4WPMbfqbf0hQUthgQTpb71JXoUlCLcE7QmLcZ4zqcP6WOZuMqfD/KYDIgvRDTETMYqmo62kwzLMKR7AeF2A9DDiQ/QFuxD7sE9z6RcQ0xH3qPswxF2Iaaif8bSQ6Hj9i8LeRpD9juI7kxHSvyxALEQMxP30EwuFDHoFjCXRMJXU4VoXYT6JsjAXrG8KfGe0H3IvwiG0v0NIWyvUKiQhVmOfw0gdSPsjPYK8E/yAPhKsg/WsBF5HAPgksMCCXYiFANZUvB+J10fRjUxG+jbeR+N1CF4PROxDZGO/57F9K9IvkMp/YzOpEb7EdnzH9x3ihMJZ/1hWDl6fQZxU9FnEA9j+A6ItXuO4VpDi4fSPY1VheytEG8QLiOsQLyJuRVyN2ARQ/xniLeybhMjDtisRiYiDeI9j+ZIVzw54fyPid0QMYhjyegUpjgljESif1csvb/2bSH/0y2ktQch/hzUP7+/0z62+Bd7LCgjN2HoJ255C2swPX4m/naAeLaQ+qZcsvJb6Q9lhJ15L/T2BQD4W6taagFiMz+S8qxEz/PwslMsahWN8hRTLfEuOOU7KjusqbeNaxGy2FqIQXSWVeTAiR/o9pOfEdOs3bQj6swIsSl4FpyjHuuGgnff0DtQcfLX1M9+DNYLMddEPq9x1fCCOS7/YUG8kQJI/fuM7MpfFGC19vPTDWjT6caw1xGZYg7G5vXzfzkNyULY0aC9jv/RpWOcOs9vOW0exPRXzii72865QJPuwn6DG7ncEbRZzB84tn6wl2FQos30uRR90xHqLdccxfkWf9hmk22NOxfvrrOH8LCxAH1iCY5Rie7V8Rz4X69DnnIfe7Ee8jkZ5w63fJeUpmPNsQ50thpKG+DIE/chNUGD7/cfQ77SEy9gmmCvuwlwpHSLsfOZVCOX3Q0+eBuO1TOsIW2Q9j343HXEzP4P5SzZ0EBthhO3jW6Iffxx1hTy4E+XF9bLji/SThfi8EKJUbTADec+U+uZvWaNxnrV4HyfbJA3UI1oV3ITr9ooYasenmEBdIuOWPtl6Qx9pfa/VwHWiAtdN1iqj4TE79so1lzmfWncRbVXJ8fRB1puY04HdV0K+h+PY667sIbDmdjyVNSaOqU3HekquuXxnKRwzKjEnQWBO11M7hzkl5pWiK3QwirCtyHrKXj8Nffx8rGtaQBsejHPHOK/PVDEyUKs8hzn81dZmEY/x+iyUqljbS+aIKi/oLeOw2AUFsr603zkEhRhDBkngmhSKydhnK2I55lNbcbx91ssNNdVhbOdoH1fjtb9mrZV1lb0m05HvHptnbynHhdoJBplRqIdouBxjRSnqoZe+B+dVgzH5VustPsQ6aqSh3j1Yl3xsvS2irKfMazA/i4Cp7IxVjfM7jHtjCdpncYOdDYfJfCbWyYoan8F4PR66akUwAevZUuQ3QZsLZYrvHpWb96JdrB3oF+r8Pkl+75T+V/rH8+0Qmao+Gyf1L3WgbGsF7o8T9Dqc22rrR6l/lPEk2nkzuf72GqANyHWQ6y/n/jdqWbfwjtY4aRNyXbRf0abOQanREm1kObRH+R5D+doEagh1FtHb9gOA+3eWvR+DpM3IdcNn7/OuOH+0Hbl+F6hdl/TWlkELPgq0AJU2HpAVZfoWZSqVdmrbil+m1gHZAmPZNox2ZNeC/5B/N+SbsrbBvK2pPpBiPWF9HNDrBfoP+SnavG13o6U+LK+igxvulWxyD8p1kHtF2mvgPqCfBroPrpZ5pTYRrhZbkBbAmyId92FruBn7D9U7WW+IVtZmmf+LNTj3V1H/p6GnmAbX60PRjs9AMtp6mwu6suuFkkDd6I/p8CvGFvmvaSVOIcHYKk/OrGsQ0/3UJ//t9lo/rCF4/zXIfxVsx0PfIWWTR/3v+gr81+Dy95PP5bWFeYN1M94P8Z/CWfF4XYNY6IclY/YeNd7HfkCVHzL2WzK2Z2F+dB7pKX4NuTzwHNdYjjkH22PpnYCx2NrL38Z8/1PrfboVr5PQDuswNgTDHNoZavgz6I8PYy0Yi3r8CWuJE9YLaFNLuQ8q+XMQSh2QRu/E91bDJL7cOsJT8Z0s6wveDnPjLNB4ORjyPawTdvIvrIP2GGdwrBNwM/kY82YHItMawtdaQ1DPHVgxRLK70P7CcA+GYf7fAmMe2hfKncF0zNN3YIzKRj/7lnWAB9m+sCt7zfqNt8V8XOJ2aGmPcx04kVcJoisrQz/2M/q2AqxNHBhPTsK16EuGiKux/vkZ1rGR0IzfbX3MCnDvH8IcMB8S+Dish9Px/SxrKmcYc+UYZ6Af22JtZoPAyW+z/mLDMHYNRXyI/XrYmIC+ZD39FMeJhsvokzAW4+/lLBt1uAKf78RxfkP6Nqyhe7C2aIHxeyEiGrYwH7zEV8F9LBOuRCyxaWvMo9NgCV0IV6L+5yGmka9gMqKI9oKBpATzeA/qcwgsom0RvbBfBK5xL8yl5XUxOEglrKCVcDNdBdezWqRdYQxFvdMy6EY+QtoZ5tKZ2DfNOoXjCXLW+o1WWj7a1XqPllkPk4+sI0g/oDOtb7DPKKw5pM4j5V7DWFCH+1z6zT8QqVjv3EWPYi6VACH47Fa7XpVnx5WYmxzAfXen9QzWa3/iWibbvvYkZPE2dp3b1x7vQ4whTwNR5yJw4QwV+yZYpXYcOmQZdq4jz0z94wfO9ewzWVVL7pVnCTJmYb+fsWZrp2LUjajXvTQOdiLm0gHwIOpyLqmB2xBT6Qq4BWV9CfWwCnEQca0f1jmkTyOuJwfgEdYO9iBeom2t46j3PYh01PcOXKdt5CAsIzXWL6j3pTjWRjoatiD9APEy6n41+RnmSdB4m3bB9zDntW5CyLx3PgLjk5XxD8hWfqTkgp/GPEXq72La9qLzSLhwHvkPtOM/nEtGKqo1aj+Neo1vci7Z+99T68lG55VL0Ca6NZwNBc5vmlB15tjuYmpdq+hIf76Fca8J/aczSkXL/us5iYr/jWmj80rnxdR6hv+3c8um5zsXUTkf+3vB4ibnQpmKev52XnQcJku7D9BAXPpvVMXHHxqoOg/6h7PPT9XZylD1XcIrdSPPQ8V8O6/+t2fi/xfp/+is/J9okzPwbv9tzf8jLf0f0YvPmNW563+jjc+g/y3F2u8/Qn2LET2trxC/4/WSxt9o7Frx30DswNp1B3TWjgBFpAWoXVP+B2g3Qyyis/40UERaI1omYZ/D+ZGBGIQYp+7n2XVqLdpWLe7tu4Ei0hrRUkRJIx9+EZDnLMQ65NEK0Vv7zarXfoOWslb9TxCdgWhvQgWiH6KXrHX/E7S1cCNil/4sdEOM0U5bPu00tET0QBQF9N6gS6WXwLwD8jbwV+P+v17Hs5jz/Af8h3XJQWT/P5u3PfeL5v2fZG8Mup3Is7jZSDshHYS4v4nMvWy5nbANcQWu5TbEYP/3W3hf4R2l18v99aYNj11/Bmr4D2ErYgjySfQDzvzNDuT5h4S6V9975mgM6hB95D7AdzWFbv9WP7/BR7i3o1AXn4rXsa63z2zk+REJlnmN4T/Isind4f9OTgb72+xrWXnuCHxTtz5EJCKOYPzGfMf6VQLrq18N//WpC+ew8KCUic8i7RHym9VApPLcfDmXfxHibVihJ9i5uxzrMqThAaAsncl+OM4Gwy9suBzHPp8dwNfJs1rrZTLEJ8/FZjd6x6UQJu/pOAhDpCIWIfKxFr6cXoE5Yaz1O+2FtMx6Xl5j3jwPY8QM/7cD63OUKy4Qh/UfrG+NmZCAMSiRf4Y1XJx1XsZD/7d5uB5lbIPvPNfou/wamUPKsVCGNG0HPIDyt9VXWQfk92z9CCzSUrHmeBsq9VCsAVqA/DfNpYgs9c26q6Kr5BmfAWQLB+JqSiXY77gvv4YO2nqoFXthuPr7CvfzGsjB+0L9MLlDvEriaJa1DtsquTy7wD5Iq228DXfa94dpS36YCLHDOsN/JPvFDrpaXv+dNgX52P9MUonGz/637f8TYB59EehhpOPt68Noq4dhIUKjH2LcREhb1n8gdyPWBijqzMA+D/AXYDTSPYg2Eth/ltGO7DYmk0P6YFKmAfkE0Z97MJ/zQBe+H2NdJPoRgJc1W//WZyqv62R/a5K51nFYadt0oVXekDs25IL+3EQ8hzY225/zaGNlXgIC67/TrBTXcqr83giRaDf3IZ5TefIVuNZUAvfRSsQSubew3ZQ1N+6DifL8n3WFseRx+IQ8TkKRr/zmG43t2fKbgdqvYYrGSSprYKSrZO1q17pYNwfq5cZ1saxxZa3LF0OlrHsbw35H4e81t3WGdkYd+Ott7aJ6W9bagTo7UGP/m/pa1u1yXPme3edxWApQ/wYu6+f+bwHwReD/0QztOQ/nLGudbEQ+eqyMC4CzFyC/c9SjLs5X+r+F2Djq/zYiv0UE+gXelf0lGvo2wXkLsQrgrx+QHkS6zd9eL7+xLEOgvOf/xPsFiHF4fTfSZKSdmo4l8z2UoVSdwej+NbbvnfwK2NwElyEGKCpRxlxQhjRPoR8iHVGO7ZKmIFIV0hAZ2C6vExDRiHyFTGxvo97v2wgjsb3vv5GjQj0vC/RV/TIQhYjuAci/lK945DXil4/teU14BcaZ0HTsRuM3lWMI4gqEV9Eh2G840o6IAgV53RHbJe2JKG0MbJf0GoVChU7YLunapvgHOZrOox/2k7rMbDRnqe8EpecMtR6BtUlR61Ku1q9fYE3VOpY1WnN7/dW6XyQH2p08b0C7tF5W2Ke+S81SMfwlmeP+t7wO+/RsgvmN8d/yV+wzqTH+zfNacYv63nQLDPB/R5RnhNL+fbi3fPci3vZ/15M5h/wO6ftCxn/59/Kw7UuZy8hvWnjtwGd3+Kk8V7T6NEI5+h5iQ/oi6dfQnwRg+yX0Y7g3f6n/s/5P+F//kCmYKdVdAAtGeBDL/pc4+8/gOEfRBHqiHwa6QmPZBZit/xmoHnBsuoDg/f8zhOAcQ3MR3wE40aZc8wDCcI7hzRDvArhr/IjAPhG4DpFbAaIqEB9hONrsR0x7xCmAWHweh+/GHQOIx7GaoRwJSwCad7yES7iES7iES7iES7iES7iES7iES7iES7iES7iES7iES7iES7iES7iES7iE/9/gjku4hEu4hEu4hEu4hP9PgQA4QskAGAQ3gPx/x3ZBBgwHYN1oIXB8SgGsn7fvt5L8/6mCpj+OUPnXCbEXw94CR9DBABMcEATBEAKh4MQRwyAc3BABkRAF0RADsRAH8dAMEqA5tIBESIKWkAwpkAqtIA1aQxtoC+2gPaRDB5QmE7IgG+R/5jMP8qEAOkIhdILO0AW6QjfoDh7oAUVQDCVQCmXQE8qhF/SGPtAXLoPLoR9UQH8YAANxhoNhCFwBleCFoTAMZzkCRsIoqIJquA+WwXXwLKyH7+B6uAlWwV3wEGyFlYTCUriVMMJhNRGwgmjwOdHhbtgOp+F3OANb4GF4HV6FXTAaxsAa1NKbMBZegzfgILwFb8M7cALGwfvwLhyCR2A8nIK18CF8AIdhAvwAP6LWJ8FEmAxTYQpMg80wHWbCDKiFWTAHZsNcuBK+h3mwAObDQrgaroJ9cC8shkWwBK6Bk/ATPEUMYhIHCSLBJATqwUdCiZO4SBhYBEg4cZMIEkmiSDSJIbEkjsSTZiSBNCctSCJJgrPwJ2lJkkkKSSWtSBppTdqQtqQdaU/SSQeSQTJJFpyDIySb5JBckkfySQHpSApJJ9KZdCFdSTfSnXjgSzhOepAiUkxKSCkpIz1JOelFepM+pC+5jFxO+kEd7CYVpD8ZQAaSQWQwGUKuIJXEC3/BefgKviZDyTAynIwgI8koUkWqyWgyhtSQsWQcGU8mkIlkEplMppCpZBqZDk+TGWQmqSWz4Bv4lswmc8hcciWZR+aTBWQhuYpcTRaRxWQJuYZcS5aSZeQ6cj1sI8vJCnIDWUlWkRvJanITuZmsIWvJLeRWchtZR9aT28kdZAO5k2wkm8hd5G5yD9lM7iVbyH1kK7mfbCMPkAfJQ2Q72UF2kofJLvIIqSO7yR7yKNlLHiOPkyfIPvIkeYo8TZ4hz5LnyPNkP3mBvEheIi+TA+QV8ip5jbxO3iBvkrfI2+QdcpC8Sw6R98j75ANymHxIjpCPyMfkE/Ip+Rf5jHxOjpJj5AvyJTlOviJfk2/It+Q7coJ8T34gJ8mP5CfyMzlFfiG/kt/I7+Q0OUP+IGfJn+Qc+YucJ/XERywKlFBKGeVUUI3q1KAmddAgKv+roaHUSV00jIZTN42gkTSKRtMYGkvjaDxtRhNoc9qCJtIk2pIm0xSaSlvRNNqatqFtaTvanqbTDjSDZtIsmk1zaC7No/m0gHakhbQT7Uy70K60G+1OPbQHLaLFtISW0jLak5bTXrQ37UP70svo5bQfraD96QA6kA6ig+kQegWtpF46lA6jw+kIOpKOolW0mo6mY2gNHUvH0fF0Ap1IJ9HJdAqdSqfR6XQGnUlr6Sw6m86hc+mVdB6dTxfQhfQqejVdRBfTJfQaei1dSpfR6+j1dDldQW+gK+kqeiNdTW+iN9M1dC29hd5Kb6Pr6Hp6O72DbqB30o10E72L3k3voZvpvXQLvY9upffTbfQB+iB9iG6nO+hO+jDdRR+hdXQ33UMfpXvpY/Rx+gTdR5+Ej+AL+hR9mj5Dn6XP0efpfvoCfZG+RF+mB+gr9FX6Gn0dPoV/wWdwDD6Go/QN+iZ9i75N36EH6bv0EH2Pvk8/oIfph/QI/Yh+TD+hn9J/0c/o5/QoPUa/oF/S4/Qr+jX9hn5Lv6Mn6Pf0B3qS/kh/oj/TU/QX+iv9jf5OT9Mz9A96lv5Jz9G/6HlaT33UYsAIo4wxzgTTmM4MZjIHC2LBLISFMidzsTAWztwsgkWyKBbNYlgsi2PxrBlLYM1ZC5bIklhLlsxSWCprxdJYa9aGtWXtWHuWzjqwDJbJslg2y2G5LI/lswLWkRWyTqwz68K6sm6sO/OwHqyIFbMSVsrKWE9Wznqx3qwP68suY5ezfqyC9WcD2EA2iA1mQ9gVrJJ52VA2jA1nI9hINopVsWo2mo1hNWwsG8fGswlsIpvEJrMpbCqbxqbDg2wGm8lq2Sw2m81hc9mVbB6bzxawhewqdjVbxBazJewadi3cw5ayZew6dj1bzlawG9hKtordyFazm9jNbA1by25ht7Lb4Ha2jq1nt8NGdgfbwO5kG9kmdhe7m93DNrN72RZ2H9vK7mfb2APsQfYQ2852sJ3sYbaLPcLq2G62hz3K9rLH2OPsCbaPPcmeYk+zZ9iz7Dn2PNvPXmAvspfYy+wAe4W9yl5jr7M32JvsLfY2e4cdZO+yQ+w99j77gB1mH7Ij7CP2MfuEfcr+xT5jn7Oj7Bj7gn3JjrOv2NfsG/Yt+46dYN+zH9hJ9iP7if3MTrFf2K/sN/Y7O83OsD/YWfYnO8f+YudZPfMxiwMnnHLGORdc4zo3uMkdPIgH8xAeyp3cxcN4OHfzCB7Jo3g0j+GxPI7H82Y8gTfnLXgiT+IteTJP4am8FU/jrXkb3pa34+15Ou/AM3gmz+LZPIfn8jyezwt4R17IO/HOvAvvyrvx7tzDe/AiXsxLeCkv4z15Oe/Fe/M+vC+/jF/O+/EK3p8P4AP5ID6YD+FX8Eru5UP5MD6cj+Aj+Shexav5aD6G1/CxfBwfzyfwiXwSn8yn8Kl8Gp/OZ/CZvJbP4rP5HD6XX8nn8fl8AV/Ir+JX80V8MV/Cr+HX8qV8Gb+OX8+X8xX8Br6Sr+I38tX8Jn4zX8PX8lv4rfw2vo6v57fzO/gGfiffyDfxu/jd/B6+md/Lt/D7+FZ+P9/GH+AP8of4dr6D7+QP8138EV7Hd/M9/FG+lz/GH+dP8H38Sf4Uf5o/w5/lz/Hn+X7+An+Rv8Rf5gf4K/xV/hp/nb/B3+Rv8bf5O/wgf5cf4u/x9/kH/DD/kB/hH/GP+Sf8U/4v/hn/nB/lx/gX/Et+nH/Fv+bf8G/5d/wE/57/wE/yH/lP/Gd+iv/Cf+W/8d/5aX6G/8HP8j/5Of4XP8/ruY9bAgQRVDDBhRCa0IUhTOEQQSJYhIhQ4RQuESbChVtEiEgRJaJFjIgVcSJeNBMJorloIRJFkmgpkkWKSBWtRJpoLdqItqKdaC/SRQeRITJFlsgWOSJX5Il8USA6ikLRSXQWXURX0U10Fx7RQxSJYlEiSkWZ6CnKRS/RW/QRfcVl4nLRT1SI/mKAGCgGicFiiLhCVAqvGCqGieFihBgpRokqUS1GizGiRowV48R4MUFMFJPEZDFFTBXTxHQxQ8wUtWKWmC3miLniSjFPzBcLxEJxlbhaLBKLxRJxjbhWLBXLxHXierFcrBA3iJVilbhRrBY3iZvFGrFW3CJuFbeJdWK9uF3cITaIO8VGsUncJe4W94jN4l6xRdwntor7xTbxgHhQPCS2ix1ip3hY7BKPiDqxW+wRj4q94jHxuHhC7BNPiqfE0+IZ8ax4Tjwv9osXxIviJfGyOCBeEa+K18Tr4g3xpnhLvC3eEQfFu+KQeE+8Lz4Qh8WH4oj4SHwsPhGfin+Jz8Tn4qg4Jr4QX4rj4ivxtfhGfCu+EyfE9+IHcVL8KH4SP4tT4hfxq/hN/C5OizPiD3FW/CnOib/EeVEvfMLSQCMa1ZjGNaFpmq4Zmqk5tCAtWAvRQjWn5tLCtHDNrUVokVqUFq3FaLFanBavNdMStOZaCy1RS9JaaslaipaqtdLStNZaG62t1k5rr6VrHbQMLVPL0rK1HC1Xy9PytQKto1aoddI6a120rlo3rbvm0XpoRVqxVqKVamVaT61c66X11vpofbXLtMu1flqF1l8boA3UBmmDtSHaFVql5tWGasO04doIbaQ2SqvSqrXR2hitRhurjdPGaxO0idokbbI2RZuqTdOmazO0mVqtNkubrc3R5mpXavO0+doCbaF2lXa1tkhbrC3RrtGu1ZZqy7TrtOu15doK7QZtpbZKu1Fbrd2k3ayt0dZqt2i3ardp67T12u3aHdoG7U5to7ZJu0u7W7tH26zdq23R7tO2avdr27QHtAe1h7Tt2g5tp/awtkt7RKvTdmt7tEe1vdpj2uPaE9o+7UntKe1p7RntWe057Xltv/aC9qL2kvaydkB7RXtVe017XXtDe1N7S3tbe0c7qL2rHdLe097XPtAOax9qR7SPtI+1T7RPtX9pn2mfa0e1Y9oX2pface0r7WvtG+1b7TvthPa99oN2UvtR+0n7WTul/aL9qv2m/a6d1s5of2hntT+1c9pf2nmtXvNplg460anOdK4LXdN13dBN3aEH6cF6iB6qO3WXHqaH6249Qo/Uo/RoPUaP1eP0eL2ZnqA311voiXqS3lJP1lP0VL2Vnqa31tvobfV2ens9Xe+gZ+iZepaerefouXqenq8X6B31Qr2T3lnvonfVu+nddY/eQy/Si/USvVQv03vq5XovvbfeR++rX6ZfrvfTK/T++gB9oD5IH6wP0a/QK3WvPlQfpg/XR+gj9VF6lV6tj9bH6DX6WH2cPl6foE/UJ+mT9Sn6VH2aPl2foc/Ua/VZ+mx9jj5Xv1Kfp8/XF+gL9av0q/VF+mJ9iX6Nfq2+VF+mX6dfry/XV+g36Cv1VfqN+mr9Jv1mfY2+Vr9Fv1W/TV+nr9dv1+/QN+h36hv1Tfpd+t36Pfpm/V59i36fvlW/X9+mP6A/qD+kb9d36Dv1h/Vd+iN6nb5b36M/qu/VH9Mf15/Q9+lP6k/pT+vP6M/qz+nP6/v1F/QX9Zf0l/UD+iv6q/pr+uv6G/qb+lv62/o7+kH9Xf2Q/p7+vv6Bflj/UD+if6R/rH+if6r/S/9M/1w/qh/Tv9C/1I/rX+lf69/o3+rf6Sf07/Uf9JP6j/pP+s/6Kf0X/Vf9N/13/bR+Rv9DP6v/qZ/T/9LP6/W6T7cMgD3wqEEMCo/DE/CywWAvPAYHDA7XwouwHHYYwtAM3TAME14xHEaQEQzPwfNGiBEKzxhOw2WEGeGG24gwIo0oI9qIMWKNOCPeaGYkGM2NFkaikWS0hD+MZCPFSDVaGWlGa6ON0dZoZ7Q30o0ORoaRaWQZ2UaOkWvkGflGgdHRKIQbjU5GZ6OL0dXoZnQ3PEYPo8goNkqMUqPM6GmUG72M3kYfuMPoC3fCBvgZXoL74RbjMuNy2AQPwM1GP7gN1hkVRn9jgDHQGGQMNoYYVxiVhtcYagwzhhsjjJHGKKPKqDZGG2OMGmOsMc4Yb0wwJhqTjMnGFGOqMc2YbswwZhq1xixjtjHHmGtcacwz5hsLjIXGVcbVxiJjsbHEuMa41lhqLDOuM643lhsrjBuMlcYq40Z40lht3GTcbKwx1hq3GLcatxnrjPXG7cYdxgbjTmOjscm4y7jbuMfYbNxrbDHuM7Ya9xvbjAeMB42HjO3GDmOn8bCxy3jEqDN2G3uMR429xmPG48YTxj7jSeMp42njGeNZ4znjeWO/8YLxovGS8bJxwHjFeNV4zXjdeMN403jLeNt4xzhovGscMt4z3jc+MA4bHxpHjI+Mj41PjE+NfxmfGZ8bR41jxhfGl8Zx4yvja+Mb41vjO+OE8b3xg3HS+NH4yfjZOGX8Yvxq/Gb8bpw2zhh/GGeNP41zxl/GeaPe8BmWCSYxqclMbgpTM3XTME3TYQaZwWaIGWo6TZcZZoabbjPCjDSjzGgzxow148x4s5mZYDY3W5iJZpLZ0kw2U8xUs5WZZrY225htzXZmezPd7GBmmJlmlplt5pi5Zp6ZbxaYHc1Cs5PZ2exidjW7md1Nj9nDLDKLzRKz1Cwze5rlZi+zt9nH7GteZl5u9jMrzP7mAHOgOcgcbA4xrzArTa851BxmDjdHmCPNUWaVWW2ONseYNeZYc5w53pxgTjQnmZPNKeZUc5o53ZxhzjRrzVnmbHOOOde80pxnzjcXmAvNq8yrzUXmYnOJeY15rbnUXGZeZ15vLjdXmDeYK81V5o3mavMm82ZzjbnWvMW81bzNXGeuN2837zA3mHeaG81N5l3m3eY95mbzXnOLeZ+51bzf3GY+YD5oPmRuN3eYO82HzV3mI2adudvcYz5q7jUfMx83nzD3mU+aT5lPm8+Yz5rPmc+b+80XzBfNl8yXzQPmK+ar5mvm6+Yb5pvmW+bb5jvmQfNd85D5nvm++YF52PzQPGJ+ZH5sfmJ+av7L/Mz83DxqHjO/ML80j5tfmV+b35jfmt+ZJ8zvzR/Mk+aP5k/mz+Yp8xfzV/M383fztHnG/MM8a/5pnjP/Ms+b9abPtBzgIA7qYA7uEA7NoTsMh+lwOIIcwY4QR6jD6XA5whzhDrcjwhHpiNLnTJuYmdmjzE+LshXNUTRP0QJFC/UeU6vH1E6fplf7qdZjdO3YuWO1apvoPaaPnz5t7GS92k+DisdMrB0zZ+q4KWPnBY25cG2PlpXZQ9EirWRMtRysxib+1qxMRbP0UsVzrOJZ6uc51s/T3ytf0QK9VMkw1k+1Uv/YY20S1LORROObSpSteGZnKZqtaE5QeaP3Jly45uWjq2v5BPyl9Zo9cUrNWG2iTfReSuaJSuZefpkn+mXupWSc6Ke0V286cVJQ70Y8JjWVLUfNMKcgePL42rFjp02pnlYzcYzWt3rMnNljtSk2UV2KFC3W+vonP8UmvG/N9Nl8Cv7SLve/Na3RW7l5iuZrl/vfmuZX2bTqGdNnza6dPmPCWFY6bTwbO2283k9Nb7qaXj//9KY3WpI8pcy8LG2An1ttI255ajp5BdoAP7daPxno7zvLJkEDG6lkVlOV5Kvlyc/RBvlfnu2f5yC5KLPlogz2L8oc/6IMVlLPUVIP9ks9xyZicO3EaePFHPnbP26BmkFBlj5YLdgcZdhXNJLrykbX3kbX8y9ca0P9s1rQSAMFapUKisWU6dPGz/LfdVQ8OyoT7Kjm2DFH0VxF1Wp1VHrsWKBoR0ULFVWbrKPi1rFY0RJFSxX1u4CsQsW/UPEvVHwLFd9CxbdQ8S1UfAsV30LFt1DxLVR8CxXfQsW3UPEtLBP9JkyvxbJQ/va39VBz7qF491C8eyjePRTvHop3D8W7h+LdQ/HuoXj3ULx7KN49SsVgm+ecCzyL1HyVC8xSLjCrSPFWrjCrSPFWLjGrSPEuUryLFO8ixbtI8S5SvIvUvIuUvouVvosV/2LFv1jxL1b8ixX/YsW/WPEvVvyLFf9ixb9Y8S9W/IsV/2LFv1jxL1H8SxT/EsW/RPEvUfxLFP8Sxb9E8S9R/EsU/xLFv0TxL1H8SxT/EsW/RPEvVfxLFf9Sxb9U8S9V/EsV/1LFv1TxL1X8SxX/UsW/VPEvVfxLFf9Sxb9U8S9T/MsU/zLFv0zxL1P8yxT/MsW/TPEvU/zLCh09pOewN7ijuuFS71Hqp9Vj/R6t36wp1bMm+K+nX7i2R8nOzFQ0S9FsRXMUzVU0T9F8RQsU7ahooaI9FC1StFjREkVLFfVrI1sF3ewsxT9L8c9S/LMU/yzFX4Xd7KyC4IFjpk+dWl09ZszYabODZzW6UT2UJFlKkiwlSZaSJEtJkqUkUaE4W4XibBWKs7OVJNlKkmwlSbaSJFtpIltpIltpIlvxz1b8sxX/bMU/W/HPVvxzFP8cxT9H8c9R/HMU/xzFX4Xn7BzFP0fxz1H8cxR/FZuzcxT/HMU/R/HPUfxzFf9cxT9X8c9V/HMVfxW1s3MV/1zFP1fxz1X8cxX/XMU/V/HPVfxzFf9cxV9F7+w8xT9P8c9T/PMU/zzFX8Xz7DzFP0/xz1P88xT/PMU/T/HPU/zzFP88xT9f8c9X/FWsz85X/PMV/3zFP1/xz1f88xX/fMU/X/H/P22cW2wc13nHuVxeRIoS5UtudtxNUReNotTSnvPNDZFr7i7Px9huIyYOkdhpI6/EEbkQuUvtRYrzEsNo0TzEsdumAXoBUrt9aB8iKxc0ThrURfqSPjUvvTxUTQqkFxe9pA+9AEGgnpn5rbicrIDhd76ZM9//nJnl+X3fDFch+iH6Ifoh+iH6sN9E6EfoR+hH6EfoR+hH6EfoR+hH6EN9E6EfoR+hH6FPHmDIAwx5gCEPMOQBhjzAkAcY8gBDHmDIAwx5gCEPMOQBhjzAkAcY8gBDHmDIA0yCPvmAIR8w5AOGfMCQDxjyAUM+YMgHDPmAIR8w5AOGfMAk6DfQb6BPTmDICQw5gSEnMOQEhpzAkBMYcgJDTmDICQw5gSEnMA30KYVME33yAkNeYMgLDHmBIS8w5AWGvMCQFxjyAkNeYMgLDHmBIS8w5AWGvMCQFxjyAkNeYMgLDHmBIS8w5AGGPMCQBxjyAEMeYMgDDHmAIQ8w5AGGPMCQBxjyAEMeYMgDDHmAIQ8wcN3AdQPXDVw3cN3AdQPXDVw3cN3AdQPXDVw3cN3AdQPXDVw3cN3AdQPXDVw3cN3AdQPXDVw3cN3AdQPXjaKv6Cv6ir6ir+irLu3029dTD8BLSznZs1Z+zJ4zS3kdMrFHsAE2xEbY+MRur3e1fal3ffKsBraJbWHXsQ5bXAsL1S1Ut1DdQnUL1S1Ut1Dd1hlFPcYmWPRhuYXlFpZbWG5huYXlFpZbY1Z8DXop3evdOJwUQLcA3QJ0C9AtQLcA3QJ0C9AtQLcA3QJ0C9AtQLcA3QJ0C9AtQLcA3QJ0C9AtQLcA3QJ0C9AtQLcA3QJ0C9AtQLcA3QJ0C9AtQLcA3QJ0C9AtQLcA3QJ0C9AtQLcA3QJ0C9AtQLcA3QJ0C9AtQLcA3QJ0C9AtQLcA3QJ0C9AtQLcA3QJ0C9AtQLcA3QJ0C9AtQLcA3QJ0C9AtQLcA3QJ0C9AtQLcA3QJ0C9AtwLYA2wJkC5AtQLbR+vyw1+0NTmx30n466Axyb7mxd7DbzptL7W5vmO6lnfaKOxh0fO2e7z7mhhx/vEdr5cJ+J3vOUDhbE52XL+ynO0Wnezq++xGt+VxrrpkO2/MbbZ9HL6Iz94zfVfU68x/e9a25TGj+yfbBQXvh59v7l7bbs78wmv3AaPajnUWUZzc71Q/t9uaf6uzst6sfbo8WGUV1c7dTbfltc9BZeXxiBKt0GPvL7bsTX0knp5uOp9sZT/f+0dFTi8nk589dyiazk01mfjvdG7YXiTX3yWxK2cFhPqUs2PzVfEp7xZS6o9lPdBZ7xXyq/d3ewiCbTH0+N9WhnxO61QM/n8t+8+58L7vAK5PXdrU0vJXe5N0ZTd6d3t27U3wmgKMFjhY4WuBogaMFjhY4WuBoKZItRbKlSLYUyZYi2VIkW2BqgakFphaYWmBqgakFphaYWmBqgakFphaYWmBqgakFphaYWmBqgakFphaYWmBqgakFphaYWmBqgakFphaYWmBqgakFphaYWmBqtdAXymKhLBbKYqEsFjAqYFTAqIBRoSwWymIBoAJABYAKABUAKgBUAKgAUAGgAkAFgAoAFQAqAFQAqABQAaACQAWACgAVACoAVACoAFChGBaKYYGdAjsFdgrsFNgpsFNgp8BOgZ0COwV2CuwU2CmwU2CnwE6BnQI7BXYK7BTYKbBTYKfAToGdAjsFdgrsFNgpsFNgp8BOgZ0COwV2CuwU2CmwU2CnwE6BnQI7BXYK7BTYKbBTYKfAToGdAjsFdgrsFNgpsFNgp8BOgZ0COwV2CuwU2CmwU2CnwE6BnQI7BXYK7BTYKbBTYKfAToGdAjsFdgrsFIphoRgWimGhGBbYKrBVKIaFYlgohoViWGCvwF6BvUIxLBTDQjEsFMNCMSwUw0IxLBTDQjEsFMNCMSwUw0IxLBTDQjEsFMNCMSwUw0IxLBTDQjEsFMNCMSwUw0IxLBTDQjEsFMNCMSwUw0IxLBTDQjEsFMNCMSwUw0IxLBTDQjEsFMNCMSwUw0IxLBTDQjEsFMNCMSwUw0IxLBTDQjEsFMNCMSwUw0IxLBTDQjEsFMNCMSwUw0IxLBTDQjEsFMNCMSwUw0IxLBTDQjEsFMNCMSwUw0IxLDwkFx6SC8WxUBwLxbFQHAvFsVAcC8WxUBwL/Bf4L/Bf4L/Af4H/Av8F/gu8F3gv8F7gvcB7gfcC7wXeC7wXeC/wXuC9wHuB9wLvBd4LvBd4L/Be4L3Ae4H3Au8F3gu8F3gv8F7gvcB7gfcC7wXeC7wXeC/wXuC9wHuB9wG8D+B9AO8DeB/A+wDeB/A+gPcBvA/gfQDvA3gfwPsA3gfwPoD3AbwP4H0A7wN4H8DvAH4H8DuA3wHrRMA6EbBOBKwTAetEwDoRsE4ErBMB60TAOhGwTgSsE0Ey1mHcrBMB60TAOhGwTgSsEwHrRMA6EbBOBKwTAetEwDoRsE4ErBMB60TAOhGwTgQNnR/sptfby75SaF8ZpDu9vaJ54H/sHs+b19r77eFgfrfT71ybHw58Dj6fd5zP+yyMD/d82l8EbTYWro0ujYaDhe32TjrYnd9Ph+nO/H77WvvKXL99JfVnDtJri4PdTjd7pT3IzbFBz6sORteWRgcHaf9itmuvdyPt+0YRtxUeL8SueeHuXHsvvVL15cn8Tmc/3Zvf9v5wdjetXm9fn/9k+7lOt+oLk+rQb8/1to9d6XTbe1fbV6p+m/dDTdm1n+5X/VY43VG36reFgT9+dXcuC7KYHzhIZw/S5bw5HPjCZD7/Wb3W8xPyM5zLpuIrmusLXvx6Ybzogt8ys5PVLbtL3gx2fcz8MtXXi98Vb+tYg7VYwQbYEBthY2yCbWCb2BZ2HeuwWtg6+nX06+jX0a+jX0e/jn4d/Tr6dfTr6NfRr6NfR7+Ofh19g75B36Bv0DfoG/QN+gZ9g75B36Bv0DfoG/QN+gZ9i75F36Jv0bfoW/Qt+hZ9i75F36Jv0bfoW/Qt+hZ9QV/QF/QFfUFf0Bf0BX1BX9AX9AV9QV/QF/QF/QD9AP0A/QD9AP0A/QD9AP0A/QD9AP0A/QD9AP0A/QD9EP0Q/RD9EP0Q/RD9EP0Q/RD9EP0Q/RD9EP0Q/RD9EP0I/Qj9CP0I/Qj9CP0I/Qj9CP0I/Qj9CP0I/Qj9CP0I/Rj9GP0Y/Rj9GP0Y/Rj9GP0Y/Rj9GP0Y/Rj9GP0Y/Rj9BP0E/QT9BP0E/QT9BP0E/QT9BP0E/QT9BP0E/QT9BP0G+g30G+g30G+g30C/gX4D/Qb6DfQb6DfQb6DfQL+BfgP9JvpN9JvoN9Fvot9Ev4l+E/0m+k30m+g30W+i30S/iX4T/Rb6LfRb6LfQb6HfQr+Ffgv9Fvot9FvoKzpFTlZ3cMbBGQdnHJxxcMbBGQdnHJxxcMbBGQdnHJxxcMbBGQdnHJxxcMbBGQdnHJxxcMbBGQdnHJxxcMbBGQdnHJxxcMbBGQdnHJxxcMbBGQdnHJxxcMbBGQdnHJxxcMbBGQdnHJxxcMbBGQdnHJxxcMbBGQdnHJxxcMbBGQdnHJxxcMbBGQdnHJxxcMbBGQdnHJxxcMbBGQdnHJxxcMbBGQdnHJxxcMbBGQdnHJxxcMbBGQdnHJxxcMbBGQdnHJxxcMbBGQdnHJxxcMbBGQdnHJxxcMbBGQdnHJxxcMbBGQdnHJxxcMbBGQdnHJxxcMbBGQdnHJxxcMbBGQdnHJxxcMbBGQdnHJxxcMbBGQdnHJxxcMbBGQdnHJxxcMbBGQdnXKQLH8nfaC7cKMxHij9lvJGbpY+MH6cv3Ri3ivPgjIMzDs44OOPgjIMzDs44OOPgjIMzDs44OOPgjIMzDs44OOPgjIMzDs44OOPgjIMzDq44eOLgiYMnDp44eOLgiYMnDp44eOLgiYMnDp44eOLgiWuMdZknPHHwxMETB08cPHHwxMETB08cPHHwxMETB08cPHHwxMETB08cPHHwxMETB08cPHHwxMETB08cPHHwxMET10K/hX4L/Rb6LfTX0V9Hfx39dfTX0V9Hfx39dfTX0V9Hfx39dfTX0V9Hfx39dfQd+g59h75D36Hv0HfoO/Qd+g59h75D36Hv0HfoO/QVfa0vPF38wj2XG/airqgr6oq6ol48eakr1FaorVBbobZCbYXaCrUVaivU1nPjeA1sE9vCrmMdtpiNQm2F2gq1FWor1FaorVBaobRCaYXSCqUVSitUVqisUFmhskJlhcoKlRUqK1RWqKxQWaGyQmU1Yz3mB5UVKitUVqisUFmhskJlhcoKlRUqK1RWqKxQWaGyQmWFygqVFSorVFaorFBZobJCZYXCCoUVCisUViisUFihrkJdhboKdRXqKtRVqKtQV6GtQlkNxnEZP1RVqKpQVaGqQlWFqgpVFaoqVFWoqlBVoapCVYWqClUVqipUVaiqUFWhqkJVhaoKVRWqKlRVqKpQVaGqQlWFqkq1plRrSrWmVGtKtaZUawpFFYoqFFUoqlBUoahCUY3HeswXiioUVSiqUFShqEJRhaIKRRWKKhRVKKpQVKGoUq0p1ZpCVaVaU+iq0FWhq0JXha4KXRW6KnRV6KrQVaGrQleFrgpdFboqdFXoqtBVoatCV4WuClUVqipUVaiqUFWhqkJVhaoKVRWqKlRVqKpQVaGqQlWFpgpNFZoqNFVoqtBUoalCU4WmCk0Vmio0VWiq0FShp0JPhZ4KPRV6KvRUqKlQU6GmQk2Fmgo1FWoq1FSoqVBToaZCTYWaCjUVairUVKipUFOhpip6ih6cVPio8FHho475qOgoOoqOolNUweZcwVFv61iDtVjBBtgQG2FjbIJtYJvYFnYdO9bVwtbRqwcnRt3ttD+43Oun25f2Tlwb9YZp9vWl/iDdpg/nGDQMGgYNg4ZxC/udbv5lq/Ryr8vZVpbST1zea+/76OxhLAE2JG5I3JC4IXHDcT9dudIb9Qejg7Tf6fVXrnSup2PnxMAPuXvXSzs7u8OxV5wdMYuEK59w5ROuRMKVT7jyDfo16Ncwc3udfhuH29IIFw7SQToc7+auNJKFwW56LWXCjeacG/V7OMyqwawajKuJXhO9JuNqMq4m42oiXeR1ps4npF5kQIZvLpp68ZzC1E24lA6Gnf32kPtZL1jsrTvW66bD3U5/e2l4o5c3Bkt+V371dleGu/2U9uB4drFpr+TXGqcIFctSu9/v3dhLrwwX89boYDm3/axbcXC7d6NbtC55sSW6bXdX7rYuDfK01Ph7vdzrD3ezL8e191Y63WH2cbw87PS6x9Nro8719l7avZzO7/ZGg/SE/7Tu9XY6l9t73d5wOevsE9y94cHd5qX8TY3hNaDh9Z/htZ3h9Zy3go2xHDfs5wMfWHyLH3B+kdR4S/wiqfGW/kVS422IjbDoFcmNtw1sEzvWWcc6bPHRCUL0Q/RD9EP0Q/RD9EP0Q/RD9EP0+YUM+IUMsl/Ig0t7vctXF/09yux84e1dKWx/iD8c7La30/n85+L21dwuXens7fm1pfeJIhq/ULwM9La5XPTo+zu8OOx32jujg8L28be7hd27spB9B3Kv+JQELa5LS5c63euXRj7IMGsVfZZ7B2mXnYP9jv9oti+n/rN0/a5THYy6C1fSff9pmst+zA8O/HjnLu+NLs3vpm2vvt1p7/uV7Pj+aMDnKz050R4vaWGR/pkWd6LFnWhxJ1rciRZ3osWdaHEnWtyJFneixZ1ocSda3IkWS2OLpbEVoROhE6EToROhE6FTpJmGh5iN6K6NsQm2gW1iW9h1rMNqYYuyydt6YWPixcSLiRcTr0grffZUx+bjV7CnYE/BmoI1BWsK1hSs+exrHetWipebF/O3wKt+GUj73fbQL17ZW9Nj2cvZGx3/mcxfy2athd00M4tX28WB/B1s1loZv4fNnGPZm9K837B9PT/qI1882BsNBp2d7vHsPSuvjZfzdt68J9+Vv2vm4KmJPfmOpWxA+VCXs1bxHjnfud8+6FxbupQOi+7H87fJtPPBF+1ju2nRWLrevs7h/C0ze4fjjkv+ohStk+N3zhy42zqez529fuK0uiOCrRTvnwvnBC+gGca4cTx/A82Z13pEXs4uH83DS7A0HA/5mB988abeTzh7FZ/djsx6umYmvyL56PLbzLNz5dm58uxceXauPuua6/pf/OpBp37i8nN9v7p0LuffyT6Vf5974suE90y0+9kfHqfL+dORR/z9rR82zWHTLucPKosOd5vmsGlP3v2KRd7pqGuOunY5/wZHEe1u0yzno833rh5+6zv3T4y/6lAagRw2g8PRymEzOKosR93gUH1iTHLYnOgQHjajw2Z8ZGTmiGePeHLEC454E7GTIweiI95RseTkkYty7qhbP+qao6496spRNzh+eH/OTbTrE20z0c4nupf6ZaG4ef7jmH3rJvtmziOX2wcTfr3kt0r+uQk/Kp1vj/jGBWxhyY9Kflzykwk/zGzJD0t+VPLjkp8cn/AnjkWl2NGU41HJj0v+ZOzJvnEpdlyKHU/pH5f8ydiTx5JS7KQUOynFTqacPxl7fL3D8T0o+WHJj0p+XPLHscNSrGl+VPLjkj85tqh0flQaW1SKF5XiRaWxTfaNS7HjUux4Sv+45E/GnjyWlGInpdhJKXYy5fzJ2ONrEpXu19gPS35U8uOSP44dlWKFU/yw5EclPy75k7Enzy1rTTsel/zJecel8+PS+XFpbHEpXlwa2+SxpBQ7KcVOSrGTKedPxh6POy7dr7Eflvyo5Mclfxw7LsUKp/hhyY9KflzyJ2NPnhuVYkdTjkclPy75k7En+5bnUdae1n/ymial85PS+Unp/KQ0tqQ0tnHspHS/xn5Y8qOSH5f8ceykFCuc4oclPyr5ccmfjD15blSKHU05HpX8uORPxp7sG5dix6XY8ZT+ccmfjD15rHyNyvMqj6U4f5xNX+wN99v9q0tFnur3kplIKXORUqZjp/jxhF/Psp0Jv1XyZdx/5VK733mEZOu+/GCzXnSoZ0HPTdlXL+2TKf2k1C+cEi+cEi+cEi8sxUumjC+ZMr5kyviSKeNLpowvmTK+ZMr4kh8fXyv48fEd2VfuJ1P6leOFU+KFU+KFU+JNu37x+EM2ZV+5XzilX1jSLcU7sq/cL5zSL4+Xff18mG538grsmOvu5Mn/uGHGDXvsk2m/l7UWe928Xlgc3sj9pfxZa9Y6lj3iLhqdojJbHHTyym8pf+yat/Jnr3mnbqcIdLzvy+7L7axILP4zM54z+9El1Qu7+4tbH3g8e6w6UU3mg53w80Lx5KGflYcTh/Map6hLi/+TKG/mJxWrQNa/2Jl3PZXX63lVT+V/uOPuI4jigceJsZv/0f99d4v9w7/+P3l3X8nN//D/1MRjnnxv/jCFBxLZRQj8r2PQXKdtJto2a880np1Zq6QzlcpuZWfmvpla5dmZD1QuzmxVGjOPVta8XfPHmt62vJ/ZRyqPzjzv+z3q9/+c98/7/e+b2ZpZ9T/P+u0xv33Kb3N+K3qc8z3OensW/2e9/15v34v/mPcz+4T33+/tBlb9fuetw3/c+97ObFYWZypeK/v5WmVu7Z7Kd35UeeNHlVM/qvR+WFn7YeX/Xq+srt17uva/D96p/c/mu2v/vXm+9l8/OF/7euW+yr1r4fnaf/z7+dq/bdyp/cvm6do/++2fvn++9o+bQe37fvuHr9ra9776QO1f37S17962tb+v2trMm5Wl1+/82dr5N4+f0jcr1a2Z237et8/d3rz9/O1bt+eP3fb7/s53/NvNd9b+xm9/7be/2rxT+4tvP1r79oXztT+/cNqrH/fDOnm6dvZblce+9dK3Zt/wyq9XTnx5415vVr72yp3an378dG319cry2lLlT74otW988U4tk7Vff/jd+vXNh2uPfa3yx/6kN75aWX3t4mu9177w2tzBzedvvnyz+q6b526u3fzOze/d/MHNhS/6Pt+s3OMv1yl/2U59+cHzXuDk2iOnq1urv185+2rlpVcrd16tPPvqwavPv1r9o3vv1P6weqf2e/berd/1Z/7OU+drf/DE+Vz5La/85MP6hVdee2X2t/0of+uJO7XP+yPfrDxUedvMaf8hePtXnjpde+wb3rtQedvaE7O/+bnztdXPfepzs0u/sflo7df99mv+Krz8mUdrL714uvbZFx+tzbxYeV/txcpnvMivvnC69ssvnK89/8LLL8xeH52vzYwqw8F7aoP8urxl7cGD07Ve90ytu/Ge2gPHH9x6h3371qKtbi34wX6z8kDl/nwI7/jKRVtbe71y/5cf/hn1Y/5K+8y5zK6ttGs/pc9eXKtdzOL5HZ//pQd+Qn9x4121jz1zrvbMxuna/ZV7t+7zs573d2/OB16t1qqPVS9Ue9WXqm9UF4996INnax/0J39v8webs6sXahfOXqg+uWFrT/hr8fjG+dr7N+La6kZt4+zGX258d+M/Nxa+sOGvzINb73z/g1tvtW/ZuqeyunXKrm7NVvxtsDNbZ1fvrM6url5c/dRqdXXmsZnZ599ama+8Xnn5Sx9+6syZJ19fvPOhJ28tbX7sVuXTt376qezn2gefubXw6VszW8987KNfqlQ++/SvvPjiTPOhJ2+Zpz5669mHnn7y1rZvrGWN533j1ENfeutM8+nBYHim+FcZjDIzM/I7Pj7I9+T+mcN/lcIf+b5ZY1R0y7sPiqOD8Qk+7ig/6k1lMHMmbw+KAF6ychj344MsTB6qMj47P0yfQfav4rfJkQzuNt4+M/P/eWoimAplbmRzdHJlYW0KZW5kb2JqCgoyMDggMCBvYmoKWzAgWzc3OF0gMyBbMjUwXSAxMSAxMiAzMzMgMTUgWzI1MCAzMzMgMjUwXSAyOSBbMzMzXSAzNiAzNyA2MTEgNDEgWzYxMV0gNDMgWzcyMiAzMzNdIDQ3IFs1NTZdIDU1IFs1NTZdIDU4IFs4MzNdIDcwIFs0NDRdIDcyIFs0NDQgMjc4XSA3NiBbMjc4XSA3OCBbNDQ0IDI3OCA3MjJdIDg1IFszODkgMzg5IDI3OF0gODkgWzQ0NCA2NjcgNDQ0IDQ0NCAzODldIDIwMTQgWzMzM11dCmVuZG9iagoKMjA5IDAgb2JqCjw8IC9MZW5ndGggNDE5IC9GaWx0ZXIgWy9GbGF0ZURlY29kZV0gL0RMIDkwNyA+PgpzdHJlYW0KeJxdk92KpDAQhe99ilzOXgxqOj/b0AhLDwPC/rHuPEBMyp7AdJS0fdFvv7GOzMUKKh/GOuckVfW5f+lTXEX9O89+oFVMMYVMt/mePYmRLjFVrRQh+nUnfvqrW6r6/MMtP92VxPc4UnZrnNNAOU7P/eo+on/eVolAE1b+fSwk5M79y/C4rXTt0zSL06mq/5SytzU/xNO3MI/0pap/5VCKpYt4ejsPhYf7snzQldIqmqrruFALU34OdFucLybShapTU65OnF7L1VWUwn/f1f7bOPl3l3n5oSwvr2PHNDLJryAP2r9NIM/UNqAAakEECkwHxyQVk2pBGiRBR5ABQV1BXUJdQV1CXUH9YJj0AWRBCuRAlklB3UBdQd1AXaGKQRWFKgZVigkmDYJPA58KCmZXgGsD1wquDVwrAo0gZDDIoLGDBjuosYMGO6glaALhjGwDQgaLDBoZLDJoZLDIoJHBIoNGBosMGhksMmhksMigkcEig8ZpWj5NG7ZEsmmP3F57H22Nts3F51j4e86lXXl4eAS2no2JPudrmZftL77/AZGU5DQKZW5kc3RyZWFtCmVuZG9iagoKMjEwIDAgb2JqCjw8Ci9BdXRob3IgKEFudG9pbmUgZGUgU2FpbnQtRXh1cOlyeSkKL0NyZWF0aW9uRGF0ZSAoRDoyMDE3MTIwNjIyNDkyMSswMCcwMCcpCi9DcmVhdG9yIChjYWxpYnJlIDIuNjkuMCBbaHR0cHM6Ly9jYWxpYnJlLWVib29rLmNvbV0pCi9Qcm9kdWNlciAoY2FsaWJyZSAyLjY5LjAgW2h0dHBzOi8vY2FsaWJyZS1lYm9vay5jb21dKQovVGl0bGUgKFRoZSBMaXR0bGUgUHJpbmNlKQo+PgplbmRvYmoKCnhyZWYKMCAyMTEKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAxMDIyODgwIDAwMDAwIG4gCjAwMDEwMjMzNzMgMDAwMDAgbiAKMDAwMTAyMzQ1NyAwMDAwMCBuIAowMDAxMDI4MzIzIDAwMDAwIG4gCjAwMDEwMjgzNjggMDAwMDAgbiAKMDAwMTAyODQxMyAwMDAwMCBuIAowMDAxMDI4NjMwIDAwMDAwIG4gCjAwMDEwMjg4NjAgMDAwMDAgbiAKMDAwMTAyOTAxMCAwMDAwMCBuIAowMDAxMDI5MjM0IDAwMDAwIG4gCjAwMDEwMjk0NzAgMDAwMDAgbiAKMDAwMDAwMDA3NSAwMDAwMCBuIAowMDAxMDI5NjI3IDAwMDAwIG4gCjAwMDAwMDEwMTQgMDAwMDAgbiAKMDAwMTAyOTc4NyAwMDAwMCBuIAowMDAxMDMwMDIwIDAwMDAwIG4gCjAwMDEwMzAyNTkgMDAwMDAgbiAKMDAwMDAzMTA3NyAwMDAwMCBuIAowMDAxMDMwNDE4IDAwMDAwIG4gCjAwMDAwMzI1NDUgMDAwMDAgbiAKMDAwMDAzNDA2NyAwMDAwMCBuIAowMDAwMDQ3MjUyIDAwMDAwIG4gCjAwMDAwNDc3ODIgMDAwMDAgbiAKMDAwMDA1MzQ3NyAwMDAwMCBuIAowMDAwMDU0MjM2IDAwMDAwIG4gCjAwMDAwNjE5NTEgMDAwMDAgbiAKMDAwMTAzMDYyMCAwMDAwMCBuIAowMDAwMDYzNzg4IDAwMDAwIG4gCjAwMDEwMzA4MzAgMDAwMDAgbiAKMDAwMDA2NjI5NiAwMDAwMCBuIAowMDAwMTAxNzc4IDAwMDAwIG4gCjAwMDEwMzA5OTAgMDAwMDAgbiAKMDAwMDEwMzk5MiAwMDAwMCBuIAowMDAwMTEwMjgyIDAwMDAwIG4gCjAwMDAxMTY4MTcgMDAwMDAgbiAKMDAwMDEyMjY5MCAwMDAwMCBuIAowMDAxMDMxMTcwIDAwMDAwIG4gCjAwMDAxMjM3MTggMDAwMDAgbiAKMDAwMDEzMDMwNSAwMDAwMCBuIAowMDAwMTUwMjk1IDAwMDAwIG4gCjAwMDEwMzEzODAgMDAwMDAgbiAKMDAwMDE1MTU2MCAwMDAwMCBuIAowMDAxMDMxNTg2IDAwMDAwIG4gCjAwMDAxNTQxNjMgMDAwMDAgbiAKMDAwMDE3MjAyNiAwMDAwMCBuIAowMDAwMTg2MTA5IDAwMDAwIG4gCjAwMDEwMzE3MzUgMDAwMDAgbiAKMDAwMDE4NzYwNCAwMDAwMCBuIAowMDAwMjAyNDMxIDAwMDAwIG4gCjAwMDEwMzE5NDEgMDAwMDAgbiAKMDAwMDIwNTY2MyAwMDAwMCBuIAowMDAwMjI1OTAzIDAwMDAwIG4gCjAwMDEwMzIxMjEgMDAwMDAgbiAKMDAwMDIyODA3MCAwMDAwMCBuIAowMDAwMjQ0OTc5IDAwMDAwIG4gCjAwMDEwMzIzMTIgMDAwMDAgbiAKMDAwMDI0NzkwNCAwMDAwMCBuIAowMDAwMjk3ODM4IDAwMDAwIG4gCjAwMDEwMzI0OTIgMDAwMDAgbiAKMDAwMDI5OTcwNyAwMDAwMCBuIAowMDAwMzE0NDY5IDAwMDAwIG4gCjAwMDEwMzI2ODMgMDAwMDAgbiAKMDAwMDMxNjMwMCAwMDAwMCBuIAowMDAxMDMyODc0IDAwMDAwIG4gCjAwMDAzMTg2NTIgMDAwMDAgbiAKMDAwMDMyMDY3MCAwMDAwMCBuIAowMDAwMzM2MTAwIDAwMDAwIG4gCjAwMDEwMzMwMjMgMDAwMDAgbiAKMDAwMDMzODcyOCAwMDAwMCBuIAowMDAwMzQ4OTY3IDAwMDAwIG4gCjAwMDAzNjI5MDQgMDAwMDAgbiAKMDAwMTAzMzIxNCAwMDAwMCBuIAowMDAwMzY0NDEzIDAwMDAwIG4gCjAwMDAzNzU4NjIgMDAwMDAgbiAKMDAwMDM4OTY2NiAwMDAwMCBuIAowMDAxMDMzNDA5IDAwMDAwIG4gCjAwMDAzOTEzOTAgMDAwMDAgbiAKMDAwMDQwMDI3NSAwMDAwMCBuIAowMDAxMDMzNjA0IDAwMDAwIG4gCjAwMDA0MDI3MTUgMDAwMDAgbiAKMDAwMDQyMTMzMiAwMDAwMCBuIAowMDAxMDMzNzk1IDAwMDAwIG4gCjAwMDA0MjMxMzEgMDAwMDAgbiAKMDAwMDQ1MzkwNiAwMDAwMCBuIAowMDAxMDMzOTc1IDAwMDAwIG4gCjAwMDA0NTU4MzYgMDAwMDAgbiAKMDAwMTAzNDE2NiAwMDAwMCBuIAowMDAwNDU4NzU3IDAwMDAwIG4gCjAwMDEwMzQzMTUgMDAwMDAgbiAKMDAwMDQ2MTU1OSAwMDAwMCBuIAowMDAwNDg1MTU5IDAwMDAwIG4gCjAwMDEwMzQ0NjQgMDAwMDAgbiAKMDAwMDQ4NjU4OCAwMDAwMCBuIAowMDAwNTE0NDg3IDAwMDAwIG4gCjAwMDEwMzQ2NTUgMDAwMDAgbiAKMDAwMDUxNjE1NCAwMDAwMCBuIAowMDAwNTQ0NjkxIDAwMDAwIG4gCjAwMDEwMzQ4NDYgMDAwMDAgbiAKMDAwMDU0NjQ4OSAwMDAwMCBuIAowMDAxMDM1MDM3IDAwMDAwIG4gCjAwMDA1NDg3MjUgMDAwMDAgbiAKMDAwMTAzNTE4NyAwMDAwMCBuIAowMDAwNTUxMTEyIDAwMDAwIG4gCjAwMDA1NzM1MzggMDAwMDAgbiAKMDAwMTAzNTMzOCAwMDAwMCBuIAowMDAwNTc1MTgyIDAwMDAwIG4gCjAwMDEwMzU1MzIgMDAwMDAgbiAKMDAwMDU3NzY2NCAwMDAwMCBuIAowMDAwNjAyMTQwIDAwMDAwIG4gCjAwMDEwMzU2ODMgMDAwMDAgbiAKMDAwMDYwNDA3NCAwMDAwMCBuIAowMDAxMDM1ODc3IDAwMDAwIG4gCjAwMDA2MDY0ODQgMDAwMDAgbiAKMDAwMTAzNjAyOCAwMDAwMCBuIAowMDAwNjA5MjIxIDAwMDAwIG4gCjAwMDA2MjEwOTAgMDAwMDAgbiAKMDAwMTAzNjE5MCAwMDAwMCBuIAowMDAwNjIzMjk4IDAwMDAwIG4gCjAwMDA2NjMzOTcgMDAwMDAgbiAKMDAwMTAzNjM4NCAwMDAwMCBuIAowMDAwNjY0ODI1IDAwMDAwIG4gCjAwMDA2ODUwMTIgMDAwMDAgbiAKMDAwMTAzNjU2NyAwMDAwMCBuIAowMDAwNjg2NzgzIDAwMDAwIG4gCjAwMDA3MDQ1MjkgMDAwMDAgbiAKMDAwMTAzNjc2MSAwMDAwMCBuIAowMDAwNzA2MjI0IDAwMDAwIG4gCjAwMDA3NTQ0MzcgMDAwMDAgbiAKMDAwMTAzNjk1NSAwMDAwMCBuIAowMDAwNzU2MjE2IDAwMDAwIG4gCjAwMDA3NzUwMTkgMDAwMDAgbiAKMDAwMDgwMzg0OSAwMDAwMCBuIAowMDAxMDM3MTQ5IDAwMDAwIG4gCjAwMDA4MDQ5NTUgMDAwMDAgbiAKMDAwMDgyODk0NSAwMDAwMCBuIAowMDAxMDM3MzU5IDAwMDAwIG4gCjAwMDA4MzA2NTQgMDAwMDAgbiAKMDAwMDgzNjE0NyAwMDAwMCBuIAowMDAwODcxNDgyIDAwMDAwIG4gCjAwMDEwMzc1NDIgMDAwMDAgbiAKMDAwMDg3MzYzMCAwMDAwMCBuIAowMDAxMDM3NzI1IDAwMDAwIG4gCjAwMDA4NzY1NDcgMDAwMDAgbiAKMDAwMTAzNzg3NiAwMDAwMCBuIAowMDAwODc4NzAzIDAwMDAwIG4gCjAwMDA4OTUzMDMgMDAwMDAgbiAKMDAwMTAzODAzOCAwMDAwMCBuIAowMDAwODk3MDQzIDAwMDAwIG4gCjAwMDEwMzgyMzIgMDAwMDAgbiAKMDAwMDkwMDA3OCAwMDAwMCBuIAowMDAwOTQ3MTQ2IDAwMDAwIG4gCjAwMDEwMzgzODMgMDAwMDAgbiAKMDAwMDk0ODg5NyAwMDAwMCBuIAowMDAxMDM4NTc3IDAwMDAwIG4gCjAwMDA5NTE1NzIgMDAwMDAgbiAKMDAwMTAzODcyOCAwMDAwMCBuIAowMDAwOTUzODg3IDAwMDAwIG4gCjAwMDA5ODkzMDEgMDAwMDAgbiAKMDAwMTAzODg5MCAwMDAwMCBuIAowMDAwOTkxMzU2IDAwMDAwIG4gCjAwMDEwMzkwNzMgMDAwMDAgbiAKMDAwMDk5Mzc1MCAwMDAwMCBuIAowMDAxMDM5MjI0IDAwMDAwIG4gCjAwMDA5OTYxNTMgMDAwMDAgbiAKMDAwMTAwOTg2MSAwMDAwMCBuIAowMDAxMDM5Mzc1IDAwMDAwIG4gCjAwMDEwMTE3MDQgMDAwMDAgbiAKMDAwMTAzOTU1OCAwMDAwMCBuIAowMDAxMDEzODU0IDAwMDAwIG4gCjAwMDEwMTUyNDEgMDAwMDAgbiAKMDAwMTAyMTYyMCAwMDAwMCBuIAowMDAxMDM5NzIwIDAwMDAwIG4gCjAwMDEwMzk5MDMgMDAwMDAgbiAKMDAwMTAzOTk3MiAwMDAwMCBuIAowMDAxMDQwMDc3IDAwMDAwIG4gCjAwMDEwNDAxOTggMDAwMDAgbiAKMDAwMTA0MDMyMSAwMDAwMCBuIAowMDAxMDQwNDQxIDAwMDAwIG4gCjAwMDEwNDA1NjAgMDAwMDAgbiAKMDAwMTA0MDY4MSAwMDAwMCBuIAowMDAxMDQwODA0IDAwMDAwIG4gCjAwMDEwNDA5MjkgMDAwMDAgbiAKMDAwMTA0MTA1MCAwMDAwMCBuIAowMDAxMDQxMTY5IDAwMDAwIG4gCjAwMDEwNDEyODkgMDAwMDAgbiAKMDAwMTA0MTQxMiAwMDAwMCBuIAowMDAxMDQxNTM3IDAwMDAwIG4gCjAwMDEwNDE2NTYgMDAwMDAgbiAKMDAwMTA0MTc3OCAwMDAwMCBuIAowMDAxMDQxOTAyIDAwMDAwIG4gCjAwMDEwNDIwMjggMDAwMDAgbiAKMDAwMTA0MjE1NiAwMDAwMCBuIAowMDAxMDQyMjgwIDAwMDAwIG4gCjAwMDEwNDI0MDIgMDAwMDAgbiAKMDAwMTA0MjUyNiAwMDAwMCBuIAowMDAxMDQyNjUxIDAwMDAwIG4gCjAwMDEwNDI3NzQgMDAwMDAgbiAKMDAwMTA0Mjg5NSAwMDAwMCBuIAowMDAxMDQzMDE5IDAwMDAwIG4gCjAwMDEwNDMxNDUgMDAwMDAgbiAKMDAwMTA0MzI1OSAwMDAwMCBuIAowMDAxMDc0MzAyIDAwMDAwIG4gCjAwMDEwNzQ2NTQgMDAwMDAgbiAKMDAwMTA3NTMwMiAwMDAwMCBuIAowMDAxMDk4MzYwIDAwMDAwIG4gCjAwMDEwOTg1NjkgMDAwMDAgbiAKMDAwMTA5OTAwNSAwMDAwMCBuIAowMDAxMTIzODQ0IDAwMDAwIG4gCjAwMDExMjQwNzYgMDAwMDAgbiAKMDAwMTEyNDU4MCAwMDAwMCBuIAp0cmFpbGVyCjw8Ci9JRCBbKDI0MTVkMWJjNjAzMGExMGVmNmE0NzJjZDg0MTQ0NjRiNTg2NjQ3ODExYjhlNGJjMTUzYmFkZTc3M2RhNjBkZWUpICgyNDE1ZDFiYzYwMzBhMTBlZjZhNDcyY2Q4NDE0NDY0YjU4NjY0NzgxMWI4ZTRiYzE1M2JhZGU3NzNkYTYwZGVlKV0KL0luZm8gMjEwIDAgUgovUm9vdCAyIDAgUgovU2l6ZSAyMTEKPj4Kc3RhcnR4cmVmCjExMjQ4MTUKJSVFT0Y=
<h2>Encrypt External Resource</h2> [img class="tc-image-documentation" [$:/ipfs/image/encrypt]] <p> If the locker is opened, your wiki is not encrypted. </p> <p> Follow the official [ext[Encryption|https://tiddlywiki.com/#Encryption]] tutorial from <b>~TiddlyWiki</b> for more informations. </p> <p> The default official <b>~TiddlyWiki</b> behaviour do not encrypt external resources. </p> <p> <b>IPFS with ~TiddlyWiki</b> enhances this behaviour. </p> <p> Once you've locked and password protected your wiki, uploaded resources will be encrypted. </p> <p> Read the [[Export Attachment]] reference for more informations. </p> <p> Beware that even you've locked your wiki and didn't save it immediately already uploaded external resources are encrypted. </p> <p> Read the [[Unencrypt External Resource]] to manage this behaviour. </p>
<h2>ENS Settings</h2> [img class="tc-image-documentation" [$:/ipfs/image/settings/ens]] <p> <b>IPFS with ~TiddlyWiki</b> is able to publish <b>.eth</b> domains to [ext[ENS|https://ens.domains/]]. Either a new or updated wiki and attachments associated with an IPFS identifier could be publish to <b>ENS</b>. </p> <p> <b>IPFS with ~TiddlyWiki</b> embeds an <b>ENS</b> resolver. Any <b>.eth</b> domains will be resolved to its associated IPFS identifier on any supported [ext[ENS Networks|https://docs.ens.domains/ens-deployments]]. </p> <p> ENS is powered by a set of [ext[Ethereum Smart Contracts|https://ethereum.org/learn/]] and runs on the Ethereum blockchain. </p> <p> Rather than accessing a wiki with a complex to remember URL: </p> <p> [ext[https://gateway.ipfs.io/ipfs/QmaPUjsVEmTZTXxrvxQDMcd7FpSPVac52mj72dkzRpUQQV]] </p> <p> <q> ENS offers a secure & decentralised way to address resources both on and off the blockchain using simple, human-readable names. </q> </p> <p> <q> ENS eliminates the need to copy or type long addresses. With ENS, you'll be able to send money to your friend at 'aardvark.eth' instead of '0x4cbe58c50480...', interact with your favorite contract at 'mycontract.eth', or visit an IPFS hosted site at 'ipfssite.eth'. </q> </p> <h3>Resolve ENS with IPFS with ~TiddlyWiki</h3> <p> <$ipfslink value="bluelightav.eth"/> </p> <h3>Resolve ENS with a browser extension</h3> <p> [ext[https://bluelightav.eth]] </p> <h3>Browsers</h3> <p> To use the ENS feature your environment needs the Ethereum knowledge. <p> <p> On Desktop you need a supported browser: </p> <ul> <li>[ext[Firefox|https://www.mozilla.org]]</li> <li>[ext[Chrome|https://www.google.com/chrome/]]</li> <li>[ext[Chromium|https://www.chromium.org]]</li> </ul> <h3>Browser extensions</h3> <p> With the following supported Ethereum browser extension: </p> <ul> <li>[ext[Metamask|https://metamask.io]]</li> </ul> <p> New browser extensions are landing who resolve <b>.eth</b> domain: </p> <ul> <li>[ext[Almonit|https://github.com/almonit/almonit-plugin]]</li> <li>[ext[Unstoppable Domain|https://github.com/unstoppabledomains/resolution-browser-extension]]</li> </ul> <h3>Mobile</h3> <p> On Mobile you need a supported Đapp browser: </p> <ul> <li>[ext[Metamask|https://metamask.io]]</li> </ul> <h3>Desktop</h3> <p> We recommend [ext[Metamask|https://metamask.io]] as the browser extension is able to resolve the <b>.eth</b> domain name when you input an <b>.eth</b> domain in your browser address bar. </p> <h3>Publishing</h3> <p> To publish to ENS while saving: </p> <ul> <li>The [[ENS|Protocol]] protocol must be selected</li> <li>The [[ENS domain|ENS Settings]] field must be filled</li> </ul> <p> To publish without saving see [[Publish TiddlyWiki to ENS]]. </p> <p> While saving the plugin will: </p> <ul> <li>Verify if the ENS domain is valid</li> <li>Verify and load the associated ENS domain resolver</li> <li>Save the wiki over IPFS</li> <li>Interact with your Ethereum wallet</li> <li>Update the associated ENS domain resolver content with the new IPFS identifier on the Ethereum blockchain</li> <li>[[Unpin]] the previous version if this option is selected</li> <li>Redirect to the ENS domain when the transaction is successfull</li> <li>Or redirect to the IPFS saved wiki if the ENS transaction do not succeed.</li> </ul> <p> The default ENS domain is stored in the following Tiddler [[$:/ipfs/saver/ens/domain]]. </p> <h3>Supported ENS Ethereum Networks</h3> <ul> <li>`Mainnet`: Ethereum Main Network</li> <li>`Ropsten`: Ethereum Test Network (~PoW)</li> <li>`Rinkeby`: Ethereum Test Network (~PoA)</li> <li>`Goerli`: Ethereum Test Network (~PoA)</li> </ul> <h3>Reference</h3> <ul> <li>[ext[ENS|https://ens.domains]]</li> <li>[ext[ENS Application Manager|https://app.ens.domains]]</li> <li>[ext[ENS Discourse|https://discuss.ens.domains/]]</li> <li>[ext[ENS Documentation|https://docs.ens.domains]]</li> <li>[ext[Ethereum|https://www.ethereum.org]]</li> </ul> <h3>ENS Domain Manager</h3> [img class="tc-image-documentation" [$:/ipfs/image/settings/ens/manager]] <p> This command opens the default <b>ENS Domain Manager</b>. </p> <h3>Resolve ENS Domain</h3> [img class="tc-image-documentation" [$:/ipfs/image/settings/ens/resolve]] <p> This command resolves and opens the default <b>ENS Domain</b>. </p> <p> See the [ext[README.md|https://github.com/xmaysonnave/tiddlywiki-ipfs/blob/master/README.md]] for more informations. </p>
<h2>Requirement</h2> <ul> <li>[ext[Locator plugin for TiddlyWiki|https://bimlas.gitlab.io/tw5-locator/#%24%3A%2Fplugins%2Fbimlas%2Flocator]]</li> </ul> <h2>IPFS Explorers</h2> <<locator-view baseTitle:"Explorers">> <p> The [[IPFS Explorers]] is available in the [[TableOfContents]]. </p>
<h2>Export Setting</h2> [img class="tc-image-documentation" [$:/ipfs/image/settings/export]] <p> The <b>Export</b> setting controls the way <b>IPFS with ~TiddlyWiki</b> export your Tiddler over IPFS. This setting only applies to the [[Export Tiddler]] command as the [[Export Content]] always uses the [ext[JSON|https://www.json.org/]] lightweight data-interchange format. </p> <h3>JSON</h3> [img class="tc-image-documentation" [$:/ipfs/image/settings/export/json]] <h3>Static</h3> [img class="tc-image-documentation" [$:/ipfs/image/settings/export/static]] <h3>TID</h3> [img class="tc-image-documentation" [$:/ipfs/image/settings/export/tid]]
<h2>Export Attachment</h2> [img class="tc-image-documentation" [$:/ipfs/image/export/attachment]] <p> Exporting an embedded attachment means exporting to IPFS a content from your wiki. </p> <p> <b>IPFS with ~TiddlyWiki</b> lets you export to IPFS the following supported [[Media Types]]. </p> <p> Uploading to IPFS an attachment could be a slow process. It depends its size and/or which server your are using. </p> <p> Use the [[https://ipfs.infura.io:5001 API URL|IPFS Server Settings]] and the [[https://ipfs.infura.io Gateway URL|IPFS Server Settings]] and experiment with [[Embedded - The Little Prince]]. </p> [img class="tc-image-documentation" [$:/ipfs/image/console]] <p> Another good experiment is to use the [[https://ipfs.infura.io:5001 API URL|IPFS Server Settings]] and the [[https://gateway.ipfs.io Gateway URL|IPFS Server Settings]]. You upload your attachment on <b>infura</b> and spread its content to another server. </p> <p> Attachment once exported to IPFS are not immediately pinned. The pinning process occurs when you save your wiki. </p> <p> While exporting an attachment to IPFS the plugin will: </p> <ul> <li>Verify if the current Tiddler contains an attachment</li> <li>Verify if the current attachment is already exported</li> <li>Extract the attachment from your wiki</li> <li>Encrypt the attachment if applicable</li> <li>Upload the attachment to IPFS</li> <li>Request to Pin the new IPFS identifier</li> <li>Update or create the Tiddler <b>_canonical_uri</b> field with the new IPFS identifier</li> <li>Update the Tiddler tags</li> </ul> <h3>tags</h3> <p> The export command manages some tags to highlight the Tiddler semantic: </p> <ul> <li><<tag-pill "$:/isAttachment">></li> <li><<tag-pill "$:/isEmbedded">></li> <li><<tag-pill "$:/isIpfs">></li> </ul>
<h2>Export Content</h2> <p> Exporting a content means exporting to IPFS a set of Tiddlers from your wiki. </p> <p> <b>IPFS with ~TiddlyWiki</b> uses the [ext[JSON|https://www.json.org/]] lightweight data-interchange format to export content. </p> <ul> <li>[[$:/ipfs/image/settings/export/json]]</li> </ul> <p> While exporting to IPFS the plugin will: </p> <ul> <li>Resolve an IPNS name and IPNS key if applicable</li> <li>Resolve an ENS domain if applicable</li> <li>Extract the Tiddlers Link if applicable</li> <li>Transclude the content if applicable</li> <li>Build a set of JSON Tiddlers</li> <li>Encrypt the content if applicable</li> <li>Export the content to <b>IPFS</b></li> <li>Pin the content</li> <li>Update or create the Tiddler <b>_export_uri</b> field with the new IPFS identifier</li> <li>Publish to IPNS the new IPFS identifier if applicable</li> <li>Publish to ENS the new IPFS identifier if applicable</li> <li>Unpin the previous IPFS identifier if applicable</li> <li>Update the Tiddler <b>_export_uri</b> field with the previous IPNS name or key if applicable</li> <li>Update the Tiddler <b>_export_uri</b> field with the previous ENS domain if applicable</li> <li>Update the Tiddler tags</li> </ul> <p> </p> <h3>Example</h3> <p> Edit [[IPFS Documentation Assets]]. </p> [img class="tc-image-documentation" [$:/ipfs/image/documentation/asset/content]] <p> Notice the transclusion notation available in the <b>text</b> field. Close the Tiddler and execute the following command. </p> [img class="tc-image-documentation" [$:/ipfs/image/export/content]] <p> Check the console output for more details. </p> [img class="tc-image-documentation" [$:/ipfs/image/export/console]] <p> Edit [[IPFS Documentation Assets]] and notice the new <b>_export_uri</b> field. </p> [img class="tc-image-documentation" [$:/ipfs/image/export/uri]] <p> Click the <b>_export_uri</b> field. </p> [img class="tc-image-documentation" [$:/ipfs/image/export/json]] <h3>_export_uri</h3> <p> The field <b>_export_uri</b> store your IPFS identifier. If you want to export to a specific IPNS identifier or ENS domain you need to create manually and fill up the field with an appropriate content before exporting. </p> <h4>_export_uri content examples</h4> <ul> <li><b>/ipns/name</b></li> <li><b>/ipns/key</b></li> <li><b>doc.bluelightav.eth</b></li> </ul> <h3>tags</h3> <p> The export command manages some tags to highlight the Tiddler semantic: </p> <ul> <li><<tag-pill "$:/isExported">></li> <li><<tag-pill "$:/isIpfs">></li> </ul>
<h2>Export Tiddler</h2> [img class="tc-image-documentation" [$:/ipfs/image/export/tiddler]] <p> Exporting a Tiddler means exporting to IPFS a Tiddler content from your wiki. </p> <p> <b>IPFS with ~TiddlyWiki</b> lets you [[Export]] to IPFS the following format: </p> <ul> <li><b>JSON</b> [[$:/ipfs/image/settings/export/json]]</li> <li><b>Static</b> [[$:/ipfs/image/settings/export/static]]</li> <li><b>TID</b> [[$:/ipfs/image/settings/export/tid]]</li> </ul> <p> While exporting to IPFS the plugin will: </p> <ul> <li>Resolve an IPNS name and IPNS key if applicable</li> <li>Resolve an ENS domain if applicable</li> <li>Extract the content</li> <li>Encrypt the content if applicable</li> <li>Export the content to <b>IPFS</b></li> <li>Pin the content</li> <li>Update or create the Tiddler <b>_export_uri</b> field with the new IPFS identifier</li> <li>Publish to IPNS the new IPFS identifier if applicable</li> <li>Publish to ENS the new IPFS identifier if applicable</li> <li>Unpin the previous IPFS identifier if applicable</li> <li>Update the Tiddler <b>_export_uri</b> field with the previous IPNS name or key if applicable</li> <li>Update the Tiddler <b>_export_uri</b> field with the previous ENS domain if applicable</li> <li>Update the Tiddler tags</li> </ul> <h3>_export_uri</h3> <p> The field <b>_export_uri</b> store your IPFS identifier. If you want to export to a specific IPNS identifier or ENS domain you need to create manually and fill up the field with an appropriate content before exporting. </p> <h4>_export_uri content examples</h4> <ul> <li><b>/ipns/name</b></li> <li><b>/ipns/key</b></li> <li><b>doc.bluelightav.eth</b></li> </ul> <h3>tags</h3> <p> The export command manages some tags to highlight the Tiddler semantic: </p> <ul> <li><<tag-pill "$:/isExported">></li> <li><<tag-pill "$:/isIpfs">></li> </ul>
<h2>Requirement</h2> <ul> <li>[ext[Locator plugin for TiddlyWiki|https://bimlas.gitlab.io/tw5-locator/#%24%3A%2Fplugins%2Fbimlas%2Flocator]]</li> </ul> <h2>Global Commands</h2> [img class="tc-image-documentation" [$:/ipfs/image/page/toolbar]] <<locator-view baseTitle:"Global Commands">>
<h2>Import</h2> <p> Besides the <b>_canonical_uri</b> field, <b>IPFS with ~TiddlyWiki</b> introduces a new special field <b>_import_uri</b>. The <b>_canonical_uri</b> references either an attachment or a Tiddler while the <b>_import_uri</b> references the imported file. When the imported file directly hosts an imported Tiddler only the <b>_canonical_uri</b> is present. <p> <p> This technic lets you import and re-export Tiddlers giving the flexibility to exchange Tiddlers between users. </p> <p> The <b>import</b> is not limited to <b>IPFS</b> as [[URL]] lets you import <b>JSON</b> Tiddlers from wherever you want. </p> <p> Create a Tiddler and defines a <b>_canonical_uri</b> field. Fill up the <b>canonical_uri</b> field with the following URL [ext[Sample|https://raw.githubusercontent.com/xmaysonnave/tiddlywiki-ipfs/master/test/import/sample/root.json]]. Save your Tiddler. You should see the following result. </p> [img class="tc-image-documentation" [$:/ipfs/image/import]] <p> Check the output from the browser [[Console]] for further details. <p> [img class="tc-image-documentation" [$:/ipfs/image/import/console]] <p> Edit the imported Tiddlers and browse the [[URL]] associated with fields <b>_canonical_uri</b> or <b>_import_uri</b>. <p/> <p> The [[Refresh Tiddler]] command forces an import refresh. Deleted Tiddlers could occur. <p> [img class="tc-image-documentation" [$:/ipfs/image/import/deleted]] <p> This imported sample references multiple files with relative [[URL]]. </p> <ul> <li>[ext[Root|https://raw.githubusercontent.com/xmaysonnave/tiddlywiki-ipfs/master/test/import/sample/root.json]]</li> <li>[ext[Level_1_2|https://raw.githubusercontent.com/xmaysonnave/tiddlywiki-ipfs/master/test/import/sample/level_1_2.json]]</li> <li>[ext[Level_2_1|https://raw.githubusercontent.com/xmaysonnave/tiddlywiki-ipfs/master/test/import/sample/level_2_1.json]]</li> <li>[ext[Level_3_1|https://raw.githubusercontent.com/xmaysonnave/tiddlywiki-ipfs/master/test/import/sample/level_3_1.json]]</li> <li>[ext[Level_4_1|https://raw.githubusercontent.com/xmaysonnave/tiddlywiki-ipfs/master/test/import/sample/level_4_1.json]]</li> </ul> <p> Importing is a four steps process: </p> <ul> <li>Load external resources (attachments are not loaded)</li> <li>Process imported Tiddlers and discard duplicates</li> <li>Merge imported Tiddlers</li> <li>Delete previous non-existing imported Tiddlers</li> </ul> <p> You can experiment the errors processed with the <b>load</b> and import <b>process</b> with the following samples. Beware that multiple dialog boxes will popup with specific errors. </p> <ul> <li>[ext[Load|https://raw.githubusercontent.com/xmaysonnave/tiddlywiki-ipfs/master/test/import/load/root.json]]</li> <li>[ext[Process|https://raw.githubusercontent.com/xmaysonnave/tiddlywiki-ipfs/master/test/import/process/root.json]]</li> </ul>
<h3>Requirement</h3> <ul> <li>[ext[Locator plugin for TiddlyWiki|https://bimlas.gitlab.io/tw5-locator/#%24%3A%2Fplugins%2Fbimlas%2Flocator]]</li> </ul> <h3>IPFS Imported Tiddlers</h3> [img class="tc-image-documentation" [$:/ipfs/image/imported/tiddlers]] <p> The specialized [[IPFS Imported Tiddlers]] displays the <<tag-pill "$:/isImported">> tag. </p> <p> The [[IPFS Imported Tiddlers]] is available in the [[TableOfContents]]. </p>
<<locator-view baseTitle:"$:/isAttachment">>
<h2>Requirements</h2> <ul> <li>[ext[IPFS with TiddlyWiki plugin|https://bluelightav.eth.link/#%24%3A%2Fplugins%2Fipfs]]</li> <li>[ext[Locator plugin for TiddlyWiki|https://bimlas.gitlab.io/tw5-locator/#%24%3A%2Fplugins%2Fbimlas%2Flocator]]</li> </ul> <h2>IPFS Documentation</h2> <<locator-view baseTitle:"IPFS Documentation">>
{{{[tag[$:/ipfs/documentation]]}}}
<<locator-view baseTitle:"IPFS Explorers">>
<<locator-view baseTitle:"$:/isImported">>
The `ipfslink` widget generates links to tiddlers and external resources. It resolves <b>IPNS</b> and <b>ENS</b> domain if applicable. If no tiddlers are found or the value cannot be resolved as an URL the content will be rendered as text. ! Content and Attributes The content of the ipfslink widget is rendered within the `<a>` tag representing the link. `<$ipfslink/>` is equivalent to `<$ipfslink value=<<currentTiddler>>><$view field="title"/></$ipfslink>`. `<$ipfslink value="blueligtav.eth"/>` is equivalent to `<$ipfslink value="bluelightav.eth">bluelightav.eth</$ipfslink>`. Example: [[Welcome]] `<$ipfslink field="_canonical_uri" tiddler=<<currentTiddler>>/>`. Example: [[$:/core/ui/EditTemplate/body]] `<$ipfslink value=<<currentField>> field=<<currentField>> tiddler=<<currentTiddler>>/>`. Example: [[$:/core/ui/EditTemplate/fields]] |!Attribute |!Description | |value |Optional Tiddler Title, URL or field processed as a link if possible| |field |Optional Tiddler field from which the value will be extracted| |tiddler |Optional Tiddler Title from which the field will be extracted| The <b>IPFS Link Widget</b> inherits the [ext[LinkWidget|https://tiddlywiki.com/#LinkWidget]] characteristics.
<h3>IPFS Projects</h3> <p> Here is an exhaustive list of involved projects with <b>IPFS with ~TiddlyWiki</b> </p> <ol> <li>[ext[Babel|https://github.com/babel]]</li> <li>[ext[Beyond Compare|https://www.scootersoftware.com/]]</li> <li>[ext[Buffer|https://github.com/feross/buffer]]</li> <li>[ext[Chromium|https://www.chromium.org/]]</li> <li>[ext[Chrome|https://www.google.com/chrome/]]</li> <li>[ext[Cid|https://github.com/multiformats/js-cid]]</li> <li>[ext[Content Hash|https://github.com/pldespaigne/content-hash]]</li> <li>[ext[Contributor Covenant|https://github.com/ContributorCovenant]]</li> <li>[ext[CSS|https://www.w3schools.com/css/]]</li> <li>[ext[Debian|https://www.debian.org/]]</li> <li>[ext[ENS|https://github.com/ensdomains]]</li> <li>[ext[Eruda|https://github.com/liriliri/eruda]]</li> <li>[ext[Eslint|https://github.com/eslint/eslint]]</li> <li>[ext[Ethers|https://github.com/ethers-io/ethers.js/]]</li> <li>[ext[Ethereum|https://ethereum.org/]]</li> <li>[ext[Font Awesome|https://fontawesome.com/]]</li> <li>[ext[Font Awesome 5 Free SVGs for TiddlyWiki|http://fa5-free-svg.tiddlyspot.com/]]</li> <li>[ext[Git|https://github.com/git]]</li> <li>[ext[GitHub|https://github.com/]]</li> <li>[ext[GitHub Repo Size|https://github.com/harshjv/github-repo-size]]</li> <li>[ext[Go IPFS|https://github.com/ipfs/go-ipfs]]</li> <li>[ext[HTML|https://www.w3schools.com/html/]]</li> <li>[ext[Infura|https://github.com/INFURA]]</li> <li>[ext[IPFS Companion|https://github.com/ipfs-shipyard/ipfs-companion]]</li> <li>[ext[IPFS Desktop|https://github.com/ipfs-shipyard/ipfs-desktop]]</li> <li>[ext[IPFS Infra|https://github.com/ipfs/infra]]</li> <li>[ext[IPFS Provider|https://github.com/ipfs-shipyard/ipfs-provider]]</li> <li>[ext[JavaScript|https://www.w3schools.com/js/]]</li> <li>[ext[JavaScript Standard Style|https://github.com/standard/standard]]</li> <li>[ext[Jest|https://github.com/facebook/jest]]</li> <li>[ext[JS-IPFS|https://github.com/ipfs/js-ipfs]]</li> <li>[ext[Let's Encrypt|https://letsencrypt.org/]]</li> <li>[ext[Loglevel|https://github.com/pimterry/loglevel]]</li> <li>[ext[Markdown|https://commonmark.org/]]</li> <li>[ext[Metamask|https://github.com/MetaMask]]</li> <li>[ext[Mozilla|https://www.mozilla.org/]]</li> <li>[ext[Nginx|https://www.nginx.com/]]</li> <li>[ext[Node.js|https://github.com/nodejs]]</li> <li>[ext[Npm|https://github.com/npm/cli]]</li> <li>[ext[Nvm|https://github.com/nvm-sh/nvm]]</li> <li>[ext[Oh My Zsh|https://github.com/ohmyzsh/ohmyzsh]]</li> <li>[ext[Prettier|https://github.com/prettier/prettier]]</li> <li>[ext[Prettier Standard|https://github.com/sheerun/prettier-standard]]</li> <li>[ext[Prettierx|https://github.com/brodybits/prettierx]]</li> <li>[ext[Sablier|https://github.com/sablierhq]]</li> <li>[ext[Snyk|https://snyk.io/]]</li> <li>[ext[TiddlyWiki5|https://github.com/Jermolene/TiddlyWiki5]]</li> <li>[ext[Travis CI|https://travis-ci.com/]]</li> <li>[ext[IPFS with TiddlyWiki|https://github.com/xmaysonnave/tiddlywiki-ipfs]]</li> <li>[ext[TW5 Locator|https://gitlab.com/bimlas/tw5-locator]]</li> <li>[ext[TW5 Relink|https://github.com/flibbles/tw5-relink]]</li> <li>[ext[Universal URL|https://github.com/stevenvachon/universal-url]]</li> <li>[ext[Universal URL Lite|https://github.com/stevenvachon/universal-url-lite]]</li> <li>[ext[Visual Studio Code|https://github.com/Microsoft/vscode/]]</li> </ol>
<h2>IPFS Provider Setting</h2>
<p>
<span style="color:red">Warning</span>
<br/>
The <b>IPFS Companion</b> support is <a href="https://docs-beta.ipfs.io/how-to/companion-window-ipfs/">temporarily disabled</a>.
</p>
[img class="tc-image-documentation" [$:/ipfs/image/settings/provider]]
<p>
<b>IPFS with ~TiddlyWiki</b> is able to reach the IPFS network with multiple providers:
</p>
<ul>
<li>[ext[IPFS Companion|https://github.com/ipfs-shipyard/ipfs-companion]]</li>
<li>[ext[Http Client|https://github.com/ipfs/js-ipfs-http-client]]</li>
</ul>
<p>
Options:
</p>
<ol>
<li>
<b>Default</b>
<ul>
<li>Use <b>IPFS Companion</b> if available</li>
<li>Otherwise use the <b>HTTP Client</b> provider</li>
</ul>
</li>
<li>Use only the <b>IPFS Companion</b> provider if available</li>
<li>Use only the <b>HTTP Client</b> provider</li>
</ol>
<p>
When the [[Verbose]] property is selected, the console shows which provider has been selected.
</p>
[img class="tc-image-documentation" [$:/ipfs/image/settings/provider/console]]
<h2>Requirements</h2> <ul> <li>[ext[IPFS with TiddlyWiki plugin|https://bluelightav.eth.link/#%24%3A%2Fplugins%2Fipfs]]</li> <li>[ext[Locator plugin for TiddlyWiki|https://bimlas.gitlab.io/tw5-locator/#%24%3A%2Fplugins%2Fbimlas%2Flocator]]</li> <li>[ext[Metamask|https://metamask.io]]</li> </ul> <h2>IPFS Quick Start</h2> <p> The easiest way to start with <b>IPFS with ~TiddlyWiki</b> is to save over <b>IPFS</b> a live version from <b>IPFS</b> and use the default [[Settings]]. </p> <ul> <li><$ipfslink value="bluelightav.eth"/></li> <li><$ipfslink value="empty.bluelightav.eth"/></li> <li><$ipfslink value="tiddly.bluelightav.eth"/></li> <li><$ipfslink value="doc.bluelightav.eth"/></li> </ul> <p> We do not recommmend to work at the file system level as modern browsers limits interactions from the file system and web servers. </p> <ul> <li>[ext[Chrome Cross-Origin XMLHttpRequest|https://developer.chrome.com/extensions/xhr]]</li> <li>[ext[Firefox Cross-Origin Resource Sharing|https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS]]</li> </ul> <p> However if you want to work at the file system level an easy solution is to install a local web server. </p> <ul> <li>[ext[Web Server for Chrome|https://chrome.google.com/webstore/detail/web-server-for-chrome/ofhbbkphhbklhfoeikjpcbhemlocgigb]]</li> <li>[ext[Firefox - Set up a Local Testing Server|https://developer.mozilla.org/en-US/docs/Learn/Common_questions/set_up_a_local_testing_server]]</li> </ul> <p> As a convenience here is our [[Node Configuration|IPFS Server Config]] suitable for [ext[IPFS Desktop|https://github.com/ipfs-shipyard/ipfs-desktop]] and the [ext[IPFS Go Server|https://github.com/ipfs/go-ipfs]]. This configuration is based on the [ext[v0.5.1|https://github.com/ipfs/go-ipfs/releases/tag/v0.5.1]] version. More informations about the configuration parameters are available [ext[here|https://github.com/ipfs/go-ipfs/blob/master/docs/config.md]] </p>
{
"Addresses": {
"API": "/ip4/127.0.0.1/tcp/5001",
"Announce": [],
"Gateway": "/ip4/127.0.0.1/tcp/8080",
"NoAnnounce": [],
"Swarm": [
"/ip4/0.0.0.0/tcp/4001",
"/ip6/::/tcp/4001"
]
},
"API": {
"HTTPHeaders": {
"Access-Control-Allow-Headers": [
"X-Requested-With",
"Range",
"Content-Range",
"X-Chunked-Output",
"X-Stream-Output"
],
"Access-Control-Allow-Methods": [
"GET",
"POST"
],
"Access-Control-Allow-Origin": [
"*"
],
"Access-Control-Expose-Headers": [
"Content-Range",
"X-Chunked-Output",
"X-Stream-Output"
]
}
},
"AutoNAT": {
"ServiceMode": "enabled"
},
"Bootstrap": [
"/dnsaddr/bootstrap.libp2p.io/ipfs/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN",
"/dnsaddr/bootstrap.libp2p.io/ipfs/QmQCU2EcMqAqQPR2i9bChDtGNJchTbq5TbXJJ16u19uLTa",
"/dnsaddr/bootstrap.libp2p.io/ipfs/QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb",
"/dnsaddr/bootstrap.libp2p.io/ipfs/QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt",
"/ip4/104.131.131.82/tcp/4001/ipfs/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ",
"/ip4/104.236.179.241/tcp/4001/ipfs/QmSoLPppuBtQSGwKDZT2M73ULpjvfd3aZ6ha4oFGL1KrGM",
"/ip4/128.199.219.111/tcp/4001/ipfs/QmSoLSafTMBsPKadTEgaXctDQVcqN88CNLHXMkTNwMKPnu",
"/ip4/104.236.76.40/tcp/4001/ipfs/QmSoLV4Bbm51jM9C4gDYZQ9Cy3U6aXMJDAbzgu2fzaDs64",
"/ip4/178.62.158.247/tcp/4001/ipfs/QmSoLer265NRgSp2LA3dPaeykiS1J6DifTC88f5uVQKNAd",
"/ip6/2604:a880:1:20::203:d001/tcp/4001/ipfs/QmSoLPppuBtQSGwKDZT2M73ULpjvfd3aZ6ha4oFGL1KrGM",
"/ip6/2400:6180:0:d0::151:6001/tcp/4001/ipfs/QmSoLSafTMBsPKadTEgaXctDQVcqN88CNLHXMkTNwMKPnu",
"/ip6/2604:a880:800:10::4a:5001/tcp/4001/ipfs/QmSoLV4Bbm51jM9C4gDYZQ9Cy3U6aXMJDAbzgu2fzaDs64",
"/ip6/2a03:b0c0:0:1010::23:1001/tcp/4001/ipfs/QmSoLer265NRgSp2LA3dPaeykiS1J6DifTC88f5uVQKNAd"
],
"Datastore": {
"BloomFilterSize": 0,
"GCPeriod": "1h",
"HashOnRead": false,
"Spec": {
"mounts": [
{
"child": {
"path": "blocks",
"shardFunc": "/repo/flatfs/shard/v1/next-to-last/2",
"sync": true,
"type": "flatfs"
},
"mountpoint": "/blocks",
"prefix": "flatfs.datastore",
"type": "measure"
},
{
"child": {
"compression": "none",
"path": "datastore",
"type": "levelds"
},
"mountpoint": "/",
"prefix": "leveldb.datastore",
"type": "measure"
}
],
"type": "mount"
},
"StorageGCWatermark": 90,
"StorageMax": "10GB"
},
"Discovery": {
"MDNS": {
"Enabled": false,
"Interval": 10
}
},
"Experimental": {
"FilestoreEnabled": false,
"GraphsyncEnabled": false,
"Libp2pStreamMounting": false,
"P2pHttpProxy": false,
"QUIC": false,
"ShardingEnabled": false,
"StrategicProviding": false,
"UrlstoreEnabled": false
},
"Gateway": {
"APICommands": [],
"HTTPHeaders": {
"Access-Control-Allow-Headers": [
"X-Requested-With",
"Range",
"Content-Range",
"X-Chunked-Output",
"X-Stream-Output"
],
"Access-Control-Allow-Methods": [
"GET"
],
"Access-Control-Allow-Origin": [
"*"
],
"Access-Control-Expose-Headers": [
"Content-Range",
"X-Chunked-Output",
"X-Stream-Output"
]
},
"NoDNSLink": false,
"NoFetch": false,
"PathPrefixes": [],
"PublicGateways": null,
"RootRedirect": "",
"Writable": false
},
"Identity": {
"PeerID": "Specific to your configuration",
"PrivKey": "Specific to your configuration"
},
"Ipns": {
"RecordLifetime": "",
"RepublishPeriod": "",
"ResolveCacheSize": 128
},
"Mounts": {
"FuseAllowOther": false,
"IPFS": "/ipfs",
"IPNS": "/ipns"
},
"Pubsub": {
"DisableSigning": false,
"Router": "",
"StrictSignatureVerification": false
},
"Reprovider": {
"Interval": "12h",
"Strategy": "all"
},
"Routing": {
"Type": "dht"
},
"Swarm": {
"AddrFilters": [
"/ip4/10.0.0.0/ipcidr/8",
"/ip4/100.64.0.0/ipcidr/10",
"/ip4/169.254.0.0/ipcidr/16",
"/ip4/172.16.0.0/ipcidr/12",
"/ip4/192.0.0.0/ipcidr/24",
"/ip4/192.0.0.0/ipcidr/29",
"/ip4/192.0.0.8/ipcidr/32",
"/ip4/192.0.0.170/ipcidr/32",
"/ip4/192.0.0.171/ipcidr/32",
"/ip4/192.0.2.0/ipcidr/24",
"/ip4/192.168.0.0/ipcidr/16",
"/ip4/198.18.0.0/ipcidr/15",
"/ip4/198.51.100.0/ipcidr/24",
"/ip4/203.0.113.0/ipcidr/24",
"/ip4/240.0.0.0/ipcidr/4",
"/ip6/100::/ipcidr/64",
"/ip6/2001:2::/ipcidr/48",
"/ip6/2001:db8::/ipcidr/32",
"/ip6/fc00::/ipcidr/7",
"/ip6/fe80::/ipcidr/10"
],
"ConnMgr": {
"GracePeriod": "300s",
"HighWater": 900,
"LowWater": 600,
"Type": "basic"
},
"DisableBandwidthMetrics": false,
"DisableNatPortMap": false,
"DisableRelay": false,
"EnableAutoRelay": true,
"EnableRelayHop": false
}
}
<h2>IPFS Server Settings</h2> [img class="tc-image-documentation" [$:/ipfs/image/settings/server/ipfs]] <p> To save your wiki over IPFS, you need to select: </p> <ul> <li>An [ext[API URL|https://docs.ipfs.io/reference/api/http/]] where the IPFS commands are sent</li> <li>A [ext[Gateway URL|https://github.com/ipfs/go-ipfs/blob/master/docs/gateway.md]] where IPFS contents are retrieved</li> </ul> <p> While saving the plugin will: </p> <ul> <li>Save the wiki over IPFS</li> <li>Pin the new wiki over IPFS</li> <li>[[Unpin]] the previous version if this option is selected</li> <li>Redirect the current page to the new IPFS identifier</li> </ul> <h3>URL Selection</h3> <p> The plugin eases URL selections through drop-down lists. </p> <h4>API URL</h4> <p> <<list-tagged-draggable tag:"$:/ipfs/saver/api">> <p> To enhance the <b>API URL</b> list: </p> <ul> <li>Clone an existing <b>API URL</b> Tiddler</li> <li>Update the cloned Tiddler's title and text</li> <li>Update the [[Default API URL|$:/ipfs/saver/api]] text if applicable</li> </ul> <h4>Gateway URL</h4> <p> <<list-tagged-draggable tag:"$:/ipfs/saver/gateway">> <p> To enhance the <b>Gateway URL</b> list: </p> <ul> <li>Clone an existing <b>Gateway URL</b> Tiddler</li> <li>Update the cloned Tiddler's title and text</li> <li>Update the [[Default Gateway URL|$:/ipfs/saver/gateway]] if applicable</li> </ul>
<h3>IPFS Standards</h3> <p> Here is an exhaustive list of standards followed by <b>IPFS with ~TiddlyWiki</b> </p> <ol> <li>[ext[Console|https://console.spec.whatwg.org/]] with [ext[Eruda|https://github.com/liriliri/eruda]]</li> <li>[ext[Continuous Integration|https://en.wikipedia.org/wiki/Continuous_integration]] with [ext[Travis|https://travis-ci.com/]]</li> <li>[ext[DevSecOps|https://www.devsecops.org/]] with [ext[Snyk|https://snyk.io/]]</li> <li>[ext[JavaScript Standard|https://standardjs.com/]]</li> <li>[ext[Linting with Eslint|https://eslint.org/]]</li> <li>[ext[Open Source Projects|https://www.fsf.org/]]</li> <li>[ext[Testing with Jest|https://jestjs.io/]]</li> <li>Transparency with [ext[Ethereum|https://ethereum.org]] and [ext[GitHub|https://github.com/]]</li> <li>[ext[WHATWG URL|https://url.spec.whatwg.org/]] with [ext[Universal URL|https://github.com/stevenvachon/universal-url]]</li> </ol>
<h2>Requirements</h2> <ul> <li>[ext[IPFS with TiddlyWiki plugin|https://bluelightav.eth.link/#%24%3A%2Fplugins%2Fipfs]]</li> <li>[ext[Locator plugin for TiddlyWiki|https://bimlas.gitlab.io/tw5-locator/#%24%3A%2Fplugins%2Fbimlas%2Flocator]]</li> </ul> <h2>Technical</h2> <<locator-view baseTitle:"IPFS Technical">>
<h2>IPNS Settings</h2> [img class="tc-image-documentation" [$:/ipfs/image/settings/ipns]] <p> The plugin is able to publish your <b>IPNS name</b> with a new IPFS identifier everytime you save your wiki. </p> <p> To publish to IPNS while saving: </p> <ul> <li>The [[IPNS|Protocol]] protocol must be selected</li> <li>The <b>IPNS name</b> field must be filled</li> </ul> <p> To publish without saving see [[Publish TiddlyWiki to IPNS]]. </p> <p> While saving the plugin will: </p> <ul> <li>Save the wiki over IPFS</li> <li>Resolve the current <b>IPNS name</b> and <b>IPNS key</b> if you come from an existing IPNS URL</li> <li>Or resolve the default <b>IPNS name</b> and <b>IPNS key</b> if you come from the local filesystem or an IPFS URL</li> <li>Publish the <b>IPFS name</b> with the new IPFS identifier</li> <li>[[Unpin]] the previous IPFS content if this option is selected</li> <li>Redirect the current page to your IPNS key if successfully published</li> <li>Or redirect to the IPFS saved wiki if the IPNS update do not succeed.</li> </ul> <p> This feature do not work with IPFS Companion or the <b>https://ipfs.infura.io:5001</b> [[API URL|IPFS Server Settings]]. </p> <ul> <li>The default IPNS name is stored in the following Tiddler [[$:/ipfs/saver/ipns/name]]</li> <li>The default IPNS key is store in the following Tiddler [[$:/ipfs/saver/ipns/key]]</li> </ul> <h3>Rename IPNS name</h3> [img class="tc-image-documentation" [$:/ipfs/image/settings/ipns/rename]] <p> This command rename an existing <b>IPNS name</b>. </p> <ul> <li>Fetch an existing <b>IPNS name</b></li> <li>The associated <b>IPNS key</b> is displayed</li> <li>Update the current <b>IPNS name</b> in the input field</li> <li>Use the rename command</li> </ul> <h3>Generate IPNS key</h3> [img class="tc-image-documentation" [$:/ipfs/image/settings/ipns/generate]] <p> This command generates a new <b>IPNS key</b> associated to an <b>IPNS name</b>. </p> <h3>Remove IPNS Name and IPNS key</h3> [img class="tc-image-documentation" [$:/ipfs/image/settings/ipns/remove]] <p> This command removes an <b>IPNS name</b> and its associated <b>IPNS key</b>. </p> <h3>Fetch IPNS key</h3> [img class="tc-image-documentation" [$:/ipfs/image/settings/ipns/fetch]] <p> This command fetch an <b>IPNS key</b> associated to an <b>IPNS name</b>. </p> <h3>Open resolved IPNS key</h3> [img class="tc-image-documentation" [$:/ipfs/image/settings/ipns/resolve]] <p> This command resolves an <b>IPNS key</b> to an IPFS identifier and displays its content in a new browser tab. </p>
<p> Supported Media Types. </p> <p> <table> <tr><th>Media Types</th><th>Extension</th></tr> <tr><td>application/pdf</td><td>pdf</td></tr> <tr><td>application/x-tiddler</td><td>tid</td></tr> <tr><td>audio/ogg</td><td>ogg</td></tr> <tr><td>audio/mpeg</td><td></td></tr> <tr><td>audio/mp3</td><td>mp3</td></tr> <tr><td>audio/mp4</td><td>mp4, m4a</td></tr> <tr><td>image/gif</td><td>gif</td></tr> <tr><td>image/heic</td><td>heic</td></tr> <tr><td>image/heif</td><td>heif</td></tr> <tr><td>image/jpg</td><td>jpg, jpeg</td></tr> <tr><td>image/jpeg</td><td>jpg, jpeg</td></tr> <tr><td>image/png</td><td>png</td></tr> <tr><td>image/svg+xml</td><td>svg</td></tr> <tr><td>image/webp</td><td>webp</td></tr> <tr><td>image/x-icon</td><td>ico</td></tr> <tr><td>video/ogg</td><td>ogm, ogv, ogg</td></tr> <tr><td>video/mp4</td><td>mp4</td></tr> <tr><td>video/quicktime</td><td>mov, qt</td></tr> <tr><td>video/webm</td><td>webm</td></tr> </table> </p>
<h3>IPFS</h3> <p> You can check the <b>IPFS</b> network with the following tools: </p> <ul> <li>[ext[Infura Status|https://status.infura.io]]</li> <li>[ext[Public IPFS Gateways|https://ipfs.github.io/public-gateway-checker/]]</li> </ul> <h3>Ethereum</h3> <p> You can check the <b>Ethereum</b> networks with the following tools: </p> <ul> <li>[ext[Ethereum Gas Station|https://ethgasstation.info/]]</li> <li>[ext[Ethereum Gas Tracker|http://etherscan.io/gastracker]]</li> <li>[ext[Etherchain Charts|https://www.etherchain.org/charts]]</li> <li>[ext[Etherscan|https://etherscan.io/]]</li> <li>[ext[Ethstats|https://ethstats.net/]]</li> <li>[ext[Goerli: Ethereum Test Network (PoA)|https://stats.goerli.net/]]</li> <li>[ext[Rinkeby: Ethereum Test Network (PoA)|https://www.rinkeby.io/#stats]]</li> <li>[ext[Ropsten: Ethereum Test Network (PoW)|https://ropsten-stats.parity.io/]]</li> </ul>
<h2>Pin External Resource to IPFS</h2> [img class="tc-image-documentation" [$:/ipfs/image/view/pin]] <p> The <b>pin to IPFS</b> command immediately pins all the fields who contain an IPFS URL using the [[Default API URL|$:/ipfs/saver/api]]: </p>
<h2>Pin ~TiddlyWiki to IPFS</h2> [img class="tc-image-documentation" [$:/ipfs/image/page/pin]] <p> The <b>pin to IPFS</b> command pins the current <b>~TiddlyWiki</b> IPFS identifier using the [[Default API URL|$:/ipfs/saver/api]]. </p> <p> A dialog box will be displayed at the end of the process. </p>
<h2>Preferred Saver Setting</h2> [img class="tc-image-documentation" [$:/ipfs/image/settings/preferred/saver]] <p> The plugin modifies the default behaviour of <b>~TiddlyWiki</b> and exposes the available savers. </p> <p> This feature is a work in progress with the [ext[TiddlyWiki|https://github.com/Jermolene/TiddlyWiki5/pull/4371]] community. </p> <p> The default value <b>Ipfs</b> defines <b>IPFS with ~TiddlyWiki</b> as the default saver. </p> <p> If you want to save locally your wiki select the <b>download</b> value and the default local filesystem saver will be called. </p> <h3>Preferred Saver Selection</h3> <p> The plugin eases the <b>Preferred Saver</b> selection with a drop-down list. </p> <p> The selected value is stored in the [[Preferred Saver|$:/config/PreferredSaver]] Tiddler. </p>
<h2>Protocol Setting</h2> [img class="tc-image-documentation" [$:/ipfs/image/settings/protocol]] <p> The <b>Protocol</b> setting controls the way <b>IPFS with ~TiddlyWiki</b> saves your wiki over IPFS. </p> <h3>IPFS</h3> <p> The [[IPFS|IPFS Server Settings]] protocol saves <b>~TiddlyWiki</b> and its embedded file attachments over IPFS. </p> <p> Once your wiki is saved you'll be redirected to the new IPFS identifier location. </p> <h3>IPNS</h3> <p> The [[IPNS|IPNS Settings]] protocol enhances the IPFS protocol and publishes an <b>IPNS name</b> with a new [[IPFS|IPFS Server Settings]] identifier. </p> <p> The [[IPNS|IPNS Settings]] protocol uses the <b>IPNS name</b> and <b>IPNS key</b> defined in your [[IPNS Settings]]. </p> <p> Once your wiki is saved you'll be redirected to the new IPNS identifier location. </p> <h3>ENS</h3> <p> The [[ENS|ENS Settings]] protocol enhances the IPFS protocol and publishes a new [[IPFS|IPFS Server Settings]] identifier to an [[ENS|ENS Settings]] domain or [[ENS|ENS Settings]] subdomain. </p> <p> Once your wiki is saved you'll be redirected to your [[ENS|ENS Settings]] domain or [[ENS|ENS Settings]] subdomain. </p> <p> If you comes from an [[IPNS|IPNS Settings]] identifier the [[ENS|ENS Settings]] protocol always updates your previous [[IPNS|IPNS Settings]] identifier. </p>
<h2>Publish ~TiddlyWiki to ENS</h2> [img class="tc-image-documentation" [$:/ipfs/image/publish/ens]] <p> The <b>publish to ENS</b> command updates an ENS <b>.eth</b> domain with the current IPFS identifier. </p> <p> While publishing to ENS the plugin will: </p> <ul> <li>Verify if the ENS domain is valid</li> <li>Verify and load the associated ENS domain resolver</li> <li>Interact with your Ethereum wallet</li> <li>Update the associated ENS domain resolver content with the new IPFS identifier on the Ethereum blockchain</li> <li>[[Unpin]] the previous version if this option is selected</li> </ul> <p> When you use this command you will not be redirected to your ENS domain once completed. </p> <p> [ext[Metamask|https://metamask.io]] will request your authorization as your Ethereum account is involved. </p> [img class="tc-image-documentation-small" [$:/ipfs/image/metamask/allow]] <p> In the next step you need to fund your transaction. </p> [img class="tc-image-documentation-small" [$:/ipfs/image/metamask/gas]] <p> The minimum required gas is, 0.000000015 ether or 15 gwei (around 15 cents). <br/> For faster transaction 25 to 35 gwei could be necessary. </p> <p> Check the [[Networks]] for further details about the current gas price. </p> <p> Publishing to ENS is a lengthy process. The [[Console]] will provide an URL to check the ongoing transaction. A dialog box will be displayed at the end of the process. </p>
<h2>Publish ~TiddlyWiki to IPNS</h2> [img class="tc-image-documentation" [$:/ipfs/image/publish/ipns]] <p> The <b>publish to IPNS</b> command publishes the [[IPNS name|IPNS Settings]] with the current wiki IPFS identifier using the [[Default API URL|$:/ipfs/saver/api]]. </p> <p> You can publish an [[IPNS name|IPNS Settings]] with the IPFS identifier of another <b>IPNS name</b>. </p> <p> While publishing to IPNS the plugin will: </p> <ul> <li>Verify the <b>IPNS name</b> and <b>IPNS key</b> if both are filled</li> <li>Resolve the <b>IPNS key</b> if only the <b>IPNS name</b> is filled</li> <li>Resolve the <b>IPNS name</b> if only the <b>IPNS key</b> is filled</li> <li>Publish the <b>IPFS name</b> with the new IPFS identifier</li> <li>[[Unpin]] the previous IPFS content if this option is selected</li> </ul> <p> A dialog box will be displayed at the end of the process. </p>
<h2>Refresh Tiddler</h2>
[img class="tc-image-documentation" [$:/ipfs/image/view/refresh]]
<p>
The <b>refresh</b> action reloads the current Tiddler.
</p>
<p>
It implements the following behaviour:
</p>
<ul>
<li>Imported Tiddlers are reloaded.</li>
<li>
External attachments are reloaded.
It is a useful behaviour when you declined to unencrypt an encrypted external resource.
The unencrypt password dialog box will be displayed again.
</li>
<li>
Regular Tiddler are removed from the <b>~TiddlyWiki</b> cache and reloaded.
It is a useful behaviour when you want to load content from a different IPFS gateway.
</li>
<li>[[Imported|Import]] Tiddlers are reloaded.</li>
</ul>
<h2>Relative URL Policy Setting</h2> [img class="tc-image-documentation" [$:/ipfs/image/settings/relative/url/policy]] <p> The <b>Relative URL Policy</b> setting controls the way relative URL are resolved. </p> <h3>Origin</h3> <p> Relative URL are resolved against their origin. </p> <h3>Gateway</h3> <p> Relative URL are resolved against the [[Gateway URL|IPFS Server Settings]]. </p>
<h2>Requirement</h2> <ul> <li>[ext[Locator plugin for TiddlyWiki|https://bimlas.gitlab.io/tw5-locator/#%24%3A%2Fplugins%2Fbimlas%2Flocator]]</li> </ul> <h2>Settings</h2> <p> The [[IPFS Saver Settings|$:/core/ui/ControlPanel/Saving/Ipfs]] lets you control the plugin behaviour. </p> [img class="tc-image-documentation" [$:/ipfs/image/settings]] <<locator-view baseTitle:"Settings">>
<div class="tc-table-of-contents"> <<toc-selective-expandable "TableOfContents" "sort[title]">> </div>
<h2>Requirement</h2> <ul> <li>[ext[Locator plugin for TiddlyWiki|https://bimlas.gitlab.io/tw5-locator/#%24%3A%2Fplugins%2Fbimlas%2Flocator]]</li> </ul> <h2>Tiddler Commands</h2> [img class="tc-image-documentation" [$:/ipfs/image/view/toolbar]] <<locator-view baseTitle:"Tiddler Commands">>
<h2>Unencrypt External Resource</h2> [img class="tc-image-documentation" [$:/ipfs/image/unencrypt]] <p> If the locker is closed your wiki is encrypted or will be encrypted once saved. </p> <p> A password will be requested to unlock your wiki when loaded. </p> <p> External resources are automatically unencrypted when their host Tiddlers are displayed. </p> <p> While unencrypting an external resource, a password could be requested: </p> <ul> <li>When the wiki is unencrypted but its external resource is encrypted</li> <li>When the wiki is encrypted but the encrypted external resource uses a different password</li> </ul> <p> </p> [img class="tc-image-documentation" [$:/ipfs/image/unencrypt/password]] <p> [[IPFS - Encrypted - The Little Prince]] describes this behaviour. </p> <p> Edit the this Tiddler as it contains a <b>password</b> field . Its value when used will unencrypt the external resource. </p>
<h2>Unpin Setting</h2> [img class="tc-image-documentation" [$:/ipfs/image/settings/unpin]] <p> The <b>Unpin</b> checkbox when selected try to unpin previous contents while saving. </p> <p> Each time you save your wiki, publish to [[IPNS|IPNS Settings]] or publish to [[ENS|ENS Settings]] the previous content will be unpined. </p> <p> When you embed in your wiki a previously saved IPFS attachment, an <b>Unpin</b> request will be recorded and processed while saving. </p> <p> The same mechanism applies to exported contents. </p> <p> Unpinning is not allowed with the [[API URL|IPFS Server Settings]] <b>ipfs.infura.io:5001</b>. </p>
<h2>Unpin External Resource from IPFS</h2> [img class="tc-image-documentation" [$:/ipfs/image/view/unpin]] <p> The <b>unpin from IPFS</b> command immediately unpins all the fields who contain an IPFS URL using the [[Default API URL|$:/ipfs/saver/api]]: </p>
<h2>Unpin ~TiddlyWiki from IPFS</h2> [img class="tc-image-documentation" [$:/ipfs/image/page/unpin]] <p> The <b>unpin from IPFS</b> action unpins the current wiki IPFS identifier using the [[Default API URL|$:/ipfs/saver/api]]. </p> <p> A dialog box will be displayed at the end of the process. </p>
<h3>URL</h3> [img class="tc-image-documentation" [$:/ipfs/image/url/hovering]] <p> Editing a Tiddler is improved while using the [[IPFS Link Widget]]. Fields could be processed as Tiddler links, External Links or plain texts. </p> <p> URL could be absolute or relative to their default [[Origin or Gateway|Relative URL Policy]]. URL follows the [ext[WHATWG-URL|https://wiki.whatwg.org/]] standard. </p> <p> However to discriminate any fields content a few rules should be followed: </p> <p> An absolute URL could use the following [ext[URL Schemes|https://wiki.whatwg.org/wiki/URL]]. </p> <ul> <li><b>ftp</b></li> <li><b>http</b></li> <li><b>https</b></li> <li><b>file</b></li> <li><b>data</b></li> <li><b>blob</b></li> <li><b>about</b></li> <li><b>mailto</b></li> </ul> <p> A relative URL should start with the following: </p> <ul> <li><b>/</b></li> <li><b>./</b></li> <li><b>../</b></li> </ul> <p> A right-click on any URL field gives users a chance to open a new browser tab and load the URL. However a direct click on the link will fully resolve any IPNS identifiers or ENS domains then open a new browser tab. </p> <p> URL analysis steps: </p> <ul> <li>Locate an existing Tiddler title who matches the field content</li> <li>Parse the field content as an absolute URL</li> <li>Parse the field content as a relative URL</li> <li>Fallback as plain text</li> </ul>
<h2>Verbose Setting</h2> [img class="tc-image-documentation" [$:/ipfs/image/settings/verbose]] <p> The plugin provide feedback through dialog boxes. </p> [img class="tc-image-documentation" [$:/ipfs/image/error]] <p> Errors are always detailed in the [[Console]]. Useful when you need to fill a bug report. </p> [img class="tc-image-documentation" [$:/ipfs/image/error/console]] <p> Processing content over [[IPFS|IPFS Server Settings]] could be a lengthy process. </p> <p> Every logical steps are detailed and logged to the [[Console]]. </p>
[img class="tc-image-documentation" [$:/ipfs/image/version]] <p> You can get the current <b>~TidlyWiki</b> and <b>IPFS with ~TiddlyWiki</b> version within the Tools tab. </p> <p> The plugin version is also available in the [[IPFS with TiddlyWiki|$:/plugins/ipfs]] plugin Tiddler. </p>
<h2>Welcome</h2>
<p>
Welcome to <b>IPFS with ~TiddlyWiki</b>, the Unstoppable Wiki.
</p>
<p>
[ext[Blue Light|https://wiki.bluelightav.org]] is thrilled to provide this [ext[Open Source|https://spdx.org/licenses/GPL-3.0-or-later.html]] <b>~TiddlyWiki</b> plugin.
</p>
<p>
<b>IPFS with ~TiddlyWiki</b>
</p>
<h3>Features</h3>
<ul>
<li>Store ~TiddlyWiki's and attachments on [ext[IPFS|https://ipfs.io/]]</li>
<li>Access ~TiddlyWiki's and attachments from [ext[IPFS|https://ipfs.io/]]</li>
<li>Encrypt and Unencrypt ~TiddlyWiki's and attachments</li>
<li>Publish and Manage IPNS Names and Keys</li>
<li>Interact with [ext[Metamask|https://metamask.io]] Ethereum wallets</li>
<li>Publish to [ext[ENS|https://ens.domains]]</li>
<li>Share over [ext[IPFS|https://ipfs.io/]] ~TiddlyWiki's [ext[Tiddlers|https://tiddlywiki.com/#Tiddlers]] and attachments</li>
</ul>
<h3>Project</h3>
<ul>
<li>Project
<ul><li>[ext[IPFS with TiddlyWiki GitHub|https://github.com/xmaysonnave/tiddlywiki-ipfs/]]</li></ul>
</li>
<li>Resolve ENS with IPFS with ~TiddlyWiki
<ul>
<li><$ipfslink value="bluelightav.eth"/></li>
</ul>
</li>
<li>Resolve ENS with [ext[Metamask|https://metamask.io]]
<ul><li>[ext[https://bluelightav.eth]]</li></ul>
</li>
<li>Resolve ENS without a browser extension
<ul>
<li>[ext[https://bluelightav.eth.link]]</li>
</ul>
</li>
</ul>
<p>
To install the plugin drag and drop the following link [[IPFS with TiddlyWiki|$:/plugins/ipfs]] to your <b>~TiddlyWiki</b>.
</p>
<p>
<b>~TiddlyWiki</b>
</p>
<ul>
<li>[ext[TiddlyWiki|https://tiddlywiki.com]]</li>
<li>[ext[TiddlyWiki5 GitHub|https://github.com/Jermolene/TiddlyWiki5/]]</li>
</ul>
<p>
See the <b>IPFS with ~TiddlyWiki</b> [[README.md |https://github.com/xmaysonnave/tiddlywiki-ipfs/blob/master/README.md]] for additional details.
</p>
<h3>Community</h3>
<ul>
<li><b>ENS</b>:
<ul>
<li><b>Forum</b>:
<ul>
<li>[ext[Discourse|https://discuss.ens.domains/]]</li>
</ul>
</li>
</ul>
</li>
<li><b>Ethereum</b>:
<ul>
<li><b>Forum</b>:
<ul>
<li>[ext[Community|https://forum.ethereum.org/]]</li>
</ul>
</li>
</ul>
</li>
<li><b>IPFS</b>:
<ul>
<li><b>Forum</b>:
<ul>
<li>[ext[Discussion and Support Forum|https://discuss.ipfs.io/]]</li>
</ul>
</li>
</ul>
</li>
<li><b>~TiddlyWiki</b>:
<ul>
<li><b>[ext[Discord|https://discordapp.com/]]</b>:
<ul>
<li>[ext[TiddlyWiki 5|https://discord.gg/7TEuTvk]]</li>
</ul>
</li>
<li><b>[ext[Gitter|https://gitter.im]]</b>:
<ul>
<li>[ext[TiddlyWiki Public|https://gitter.im/TiddlyWiki/public]]</li>
<li>[ext[TiddlyWiki Developer and Geeks|https://gitter.im/TiddlyWiki/developers-and-geeks]]</li>
<li>[ext[TiddlyWiki Servers and Savers|https://gitter.im/TiddlyWiki/servers-and-savers]]</li>
</ul>
</li>
<li><b>[ext[Google Groups|https://groups.google.com]]</b>:
<ul>
<li>[ext[TiddlyWiki|https://groups.google.com/forum/#!forum/tiddlywiki]]</li>
<li>[ext[TiddlyWikiDev|https://groups.google.com/forum/#!forum/tiddlywikidev]]</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>
See the [[IPFS Saver Settings|$:/core/ui/ControlPanel/Saving/Ipfs]] for more options.
</p>